美文网首页
06.简单计算&数据标准化&数据分组

06.简单计算&数据标准化&数据分组

作者: 李慕玄 | 来源:发表于2018-07-03 06:43 被阅读0次

    1.简单计算

    指通过已有字段进行四则运算得出新的字段

    import pandas
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.13/data.csv',
        sep = '|'    
    )
    Out[3]: 
       name  price  num
    0     A   6058  408
    1     B   1322  653
    2     C   7403  400
    3     D   4911  487
    4     E   3320   56
    5     F   3245  475
    6     G   4881  746
    7     H   8035  980
    8     I   6772  316
    9     J   4050  661
    10    K   2673  783
    11    L   2787  975
    12    M   2839  221
    13    N    331  480
    
    data['total'] = data.price * data.num
    Out[5]: 
       name  price  num    total
    0     A   6058  408  2471664
    1     B   1322  653   863266
    2     C   7403  400  2961200
    3     D   4911  487  2391657
    4     E   3320   56   185920
    5     F   3245  475  1541375
    6     G   4881  746  3641226
    7     H   8035  980  7874300
    8     I   6772  316  2139952
    9     J   4050  661  2677050
    10    K   2673  783  2092959
    11    L   2787  975  2717325
    12    M   2839  221   627419
    13    N    331  480   158880
    

    2.数据标准化

    指将数据按比例缩放,使之落入到特定区间,用于进行不同变量间的比较分析。

    通常在综合评价分析、聚类分析、因子分析、主成分分析等分析开展之前,消除各个变量由于量纲不同、自身变异或者数值相差较大所引起的误差。

    0-1标准化计算公式


    屏幕快照 2018-07-03 05.32.15.png

    将向量中的每个值与所在向量中的最小值的差,除以所在向量中的最大值与向量中最小值的差。

    可以方便进行十分制与百分制的换算。

    import pandas
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.14/data.csv'    
    )
    Out[8]: 
       class name  score
    0     一班  朱志斌    120
    1     一班   朱凤    122
    2     一班  郑丽萍    140
    3     一班  郭杰明    131
    4     一班   许杰    122
    5     二班   郑芬    119
    6     二班   林龙     96
    7     二班  林良坤    135
    8     二班  黄志红    105
    9     三班  方小明    114
    10    三班  陈丽灵    115
    11    三班  方伟君    136
    12    三班  庄艺家    119
    
    #round()函数是保留多少位小数的意思,本例中保留2位小数
    data['scale'] = round(
        (
             data.score - data.score.min()
         )/(
             data.score.max() - data.score.min()
         ),
        2     
    )
    Out[11]: 
       class name  score  scale
    0     一班  朱志斌    120   0.55
    1     一班   朱凤    122   0.59
    2     一班  郑丽萍    140   1.00
    3     一班  郭杰明    131   0.80
    4     一班   许杰    122   0.59
    5     二班   郑芬    119   0.52
    6     二班   林龙     96   0.00
    7     二班  林良坤    135   0.89
    8     二班  黄志红    105   0.20
    9     三班  方小明    114   0.41
    10    三班  陈丽灵    115   0.43
    11    三班  方伟君    136   0.91
    12    三班  庄艺家    119   0.52
    
    #140分对应的标准化分数是1,是所有学生中的最高分。
    #96分对应的标准化分数是0,是所有学生中的最低分。
    

    3.数据分组

    根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间进行研究,以揭示其内在的联系和规律性。


    屏幕快照 2018-07-03 06.01.35.png

    cut函数cut(series, bins, right=True, labels=NULL)

    参数 注释
    series 需要分组的数据
    bins 分组的划分数组
    right 分组的时候,右边是否闭合
    labels 分组的自定义标签,可以不自定义
    import pandas
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.15/data.csv',
        sep = '|'        
    )
    Out[30]: 
                 tel   cost
    0   166424556600    2.0
    1   166424557199    5.0
    2   166424561768   75.3
    3   166424569696   20.0
    4   166424569924   97.3
    5   166424579238    3.0
    6   166424581334  100.0
    7   166424589730   77.0
    8   166424591167    5.5
    9   166424598020   50.0
    10  166424598259   28.6
    11  166424606270   10.8
    12  166424632819   76.7
    13  166424635250   84.6
    14  166424641824   10.0
    
    #定义分组区间
    bins = [
        min(data.cost)-1, 20, 40, 60,
        80, 100, max(data.cost)+1
    ]
    Out[32]: [1.0, 20, 40, 60, 80, 100, 101.0]
    #分析消费金额的分布情况,
    #此处设置的最小值和最大值,并非原始的最小值和最大值,
    #把分组的最小值设置为数据的最小值减一,
    #把分组的最大值设置为数据的最大值加一,
    #为什么设置的开始和结束值,是最小值减一和最大值加一,
    #因为有时分组的时候,会碰到边界值,
    #即需要分组的值等于最小值或最大值,
    #会导致找不到范围
    
    #cut函数进行分组,如果不自定义标签,
    #则默认标签是数学的范围表达式,
    #标签默认使用左开右闭
    data['cut'] = pandas.cut(
        data.cost,
        bins
    )
    Out[34]: 
                 tel   cost            cut
    0   166424556600    2.0    (1.0, 20.0]
    1   166424557199    5.0    (1.0, 20.0]
    2   166424561768   75.3   (60.0, 80.0]
    3   166424569696   20.0    (1.0, 20.0]
    4   166424569924   97.3  (80.0, 100.0]
    5   166424579238    3.0    (1.0, 20.0]
    6   166424581334  100.0  (80.0, 100.0]
    7   166424589730   77.0   (60.0, 80.0]
    8   166424591167    5.5    (1.0, 20.0]
    9   166424598020   50.0   (40.0, 60.0]
    10  166424598259   28.6   (20.0, 40.0]
    11  166424606270   10.8    (1.0, 20.0]
    12  166424632819   76.7   (60.0, 80.0]
    13  166424635250   84.6  (80.0, 100.0]
    14  166424641824   10.0    (1.0, 20.0]
    
    #设置right=False后变成左闭右开
    data['cut'] = pandas.cut(
        data.cost,
        bins,
        right=False
    )
    Out[36]: 
                 tel   cost             cut
    0   166424556600    2.0     [1.0, 20.0)
    1   166424557199    5.0     [1.0, 20.0)
    2   166424561768   75.3    [60.0, 80.0)
    3   166424569696   20.0    [20.0, 40.0)
    4   166424569924   97.3   [80.0, 100.0)
    5   166424579238    3.0     [1.0, 20.0)
    6   166424581334  100.0  [100.0, 101.0)
    7   166424589730   77.0    [60.0, 80.0)
    8   166424591167    5.5     [1.0, 20.0)
    9   166424598020   50.0    [40.0, 60.0)
    10  166424598259   28.6    [20.0, 40.0)
    11  166424606270   10.8     [1.0, 20.0)
    12  166424632819   76.7    [60.0, 80.0)
    13  166424635250   84.6   [80.0, 100.0)
    14  166424641824   10.0     [1.0, 20.0)
    
    #定义分组的标签
    labels = [
        '20以下', '20到40', '40到60',
        '60到80', '80到100', '100以上'        
    ]
    Out[38]: 
    ['20以下', '20到40', 
    '40到60', '60到80', 
    '80到100', '100以上']
    
    data['cut'] = pandas.cut(
        data.cost, bins,
        right=False, labels=labels        
    )
    Out[40]: 
                 tel   cost     cut
    0   166424556600    2.0    20以下
    1   166424557199    5.0    20以下
    2   166424561768   75.3   60到80
    3   166424569696   20.0   20到40
    4   166424569924   97.3  80到100
    5   166424579238    3.0    20以下
    6   166424581334  100.0   100以上
    7   166424589730   77.0   60到80
    8   166424591167    5.5    20以下
    9   166424598020   50.0   40到60
    10  166424598259   28.6   20到40
    11  166424606270   10.8    20以下
    12  166424632819   76.7   60到80
    13  166424635250   84.6  80到100
    14  166424641824   10.0    20以下
    

    相关文章

      网友评论

          本文标题:06.简单计算&数据标准化&数据分组

          本文链接:https://www.haomeiwen.com/subject/sporuftx.html