資料視覺化詳解+程式碼演練
作者 | Walker
編輯 | 磐石
出品 | 磐創AI技術團隊
【磐創AI導讀】:本文詳細介紹了兩個資料視覺化工具庫並附python演練。歡迎大家點選上方藍字關注我們的公眾號:磐創AI。
我們本篇文章講的資料視覺化是面向開發人員的,是利用python中一些視覺化庫如:matplotlib或是seaborn透過對資料視覺化,來分析資料表格中各維度間的關係或是資料分佈的特性,從而有助於我們更好的理解資料,幫助我們進行下一步資料分析或是為資料建模提供方向。本篇文章的方法並非是面向使用者做資料展示或面向企業做資料視覺化,這種情況下大家可以嘗試使用Echarts或Tableau等資料展示工具。本文將分為matplotlib視覺化和seaborn視覺化兩個部分。
一、Matplotlib資料視覺化
Matplotlib是一個Python的2D繪相簿,開發者使用Matplotlib僅需要幾行程式碼便可以輕鬆繪圖,生成柱狀圖、散點圖、折線圖、盒圖、琴圖等。
首先,matplotlib的安裝非常的簡單,Windows環境下我們可以透過pip install matplotlib直接完成安裝,而Linux環境可以使用sudo pip install matplotlib完成安裝。接著我們使用import matplotlib.pyplot as plt匯入matplotlib庫,便可以開始繪圖了。
完整的繪圖程式如下所示,包括圖例、座標軸、取值範圍、刻度值、標題、註解等內容。
程式1:
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
# 定義資料部分
x = np.arange(0., 10, 0.2)
y1 = np.cos(x)
y2 = np.sin(x)
y3 = np.sqrt(x)
# 繪製 3 條函式曲線
plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')
plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')
plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')
# 座標軸上移
ax = plt.subplot(111)
ax.spines['right'].set_color('none') # 去掉右邊的邊框線
ax.spines['top'].set_color('none') # 去掉上邊的邊框線
# 移動下邊邊框線,相當於移動 X 軸
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
# 移動左邊邊框線,相當於移動 y 軸
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
# 設定 x, y 軸的取值範圍
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.5, 4.0)
# 設定 x, y 軸的刻度值
plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10'])
plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0],
[r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])
# 新增文字
plt.text(4, 1.68, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
plt.text(4, 1.38, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)
# 特殊點新增註解
plt.scatter([8,],[np.sqrt(8),], 50, color ='m') # 使用散點圖放大當前點
plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))
# 設定標題、x軸、y軸
plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)
# 設定圖例及位置
plt.legend(loc='up right')
# plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')
# 顯示網格線
plt.grid(True)
# 顯示繪圖
plt.show()
散點圖、曲線圖、折線圖、灰度圖、餅狀圖、箱圖、琴圖等常用圖形的繪製,也非常的簡單,程式如下所示:
程式2:
#散點圖,是用來展示兩個維度間的相關性
x = np.random.normal(size=1000)
y = np.random.normal(size=1000)
plt.scatter(x,y)
程式3:
#曲線圖,觀察某個變數的走勢
x = np.arange(-5,5,0.1)
y = x ** 2
plt.plot(x,y)y = np.random.normal(size=1000)
程式4:
#灰度圖,檢視某個維度的資料狀況
x = np.random.normal(size=1000)
plt.hist(x, bins=100)
程式5:
#餅圖,顯示一個系列中各項的大小以及各項所佔總和的比例
import numpy as np
import matplotlib.pyplot as plt
# x為資料, 根據資料在所有資料中所佔的比例顯示結果
# labels設定每個資料的標籤
# autoper 設定每一塊所佔的百分比
# explode 設定某一塊或者很多塊突出顯示出來, 由上面定義的explode陣列決定
# shadow 設定陰影,這樣顯示的效果更好
labels = ["SH", "BI", "SZ", "GD"]
facts = [20, 10, 30, 40]
explode = [0, 0, 0.02, 0]
plt.axes(aspect = 1)
plt.pie(x = facts, labels = labels, explode= explode, shadow= True)
plt.show()
程式6:
#箱圖
#上邊緣(Q3+1.5IQR)、下邊緣(Q1-1.5IQR)、IQR=Q3-Q1
#上四分位數(Q3)、下四分位數(Q1)
#中位數
#異常值
#處理異常值時與3σσ標準的異同:統計邊界是否受異常值影響、容忍度的大小
plt.boxplot(y)
二、Seaborn資料視覺化
Seaborn相較於matplotlib更加的方便、簡單。因為Seaborn中自帶了一些統計的包,它在畫圖的同時,會完成統計的擬合。而且Seaborn畫圖時的引數也更多,這樣matplotlib可能很多行的程式碼,seaborn僅僅需要間的幾行就能實現同樣的效果。
Seaborn的安裝也非常的簡單,使用pip install seaborn直接安裝即可,首先我們來介紹一些Seaborn中的基本繪圖函式:折線圖:plot()、散點圖:lmplot()、柱狀圖:barplot()、聯合分佈圖:jointplot()、琴圖:violinplot()、箱式圖:boxplot()、比較圖:pairplot()等。常用的屬性有hue:對資料按照不同的型別先做分組,再分別對每組資料繪圖;col:用於多列資料都出現分組時;markers:用哪種符號對資料進行標註,Ci:是否開啟置信區間;color、data、x、y等。
接下來我們透過兩個案例來直觀的比較一下seaborn和matplotlib的不同。
案例一:給定資料集航班乘客變化分析data = sns.load_dataset("flights"),利用柱狀圖分析乘客在一年中各月份的分佈情況。
Matplotlib版本:
per_month_distribute = data.groupby('month').agg([np.mean, np.std])['passengers']
_,axe=plt.subplots()
plt.rcParams["figure.figsize"] = (12,8)
print(per_month_distribute)
plt.bar(range(12), per_month_distribute['mean'],color='cadetblue',label='average')
#yerr:y座標對應誤差的正負值,ls=linestyle,lw=linewidth
plt.errorbar(range(12), per_month_distribute['mean'],yerr=per_month_distribute['std'],ls='none',color='darkslategray', lw=5, label='error')
plt.xticks(range(12),per_month_distribute.index,fontsize=15,rotation=45)#把X軸上的字型旋轉45度,以免重疊
plt.xlabel('Month of Year',fontsize=20)
plt.ylabel('Passengers',fontsize=20)
plt.legend([u"乘客量均值", u"乘客量標準差"],fontsize=15) #把label標註的內容顯示出來
plt.title(u'乘客在一年中各月份的分佈',fontsize=25)
axe.spines['top'].set_color(None)
axe.spines['right'].set_color(None)
plt.scatter(x,y)
Seaborn版本:
import seaborn as sns
sns.factorplot(x='month',y='passengers',data=data, kind='bar',size=8)
效果圖:
案例二:給定資料集餐廳收取小費的情況:data = sns.load_dataset("tips"),繪製分組柱狀圖分析性別+抽菸的組合因素對慷慨度的影響。
Matplotlib版本:
tmp_data=data.groupby(['sex','smoker'])['tip'].agg([np.mean,np.std])
width = 0.2
_,axe=plt.subplots()
plt.bar([1,2],tmp_data['mean'].loc['Male'],width=width, label='Male')
plt.errorbar([1,2],tmp_data['mean'].loc['Male'],
yerr = tmp_data['std'].loc['Male'], ls ='none',lw=4,color='darkblue',label=None)
#畫女性抽菸柱狀圖,X+0.2
plt.bar([x+width for x in [1,2]],tmp_data['mean'].loc['Female'],width=width,label='Female',color='salmon')
plt.errorbar([x+width for x in [1,2]],tmp_data['mean'].loc['Female'],
yerr=tmp_data['std'].loc['Female'],ls='none',lw=4,color='darkred',label=None)
plt.setp(axe, xticks=[1.1,2.1], xticklabels=['Yes','No']) #設定橫座標引數
plt.legend(fontsize=15)
plt.xlabel('Smoker',fontsize=15)
plt.ylabel('Tip',fontsize=15)
plt.axis([0.7,2.7,0,5]) #移動座標軸,[left,right,bottom,top],距離左右,上下邊框的距離
plt.title(u'性別+抽菸的組合因素對慷慨度的影響')
Seaborn版本:
sns.barplot(x='smoker',y='tip',data=tips,hue='sex')
效果圖:
總結:透過上邊的案例我們分別透過matplotlib和seaborn完成了資料視覺化的操作,我麼可以看到Seaborn封裝的更好,使用起來更簡單;但Matplotlib靈活性更高、功能也更加強大。學習Matplotlib和Seaborn更多的函式、圖形的繪製,歡迎大家學習它們的官方手冊,這裡小編只是做了一個簡單的常用整理。Matplotlib官方文件:;
Seaborn官方手冊:。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555081/viewspace-2216045/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vega資料視覺化工具—教你輕鬆玩轉大資料視覺化 | 附程式碼視覺化大資料
- 使用 TensorBoard 視覺化模型、資料和訓練ORB視覺化模型
- MNIST資料集詳解及視覺化處理(pytorch)視覺化PyTorch
- NumPy 隨機資料分佈與 Seaborn 視覺化詳解隨機視覺化
- PYTHON視覺化:瞭解資料Python視覺化
- plsql視覺化資料夾解釋SQL視覺化
- 資料看板視覺化視覺化
- 資料視覺化【十五】視覺化
- 大資料視覺化大資料視覺化
- 警惕“資料視覺化”視覺化
- 淺析“程式碼視覺化”視覺化
- 利用Tensorboard視覺化模型、資料和訓練過程ORB視覺化模型
- 資料視覺化基本原理——視覺化模型視覺化模型
- 資料視覺化與資訊視覺化怎麼搞?視覺化
- 遇見大資料視覺化 : 那些 WOW 的資料視覺化案例大資料視覺化
- 什麼是資料視覺化,為什麼資料視覺化很重要?視覺化
- 資料視覺化--實驗五:高維非空間資料視覺化視覺化
- 視覺化之資料視覺化最強工具推薦視覺化
- 視覺化影像處理 | 視覺化訓練器 | 影像分類視覺化
- 新冠肺炎資料視覺化視覺化
- 資料視覺化的秘密視覺化
- 視覺化中的資料視覺化
- 如何看待資料視覺化?視覺化
- Matlab資料視覺化Matlab視覺化
- 資料視覺化實踐視覺化
- 資料視覺化的作用視覺化
- 細談資料視覺化視覺化
- 程式碼視覺化的自動化之路視覺化
- 視覺化 Keras 訓練過程視覺化Keras
- 詳解Python Streamlit框架,用於構建精美資料視覺化web app,練習做個垃圾分類appPython框架視覺化WebAPP
- 資料視覺化工具不會選?資料視覺化實現流程瞭解一下!視覺化
- 資料視覺化能否代替資料分析視覺化
- 資料視覺化的基本原理——視覺通道視覺化
- (在模仿中精進資料視覺化03)OD資料的特殊視覺化方式視覺化
- 資料視覺化學習資源視覺化
- 什麼是資料視覺化?hightopo資料視覺化助力企業數字化視覺化
- python 資料視覺化利器Python視覺化
- pyecharts做資料視覺化(二)Echarts視覺化