一、 基本概念与专业术语分析
本部门旨在资助初学者从理论上认识数据可视化的基本概念,并理解常见图形的内涵及其适用场景。通过掌握这些基本概念,您将能更好地使用数据分布、相干性和多维数据展示等工具来探索和分析数据。
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,桶)中的频数或概率密度。
直方图的作用
- 展示数据分布:资助我们理解数据是否服从正态分布、偏态分布或其他模式。
- 识别数据的会集趋势:可以观察数据的均值、中位数及高频出现的数值范围。
- 检测非常值:极度值可能会落在分布的尾部或独立的 bin 内。
- 支持数据建模:了解数据分布对于选择合适的机器学习模型(如正态假设下的回归模型)非常紧张。
直方图 vs. 条形图
对比项直方图(Histogram)条形图(Bar Chart)数据类型数值型数据(连续变量)分类数据(离散变量)x 轴数值区间(bins)离散类别(分类变量)柱子隔断无隔断,数据是连续的有隔断,数据是独立的用途表现数据分布,适用于统计分析统计分类变量的频数,适用于类别对比 直方图绘制(Matplotlib & Seaborn)
中文乱码必备:
- import matplotlib.pyplot as plt
- # 设置中文字体和解决负号显示问题
- plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体显示中文
- plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
复制代码 Python 提供了多种绘制直方图的工具,最常用的是 Matplotlib 和 Seaborn,它们支持不同的 bin 规则,并能叠加密度曲线,提升数据可读性。
2.1 使用 Matplotlib 绘制基础直方图
- import numpy as np
- import matplotlib.pyplot as plt
- # 生成模拟数据(服从正态分布)
- np.random.seed(42)
- data = np.random.normal(loc=50, scale=15, size=1000) # 均值 50,标准差 15,样本数 1000
- # 绘制直方图
- plt.figure(figsize=(8, 5))
- plt.hist(data, bins=30, color='skyblue', edgecolor='black', alpha=0.7)
- # 添加标题和标签
- plt.title("数据分布直方图", fontsize=14)
- plt.xlabel("数值区间", fontsize=12)
- plt.ylabel("频数", fontsize=12)
- # 显示图形
- plt.show()
复制代码 解释:
- plt.hist() 用于绘制直方图,bins=30 设定了 30 个区间。
- color='skyblue' 设置柱子颜色,edgecolor='black' 加强对比度。
- alpha=0.7 设定透明度,使直方图更具层次感。
2.2 使用 Seaborn 绘制直方图 + 密度曲线
- import seaborn as sns
- # 绘制直方图 + KDE 密度曲线
- plt.figure(figsize=(8, 5))
- sns.histplot(data, bins=30, kde=True, color='blue', edgecolor='black', alpha=0.6)
- # 添加标题
- plt.title("Seaborn 直方图与密度曲线", fontsize=14)
- plt.xlabel("数值区间", fontsize=12)
- plt.ylabel("频数", fontsize=12)
- plt.show()
复制代码 Seaborn 的优势:
- kde=True 可叠加密度曲线,便于观察数据模式。
- 默认 bin 盘算较智能,使直方图更平滑。
2.3 不同 bin 规则对比
bin 的选择对于直方图的展示效果至关紧张。这里对比不同 bin 规则在实际数据中的表现。
对比 Sturges、Rice 和 Freedman-Diaconis 规则
- # 计算不同 bin 规则
- bins_sturges = np.histogram_bin_edges(data, bins='sturges') # Sturges 规则
- bins_rice = np.histogram_bin_edges(data, bins='rice') # Rice 规则
- bins_fd = np.histogram_bin_edges(data, bins='fd') # Freedman-Diaconis 规则
- plt.figure(figsize=(12, 5))
- # Sturges 规则
- plt.subplot(1, 3, 1)
- plt.hist(data, bins=bins_sturges, color='orange', edgecolor='black', alpha=0.7)
- plt.title("Sturges 规则", fontsize=12)
- # Rice 规则
- plt.subplot(1, 3, 2)
- plt.hist(data, bins=bins_rice, color='blue', edgecolor='black', alpha=0.7)
- plt.title("Rice 规则", fontsize=12)
- # Freedman-Diaconis 规则
- plt.subplot(1, 3, 3)
- plt.hist(data, bins=bins_fd, color='green', edgecolor='black', alpha=0.7)
- plt.title("Freedman-Diaconis 规则", fontsize=12)
- plt.show()
复制代码 分析:
- Sturges 规则:适用于小型数据集,bin 数量较少,可能无法捕捉复杂数据模式。
- Rice 规则:适用于较大数据集,bin 数量相对较多,提供更精致的数据分布信息。
- Freedman-Diaconis 规则:动态调解 bin 数量,平衡数据的平滑性与细节度,适用于未知数据分布。
业务案例:用户评分数据分布
在实际业务分析中,我们常须要分析用户评分数据,了解客户满意度分布。
- # 模拟用户评分数据
- ratings = np.random.choice([1, 2, 3, 4, 5], p=[0.05, 0.10, 0.35, 0.35, 0.15], size=1000)
- plt.figure(figsize=(8, 5))
- sns.histplot(ratings, bins=5, kde=False, discrete=True, color='purple', edgecolor='black')
- plt.title("用户评分数据分布", fontsize=14)
- plt.xlabel("评分", fontsize=12)
- plt.ylabel("频数", fontsize=12)
- plt.show()
复制代码 业务解读:
- 评分 3 和 4 最高,表明用户整体满意度较高。
- 评分 1 和 2 偏少,阐明负面反馈较少,但若非常增多,可能须要调查缘故原由。
总结
直方图优化方向关键点bin 选择Sturges 适用于小数据集,Freedman-Diaconis 适用于未知数据分布颜色与透明度alpha 透明度提高可读性,edgecolor='black' 加强对比度密度曲线kde=True 叠加密度曲线,便于观察数据模式业务场景结适用户评分、贩卖数据等挖掘数据特性 直方图是数据探索的紧张工具,通过公道选择 bin 数量、颜色、密度曲线等参数,可以直观分析数据分布并辅助业务决策。在 Jupyter Notebook 中运行这些代码,即可快速上手并深入理解数据的潜伏模式。
三、 箱线图
箱线图(Box Plot)是一种基于数据的五数概述来展示数据分布和检测非常值的图形工具。它能够直观表现数据的中位数、上下四分位数以及数据范围,同时通过“须”(whiskers)和散点标志出潜伏非常值,是数据质量查抄的紧张本领。
3.1 理论基础
箱线图的组成
箱线图紧张由以下部门构成:
- 最小值:数据中最小的非非常值。
- 第一四分位数(Q1):将数据分为四等份的下界,表现 25% 的数据低于这个值。
- 中位数:数据的中间值,表现 50% 的数据低于此值。
- 第三四分位数(Q3):表现 75% 的数据低于此值。
- 最大值:数据中最大的非非常值。
- 须(Whiskers):一般延伸至 Q1 - 1.5×IQR 及 Q3 + 1.5×IQR 之间的最远数据点,IQR(Interquartile Range)为 Q3 与 Q1 之差。
- 非常值:位于须外的数据点,通常以单独的点标志。
箱线图的作用
- 检测非常值:箱线图通过设定 1.5×IQR 的阈值来区分正常数据和非常数据,资助识别可能的录入错误或极度情况。
- 展示数据分布:不仅展示数据的会集趋势(中位数),还展现数据的离散程度(四分位数间距)和分布形态(是否对称或偏态)。
- 数据质量查抄:在数据预处置处罚中,箱线图可用于快速识别数据中的错误或非常情况,指导后续的缺失值处置处罚或非常值修正。
3.2 绘制箱线图
我们将通过 Matplotlib 和 Seaborn 分别展示如何绘制箱线图,并解读图形中的须和非常点。以下代码可在 Jupyter Notebook 中直接运行练习。
3.2.1 使用 Matplotlib 绘制箱线图
- import numpy as np
- import matplotlib.pyplot as plt
- # 生成模拟数据:例如模拟某产品销售数据,包含一些异常值
- np.random.seed(42)
- data = np.random.normal(loc=50, scale=10, size=200) # 正常分布数据
- data = np.append(data, [80, 85, 90]) # 添加几个异常值
- plt.figure(figsize=(8, 5))
- plt.boxplot(data, vert=True, patch_artist=True, boxprops=dict(facecolor='lightblue', color='blue'),
- whiskerprops=dict(color='blue'), capprops=dict(color='blue'), flierprops=dict(color='red', marker='o', markersize=6))
- plt.title("Matplotlib 箱线图示例", fontsize=14)
- plt.ylabel("数值", fontsize=12)
- plt.show()
复制代码 代码解释:
- 使用 plt.boxplot() 函数绘制箱线图。
- 参数 patch_artist=True 允许添补箱体颜色;boxprops、whiskerprops、capprops、flierprops 分别用于设置箱体、须、顶帽和非常值点的颜色和样式。
- 非常值(flier)以红色圆点标出,直观展示了数据中超出 1.5×IQR 范围的点。
3.2.2 使用 Seaborn 绘制箱线图
Seaborn 提供更高层次的接口,使得画图过程更加简单,同时与 Pandas 数据布局结合紧密,便于数据探索和可视化。
- import pandas as pd
- import seaborn as sns
- # 构造 DataFrame 示例数据
- df = pd.DataFrame({
- '销售数据': data,
- '类别': ['A'] * len(data) # 此处所有数据归为一个类别
- })
- plt.figure(figsize=(8, 5))
- sns.boxplot(x='类别', y='销售数据', data=df, palette="Set2")
- plt.title("Seaborn 箱线图示例", fontsize=14)
- plt.xlabel("类别", fontsize=12)
- plt.ylabel("销售数据", fontsize=12)
- plt.show()
复制代码 代码解释:
- 使用 Seaborn 的 boxplot() 函数从 DataFrame 中绘制箱线图,自动盘算五数概述并标志非常值。
- palette="Set2" 设置调色板,提升图形美观度。
- 通过该图,我们可以直观地观察到中位数、四分位数及非常值的分布情况,从而判定数据质量。
应用场景与数据质量查抄
箱线图在数据预处置处罚中的应用非常广泛。例如,在检测数据录入错误时,非常值的标志可以资助数据科学家判定数据是否须要清洗或修正。在业务场景中,箱线图可以用于:
- 贩卖数据监控:快速识别贩卖非常值,可能是体系错误或特别促销导致的数据波动。
- 客户行为分析:观察客户购买金额的分布,判定是否存在极度消费群体。
- 质量控制:监控生产数据,实时发现设备非常或质量题目。
四、 散点图
散点图(Scatter Plot)是一种用于展示两个变量之间关系的图形工具。通过在二维坐标系中绘制数据点,我们可以直观地观察变量之间的相干性和趋势。同时,通过颜色、形状和巨细等编码方法,还能引入第三个或更多维度的信息,从而实现多变量关系的可视化分析。
4.1 理论基础
展示变量关系
- 相干性与趋势:散点图能够直观展示两个变量之间是否存在正相干、负相干或无明显相干性。例如,在贩卖数据中,可以通过散点图观察广告费用与贩卖额之间的关系。
- 拟合线:添加拟合线(如线性回归线)可以资助更好地识别变量之间的趋势,并量化这种关系。
增加维度信息
- 颜色编码:通过改变数据点的颜色,可以将第三个变量映射到散点图上,例如,不同的客户群体、产品类别或时间段。
- 形状编码:使用不同形状的标志,可以进一步区分数据点,适用于展示类别变量。
- 巨细编码:数据点巨细可以反映第四个维度,例如订单量、人口数量等。
通过这些编码本领,我们可以在二维图形中融入更多信息,资助业务职员更全面地理解数据特性。
4.2 绘制散点图与拟合线
在 Python 中,我们可以使用 Matplotlib 和 Seaborn 来绘制散点图,并通过添加拟合线来辅助数据关联性分析。
4.2.1 使用 Matplotlib 绘制散点图并添加拟合线
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy import stats
- # 生成模拟数据:例如,广告费用与销售额之间的关系
- np.random.seed(42)
- x = np.random.normal(50, 10, 100) # 广告费用
- y = 2 * x + np.random.normal(0, 10, 100) # 销售额,加上一定噪声
- plt.figure(figsize=(8, 6))
- plt.scatter(x, y, color='teal', alpha=0.7, edgecolor='black', label='数据点')
- # 计算线性回归拟合线
- slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
- fit_line = slope * x + intercept
- plt.plot(x, fit_line, color='red', linewidth=2, label=f'拟合线: y={slope:.2f}x+{intercept:.2f}')
- plt.title("广告费用与销售额散点图及拟合线", fontsize=14)
- plt.xlabel("广告费用", fontsize=12)
- plt.ylabel("销售额", fontsize=12)
- plt.legend()
- plt.show()
复制代码 解释:
- 使用 plt.scatter() 绘制散点图,参数 alpha=0.7 控制透明度,edgecolor='black' 提升数据点的对比度。
- 使用 scipy.stats.linregress() 盘算线性回归参数,并通过 plt.plot() 添加拟合线。
- 拟合线能够直观展示广告费用与贩卖额之间的线性关系。
4.2.2 使用 Seaborn 绘制散点图并添加拟合线
Seaborn 提供了更高级的接口 lmplot() 和 regplot(),可以直接绘制带有拟合线的散点图,同时支持颜色和形状编码。
- import pandas as pd
- import seaborn as sns
- # 构造 DataFrame 数据,添加一个类别变量,用于颜色编码
- df = pd.DataFrame({
- '广告费用': x,
- '销售额': y,
- '产品类别': np.where(x < 50, '低预算', '高预算') # 根据广告费用划分产品类别
- })
- # 使用 regplot 绘制散点图与拟合线
- plt.figure(figsize=(8, 6))
- sns.regplot(x='广告费用', y='销售额', data=df, scatter_kws={'color': 'purple', 'alpha': 0.7, 'edgecolor': 'black'},
- line_kws={'color': 'red', 'linewidth': 2})
- plt.title("Seaborn 散点图与拟合线", fontsize=14)
- plt.xlabel("广告费用", fontsize=12)
- plt.ylabel("销售额", fontsize=12)
- plt.show()
- # 使用 lmplot 添加颜色编码
- sns.lmplot(x='广告费用', y='销售额', hue='产品类别', data=df, height=6, aspect=1.2,
- scatter_kws={'alpha': 0.7, 'edgecolor': 'black'},
- markers=['o', 's'], palette="Set1", ci=None)
- plt.title("广告费用与销售额(按产品类别区分)", fontsize=14)
- plt.xlabel("广告费用", fontsize=12)
- plt.ylabel("销售额", fontsize=12)
- plt.show()
复制代码 解释:
- sns.regplot():用于绘制基础散点图并添加回归拟合线,简单直观。
- sns.lmplot():在 regplot 的基础上,支持 hue 参数根据类别变量对数据点举行颜色编码,同时可以设定不同的 marker(如圆圈和方形)来区分不同类别。
- 参数 ci=None 禁用了置信区间的表现,保持图形简洁。
通过上述代码,我们了解到:
- 散点图能有用展示两个变量之间的相干性和趋势。
- 添加拟合线可以资助量化变量之间的关系,并验证假设。
- 通过颜色、形状等编码方法,可以在二维图形中融入更多维度的信息,辅助更全面的数据分析。
- Matplotlib 与 Seaborn 均为绘制散点图的强大工具,Seaborn 的高级接口使得数据可视化更加便捷和美观。
在实际应用中,如贩卖分析、客户行为分析等场景下,散点图不仅能展现变量间的基本关系,还能通过多维编码提供更深入的业务洞察。您可以在 Jupyter Notebook 中运行这些代码,亲自探索数据并根据实际需求调解参数,从而更好地理解和应用散点图的各种功能。
未完待续
进入主页:小乱说技书
更多Python相干关注专栏:Data/Python/大模型
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |