IT评测·应用市场-qidao123.com

标题: 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践 [打印本页]

作者: 来自云龙湖轮廓分明的月亮    时间: 2025-3-20 10:18
标题: 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践

一、 基本概念与专业术语分析

本部门旨在资助初学者从理论上认识数据可视化的基本概念,并理解常见图形的内涵及其适用场景。通过掌握这些基本概念,您将能更好地使用数据分布、相干性和多维数据展示等工具来探索和分析数据。
1.1 数据分布、相干性与多维数据


1.2 专业术语解释与图形介绍

图形名称界说适用场景常用工具直方图展示数值型数据的分布情况,通过分桶(bins)统计各区间的频数或密度。数值型数据的分布分析、检测偏态和多峰现象。Matplotlib、Seaborn箱线图使用五数概述(最小值、Q1、中位数、Q3、最大值)展示数据分布及非常值。非常值检测、数据分布比较。Matplotlib、Seaborn、Pandas散点图表现两个变量之间的关系,每个点代表一对数据值,常用于观察趋势与相干性。变量间相干性分析、趋势判定,多维信息可通过颜色或形状编码。Matplotlib、Seaborn热图用颜色深浅展示矩阵中数值巨细,如相干系数矩阵或缺失值分布。相干性分析、缺失数据可视化。Seaborn、Matplotlib平行坐标图通过平行分列的坐标轴展示多维数据,每条线代表一个数据样本。高维数据展示、分类、聚类结果的模式识别。Pandas、Plotly交互式图表允许用户通过缩放、过滤、悬停等方式与图表互动,获得更详细的数据展示。动态数据探索、实时数据分析。Plotly、Bokeh、Altair地理信息图将数据与地理位置关联,通过地图表现地区数据分布、热门和趋势。地区贩卖、人口统计、环境监测等须要地理位置关联的数据分析。GeoPandas、Folium、Plotly
二、 直方图

在数据探索过程中,我们通常须要了解数据的分布情况,例如数据的会集趋势、离散程度、是否存在非常值等。直方图(Histogram)是一种常用的可视化工具,能够直观地展示数据在不同区间(bins,桶)中的频数或概率密度。
   直方图的作用
  

   直方图 vs. 条形图
  对比项直方图(Histogram)条形图(Bar Chart)数据类型数值型数据(连续变量)分类数据(离散变量)x 轴数值区间(bins)离散类别(分类变量)柱子隔断无隔断,数据是连续的有隔断,数据是独立的用途表现数据分布,适用于统计分析统计分类变量的频数,适用于类别对比
   直方图绘制(Matplotlib & Seaborn)
  中文乱码必备:
  1. import matplotlib.pyplot as plt
  2. # 设置中文字体和解决负号显示问题
  3. plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
  4. plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
复制代码
Python 提供了多种绘制直方图的工具,最常用的是 MatplotlibSeaborn,它们支持不同的 bin 规则,并能叠加密度曲线,提升数据可读性。
2.1 使用 Matplotlib 绘制基础直方图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 生成模拟数据(服从正态分布)
  4. np.random.seed(42)
  5. data = np.random.normal(loc=50, scale=15, size=1000)  # 均值 50,标准差 15,样本数 1000
  6. # 绘制直方图
  7. plt.figure(figsize=(8, 5))
  8. plt.hist(data, bins=30, color='skyblue', edgecolor='black', alpha=0.7)
  9. # 添加标题和标签
  10. plt.title("数据分布直方图", fontsize=14)
  11. plt.xlabel("数值区间", fontsize=12)
  12. plt.ylabel("频数", fontsize=12)
  13. # 显示图形
  14. plt.show()
复制代码
解释


2.2 使用 Seaborn 绘制直方图 + 密度曲线

  1. import seaborn as sns
  2. # 绘制直方图 + KDE 密度曲线
  3. plt.figure(figsize=(8, 5))
  4. sns.histplot(data, bins=30, kde=True, color='blue', edgecolor='black', alpha=0.6)
  5. # 添加标题
  6. plt.title("Seaborn 直方图与密度曲线", fontsize=14)
  7. plt.xlabel("数值区间", fontsize=12)
  8. plt.ylabel("频数", fontsize=12)
  9. plt.show()
复制代码
Seaborn 的优势



2.3 不同 bin 规则对比

bin 的选择对于直方图的展示效果至关紧张。这里对比不同 bin 规则在实际数据中的表现。
对比 Sturges、Rice 和 Freedman-Diaconis 规则
  1. # 计算不同 bin 规则
  2. bins_sturges = np.histogram_bin_edges(data, bins='sturges')  # Sturges 规则
  3. bins_rice = np.histogram_bin_edges(data, bins='rice')  # Rice 规则
  4. bins_fd = np.histogram_bin_edges(data, bins='fd')  # Freedman-Diaconis 规则
  5. plt.figure(figsize=(12, 5))
  6. # Sturges 规则
  7. plt.subplot(1, 3, 1)
  8. plt.hist(data, bins=bins_sturges, color='orange', edgecolor='black', alpha=0.7)
  9. plt.title("Sturges 规则", fontsize=12)
  10. # Rice 规则
  11. plt.subplot(1, 3, 2)
  12. plt.hist(data, bins=bins_rice, color='blue', edgecolor='black', alpha=0.7)
  13. plt.title("Rice 规则", fontsize=12)
  14. # Freedman-Diaconis 规则
  15. plt.subplot(1, 3, 3)
  16. plt.hist(data, bins=bins_fd, color='green', edgecolor='black', alpha=0.7)
  17. plt.title("Freedman-Diaconis 规则", fontsize=12)
  18. plt.show()
复制代码
分析



   业务案例:用户评分数据分布
  在实际业务分析中,我们常须要分析用户评分数据,了解客户满意度分布。
  1. # 模拟用户评分数据
  2. ratings = np.random.choice([1, 2, 3, 4, 5], p=[0.05, 0.10, 0.35, 0.35, 0.15], size=1000)
  3. plt.figure(figsize=(8, 5))
  4. sns.histplot(ratings, bins=5, kde=False, discrete=True, color='purple', edgecolor='black')
  5. plt.title("用户评分数据分布", fontsize=14)
  6. plt.xlabel("评分", fontsize=12)
  7. plt.ylabel("频数", fontsize=12)
  8. plt.show()
复制代码
业务解读


   总结
  直方图优化方向关键点bin 选择Sturges 适用于小数据集,Freedman-Diaconis 适用于未知数据分布颜色与透明度alpha 透明度提高可读性,edgecolor='black' 加强对比度密度曲线kde=True 叠加密度曲线,便于观察数据模式业务场景结适用户评分、贩卖数据等挖掘数据特性 直方图是数据探索的紧张工具,通过公道选择 bin 数量、颜色、密度曲线等参数,可以直观分析数据分布并辅助业务决策。在 Jupyter Notebook 中运行这些代码,即可快速上手并深入理解数据的潜伏模式。

三、 箱线图

箱线图(Box Plot)是一种基于数据的五数概述来展示数据分布和检测非常值的图形工具。它能够直观表现数据的中位数、上下四分位数以及数据范围,同时通过“须”(whiskers)和散点标志出潜伏非常值,是数据质量查抄的紧张本领。
3.1 理论基础

   箱线图的组成
  箱线图紧张由以下部门构成:

   箱线图的作用
  

3.2 绘制箱线图

我们将通过 Matplotlib 和 Seaborn 分别展示如何绘制箱线图,并解读图形中的须和非常点。以下代码可在 Jupyter Notebook 中直接运行练习。
3.2.1 使用 Matplotlib 绘制箱线图

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 生成模拟数据:例如模拟某产品销售数据,包含一些异常值
  4. np.random.seed(42)
  5. data = np.random.normal(loc=50, scale=10, size=200)  # 正常分布数据
  6. data = np.append(data, [80, 85, 90])  # 添加几个异常值
  7. plt.figure(figsize=(8, 5))
  8. plt.boxplot(data, vert=True, patch_artist=True, boxprops=dict(facecolor='lightblue', color='blue'),
  9.             whiskerprops=dict(color='blue'), capprops=dict(color='blue'), flierprops=dict(color='red', marker='o', markersize=6))
  10. plt.title("Matplotlib 箱线图示例", fontsize=14)
  11. plt.ylabel("数值", fontsize=12)
  12. plt.show()
复制代码
代码解释


3.2.2 使用 Seaborn 绘制箱线图

Seaborn 提供更高层次的接口,使得画图过程更加简单,同时与 Pandas 数据布局结合紧密,便于数据探索和可视化。
  1. import pandas as pd
  2. import seaborn as sns
  3. # 构造 DataFrame 示例数据
  4. df = pd.DataFrame({
  5.     '销售数据': data,
  6.     '类别': ['A'] * len(data)  # 此处所有数据归为一个类别
  7. })
  8. plt.figure(figsize=(8, 5))
  9. sns.boxplot(x='类别', y='销售数据', data=df, palette="Set2")
  10. plt.title("Seaborn 箱线图示例", fontsize=14)
  11. plt.xlabel("类别", fontsize=12)
  12. plt.ylabel("销售数据", fontsize=12)
  13. plt.show()
复制代码
代码解释



   应用场景与数据质量查抄
  箱线图在数据预处置处罚中的应用非常广泛。例如,在检测数据录入错误时,非常值的标志可以资助数据科学家判定数据是否须要清洗或修正。在业务场景中,箱线图可以用于:


四、 散点图

散点图(Scatter Plot)是一种用于展示两个变量之间关系的图形工具。通过在二维坐标系中绘制数据点,我们可以直观地观察变量之间的相干性和趋势。同时,通过颜色、形状和巨细等编码方法,还能引入第三个或更多维度的信息,从而实现多变量关系的可视化分析。
4.1 理论基础

   展示变量关系
  
   增加维度信息
  
通过这些编码本领,我们可以在二维图形中融入更多信息,资助业务职员更全面地理解数据特性。

4.2 绘制散点图与拟合线

在 Python 中,我们可以使用 Matplotlib 和 Seaborn 来绘制散点图,并通过添加拟合线来辅助数据关联性分析。
4.2.1 使用 Matplotlib 绘制散点图并添加拟合线

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy import stats
  4. # 生成模拟数据:例如,广告费用与销售额之间的关系
  5. np.random.seed(42)
  6. x = np.random.normal(50, 10, 100)  # 广告费用
  7. y = 2 * x + np.random.normal(0, 10, 100)  # 销售额,加上一定噪声
  8. plt.figure(figsize=(8, 6))
  9. plt.scatter(x, y, color='teal', alpha=0.7, edgecolor='black', label='数据点')
  10. # 计算线性回归拟合线
  11. slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
  12. fit_line = slope * x + intercept
  13. plt.plot(x, fit_line, color='red', linewidth=2, label=f'拟合线: y={slope:.2f}x+{intercept:.2f}')
  14. plt.title("广告费用与销售额散点图及拟合线", fontsize=14)
  15. plt.xlabel("广告费用", fontsize=12)
  16. plt.ylabel("销售额", fontsize=12)
  17. plt.legend()
  18. plt.show()
复制代码
解释


4.2.2 使用 Seaborn 绘制散点图并添加拟合线

Seaborn 提供了更高级的接口 lmplot() 和 regplot(),可以直接绘制带有拟合线的散点图,同时支持颜色和形状编码。
  1. import pandas as pd
  2. import seaborn as sns
  3. # 构造 DataFrame 数据,添加一个类别变量,用于颜色编码
  4. df = pd.DataFrame({
  5.     '广告费用': x,
  6.     '销售额': y,
  7.     '产品类别': np.where(x < 50, '低预算', '高预算')  # 根据广告费用划分产品类别
  8. })
  9. # 使用 regplot 绘制散点图与拟合线
  10. plt.figure(figsize=(8, 6))
  11. sns.regplot(x='广告费用', y='销售额', data=df, scatter_kws={'color': 'purple', 'alpha': 0.7, 'edgecolor': 'black'},
  12.             line_kws={'color': 'red', 'linewidth': 2})
  13. plt.title("Seaborn 散点图与拟合线", fontsize=14)
  14. plt.xlabel("广告费用", fontsize=12)
  15. plt.ylabel("销售额", fontsize=12)
  16. plt.show()
  17. # 使用 lmplot 添加颜色编码
  18. sns.lmplot(x='广告费用', y='销售额', hue='产品类别', data=df, height=6, aspect=1.2,
  19.            scatter_kws={'alpha': 0.7, 'edgecolor': 'black'},
  20.            markers=['o', 's'], palette="Set1", ci=None)
  21. plt.title("广告费用与销售额(按产品类别区分)", fontsize=14)
  22. plt.xlabel("广告费用", fontsize=12)
  23. plt.ylabel("销售额", fontsize=12)
  24. plt.show()
复制代码
解释




通过上述代码,我们了解到:

在实际应用中,如贩卖分析、客户行为分析等场景下,散点图不仅能展现变量间的基本关系,还能通过多维编码提供更深入的业务洞察。您可以在 Jupyter Notebook 中运行这些代码,亲自探索数据并根据实际需求调解参数,从而更好地理解和应用散点图的各种功能。
未完待续

进入主页:小乱说技书
更多Python相干关注专栏:Data/Python/大模型

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4