股票行情哪家強?

0、寫在前面

李笑來老師在他的「如何選一個好股票」一文中說道:

互聯網迅猛發展的這些年裡,有若干家公司已然成了巨頭,我就給它們杜撰了一個縮寫——「GAFATA」。它們分別是:

  • Google
  • Amazon
  • Facebook
  • Apple
  • Tencent
  • Alibaba

打個比方,如果互聯網是個「終於建成了的新世界」的話,那麼GAFATA就是這個「新世界」里的「房地產巨頭公司們」,它們提供一切互聯網上商業運轉的基礎設施與服務,包括數據、雲、計算、支付、交易、社交......所以,它們中的每一個都已經徹底佔據了「壟斷性優勢」,於是,在相當長一段時間裡,它們的賺錢能力就是最強,弄不好越來越強。

這篇文章就是利用Python對「GAFATA」這6家互聯網公司的股票數據進行簡單的分析。

1、安裝數據分析包

首先,我們需要在py3環境中安裝 pandas-datareader 包,可以按照下面的步驟安裝:

  1. 先在conda中進入你notebook文件使用的python環境,例如你在notebook中使用的環境名稱是py3, 那麼conda命令就是:activate py3
  2. 在你使用的python環境下安裝數據分析pandas包和互聯網數據獲取包pandas-datareader,conda命令是:conda install pandas-datareader.

如果conda安裝不成功,可以試試pip安裝命令:pip install pandas-datareader

這裡有一個大家普遍遇到的問題,就是Yahoo財經數據已經不可用了。我經過一番查找,終於在下面的網站里找到了解決辦法:

fix-yahoo-finance?

pypi.org圖標

其實只要再安裝一個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)

以後想看哪個感興趣的公司的股票情況,直接就可以在字典里添加公司名及其代碼就行,非常方便。下面給出我查找股票代碼的網址:

美股列表?

vip.stock.finance.sina.com.cn

到此,關於股票的數據分析就先告一段落,這裡只是利用python進行了簡單的分析。先留一個大致的印象,後面的闖關還會詳細地講解如何用Python的第三方包 numpy、pandas 和matplotlib 對數據進行詳細的分析和可視化,並生成數據分析報告。我個人還是很期待!


推薦閱讀:

減稅國策分析,看長做短!
最實用的跟庄指標:籌碼分布,會用的都說好!
一位炒股天才盈利多年,只因領悟了超短線炒股11則買賣鐵律
中央經濟會議個人解析(2)
11.22 午評:大票行情延續

TAG:金融 | 股票 | 數據分析 |