前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >08.基本统计&分组&分布分析1.基本统计分析2.分组分析3.分布分析

08.基本统计&分组&分布分析1.基本统计分析2.分组分析3.分布分析

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

1.基本统计分析

描述性统计分析,用来概括事物整体状况以及事物间联系,即事物的基本特征,以发现内在规律的统计分析方法。

函数describe()

统计函数

注释

size

计数

sum

求和

mean

平均值

var

方差

std

标准差

import pandas
data = pandas.read_csv(
    '/users/bakufu/desktop/5.1/data.csv'        
)
Out[4]: 
     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

data.score.describe()
Out[5]: 
count     13.000000
mean     121.076923
std       12.446295
min       96.000000
25%      115.000000
50%      120.000000
75%      131.000000
max      140.000000
Name: score, dtype: float64

data.score.size
Out[6]: 13

data.score.max()
Out[7]: 140

data.score.min()
Out[8]: 96

data.score.sum()
Out[9]: 1574

#累计求和
data.score.cumsum()
Out[10]: 
0      120
1      242
2      382
3      513
4      635
5      754
6      850
7      985
8     1090
9     1204
10    1319
11    1455
12    1574
Name: score, dtype: int64

#最大值和最小值所在位置
data_min = data.score.argmin()
Out[15]: 6

data_max = data.score.argmax()
Out[17]: 2

#百分位数求解
#第一个参数是百分位,例如求出排序在30%的数值。
#第二个参数是如果找不到排序在30%的数值,则返回离它最近的数值。
data.score.quantile(
        0.3,
        interpolation='nearest'
)
Out[18]: 119

data.score.quantile(
        0.9,
        interpolation='nearest'
)
Out[20]: 136

2.分组分析

根据分组字段,将分析对象划分成不同部分,以进行对比分析各组之间的差异性的分析方法。 函数

groupby(by=[分组列1, 分组列2, ...])
[统计列1, 统计列2, ...]
.agg({统计列别名1:统计函数1, 统计列别名2:统计函数2, ...})
  • by:用于分组的列
  • 中括号:用于统计的列
  • agg:统计别名显示统计值的名称,统计函数用于统计数据

常用统计函数

注释

size

计数

sum

求和

mean

均值

import numpy
import pandas

data = pandas.read_csv(
    '/users/bakufu/desktop/5.2/data.csv'
)
Out[21]: 
     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

aggResult = data.groupby(
    by=['class']
)['score'].agg({
    '总分':numpy.sum,
    '人数':numpy.size,
    '均值':numpy.mean        
})
Out[23]: 
        总分  人数  均值
class                 
一班     635   5  127.00
三班     484   4  121.00
二班     455   4  113.75

3.分布分析

指根据分析目的,将定量数据进行等距或不等距的分组,研究各组分布规律的分析方法。

import numpy
import pandas
data = pandas.read_csv(
        '/users/bakufu/desktop/5.3/data.csv'
)
Out[69]: 
    用户ID   注册日期       身份证号码       性别  出生日期    年龄
0   100000  2011/1/1  15010219621116401I  男  1962/11/16  52
1   100001  2011/1/1  45092319910527539E  男   1991/5/27  23
2   100002  2011/1/1  35010319841017421J  男  1984/10/17  30
3   100006  2011/1/1  37110219860824751B  男   1986/8/24  28
4   100010  2011/1/1  53042219860714031J  男   1986/7/14  28
5   100011  2011/1/1  32012519711028001B  男  1971/10/28  43
6   100012  2011/1/1  23030219950828581I  男   1995/8/28  19
7   100013  2011/1/1  42112619900301477J  男    1990/3/1  24
8   100015  2011/1/1  53012119811002001I  男   1981/10/2  33
9   100016  2011/1/1  21050219890110061C  男   1989/1/10  26
10  100017  2011/1/1  21050219920110061C  男   1992/1/10  22

#
aggResult = data.groupby(
    by=['年龄']
)['年龄'].agg({
    '人数': numpy.size        
})
Out[71]: 
    人数
年龄    
19   1
22   1
23   1
24   1
26   1
28   2
30   1
33   1
43   1
52   1

#
bins = [
    min(data.年龄)-1, 20, 30, 40, max(data.年龄)+1
]
Out[74]: [18, 20, 30, 40, 53]

#
labels = [
    '20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上'
]
Out[75]: ['20岁及以下', '21岁到30岁', '31岁到40岁', '41岁及以上']

#
data['年龄分层'] = pandas.cut(
    data.年龄, 
    bins, 
    labels=labels
)
Out[76]: 
    用户ID   注册日期       身份证号码       性别   出生日期  年龄    年龄分层
0   100000  2011/1/1  15010219621116401I  男  1962/11/16  52   41岁及以上
1   100001  2011/1/1  45092319910527539E  男   1991/5/27  23  21岁到30岁
2   100002  2011/1/1  35010319841017421J  男  1984/10/17  30  21岁到30岁
3   100006  2011/1/1  37110219860824751B  男   1986/8/24  28  21岁到30岁
4   100010  2011/1/1  53042219860714031J  男   1986/7/14  28  21岁到30岁
5   100011  2011/1/1  32012519711028001B  男  1971/10/28  43   41岁及以上
6   100012  2011/1/1  23030219950828581I  男   1995/8/28  19   20岁及以下
7   100013  2011/1/1  42112619900301477J  男    1990/3/1  24  21岁到30岁
8   100015  2011/1/1  53012119811002001I  男   1981/10/2  33  31岁到40岁
9   100016  2011/1/1  21050219890110061C  男   1989/1/10  26  21岁到30岁
10  100017  2011/1/1  21050219920110061C  男   1992/1/10  22  21岁到30岁

#
aggResult = data.groupby(
    by=['年龄分层']        
)['年龄'].agg({
    '人数': numpy.size        
})
Out[78]: 
         人数
年龄分层       
20岁及以下    1
21岁到30岁   7
31岁到40岁   1
41岁及以上    2

#
pAggResult = round(
    aggResult/aggResult.sum(),
    2        
)*100
pAggResult['人数'].map('{:,.2f}%'.format)
Out[79]: 
年龄分层
20岁及以下      9.00%
21岁到30岁     64.00%
31岁到40岁     9.00%
41岁及以上     18.00%
Name: 人数, dtype: object
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本统计分析
  • 2.分组分析
  • 3.分布分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档