import numpy as np
#使用numpy生成数组,ndarray类型
t1=np.array([1,2,3])#创建数组
print(t1)
print(type(t1))
t2=np.array(range(10))
print(t2)
print(type(t2))
t3=np.arange(4,10,2)
#t3=np.arange(10).reshape(2,5)#0-9的2行5列数组
print(t3)
print(type(t3))
print(t3.dtype)#
#numpy中的数据类型
t4=np.array(range(1,4),dtype=float)
print(t4)
print(t4.dtype)
#numpy中的bool类型
t5=np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(t5.dtype)
#调整数据类型
t6=t5.astype('int8')
print(t6)
print(t6.dtype)
#numpy中的小数
import random
t7=np.array([random.random()for i in range(10)])
print(t7)
print(t7.dtype)
t8=np.round(t7,2)#取2位小数
print(t8)
shape从后往前,后面的(3,2)相同//只要行上的数据一样//任意一维(行或列)相同,可以计算。
不能计算例子:
import numpy as np
us_file_path = "F:/python/课件/数据库 21-数据分析资料/数据分析资料/day03/code/youtube_video_data/US_video_data_numbers.csv"
# uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
# t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#unpack转置
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)
print(t2)
import numpy as np
us_file_path = "F:/python/课件/数据库 21-数据分析资料/数据分析资料/day03/code/youtube_video_data/US_video_data_numbers.csv"
# uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
# t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#unpack转置
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
# print(t1)
print(t2)
print('*'*100)
# 取行
print(t2[0])#2表示取的第n+1行
#取连续的多行
print(t2[2:])
#取不连续的多行
print(t2[[2,8,10]])
##通过方法
print(t2[1,:])#逗号前面放行(n+行),后面放列
print(t2[2:,:])#逗号前面的冒号表示后面的每行都要,后面的冒号表示每列都要
print(t2[[2,4,3],:])#表示取不连续的多行
#取列
print(t2[:,0])#取第一列(n+1)
print(t2[:,2:])#取连续的多列
print(t2[:,[0,2]])#取不连续的多列
#取多行和多列
a=t2[2,3]
print(a)#取第三行、四列的值
print(type(a))
b=t2[2:4,1:4]#取得是行和列交叉点的值
print(b)
#取多个不相邻的点
c=t2[[0,2,2],[0,1,3]]#表示取索引(0,0),(2,1)位置的值;里面的逗号表示数字是索引值,需要+1,右边的值也直接+1;冒号表示取值的范围,也是索引+1,但右边的值取不到。
print(c)
#数据的修改和替换
t2=np.arange(1,31).reshape(3,10)#创建1-20的数字...,3行10列
print(t2)
print(type(t2))
a_array=np.where(t2<=3,0,10)
print(a_array)
t2=t2.astype(float)#astype将数据类型转化为浮点型
t2[1,2]=np.nan#2行3列处
print(t2)
import numpy as np
t1=np.arange(12).reshape(3,4).astype('float')#生成3行,4列的数组
print(t1)
print("*"*100)
t1[1,2:]=np.nan#转换成float后才可以直接替换成nan,将2行,3列后面的数替换成nan
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)#将nan统计为‘非0’并计数
if nan_num!=0: #不为0,说明当前的这一列中有nan
temp_not_nan_col = temp_col[temp_col == temp_col] # 当前一列不为nan的array
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()# 选中当前为nan的位置,把值赋值为不为nan的均值
return t1
if __name__=='__main__':
t1=np.arange(12).reshape(3,4).astype('float')
t1[1,2:]=np.nan
print(t1)
print("之前")
t1=fill_ndarray(t1)#调用方法
print(t1)
import numpy as np
from matplotlib import pyplot as plt
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
# t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t_us = np.loadtxt(us_file_path,delimiter=",",dtype="int")
#取评论的数据
t_us_comments = t_us[:,-1]#表示最后1列
#选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments<=5000]
print(t_us_comments.max(),t_us_comments.min())
d = 50
bin_nums = (t_us_comments.max()-t_us_comments.min())//d
#绘图
plt.figure(figsize=(20,8),dpi=80)
plt.hist(t_us_comments,bin_nums)
plt.show()
##英国喜欢数和评论数之间的关系
t_uk = np.loadtxt(uk_file_path,delimiter=",",dtype="int")
#选择喜欢数比50万小的
t_uk=t_uk[t_uk[:,1]<=500000]
t_uk_comments=t_uk[:,-1]#倒数第一列
t_uk_like=t_uk[:,1]#第二列
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comments)#x与y之间的散点图
plt.show()
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、1的数据
zeros_data = np.zeros((us_data.shape[0],1)).astype(int)#转化为整型
ones_data = np.ones((uk_data.shape[0],1)).astype(int)#生成全为1的数组,形状是:全为行、1列
#分别添加一列全为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))
print(final_data)