Python數(shù)據(jù)可視化之從單變量到多變量的方法
Python憑借其強(qiáng)大的可視化庫(如Matplotlib、Seaborn)成為進(jìn)行EDA的首選工具。本文基于一份實(shí)用的“Python數(shù)據(jù)可視化速查表”,系統(tǒng)介紹從單變量到多變量、從時(shí)間序列到文本數(shù)據(jù)的可視化方法,并提供代碼示例與擴(kuò)展解讀,助你高效完成數(shù)據(jù)探索。
1. 單變量分析:了解單個(gè)變量分布
單變量分析旨在理解數(shù)據(jù)集中單個(gè)變量的分布特征,適用于數(shù)值型和分類型數(shù)據(jù)。
常用圖表與代碼示例
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 示例數(shù)據(jù)框
df = pd.DataFrame({'col': [1, 2, 2, 3, 3, 3, 4, 4, 5]})
# 1. 直方圖:查看數(shù)值分布
df.hist()
plt.title("數(shù)值分布直方圖")
plt.show()
# 2. 箱線圖:查看分布與離群點(diǎn)(原文borglot應(yīng)為boxplot)
sns.boxplot(data=df, y='col') # 展示數(shù)值列col的分布
plt.title("箱線圖展示分布與異常值")
plt.show()
# 3. 核密度估計(jì)圖:平滑的概率密度曲線
sns.kdeplot(data=df['col'])
plt.title("核密度估計(jì)圖")
plt.show()
# 4. 條形圖:適用于分類數(shù)據(jù)頻次統(tǒng)計(jì)
df['col'].value_counts().plot(kind='bar')
plt.title("分類頻次條形圖")
plt.xlabel("類別")
plt.ylabel("頻次")
plt.show()
適用場景:
- 直方圖:了解數(shù)值分布是否正態(tài)、偏斜
- 箱線圖:快速發(fā)現(xiàn)異常值
- 核密度圖:平滑展示分布趨勢
- 條形圖:展示類別頻次
2. 雙變量分析:探索兩個(gè)變量間關(guān)系
雙變量分析用于探索兩個(gè)變量之間的關(guān)聯(lián),包括數(shù)值-數(shù)值、數(shù)值-類別等組合。
# 示例數(shù)據(jù)
df = pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10],
'category': ['A', 'B', 'A', 'B', 'A']
})
# 1. 散點(diǎn)圖:兩個(gè)數(shù)值變量關(guān)系
sns.scatterplot(data=df, x='x', y='y')
plt.title("散點(diǎn)圖:x與y的關(guān)系")
plt.show()
# 2. 帶回歸線的散點(diǎn)圖
sns.regplot(data=df, x='x', y='y')
plt.title("帶線性回歸的散點(diǎn)圖")
plt.show()
# 3. 條形圖:類別與數(shù)值的對比
sns.barplot(x='category', y='y', data=df)
plt.title("不同類別的y值對比")
plt.show()
# 4. 小提琴圖:類別下的分布與密度
sns.violinplot(data=df, x='category', y='y')
plt.title("小提琴圖:類別y的分布")
plt.show()
# 5. 箱線圖(原文borglet應(yīng)為boxplot):比較類別間分布
sns.boxplot(x='category', y='y', data=df)
plt.title("箱線圖:類別間分布比較")
plt.show()
3. 多變量分析:三維及以上關(guān)系探索
當(dāng)我們需要同時(shí)考察三個(gè)或更多變量時(shí),多變量可視化工具顯得尤為重要。
# 示例數(shù)據(jù)
df = pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [2, 4, 6, 8, 10],
'z': [5, 4, 3, 2, 1],
'type': ['T1', 'T2', 'T1', 'T2', 'T1']
})
# 1. 散點(diǎn)圖矩陣:所有數(shù)值變量兩兩關(guān)系
sns.pairplot(df)
plt.suptitle("散點(diǎn)圖矩陣", y=1.02)
plt.show()
# 2. 相關(guān)熱圖:變量間相關(guān)性強(qiáng)度
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.title("變量相關(guān)性熱圖")
plt.show()
# 3. 聯(lián)合分布圖:散點(diǎn)圖+邊緣分布
sns.jointplot(data=df, x='x', y='y')
plt.show()
# 4. 三變量散點(diǎn)圖(顏色表示第三維)
plt.scatter(df['x'], df['y'], c=df['z'], cmap='viridis')
plt.colorbar(label='z值')
plt.title("三變量散點(diǎn)圖(顏色表示z)")
plt.show()
# 5. 分類著色散點(diǎn)圖
sns.scatterplot(data=df, x='x', y='y', hue='type')
plt.title("按類別著色的散點(diǎn)圖")
plt.show()
4. 時(shí)間序列分析:趨勢、周期與異常
時(shí)間序列數(shù)據(jù)常見于金融、氣象、日志等領(lǐng)域,可視化有助于識(shí)別趨勢、季節(jié)性和異常。
# 示例時(shí)間序列數(shù)據(jù)
df = pd.DataFrame({
'date': pd.date_range('2023-01-01', periods=100, freq='D'),
'value': np.random.randn(100).cumsum() + 50
})
# 1. 簡單時(shí)間序列圖
df.plot(x='date', y='value')
plt.title("時(shí)間序列趨勢圖")
plt.xlabel("日期")
plt.ylabel("數(shù)值")
plt.show()
# 2. 移動(dòng)平均圖(窗口為7天)
df.set_index('date')['value'].rolling(window=7).mean().plot()
plt.title("7天移動(dòng)平均圖")
plt.show()
# 3. 時(shí)間序列分解(需statsmodels庫)
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df.set_index('date')['value'], model='additive', period=30)
result.plot()
plt.suptitle("時(shí)間序列分解(趨勢+季節(jié)+殘差)", y=1.02)
plt.show()
# 4. 帶置信區(qū)間的折線圖
sns.lineplot(data=df, x='date', y='value')
plt.title("帶置信區(qū)間的時(shí)間序列圖")
plt.show()
5. 文本數(shù)據(jù)分析:詞頻、主題與情感
文本數(shù)據(jù)可視化常用于自然語言處理(NLP),幫助理解詞頻分布、主題結(jié)構(gòu)等。
from wordcloud import WordCloud
import nltk
from nltk.probability import FreqDist
# 示例文本
text = "data science machine learning python visualization analysis exploration"
# 1. 詞云圖
wordcloud = WordCloud(width=800, height=400).generate(text)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.title("詞云圖")
plt.show()
# 2. 詞頻分布圖
words = text.split()
fdist = FreqDist(words)
fdist.plot(30, cumulative=False) # 顯示前30個(gè)詞
plt.title("詞頻分布圖")
plt.show()
# 3. 詞頻條形圖
sns.barplot(x=list(fdist.keys())[:10], y=list(fdist.values())[:10])
plt.title("前10高頻詞條形圖")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
6. 圖表自定義:美化與標(biāo)注
好的可視化不僅需要正確表達(dá)信息,還需要良好的可讀性與美觀性。
# 示例圖表自定義
plt.figure(figsize=(10, 6)) # 設(shè)置圖像尺寸
sns.scatterplot(data=df, x='x', y='y')
plt.title("這是一個(gè)帶自定義樣式的散點(diǎn)圖", fontsize=16)
plt.xlabel("X軸標(biāo)簽", fontsize=12)
plt.ylabel("Y軸標(biāo)簽", fontsize=12)
plt.xticks(rotation=45) # X軸標(biāo)簽旋轉(zhuǎn)45度
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout() # 自動(dòng)調(diào)整子圖間距
plt.show()
7. 圖表保存與展示
# 保存圖表到文件
plt.savefig("scatter_plot.png", dpi=300, bbox_inches='tight')
print("圖表已保存為 scatter_plot.png")
# 展示圖表
plt.show()
# 關(guān)閉當(dāng)前圖像釋放內(nèi)存
plt.close()
探索性數(shù)據(jù)分析流程示意圖
以下Mermaid流程圖展示了典型的EDA可視化流程:

通過本指南,你可以系統(tǒng)掌握Python在探索性數(shù)據(jù)分析中的可視化工具與技巧。無論是單變量分布探查,還是多變量關(guān)系挖掘,或是時(shí)間序列與文本數(shù)據(jù)的可視化,合理運(yùn)用這些圖表工具將極大提升你的數(shù)據(jù)分析效率與洞察力。建議結(jié)合實(shí)際項(xiàng)目多加練習(xí),形成自己的可視化工作流。
以上就是Python數(shù)據(jù)可視化之從單變量到多變量的方法的詳細(xì)內(nèi)容,更多關(guān)于Python單變量到多變量可視化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
git使用.gitignore設(shè)置不生效或不起作用問題的解決方法
下面小編就為大家?guī)硪黄猤it使用.gitignore設(shè)置不生效或不起作用問題的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
python學(xué)習(xí)之第三方包安裝方法(兩種方法)
這篇文章主要介紹了python學(xué)習(xí)之第三方包安裝方法,最近在學(xué)習(xí)QQ空間、微博(爬蟲)模擬登錄,都涉及到了RSA算法。這樣需要下一個(gè)RSA包(第三方包),在網(wǎng)上搜了好多資料,在此做了總結(jié),需要的朋友可以參考下2015-07-07
Python實(shí)現(xiàn)讀取JSON并導(dǎo)出為表格數(shù)據(jù)格式
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言,讀取JSON格式的數(shù)據(jù),并將提取的指定內(nèi)容保存到表格文件中,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
使用Python高效實(shí)現(xiàn)PDF內(nèi)容差異對比的方法詳解
PDF是一種便攜文檔格式,便于跨操作系統(tǒng)傳播文檔,PDF文檔遵循標(biāo)準(zhǔn)格式,因此存在很多可以操作PDF文檔的工具,Python自然也不例外,本文將給大家介紹了如何使用Python高效實(shí)現(xiàn)PDF內(nèi)容差異對比,需要的朋友可以參考下2025-06-06
關(guān)于Python?Selenium自動(dòng)化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果的問題
這篇文章主要介紹了Python?Selenium自動(dòng)化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果,本代碼屬于半自動(dòng)化導(dǎo)出,考慮到開發(fā)效率等因素,有兩處在首次導(dǎo)出時(shí)需要手動(dòng)操作,具體實(shí)現(xiàn)過程跟隨小編一起看看吧2022-01-01
使用Django和Ansible實(shí)現(xiàn)自動(dòng)化部署方式
這篇文章主要介紹了使用Django和Ansible實(shí)現(xiàn)自動(dòng)化部署方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Python程序設(shè)計(jì)入門(5)類的使用簡介
這篇文章主要介紹了Python類的使用,需要的朋友可以參考下2014-06-06
對python 通過ssh訪問數(shù)據(jù)庫的實(shí)例詳解
今天小編就為大家分享一篇對python 通過ssh訪問數(shù)據(jù)庫的實(shí)例詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
dataframe設(shè)置兩個(gè)條件取值的實(shí)例
下面小編就為大家分享一篇dataframe設(shè)置兩個(gè)條件取值的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

