练习所需要的数据集
动手练习1
- 读取英国和美国各自youtube1000的数据,结合之前matplotlib绘制出各自的评论数量的直方图
- 希望了解英国的youtube中视频的评论数和喜欢数的关系,应该如何绘制改图
解答:对于评论数和喜欢数的关系我们应该画一个散点图
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]
# 选择比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()
结果输出
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
font = {
'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': 'larger'}
my_font = matplotlib.rc("font", family='MicroSoft YaHei', weight="bold")
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_uk = np.loadtxt(uk_file_path, delimiter=",", dtype="int")
# 选择喜欢数比50万小的数据 喜欢的数据为第一列
t_uk = t_uk[t_uk[:, 1] <= 500000]
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.legend(loc="upper left", prop=my_font)
# 添加描述信息
plt.xlabel("喜欢数", fontproperties=my_font)
plt.ylabel("评论数", fontproperties=my_font)
plt.title("喜欢数和评论数的关系", fontproperties=my_font)
plt.show()
结果输出:
使用同样的方法可以提取英国的youtube的数据
数据的拼接
上述代码 行交换为第一行和第二行进行交换,列交换为第0列和第2列进行交换
动手练习2
- 现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办
# 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或全为1的数据,
# 第一步、构造全为0的数据
zeros_data = np.zeros((us_data.shape[0], 1)).astype(int)
ones_data = np.ones((uk_data.shape[0], 1)).astype(int)
print(zeros_data, ones_data)
# 第二步、分别添加一列全为0,1的数组
us_data = np.hstack((us_data, zeros_data)) # 美国为全为0的数据
uk_data = np.hstack((uk_data, ones_data)) # 英国全为1的数据
# 拼接两组数据
final_data = np.vstack((us_data, uk_data))
print(final_data)
拼接后的结果为:最后一列0为美国、1为英国
[[4394029 320053 5931 46245 0]
[7860119 185853 26679 0 0]
[5845909 576597 39774 170708 0]
...
[ 109222 4840 35 212 1]
[ 626223 22962 532 1559 1]
[ 99228 1699 23 135 1]]
Process finished with exit code 0
numpy中的随机方法
import numpy as np
print(np.ones((3, 4)))
print(np.zeros((3, 4)))
print(np.eye(3))
结果输出
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
解释seed随机种子
import numpy as np
t = np.random.randint(0, 20, (3, 4))
print(t)
打印输出结果:
[[ 6 1 6 18]
[ 5 8 10 5]
[ 1 19 10 17]]
当加入随机种子之后
import numpy as np
np.random.seed(10)
t = np.random.randint(0, 20, (3, 4))
print(t)
重复打印输出的结果:都为下列数组
[[ 9 4 15 0]
[17 16 17 8]
[ 9 0 10 8]]