1. 程式人生 > >【手把手教你】Python獲取財經資料和視覺化分析

【手把手教你】Python獲取財經資料和視覺化分析

內容來自:微信公眾號:python金融量化
關注可瞭解更多的金融與Python乾貨。

“巧婦難為無米之炊”,找不到資料,量化分析也就無從談起。對於金融分析者來說,獲取資料是量化分析的第一步。Python的一個強大功能之一就是資料獲取(爬蟲)。但是對於沒時間學爬蟲程式的小白來說,python豐富的開源包為我們節省了不少時間精力,只要會用前人的車輪(wheel),就可以造就自己的車(py)。

【誰來教我python入門?】
對於python零基礎的童鞋怎麼辦?莫慌,關注公眾號CuteHand,並回復python入門,奉上python的程式安裝和入門應用指南。對於python的高階學習,如資料分析挖掘、機器學習和量化投資,請繼續關注公眾號的動態。

【tushare財經資料包安裝】
Tushare是一個免費、開源的python財經資料介面包,可以獲取新浪財經、騰訊財經、上交所和深交所提供的資料。如果安裝了Anaconda(建議),可以使用Anaconda Prompt或者通過win+R輸入cmd調出dos操作介面,輸入pip install tushare進行安裝。如果沒有pip或pip3,可以先用conda install pip (或pip3)安裝。

【獲取巨集觀經濟資料】
Tushare包可以獲取巨集觀經濟資料、股票交易資料、基本面資料(公司盈利能力、業績報告等)、新聞事件、銀行間同業拆放利率等,下面著重介紹使用tushare包獲取巨集觀經濟資料和視覺化分析。

1、引入需要的包(模組module):import xxx
其中,pandas和matplotlib分別是資料處理和畫圖常用的包,%matplotlib inline表示在Jupyter Notebook上直接顯示圖形(%magic函式),如果使用spyder來執行程式則不需要,但要加上plt.show()。as意味著後面呼叫這些包將分別使用縮寫ts、pd、plt。

2、獲取所需資料
tushare獲取資料的命令為get_xx,xx為相應指標名字,很直觀。如獲取存款利率命令為ts.get_deposit_rate(),貸款利率ts.get_loan_rate(),存款準備金率ts.get_rrr()。下面主要以CPI、GDP、M1、M2為例進行分析。
在這裡插入圖片描述


3、儲存到本地資料夾
使用to_csv將資料儲存到本地c:/zjy/data/cpi.csv。
在這裡插入圖片描述

4、讀取資料和視覺化
使用pandas讀取剛剛儲存的資料,注意pandas的縮寫是pd,程式碼如下。
在這裡插入圖片描述
輸出圖形如下:
在這裡插入圖片描述

從上圖中可以清晰地看出,93、94年出現超20%的高通貨膨脹,當時還伴隨著資產價格泡沫,“股票熱”、“期貨熱”、“房地產熱”。以史明鑑,可以知興替。我們當時是怎麼走過這一段風雨飄搖歷程的,Very interesting!回顧歷史,有很多值得我們反思和借鑑的地方。此處不詳細展開分析,對當時經濟金融形勢和ZF如何治理巨集觀風險感興趣的童鞋,可以翻閱這一時期的歷史資料學習下。
再來看看貨幣供應量M1和M2的情況。首先了解下貨幣供應量的幾個指標含義。根據貨幣金融學和央行實踐,整個經濟體系的貨幣供應大致可分為M0、M1、M2及M3。
M0:居民持有的貨幣(即市場上流通的貨幣)。
M1:居民持有的貨幣+銀行客戶的活期存款。M1又稱為狹義貨幣供應量。
M2:M1+銀行客戶的儲蓄及定期存款,以及由銀行發行的可轉讓存款證(由非銀行持有),又稱為廣義貨幣供應量。
M3:M1+M2+有限制牌照銀行及接受存款公司的客戶存款,及由上述機構發行的存款證(由非銀行持有)。
從M1與M2的定義可見,兩者的差異只在於M1不包括儲蓄存款和定期存款,因此M1與M2增幅的差異,應由儲蓄存款和定期存款變動所引起。M1反映居民和企業資金鬆緊變化,是經濟週期波動的先行指標,流動性僅次於M0;M2流動性偏弱,但反映的是社會總需求的變化和未來通貨膨脹的壓力狀況,通常所說的貨幣供應量,主要指M2。
在這裡插入圖片描述

其中:month :統計時間,m2 :貨幣和準貨幣(廣義貨幣M2)(億元),m2_yoy:貨幣和準貨幣(廣義貨幣M2)同比增長(%) ,m1:貨幣(狹義貨幣M1)(億元),m1_yoy:貨幣(狹義貨幣M1)同比增長(%),m0:流通中現金(M0)(億元),m0_yoy:流通中現金(M0)同比增長(%),其他指標省略。
在這裡插入圖片描述

使用pandas讀取資料並進行資料清洗。
在這裡插入圖片描述

輸出結果如下:
在這裡插入圖片描述

對M1和M2資料進行視覺化,並與重大經濟金融事件聯絡起來,這裡主要加入1997年的亞洲金融危機、2007年開始的美國次貸危機、2009年的四萬億刺激計劃和2017年的金融去槓桿。程式碼如下(注意:資料儲存在df變數上,畫圖包matplotlib.pyplot已經使用plt來代替):
在這裡插入圖片描述

得到如下結果:
在這裡插入圖片描述

從上圖可以發現,我國ZF推行的“四萬億刺激計劃”使M2和M1的增長率達到峰值,而2017年以來,隨著金融去槓桿,M2增長率一直處於下滑中。很遺憾,由於資料缺失,不能與前面93、94年高通貨膨脹時期聯絡起來看。
再來看下貨幣供應量和GDP年度變化情況。首先,獲取M2、M1和GDP年度資料,並計算M2/GDP、M1/GDP資料。程式碼如下:
在這裡插入圖片描述

經過資料處理後進行視覺化分析:

在這裡插入圖片描述
在這裡插入圖片描述

從上圖不難看出,M2/GDP總體上是曲折上升的,從1990年的不到90%到2017年的接近220%。2017年以來,儘管經濟增長一直處於下行空間,但在金融去槓桿的影響下,廣義貨幣供應量持續下滑,導致M2/GDP出現下降趨勢。
很多“專家”會經常使用M2/GDP指標來解讀經濟質量、通脹和危機,認為M2越高,貨幣發行量越大,所以通脹越嚴重;M2/GDP越高,GDP增長需要M2越高,貨幣供給不足,GDP增速會下降。特別是當2009年後中國M2絕對值超過美國,更為各界詬病,普遍認為中國存在巨大的貨幣隱患,它可能導致通脹失控、產生泡沫甚至經濟危機。
那麼到底中國M2/GDP高企的本質是什麼?成因何在?是不是導致中國通脹的根本原因?它對經濟和金融系統穩定究竟有多大危害?這些都是值得進一步探討的問題。
從現有文獻來看,M2/GDP並不存在所謂的最優比例,而且由於種種客觀原因,不同經濟體之間並不具備可比性。儘管M2/GDP指標通常反映了金融機構發展在市場中的重要程度或者對於個人儲蓄的貢獻,但作為傳統的金融深化指標,兩者只在成熟金融系統中呈正相關趨勢,在一個借貸受限制的不成熟市場中,兩者往往反而是負相關趨勢。Elhiraika研究指出M2/GDP對於金融深化的衡量可能並不貼切,因為M2/GDP畸高可能是金融市場不發達的訊號,而高度成熟的金融市場這一比例反而較低,因為後者通常持有與之經濟相適應的貨幣量。Shunsuke Bando(1998)的分析中還注意到,對M2/GDP的分析必須結合M1/GDP這一比例,在M1/GDP穩定增長下的M2/GDP的增長才反映了亞洲經濟體市場下金融機構提供相對長期的資金,如從家庭儲蓄向工業部門的轉移,但也須注意到,資本的非完全有效給這一分析帶來的偏差,如資產泡沫、銀行不良貸款的積澱等。並且,只有在扣除通貨膨脹因素之後才能得到Marshallian K的真實增長率。
最後再來看下消費、投資、淨出口三大需求對GDP增速的貢獻率情況。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
這裡發現一個有趣的現象,淨出口貢獻率大多時候是負的,但這並不意味著外貿在拖經濟後退。實際上,淨出口貢獻率這一概念只有統計意義,沒有經濟意義。用這個指標來衡量,會低估外貿對經濟增長的貢獻度。根據經濟學理論,一國國內生產總值(GDP)可分解為總投資、總消費和淨出口(包括貨物出口及服務出口)三個部分。淨出口是指出口額與進口額之差,淨出口對經濟增長的貢獻率是指淨出口增量與GDP增量之比,即:淨出口對GDP增長的貢獻率=淨出口增量/GDP增量×100%。
最後再分享一個獲取實時電影票房的資料結束本次話題。
在這裡插入圖片描述

【結語】
本文主要介紹瞭如何使用Python的開源包tushare獲取巨集觀經濟資料,以及利用pandas和matplotlib包對資料進行清洗和視覺化分析。對問題的深入分析,還得結合理論(邏輯)+歷史(縱向比較)+統計(資料和計量分析)。Python是我們獲取和分析資料的實用工具,為驗證分析邏輯或理論的正確與否提供了一個重要維度,即用資料說話,透過資料看世界。
最後分享兩本Python的高清pdf教程:《Python金融大資料分析》和《零起點Python大資料與量化交易》,只要掃描下面二維碼,關注公眾號CuteHand並回復“python金融大資料與量化”,就可以免費下載了。
在這裡插入圖片描述

【關於CuteHand】
CuteHand是深度學習的智慧助手,具有講笑話、故事(如輸入經濟學小故事)、中英翻譯、查詢等功能。除了上述互動聊天服務,還會分享與經濟金融前沿熱點相關的分析框架、讀書筆記,以及Python資料分析與量化投資等。