基于Pandas+ECharts的金融大數據可視化實現方案
前言
最近無意中看到一篇文章,介紹的是在IPython Notebook里實現ECharts的可視化效果。我個人對ECharts一直是推崇有加,是baidu發布的開源項目中我比較喜歡的一個,絕對是良心之作了。所以,看到這篇文章著實小激動了一把。
今天借花獻佛,利用金融證券數據,舉幾個小例子,給大家分享一下實現過程。順便告訴大家,怎么在tushare里調用前十大股東及流通股東數據的接口。
1 ECharts介紹
以下摘自ECharts官網的介紹:
ECharts,一個純 Javascript 的圖表庫,可以流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器,底層依賴輕量級的 Canvas 類庫 ZRender,提供直觀,生動,可交互,可高度個性化定制的數據可視化圖表。
ECharts 3 中更是加入了更多豐富的交互功能以及更多的可視化效果,并且對移動端做了深度的優化。
ECharts的成名,得益于幾年前百度人口遷徙大數據效果的展示,當年看到那個基于地圖連線忽閃忽閃的效果,簡直了,太高大上了。最近一年在北京偶爾拜訪一些所謂的大數據公司,進門顯眼位置看見的那些大屏幕數據展示,估計很多都是基于ECharts開發的。
2 與Python的結合
ECharts主要是應用在web和app領域,跟Python應用的結合,目前在Django,Flask等web框架里更為常見。今天要介紹的,也是在IPython Notebook里基于web的效果展示,而在IPython qtconsole等環境下似乎無能為力。
實際上,在IPython Notebook里使用ECharts相比純web開發環境,要復雜麻煩一些。但是在IPython Notebook里作為除matplotlib以外的數據可視化方案,ECharts或許可以成為一個強有力候補。尤其是在基于國內地圖、關系圖、桑基圖等方面的數據展示上,ECharts完全可以擔當大任,游刃有余。
3 實現原理
在IPython Notebook里,有一個display的模塊,可以實現HTML效果的展示。而最核心的條件是notebook自帶一個JS模塊,可以通過RequireJS動態導入js腳本并執行。
我們先來看看HTML代碼在IPython notebook里簡單的實現效果:
通過RequireJS,引入ECharts包
然后配置echarts熟悉和數據
4 圖表效果實例
這里只給大家展示K線圖、折線圖和餅圖的效果,只揭示實現原理和過程,具體的代碼優化和圖表功能的完善,可以自行研究ECharts的相關資料來改進。
要實現這三類圖表,這里借用股票日線行情數據、前十大股東持股占比數據和前十大流通股東持股比例來舉例。(請將tushare升級到最新版。)
1、K線圖效果
通過tushare的get_k_data獲取日線前復權數據,這里通過中國聯通來演示。根據上文的實現原理,我們運行代碼后可以看到如下效果。
2、折線圖效果
演示的折線圖效果實際是我選用了關系圖進行了改造,常規的折線圖大家可以參考ECharts官網的代碼。
這里我用到了tusahre的新數據接口“十大流通股東”數據來做演示,數據包括了前十大股東和十大流通股東歷年各季度的持股數量和占比。折線圖我用前十大股東歷年持股占比情況來演示。
根據線圖實現的代碼,運行后,效果如下:
3、餅圖效果
餅圖用到了前十大流通股數據,選用浦發銀行2016年第三季度的數據作為示例。
對前十大流通股東數據安裝ECharts數據格式進行處理,代碼大致如下
完整執行后,可以看到最終效果圖。
5 總結
ECharts實際可以大大豐富Python的圖表和展示效果。但是要想用好,需要對ECharts的用法有所了解,特別是要實現自定義的圖表的時候,更要對底層代碼進行研究。
這里有三個應用方面的小技巧分享一下:
1、選定圖表后,在ECharts的官網里進行代碼修改和效果調試,直到滿意。(如果有條件,這一步可以交給前端工程師)
2、根據已經完成的代碼模板,將數據部分在IPythong notebook里用經過了pandas和Python數據清洗處理后的數據進行替換。
3、如果在IPython notebook里無法出現圖表效果,檢查數據結構是否正確。可以將代碼和數據重新拷貝到ECharts的調試器里進行檢查。
來自:https://zhuanlan.zhihu.com/p/25584144