日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

對使用哪個可視化工具感到困惑? 我為您分解了每個庫的優缺點

6個頂級可視化Python庫

> Photo by oxana v on Unsplash

 

動機

如果您剛開始使用Python可視化,可能會不知所措的庫和示例數量眾多:

· Matplotlib

· Seaborn

· Plotly

· Bokeh

· Altair

· Folium

如果您有一個等待可視化的DataFrame,應該選擇哪一個? 在某些情況下,某些庫可能比其他庫更好。 本文將展示每種方法的優缺點。 到本文結尾,您應該能夠區分每個庫的不同功能,并可以更輕松地選擇最佳庫。

我們將通過使用樣本數據集并使用每個庫對其進行研究,著重于一些特定的屬性:

互動性

您是否希望可視化是交互式的?

一些庫(例如Matplotlib)將可視化效果呈現為圖像。 因此,它們非常適合于解釋概念(在紙質,幻燈片或演示文稿中)。

另一方面,像Altair,Bokeh和Plotly這樣的庫可讓您創建交互式圖形,以便用戶可以深入并自己探索

語法和靈活性

每個庫的語法有何不同? Matplotlib等較低級的庫使您可以做想想得到的一切,但要付出更復雜的API的代價。 諸如Altair之類的某些庫是非常聲明性的,這使映射到您的數據更加容易。

數據類型和可視化

您是在處理特殊的用例,例如地理圖,具有大數據還是使用僅由特定庫支持的圖類型?

數據

為了便于比較,我將使用本文從Github抓取的真實數據:

我爬取了超過1k的頂級機器學習Github配置文件,這就是我發現的

從Github上的頂級機器學習資料中獲取見解

如果您想閱讀本文,可以在此處下載數據

或從Datapane Blob獲取直接數據。

import datapane as dp

dp.Blob.get(name='github_data', owner='khuyentran1401').download_df()

如果要使用Blob,請記住預先使用令牌登錄Datapane。 此過程應少于1分鐘

Matplotlib

Matplotlib可能是最常見的用于可視化數據的Python庫。 每個對數據科學感興趣的人都可能至少使用過Matplotlib。

優點

1.容易看到數據的屬性

分析數據時,快速查看分布可能是理想的。

例如,如果我想快速了解關注者最多的前100個用戶的分布,通常使用Matplotlib就足夠了。

import matplotlib.pyplot as plt

top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False)[:100]

fig = plt.figure()

plt.bar(top_followers.user_name,
       top_followers.followers)

即使Matplotlib的x軸看起來不太好,通過查看圖表,我們也可以更好地理解數據的分布。

6個頂級可視化Python庫

 

2.可以畫任何東西

Matplotlib具有多種用途,這意味著它可以繪制您可以想象的任何圖形。 Matplotlib的網站上包含非常全面的文檔和圖庫中的各種圖形,這使您可以輕松找到任何您能想到的瘋狂情節的教程。

像這樣的一些文字:

fig = plt.figure()

plt.text(0.6, 0.7, "learning", size=40, rotation=20.,
         ha="center", va="center",
         bbox=dict(boxstyle="round",
                   ec=(1., 0.5, 0.5),
                   fc=(1., 0.8, 0.8),
                   )
         )

plt.text(0.55, 0.6, "machine", size=40, rotation=-25.,
         ha="right", va="top",
         bbox=dict(boxstyle="square",
                   ec=(1., 0.5, 0.5),
                   fc=(1., 0.8, 0.8),
                   )
         )

plt.show()
6個頂級可視化Python庫

 

缺點

Matplotlib可以繪制任何內容,但繪制非基本圖或調整圖的外觀可能會很復雜。

correlation = new_profile.corr()

fig, ax = plt.subplots()
im = plt.imshow(correlation)

ax.set_xticklabels(correlation.columns)
ax.set_yticklabels(correlation.columns)

plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
         rotation_mode="anchor")
6個頂級可視化Python庫

 

即使該圖足以使分布可視化,但如果您想將數據表示給其他人,您仍需要固定x軸,y軸,這需要很多工作。 這是因為Matplotlib具有非常低級的接口。

總結:Matplotlib可以繪制任何東西,但是復雜的繪圖可能比其他庫需要更多的代碼

Seaborn

Seaborn是基于Matplotlib的Python數據可視化庫。 它在庫上提供了更高級別的包裝器,使其更易于使用。

優點

  1. 更少的代碼

它為類似的圖提供了更高級別的界面。 換句話說,seaborn通常提供與matplotlib類似的圖,但是用更少的代碼和更好的設計。

我們使用與以前相同的數據來繪制圖的相似熱圖。

correlation = new_profile.corr()

sns.heatmap(correlation, annot=True)

我們無需設置x和y標簽就可以獲得更好的熱圖!

6個頂級可視化Python庫

 

2.使常用地塊更漂亮

當涉及流行圖(例如條形圖,箱形圖,計數圖,直方圖等)時,許多人選擇seaborn不僅是因為可以用更少的代碼來創建它們,而且它們看起來也更漂亮。 正如我們在上面的示例中看到的,顏色看起來也比Matplotlib的默認顏色更好。

sns.set(style="darkgrid")
titanic = sns.load_dataset("titanic")
ax = sns.countplot(x="class", data=titanic)
6個頂級可視化Python庫

 

缺點

Seaborn受到更多限制,并且沒有matplotlib那樣廣泛的集合

要點:Seaborn是Matplotlib的更高版本。 盡管Seaborn并不像Matplotlib那樣具有廣泛的集合,但是它們卻可以用更少的代碼來使條形圖,箱形圖,熱圖等流行圖看起來很漂亮。

Plotly

Plotly的Python圖形庫使創建交互式,具有出版物質量的圖形變得容易。 它還可以創建類似于Matplotlib和seaborn的圖表,例如折線圖,散點圖,面積圖,條形圖等。

優點

1. 像R

如果您喜歡R中的繪圖,并且在切換到Python時錯過了它的功能,那么Plotly使用Python可以提供相同質量的繪圖!

我最喜歡的是Plotly Express,因為它真的很容易,而且用單行Python創建更好的圖甚至更快。

fig = px.scatter(new_profile[:100],
          x='followers',
          y='total_stars',
          color='forks',
          size='contribution')
fig.show()
6個頂級可視化Python庫

 

2.易于創建交互式圖

使用Plotly還可以輕松創建交互式繪圖。 交互式繪圖不僅美觀,而且還使查看者更容易查看每個數據點。

還記得我們之前使用matplotlib制作的條形圖嗎? 讓我們看看Plotly的結果

import plotly.express as px

top_followers = new_profile.sort_values(by='followers', axis=0, ascending=False)[:100]

fig = px.bar(top_followers, 
             x='user_name', 
             y='followers',
            )

fig.show()
6個頂級可視化Python庫

 

使用大約相同的代碼行,我們生成一個交互式繪圖,我們可以將鼠標懸停在每個欄上,以查看該欄所代表的用戶和關注者數量。 這意味著可視化的使用者可以自己進行瀏覽。

3.復雜的地塊變得容易

使用Plotly,可以輕松創建一些通常很難創建的圖。

例如,如果我們想創建一個地圖以可視化Github用戶的位置,我們可以找到他們的經度和緯度,如下所示,然后使用該數據在地圖上發現用戶的位置,如下所示

import plotly.express as px
import datapane as dp

location_df = dp.Blob.get(name='location_df', owner='khuyentran1401').download_df()

m = px.scatter_geo(location_df, lat='latitude', lon='longitude',
                 color='total_stars', size='forks',
                 hover_data=['user_name','followers'],
                 title='Locations of Top Users')

m.show()
6個頂級可視化Python庫

 

只需幾行代碼,所有用戶的位置就可以在地圖上精美呈現。 氣泡的顏色代表叉子的數量,大小代表星星的總數

缺點

盡管Plotly支持各種圖,但仍然缺少一些常見圖

例如,雖然seaborn具有sns.countplot()來計算數據中某個類別的出現次數,但Plotly沒有計數圖。 因此,我們需要預先執行groupby以便按類對數據進行分組。

titanic = sns.load_dataset("titanic")

# Group data by class
titanic_groupby = titanic.groupby(by='class').count() 

fig = px.bar(titanic_groupby,
      y='survived',
      labels={'survived':'count'}) 
fig.show()
6個頂級可視化Python庫

 

我們需要更多代碼來創建計數圖,并且該圖不會像seaborn那樣自動顯示出來。

要點:Plotly非常適合用很少的代碼創建交互式且具有出版質量的圖形。 但是,對于一些簡單的圖(例如計數圖),使用seaborn會更簡單

Altar

Altair是基于vega-lite的用于Python的聲明式統計可視化庫,非常適合需要大量統計轉換的繪圖。

優點

1.簡單的可視化語法

用于創建可視化的語法很容易理解。 它僅需提及數據列與編碼通道之間的鏈接,其余繪圖將自動處理。 這聽起來很抽象,但是在您處理數據時非常重要,它使信息可視化變得非常快速和直觀。

例如,使用上面的泰坦尼克號數據,我們想計算每個班級的人數,我們所需要的只是在y_axis中使用count()

import seaborn as sns
import altair as alt 

titanic = sns.load_dataset("titanic")

alt.Chart(titanic).mark_bar().encode(
    alt.X('class'),
    y='count()'
)
6個頂級可視化Python庫

 

2.易于轉換數據

Altair還使創建圖表時轉換數據變得非常容易

例如,如果我們想找到泰坦尼克號中每個性別的平均年齡,而不是像Plotly那樣預先進行轉換,我們可以在代碼中執行轉換以創建圖表。

hireable = alt.Chart(titanic).mark_bar().encode(
    x='sex:N',
    y='mean_age:Q'
).transform_aggregate(
    mean_age='mean(age)',
    groupby=['sex'])

hireable
6個頂級可視化Python庫

 

這里的邏輯是使用transform_aggregate()來獲取每個性別(groupby = ['sex'])的年齡(平均值)的平均值,并將平均值保存到變量mean(age)中。 我們將此變量作為y_axis。

我們還可以使用:N來確保該類別是名義數據(沒有任何順序的類別數據),或者使用:Q來確保mean_age是定量數據(值的度量,例如數字)

在此處查看數據轉換的完整列表

3.易于鏈接的圖

Altair還允許您在圖之間進行一些令人印象深刻的鏈接,例如使用間隔選擇來過濾附加直方圖的內容。

例如,如果我們想在間隔內可視化每個班級的人數,我們可以選擇年齡和票價之間的一個點狀圖,我們可以這樣做。

brush = alt.selection(type='interval')

points = alt.Chart(titanic).mark_point().encode(
    x='age:Q',
    y='fare:Q',
    color=alt.condition(brush, 'class:N', alt.value('lightgray'))
).add_selection(
    brush
)

bars = alt.Chart(titanic).mark_bar().encode(
    y='class:N',
    color='class:N',
    x = 'count(class):Q'
).transform_filter(
    brush
)

points & bars
6個頂級可視化Python庫

 

當我們拖動鼠標以選擇散點圖中的間隔時,我們可以在下面的條形圖中看到變化。 當與早期的轉換和計算結合使用時,這意味著您可以創建一些非常互動的圖,這些圖可以進行即時計算-甚至不需要運行的Python服務器!

缺點

除非您指定自定義樣式,否則簡單的圖表(如條形圖)看起來不會像seaborn或Plotly。 Altair還不建議使用5000個以上樣本的數據集,而是建議您在可視化之前匯總數據。

要點:Altair是復雜圖表顯示統計數據的理想選擇。 Altair無法處理超過5000個樣本的數據,并且與Plotly或Seaborn相比,某些簡單圖表的樣式看起來不一樣。

Bokeh

Bokeh是一個靈活的交互式可視化庫,以Web瀏覽器為代表。

優點

· Matplotlib的交互式版本

如果我們將在上述交互式可視化庫中排名,那么Bokeh在與Matplotlib的相似性方面可能排名第一。

Matplotlib可以創建任何繪圖,因為它是一個低級的可視化庫。 Bokeh可以用作高級或低級接口; 因此,它可以創建Matplotlib創建的許多復雜圖,但是用更少的代碼行和更高的分辨率。

例如,Matplotlib的圓圖

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = [1, 2, 3, 4, 5]
y = [2, 5, 8, 2, 7]

for x,y in zip(x,y): 
    ax.add_patch(plt.Circle((x, y), 0.5, edgecolor = "#f03b20",facecolor='#9ebcda', alpha=0.8))


#Use adjustable='box-forced' to make the plot area square-shaped as well.
ax.set_aspect('equal', adjustable='datalim')
ax.set_xbound(3, 4)

ax.plot()   #Causes an autoscale update.
plt.show()
6個頂級可視化Python庫

 

也可以使用Bokeh以更好的分辨率和更多實用性創建

from bokeh.io import output_file, show
from bokeh.models import Circle
from bokeh.plotting import figure

reset_output()
output_notebook()


plot = figure(plot_width=400, plot_height=400, tools="tap", title="Select a circle")
renderer = plot.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=50)

selected_circle = Circle(fill_alpha=1, fill_color="firebrick", line_color=None)
nonselected_circle = Circle(fill_alpha=0.2, fill_color="blue", line_color="firebrick")

renderer.selection_glyph = selected_circle
renderer.nonselection_glyph = nonselected_circle

show(plot)
6個頂級可視化Python庫

 

2.地塊之間的聯系

散景還可以使情節之間的鏈接變得非常容易。 在一個繪圖中應用的更改將應用于具有類似變量的另一繪圖。

例如,如果我們并排創建3個圖形并想要觀察它們之間的關系,則可以使用鏈接的筆刷

from bokeh.layouts import gridplot, row
from bokeh.models import ColumnDataSource

reset_output()
output_notebook()

source = ColumnDataSource(new_profile)

TOOLS = "box_select,lasso_select,help"
TOOLTIPS = [('user', '@user_name'),
            ('followers', '@followers'),
            ('following', '@following'),
            ('forks', '@forks'), 
            ('contribution', '@contribution')]

s1 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS)
s1.circle(x='followers', y='following', source=source)

s2 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS)
s2.circle(x='followers', y='forks', source=source)

s3 = figure(tooltips=TOOLTIPS, plot_width=300, plot_height=300, title=None, tools=TOOLS)
s3.circle(x='followers', y='contribution', source=source)

p = gridplot([[s1,s2,s3]])
show(p)
6個頂級可視化Python庫

 

ColumnDataSource使數據可以在繪圖之間共享。 因此,當我們將更改應用于一個圖時,其他圖也將相應地更改。

缺點

由于Bokeh是一個具有中級接口的庫,因此與Matplotlib相比,它通常花費較少的代碼,但產生與Seaborn,Altair或Plotly相同的圖將花費更多的代碼。

例如,要使用泰坦尼克號數據創建相同的計數圖,除了需要預先轉換數據外,如果我們希望圖形看起來更漂亮,我們還需要設置條形和顏色的寬度

from bokeh.transform import factor_cmap
from bokeh.palettes import Spectral6

p = figure(x_range=list(titanic_groupby['class']))
p.vbar(x='class', top='survived', source = titanic_groupby,
      fill_color=factor_cmap('class', palette=Spectral6, factors=list(titanic_groupby['class'])
      ))
show(p)如果我們不為條形圖添加寬度,則條形圖將看起來像這樣
6個頂級可視化Python庫

 

因此,我們需要手動調整尺寸以使圖更好

from bokeh.transform import factor_cmap
from bokeh.palettes import Spectral6

p = figure(x_range=list(titanic_groupby['class']))
p.vbar(x='class', top='survived', width=0.9, source = titanic_groupby,
      fill_color=factor_cmap('class', palette=Spectral6, factors=list(titanic_groupby['class'])
      ))
show(p)
6個頂級可視化Python庫

 

如果要用更少的代碼創建漂亮的條形圖,與其他庫相比,Bokeh可能就是缺點

要點:Bokeh是唯一一個界面范圍從低到高的庫,這使得生成通用和精美的圖形變得容易。 但是,這樣做的代價是,Bokeh通常需要更多代碼來創建質量與其他庫相似的圖。

Folium

Folium使在交互式傳單地圖上的數據可視化變得容易。 該庫具有來自OpenStreetMap,Mapbox和Stamen的許多內置磁貼集

優點

1.輕松創建帶有標記的地圖

盡管Plotly,Altair和Bokeh也使我們能夠創建地圖,但Folium使用開放的街道地圖,以最少的代碼使您更接近google Map

還記得我們如何創建地圖以使用Plotly可視化Github用戶的位置嗎? 我們可以用Folium使地圖看起來更好

import folium

# Load data
location_df = dp.Blob.get(name='location_df', owner='khuyentran1401').download_df() 

# Save latitudes, longitudes, and locations' names in a list
lats = location_df['latitude']
lons = location_df['longitude']
names = location_df['location']

# Create a map with an initial location
m = folium.Map(location=[lats[0], lons[0]])

for lat, lon, name in zip(lats, lons, names):
  
    # Create marker with other locations
    folium.Marker(location=[lat, lon],
                  popup= name, 
                 icon=folium.Icon(color='green')
).add_to(m)
    
m
6個頂級可視化Python庫

 

最初的地點在紐約布魯克林。 縮小以查看地圖上的其他位置。 通過一些代碼行,我們創建了一個真實的地圖,顯示了用戶的位置。

2.添加潛在的位置

如果我們想添加其他用戶的潛在位置,Folium可以通過允許用戶添加標記來簡化操作

# Code to generate map here
#....

# Enable adding more locations in the map
m = m.add_child(folium.ClickForMarker(popup='Potential Location'))
6個頂級可視化Python庫

 

點擊地圖,查看您點擊生成的新位置。

3.插件

Folium有許多可與地圖一起使用的插件,包括Altair的插件。 如果我們想查看全球Github用戶總星數的熱點圖,以找出哪里有大量Github用戶數最多,總星數很多的情況? Folium插件中的熱圖使您可以做到這一點。

from folium.plugins import HeatMap

m = folium.Map(location=[lats[0], lons[0]])

HeatMap(data=location_df[['latitude', 'longitude', 'total_stars']]).add_to(m)
6個頂級可視化Python庫

 

縮小以查看完整的熱圖。

總結:Folium允許您使用幾行代碼創建一個交互式地圖。 它為您提供了接近Google Map的體驗。

結論

恭喜你! 您剛剛了解了用于可視化的六個不同的可視化工具。 我希望本文能使您了解每個庫的功能以及何時使用。 掌握每個庫的關鍵功能將使您更快地根據需要提取正確的庫。

如果您仍然對要使用哪個庫來處理數據感到困惑,只需選擇一個您認為足夠好的庫即可。 然后,如果代碼太長或圖形的顯示效果不如您想象的那樣,請嘗試使用另一個庫!

在此庫中查看有關本文提到的可視化工具的更多啟發。 在Datapane上注冊以訪問我在文章中使用的數據

我喜歡寫有關基本數據科學概念的文章,并喜歡使用不同的算法和數據科學工具。 在Medium上關注我,以獲取有關我最新文章的更新。

(本文翻譯自Khuyen Tran的文章《Top 6 Python Libraries for Visualization: Which one to Use?》,參考:https://towardsdatascience.com/top-6-python-libraries-for-visualization-which-one-to-use-fe43381cd658)

分享到:
標簽:可視化 Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定