數(shù)據(jù)可視化的工具和程序庫已經(jīng)極大豐盛迫摔,當(dāng)你習(xí)慣其中一種或數(shù)種時(shí),你會(huì)干得很出色逝淹,但是如果你因此而沾沾自喜啄枕,就會(huì)錯(cuò)失從青銅到王者的新工具和程序庫。如果你仍然堅(jiān)持使用Matplotlib(這太神奇了)蚓耽,Seaborn(這也很神奇)渠牲,Pandas(基本,簡(jiǎn)單的可視化)和Bokeh步悠,那么你真的需要停下來了解一下新事物了签杈。例如,python中有許多令人驚嘆的可視化庫鼎兽,而且通用化程度已經(jīng)很高答姥,例如下面這五個(gè):
- Plotly
- Cufflinks
- Folium
- Altair + Vega
- D3.js(個(gè)人認(rèn)為最好的選擇,因?yàn)槲乙灿肑S寫代碼)
如果您了解并使用上面提到的庫谚咬,那么您就處于進(jìn)化的正確軌道上鹦付。它們可以幫助生成一些令人拍案的可視化效果,語法也不難择卦。一般來說敲长,我更喜歡Plotly+Cufflinks和 **D3.js. **以下詳細(xì)道來:
Plotly
Plotly是一個(gè)開源,交互式和基于瀏覽器的Python圖形庫秉继∨嗣鳎可以創(chuàng)建能在儀表板或網(wǎng)站中使用的交互式圖表(您可以將它們保存為html文件或靜態(tài)圖像)。Plotly基于plotly.js秕噪,而plotly.js又基于D3.js钳降,因此它是一個(gè)高級(jí)圖表庫,與Bokeh一樣腌巾,Plotly的 強(qiáng)項(xiàng)是制作交互式圖 遂填,有超過30種圖表類型, 提供了一些在大多數(shù)庫中沒有的圖表 澈蝙,如等高線圖吓坚、樹狀圖、科學(xué)圖表灯荧、統(tǒng)計(jì)圖表礁击、3D圖表、金融圖表等。 plotly最棒的一點(diǎn)是可以在Jupyter筆記本或獨(dú)立的HTML頁面中使用 哆窿。您也可以在他們的網(wǎng)站上在線使用它链烈,但我更喜歡離線使用它,您也可以將可視化保存為圖像挚躯,非常易于使用也非常實(shí)用强衡。
– 在Jupyter Notebook中使用Plotly的方法(離線)
首先,安裝plotly庫码荔。
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">pip install plotly
</pre>
然后打開jupyter筆記本并鍵入:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">from plotly import version
from plotly.offline import download_plotlyjs漩勤,init_notebook_mode,plot缩搅,iplot
init_notebook_mode(connected = True)
</pre>
語法超簡(jiǎn)單越败!在P andas中 ,你使用 *dataframe.plot *() 硼瓣,在這里眉尸,您使用 dataframe.iplot()。 這個(gè) “ ****i **” 改變了可視化的整個(gè)定義巨双。
只需一行代碼噪猾,我生成了下面這個(gè)散點(diǎn)圖。您可以根據(jù)需要自定義它筑累。請(qǐng)記住指定模式標(biāo)記袱蜡,否則您將獲得一些線條。
請(qǐng)注意坪蚁,隨著數(shù)據(jù)的增加,plotly會(huì)開始卡滯镜沽。所以敏晤,只有當(dāng)數(shù)據(jù)點(diǎn)的小于500K時(shí),我才會(huì)使用plotly缅茉。
Cufflinks
Cufflinks將Plotly直接綁定到pandas數(shù)據(jù)幀嘴脾。這種組合非常驚人,結(jié)合了Pandas的靈活性蔬墩,比Plotly更有效译打,語法甚至比plotly簡(jiǎn)單。使用plotly的Python庫拇颅,您可以使用DataFrame的系列和索引來描述圖形奏司,但是使用Cufflinks可以直接繪制它。正如下面這個(gè)例子:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">df = cf.datagen.lines()
py.iplot([{
'x':df.index樟插,
'y':df [col]韵洋,
'name':col
} <strong>for</strong> col <strong>in</strong> df.columns])
</pre>
with plotly
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">df.iplot(kind= 'scatter')
</pre>
with cufflinks
Cufflinks使得圖表繪制更加容易搪缨。您甚至還 可以使用Cufflinks生成令人驚嘆的3D圖表 食拜。我只用幾行代碼生成了下面這個(gè)3D圖表。
用Cufflinks生成的3D圖表
你可以隨時(shí)在Jupyter Notebook中試用它。
– 快速竅門:
在配置中設(shè)置:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">c.NotebookApp.iopub_data_rate_limit = 1.0e10
</pre>
按以下方式導(dǎo)入:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import plotly.graph_objs as go
import plotly.plotly as py
import cufflinks as cf
from plotly.offline import iplot旅赢,init_notebook_mode
cf.go_offline()
Set global theme
cf.set_config_file(world_readable = True齿桃,theme ='pearl',offline = True )
init_notebook_mode()
</pre>
接下來煮盼,我將談?wù)摿硪粋€(gè)神庫——Viz庫短纵。
Folium
Folium建立在Python生態(tài)系統(tǒng)的數(shù)據(jù)優(yōu)勢(shì)和Leaflet.js庫的映射優(yōu)勢(shì)之上。您可以在python中操作數(shù)據(jù)僵控,然后通過folium在Leaflet地圖中將其可視化香到。Folium是一個(gè)用于繪制空間數(shù)據(jù)的“神庫”。你還可以使用folium生成熱圖和等值區(qū)域圖报破。讓我們了解一下folium:
- 地圖定義為 folium.Map 對(duì)象悠就,可在folium頂部添加其他folium對(duì)象。
- 您可以為Folium渲染的地圖使用不同的地圖圖層充易,例如MapBox梗脾,OpenStreetMap和其他幾個(gè)圖層,你可以查看 此github庫文件夾 或 此文檔頁面 盹靴。
- 你還可以選擇不同的地圖投影炸茧。有許多投影可供選擇。
讓我們用美國失業(yè)的Geojson生成一個(gè)Choropleth地圖稿静。以下是片段:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">map = folium.Map([43, -100], zoom_start=4)
choropleth = folium.Choropleth(
geo_data=us_states,
data=state_data,
columns=['State', 'Unemployment'],
key_on='feature.id',
fill_color='YlGn',
name='Unenployment',
show=<strong>False</strong>,
).add_to(m)
<em># 底層的GeoJson和StepColormap對(duì)象是可訪問的</em>
print(type(choropleth.geojson))
print(type(choropleth.color_scale))
folium.LayerControl(collapsed=<strong>False</strong>).add_to(m)
map.save(os.path.join('results', 'GeoChoro.html'))
map
</pre>
這只是一個(gè)基本的地圖梭冠,你可以添加標(biāo)記,彈出窗口等等改备】啬可以是下面的樣子:
leaflet和folium生成的地圖
Altair + Vega
Altair是一個(gè)聲明性統(tǒng)計(jì)可視化庫悬钳,基于Vega和Vega-Lite润脸。
聲明意味著只需要提供數(shù)據(jù)列與編碼通道之間的鏈接,例如x軸他去,y軸毙驯,顏色等,其余的繪圖細(xì)節(jié)它會(huì)自動(dòng)處理灾测。聲明使Altair變得簡(jiǎn)單爆价,友好和一致垦巴。使用Altair可以輕松設(shè)計(jì)出有效且美觀的可視化代碼。
Altair使您能夠使用強(qiáng)大而簡(jiǎn)潔的可視化語法快速開發(fā)各種統(tǒng)計(jì)可視化圖表铭段。如果您使用的是Jupyter Notebook骤宣,則需要按以下方式安裝它。它還包括一些示例vega數(shù)據(jù)集序愚。
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">pip install -U altair vega_datasets notebook vega
</pre>
Altair主要依賴Vega憔披,為了使圖表在屏幕上可見,你需要安裝Vega爸吮,并且還需要為每個(gè)新會(huì)話運(yùn)行此命令:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">alt.renderers.enable(‘notebook’)
</pre>
Altair中的數(shù)據(jù)是圍繞Pandas Dataframe構(gòu)建的芬膝。統(tǒng)計(jì)可視化最明顯的特征是以整潔的Dataframes開始。您還可以將繪圖另存為圖像或在vega編輯器中打開它以獲得更多選項(xiàng)形娇。Altair可能不是最好的锰霜,但絕對(duì)值得一試。
下面這個(gè)例子桐早,我使用了汽車數(shù)據(jù)集;
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import altair as alt
from vega_datasets import data
source = data.cars()
brush = alt.selection(type='interval')
points = alt.Chart().mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q',
color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
).add_selection(
brush
)
bars = alt.Chart().mark_bar().encode(
y='Origin:N',
color='Origin:N',
x='count(Origin):Q'
).transform_filter(
brush
)
alt.vconcat(points, bars, data=source)
</pre>
Altair和Vega生成的分散圖和直方圖
D3.js(數(shù)據(jù)驅(qū)動(dòng)文檔DDD)
D3.js是一個(gè)JavaScript庫,根據(jù)數(shù)據(jù)操作文檔哄酝。您可以使用HTML友存,SVG和CSS將數(shù)據(jù)變成活靈活現(xiàn)的圖表。D3并不要求您將自己綁定到任何專有框架陶衅,因?yàn)楝F(xiàn)代瀏覽器擁有D3所需的一切爬立,它還用于組合強(qiáng)大的可視化組件和數(shù)據(jù)驅(qū)動(dòng)的DOM操作方法。
D3.js是目前市場(chǎng)上最好的數(shù)據(jù)可視化庫万哪。 您可以將它與python一起使用侠驯,也可以與R一起使用。最初奕巍,它可以與JavaScript一起使用吟策,因?yàn)镴S具有廣泛的功能并且需要大量的學(xué)習(xí)和經(jīng)驗(yàn),但是如果你是JS專業(yè)人員則不需要猶豫的止。雖然 Python 和 R 使D3.js變得更簡(jiǎn)單檩坚,但只是一點(diǎn)點(diǎn)!總之D3.js是絕對(duì)不會(huì)錯(cuò)的上佳之選诅福。
D3py有3個(gè)主要依賴項(xiàng):
- NumPy
- Pandas
- NetworkX
我建議你使用JavaScript或R匾委,而不是python,因?yàn)榘姹疽呀?jīng)過時(shí)氓润,最后一次更新是在2016年赂乐。而且只是D3.js的一個(gè)瘦的python包裝器。
R提供D3可視化接口咖气。使用 r2d3 挨措,您可以將數(shù)據(jù)從R綁定到D3可視化挖滤。使用 r2d3 創(chuàng)建的D3可視化就像RStudio,R Markdown文檔和Shiny應(yīng)用程序中的R圖一樣工作浅役。您可以按如下方式從CRAN 安裝 r2d3 軟件包:
<pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">install.packages(“r2d3”)
</pre>
你可以做一些驚人的可視化斩松,例如下面這幾個(gè):
Sequences Sunburst — Kerry Rodden’s Block (Source)
年度活動(dòng)統(tǒng)計(jì)— Kunal Dhariwal (Me, lol)
從基礎(chǔ)到高端惧盹,您可以使用D3.js構(gòu)建任何東西,不要忘記嘗試一下瞪讼。
最后小編準(zhǔn)備了一份python學(xué)習(xí)資料钧椰,加群:696541369即可免費(fèi)領(lǐng)取尝艘!