自学内容网 自学内容网

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

前言

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

目录

概念

下面操作用到的第三方库

数据来源 

处理逻辑 

代码实现

1.获取数据

2.描述性统计

3.频率分布图

3.百分比分布图

4.箱型图

总结


概念

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

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

下面操作用到的第三方库

  • matplotlib
  • numpy
  • pandas
  • sklearn

数据来源 

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

处理逻辑 

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

代码实现

1.获取数据

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

2.描述性统计

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.频率分布图

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.百分比分布图

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.箱型图

 

 

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()

总结

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

 


原文地址:https://blog.csdn.net/marst437730201/article/details/145162595

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!