1. 程式人生 > >python 股票市場分析實戰

python 股票市場分析實戰

說明:本文python股票市場分析實戰主要包括兩個方面,一是歷史趨勢分析,二是風險分析。聽著挺厲害,其實......咳,咳

實驗資料:來源於Yahoo Finance,網址:https://finance.yahoo.com ,該網站提供了很多API介面,讀取資料很方便,本文用的工具是pandas-datareader

實驗平臺:Anaconda3(包含很多做資料分析的包,如numpy,pandas,matplotlib,seaborn等等,但是不包括pandas-datareader,所以自己安裝一下,pip install...)

下面就正式開始吧!

1、獲取資料

#匯入工具包
import pandas_datareader as pdr
#獲取阿里巴巴股票資料
alibaba = pdr.get_data_yahoo("BABA")
#顯示資料前5行
alibaba.head()

獲取股票資料

太簡單了,是不是有點猝不及防。不過實踐過程中也可能會遇到各種錯誤的,對應著自己百度錯誤資訊吧(捂臉)。資料中adj close為已調整收盤價,volume 是交易量,估計都是股票中的術語吧,我也沒弄懂,其他的就好理解了,比如最高價,最低價。

接下來可以看看資料量,比如

alibaba.shape

看看資料基本資訊,比如

alibaba.info()

看看資料描述統計資訊,比如

alibaba.describe()

注:獲取的資料比較正規乾淨,基本不需要進行資料清洗,後面在各種計算中可能會遇到空值,到時候再刪除或者做其他處理,這裡就不多贅述了。

2、歷史趨勢分析

股票資料的歷史趨勢分析包括,繪製近幾年的股票資料變化趨勢圖,對比不同公司的股票價格變化,繪製每日股票波動情況等。此時需要的包,就不僅僅是讀取資料的pandas_datareader啦。

#基本資訊
import numpy as np
import pandas as pd
from pandas import Series,DataFrame

#股票資料讀取
import pandas_datareader as pdr

#視覺化
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

#時間
from datetime import datetime 

其中,numpy,pandas,matplotlib等為python資料分析中基礎包,基本涉及資料的都需要這些包。%matplotlib inline,在資料視覺化中使用,引入了這個魔法命令,就不用每次展示圖都寫一個plt.show()啦。datetime為了設定時間。

start = datetime(2015,8,24)
alibaba = pdr.get_data_yahoo("BABA",start = start)
amazon = pdr.get_data_yahoo("AMZN",start = start)
alibaba.head()

資料

同樣,可以執行amazon.head()檢視亞馬遜股票資料。本次對比的就是阿里巴巴和亞馬遜的股票資料,今天是8月24號,所以準備對比近3年的股票資料。

畫個圖吧,對adj close 畫一個折線圖,看看阿里巴巴股票近三年收盤價變化情況。

alibaba["Adj Close"].plot(kind="line",legend=True)

畫圖就要用的plot()方法,它有很多引數,大家可以在jupyter notebook中同時按住Shift+Tab鍵,檢視一下,本文中kind="line"表示畫折線圖,legend=True表示要帶圖例。其他屬性大家自行查閱。

收盤價趨勢圖

由近三年股票趨勢圖可以看出,阿里巴巴股票漲的還真不少,尤其是2017年增幅很快,同時也可以看出2018年狀況就沒有那麼理想了,就最近8月看價格趨勢是在下滑。影象很真實也很形象,但我分析的並不專業,估計專業炒股的應該能看出更多資訊。同理,大家可以看看其他資料列的變化趨勢,比如看看交易量近三年的變化情況,在此就不一一畫圖了。

下面將阿里巴巴資料和亞馬遜資料畫在同一張圖裡,我們對比看看。

#重新命名一下,方便設定圖例
alibaba["Ali_Adu Close"]=alibaba["Adj Close"]
amazon["Ama_Adj Close"] = amazon["Adj Close"]
#對比展示
alibaba["Ali_Adu Close"].plot(legend = True)
amazon["Ama_Adj Close"].plot(legend = True)

對比趨勢圖

其中無論是阿里巴巴還是亞馬遜資料列名字均為Adj Close,則圖中就不好區別哪條線是誰的。更改一個名字就方便看了,由圖可知橘色為亞馬遜收盤價變化趨勢線,藍色為阿里巴巴變化趨勢線。整體來看近三年兩者股票價格均升高,不過起始價格不一樣,增幅也不同。如果再進一步細分時間段,我們就能發現更多的變化情況。小夥伴們可以試試對比近一年的,一個季度的資料變化等。也可以畫一些差值變化線,比如計算每日最高價和最低價差值,儲存為新的一列資料,繪製該列資料近3年的變化情況。

3、風險分析

此處主要用到的就是對比分析,通過觀察多個企業股票近幾年對比變化情況,看哪個企業股票波動小,穩步增長,不同企業股票之間是否有升降相關關係,如果你也有投資資金,可以分析過後考慮買點這個股票,股市有風險,入市需謹慎哦。哈哈哈,進入正題了。

首先都是匯入包,跟前面一樣,就不再上圖了。然後是匯入公司股票資料,選擇蘋果、谷歌 、微軟、亞馬遜、Facebook這五家公司,所以資料都匯入那資料量就有點大了,此處我們只分析Adj Close資料。

company = ['AAPL','GOOG','MSFT','AMZN','FB']
top_tech_df = pdr.get_data_yahoo(company)['Adj Close']
top_tech_df.head()

Adj Close資料

除了列舉資料,在算一下資料變化情況吧,呼叫pct_change(),這個函式用來計算同colnums下兩個相鄰的數字之間的變化率,以AAPL來說,就是計算後一天減去前一天的差值。

差值

再來畫個Adj Close資料折線圖吧,如下圖所示:

top_tech_df.plot()

五家公司五條資料折線圖

圖中資料就不做具體分析了,大家可以看看資料趨勢變化,紫色折線谷歌資料與綠色折線亞馬遜資料變化趨勢比較相近。

如要比較資料之間是否具有相關性,可以繪製一下差值資料散點圖,下面以谷歌和亞馬遜為例,繪製這連個公司的收盤價差值散點圖,看一下關聯關係。

sns.jointplot('AMZN','GOOG', top_tech_dr, kind='scatter')

差值散點圖

圖中箭頭為後加上去的,旨在方便大家觀察資料分佈情況。首先紫色箭頭方向為直線x=y,橫座標為亞馬遜差值,縱座標為谷歌差值,可見大多數的點都符合如下情況:即谷歌差值為正時(股票升了)亞馬遜差值也為正(也升了);谷歌差值為負時,亞馬遜也在跌。散點圖多分佈在x=y這條過原點的直線上。同時綠色箭頭方向,是散點圖分佈的寬度,寬度越窄,相關性越好。

下面,做一個所有公司的股票相關性比較:

sns.pairplot(top_tech_dr.dropna())

對比結果圖1對比結果圖2

一張圖太大了,放不下,小夥伴們將就看吧。五家公司任意兩家之間的對比資料,由散點圖可以看出,還是谷歌和亞馬遜之間的相關關係最好,資料趨勢更符合x=y,同時寬度也不誇張。其他圖中相關性就要弱一些。

總之,股票的漲跌受諸多因素的影響,可能有政策原因,大環境原因,企業內部原因,不同企業之間的相關性等等,真的不是一些資料就能準確預測的。

結束語:本文實戰案例參考了優達學城的資料分析課程而製作,優達學城的課程還是不錯的,大家可以找資源學習學習,網址:http://cn.udacity.com/,哈哈哈我是不是在打廣告了(捂臉)。溜了溜了