-为什么要学习numpy?
- 快速
- 方便
- 科学计算的基础库
import numpy as np
t1 = np.array([1,2,3,])
t2 = np.array(range(10))
t3 = np.arange(4,10,2)
type(a)
> numpy.ndarray
数据的类型:
a.dtype
> dtype(“int64”)
制定创建的数组的数据类型:
t5 = np.array([1,1,0,1,0,0], dtype=bool)
t5 = np.array([1,1,0,1,0,0], dtype="?")
修改数组的数据类型:
t6 = t5.astype(“int8”)
修改浮点型的小数位数:
a = np.array([[3,4,5,6,7,8], [4,5,6,7,8,9]])
查看数组的形状:
a.shape
>(2, 6) # 最里面的列表有6个元素,外层列表有2个元素;2行6列
t3 = np.array([[[1,2,3], [4,5,6]]
[[7,8,9], [10,11,12]]])
t3.shape
>(2,2,3) # 2块,每块2行3列
修改数组的形状,不会对原来数组进行修改
b = a.reshape((3,4))
>array([[3,4,5,6],
[7,8,4,5]
[6,7,8,9]])
# 把数组转化为一维度数据:方法一
b.reshape((12,))
array([3,4,5,6,7,8,4,5,6,7,8,9])
# 把数组转化为一维度数据:方法二,数组的维度未知
b.flattern()
array([3,4,5,6,7,8,4,5,6,7,8,9])
# 把数组转化为一维度数据:方法三,数组的维度未知
b.reshape((b.shape[0]*b.shape[1],))
# 两种转化为一维度的错误辨析
b.reshape((1,12))
array([[3,4,5,6,7,8,4,5,6,7,8,9]])
b.reshape((12,1))
array([[3],
[4],
[5],
....
[8],
[9]])
b.reshape((1,24))
不能
和(3,2)的数组进行计算能够
和(3,2)的数组进行计算能够
和(3,3)的数组进行计算# coding:utf-8
import numpy as np
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
t = np.loadtxt(us_file_path, delimiter=",", dype="int", unpack=True)
# coding=utf-8
import numpy as np
def fill_ndarray(t1):
# 遍历每一列
for i in range(t1.shape[1]):
temp_col = t1[:, i] # 当前的一列
nan_num = np.count_nonzero(temp_col!=temp_col) # 找出值为nan的元素的个数
if nan_num != 0: # 不为0,说明当前这一列中有nan
temp_not_nan_col = temp_col[temp_col==temp_col] # 当前一列不为nan的array
temp_not_nan_col.mean()
# 选中当前为nan的位置,赋值为不为nan的,本列的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
return t1
if __name__ == "__main__":
t1 = np.arrange(12).reshape((3,4)).astype("float")
t1[1, 2:] = np.nan # 设置2行3、4列的值为nan
t1 = fill_ndarray(t1)
竖直分割与竖直拼接互为inverse。
# coding=utf-8
import numpy as np
us_data = "./youtube_video_data/US_video_data_numbers.csv"
uk_data = "./youtube_video_data/GB_video_data_numbers.csv"
# 加载国家数据
us_data = np.loadtxt(us_data, delimiter=",", dtype="int")
uk_data = np.loadtxt(uk_data, delimiter=",", dtype="int")
# 添加国家信息
# 构造全为0的列:us_data.shape[0]获得列表行数
zeros_data = np.zeros((us_data.shape[0], 1)).astype(int)
# 构造全为1的列
ones_data = np.ones((uk_data.shape[0], 1)).astype(int)
# 分别添加一列全为0的数据和全为1的数据
us.data = np.hstack((us_data, zeros_data))
uk.data = np.hstack((uk_data, ones_data))
# 拼接两组数据
final_data = np.vstack((us_data, uk_data))
和行的形状是一样的
和列的形状是一样的
和行的形状是一样的
和列的形状是一样的
# coding=utf-8
import numpy as np
from matplotlib import pyplot as plt
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
t_us = np.loadtxt(us_file_path, delimiter=",", dtype="int")
# 取评论的数据
t_us_comments = t_us[:,-1]
# 选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments<=5000]
d = 250
bin_mums = (t_us_comments.max() - t_us_comments.max()) // d # max = 500000, min = 0, 极差过大,但大多数值差异没有那么大,所以需要去掉过大的值。如果bin_nums除不尽的话,图像会发生偏移
# 绘图
plt.figure(figuresize=(20, 8), dpi=80)
plt.hist(t_us_comments)
plt.show()
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
t_us = np.loadtxt(us_file_path, delimiter=",", dtype="int")
# 选择比500000小的数据(以此来凸出过小的变化们)
t_us = t_us[t_us[:,1]<=500000]
t_us_comment = t_us[:, -1]
t_us_like = t_us[:, 1]
plt.figure(figuresize=(20, 8), dpi=80)
plt.scatter(t_us_like, t_us_comment)
plt.show()
import numpy as np
from matplotlib import pyplot
runtime_data = np.array([.........])
max_runtime = runtime_data.max()
min_runtime = runtime_data.min()
print(max_runtime - min_runtime)
# 设置不等宽的组距,hist方法中渠道的会是一个左闭右开的区间[1.9, 3.5)
num_bin_list = [1.9, 3.5]
i = 3.5
while i < max_runtime:
i += 0.5
num_bin_list.append(i)
# 设置图形的大小
plt.figure(figuresize(20, 8), dpi=80)
plt.hist(runtime_data, num_bin_list)
# xticks让之前的组距能够对的上
plt.xticks(num_bin_list)
plt.show()