数据分析

指使用适当的统计分析方法对搜集来的大量数据进行分析,提取有用信息并形成结论,从而对数据进行更加详细的研究和概括总结的过程。

数组转置

数据转置是数组重塑的一种特殊形式。

哑变量

又称虚拟变量,是用以反映质的属性的一种人工变量,是量化了的质变量,通常取值0或1。

离散化

将数值进行离散化分段统计以提高数据的区分度。

1.Numpy

1.创建一个数组,数组的shape为(3,2),元素都是0。

import numpy as np
# 1.创建一个数组,数组的shape为(3,2),元素都是0。
a = np.zeros([3,2])
a
array([[0., 0.],
       [0., 0.],
       [0., 0.]])
# 重塑上述数组的维度为2行3列。
b = a.reshape(2,3)
b
array([[0., 0., 0.],
       [0., 0., 0.]])
# 创建一个表示国际象棋棋盘的8*8数组,其中,棋盘白色用0填充,黑色用1表示
arr = np.zeros((8,8),dtype=int)
# 从第一行开始,行间隔为2,从第0列开始,列间隔为2,赋值为1
arr[1::2,0::2] = 1
# 从第0行开始,行间隔为2,从第1列开始,列间隔为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
# 使用DataFrame创建数据
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'])
# 基于数据创建DataFrame对象
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

# 对B列数据进行降序排序
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

# 将排序后的数据写入到csv文件,并命名为write_data.csv
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

  1. 使用DataFrame创建这两组数据。
  2. 对A组中的缺失值进行填充,填充方向为时间填充。
  3. 合并A组和B组,要求按列的方向堆叠数据,并使用内连接。
#使用DataFrame创建这两组数据。
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
# 对A组中的缺失值进行填充,填充方向为时间填充。
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

# 合并A组和B组,要求按列的方向堆叠数据,并使用内连接。
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

  1. 根据年级信息为分组键,对学生信息进行分组,并输出大一学生信息。
  2. 分别计算四个年级中身高最高的同学。
  3. 计算大一学生与大三学生的平均体重。
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