01 创建数组
import numpy as np
#创建数组
t1 = np.array([1,2,3,])
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(type(t2))
print(t2)
t3 = np.arange(4,10,2)
print(type(t3))
print(t3)
print(t3.dtype)
#创建指定类型数组
t4 = np.array(range(1,4),dtype=float)
print(t4)
t5 = np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
#调整数据类型
t6 = t5.astype("int8")
print(t6)
#numpy中的小数
import random
t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
t8 = np.round(t7,2)
print(t8)
02 数组的计算
import numpy as np
t1 = np.arange(12)
print(t1.shape)
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
print(t2.shape)
t3 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(t3)
print(t3.shape)
t4 = np.arange(12)
print(t4.reshape((3,4)))
t5 = np.arange(24).reshape(2,3,4)
print(t5)
print(t5+2) #所有的都加2
print(t5*2)
print(t5/2)
print(t5.flatten()) #把数据转换成一维
t5 = t5.reshape(4,6)
t6 = np.arange(100,124).reshape((4,6))
print(t6)
print(t6+t5)
t7 = np.arange(0,6)
print(t7-t5)
t8 = np.arange(4).reshape((4,1))
print(t5-t8)
03 读取本地数据和索引
#numpy读取数据
import numpy as np
us_file_path = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/GB_video_data_numbers.csv"
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#按照对角线进行旋转
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)
print(t2)
04 numpy中的索引和切片
#取行
print(t2[2]) #第三行
#取多行
print(t2[2:])
#取不连续的多行,需要使用方括号,ndarray类型
print(t2[[2,8,10]])
#取行
print(t2[1,:])
print(t2[2,:])
print(t2[[2,10,3],:])
#取列
print(t2[:,0])
print(t2[:,2:])
print(t2[:,[0,2]])
#取行和列,第三行第四列的值
a = t2[2,3]
print(a)
print(type(a))
#取第三行到第五行,第二列到第四列的值
b = t2[2:5,1:4]
print(b)
#取多个不相邻的多个点
#选出来的结果 [0,1] [2,1] [2,3]
c = t2[[0,2,2],[0,1,3]]
print(c)
import numpy as np
t2 = np.arange(24).reshape(4,6)
t2[t2<10] = 3 #把小于0的数字都换成3
np.where(t2<10,0,10) #t<10为0,其他情况替换为10
print(np.where(t2<10,0,10))
print(t2.clip(10,18)) #<10替换为10,大于18的替换为18
t2 = t2.astype(float)
t2[3,3] = np.nan
print(t2)
05 numpy中的nan和常用方法
#数组的拼接
t1 = np.arange(12).reshape(2,6)
t2 = np.arange(12,24).reshape(2,6)
print(np.vstack((t1,t2))) #竖直拼接
print(np.hstack((t1,t2))) #水平拼接
#数组的行列交换
t = np.arange(12,24).reshape(3,4)
t[[1,2],:] = t[[2,1],:] #行交换
print(t)
t[:,[0,2]] = t[:,[2,0]] #列交换
print(t)
06 numpy中的随机方法
import numpy as np
#加载国家数据
us_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/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的数据
zero_data = np.zeros((us_data.shape[0],1)).astype(int)
ones_data = np.ones((uk_data.shape[0],1)).astype(int)
#分别添加一列全为0,1的值
us_data = np.hstack((us_data,zero_data))
uk_data = np.hstack((uk_data,ones_data))
#拼接两组数据
final_data = np.vstack((us_data,uk_data))
print(final_data)
#创建一个全为1的数组
np.ones((2,3))
#创建一个全为0的数组
np.zeros((3,4))
#创建一个对角线为1的正方形数组
np.eye(10)
#获取最大值最小值的位置
t = np.eye(4)
np.argmax(t,axis=0)#按照列取
t[t==1] = -1
np.argmin(t,axis=1)#按照行取
#numpy生成随机数(10-20 4行5列)
np.random.seed(10)
np.random.randint(10,20,(4,5))
07 numpy中的nan和inf
nan(NAN,Nan):not a number不是一个数字
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
inf(-inf.inf):inf正无穷 -inf 负无穷
np.nan == np.nan #两个nan不相等
t2 = np.arange(0,24).astype(float).reshape(4,6)
t2[t2<10] = 3.
t2[t2>20] = 20.
t2[3,3] = np.nan
t2[:,0] = 0
np.count_nonzero(t2) #统计非零数字个数
np.count_nonzero(t2 != t2)#统计nan个数
np.count_nonzero(np.isnan(t2)) #统计nan个数
nan和任何值计算结果都是nan
np.sum(t3,axis=0) #计算列的和 axis=1计算行的结果
t2.mean(axis=0)#每列的均值
print(np.median(t2,axis=0))#每列的平均值
print(t2.max(axis=0))
print(t2.min(axis=0))
print(np.ptp(t2,axis=0))#最大值和最小值之差
print(t2.std(axis=0)) #标准差
#把nan替换为均值或中值,直接删除有nan的那一行
import numpy as np
#print(t1)
def fill_ndarray(t1):
for i in range(t1.shape[1]):
temp_col = t1[:,i] #当前的一列
nan_num = np.count_nonzero(temp_col != temp_col)
if nan_num != 0: #不为0,说明当前这一列有nan
temp_not_non_col = temp_col[temp_col == temp_col] #不是nan的值
temp_col[np.isnan(temp_col)] = temp_not_non_col.mean() #nan赋值为平均值
return t1
if __name__ == '__main__':
t1 = np.arange(12).reshape((3,4)).astype("float")
t1[1,2:] = np.nan
print(t1)
t1 = fill_ndarray(t1)
print(t1)
#了解英国的youtube中视频的评论数和喜欢数的关系,散点图
import numpy as np
from matplotlib import pyplot as plt
#加载国家数据
us_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/GB_video_data_numbers.csv"
#加载国家数据
#us_data = np.loadtxt(us_data,delimiter=",",dtype=int)
t_uk = np.loadtxt(uk_data,delimiter=",",dtype="int")
t_uk =t_uk[t_uk[:,1]<500000]#选择喜欢数比50万小的数据
t_uk_comment = t_uk[:,-1]
t_uk_like = t_uk[:,1]
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comment)
plt.show()