描述性统计所提取统计的信息,我们称为统计量,主要包括以下几个方面:

  1. 频数与频率:

    1. 频数:指数据中类别变量每个不同取值出现的次数。

    2. 频率:指每个类别变量的频数与总次数的比值,通常采用百分数表示。
      # 获取数据,划分特征列和目标列
      data = load_iris()
      X = data.data
      y = data.target
      
      # 拼接特征列和目标列,转成DataFrame且设置列名
      data1 = np.concatenate([X, y.reshape(-1, 1)], axis=1)
      data_df = pd.DataFrame(data1, columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'type'])
      
      # 频数
      ps = data_df['type'].value_counts()
      print(ps)
      
      # 频率
      pl = ps/len(data_df)
      print(pl)
      
      # 可视化
      sns.countplot(x='type', data=data_df)
      plt.show()
  2. 集中趋势分析:

    1. 均值:即平均值,其为一组数据的总和除以数据个数。

    2. 中位数:将一组数据升序排列,位于该组数据最中间位置的值,就是中位数。如果数据个数为偶数,则取中间两个数值的均值。

    3. 众数:一组数据中出现次数最多的值。

    4. 分位数:分位数,通过n-1个分位将数据划分为n个区间,使得每个区间的数值个数相等(或近似相等)。其中, n为分位数的数量。以四分位数为例:
      第1个分位称为1/ 4分位(下四分位)。数据中1/ 4的数据小于该分位值。
      第2个分位称为2/ 4分位(中四分位)。数据中2/ 4的数据小于该分位值。
      第3个分位称为3/ 4分位(上四分位)。数据中3/ 4的数据小于该分位值。

      # 均值
      data_mean = data_df['sepal_length'].mean()
      # print('均值:', data_mean)
      
      # 中位数
      data_median = data_df['sepal_length'].median()
      # print('中位数:', data_median)
      
      # 众数,没有办法保证唯一性,用索引取值
      data_mode = data_df['sepal_length'].mode()
      # print('众数:', data_mode.iloc[0])
      
      # 可视化
      plt.rcParams['font.family'] = 'SimHei'
      plt.rcParams['font.size'] = 15
      plt.figure(figsize=(8,6))
      sns.histplot(data_df['sepal_length'])
      plt.axvline(data_mean,ls='-',color='r',label='均值')
      plt.axvline(data_median,ls='--',color='orange',label='中位数')
      plt.axvline(data_mode.iloc[0],ls='-.',color='green',label='众数')
      plt.legend()
      # plt.show()
      
      # 分位数
      # 模拟数据,使用numpy
      data_np = [2, 4, 11, 1, 22, 32]
      # print('分位数方法一:', np.quantile(data_np, q=[0.25, 0.5, 0.75]))
      # print('分位数方法二:', np.percentile(data_np, q=[25, 50, 75]))
      # 使用pandas
      data_pd = [2, 4, 11, 1, 22, 32]
      # print('分位数方法三:\n',pd.Series(data_pd).describe())
  3. 离散程度分析:

    1. ​​​​​​​​​​​​​​极差:指一组数据中,最大值与最小值之差。

    2. ⽅差:能体现出一组数据中每个元素与均值偏离的大小。

    3. 标准差:标准差是一个描述数值分散程度的数字。低的标准差意味着大多数数值都接近均值(平均值)。高的标准差意味着数值分布在一个更宽的范围内。

      # 分位数
      # 模拟数据,使用numpy
      data_np = [2, 4, 11, 1, 22, 32]
      # print('分位数方法一:', np.quantile(data_np, q=[0.25, 0.5, 0.75]))
      # print('分位数方法二:', np.percentile(data_np, q=[25, 50, 75]))
      # 使用pandas
      data_pd = [2, 4, 11, 1, 22, 32]
      # print('分位数方法三:\n',pd.Series(data_pd).describe())
      
      # 方差
      df = pd.DataFrame([[93, 98, 89], [94, 95, 91], [93, 93, 93]], index=['张三', '李四', '王五'], columns=['语文', '数学', '英语'])
      # print('个人总分:', df.sum(axis=1))   # 每个人的总分
      # print('方差:', df.var(axis=1))    # 通过查看方差来判断谁的综合能⼒好全面发展。
      
      # 标准差
      data_std = [32,111,138,28,59,77,97]
      # print('标准差:', np.std(data_std))

  4. 分布形状:

    1. ​​​​​​​​​​​​​​偏度:统计数据分布斜率方向和程度的度量,是统计数据分布非对称程度的数字特征,其计算公式为三阶中心距与标准差三次方的比值。

    2. 峰度:描述数据分布陡缓程度的统计量,可以将峰度理解为数据分布的高矮程度,其计算公式为四阶中心距与标准差四次方的比值。给定含有n个元素的样本,样本峰度的计算方式如下:

      # 偏度,左偏和右偏
      d1 = np.random.randint(1, 11, size=100)
      d2 = np.random.randint(11, 21, size=500)
      d3 = np.concatenate([d1, d2])
      
      d4 = np.random.randint(1, 11, size=500)
      d5 = np.random.randint(11, 21, size=100)
      d6 = np.concatenate([d4, d5])
      
      plt.figure(figsize=(10,8))
      left_skew = pd.Series(d3)
      sns.kdeplot(left_skew, fill=True, label='左偏')
      right_skew = pd.Series(d6)
      sns.kdeplot(right_skew, fill=True, label='右偏')
      plt.legend()
      # plt.show()
      
      # 峰度,使用上面鸢尾花数据集的数据
      # print(data_df['sepal_width'].kurt())
      
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐