Python數據可視化入門級教程,掌握這4個可視化包就足夠了

大話數據分析 發佈 2024-03-26T11:03:48.777356+00:00

什麼是數據可視化?

什麼是數據可視化?數據可視化是為了使得數據更高效地反應數據情況,便於讓讀者更高效閱讀,通過數據可視化突出數據背後的規律,以此突出數據中的重要因素,如果使用Python做數據可視化,建議學好如下這四個Python數據分析包,分別是:

Pandas、Matplotlib、Seaborn、Pyecharts

學好以上四個數據分析包,做可視化足夠用了,全文較長,建議耐心看完,學習後即可使用Python做數據可視化,具體的代碼實操部分可以實際用代碼進行演示,這樣才能更好的掌握,下面一起來學習~

pandas

官網https://www.pypandas.cn/

Pandas 是 Python的核心數據分析支持庫,提供了快速、靈活、明確的數據結構,旨在簡單、直觀地處理關係型、標記型數據,廣泛應用於數據分析領域,Pandas 適用於處理與 Excel 表類似的表格數據,以及有序和無序的時間序列數據等。

Pandas 的主要數據結構是 Series(一維數據)和 DataFrame(二維數據),這兩種數據結構足以處理金融、統計、社會科學、工程等領域裡的大多數典型用例,使用pandas進行數據分析流程包含數據整理與清洗、數據分析與建模、數據可視化與制表等階段。

  • 靈活的分組功能:(group by)數據分組、聚合、轉換數據;
  • 直觀地合併功能:(merge)數據連接;
  • 靈活地重塑功能:(reshape)數據重塑;

pandas庫不僅可以做一些數據清洗的工作,還可以使用pandas作圖,並且做圖時,使用一行代碼就可以輕鬆作圖,詳細的作圖方法可以看代碼中的注釋。

#導入pandas庫  
import pandas as pd    
#生成一個Series  
s=pd.Series([1,3,3,4], index=list('ABCD'))    

#括號內不指定圖表類型,則默認生成直線圖  
s.plot()
#條形圖
s.plot(kind='bar')
#水平條形圖   
s.plot.barh()
#餅圖   
s.plot.pie()
#直方圖   
s.plot.hist()
#密度圖   
import numpy as np 

s=pd.Series(np.random.randn(1000))  #生成一列隨機數   
s.plot.kde()   
s.plot.density()
#散點圖   
import numpy as np 
#生成一個DataFrame  
df=pd.DataFrame(np.random.randn(1000,2),
                 columns=['X1','Y'])
df.plot.scatter(x='X1',y='Y')
#六角箱圖   
df.plot.hexbin(x='X1',y='Y',gridsize=8)
#箱型圖
df=pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
df.plot.box()
#面積圖
df=pd.DataFrame(np.random.randint(10,size=(4,4)),
                 columns=list('ABCD'),
                 index=list('WXYZ'))    

df.plot.area()

matplotlib

官網https://www.matplotlib.org.cn/

Matplotlib是一個Python 2D繪圖庫,它以多種硬拷貝格式和跨平台的交互式環境生成出版物質量的圖形。Matplotlib可用於Python腳本,Python和IPython Shell、Jupyter筆記本,Web應用程式伺服器和四個圖形用戶界面工具包。

Matplotlib 嘗試使容易的事情變得更容易,使困難的事情變得可能,只需幾行代碼就可以生成圖表、直方圖、功率譜、條形圖、誤差圖、散點圖等。

為了簡單繪圖,該 pyplot 模塊提供了類似於MATLAB的界面,尤其是與IPython結合使用時,對於高級用戶,您可以通過面向對象的界面或MATLAB用戶熟悉的一組功能來完全控制線型,字體屬性,軸屬性等。

下面介紹matplotlib的用法,使用matplotlib除了可以作圖外,還可以對於圖表的參數做一些調整,使得圖表更加美觀,關於使用matplotlib的建議,可以做一些常用的圖表模板,更換代碼的數據源就可以生成圖表,而不用一點一點的去調整參數。

#導入模塊  
import matplotlib.pyplot as plt  

#設置風格  
plt.style.use('seaborn-white')  

#中文顯示問題,如果沒有這段代碼,圖表不顯示中文漢字   
plt.rcParams['font.sans-serif'] =['SimHei']

這裡首先導入matplotlib庫,並使用了seaborn-white的圖表風格,可以使用plt.style.available 查看圖表的風格,選擇一個自己喜歡的圖表風格,在圖表中不能顯示漢字,使用一段代碼就可以顯示了。

#構建一個DataFrame 
import pandas as pd  
import matplotlib.pyplot as plt
  
df=pd.DataFrame({'X':[1,3,5,7]})  
df['Y']=df['X']**3  
df
#設置圖像的大小 
plt.figure(facecolor='white',figsize=(9,6),dpi=100)  
plt.plot(df['X'],df['Y'])
   
#設置圖像的標題 
plt.title('折線圖',fontsize=15,color='b') 
 
#設置圖像的X、Y軸標題大小,顏色,與坐標軸的距離  
plt.xlabel('X軸',fontsize=10,color='r',labelpad=15)  
plt.ylabel('Y軸',fontsize=10,color='g',rotation=0,labelpad=15)   

#設置起始坐標點 
plt.xlim([1,8])  
plt.ylim([1,350]) 
#plt.xticks([1,2,3,4])只顯示1,2,3,4  
#plt.yticks([50,150,250,300])只顯示50,150,250,300 
  
#圖像的網格線進行設置 
plt.grid(color='r', linestyle='-.')

這裡首先設置圖像的大小,跟我們畫畫一樣,選擇多大的紙張去作圖,一樣的道理,然後設置坐標軸,起始坐標,網格線等。

有時候,要在一張圖表上繪製多條線。

#多個圖的繪圖方法  
import numpy as np  
import matplotlib.pyplot as plt  

x=np.array([1,3,5])  
y1=x  
y2=x * 10  
y3=x * 20  
y4=x * 30

可以在一個plt.plot命令後繼續加另一個plt.plot命令,可以在一張圖上做另一條線。

plt.figure(facecolor='white')  
plt.plot(x,y1,label='A')  
plt.plot(x,y2,label='B')  
plt.plot(x,y3,label='C')  
plt.plot(x,y4,label='D')   

plt.legend()#顯示圖例

使用plt.subplots命令也可以作出同樣的圖。

#使用面向對象繪圖  
fig,ax=plt.subplots(facecolor='white')  
plt.plot(x,y1,label='A')  
plt.plot(x,y2,label='B')  
plt.plot(x,y3,label='C')  
plt.plot(x,y4,label='D')   

plt.legend()#顯示圖例

多表繪製

下面介紹在一張圖表的不同位置繪製不同的線型,使用plt.subplot命令首先確定繪圖的位置,比如plt.subplot(223)表示在2*2分布的圖表中第三個位置,其餘的繪圖命令相似。

plt.figure(facecolor='white',figsize=(9,6)) 

plt.subplot(221)  
plt.plot(x,y1,label='A',color='r')  
plt.xticks(fontsize=15)  
plt.legend()#顯示圖例   

plt.subplot(222)  
plt.plot(x,y2,label='B',color='y')  
plt.xticks(fontsize=15)  
plt.legend()#顯示圖例   

plt.subplot(223)  
plt.plot(x,y3,label='C',color='b')  
plt.xticks(fontsize=15)  
plt.legend()#顯示圖例 
  
plt.subplot(224)  
plt.plot(x,y4,label='D',color='g')  
plt.xticks(fontsize=15)  
plt.legend()#顯示圖例   

plt.tight_layout()#密集顯示

除了使用plt.subplot命令確定繪圖區域外,還可以用axs[ ]命令繪圖,這種繪圖方式是面向對象的繪圖方式。

#面向對象繪製多圖  
fig,axs=plt.subplots(2,2,facecolor='white',figsize=(9,6))  

axs[0,0].plot(x,y1,label='A',color='r')  
axs[0,1].plot(x,y2,label='B',color='y')  
axs[1,0].plot(x,y3,label='C',color='b')  
axs[1,1].plot(x,y4,label='D',color='g')

有時候繪製多張表時需共享一個坐標軸,可以使用sharex='all'命令。

#sharex='all'共享X軸  
fig,axs=plt.subplots(4,1,facecolor='white', figsize=(9,6), sharex='all')   
axs[0].plot(x,y1,label='A',color='r')  
axs[1].plot(x,y2,label='B',color='y')  
axs[2].plot(x,y3,label='C',color='b')  
axs[3].plot(x,y4,label='D',color='g')

設置全局變量

使用plt.rcParams命令對全局變量設置,包括字符顯示、中文顯示、背景顏色、標題大小、坐標軸字體大小,線型等。

#導入模塊  
import matplotlib.pyplot as plt  

#設置風格  
plt.style.use('seaborn-white')  

#設置全局變量  
plt.rcParams['axes.unicode_minus'] = False #字符顯示 
plt.rcParams['font.sans-serif'] =['SimHei'] #中文顯示  
plt.rcParams['figure.facecolor'] = 'b' #設置圖表背景顏色 
plt.rcParams['axes.facecolor'] = (0.8,0.9,0.8) #設置RGB顏色  
plt.rcParams['axes.titlesize'] = 20 #設置標題大小  
plt.rcParams['axes.labelsize'] = 20 #設置軸大小  
plt.rcParams['xtick.labelsize'] = 20 #設置X坐標大小  
plt.rcParams['ytick.labelsize'] = 20 #設置Y坐標大小  
plt.rcParams['lines.linestyle'] = '-.' #設置線型  

plt.plot(x,y1,label='A')  
plt.plot(x,y2,label='B')  
plt.plot(x,y3,label='C')  
plt.plot(x,y4,label='D')   
plt.title('折線圖')  
plt.xlabel('X軸')  
plt.ylabel('Y軸')  
plt.legend()#顯示圖例

下圖就是通過設置全局變量做的圖,個人覺得並不美觀,對於其他圖表全局變量的設置,大家可以探索,做出更好看的圖表。

Seaborn

官網http://seaborn.pydata.org/

Seaborn 是一個基於matplotlib的 Python 數據可視化庫,它建立在matplotlib之上,並與Pandas數據結構緊密集成,用於繪製有吸引力和信息豐富的統計圖形的高級界面。

Seaborn 可用於探索數據,它的繪圖功能對包含整個數據集的數據框和數組進行操作,並在內部執行必要的語義映射和統計聚合以生成信息圖,其面向數據集的聲明式 API可以專注於繪圖的不同元素的含義,而不是如何繪製它們的細節。

Matplotlib 擁有全面而強大的 API,幾乎可以根據自己的喜好更改圖形的任何屬性,seaborn 的高級界面和 matplotlib 的深度可定製性相結合,使得Seaborn既可以快速探索數據,又可以創建可定製為出版質量最終產品的圖形。

繪製多行圖

將變量按照多行的形式進行繪製,使用sns.FacetGrid命令。

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})

rs = np.random.RandomState(1979)
x = rs.randn(500)
g = np.tile(list("ABCDEFGHIJ"), 50)
df = pd.DataFrame(dict(x=x, g=g))
m = df.g.map(ord)
df["x"] += m

pal = sns.cubehelix_palette(10, rot=-.25, light=.7)
g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)

g.map(sns.kdeplot, "x",
      bw_adjust=.5, clip_on=False,
      fill=True, alpha=1, linewidth=1.5)
g.map(sns.kdeplot, "x", clip_on=False, color="w", lw=2, bw_adjust=.5)

g.refline(y=0, linewidth=2, linestyle="-", color=None, clip_on=False)

def label(x, color, label):
    ax = plt.gca()
    ax.text(0, .2, label, fontweight="bold", color=color,
            ha="left", va="center", transform=ax.transAxes)

g.map(label, "x")

g.figure.subplots_adjust(hspace=-.25)

g.set_titles("")
g.set(yticks=[], ylabel="")
g.despine(bottom=True, left=True)

繪製熱力圖

將數據的大小用熱力圖進行呈現,使用sns.heatmap命令。

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme()

flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")

f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, ax=ax)

Pyecharts

官網https://pyecharts.org/#/

Echarts 是一個由百度開源的數據可視化,憑藉著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可。而 Python 是一門富有表達力的語言,很適合用於數據處理。當數據分析遇上數據可視化時,pyecharts 誕生了。

Pyecharts具有簡潔的 API 設計,使用如絲滑般流暢,支持鏈式調用,囊括了 30+ 種常見圖表,應有盡有,支持主流 Notebook 環境,Jupyter Notebook 和 JupyterLab,擁有高度靈活的配置項,可輕鬆搭配出精美的圖表。

Pyecharts強大的數據交互功能,使數據表達信息更加生動,增加了人機互動效果,並且數據呈現效果可直接導出為html文件,增加數據結果交互的機會,使得信息溝通更加容易。

繪製地圖

Pyecharts有著豐富的圖表素材,支持鏈式調用,如下是使用Pyecharts的地理圖表功能,空間上直觀顯示數據可視化效果。

from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker

c = (
    Map()
    .add("商家A", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Map-VisualMap(分段型)"),
        visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
    )
    .render("map_visualmap_piecewise.html")
)

繪製雷達圖

使用Radar命令繪製出雷達圖,用來顯示多變量數據的圖形方法。

from pyecharts import options as opts
from pyecharts.charts import Radar

v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
c = (
    Radar()
    .add_schema(
        schema=[
            opts.RadarIndicatorItem(name="銷售", max_=6500),
            opts.RadarIndicatorItem(name="管理", max_=16000),
            opts.RadarIndicatorItem(name="信息技術", max_=30000),
            opts.RadarIndicatorItem(name="客服", max_=38000),
            opts.RadarIndicatorItem(name="研發", max_=52000),
            opts.RadarIndicatorItem(name="市場", max_=25000),
        ]
    )
    .add("預算分配", v1)
    .add("實際開銷", v2)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        legend_opts=opts.LegendOpts(selected_mode="single"),
        title_opts=opts.TitleOpts(title="Radar-單例模式"),
    )
    .render("radar_selected_mode.html")
)

以上介紹pandas如何繪製圖表,同時引申matplotlib庫的使用,並且介紹Seaborn和Pyecharts這兩個數據可視化庫,加以了解Python數據可視化內容,同時在數據可視化中學習多表繪製和設置全局變量,相信通過以上的學習,一定能對你學習Python數據可視化有所啟發。

通過精美的圖表可以方便用戶解讀數字之間的關係,相比起枯燥的表格來講,有助於發現容易被忽視的趨勢和規律,進而幫助用戶做出正確的判斷,對這部分知識感興趣的朋友可以自己做實踐一下,從而加深學習理解~

關鍵字: