Python Pandas(三) --数据分析

数据的类型有 数值型数据分类型数据 ,每一种类型的数据有不同的分析方法

系列

区分数据类型

读取csv文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

# 文件相对路径,与py文件在同一个目录下
path = './abc.csv'
# 读取数据,得到一个DataFrame对象
data = pd.read_csv(path, encoding='gb2312')

# 查看前三行数据
head = data.head(3)
print(head)

'''输出
工号 姓名 部门 绩效 提成 基本工资 是否确认
0 S1001 吕建国 销售部 100 2250 7500 是
1 S1002 张想 后勤部 100 4250 7500 是
2 S1003 王淑兰 后勤部 300 3500 6500 是
'''

属于数值型的有 绩效 提成基本工资 这三列
属于分类型的有 工号 姓名 部门是否确认 这四列

数值型数据的分析方法

数值型数据 是表示大小或多少的数据

最小值

DataFrame对象['列名'].min() 或者 Series对象.min()
1
2
3
4
5
6
7
8
9
10
11
12
13
# 求最小值
绩效 = data['绩效'].min()
提成 = data['提成'].min()
基本工资 = data['基本工资'].min()

print('最小值\n绩效:{}\n提成:{}\n基本工资:{}'.format(绩效, 提成, 基本工资))

'''输出
最小值
绩效:100
提成:1000
基本工资:6000
'''

最大值

DataFrame对象['列名'].max() 或者 Series对象.max()
1
2
3
4
5
6
7
8
9
10
11
12
13
# 求最大值
绩效 = data['绩效'].max()
提成 = data['提成'].max()
基本工资 = data['基本工资'].max()

print('最大值\n绩效:{}\n提成:{}\n基本工资:{}'.format(绩效, 提成, 基本工资))

'''输出
最大值
绩效:300
提成:4750
基本工资:10000
'''

平均值

DataFrame对象['列名'].mean() 或者 Series对象.mean()
1
2
3
4
5
6
7
8
9
10
11
12
13
# 求平均值
绩效 = data['绩效'].mean()
提成 = data['提成'].mean()
基本工资 = data['基本工资'].mean()

print('平均值\n绩效:{}\n提成:{}\n基本工资:{}'.format(绩效, 提成, 基本工资))

'''输出
平均值
绩效:202.0
提成:2767.5
基本工资:7900.0
'''

不过 平均值 受极端值影响比较大,不应过度依赖

中位数

DataFrame对象['列名'].median() 或者 Series对象.median()
1
2
3
4
5
6
7
8
9
10
11
12
13
# 求中位数
绩效 = data['绩效'].median()
提成 = data['提成'].median()
基本工资 = data['基本工资'].median()

print('中位数\n绩效:{}\n提成:{}\n基本工资:{}'.format(绩效, 提成, 基本工资))

'''输出
中位数
绩效:200.0
提成:2625.0
基本工资:8000.0
'''

绩效中位数200 ,这表明有一半的人小于等于200,剩下一半的人则大于等于200
中位数 可以很好的反映整体的水平,因为只取了中间值,不受极端值的影响,不至于偏离正常值太远

分类型数据的分析方法

分类型数据 是指可以归属于某一个类别的数据

查看数据的频率分布

频率分布反映的是一组数据中各个类别出现的次数占总数据量的百分比
公式为 频数/总数据量 :

DataFrame对象['列名'].value_counts()/DataFrame对象['列名'].value_counts().sum()
或者
Series对象.value_counts()/Series对象.value_counts().sum()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 求频率分布
部门 = data['部门'].value_counts()/data['部门'].value_counts().sum()
是否确认 = data['是否确认'].value_counts()/data['是否确认'].value_counts().sum()

print('部门:\n{}\n\n是否确认:\n{}'.format(部门, 是否确认))

'''输出
部门:
销售部 0.15
人力资源部 0.14
开发部 0.14
行政部 0.13
运营部 0.13
客服部 0.12
后勤部 0.11
财务部 0.08
Name: 部门, dtype: float64

是否确认:
是 0.51
否 0.49
Name: 是否确认, dtype: float64
'''