Python应用实战-Python爬取4000+股票数据,并用plotly绘制了树状热力图(treemap)
?
目錄:
-
1. 準(zhǔn)備工作
-
2. 開始繪圖
-
2.1. 簡(jiǎn)單的例子
-
2.2. px.treemap常用參數(shù)介紹
-
2.3. color_continuous_scale參數(shù)介紹
-
2.4. 大A股市樹狀熱力圖來了
-
2.5. plotly圖片存本地
-
1. 準(zhǔn)備工作
我這邊是在jupyterlab中演示的plotly圖表,如果只安裝plotly是無法正常顯示圖表的(會(huì)顯示為空白),我們需要進(jìn)行以下準(zhǔn)備(以下命令均在cmd下操作即可):
#?安裝plotly庫及plotly-orca庫 pip?install?plotly pip?install?plotly?plotly-orca#?Basic?JupyterLab?renderer?support jupyter?labextension?install?jupyterlab-plotly#?OPTIONAL:?Jupyter?widgets?extension?for?FigureWidget?support jupyter?labextension?install?@jupyter-widgets/jupyterlab-manager?plotlywidget參考:https://github.com/plotly/plotly.py
關(guān)于本文用到的數(shù)據(jù)呢,大家可以參考《python爬取股票最新數(shù)據(jù)并用excel繪制樹狀圖》的爬蟲代碼自行爬取,或者公眾號(hào)回復(fù)0302獲取哈!
2. 開始繪圖
Treemap繪制方式有兩種,一種是在plotly.express下,一種是在go.Treemap下,我們這里用到的是前者。至于其中的區(qū)別,大概就是前者是高級(jí)版本,封裝了很多后者的復(fù)雜操作,可以直接用pandas.Dataframe類型,是現(xiàn)在主推的。更多差異大家可自行在實(shí)踐過程中感悟,畢竟才哥也說不太明白!
2.1. 簡(jiǎn)單的例子
plotly自帶很多測(cè)試數(shù)據(jù),我們用其中一個(gè)才試試簡(jiǎn)單的。
import?plotly.express?as?pxdf?=?px.data.tips() df.head()px.data.tips()
以上數(shù)據(jù)大致就是星期幾什么餐不同性別的人支付的金額和小費(fèi)數(shù)等,我們用1行代碼繪制簡(jiǎn)單的treemap如下:
fig?=?px.treemap(df,?path=['day',?'time',?'sex'],?values='total_bill') fig.show()簡(jiǎn)單的圖
可以看到在該樹狀圖中,層級(jí)依次是在path中順序的day、time和sex,而每個(gè)色塊面積大小就是values給定的total_bill。鼠標(biāo)懸停的時(shí)候,會(huì)出現(xiàn)更詳細(xì)的信息,畢竟plotly是可交互式的,這里不展開哈。
那么,px.treemap究竟還可以做什么呢?我們繼續(xù)往下看。
2.2. px.treemap常用參數(shù)介紹
讓我們直接在jupyterlab用?來獲取函數(shù)參數(shù)吧!
#?px.treemap?#?Signature: px.treemap(data_frame=None,?#?就是你要用到的數(shù)據(jù),names=None,?#?暫時(shí)不用values=None,?#?就是你色塊大小parents=None,?#?暫時(shí)也不用,和names組合出現(xiàn)吧ids=None,?#?暫時(shí)不用,后續(xù)暫時(shí)不用的字段我就不寫啦path=None,?#?層級(jí),依次排開color=None,?#?顏色,比如根據(jù)?漲跌幅字段來設(shè)置顏色color_continuous_scale=None,?#?自帶的顏色尺卡,后面會(huì)介紹range_color=None,?#?顏色范圍區(qū)間,超過就是兩端值color_continuous_midpoint=None,?#?顏色尺卡最中間?的值,比如漲跌幅中間設(shè)置為?0?最合適color_discrete_sequence=None,?color_discrete_map=None,hover_name=None,hover_data=None,?#?就是懸停時(shí)?顯示字段及其格式custom_data=None,?#?額外的想顯示的數(shù)據(jù)labels=None,title=None,?#?標(biāo)題咯template=None,width=None,?#?圖高h(yuǎn)eight=None,?#?圖長(zhǎng)branchvalues=None,maxdepth=None,? )對(duì)于更多參數(shù)的了解,大家可以自己???后看哈,蠻詳細(xì)的,就是純英文的我自己看著要結(jié)合翻譯軟件也蠻累。
2.3. color_continuous_scale參數(shù)介紹
上面我們提到過該參數(shù)為 我們 treemap圖色塊顏色使用的色卡,具體有哪些可選以及這些可選項(xiàng)都是啥樣呢?
我們?cè)?里找到了方向:
color_continuous_scale:?list?of?strStrings?should?define?valid?CSS-colors?This?list?is?used?to?build?acontinuous?color?scale?when?the?column?denoted?by?`color`?containsnumeric?data.?Various?useful?color?scales?are?available?in?the`plotly.express.colors`?submodules,?specifically`plotly.express.colors.sequential`,?`plotly.express.colors.diverging`and?`plotly.express.colors.cyclical`.我們?cè)趈upyterlab里調(diào)用里面提到的方法,很開心的發(fā)現(xiàn)了它們:
import?plotly #?大家不要急,一個(gè)個(gè)來,我這里預(yù)覽只截取了diverging的部分 plotly.express.colors.cyclical.swatches() plotly.express.colors.sequential.swatches() plotly.express.colors.diverging.swatches()diverging
由于在我們國家,綠色代表跌,紅色代表漲,尋覓了半天我選取了Geyser,當(dāng)然大家亦可自行選擇。
推薦選項(xiàng)
2.4. 大A股市樹狀熱力圖來了
基于以上的了解,發(fā)現(xiàn)差不多可以繪制圖了,那么來吧!
import?plotly.express?as?pxfig?=?px.treemap(df,?path=['板塊',?'企業(yè)名稱',],??#?指定層次結(jié)構(gòu),每一個(gè)層次都應(yīng)該是category型的變量values='市值(億)',?#?需要聚合的列名color='漲幅',?range_color?=?[-0.05,?0.05],?#?色彩范圍最大最小值hover_data=?{'漲幅':':.2%','市值(億)':':.2f'},?#?鼠標(biāo)懸浮顯示數(shù)據(jù)的格式height?=?1080,width?=?1920,color_continuous_scale='Geyser',color_continuous_midpoint=0?,?#?顏色變化中間值設(shè)置為增長(zhǎng)率=0) fig.update_traces(textinfo='label+value',textfont?=?dict(size?=?24))?#?顯示企業(yè)名稱和市值,字體24 fig.show()效果演示
2.5. plotly圖片存本地
這里是指圖片哦,不是html文件哈!
大家還記得我們?cè)跍?zhǔn)備工作中 安裝orca?,沒事,不記得的話,重新裝一下就行了。
pip?install?plotly?plotly-orca對(duì)于我們繪制好的plotly圖表對(duì)象,以下方式可以進(jìn)行本地保存。
import?plotly.io?as?piopio.write_image(fig,?'樹狀云圖png')當(dāng)然,要是覺得麻煩,其實(shí)你還可以直接點(diǎn)擊圖表最右上角的攝像頭進(jìn)行下載哈!
總結(jié)
以上是生活随笔為你收集整理的Python应用实战-Python爬取4000+股票数据,并用plotly绘制了树状热力图(treemap)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python应用实战-用Highchar
- 下一篇: Python应用实战- 爬虫基础入门知识