数学建模入门——描述性统计分析

摘要: 本篇博客主要讲解了数学建模入门的描述性统计分析 ,包括基本统计量的计算数据的分布形态数据可视化相关性分析


往期回顾:

数学建模入门------建模流程-CSDN博客

数学建模入门------数据预处理(全)-CSDN博客


一、基本统计量

基本统计量是描述性统计分析的重要组成部分,它们就像数据的 "标签",能快速让我们了解数据的大致特征

下面以Python展示鸢尾花数据集的基本统计量计算方法:

复制代码
from sklearn.datasets import load_iris
import pandas as pd

# 加载鸢尾花数据集
iris = load_iris()
data = iris.data
target = iris.target
feature_names = iris.feature_names

# 将数据转换为DataFrame
df = pd.DataFrame(data, columns=feature_names)

print(df.max())
print(df.min())
print(df.mean())
print(df.median())
print(df.var())
print(df.std())
print(df.skew())    # 偏度
print(df.kurt())    # 峰度
cv = df.std() / df.mean()
print(cv)           # 变异系数

# 计算基本统计量
print(df.describe())    # 也可以用describe()查看基本统计量

二、分布形态

绘制数据集的分布图可以让我们直观的感受到数据分布特点。

复制代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris

data = load_iris()          # 得到数据特征
iris_target = data.target   # 得到数据对应的标签
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names)    # 利用Pandas转化为DataFrame格式

# 合并标签和特征信息
iris_all = iris_features.copy()
iris_all['target'] = iris_target

# 在2D情况下不同的特征组合对于不同类别的花的散点分布,以及大概的区分能力。
sns.pairplot(data=iris_all, diag_kind='hist', hue='target')
plt.show()

三、数据可视化

数据可视化在描述性统计分析中具有极其重要的地位,它可以帮助我们快速理解数据分布 :通过图表(如直方图、箱线图等),可以直观地展示数据的集中趋势(均值、中位数等)、离散程度(方差、标准差等)以及分布形态(正态分布、偏态分布等)。揭示变量间关系 :像散点图可以直观地展示两个变量之间的关系,是正相关、负相关还是无明显相关,帮助我们快速发现变量之间的潜在联系。发现数据中的模式和趋势:时间序列数据通过折线图展示,能够清晰地呈现出数据随时间的变化趋势,包括上升、下降、周期性波动等,帮助我们发现数据背后隐藏的规律。

以鸢尾花数据集为例,先导入数据集:

复制代码
import pandas as pd
import seaborn as sns
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = load_iris()
data = iris.data
feature_names = iris.feature_names

# 将数据转换为DataFrame
df = pd.DataFrame(data, columns=feature_names)

直方图:

复制代码
# 绘制直方图
plt.figure(figsize=(12, 8))
for i in range(len(feature_names)):
    plt.subplot(2, 2, i + 1)
    sns.histplot(df[feature_names[i]], kde=True)
    plt.title(feature_names[i])
plt.tight_layout()
plt.show()

箱线图:

复制代码
# 绘制箱线图
plt.figure(figsize=(8, 6))
sns.boxplot(data=df)
plt.title('Iris Dataset Boxplot')
plt.xticks(range(len(feature_names)), feature_names)
plt.show()

散点图矩阵:

复制代码
# 绘制散点图矩阵
sns.pairplot(df)
plt.show()

饼图:

复制代码
# 绘制饼图(以sepal length (cm)为例)
sepal_length_values = df['sepal length (cm)']
value_counts = sepal_length_values.value_counts(normalize=True) * 100
plt.figure(figsize=(6, 6))
plt.pie(value_counts, labels=value_counts.index, autopct='%1.1f%%')
plt.title('Distribution of Sepal Length')
plt.show()

根据数据集的特点还可以其他图,许多数据科学家也会使用R语言来绘制绘制各种形态的可视化图形

桑基图:

山脊图:

瀑布图:

棒棒糖图:

气泡图:

圆弦图:

四、相关性分析

**相关系数是反映两个变量之间线性相关程度的指标。**常用的有两种相关系数计算方法 :

皮尔逊相关系数 (Pearson correlation): 用于衡量两个连续性随机变量间的相关系数;斯皮尔曼相关系数(Spearman correlation) :秩相关系数,根据原始数据的等级排序进行求解,也称为等级变量之间的皮尔逊相关系数

以上两种系数是两个变量之间变化趋势的方向以及程度,取值范围为[-1, 1]。当接近1时,表示两者具有强烈的正相关性;当接近-1时,表示有强烈的的负相关性;而值接近0,则表示相关性很低。

|-------------|------------|--------------|--------------|--------------|------------|
| 相关程度 | 极强相关 | 强相关 | 中等程度相关 | 弱相关 | 极弱相关或无相关 |
| 相关系数绝对值 | 0.8------1 | 0.6------0.8 | 0.4------0.6 | 0.2------0.4 | 0------0.2 |

分别使用皮尔逊和斯皮尔曼绘制鸢尾花数据集特征间的相关性热力图:

复制代码
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd

# 加载鸢尾花数据集
iris = load_iris()
data = iris.data
feature_names = iris.feature_names

# 将数据转换为DataFrame
df = pd.DataFrame(data, columns=feature_names)

# 基于皮尔逊相关系数绘制热力图
plt.figure(figsize=(8, 6))
pearson_corr = df.corr(method='pearson')
sns.heatmap(pearson_corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Pearson Correlation Heatmap of Iris Dataset')
plt.show()
复制代码
# 基于斯皮尔曼相关系数绘制热力图
plt.figure(figsize=(8, 6))
spearman_corr = df.corr(method='spearman')
sns.heatmap(spearman_corr, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Spearman Correlation Heatmap of Iris Dataset')
plt.show()

本篇博客的描述性统计分析就介绍到这里,该专栏会持续更新 数学建模的内容,需要的可以订阅收藏一下,如果本博客对您有所帮助,请留下您的赞赞哦!

有什么问题可以在评论区留言!感谢您的阅读!

相关推荐
ANQH2 天前
Manim三大核心类详解
数据可视化
山楂树の4 天前
【高等数学】 计算对弧长的曲线积分
数学建模
山楂树の4 天前
【高等数学】格林公式及其在曲线积分中的应用
数学建模
柳杉5 天前
使用AI从零打造炫酷医疗数据可视化大屏,源码免费拿!
前端·javascript·数据可视化
Highcharts.js5 天前
Highcharts热力图(Heatmap)完全指南:从基础配置到地理热力图,一文学会颜色轴数据可视化
信息可视化·数据可视化·热力图·heatmap·highcharts·地理热力图
薛定e的猫咪5 天前
【Bayesian Analysis 2023】大数据背景下的分布式贝叶斯模型选择
大数据·分布式·算法·数学建模
田里的水稻5 天前
OE_ubuntu24.04安装ros2
人工智能·算法·数学建模·机器人·自动驾驶
有为少年6 天前
从独立性、相关性到复杂动力系统
人工智能·深度学习·机器学习·数学建模
凌云拓界6 天前
TypeWell全攻略(二):热力图渲染引擎,让键盘发光
前端·后端·python·计算机外设·交互·pyqt·数据可视化