【導語】:Seaborn 是一個能夠實現數據可視化的 Python 庫,它是基於 matplotlib 庫封裝而成的,同時還能兼容 pandas 數據結構。咱們可使用 Seaborn 來製做漂亮的數據圖表,操做簡單,易於上手。python
提示:Seaborn 支持 Python 3.7+ ,已再也不支持 Python 2。
數據可視化是一種數據科學家將原始數據轉化爲圖表的技術,這些圖表能產生許多有價值的信息。圖表下降了原始數據的複雜性,使用戶更易理解。 git
有許多完成數據可視化的工具,例如 Tableau、Power BI、ChartBlocks以及其餘的無代碼工具。這些工具備着各自的用戶,也都很強大。然而當咱們須要一個良好的平臺來處理原始數據時,python 不失爲一個好的選擇。 github
雖然這種方法較爲複雜,須要的編程知識也更多,但 python 能經過許多操做和轉換來完成數據可視化,所以對數據科學家來講是一個理想的選擇。Python 最大的一個優勢就是它擁有強大的第三方庫,來處理數據,好比numpy、pandas、matplotlib、tensorflow。 shell
Matplotlib多是目前最受承認的繪圖庫了,不只適用於python,還適用於R語言
等。它的定製化和可操做性使其坐上了頭把交椅。然而當使用 matplotlib 時,有些定製化和操做功能很難實現。 編程
基於 matplotlib,開發者創造了一個叫 seaborn 的庫。seaborn 與 matplotlib 同樣強大,在帶來一些新特性的同時還能簡化繪圖。 數組
在本文中,咱們主要關注如何使用 seaborn 繪製高級的圖表。你能夠依據這些例子建立本身的圖表。 網絡
### 2. Seaborn是什麼?數據結構
Seaborn是 python 中一個能夠製做數據圖表的庫。它是 matplotlib 庫的高級封裝,同時還能兼容 pandas 數據結構。 函數
Seaborn能讓你快速探索並理解數據。seaborn的工做方式爲:首先捕捉包含全部數據的整個數據結構或數組,隨後經過執行繪圖和統計數據須要的全部內部函數,將數據轉換爲信息圖。 工具
當你根據自身需求設計圖表時,seaborn能減小複雜性。
Seaborn 的Github主頁:
https://github.com/mwaskom/se...
pip install seaborn
當安裝seaborn時,也會自動安裝其餘繪圖所須要的庫,例如 matplotlib,pandas、numpy 和 scipy。此外,在寫代碼繪圖前,咱們須要導入一些模塊。
import matplotlib.pyplot as plt import pandas as pd import numpy as np import seaborn as sns
### 1. 繪製你的第一個圖表
因爲網絡問題,在國內使用seaborn的數據集時,注意啓用代理,以避免沒法加載數據集。
在咱們開始畫圖以前,須要使用數據。seaborn的方便之處在於它兼容pandas數據結構。此外,該庫自帶了
一些內建數據集,你能夠直接用代碼加載,無需手動下載文件。讓咱們一塊兒來看看如何加載一個包含航班信息的數據集:
flights_data = sns.load_dataset("flights") res = flights_data.head() print(res)
輸出結果以下:
year | month | passengers | |
---|---|---|---|
0 | 1949 | Jan | 112 |
1 | 1949 | Feb | 118 |
2 | 1949 | Mar | 132 |
3 | 1949 | Apr | 129 |
4 | 1949 | May | 121 |
當調用load_dataset函數並寫入數據集的名稱後,神奇的事情發生了,控制檯返回了一個數據結構。
全部的數據集在這裏可見:
Github連接:
https://github.com/mwaskom/se...
散點圖是一個基於二維數據來顯示點的圖表。用 seaborn 庫來繪製一個散點圖只須要幾行代碼,很是簡單。scatterplot 須要的參數是咱們繪圖須要的數據集,以及x,y
軸分別表明什麼數據。
flights_data = sns.load_dataset("flights") sns.scatterplot(data=flights_data, x="year", y="passengers") plt.show()
繪製的圖表以下:
根據連續或分類數據的變化,畫出線條圖。它是一種流行且廣爲人知的圖表,易於繪製。與以前類似,咱們使用lineplot函數,
指定數據集,以及x,y軸分別表明哪一列數據。seaborn會完成剩餘的工做:
flights_data = sns.load_dataset("flights") sns.lineplot(data=flights_data, x="year", y="passengers") plt.show()
繪製的圖表以下:
正如你所推測的那樣,條形圖多是最出名的圖表類型了。與散點圖和線條同樣,咱們能夠用barplot函數繪製條形圖:
flights_data = sns.load_dataset("flights") sns.barplot(data=flights_data, x="year", y="passengers") plt.show()
繪製的圖表以下:
seaborn創建在matplotlib之上,擴展了它的功能,增長了複雜性。如其所述,卻並無限matplotlib的性能。任何seaborn圖表均可以用matplotlib的函數繪製。seaborn在特定的操做中能夠提供幫助,容許seaborn利用matplotlib的力量而無需重寫函數。例如你若是想用seaborn來自動繪製多個圖表,你就能夠利用matplotlib中的subplot函數:
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功能,咱們能夠在一個圖上繪製多個圖表。該函數有三個參數,第一個是行數,第二個是列數,最後一個是圖號。咱們使用matplotlib與seaborn中的函數,seaborn在每一個subplot中繪製一個seaborn圖表。
seaborn使咱們能夠更改圖形界面,它提供了五種不一樣的風格:darkgrid,whitegrid,dark,white,和ticks.
第一個例子深色網格圖:
flights_data = sns.load_dataset("flights") sns.set_style("darkgrid") sns.lineplot(data = flights_data, x = "year", y = "passengers") plt.show()
繪製的圖表以下:
另外一個例子白色網格圖:
flights_data = sns.load_dataset("flights") sns.set_style("whitegrid") sns.lineplot(data=flights_data, x="year", y="passengers") plt.show()
繪製的圖表以下:
咱們瞭解seaborn的基本知識後,如今讓咱們經過在同一數據集上構建多個圖表,來進行練習。在咱們的例子中,咱們將
使用數據集「tips」,你可使用seaborn直接下載。首先,加載數據集:
tips_df = sns.load_dataset('tips') res = tips_df.head() print(res)
輸出結果以下:
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Male | No | Sun | Dinner | 4 |
我想打印出數據集的前幾行,來了解列和數據自己。一般我會用一些pandas函數修復一些數據問題,好比null值,還可
以加入一些對數據集有用的信息。你能夠在下面的連接中閱讀更多信息:
pandas使用指南:
https://livecodestream.dev/po...
讓咱們在數據集中建立新的一列,以表示小費佔總費用的百分比:
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)
新的數據結構以下:
total_bill | tip | sex | smoker | day | time | size | tip_percentage | |
---|---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 | 0.059447 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 | 0.160542 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 | 0.166587 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 | 0.139780 |
4 | 24.59 | 3.61 | Male | No | Sun | Dinner | 4 | 0.146808 |
讓咱們首先看看tip_percentage的分佈。鑑於此,使用hisplot來產生柱狀圖:
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()
繪製的圖表以下:
咱們必須自定義binwidth屬性以使其更具可讀性,如今咱們能夠快速理解數據了。大多數客戶會給15%至20%的小費,而有些狀況下,小費超過70%。這些值是異常的,應該進行檢查,以肯定這些值是否出錯。
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()
繪製的圖表以下:
此次咱們加載了全部數據集到圖表中,而不只僅是一列,而後給time列設置了hue屬性。這將會使圖表給每個time值設置不一樣的顏色,併爲其添加圖例。
另外一個有趣的度量標準是根據一週中的某天,知道能夠獲得小費的總數:
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()
繪製的圖表以下:
看起來星期五很適合待在家裏。
有時候咱們想要知道多個變量如何共同影響輸出。例如,星期幾和桌子尺
寸怎樣共同影響小費百分比?爲了畫出最終的圖表,咱們首先用pandas中的pivot函數預處理數據,隨後繪製一個熱點圖:
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()
繪製的圖表以下:
固然,咱們還能夠用 seaborn 作不少事情,經過查看官方文檔能看到更多例子。感謝你的閱讀!
官方文檔地址: http://seaborn.pydata.org/
開源前哨
平常分享熱門、有趣和實用的開源項目。參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。