数据分析
指使用适当的统计分析方法对搜集来的大量数据进行分析,提取有用信息并形成结论,从而对数据进行更加详细的研究和概括总结的过程。
数组转置
数据转置是数组重塑的一种特殊形式。
哑变量
又称虚拟变量,是用以反映质的属性的一种人工变量,是量化了的质变量,通常取值0或1。
离散化
将数值进行离散化分段统计以提高数据的区分度。
1.Numpy
1.创建一个数组,数组的shape为(3,2),元素都是0。
import numpy as np
a = np.zeros([3,2])
a
array([[0., 0.],
[0., 0.],
[0., 0.]])
b = a.reshape(2,3)
b
array([[0., 0., 0.],
[0., 0., 0.]])
arr = np.zeros((8,8),dtype=int)
arr[1::2,0::2] = 1
arr[0::2,1::2] = 1
arr
array([[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0]])
2.Pandas
import pandas as pd
df_data = np.array([[1,2,7,3],[5,2,4,0],[8,4,2,5],[8,9,3,2]])
col_data = np.array(['A','B','C','D'])
df_obj = pd.DataFrame(columns=col_data,data=df_data)
df_obj
|
A |
B |
C |
D |
0 |
1 |
2 |
7 |
3 |
1 |
5 |
2 |
4 |
0 |
2 |
8 |
4 |
2 |
5 |
3 |
8 |
9 |
3 |
2 |
sort_value_data = df_obj.sort_values(by=['B'],ascending=False)
sort_value_data
|
A |
B |
C |
D |
3 |
8 |
9 |
3 |
2 |
2 |
8 |
4 |
2 |
5 |
0 |
1 |
2 |
7 |
3 |
1 |
5 |
2 |
4 |
0 |
sort_value_data.to_csv(r'D:\write_data.csv')
3.数据预处理
现有如下图所示两组数据,其中A组中B列数据存在缺失值。
A组
|
A |
B |
C |
key |
0 |
2 |
5 |
8 |
3 |
1 |
3 |
nan |
7 |
4 |
2 |
5 |
2 |
50 |
5 |
3 |
2 |
3 |
8 |
2 |
4 |
3 |
6 |
2 |
2 |
B组
|
A |
B |
C |
0 |
3 |
3 |
3 |
1 |
4 |
4 |
4 |
2 |
5 |
5 |
5 |
- 使用DataFrame创建这两组数据。
- 对A组中的缺失值进行填充,填充方向为时间填充。
- 合并A组和B组,要求按列的方向堆叠数据,并使用内连接。
group_a = pd.DataFrame({'A':[2,3,5,2,3],
'B':[5,np.nan,2,3,6],
'C':[8,7,50,8,2],
'key':[3,4,5,2,2]},dtype=int)
group_b = pd.DataFrame({'A':[3,4,5],
'B':[3,4,5],
'C':[3,4,5]},dtype=int)
print(group_a)
print(group_b)
A B C key
0 2 5 8 3
1 3 NaN 7 4
2 5 2 50 5
3 2 3 8 2
4 3 6 2 2
A B C
0 3 3 3
1 4 4 4
2 5 5 5
group_a = group_a.fillna(method='ffill')
group_a
|
A |
B |
C |
key |
0 |
2 |
5 |
8 |
3 |
1 |
3 |
5 |
7 |
4 |
2 |
5 |
2 |
50 |
5 |
3 |
2 |
3 |
8 |
2 |
4 |
3 |
6 |
2 |
2 |
group_c = pd.concat([group_a,group_b],axis=1,join='inner')
group_c
|
A |
B |
C |
key |
A |
B |
C |
0 |
2 |
5 |
8 |
3 |
3 |
3 |
3 |
1 |
3 |
5 |
7 |
4 |
4 |
4 |
4 |
2 |
5 |
2 |
50 |
5 |
5 |
5 |
5 |
4.分组聚合
现有如下图所示学生信息,请根据图中的信息完成以下操作。
|
年级 |
姓名 |
年龄 |
性别 |
身高 |
体重 |
0 |
大一 |
张三 |
18 |
男 |
175 |
65 |
1 |
大二 |
李四 |
19 |
女 |
165 |
70 |
2 |
大三 |
王五 |
20 |
男 |
178 |
75 |
3 |
大四 |
刘六 |
22 |
男 |
175 |
55 |
4 |
大二 |
孔七 |
12 |
女 |
160 |
70 |
5 |
大三 |
冯八 |
32 |
男 |
180 |
70 |
6 |
大一 |
孟九 |
21 |
女 |
167 |
52 |
7 |
大三 |
孔十 |
22 |
女 |
170 |
53 |
8 |
大四 |
张三一 |
12 |
男 |
185 |
73 |
- 根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。
- 分别计算四个年级中身高最高的同学。
- 计算大一学生与大三学生的平均体重。
students_data = pd.DataFrame({'年级':['大一','大二','大三','大四','大二','大三','大一','大三','大四'],
'姓名':['张三','李四','王五','刘六','孔七','冯八','孟九','孔十','张三一'],
'年龄':[18,19,20,22,12,32,21,22,12],
'性别':['男','女','男','男','女','男','女','女','男'],
'身高':[175,165,178,175,160,180,167,170,185],
'体重':[65,70,75,55,70,70,52,53,73]})
students_data
|
年级 |
姓名 |
年龄 |
性别 |
身高 |
体重 |
0 |
大一 |
张三 |
18 |
男 |
175 |
65 |
1 |
大二 |
李四 |
19 |
女 |
165 |
70 |
2 |
大三 |
王五 |
20 |
男 |
178 |
75 |
3 |
大四 |
刘六 |
22 |
男 |
175 |
55 |
4 |
大二 |
孔七 |
12 |
女 |
160 |
70 |
5 |
大三 |
冯八 |
32 |
男 |
180 |
70 |
6 |
大一 |
孟九 |
21 |
女 |
167 |
52 |
7 |
大三 |
孔十 |
22 |
女 |
170 |
53 |
8 |
大四 |
张三一 |
12 |
男 |
185 |
73 |
data = students_data.groupby('年级')
Freshaman = dict([x for x in data])['大一']
Freshaman
|
年级 |
姓名 |
年龄 |
性别 |
身高 |
体重 |
0 |
大一 |
张三 |
18 |
男 |
175 |
65 |
6 |
大一 |
孟九 |
21 |
女 |
167 |
52 |
data1 = students_data[['身高','年级']].groupby(by='年级').max()
data2 = pd.merge(students_data,data1,on=['身高','年级'],how='right')
data2
|
姓名 |
年龄 |
性别 |
身高 |
体重 |
年级 |
|
|
|
|
|
大一 |
张三 |
18 |
男 |
175 |
65 |
大二 |
李四 |
19 |
女 |
165 |
70 |
大三 |
冯八 |
32 |
男 |
180 |
70 |
大四 |
张三一 |
12 |
男 |
185 |
73 |
print(Freshaman['体重'].apply('mean'))
58.5
data = students_data.groupby('年级')
Freshaman = dict([x for x in data])['大三']
print(Freshaman['体重'].apply('mean'))
66.0