前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >06.简单计算&数据标准化&数据分组1.简单计算2.数据标准化3.数据分组

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

作者头像
用户1250179
发布2018-08-02 16:35:08
3410
发布2018-08-02 16:35:08
举报
文章被收录于专栏:数说戏聊

1.简单计算

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

代码语言:javascript
复制
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

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

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

代码语言:javascript
复制
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

分组的自定义标签,可以不自定义

代码语言:javascript
复制
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以下
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简单计算
  • 2.数据标准化
  • 3.数据分组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档