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

总结

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

相关推荐
万事可爱^1 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
白水先森6 小时前
如何使用ArcGIS Pro高效查找小区最近的地铁站
经验分享·arcgis·信息可视化·数据分析
yuanbenshidiaos9 小时前
【数据挖掘】数据仓库
数据仓库·笔记·数据挖掘
lcw_lance11 小时前
人工智能(AI)的不同维度分类
人工智能·分类·数据挖掘
伊一大数据&人工智能学习日志13 小时前
自然语言处理NLP 04案例——苏宁易购优质评论与差评分析
人工智能·python·机器学习·自然语言处理·数据挖掘
huaqianzkh14 小时前
理解构件的3种分类方法
人工智能·分类·数据挖掘
白水先森1 天前
ArcGIS Pro制作人口三维地图教程
arcgis·信息可视化·数据分析
是一只努力的小菜鸡啦1 天前
数据分析和数据挖掘的工作内容
信息可视化·数据挖掘·数据分析
Sharewinfo_BJ1 天前
智信BI:解决Power BI全面兼容问题的新选择
数据分析·数据可视化·powerbi
Sodas(填坑中....)1 天前
SVM对偶问题
人工智能·机器学习·支持向量机·数据挖掘