<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>

          8k Star!基于 Matplotlib 的數(shù)據(jù)可視化利器

          共 5818字,需瀏覽 12分鐘

           ·

          2021-01-29 14:11

          【導(dǎo)語(yǔ)】:Seaborn 是一個(gè)可以實(shí)現(xiàn)數(shù)據(jù)可視化的 Python 庫(kù),它是基于 matplotlib 庫(kù)封裝而成的,同時(shí)還能兼容 pandas 數(shù)據(jù)結(jié)構(gòu)。我們可以使用 Seaborn 來(lái)制作漂亮的數(shù)據(jù)圖表,操作簡(jiǎn)單,易于上手。

          提示:Seaborn 支持 Python 3.7+ ,已不再支持 Python 2。

          簡(jiǎn)介

          1、數(shù)據(jù)可視化的工具介紹

          數(shù)據(jù)可視化是一種數(shù)據(jù)科學(xué)家將原始數(shù)據(jù)轉(zhuǎn)化為圖表的技術(shù),這些圖表能產(chǎn)生許多有價(jià)值的信息。圖表降低了原始數(shù)據(jù)的復(fù)雜性,使用戶更易理解。

          有許多完成數(shù)據(jù)可視化的工具,例如 Tableau、Power BI、ChartBlocks以及其他的無(wú)代碼工具。這些工具有著各自的用戶,也都很強(qiáng)大。然而當(dāng)我們需要一個(gè)良好的平臺(tái)來(lái)處理原始數(shù)據(jù)時(shí),python 不失為一個(gè)好的選擇。

          雖然這種方法較為復(fù)雜,需要的編程知識(shí)也更多,但 python 能通過(guò)許多操作和轉(zhuǎn)換來(lái)完成數(shù)據(jù)可視化,因此對(duì)數(shù)據(jù)科學(xué)家來(lái)說(shuō)是一個(gè)理想的選擇。Python 最大的一個(gè)優(yōu)點(diǎn)就是它擁有強(qiáng)大的第三方庫(kù),來(lái)處理數(shù)據(jù),比如numpy、pandas、matplotlib、tensorflow。

          Matplotlib可能是目前最受認(rèn)可的繪圖庫(kù)了,不僅適用于python,還適用于R語(yǔ)言等。它的定制化和可操作性使其坐上了頭把交椅。然而當(dāng)使用 matplotlib 時(shí),有些定制化和操作功能很難實(shí)現(xiàn)。

          基于 matplotlib,開(kāi)發(fā)者創(chuàng)造了一個(gè)叫 seaborn 的庫(kù)。seaborn 與 matplotlib 一樣強(qiáng)大,在帶來(lái)一些新特性的同時(shí)還能簡(jiǎn)化繪圖。

          在本文中,我們主要關(guān)注如何使用 seaborn 繪制高級(jí)的圖表。你可以依據(jù)這些例子創(chuàng)建自己的圖表。

          2. Seaborn是什么?

          Seaborn是 python 中一個(gè)可以制作數(shù)據(jù)圖表的庫(kù)。它是 matplotlib 庫(kù)的高級(jí)封裝,同時(shí)還能兼容 pandas 數(shù)據(jù)結(jié)構(gòu)。

          Seaborn 能讓你快速探索并理解數(shù)據(jù)。seaborn 的工作方式為:首先捕捉包含所有數(shù)據(jù)的整個(gè)數(shù)據(jù)結(jié)構(gòu)或數(shù)組,隨后通過(guò)執(zhí)行繪圖和統(tǒng)計(jì)數(shù)據(jù)需要的所有內(nèi)部函數(shù),將數(shù)據(jù)轉(zhuǎn)換為信息圖。

          當(dāng)你根據(jù)自身需求設(shè)計(jì)圖表時(shí),seaborn 能減少?gòu)?fù)雜性。

          Seaborn 的Github主頁(yè):
          https://github.com/mwaskom/seaborn

          安裝

          pip?install?seaborn

          當(dāng)安裝seaborn時(shí),也會(huì)自動(dòng)安裝其他繪圖所需要的庫(kù),例如 matplotlib,pandas、numpy 和 scipy。此外,在寫(xiě)代碼繪圖前,我們需要導(dǎo)入一些模塊。

          import?matplotlib.pyplot?as?plt
          import?pandas?as?pd
          import?numpy?as?np
          import?seaborn?as?sns

          簡(jiǎn)單使用

          1. 繪制你的第一個(gè)圖表

          由于網(wǎng)絡(luò)問(wèn)題,在國(guó)內(nèi)使用seaborn的數(shù)據(jù)集時(shí),注意啟用代理,以免無(wú)法加載數(shù)據(jù)集。

          在我們開(kāi)始畫(huà)圖之前,需要使用數(shù)據(jù)。seaborn的方便之處在于它兼容pandas數(shù)據(jù)結(jié)構(gòu)。此外,該庫(kù)自帶了 一些內(nèi)建數(shù)據(jù)集,你可以直接用代碼加載,無(wú)需手動(dòng)下載文件。讓我們一起來(lái)看看如何加載一個(gè)包含航班信息的數(shù)據(jù)集:

          flights_data?=?sns.load_dataset("flights")
          res?=?flights_data.head()
          print(res)

          輸出結(jié)果如下:

          ?yearmonthpassengers
          01949Jan112
          11949Feb118
          21949Mar132
          31949Apr129
          41949May121

          當(dāng)調(diào)用load_dataset函數(shù)并寫(xiě)入數(shù)據(jù)集的名稱后,神奇的事情發(fā)生了,控制臺(tái)返回了一個(gè)數(shù)據(jù)結(jié)構(gòu)。所有的數(shù)據(jù)集在這里可見(jiàn):

          Github鏈接:

          https://github.com/mwaskom/seaborn-data

          2. 散點(diǎn)圖

          散點(diǎn)圖是一個(gè)基于二維數(shù)據(jù)來(lái)顯示點(diǎn)的圖表。用 seaborn 庫(kù)來(lái)繪制一個(gè)散點(diǎn)圖只需要幾行代碼,非常簡(jiǎn)單。scatterplot 需要的參數(shù)是我們繪圖需要的數(shù)據(jù)集,以及x,y軸分別代表什么數(shù)據(jù)。

          flights_data?=?sns.load_dataset("flights")
          sns.scatterplot(data=flights_data,?x="year",?y="passengers")
          plt.show()

          繪制的圖表如下:

          散點(diǎn)圖

          3. 線條圖

          根據(jù)連續(xù)或分類數(shù)據(jù)的變化,畫(huà)出線條圖。它是一種流行且廣為人知的圖表,易于繪制。與之前相似,我們使用lineplot函數(shù), 指定數(shù)據(jù)集,以及x,y軸分別代表哪一列數(shù)據(jù)。seaborn會(huì)完成剩余的工作:

          flights_data?=?sns.load_dataset("flights")
          sns.lineplot(data=flights_data,?x="year",?y="passengers")
          plt.show()

          繪制的圖表如下:

          線條圖

          4. 條形圖

          正如你所推測(cè)的那樣,條形圖可能是最出名的圖表類型了。與散點(diǎn)圖和線條一樣,我們可以用barplot函數(shù)繪制條形圖:

          flights_data?=?sns.load_dataset("flights")
          sns.barplot(data=flights_data,?x="year",?y="passengers")
          plt.show()

          繪制的圖表如下:

          條形圖

          5. 用matplotlib擴(kuò)展

          seaborn建立在matplotlib之上,擴(kuò)展了它的功能,增加了復(fù)雜性。如其所述,卻并沒(méi)有限matplotlib的性能。任何seaborn圖表都可以用matplotlib的函數(shù)繪制。seaborn在特定的操作中可以提供幫助,允許seaborn利用matplotlib的力量而無(wú)需重寫(xiě)函數(shù)。例如你如果想用seaborn來(lái)自動(dòng)繪制多個(gè)圖表,你就可以利用matplotlib中的subplot函數(shù):

          diamonds_data?=?sns.load_dataset('diamonds')
          plt.subplot(1,?2,?1)
          sns.countplot(x='carat',?data=diamonds_data)
          plt.subplot(1,?2,?2)
          sns.countplot(x='depth',?data=diamonds_data)
          plt.show()

          繪制的圖表如下:

          用subplot畫(huà)出的樣本圖

          使用subplot功能,我們可以在一個(gè)圖上繪制多個(gè)圖表。該函數(shù)有三個(gè)參數(shù),第一個(gè)是行數(shù),第二個(gè)是列數(shù),最后一個(gè)是圖號(hào)。我們使用matplotlib與seaborn中的函數(shù),seaborn在每個(gè)subplot中繪制一個(gè)seaborn圖表。

          6. 繪制不同風(fēng)格的漂亮圖形

          seaborn使我們可以更改圖形界面,它提供了五種不同的風(fēng)格:darkgrid,whitegrid,dark,white,和ticks.

          第一個(gè)例子深色網(wǎng)格圖:

          flights_data?=?sns.load_dataset("flights")
          sns.set_style("darkgrid")
          sns.lineplot(data?=?flights_data,?x?=?"year",?y?=?"passengers")
          plt.show()

          繪制的圖表如下:

          深色網(wǎng)格樣本圖

          另一個(gè)例子白色網(wǎng)格圖:

          flights_data?=?sns.load_dataset("flights")
          sns.set_style("whitegrid")
          sns.lineplot(data=flights_data,?x="year",?y="passengers")
          plt.show()

          繪制的圖表如下:

          白色網(wǎng)格樣本圖

          很酷的用法

          . 下載小費(fèi)數(shù)據(jù)集

          我們了解seaborn的基本知識(shí)后,現(xiàn)在讓我們通過(guò)在同一數(shù)據(jù)集上構(gòu)建多個(gè)圖表,來(lái)進(jìn)行練習(xí)。在我們的例子中,我們將 使用數(shù)據(jù)集“tips”,你可以使用seaborn直接下載。首先,加載數(shù)據(jù)集:

          tips_df?=?sns.load_dataset('tips')
          res?=?tips_df.head()
          print(res)

          輸出結(jié)果如下:

          ?total_billtipsexsmokerdaytimesize
          016.991.01FemaleNoSunDinner2
          110.341.66MaleNoSunDinner3
          221.013.50MaleNoSunDinner3
          323.683.31MaleNoSunDinner2
          424.593.61MaleNoSunDinner4

          我想打印出數(shù)據(jù)集的前幾行,來(lái)了解列和數(shù)據(jù)本身。通常我會(huì)用一些pandas函數(shù)修復(fù)一些數(shù)據(jù)問(wèn)題,比如null值,還可 以加入一些對(duì)數(shù)據(jù)集有用的信息。你可以在下面的鏈接中閱讀更多信息:

          pandas使用指南:

          https://livecodestream.dev/post/how-to-work-with-pandas-in-python/

          讓我們?cè)跀?shù)據(jù)集中創(chuàng)建新的一列,以表示小費(fèi)占總費(fèi)用的百分比:

          tips_df?=?sns.load_dataset('tips')
          tips_df.head()
          tips_df["tip_percentage"]?=?tips_df["tip"]?/?tips_df["total_bill"]
          res?=?tips_df.head()
          print(res)

          新的數(shù)據(jù)結(jié)構(gòu)如下:

          ?total_billtipsexsmokerdaytimesizetip_percentage
          016.991.01FemaleNoSunDinner20.059447
          110.341.66MaleNoSunDinner30.160542
          221.013.50MaleNoSunDinner30.166587
          323.683.31MaleNoSunDinner20.139780
          424.593.61MaleNoSunDinner40.146808

          2. 理解tip_percentage

          讓我們首先看看 tip_percentage 的分布。鑒于此,使用 hisplot 來(lái)產(chǎn)生柱狀圖:

          tips_df?=?sns.load_dataset('tips')
          tips_df["tip_percentage"]?=?tips_df["tip"]?/?tips_df["total_bill"]
          sns.histplot(tips_df["tip_percentage"],?binwidth=0.05)
          plt.show()

          繪制的圖表如下:

          tip_percentage變化圖

          我們必須自定義 binwidth 屬性以使其更具可讀性,現(xiàn)在我們可以快速理解數(shù)據(jù)了。大多數(shù)客戶會(huì)給15%至20%的小費(fèi),而有些情況下,小費(fèi)超過(guò)70%。這些值是異常的,應(yīng)該進(jìn)行檢查,以確定這些值是否出錯(cuò)。

          3. 觀察tip_percentage是否與每天的不同時(shí)刻是否有關(guān),也將會(huì)很有趣:

          tips_df?=?sns.load_dataset('tips')
          tips_df["tip_percentage"]?=?tips_df["tip"]?/?tips_df["total_bill"]
          sns.histplot(data=tips_df,?x="tip_percentage",?binwidth=0.05,?hue="time")
          plt.show()

          繪制的圖表如下:

          tip_percentage在一天不同時(shí)刻的變化圖

          這次我們加載了所有數(shù)據(jù)集到圖表中,而不僅僅是一列,然后給time列設(shè)置了hue屬性。這將會(huì)使圖表給每一個(gè)time值設(shè)置不同的顏色,并為其添加圖例。

          4. 一周中某天的小費(fèi)數(shù)

          另一個(gè)有趣的度量標(biāo)準(zhǔn)是根據(jù)一周中的某天,知道可以得到小費(fèi)的總數(shù):

          tips_df?=?sns.load_dataset('tips')
          tips_df["tip_percentage"]?=?tips_df["tip"]?/?tips_df["total_bill"]
          sns.barplot(data=tips_df,?x="day",?y="tip",?estimator=np.sum)
          plt.show()

          繪制的圖表如下:

          tip_percentage在一周中不同天的變化圖

          看起來(lái)星期五很適合待在家里。

          5. 桌子尺寸和日期對(duì)小費(fèi)的影響

          有時(shí)候我們想要知道多個(gè)變量如何共同影響輸出。例如,星期幾和桌子尺 寸怎樣共同影響小費(fèi)百分比?為了畫(huà)出最終的圖表,我們首先用pandas中的pivot函數(shù)預(yù)處理數(shù)據(jù),隨后繪制一個(gè)熱點(diǎn)圖:

          tips_df?=?sns.load_dataset('tips')
          tips_df["tip_percentage"]?=?tips_df["tip"]?/?tips_df["total_bill"]
          pivot?=?tips_df.pivot_table(
          ????index=["day"],
          ????columns=["size"],
          ????values="tip_percentage",
          ????aggfunc=np.average)
          sns.heatmap(pivot)
          plt.show()

          繪制的圖表如下:

          tip_percentage隨星期幾和桌子尺寸的變化圖

          結(jié)論

          當(dāng)然,我們還可以用 seaborn 做很多事情,通過(guò)查看官方文檔能看到更多例子。感謝你的閱讀!

          官方文檔地址:http://seaborn.pydata.org/


          -?EOF -?


          更多優(yōu)秀開(kāi)源項(xiàng)目(點(diǎn)擊下方圖片可跳轉(zhuǎn))





          開(kāi)源前哨

          日常分享熱門、有趣和實(shí)用的開(kāi)源項(xiàng)目。參與維護(hù)10萬(wàn)+star 的開(kāi)源技術(shù)資源庫(kù),包括:Python, Java, C/C++, Go, JS, CSS, Node.js, PHP, .NET 等

          關(guān)注后獲取

          回復(fù)?資源?獲取 10萬(wàn)+ star 開(kāi)源資源



          分享、點(diǎn)贊和在看

          支持我們分享更多優(yōu)秀開(kāi)源項(xiàng)目,謝謝!

          瀏覽 39
          點(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>
                  成人视频欧美 | 图片专区亚洲欧美另类 | 中文字幕国产av 中文字幕国产豆花 | 亚洲爆乳一区二区三区 | 久久精品视频免费观看 |