<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          8000字 | Python數(shù)據(jù)可視化,完整版實(shí)操指南 !

          共 11244字,需瀏覽 23分鐘

           ·

          2021-05-11 06:29

          點(diǎn)擊“數(shù)據(jù)管道”,選擇“置頂/星標(biāo)公眾號(hào)”

          福利干貨,第一時(shí)間送達(dá)

          1. 前言

          大家好,今天讓我們看一下使用Python進(jìn)行數(shù)據(jù)可視化的主要庫(kù),以及可以使用它們完成的所有類型的圖表。我們還將看到建議在每種情況下,使用哪個(gè)庫(kù)以及每個(gè)庫(kù)的獨(dú)特功能。
          我們將從最基本的可視化開(kāi)始,直接查看數(shù)據(jù),然后繼續(xù)繪制圖表,最后制作交互式圖表。
          我們將使用兩個(gè)數(shù)據(jù)集來(lái)適應(yīng)本文中顯示的可視化效果,數(shù)據(jù)集可通過(guò)下方鏈接進(jìn)行下載。
          數(shù)據(jù)集:https://github.com/albertsl/dataset
          這些數(shù)據(jù)集都是與人工智能相關(guān)的三個(gè)術(shù)語(yǔ)(數(shù)據(jù)科學(xué),機(jī)器學(xué)習(xí)和深度學(xué)習(xí))在互聯(lián)網(wǎng)上搜索流行度的數(shù)據(jù),從搜索引擎中提取而來(lái)。
          該數(shù)據(jù)集包含了兩個(gè)文件temporal.csv和mapa.csv。
          在這個(gè)教程中,我們將更多使用的第一個(gè)包括隨時(shí)間推移(從2004年到2020年)的三個(gè)術(shù)語(yǔ)的受歡迎程度數(shù)據(jù)。另外,我添加了一個(gè)分類變量(1和0)來(lái)演示帶有分類變量的圖表的功能。
          mapa.csv文件包含按國(guó)家/地區(qū)分隔的受歡迎程度數(shù)據(jù)。在最后的可視化地圖時(shí),我們會(huì)用到它。

          2. pandas

          在介紹更復(fù)雜的方法之前,讓我們從可視化數(shù)據(jù)的最基本方法開(kāi)始。我們將只使用熊貓來(lái)查看數(shù)據(jù)并了解其分布方式。
          我們要做的第一件事是可視化一些示例,查看這些示例包含了哪些列、哪些信息以及如何對(duì)值進(jìn)行編碼等等。
          import pandas as pd
          df = pd.read_csv('temporal.csv')
          df.head(10#View first 10 data rows
          結(jié)果如下:
          使用命令描述,我們將看到數(shù)據(jù)如何分布,最大值,最小值,均值……
          df.describe()
          結(jié)果如下:
          使用info命令,我們將看到每列包含的數(shù)據(jù)類型。我們可以發(fā)現(xiàn)一列的情況,當(dāng)使用head命令查看時(shí),該列似乎是數(shù)字的,但是如果我們查看后續(xù)數(shù)據(jù),則字符串格式的值將被編碼為字符串。
          df.info()
          結(jié)果如下:
          通常情況下,pandas都會(huì)限制其顯示的行數(shù)和列數(shù)。這可能讓很多程序員感到困擾,因?yàn)榇蠹叶枷M軌蚩梢暬袛?shù)據(jù)。
          使用這些命令,我們可以增加限制,并且可以可視化整個(gè)數(shù)據(jù)。對(duì)于大型數(shù)據(jù)集,請(qǐng)謹(jǐn)慎使用此選項(xiàng),否則可能無(wú)法顯示它們。
          pd.set_option('display.max_rows'500
          pd.set_option('display.max_columns'500
          pd.set_option('display.width'1000
          使用Pandas樣式,我們可以在查看表格時(shí)獲得更多信息。首先,我們定義一個(gè)格式字典,以便以清晰的方式顯示數(shù)字(以一定格式顯示一定數(shù)量的小數(shù)、日期和小時(shí),并使用百分比、貨幣等)。不要驚慌,這是僅顯示而不會(huì)更改數(shù)據(jù),以后再處理也不會(huì)有任何問(wèn)題。
          為了給出每種類型的示例,我添加了貨幣和百分比符號(hào),即使它們對(duì)于此數(shù)據(jù)沒(méi)有任何意義。
          format_dict = {'data science':'${0:,.2f}''Mes':'{:%m-%Y}''machine learning':'{:.2%}'}
          #We make sure that the Month column has datetime format
          df['Mes'] = pd.to_datetime(df['Mes'])
          #We apply the style to the visualization
          df.head().style.format(format_dict)
          我們可以用顏色突出顯示最大值和最小值。
          format_dict = {'Mes':'{:%m-%Y}'#Simplified format dictionary with values that do make sense for our data
          df.head().style.format(format_dict).highlight_max(color='darkgreen').highlight_min(color='#ff0000')
          結(jié)果如下:
          我們使用顏色漸變來(lái)顯示數(shù)據(jù)值。
          df.head(10).style.format(format_dict).background_gradient(subset=['data science''machine learning'], cmap='BuGn')
          結(jié)果如下:
          我們也可以用條形顯示數(shù)據(jù)值。
          df.head().style.format(format_dict).bar(color='red', subset=['data science''deep learning'])
          結(jié)果如下:
          此外,我們還可以結(jié)合以上功能并生成更復(fù)雜的可視化效果。
          df.head(10).style.format(format_dict).background_gradient(subset = ['data science''machine learning'],cmap ='BuGn')。highlight_max(color ='yellow'
          結(jié)果如下:
          Pandas分析是一個(gè)庫(kù),可使用我們的數(shù)據(jù)生成交互式報(bào)告,我們可以看到數(shù)據(jù)的分布,數(shù)據(jù)的類型以及可能出現(xiàn)的問(wèn)題。它非常易于使用,只需三行,我們就可以生成一個(gè)報(bào)告,該報(bào)告可以發(fā)送給任何人,即使您不了解編程也可以使用。
          from pandas_profiling import ProfileReport
          prof = ProfileReport(df)
          prof.to_file(output_file='report.html')
          結(jié)果如下:

          3. matplotlib

          Matplotlib是用于以圖形方式可視化數(shù)據(jù)的最基本的庫(kù)。它包含許多我們可以想到的圖形。僅僅因?yàn)樗腔镜牟⒉灰馕吨⒉粡?qiáng)大,我們將要討論的許多其他數(shù)據(jù)可視化庫(kù)都基于它。
          Matplotlib的圖表由兩個(gè)主要部分組成,即軸(界定圖表區(qū)域的線)和圖形(我們?cè)谄渲欣L制軸,標(biāo)題和來(lái)自軸區(qū)域的東西),現(xiàn)在讓我們創(chuàng)建最簡(jiǎn)單的圖:
          import matplotlib.pyplot as plt
          plt.plot(df['Mes'], df['data science'], label='data science'
          # The parameter label is to indicate the legend. This doesn't mean that it will be shown, we'll have to use another command that I'll explain later.
          結(jié)果如下:
          我們可以在同一張圖中制作多個(gè)變量的圖,然后進(jìn)行比較。
          plt.plot(df ['Mes'],df ['data science'],label ='data science'
          plt.plot(df ['Mes'],df ['machine learning'],label ='machine learning '
          plt.plot(df ['Mes'],df ['deep learning'],label ='deep learning'
          結(jié)果如下:
          每種顏色代表哪個(gè)變量還不是很清楚。我們將通過(guò)添加圖例和標(biāo)題來(lái)改進(jìn)圖表。
          plt.plot(df['Mes'], df['data science'], label='data science')
          plt.plot(df['Mes'], df['machine learning'], label='machine learning')
          plt.plot(df['Mes'], df['deep learning'], label='deep learning')
          plt.xlabel('Date')
          plt.ylabel('Popularity')
          plt.title('Popularity of AI terms by date')
          plt.grid(True)
          plt.legend()
          結(jié)果如下:
          如果您是從終端或腳本中使用Python,則在使用我們上面編寫(xiě)的函數(shù)定義圖后,請(qǐng)使用plt.show()。如果您使用的是Jupyter Notebook,則在制作圖表之前,將%matplotlib內(nèi)聯(lián)添加到文件的開(kāi)頭并運(yùn)行它。
          我們可以在一個(gè)圖形中制作多個(gè)圖形。這對(duì)于比較圖表或通過(guò)單個(gè)圖像輕松共享幾種圖表類型的數(shù)據(jù)非常有用。
          fig, axes = plt.subplots(2,2)
          axes[00].hist(df['data science'])
          axes[01].scatter(df['Mes'], df['data science'])
          axes[10].plot(df['Mes'], df['machine learning'])
          axes[11].plot(df['Mes'], df['deep learning'])
          結(jié)果如下:
          我們可以為每個(gè)變量的點(diǎn)繪制具有不同樣式的圖形:
          plt.plot(df ['Mes'],df ['data science'],'r-'
          plt.plot(df ['Mes'],df ['data science'] * 2'bs'
          plt .plot(df ['Mes'],df ['data science'] * 3'g ^'
          結(jié)果如下:
          現(xiàn)在讓我們看一些使用Matplotlib可以做的不同圖形的例子。我們從散點(diǎn)圖開(kāi)始:
          plt.scatter(df['data science'], df['machine learning'])
          結(jié)果如下:
          條形圖示例:
          plt.bar(df ['Mes'],df ['machine learning'],width = 20
          結(jié)果如下:
          直方圖示例:
          plt.hist(df ['deep learning'],bins = 15
          結(jié)果如下:
          我們可以在圖形中添加文本,并以與圖形中看到的相同的單位指示文本的位置。在文本中,我們甚至可以按照TeX語(yǔ)言添加特殊字符。
          我們還可以添加指向圖形上特定點(diǎn)的標(biāo)記。
          plt.plot(df['Mes'], df['data science'], label='data science')
          plt.plot(df['Mes'], df['machine learning'], label='machine learning')
          plt.plot(df['Mes'], df['deep learning'], label='deep learning')
          plt.xlabel('Date')
          plt.ylabel('Popularity')
          plt.title('Popularity of AI terms by date')
          plt.grid(True)
          plt.text(x='2010-01-01', y=80, s=r'$\lambda=1, r^2=0.8$'#Coordinates use the same units as the graph
          plt.annotate('Notice something?', xy=('2014-01-01'30), xytext=('2006-01-01'50), arrowprops={'facecolor':'red''shrink':0.05}
          結(jié)果如下:

          4. seaborn

          Seaborn是基于Matplotlib的庫(kù)。基本上,它提供給我們的是更好的圖形和功能,只需一行代碼即可制作復(fù)雜類型的圖形。
          我們導(dǎo)入庫(kù)并使用sns.set()初始化圖形樣式,如果沒(méi)有此命令,圖形將仍然具有與Matplotlib相同的樣式。我們顯示了最簡(jiǎn)單的圖形之一,散點(diǎn)圖:
          import seaborn as sns
          sns.set()
          sns.scatterplot(df['Mes'], df['data science'])
          結(jié)果如下:
          我們可以在同一張圖中添加兩個(gè)以上變量的信息。為此,我們使用顏色和大小。我們還根據(jù)類別列的值制作了一個(gè)不同的圖:
          sns.relplot(x='Mes', y='deep learning', hue='data science', size='machine learning', col='categorical', data=df)
          結(jié)果如下:
          Seaborn提供的最受歡迎的圖形之一是熱圖。通常使用它來(lái)顯示數(shù)據(jù)集中變量之間的所有相關(guān)性:
          sns.heatmap(df.corr(),annot = True,fmt ='。2f'
          結(jié)果如下:
          另一個(gè)最受歡迎的是配對(duì)圖,它向我們顯示了所有變量之間的關(guān)系。如果您有一個(gè)大數(shù)據(jù)集,請(qǐng)謹(jǐn)慎使用此功能,因?yàn)樗仨氾@示所有數(shù)據(jù)點(diǎn)的次數(shù)與有列的次數(shù)相同,這意味著通過(guò)增加數(shù)據(jù)的維數(shù),處理時(shí)間將成倍增加。
          sns.pairplot(df)
          結(jié)果如下:
          現(xiàn)在讓我們做一個(gè)成對(duì)圖,顯示根據(jù)分類變量的值細(xì)分的圖表。
          sns.pairplot(df,hue ='categorical'
          結(jié)果如下:
          聯(lián)合圖是一個(gè)非常有用的圖,它使我們可以查看散點(diǎn)圖以及兩個(gè)變量的直方圖,并查看它們的分布方式:
          sns.jointplot(x='data science', y='machine learning', data=df)
          結(jié)果如下:
          另一個(gè)有趣的圖形是ViolinPlot:
          sns.catplot(x='categorical', y='data science', kind='violin', data=df)
          結(jié)果如下:
          我們可以像使用Matplotlib一樣在一個(gè)圖像中創(chuàng)建多個(gè)圖形:
          fig, axes = plt.subplots(12, sharey=True, figsize=(84))
          sns.scatterplot(x="Mes", y="deep learning", hue="categorical", data=df, ax=axes[0])
          axes[0].set_title('Deep Learning')
          sns.scatterplot(x="Mes", y="machine learning", hue="categorical", data=df, ax=axes[1])
          axes[1].set_title('Machine Learning')
          結(jié)果如下:

          5. Bokeh

          Bokeh是一個(gè)庫(kù),可用于生成交互式圖形。我們可以將它們導(dǎo)出到HTML文檔中,并與具有Web瀏覽器的任何人共享。
          當(dāng)我們有興趣在圖形中查找事物并且希望能夠放大并在圖形中移動(dòng)時(shí),它是一個(gè)非常有用的庫(kù)。或者,當(dāng)我們想共享它們并給其他人探索數(shù)據(jù)的可能性時(shí)。
          我們首先導(dǎo)入庫(kù)并定義將要保存圖形的文件:
          from bokeh.plotting import figure, output_file, save
          output_file('data_science_popularity.html')
          我們繪制所需內(nèi)容并將其保存在文件中:
          p = figure(title='data science', x_axis_label='Mes', y_axis_label='data science')
          p.line(df['Mes'], df['data science'], legend='popularity', line_width=2)
          save(p)
          結(jié)果如下:
          將多個(gè)圖形添加到單個(gè)文件:
          output_file('multiple_graphs.html')
          s1 = figure(width=250, plot_height=250, title='data science')
          s1.circle(df['Mes'], df['data science'], size=10, color='navy', alpha=0.5)
          s2 = figure(width=250, height=250, x_range=s1.x_range, y_range=s1.y_range, title='machine learning'#share both axis range
          s2.triangle(df['Mes'], df['machine learning'], size=10, color='red', alpha=0.5)
          s3 = figure(width=250, height=250, x_range=s1.x_range, title='deep learning'#share only one axis range
          s3.square(df['Mes'], df['deep learning'], size=5, color='green', alpha=0.5)
          p = gridplot([[s1, s2, s3]])
          save(p)
          結(jié)果如下:

          6. altair

          我認(rèn)為Altair不會(huì)給我們已經(jīng)與其他圖書(shū)館討論的內(nèi)容帶來(lái)任何新的東西,因此,我將不對(duì)其進(jìn)行深入討論。我想提到這個(gè)庫(kù),因?yàn)橐苍S在他們的示例畫(huà)廊中,我們可以找到一些可以幫助我們的特定圖形。

          7. folium

          Folium是一項(xiàng)研究,可以讓我們繪制地圖,標(biāo)記,也可以在上面繪制數(shù)據(jù)。Folium讓我們選擇地圖的提供者,這決定了地圖的樣式和質(zhì)量。在本文中,為簡(jiǎn)單起見(jiàn),我們僅將OpenStreetMap視為地圖提供者。
          使用地圖非常復(fù)雜,值得一讀。在這里,我們只是看一下基礎(chǔ)知識(shí),并用我們擁有的數(shù)據(jù)繪制幾張地圖。
          讓我們從基礎(chǔ)開(kāi)始,我們將繪制一個(gè)簡(jiǎn)單的地圖,上面沒(méi)有任何內(nèi)容。
          import folium
          m1 = folium.Map(location=[41.382.17], tiles='openstreetmap', zoom_start=18)
          m1.save('map1.html')
          結(jié)果如下:
          我們?yōu)榈貓D生成一個(gè)交互式文件,您可以在其中隨意移動(dòng)和縮放。
          我們可以在地圖上添加標(biāo)記:
          m2 = folium.Map(location=[41.382.17], tiles='openstreetmap', zoom_start=16)
          folium.Marker([41.382.176], popup='<i>You can use whatever HTML code you want</i>', tooltip='click here').add_to(m2)
          folium.Marker([41.382.174], popup='<b>You can use whatever HTML code you want</b>', tooltip='dont click here').add_to(m2)
          m2.save('map2.html')
          結(jié)果如下:
          你可以看到交互式地圖文件,可以在其中單擊標(biāo)記。
          在開(kāi)頭提供的數(shù)據(jù)集中,我們有國(guó)家名稱和人工智能術(shù)語(yǔ)的流行度。快速可視化后,您會(huì)發(fā)現(xiàn)有些國(guó)家缺少這些值之一。我們將消除這些國(guó)家,以使其變得更加容易。然后,我們將使用Geopandas將國(guó)家/地區(qū)名稱轉(zhuǎn)換為可在地圖上繪制的坐標(biāo)。
          from geopandas.tools import geocode
          df2 = pd.read_csv('mapa.csv')
          df2.dropna(axis=0, inplace=True)
          df2['geometry'] = geocode(df2['País'], provider='nominatim')['geometry'#It may take a while because it downloads a lot of data.
          df2['Latitude'] = df2['geometry'].apply(lambda l: l.y)
          df2['Longitude'] = df2['geometry'].apply(lambda l: l.x)
          結(jié)果如下:
          現(xiàn)在,我們已經(jīng)按照緯度和經(jīng)度對(duì)數(shù)據(jù)進(jìn)行了編碼,現(xiàn)在讓我們?cè)诘貓D上進(jìn)行表示。我們將從BubbleMap開(kāi)始,在其中繪制各個(gè)國(guó)家的圓圈。它們的大小將取決于該術(shù)語(yǔ)的受歡迎程度,而顏色將是紅色或綠色,具體取決于它們的受歡迎程度是否超過(guò)某個(gè)值。
          m3 = folium.Map(location=[39.326234,-4.838065], tiles='openstreetmap', zoom_start=3)
          def color_producer(val):
           if val <= 50:
            return 'red'
           else:
            return 'green'
          for i in range(0,len(df2)):
           folium.Circle(location=[df2.iloc[i]['Latitud'], df2.iloc[i]['Longitud']], radius=5000*df2.iloc[i]['data science'], color=color_producer(df2.iloc[i]['data science'])).add_to(m3)
          m3.save('map3.html')
          結(jié)果如下:
          在何時(shí)使用哪個(gè)庫(kù)?
          有了各種各樣的庫(kù),怎么做選擇?快速的答案是讓你可以輕松制作所需圖形的庫(kù)。
          對(duì)于項(xiàng)目的初始階段,使用Pandas和Pandas分析,我們將進(jìn)行快速可視化以了解數(shù)據(jù)。如果需要可視化更多信息,可以使用在matplotlib中可以找到的簡(jiǎn)單圖形作為散點(diǎn)圖或直方圖。
          對(duì)于項(xiàng)目的高級(jí)階段,我們可以在主庫(kù)(Matplotlib,Seaborn,Bokeh,Altair)的圖庫(kù)中搜索我們喜歡并適合該項(xiàng)目的圖形。這些圖形可用于在報(bào)告中提供信息,制作交互式報(bào)告,搜索特定值等。
          ·················END·················

          推薦閱讀

          1. 超細(xì)節(jié)!數(shù)據(jù)分析社招面試指南

          2. 寫(xiě)給所有數(shù)據(jù)人。

          3. 從留存率業(yè)務(wù)案例談0-1的數(shù)據(jù)指標(biāo)體系

          4. 數(shù)據(jù)分析師的一周

          5. 超級(jí)菜鳥(niǎo)如何入門(mén)數(shù)據(jù)分析?


          歡迎長(zhǎng)按掃碼關(guān)注「數(shù)據(jù)管道」

          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久在线精品一区二区 | 日本黄色视频网站大全 | 中国一级黄片免费视频 | 红桃视频一区二区三区四区五区在线视频 | 黄色在线免费播放 |