zoukankan      html  css  js  c++  java
  • 统计分析

    '''
    【课程1.4】  统计分析
    
    统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析
    
    集中趋势度量 / 离中趋势度量
    
    '''
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    % matplotlib inline
    # 1、集中趋势度量
    # 指一组数据向某一中心靠拢的倾向,核心在于寻找数据的代表值或中心值 —— 统计平均数
    # 算数平均数、位置平均数
    # (1)算数平均数
    
    data = pd.DataFrame({'value':np.random.randint(100,120,100),
                        'f':np.random.rand(100)})
    data['f'] = data['f'] / data['f'].sum()  # f为权重,这里将f列设置成总和为1的权重占比
    print(data.head())
    print('------')
    # 创建数据
    
    mean = data['value'].mean()
    print('简单算数平均值为:%.2f' % mean)
    # 简单算数平均值 = 总和 / 样本数量 (不涉及权重)
    
    mean_w = (data['value'] * data['f']).sum() / data['f'].sum()
    print('加权算数平均值为:%.2f' % mean_w)
    # 加权算数平均值 = (x1f1 + x2f2 + ... + xnfn) / (f1 + f2 + ... + fn)

      输出:

              f  value
    0  0.006347    109
    1  0.011855    111
    2  0.003533    113
    3  0.001222    116
    4  0.018974    109
    ------
    简单算数平均值为:109.27
    加权算数平均值为:108.46
    # 1、集中趋势度量
    # (2)位置平均数
    
    m = data['value'].mode()
    print('众数为',m.tolist())
    # 众数是一组数据中出现次数最多的数,这里可能返回多个值
    
    med = data['value'].median()
    print('中位数为%i' % med)
    # 中位数指将总体各单位标志按照大小顺序排列后,中间位置的数字
    
    data['value'].plot(kind = 'kde',style = '--k',grid = True)
    # 密度曲线
    
    plt.axvline(mean,hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.005,'简单算数平均值为:%.2f' % mean, color = 'r')
    # 简单算数平均值
    
    plt.axvline(mean_w,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.01,'加权算数平均值:%.2f' % mean_w, color = 'b')
    # 加权算数平均值
    
    plt.axvline(med,hold=None,color='g',linestyle="--",alpha=0.8)  
    plt.text(mean + 5,0.015,'中位数:%i' % med, color = 'g')
    # 中位数
    # **这里三个数text显示的横坐标一致,目的是图示效果不拥挤

      输出:

    众数为 [112]
    中位数为109

    # 2、离中趋势度量
    # 指一组数据中各数据以不同程度的距离偏离中心的趋势
    # 极差与分位差、方差与标准差、离散系数
    
    data = pd.DataFrame({'A_sale':np.random.rand(30)*1000,
                        'B_sale':np.random.rand(30)*1000},
                       index = pd.period_range('20170601','20170630'))
    print(data.head())
    print('------')
    # 创建数据
    # A/B销售额量级在同一水平

      输出:

                    A_sale      B_sale
    2017-06-01  794.068980  531.142147
    2017-06-02   99.239344  724.638103
    2017-06-03  337.092146  423.990829
    2017-06-04  609.858618  738.671698
    2017-06-05  900.874106  525.249483
    ------
    # 2、离中趋势度量
    # (1)极差、分位差
    
    data = pd.DataFrame({'A_sale':np.random.rand(30)*1000,
                        'B_sale':np.random.rand(30)*1000},
                       index = pd.period_range('20170601','20170630'))
    print(data.head())
    print('------')
    # 创建数据
    # A/B销售额量级在同一水平
    
    a_r = data['A_sale'].max() - data['A_sale'].min()
    b_r = data['B_sale'].max() - data['B_sale'].min()
    print('A销售额的极差为:%.2f, B销售额的极差为:%.2f' % (a_r,b_r))
    print('------')
    # 极差
    # 没有考虑中间变量的变动,测定离中趋势不稳定
    
    sta = data['A_sale'].describe()
    stb = data['B_sale'].describe()
    #print(sta)
    a_iqr = sta.loc['75%'] - sta.loc['25%']
    b_iqr = stb.loc['75%'] - stb.loc['25%']
    print('A销售额的分位差为:%.2f, B销售额的分位差为:%.2f' % (a_iqr,b_iqr))
    print('------')
    # 分位差
    
    color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
    data.plot.box(vert=False,grid = True,color = color,figsize = (10,3))
    # 箱型图

      输出:

                    A_sale      B_sale
    2017-06-01  994.808396  128.929773
    2017-06-02  708.276945  670.378958
    2017-06-03  386.549297  334.349566
    2017-06-04  478.059490  381.773828
    2017-06-05  612.560799  475.183995
    ------
    A销售额的极差为:990.78, B销售额的极差为:921.67
    ------
    A销售额的分位差为:358.99, B销售额的分位差为:439.30
    ------

    # 2、离中趋势度量
    # (2)方差与标准差
    
    a_std = sta.loc['std']
    b_std = stb.loc['std']
    a_var = data['A_sale'].var()
    b_var = data['B_sale'].var()
    print('A销售额的标准差为:%.2f, B销售额的标准差为:%.2f' % (a_std,b_std))
    print('A销售额的方差为:%.2f, B销售额的方差为:%.2f' % (a_var,b_var))
    # 方差 → 各组中数值与算数平均数离差平方的算术平均数
    # 标准差 → 方差的平方根
    # 标准差是最常用的离中趋势指标 → 标准差越大,离中趋势越明显
    
    fig = plt.figure(figsize = (12,4))
    ax1 = fig.add_subplot(1,2,1)
    data['A_sale'].plot(kind = 'kde',style = 'k--',grid = True,title = 'A密度曲线')
    plt.axvline(sta.loc['50%'],hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.axvline(sta.loc['50%'] - a_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.axvline(sta.loc['50%'] + a_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    # A密度曲线,1个标准差
    
    ax2 = fig.add_subplot(1,2,2)
    data['B_sale'].plot(kind = 'kde',style = 'k--',grid = True,title = 'B密度曲线')
    plt.axvline(stb.loc['50%'],hold=None,color='r',linestyle="--",alpha=0.8)  
    plt.axvline(stb.loc['50%'] - b_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    plt.axvline(stb.loc['50%'] + b_std,hold=None,color='b',linestyle="--",alpha=0.8)  
    # B密度曲线,1个标准差

      输出:

    A销售额的标准差为:255.51, B销售额的标准差为:260.38
    A销售额的方差为:65287.16, B销售额的方差为:67796.90

  • 相关阅读:
    owe的用法
    other,others,another,the other的区别
    国内顶尖的sql dba 团队招人。
    Sqler 工具更新
    2015 年个人计划
    在没Hadoop 、GP 前提下怎么进行实时数据统计。
    201407-至今
    Sqler-Cmd
    Sqler-Monitor
    SqlCmd -Windows Cluster Model
  • 原文地址:https://www.cnblogs.com/654321cc/p/9581890.html
Copyright © 2011-2022 走看看