我从雅虎财务部门获取了股票数据,调整后的近似数据在某种程度上是错误的。
adj_close close ratio
date
2014-10-16 240.4076 2466.40 0.097473
2014-10-17 245.8173 2521.90 0.097473
2014-10-20 250.4522 2569.45 0.097473
2014-10-21 251.8850 2584.15 0.097473
2014-10-22 251.0175 2575.25 0.097473
2014-10-23 251.3392 2578.55 0.097473
2014-10-27 253.2155 2597.80 0.097473
2014-10-28 258.9616 2656.75 0.097473
2014-10-29 257.6944 2643.75 0.097473
2014-10-30 257.1339 2638.00 0.097473
2014-10-31 26.3450 2702.80 0.009747
2014-11-03 26.5463 2723.45 0.009747
2014-11-05 27.1160 2781.90 0.009747
2014-11-07 26.7320 2742.50 0.009747
2014-11-10 26.7027 2739.50 0.009747
这是调整后的近似数据图:
如何使用插值等方法替换此类数据?
答案 0 :(得分:3)
试试这个:
In [71]: import pandas_datareader.data as web
In [110]: df = web.DataReader('SBIN.NS', 'yahoo', '2014-10-21', '2014-11-25')
In [111]: df
Out[111]:
Open High Low Close Volume Adj Close
Date
2014-10-21 2580.0000 2607.0001 2569.5999 2584.1501 15022300 251.8850
2014-10-22 2608.9999 2613.5999 2565.1001 2575.2499 14511100 251.0175
2014-10-23 2591.4001 2593.7000 2573.9999 2578.5501 2376200 251.3392
2014-10-24 2578.5501 2578.5501 2578.5501 2578.5501 0 251.3392
2014-10-27 2592.0001 2619.8999 2581.0001 2597.8000 13429500 253.2155
2014-10-28 2607.9999 2664.2999 2606.0001 2656.7499 22963400 258.9616
2014-10-29 2677.0001 2678.9999 2631.0001 2643.7500 17372900 257.6944
2014-10-30 2649.8999 2653.0499 2622.0001 2637.9999 15544200 257.1339
2014-10-31 265.2000 270.9800 264.6000 270.2800 20770200 26.3450 # <bad_data>
2014-11-03 270.6000 274.3500 269.4250 272.3450 17780600 26.5463
2014-11-04 272.3450 272.3450 272.3450 272.3450 0 26.5463
2014-11-05 273.3000 279.9800 272.4050 278.1900 26605100 27.1160
2014-11-06 278.1900 278.1900 278.1900 278.1900 0 27.1160
2014-11-07 277.5000 278.1000 273.0000 274.2500 18163000 26.7320
2014-11-10 275.9000 276.9000 273.3000 273.9500 12068800 26.7027
2014-11-11 274.7900 276.2500 270.5000 274.0350 17405900 26.7110
2014-11-12 275.3000 277.1500 273.5550 274.6050 16233200 26.7666
2014-11-13 275.6100 276.2250 269.5000 271.9300 16859000 26.5059
2014-11-14 273.0000 280.6900 272.0000 278.7850 50846600 27.1740
2014-11-17 279.4000 295.1300 279.2200 294.0600 49164100 28.6629
2014-11-18 295.6950 297.9000 292.4100 294.5750 32898300 28.7131
2014-11-19 294.9000 296.8000 290.3550 291.0500 20735900 28.3695 # </bad_data>
2014-11-20 294.7500 298.7500 291.2500 297.1000 18099500 289.5925
2014-11-21 299.9000 307.0000 297.2500 305.5000 21009200 297.7802
2014-11-24 307.8000 309.8500 306.0500 308.8500 18631400 301.0456
2014-11-25 309.9000 309.9500 301.0000 304.4500 26776600 296.7568
注意:Adj Close
列已从<{1}}开始已恢复,其他列不,因此我将专注于{{仅限1}}:
让我们查找异常值(我检查前一天2014-11-20
已更改的那些 - 您可能想要更改此阈值):
Adj Close
这是另一个使用插值的解决方案:
50+%
答案 1 :(得分:1)
问题并不完全是数据......问题是你还没有理解这里的市场基本面。因此,我们不应将其视为数学问题(“替换异常值”),而应将其视为数据采购/清理问题(修复数据)。
您正在查看的股票代码是SBIN.NS(印度国家银行)。它在2014-11-21进行了1:10分割,如下所示:http://articles.economictimes.indiatimes.com/2014-11-20/news/56304010_1_india-gains-state-bank-stock-split
您已清楚显示的图表显示该日期雅虎数据出现问题。
那发生了什么?
第一次停产是在2014-10-31,雅虎显示价格降至1:10。这显然是一个错误。我猜他们的自动化企业行动解析器在该日期获得了待处理的1:10拆分的通知,并立即应用它而不是2014-11-21的记录日期。因此,从2014-10-31到2014-11-20(含),您的错误价格为10倍。
在这种情况下,除非您可以从其他来源获取数据,否则最好的解决方案是简单地记下此错误,并将错误日期的雅虎价格乘以10。