数据分析day03-Numpy

左心房为你撑大大i 提交于 2019-12-05 09:34:43

Numpy基本操作:

 1 # Author:K
 2 import numpy as np
 3 t = np.random.randint(1, 20, (5, 6)).astype(float)
 4 print(t)
 5 print('='*30)
 6 
 7 # 取行
 8 print(t[1])
 9 print('='*30)
10 
11 # 取多行
12 print(t[1:3])
13 print('='*30)
14 
15 # 取列
16 print(t[:, 1])
17 print('='*30)
18 
19 # 取多列
20 print(t[:, 1:3])
21 print('='*30)
22 
23 # 按给定范围取多行多列
24 print(t[1:3, 2:4])
25 print('='*30)
26 
27 # 行交换
28 print(t)
29 print('*'*100)
30 t[[1, 3], :] = t[[3, 1], :]
31 print(t)
32 
33 # 取多个值组成数组
34 print(t[[1, 2], [3, 4]])  # 取t[1, 3] t[2, 4] 组成数组
35 print(t[1, 3], t[2, 4])
36 print('='*30)
37 
38 # 按列求平均值,得出来的数组的个数与原来数组列数一致
39 t1 = np.average(t, axis=0)
40 print(t1)
41 print('='*30)
42 
43 # 按行求平均值,得出来的数组的个数与原来数组行数一致
44 t2 = np.average(t, axis=1)
45 print(t2)
46 print('='*30)
47 
48 # 将t中大于10的数赋值为nan
49 t[t > 10] = np.nan
50 print(t)
51 print('='*30)
52 
53 # 三元运算符
54 t = np.where(t > 5, 10, 0)  # 将t中大于5的数替换成10,其余的替换成0
55 print(t)
56 print('='*30)
57 
58 # 布尔索引
59 t[t > 0] = 5
60 print(t)
61 print('='*30)
62 
63 # 裁剪
64 t = t.clip(2, 4)  # 将小于2的替换成2,大于4的替换成4,若不在这区间内,则不变
65 print(t)
66 print('='*30)
67 
68 # 转置,三种调用方式都行
69 print(t.T)
70 print(t.transpose())
71 print(t.swapaxes(0, 1))
72 print('='*30)
73 
74 
75 def modify_nan(array_demo):
76     """
77     将数组中为nan的值赋值为某一列的均值
78     :param array_demo: 传入一个包含nan值的数组
79     :return: 返回一个不包含nan值的数组,其中nan的值被替换成均值
80     """
81     for i in range(array_demo.shape[1]):  # 按列数遍历数组
82         # 获取临时列
83         temp_col = array_demo[:, i]  # 浅拷贝,temp_col修改的话,对应的array_demo也会改
84         # 判断这一列中有没有nan值
85         if np.count_nonzero(temp_col != temp_col) != 0:  # 统计数组非0的个数,若不等于0,说明有nan
86             # 取出不为nan的值
87             temp_not_nan_col = temp_col[temp_col == temp_col]
88             # 求当前不为nan的值的均值
89             mean_num = temp_not_nan_col.mean()
90             # 选中当前列为nan的位置,将均值赋给nan
91             temp_col[np.isnan(temp_col)] = mean_num
92     return array_demo
93 
94 
95 t = modify_nan(t)
96 print(t)
97 print('='*30)
Numpy基本操作

 

用散点图绘制喜欢数和评论数的关系:

 1 # Author:K
 2 """
 3 用散点图绘制英国的喜欢数和评论数的关系
 4 """
 5 import numpy as np
 6 from matplotlib import pyplot as plt
 7 
 8 plt.rcParams['font.sans-serif'] = ['SimHei']
 9 
10 uk_data_path = r'E:\PythonProjects\data analysis\DataAnalysis-master\day03\code\youtube_video_data\GB_video_data_numbers.csv'
11 
12 uk_data = np.loadtxt(uk_data_path, delimiter=',', dtype=int)  # 设置dtype参数,让数据不以科学计数法输出;参数unpack若为True,则转置,默认为False
13 
14 # 去除喜欢数大于150000的数据
15 uk_data = uk_data[uk_data[:, 1] <= 150000]
16 # 去除评论数大于20000的数据
17 uk_data = uk_data[uk_data[:, -1] < 20000]
18 
19 uk_comments = uk_data[:, -1]  # 评论数
20 uk_likes = uk_data[:, 1]  # 喜欢数
21 
22 # 绘制散点图
23 plt.figure(figsize=(20, 8), dpi=80)
24 plt.scatter(uk_likes, uk_comments)
25 
26 # 设置x,y轴坐标
27 plt.xlabel('喜欢数', size=15)
28 plt.ylabel('评论数', size=15)
29 plt.title('喜欢数和评论数的关系', size=17)
30 
31 # 保存图形
32 plt.savefig('./loadtxt_scatter.png')
33 plt.show()
喜欢数和评论数的关系

 

为美国评论数绘制直方图:

 1 # Author:K
 2 """
 3 为美国评论数绘制直方图
 4 """
 5 
 6 import numpy as np
 7 from matplotlib import pyplot as plt
 8 
 9 # 解决中文显示问题
10 plt.rcParams['font.sans-serif'] = ['SimHei']
11 
12 us_data_path = r'E:\PythonProjects\data analysis\DataAnalysis-master\day03\code\youtube_video_data\US_video_data_numbers.csv'
13 
14 us_data = np.loadtxt(us_data_path, delimiter=',', dtype=int)  # 设置dtype参数,让数据不以科学计数法输出;参数unpack若为True,则转置,默认为False
15 
16 us_comments = us_data[:, -1]  # 取出评论数
17 # 去掉大于50000的数
18 us_comments = us_comments[us_comments <= 5000]
19 
20 # 绘制直方图
21 plt.figure(figsize=(20, 8), dpi=80)
22 d = 50
23 bins = (us_comments.max() - us_comments.min()) // d
24 plt.hist(us_comments, bins)
25 
26 # 设置x,y轴坐标
27 plt.xlabel('评论数', size=15)
28 plt.title('评论数分布', size=17)
29 
30 # 保存图形
31 plt.savefig('./loadtxt_hist.png')
32 
33 plt.show()
评论数分布情况

 

 

数组拼接实例

 1 # Author:K
 2 """
 3     现在希望把之前案例中两个国家的数据方法一起来研究分析,
 4     同时保留国家的信息(每条数据的国家来源),应该怎么办
 5 """
 6 
 7 import numpy as np
 8 
 9 us_data_path = r'E:\PythonProjects\data analysis\DataAnalysis-master\day03\code\youtube_video_data\US_video_data_numbers.csv'
10 uk_data_path = r'E:\PythonProjects\data analysis\DataAnalysis-master\day03\code\youtube_video_data\GB_video_data_numbers.csv'
11 
12 us_data = np.loadtxt(us_data_path, delimiter=',', dtype=int)
13 uk_data = np.loadtxt(uk_data_path, delimiter=',', dtype=int)
14 
15 # 对us_data添加最后一列,全为0
16 us_data = np.hstack((us_data, np.zeros((us_data.shape[0], 1)))).astype(int)
17 # 对uk_data添加最后一列,全为1
18 uk_data = np.hstack((uk_data, np.ones((uk_data.shape[0], 1)))).astype(int)
19 
20 # 拼接us_data 和 uk_data
21 data = np.vstack((us_data, uk_data))
22 
23 print(us_data)
24 print('*'*100)
25 print(uk_data)
26 print('*'*100)
27 print(data)
数组拼接

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!