股票行情哪家強?
0、寫在前面
李笑來老師在他的「如何選一個好股票」一文中說道:
互聯網迅猛發展的這些年裡,有若干家公司已然成了巨頭,我就給它們杜撰了一個縮寫——「GAFATA」。它們分別是:
- Amazon
- Apple
- Tencent
- Alibaba
打個比方,如果互聯網是個「終於建成了的新世界」的話,那麼GAFATA就是這個「新世界」里的「房地產巨頭公司們」,它們提供一切互聯網上商業運轉的基礎設施與服務,包括數據、雲、計算、支付、交易、社交......所以,它們中的每一個都已經徹底佔據了「壟斷性優勢」,於是,在相當長一段時間裡,它們的賺錢能力就是最強,弄不好越來越強。
這篇文章就是利用Python對「GAFATA」這6家互聯網公司的股票數據進行簡單的分析。
1、安裝數據分析包
首先,我們需要在py3環境中安裝 pandas-datareader 包,可以按照下面的步驟安裝:
- 先在conda中進入你notebook文件使用的python環境,例如你在notebook中使用的環境名稱是py3, 那麼conda命令就是:
activate py3
; - 在你使用的python環境下安裝數據分析pandas包和互聯網數據獲取包pandas-datareader,conda命令是:
conda install pandas-datareader
.
如果conda安裝不成功,可以試試pip安裝命令:pip install pandas-datareader
。
這裡有一個大家普遍遇到的問題,就是Yahoo財經數據已經不可用了。我經過一番查找,終於在下面的網站里找到了解決辦法:
fix-yahoo-finance其實只要再安裝一個Yahoo財經數據獲取的修正包:fix_yahoo_finance ,然後執行一次修改代碼就可以正常使用 pandas-datareader 中獲取Yahoo財經數據的方法了。安裝修正包的命令是:
pip install fix_yahoo_finance --upgrade --no-cache-dir
OK!萬事俱備,只欠東風。接下來就該正式進行數據分析了。
2、導入數據分析包
# 導入數據分析包import pandas as pd# 導入獲取互聯網金融數據的包from pandas_datareader import data as pdr# 導入Yahoo財經數據獲取的修正包import fix_yahoo_finance as fyffyf.pdr_override()
3、建立涵蓋6家上市公司的字典
# 字典:6家公司的股票代碼gafataDict = {谷歌:GOOG,亞馬遜:AMZN,Facebook:FB, 蘋果:AAPL,阿里巴巴:BABA,騰訊:0700.hk}
4、確定獲取股票的時間段
# 獲取哪段時間範圍的股票數據start_date = 2017-04-29end_date = 2018-04-29
5、從雅虎財經獲取數據
這裡先以阿里巴巴為例,其他公司同理:
# 從雅虎財經數據源(get_data_yahoo)獲取阿里巴巴股票數據babaDf = pdr.get_data_yahoo(gafataDict[阿里巴巴], start_date, end_date)# 獲取如下輸出,說明數據下載成功[*********************100%***********************] 1 of 1 downloaded
6、輸出前5行數據
# 查看前5行數據babaDf.head(5)
每日股票價位信息
Open:開盤價High:最高價Low:最低價Close:收盤價Adj Close:復權收盤價Volume:成交量
我們主要關注每日的收盤價Close
7、查看數據集描述統計信息
# 查看數據集描述統計信息babaDf.describe()
8、判斷公司股價漲跌情況
定義函數函數功能:計算股票漲跌幅 =(現在股價 - 買入價格)/ 買入價格輸入參數: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) elif(priceChange == 0): print(股票累計沒有變化 =, priceChange) else: print(股票累計下跌 =, priceChange) # 返回數據 return priceChange
定義好函數之後,需要獲取收盤價這一列數據並調用函數計算漲跌幅:
# 獲取收盤價Close這一列的數據closeCol = babaDf[Close]# 調用函數,獲取漲跌幅babaChange = change(closeCol)
輸出結果是:
# 輸出股票累計上漲 = 0.5338528484848486
9、可視化展示
如果環境中還沒有安裝可視化包,我們需要在conda中使用命令安裝可視化包 matplotlib,conda命令如下:conda install matplotlib
# 導入繪圖包import matplotlib.pyplot as plt
# 使用收盤價Close這一列數據繪製plt.plot(babaDf[Close])# 圖片標題plt.title(BABA)# 顯示網格plt.grid(True)# 顯示圖片plt.show()
或者:
babaDf.plot(x = babaDf.index, y = Close)# 圖片標題plt.title(BABA)# 顯示網格plt.grid(True)# 顯示圖片plt.show()
10、封裝成函數進行分析
仔細審閱上述代碼,不難發現我們完全可以將這一大串代碼封裝成一個函數。我們可以通過input函數輸入公司名稱並傳遞給該函數直接完成繪圖,這樣就能提高一些效率,代碼也更清爽。
def stockmap(Companyname): import pandas as pd from pandas_datareader import data as pdr import fix_yahoo_finance as fyf import matplotlib.pyplot as plt fyf.pdr_override() start_date = 2017-04-29 end_date = 2018-04-29 gafataDict = {谷歌:GOOG,亞馬遜:AMZN,Facebook:FB,蘋果:AAPL,阿里巴巴:BABA,騰訊:0700.hk} companyDf = pdr.get_data_yahoo(gafataDict[Companyname], start_date, end_date) companyDf.plot(x = companyDf.index, y = Close) plt.title(gafataDict[Companyname]) plt.grid(True) plt.show() return Companyname
亞馬遜:
# 亞馬遜companyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
Facebook:
# Facebookcompanyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
蘋果:
# 蘋果companyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
谷歌:
# 谷歌companyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
騰訊:
# 騰訊companyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
11、拓展
我個人非常喜歡特斯拉這家公司,因為我是特斯拉創始人埃隆馬斯克的粉絲。我在網上找到了特斯拉公司的股票代碼:TSLA,可以利用上面所學的知識分析一下特斯拉最近一年的股票漲跌情況:
def stockmap(Companyname): import pandas as pd from pandas_datareader import data as pdr import fix_yahoo_finance as fyf import matplotlib.pyplot as plt fyf.pdr_override() start_date = 2017-04-29 end_date = 2018-04-29 companyDict = {特斯拉:TSLA} companyDf = pdr.get_data_yahoo(companyDict[Companyname], start_date, end_date) companyDf.plot(x = companyDf.index, y = Close) plt.title(companyDict[Companyname]) plt.grid(True) plt.show() return Companyname
還是利用上面定義的封裝函數 stockmap,在公司字典中加入特斯拉及其股票代碼。
companyname = input(請輸入一個公司中文名稱
)stockmap(companyname)
以後想看哪個感興趣的公司的股票情況,直接就可以在字典里添加公司名及其代碼就行,非常方便。下面給出我查找股票代碼的網址:
美股列表到此,關於股票的數據分析就先告一段落,這裡只是利用python進行了簡單的分析。先留一個大致的印象,後面的闖關還會詳細地講解如何用Python的第三方包 numpy、pandas 和matplotlib 對數據進行詳細的分析和可視化,並生成數據分析報告。我個人還是很期待!
推薦閱讀:
※減稅國策分析,看長做短!
※最實用的跟庄指標:籌碼分布,會用的都說好!
※一位炒股天才盈利多年,只因領悟了超短線炒股11則買賣鐵律
※中央經濟會議個人解析(2)
※11.22 午評:大票行情延續