前段時間學習了梁斌老師的數據分析(升級版)第三講<探索性數據分析及數據可視化>,因爲以前一直比較忙沒有來得及總結,趁今天是週末有點閒暇時間,整理一下筆記:html
Seaborn是一種基於matplotlib的Python繪圖工具庫。它提供了一種高度交互式界面,便於用戶可以作出各類有吸引力的,信息量大的統計圖表。python
在大多數狀況下使用seaborn就能作出很具備吸引力的圖,而使用matplotlib就能製做具備更多特點的圖。應該把Seaborn視爲matplotlib的補充,而不是替代物。同時它能高度兼容numpy與pandas數據結構以及scipy與statsmodels等統計模式的可視化。算法
特色:api
安裝數組
pip install seaborn數據結構
若是是在Anaconda環境下,打開Anaconda prompt:frontend
conda install seaborndom
數據集分佈可視化函數
1 單變量分佈 seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_his t=False, axlabel=None, label=None, ax=None)工具
a : series或一維數組或列表類型的數據
bins :設置矩形條的數量
hist :控制是否顯示條形圖
kde :控制是否顯示核密度估計圖
rug :控制是否顯示觀測的小細條(邊際毛毯)
fit :控制擬合的參數分佈圖形
vertical : 顯示正交控制
import numpy as np import pandas as pd from scipy import stats import matplotlib.pyplot as plt import seaborn as sns //注意:一旦導入了seaborn,matplotlib的默認做圖風格就會被覆蓋成seaborn的格式
sns.set_style("dark") #設置背景色爲黑色
%matplotlib inline
// 準備數據
x1 = np.random.normal(size = 1000) x2 = np.random.randint(0, 50, 200)
直方圖
sns.distplot(x1, bins=20, kde=True,rug=True)
核密度估計(核密度估計是在機率論中用來估計未知的密度函數,屬於非參數檢驗方法之一。)
sns.distplot(x2, hist=False, rug=True)
sns.kdeplot(x2, shade=True) //shade控制陰影
sns.rugplot(x2)
擬合參數分佈
x = np.random.gamma(6, size=200)#生成gamma分佈的數據 sns.distplot(x, kde=False, fit=stats.gamma);#fit擬合
2 雙變量分佈
// 準備數據 df1 = pd.DataFrame({"x": np.random.randn(200), "y": np.random.randn(200)}) df2 = pd.DataFrame({"x": np.random.randn(200), "y": np.random.randint(0, 100, 200)})
散佈圖
sns.jointplot(x="x", y="y", data=df1)
二維直方圖
sns.jointplot(x="x", y="y", data=df_obj1, kind="hex")
核密度估計
sns.jointplot(x="x", y="y", data=df_obj1, kind="kde")
3 數據集中變量間關係可視化
seaborn能夠一次性兩兩組合多個變量作出多個對比圖,有n個變量,就會作出一個n × n個格子的圖,譬若有2個變量,就會產生4個格子,每一個格子就是兩個變量之間的對比圖
相同的兩個變量之間(var1 vs var1 和 var2 vs var2)以直方圖展現,不一樣的變量則以散點圖展現(var1 vs var2 和var2 vs var1)
要注意的是數據中不能有NaN(缺失的數據),不然會報錯
dataset = sns.load_dataset("tips")
sns.pairplot(dataset)
類別數據可視化
// 準備數據
data = sns.load_dataset('exercise')
數據類型以下:
Unnamed: 0 id diet pulse time kind 0 0 1 low fat 85 1 min rest 1 1 1 low fat 85 15 min rest 2 2 1 low fat 88 30 min rest 3 3 2 low fat 90 1 min rest 4 4 2 low fat 92 15 min rest
1 類別散點圖
sns.stripplot(x="diet", y="pulse", data=data) //數據點會重疊
sns.swarmplot(x="diet", y="pulse", data=data, hue='kind')//數據點不重疊
2 類別內數據分佈
箱型圖
sns.boxplot(x="diet", y="pulse", data=data)
小提琴圖
sns.violinplot(x="diet", y="pulse", data=data, hue='kind') // hue 指定子類別
3 類別內統計圖
柱狀圖
sns.barplot(x="diet", y="pulse", data=data, hue='kind')
點圖
sns.pointplot(x="diet", y="pulse", data=data, hue='kind')
Seaborn的API:https://stanford.edu/~mwaskom/software/seaborn/api.html#style-frontend