在Python中分析和可视化股票数据

时间:2017-12-14 10:06:15

标签: python python-3.x python-2.7

嘿伙计们,我是数据科学的新手,想用python分析一些股票数据并将其可视化。我已经找到了一些下载数据并绘制它的示例,但我发现的大多数代码示例都已有几年的历史并且没有用。 我已经编写了一些代码来从微软获取一些数据,但它并没有为其他公司工作,我也不知道为什么。

import numpy as np
import pandas as pd
import datetime as dt
from sklearn import preprocessing
from datetime import datetime
from sklearn.ensemble import RandomForestClassifier
from sklearn import neighbors
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.svm import SVC
import operator
import pandas_datareader.data as web
import re
from dateutil import parser
import matplotlib as style
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates


def getStock(symbol, start, end):

df =  pd.io.data.get_data_yahoo(symbol, start, end)

df.columns.values[-1] = 'AdjClose'
df.columns = df.columns + '_' + symbol
df['Return_%s' %symbol] = df['AdjClose_%s' %symbol].pct_change()

return df

def getStockFromQuandl(symbol, name, start, end):


import Quandl
df =  Quandl.get(symbol, trim_start = start, trim_end = end, authtoken="your token")

df.columns.values[-1] = 'AdjClose'
df.columns = df.columns + '_' + name
df['Return_%s' %name] = df['AdjClose_%s' %name].pct_change()

return df

def getStockDataFromWeb(fout, start_string, end_string):


start = parser.parse(start_string)
end = parser.parse(end_string)

nasdaq = getStock('^IXIC', start, end)
frankfurt = getStock('^GDAXI', start, end)
london = getStock('^FTSE', start, end)
paris = getStock('^FCHI', start, end)
hkong = getStock('^HSI', start, end)
nikkei = getStock('^N225', start, end)
australia = getStock('^AXJO', start, end)

djia = getStockFromQuandl("YAHOO/INDEX_DJI", 'Djia', start_string, end_string) 

out =  pd.io.data.get_data_yahoo(fout, start, end)
out.columns.values[-1] = 'AdjClose'
out.columns = out.columns + '_Out'
out['Return_Out'] = out['AdjClose_Out'].pct_change()

return [out, nasdaq, djia, frankfurt, london, paris, hkong, nikkei, australia]

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1.plot(msft.index, msft, label='Microsoft')
ax1.plot(short_rolling_msft.index, short_rolling_msft, label='20 aufeinanderfolgende Tage')
ax1.plot(long_rolling_msft.index, long_rolling_msft, label='100 aufeinanderfolgende Tage')
ax1.set_xlabel('Jahr')
ax1.set_ylabel('Aktienpreis ($)')
ax1.legend()

plt.show()

理论上我认为可以将MSFT更改为例如AAPL或TSLA以显示Apple或Tesla。 当我这样做时,我失败了。

NameError: name 'aapl' is not defined

任何人都可以解释为什么这不起作用?如果你能帮我解释一下,我将非常感激。 顺便说一下,我使用的是Python 3.6。

1 个答案:

答案 0 :(得分:0)

msft还没有被定义......我猜你错过了一行:

msft=getStock("MSFT", start, end)

然后将msft或aapl定义为数据帧,msft.index将有意义......