python分析股票数据_Python数据可视化——股票数据分析
1.背景
GAFATA,它表示的是GOOGLE,AMAZON,FACEBOOK,APPLE,TENCENT,ALIBABA這六家互聯網巨頭的首字母縮寫。本文主要分析GAFATA這六家公司股票近一年的的漲跌情況。
2.過程
先使用conda安裝:
1)在python環境下安裝數據分析pandas包,和互聯數據獲取包pandas-datareader
#導入包
#數據分析包
import pandas as pd
'''互聯數據獲取包注意:安裝包的命令中的連接符是‘-’也就是pandas-datareader。但是這里導入包的連接符是下劃線‘_’,也就是pandas-datareader這里一定要注意安裝和導入包這兩個連接符是不一樣的,不然無法導入使用'''
from pandas_datareader import data
# 存在的問題:由于是從國外獲取股票數據,會由于網絡不穩定,獲取數據失敗,多運行幾次這個cell就好了
'''獲取國內股票數據的方式是:“股票代碼”+“對應股市”(港股為.hk,A股為.ss)例如騰訊是港股是:0700.hk'''
#字典:6家公司的股票
gafataDict={'谷歌':'GOOG','亞馬遜':'AMZN','Facebook':'FB',
'蘋果':'AAPL','阿里巴巴':'BABA','騰訊':'0700.hk'}
'''定義函數函數功能:計算股票漲跌幅=(現在股價-買入價格)/買入價格輸入參數:column是收盤價這一列的數據返回數據:漲跌幅'''
def change(column):
#買入價格
buyPrice=column[0]
#現在股價
#column.size是總共數據條數,序號是從0開始的,所以最后一條數據的序號是總數目-1
curPrice=column[column.size-1]
#累計漲跌幅
priceChange=(curPrice-buyPrice)/buyPrice
#判斷股票是上漲,還是下跌
if(priceChange>0):
print('股票累計上漲=',priceChange*100,'%')
elif(priceChange==0):
print('股票累沒有變化=',priceChange*100,'%')
else:
print('股票累計下跌',priceChange*100,'%')
#返回數據
return priceChange
阿里巴巴
'''get_data_yahoo表示從雅虎數據源獲取股票數據,官網使用操作文檔:http://pandas-datareader.readthedocs.io/en/latest/remote_data.html可能存在的問題:1)由于是從國外獲取股票數據,會由于網絡不穩定,獲取數據失敗,多運行幾次這個cell就好了2)如果多運行幾次還是無法獲的股票數據,使用這個鏈接里的方法:https://pypi.org/project/fix-yahoo-finance/0.0.21/3)如果經過上面2個方法還不行,打開這個官網使用文檔(http://pandas-datareader.readthedocs.io/en/latest/remote_data.html),換其他的財經數據源試試'''
# 獲取哪段時間范圍的股票數據
start_date = '2017-11-15'
end_date = '2018-11-15'
#從雅虎財經數據源(get_data_yahoo)獲取阿里巴巴股票數據
babaDf=data.get_data_yahoo(gafataDict['阿里巴巴'],start_date, end_date)
#或者從Morningstar數據源獲取阿里巴巴數據
#babaDf=data.DataReader(gafataDict['阿里巴巴'],'morningstar',start_date, end_date)
'''每日股票價位信息Open:開盤價High:最高加Low:最低價Close:收盤價Volume:成交量下面我們主要關注每日的收盤價'''
#查看前5行數據
babaDf.head()
#股票數據的行索引是時間序列類型,記錄每天的股票信息
babaDf.index
DatetimeIndex(['2017-11-14', '2017-11-15', '2017-11-16', '2017-11-17',
'2017-11-20', '2017-11-21', '2017-11-22', '2017-11-24',
'2017-11-27', '2017-11-28',
...
'2018-11-02', '2018-11-05', '2018-11-06', '2018-11-07',
'2018-11-08', '2018-11-09', '2018-11-12', '2018-11-13',
'2018-11-14', '2018-11-15'],
dtype='datetime64[ns]', name='Date', length=254, freq=None)
#查看數據集情況
babaDf.info()
DatetimeIndex: 254 entries, 2017-11-14 to 2018-11-15
Data columns (total 6 columns):
Open 254 non-null float64
High 254 non-null float64
Low 254 non-null float64
Close 254 non-null float64
Adj Close 254 non-null float64
Volume 254 non-null int64
dtypes: float64(5), int64(1)
memory usage: 13.9 KB
#查看每一列數據類型
babaDf.dtypes
Open float64
High float64
Low float64
Close float64
Adj Close float64
Volume int64
dtype: object
#查看數據集描述統計信息
babaDf.describe()
#獲取收盤價Close這一列的數據
closeCol=babaDf['Close']
#調用函數,獲取漲跌幅
babaChange=change(closeCol)
股票累計下跌 -14.0656763214 %
谷歌
#獲取谷歌股票數據
googDf=data.get_data_yahoo(gafataDict['谷歌'],start_date, end_date)
googDf.head()
'''累計漲幅'''
#獲取收盤價Close這一列的數據
closeCol=googDf['Close']
#調用函數,獲取漲跌幅
googChange=change(closeCol)
股票累計上漲= 3.77290068226 %
亞馬遜
#獲取亞馬遜股票數據
amazDf=data.get_data_yahoo(gafataDict['亞馬遜'],start_date, end_date)
amazDf.head()
'''累計漲幅'''
#獲取收盤價Close這一列的數據
closeCol=amazDf['Close']
#調用函數,獲取漲跌幅
amazChange=change(closeCol)
股票累計上漲= 42.4510036094 %
#獲取Facebook股票數據
fbDf=data.get_data_yahoo(gafataDict['Facebook'],start_date, end_date)
fbDf.head()
'''累計漲幅'''
#獲取收盤價Close這一列的數據
closeCol=fbDf['Close']
#調用函數,獲取漲跌幅
fbChange=change(closeCol)
股票累計下跌 -19.2171615965 %
蘋果
#獲取蘋果股票數據
applDf=data.get_data_yahoo(gafataDict['蘋果'],start_date, end_date)
applDf.head()
'''累計漲幅'''
#獲取收盤價Close這一列的數據
closeCol=applDf['Close']
#調用函數,獲取漲跌幅
applChange=change(closeCol)
股票累計上漲= 11.7135569444 %
騰訊
#獲取亞馬遜股票數據
txDf=data.get_data_yahoo(gafataDict['騰訊'],start_date, end_date)
#騰訊是港股,所以這里的收盤價是港幣,按照今天的匯率將其轉化為美元
exchange=0.1278 #港幣兌換美元的匯率,這個值可以根據在網上查到當天的最新匯率
#為了方便后期多家公司的股價比較,增加新的一列收盤價(美元)
txDf['Close_dollar']= txDf['Close']* exchange
#txDf.dropna(axis=0,how='any',inplace=True)#(axis=0,how='any')
txDf.head()
'''累計漲幅'''
#獲取收盤價Close這一列的數據
closeCol=txDf['Close']
#調用函數,獲取漲跌幅
txChange=change(closeCol)
股票累計下跌 -28.3550929504 %
數據可視化
%matplotlib inline
#導入可視化包
import matplotlib.pyplot as plt
折線圖:繪制股票走勢
'''橫軸x是股票時間(babaDf.index是Pandas二維數據Dataframe的行索引,這里是時間序列)縱軸y是收盤價Close這一列數據plot默認是線條圖'''
babaDf.plot(x=babaDf.index,y='Close')
#x坐標軸文本
plt.xlabel('時間')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('2017年阿里巴巴股價走勢')
#顯示網格
plt.grid(True)
#顯示圖形
plt.show()
分析結果:通過圖中顯然可以看出阿里巴巴的股票價格總體趨勢是增長的,是值得投資的一家公司。
'''上面繪圖后,橫坐標沒有顯示出來,原因:1)先查看你的數據框索引是不是日期類型的,如果不是,將數據框索引轉換成日期類型的2)如果獲取數據來源,前面換成了數據源(morningstar),后面繪圖的時候需要重置索引,代碼如下:babaDf.reset_index(inplace=True)babaDf.set_index('Date',inplace=True)#查看索引是否重置成功babaDf.head()'''
"\n上面繪圖后,橫坐標沒有顯示出來,原因:\n1)先查看你的數據框索引是不是日期類型的,如果不是,將數據框索引轉換成日期類型的\n2)如果獲取數據來源,前面換成了數據源(morningstar),后面繪圖的時候需要重置索引,代碼如下:\n\nbabaDf.reset_index(inplace=True)\nbabaDf.set_index('Date',inplace=True)\n#查看索引是否重置成功\nbabaDf.head()\n\n"
散點圖:成交量和股價
'''我們給plot傳入的橫軸x坐標軸數據成交量這一列的數據,縱軸y坐標軸數據是收盤價這一列的數據,同時增加了一個參數叫kind這個值表示繪制圖形的類型,這里的值等于scatter表示繪制散點圖。kind取值(圖形類型)參考官方文檔:http://pandas.pydata.org/pandas-docs/stable/visualization.html'''
babaDf.plot(x='Volume',y='Close',kind='scatter')
#x坐標軸文本
plt.xlabel('成交量')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('成交量和股價')
#顯示網格
plt.grid(True)
#顯示圖形
plt.show()
#得到相關系數矩陣
babaDf.corr()
GAFATA股價走勢比較
#繪制谷歌的畫紙1
ax1=googDf.plot(x=googDf.index,y='Close')
#通過指定畫紙ax,在同一張畫紙上繪圖
#亞馬遜
amazDf.plot(ax=ax1,x=amazDf.index,y='Close')
fbDf.plot(ax=ax1,x=fbDf.index,y='Close')
#蘋果
applDf.plot(ax=ax1,x=applDf.index,y='Close')
#阿里巴巴
babaDf.plot(ax=ax1,x=babaDf.index,y='Close')
#騰訊
txDf.plot(ax=ax1,x=txDf.index,y='Close_dollar')
#x坐標軸文本
plt.xlabel('時間')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('2018年GAFATA股價累計漲幅比較')
#顯示網格
plt.grid(True)
plt.show()
'''使用label自定義圖例'''
#繪制谷歌的畫紙1
ax1=googDf.plot(x=googDf.index,y='Close',label='谷歌')
#通過指定畫紙ax,在同一張畫紙上繪圖
#亞馬遜
amazDf.plot(ax=ax1,x=amazDf.index,y='Close',label='亞馬遜')
fbDf.plot(ax=ax1,x=fbDf.index,y='Close',label='Facebook')
#蘋果
applDf.plot(ax=ax1,x=applDf.index,y='Close',label='蘋果')
#阿里巴巴
babaDf.plot(ax=ax1,x=babaDf.index,y='Close',label='阿里巴巴')
#騰訊
txDf.plot(ax=ax1,x=txDf.index,y='Close_dollar',label='騰訊')
#x坐標軸文本
plt.xlabel('時間')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('2018年GAFATA累計漲幅')
#顯示網格
plt.grid(True)
plt.show()
因為谷歌和亞馬遜的股價比較高,造成我們看不出其他4家公司的股票走勢。 所以根據股價我們可以將這6家公司分成2組,一組是股價較高的谷歌和亞馬遜。另外一組是股價較低的4家公司。
'''第1組:谷歌,亞馬遜'''
#繪制谷歌的畫紙2
ax2=googDf.plot(x=googDf.index,y='Close',label='谷歌')
#通過指定畫紙ax,在同一張畫紙上繪圖
#亞馬遜
amazDf.plot(ax=ax2,x=amazDf.index,y='Close',label='亞馬遜')
#x坐標軸文本
plt.xlabel('時間')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('2018年谷歌和亞馬遜累計漲幅')
#顯示網格
plt.grid(True)
plt.show()
'''第2組:4家公司'''
#繪制Facebook的畫紙3
#通過指定畫紙ax,在同一張畫紙上繪圖
ax3=fbDf.plot(x=fbDf.index,y='Close',label='Facebook')
#蘋果
applDf.plot(ax=ax3,x=applDf.index,y='Close',label='蘋果')
#阿里巴巴
babaDf.plot(ax=ax3,x=babaDf.index,y='Close',label='阿里巴巴')
#騰訊
txDf.plot(ax=ax3,x=txDf.index,y='Close_dollar',label='騰訊')
#x坐標軸文本
plt.xlabel('時間')
#y坐標軸文本
plt.ylabel('股價(美元)')
#圖片標題
plt.title('GAFATA2018年累計漲幅')
#顯示網格
plt.grid(True)
plt.show()
柱狀圖:六家公司股票的平均值
#6家公司股票收盤價平均值
gafataMeanList=[googDf['Close'].mean(),#谷歌
amazDf['Close'].mean(),#亞馬遜
fbDf['Close'].mean(),#Facebook
applDf['Close'].mean(),#蘋果
babaDf['Close'].mean(),#阿里巴巴
txDf['Close_dollar'].mean()#騰訊
]
#創建pandas一維數組Series
gafataMeanSer=pd.Series(gafataMeanList,
index=['谷歌',
'亞馬遜',
'Facebook',
'蘋果',
'阿里巴巴',
'騰訊'])
gafataMeanSer.plot(kind='bar',label='GAFATA')
#圖片標題
plt.title('2017年GAFATA股價平均值')
#x坐標軸文本
plt.xlabel('公司名稱')
#y坐標軸文本
plt.ylabel('股價平均值(美元)')
plt.grid(True)
plt.show()
分析結果:可以看出,僅從股票價格上來判斷,亞馬遜和谷歌的股票價格要遠遠的超過了其他四家。但是這里只是算的平均值,下面我們看下用四分位數繪制的箱線圖
#存放6家公司的收盤價
closeDf=pd.DataFrame()
#合并6家公司的收盤價
closeDf=pd.concat([closeDf,googDf['Close'],#谷歌
amazDf['Close'],#亞馬遜
fbDf['Close'],#Facebook
applDf['Close'],#蘋果
babaDf['Close'],#阿里巴巴
txDf['Close_dollar']#騰訊
],axis=1)
#重命名列名為公司名稱
closeDf.columns=['谷歌','亞馬遜','Facebook','蘋果','阿里巴巴','騰訊']
#closeDf.head()
#箱線圖
closeDf.plot(kind='box')
plt.grid(True)
plt.show()
總結
以上是生活随笔為你收集整理的python分析股票数据_Python数据可视化——股票数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机浏览器网址_「效率集」自定义网址导航
- 下一篇: python的加减乘除运算_python