(python)数据分析-描述性统计

前言

在进行更深入的数据分析之前,描述性统计是一种有效的初步探索工具。它可以帮助发现数据中的异常值。下面,主要会演示如何对数据进行初步的分析,通过描述性统计了解数据的特征.

目录

概念

下面操作用到的第三方库

数据来源

处理逻辑

代码实现

1.获取数据

2.描述性统计

3.频率分布图

3.百分比分布图

4.箱型图

总结


概念

描述性统计可以快速地为数据分析人员提供数据集的整体概况。通过计算集中趋势的指标(如均值、中位数、众数),可以了解数据的中心位置,大致知道数据集中在哪个数值附近。

在科学研究中,描述性统计可以帮助研究者初步了解实验数据的特征,为进一步的假设检验和建模提供基础。

下面操作用到的第三方库

  • matplotlib
  • numpy
  • pandas
  • sklearn

数据来源

sklearn)本身是一个用于机器学习的 Python 库,提供了一些数据集,其中包含了鸢尾花数据集(Iris dataset)

处理逻辑

  1. 先通过sklearn库,获取鸢尾花数据集;
  2. 利用pandas库的describe()函数生成描述性统计信息,它可以快速地对数据进行初步分析,提供关于数据分布、中心趋势和离散程度等方面的信息;
  3. 采用频率分布对鸢尾花的花萼宽度进行分析,了解分布特点;
  4. 采用百分比分布对鸢尾花的花瓣长度进行分析,了解分布特点;
  5. 采用箱型图对鸢尾花的花瓣宽度进行分析,了解分布特点;

代码实现

1.获取数据

python 复制代码
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
df = pd.DataFrame(X, columns=iris.feature_names)
print(df.columns)

2.描述性统计

python 复制代码
def iris_descriptive_table(df):
    # 使用 describe 函数进行描述性统计
    stats = df.describe()
    # 保留2位小数
    stats = stats.round(2)

    fig, ax = plt.subplots(figsize=(8.8, 4))

    # 隐藏坐标轴
    ax.axis('off')

    # 创建表格
    table = Table(ax, bbox=[0, 0, 1, 1])
    # 设置表格行数和列数
    nrows = stats.shape[0]
    ncols = stats.shape[1]

    # 设置表格标题行
    for j in range(ncols):
        table.add_cell(0, j + 1, width=1 / len(stats.columns), height=1 / len(stats.index), text=stats.columns[j],
                       facecolor='lightblue')

    # 设置表格列标题
    for i in range(nrows):
        table.add_cell(i + 1, 0, width=1 / len(stats.columns), height=1 / len(stats.index), text=stats.index[i],
                       facecolor='lightblue')

    # 填充表格内容
    for i in range(nrows):
        for j in range(ncols):
            val = stats.iloc[i, j]
            table.add_cell(i + 1, j + 1, width=1 / len(stats.columns), height=1 / len(stats.index),
                           text=str(stats.iloc[i, j]))

    ax.add_table(table)
    plt.title("Iris Describe Table")
    # 保存图像
    # plt.savefig('iris_descriptive_stats_table.png', dpi=300)
    # plt.close()
    plt.show()

3.频率分布图

python 复制代码
def iris_frequency_distribution(df):
    sepal_widths = df["sepal width (cm)"]

    # 计算频数分布
    hist, bin_edges = np.histogram(sepal_widths, bins=10)

    # 绘制频数分布图
    plt.bar(bin_edges[:-1], hist, width=np.diff(bin_edges), align='edge')
    plt.xlabel('Sepal Width')
    plt.ylabel('Frequency')
    plt.title('Frequency Distribution of Iris Sepal Width')
    # 保存图像
    # plt.savefig('iris_frequency_distribution.png', dpi=300)
    # plt.close()
    plt.show()

3.百分比分布图

python 复制代码
def iris_percentage_distribution(df):
    petal_lengths = df["petal length (cm)"]
    # 计算频数分布
    hist, bin_edges = np.histogram(petal_lengths, bins=10)

    # 计算频率分布
    frequencies = hist / len(petal_lengths)

    # 将频率转换为百分数
    percentages = frequencies * 100

    # 绘制频率分布图(以百分数显示 y 轴)
    plt.bar(bin_edges[:-1], percentages, width=np.diff(bin_edges), align='edge')
    plt.xlabel('Petal Length')
    plt.ylabel('Percentage(%)')
    plt.title('Percentage Distribution of Iris Petal Length')
    # plt.savefig('iris_percentage_distribution.png', dpi=300)
    # plt.close()
    plt.show()

4.箱型图

python 复制代码
def iris_boxplot(df):
    petal_widths = df["petal width (cm)"]
    # 绘制箱型图
    plt.boxplot(petal_widths)
    plt.xlabel('Iris')
    plt.ylabel('Petal Width')
    plt.title('Box Plot of Iris Petal Width')
    # plt.savefig('iris_boxplot.png', dpi=300)
    # plt.close()
    plt.show()

总结

在不进行复杂的统计分析的情况下,快速提供数据的基本特征。这对于在数据分析的早期阶段了解数据的性质非常有用。

相关推荐
人大博士的交易之路11 小时前
今日行情明日机会——20250606
大数据·数学建模·数据挖掘·数据分析·涨停回马枪
产品何同学13 小时前
数据分析后台设计指南:实战案例解析与5大设计要点总结
数据挖掘·数据分析·产品经理·墨刀·原型设计·后台管理系统·数据分析后台
Iamccc13_13 小时前
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
人工智能·数据分析·自动化
Leo.yuan14 小时前
数据库同步是什么意思?数据库架构有哪些?
大数据·数据库·oracle·数据分析·数据库架构
lilye6615 小时前
精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化
人工智能·数据挖掘·数据分析
xiaoming-wu18 小时前
数据分析Agent构建
数据分析·大语言模型·agent
数模竞赛Paid answer18 小时前
数学建模-嘉陵江铊污染事件解题全过程文档及程序
数学建模·数据分析
善木科研19 小时前
读文献先读图:GO弦图怎么看?
机器学习·数据分析·r语言
电商API_1800790524720 小时前
构建高效可靠的电商 API:设计原则与实践指南
运维·服务器·爬虫·数据挖掘·网络爬虫
小邹子1 天前
抑郁症患者数据分析
python·信息可视化·数据分析