8k Star!基於 Matplotlib 的數據可視化利器

【導語】: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...

2. 散點圖

散點圖是一個基於二維數據來顯示點的圖表。用 seaborn 庫來繪製一個散點圖只須要幾行代碼,很是簡單。scatterplot 須要的參數是咱們繪圖須要的數據集,以及x,y軸分別表明什麼數據。

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

繪製的圖表以下:

散點圖

3. 線條圖

根據連續或分類數據的變化,畫出線條圖。它是一種流行且廣爲人知的圖表,易於繪製。與以前類似,咱們使用lineplot函數,
指定數據集,以及x,y軸分別表明哪一列數據。seaborn會完成剩餘的工做:

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

繪製的圖表以下:

線條圖

4. 條形圖

正如你所推測的那樣,條形圖多是最出名的圖表類型了。與散點圖和線條同樣,咱們能夠用barplot函數繪製條形圖:

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

繪製的圖表以下:

條形圖

5. 用matplotlib擴展

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畫出的樣本圖

使用subplot功能,咱們能夠在一個圖上繪製多個圖表。該函數有三個參數,第一個是行數,第二個是列數,最後一個是圖號。咱們使用matplotlib與seaborn中的函數,seaborn在每一個subplot中繪製一個seaborn圖表。

6. 繪製不一樣風格的漂亮圖形

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

2. 理解tip_percentage

讓咱們首先看看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()

繪製的圖表以下:

tip_percentage變化圖

咱們必須自定義binwidth屬性以使其更具可讀性,如今咱們能夠快速理解數據了。大多數客戶會給15%至20%的小費,而有些狀況下,小費超過70%。這些值是異常的,應該進行檢查,以肯定這些值是否出錯。

3. 觀察tip_percentage是否與天天的不一樣時刻是否有關,也將會頗有趣:

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在一天不一樣時刻的變化圖

此次咱們加載了全部數據集到圖表中,而不只僅是一列,而後給time列設置了hue屬性。這將會使圖表給每個time值設置不一樣的顏色,併爲其添加圖例。

4. 一週中某天的小費數

另外一個有趣的度量標準是根據一週中的某天,知道能夠獲得小費的總數:

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在一週中不一樣天的變化圖

看起來星期五很適合待在家裏。

5. 桌子尺寸和日期對小費的影響

有時候咱們想要知道多個變量如何共同影響輸出。例如,星期幾和桌子尺
寸怎樣共同影響小費百分比?爲了畫出最終的圖表,咱們首先用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()

繪製的圖表以下:

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

結論

固然,咱們還能夠用 seaborn 作不少事情,經過查看官方文檔能看到更多例子。感謝你的閱讀!

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

開源前哨 平常分享熱門、有趣和實用的開源項目。參與維護 10萬+ Star 的開源技術資源庫,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。
相關文章
相關標籤/搜索