zoukankan      html  css  js  c++  java
  • 数据特征分析-统计分析

    一、统计分析

    统计分析是对定量数据进行统计描述,常从集中趋势和离中趋势两个方面分析。

    集中趋势:指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值-统计平均数(算数平均数和位置平均数)

      算术平均数:简单算术平均数和权重算术平均数

      位置平均数:中位数和众数

    离中趋势:

      极差和分位差

      标准差和方差

    二、集中趋势

    随机生成整数和总和为1的百分占比

    df = pd.DataFrame({'value':np.random.randint(1,100,100),'f':np.random.rand(100)})
    df['f'] = df['f']/df['f'].sum()

    算术平均数

    mean = df['value'].mean()
    mean_f = (df['value'] * df['f']).sum()/df['f'].sum()
    print('简单算术平均数:%.2f'%mean)
    print('权重算术平均数:%2.f'%mean_f)
    # 简单算术平均数:48.34
    # 权重算术平均数:51

    位置平均数

    m = df['value'].mode().tolist()   #Seris数据类型可通过tolist()或to_list()转化为列表
    med = df['value'].median()
    print('众数为:',m)
    print('中位数为:',med)
    # 众数为: [85]
    # 中位数为: 48.0

    集中趋势密度图

    df['value'].plot(kind = 'kde')
    
    plt.axvline(mean,linestyle='--',color = 'r')
    plt.text(mean+5,0.002,'简单算术平均数',color = 'r')
    
    plt.axvline(mean_f,linestyle='--',color = 'y')
    plt.text(mean_f+5,0.004,'加权算术平均数',color = 'y')
    
    plt.axvline(med,linestyle='--',color = 'g')
    plt.text(med - 30,0.006,'中位数',color = 'g')

    三、离中趋势

    随机生成DataFrame,表示对应日期的销量

    df = pd.DataFrame({'A_sale':np.random.rand(30)*1000,'B_sale':np.random.rand(30)*1000},index = pd.date_range('2019/6/1','2019/6/30'))

    极差和分位差

    a_jc = df['A_sale'].max() - df['A_sale'].min()
    b_jc = df['B_sale'].max() - df['B_sale'].min()
    print('产品A销售额极差为%.2f,产品B销售额极差为%.2f'%(a_jc,b_jc))
    
    a_des = df['A_sale'].describe()
    b_des = df['B_sale'].describe()
    a_iqr = a_des['75%'] - a_des['25%']
    b_iqr = b_des['75%'] - b_des['25%']
    print('产品A销售额分位差为%.2f,产品B销售额分位差为%.2f'%(a_iqr,b_iqr))
    # 产品A销售额极差为968.05,产品B销售额极差为946.94
    # 产品A销售额分位差为550.63,产品B销售额分位差为479.76

    箱型图展示离散关系

    df.boxplot(vert = False)

    假设有n个样本,x1、x2...xn,算术平均数为x
    方差:( (x1-x)^2 + (x2-x)^2 + ...+ (xn-x)^2 )/n
    标准差:方差的平方根

    a_std = df['A_sale'].std()
    a_var = df['A_sale'].var()
    b_std = df['B_sale'].std()
    b_var = df['B_sale'].var()
    print('产品A销售额标准差为%.2f,方差为%.2f'%(a_std,a_var))
    print('产品B销售额标准差为%.2f,方差为%.2f'%(b_std,b_var))
    # 产品A销售额标准差为304.25,方差为92565.69
    # 产品B销售额标准差为297.36,方差为88424.61

    密度图展示中位数、方差

    fig = plt.figure(figsize = (12,5))
    ax1 = fig.add_subplot(1,2,1)
    df['A_sale'].plot(kind = 'kde')
    plt.axvline(a_des['50%'] - a_std,linestyle = '--',color = 'r')
    plt.axvline(a_des['50%'],linestyle = '--')
    plt.axvline(a_des['50%'] + a_std,linestyle = '--',color = 'y')
    
    
    ax2 = fig.add_subplot(1,2,2)
    df['B_sale'].plot(kind = 'kde')
    plt.axvline(b_des['50%'] - b_std,linestyle = '--',color = 'r')
    plt.axvline(b_des['50%'],linestyle = '--')
    plt.axvline(b_des['50%'] + b_std,linestyle = '--',color = 'y')

  • 相关阅读:
    Python实例1-Collatz 序列
    Git 教程
    python 算法基础
    认识 flask框架 及 介绍
    python 虚拟环境
    Numpy基本操作学习
    Jupyter Notebook 快捷键指南
    Gallery——Matplotlib
    list.pop()函数操作头部与尾部的计时试验
    list 与 dict 的in操作比较试验
  • 原文地址:https://www.cnblogs.com/Forever77/p/11349224.html
Copyright © 2011-2022 走看看