Python数据可视化之从单变量到多变量的方法

张开发
2026/4/11 12:29:58 15 分钟阅读

分享文章

Python数据可视化之从单变量到多变量的方法
Python凭借其强大的可视化库如Matplotlib、Seaborn成为进行EDA的首选工具。本文基于一份实用的“Python数据可视化速查表”系统介绍从单变量到多变量、从时间序列到文本数据的可视化方法并提供代码示例与扩展解读助你高效完成数据探索。1. 单变量分析了解单个变量分布单变量分析旨在理解数据集中单个变量的分布特征适用于数值型和分类型数据。常用图表与代码示例12345678910111213141516171819202122232425262728importpandas as pdimportseaborn as snsimportmatplotlib.pyplot as plt# 示例数据框dfpd.DataFrame({col: [1,2,2,3,3,3,4,4,5]})# 1. 直方图查看数值分布df.hist()plt.title(数值分布直方图)plt.show()# 2. 箱线图查看分布与离群点原文borglot应为boxplotsns.boxplot(datadf, ycol)# 展示数值列col的分布plt.title(箱线图展示分布与异常值)plt.show()# 3. 核密度估计图平滑的概率密度曲线sns.kdeplot(datadf[col])plt.title(核密度估计图)plt.show()# 4. 条形图适用于分类数据频次统计df[col].value_counts().plot(kindbar)plt.title(分类频次条形图)plt.xlabel(类别)plt.ylabel(频次)plt.show()适用场景直方图了解数值分布是否正态、偏斜箱线图快速发现异常值核密度图平滑展示分布趋势条形图展示类别频次2. 双变量分析探索两个变量间关系双变量分析用于探索两个变量之间的关联包括数值-数值、数值-类别等组合。12345678910111213141516171819202122232425262728293031# 示例数据dfpd.DataFrame({x: [1,2,3,4,5],y: [2,4,6,8,10],category: [A,B,A,B,A]})# 1. 散点图两个数值变量关系sns.scatterplot(datadf, xx, yy)plt.title(散点图x与y的关系)plt.show()# 2. 带回归线的散点图sns.regplot(datadf, xx, yy)plt.title(带线性回归的散点图)plt.show()# 3. 条形图类别与数值的对比sns.barplot(xcategory, yy, datadf)plt.title(不同类别的y值对比)plt.show()# 4. 小提琴图类别下的分布与密度sns.violinplot(datadf, xcategory, yy)plt.title(小提琴图类别y的分布)plt.show()# 5. 箱线图原文borglet应为boxplot比较类别间分布sns.boxplot(xcategory, yy, datadf)plt.title(箱线图类别间分布比较)plt.show()3. 多变量分析三维及以上关系探索当我们需要同时考察三个或更多变量时多变量可视化工具显得尤为重要。1234567891011121314151617181920212223242526272829303132# 示例数据dfpd.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. 散点图矩阵所有数值变量两两关系sns.pairplot(df)plt.suptitle(散点图矩阵, y1.02)plt.show()# 2. 相关热图变量间相关性强度sns.heatmap(df.corr(), annotTrue, cmapcoolwarm)plt.title(变量相关性热图)plt.show()# 3. 联合分布图散点图边缘分布sns.jointplot(datadf, xx, yy)plt.show()# 4. 三变量散点图颜色表示第三维plt.scatter(df[x], df[y], cdf[z], cmapviridis)plt.colorbar(labelz值)plt.title(三变量散点图颜色表示z)plt.show()# 5. 分类着色散点图sns.scatterplot(datadf, xx, yy, huetype)plt.title(按类别着色的散点图)plt.show()4. 时间序列分析趋势、周期与异常时间序列数据常见于金融、气象、日志等领域可视化有助于识别趋势、季节性和异常。1234567891011121314151617181920212223242526272829# 示例时间序列数据dfpd.DataFrame({date: pd.date_range(2023-01-01, periods100, freqD),value: np.random.randn(100).cumsum()50})# 1. 简单时间序列图df.plot(xdate, yvalue)plt.title(时间序列趋势图)plt.xlabel(日期)plt.ylabel(数值)plt.show()# 2. 移动平均图窗口为7天df.set_index(date)[value].rolling(window7).mean().plot()plt.title(7天移动平均图)plt.show()# 3. 时间序列分解需statsmodels库fromstatsmodels.tsa.seasonalimportseasonal_decomposeresultseasonal_decompose(df.set_index(date)[value], modeladditive, period30)result.plot()plt.suptitle(时间序列分解趋势季节残差, y1.02)plt.show()# 4. 带置信区间的折线图sns.lineplot(datadf, xdate, yvalue)plt.title(带置信区间的时间序列图)plt.show()5. 文本数据分析词频、主题与情感文本数据可视化常用于自然语言处理NLP帮助理解词频分布、主题结构等。123456789101112131415161718192021222324252627fromwordcloudimportWordCloudimportnltkfromnltk.probabilityimportFreqDist# 示例文本textdata science machine learning python visualization analysis exploration# 1. 词云图wordcloudWordCloud(width800, height400).generate(text)plt.imshow(wordcloud, interpolationbilinear)plt.axis(off)plt.title(词云图)plt.show()# 2. 词频分布图wordstext.split()fdistFreqDist(words)fdist.plot(30, cumulativeFalse)# 显示前30个词plt.title(词频分布图)plt.show()# 3. 词频条形图sns.barplot(xlist(fdist.keys())[:10], ylist(fdist.values())[:10])plt.title(前10高频词条形图)plt.xticks(rotation45)plt.tight_layout()plt.show()6. 图表自定义美化与标注好的可视化不仅需要正确表达信息还需要良好的可读性与美观性。12345678910# 示例图表自定义plt.figure(figsize(10,6))# 设置图像尺寸sns.scatterplot(datadf, xx, yy)plt.title(这是一个带自定义样式的散点图, fontsize16)plt.xlabel(X轴标签, fontsize12)plt.ylabel(Y轴标签, fontsize12)plt.xticks(rotation45)# X轴标签旋转45度plt.grid(True, linestyle--, alpha0.5)plt.tight_layout()# 自动调整子图间距plt.show()7. 图表保存与展示123456789# 保存图表到文件plt.savefig(scatter_plot.png, dpi300, bbox_inchestight)print(图表已保存为 scatter_plot.png)# 展示图表plt.show()# 关闭当前图像释放内存plt.close()探索性数据分析流程示意图以下Mermaid流程图展示了典型的EDA可视化流程通过本指南你可以系统掌握Python在探索性数据分析中的可视化工具与技巧。无论是单变量分布探查还是多变量关系挖掘或是时间序列与文本数据的可视化合理运用这些图表工具将极大提升你的数据分析效率与洞察力。建议结合实际项目多加练习形成自己的可视化工作流。

更多文章