描述性统计分析,用来概括事物整体状况以及事物间联系,即事物的基本特征,以发现内在规律的统计分析方法。
函数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
根据分组字段,将分析对象划分成不同部分,以进行对比分析各组之间的差异性的分析方法。 函数
groupby(by=[分组列1, 分组列2, ...])
[统计列1, 统计列2, ...]
.agg({统计列别名1:统计函数1, 统计列别名2:统计函数2, ...})
常用统计函数 | 注释 |
---|---|
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
指根据分析目的,将定量数据进行等距或不等距的分组,研究各组分布规律的分析方法。
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