Matplotlib+Numpy的小案例(适合新手且极具挑战性)

题目:

现有英国与美国 Youtube 数据 ,其每列对应的是:点击,喜欢,不喜欢,评论 。
数据文件为:GB_video_data_numbers.csv (英国) 与 US_video_data_numbers.csv (美国)
要求如下:

  1. 结合 Matplotlib 绘制各自的评论数量的图形,体现其评论数主要分布在哪个区间。
  2. 绘制图形,分析英国的 Youtube 中视频的评论数与喜欢数的关系。
  3. 现在数据分析人员希望将两个国家的数据拼接至一起进行分析,请你完成数据拼接保存为 all_data.csv;
    注意:在 all_data.csv 中,仍需要清楚的知道哪些数据是英国的,哪些数据是美国的。

第一问:

结合 Matplotlib 绘制各自的评论数量的图形,体现其评论数主要分布在哪个区间。

第一步:

艾坤同学:题目很简单,要体现区间那肯定是直方图,只要提取出总数据里面的评论数据,然后根据评论数据画个直方图就行了。轻松拿下!φ(゜▽゜*)♪。

作者:哈哈,不愧是艾坤,好戏还在后面!

#1.读取数据
gb_data = np.loadtxt("GB_video_data_numbers.csv ",delimiter=",")
gb_data
# 2.获取评论数
gb_data_com = gb_data[:,3]
gb_data_com
# 3.可视化
# 考察主要分布区间 ->> 直方图
# 直方图 ->> 极差,组距,组数

# 极差
gb_ptp = max(gb_data_com) - min(gb_data_com)
gb_ptp    # 582505.0

# 组距 ->> 根据极差考虑需要多少组来确定大概组距
d = 25000

# 组数 ->> 极差/组距
bins_nums_gb = int(gb_ptp/d)
bins_nums_gb

# 直方图
plt.hist(gb_data_com,bins=bins_nums_gb)

# 图形展示
plt.show()

第一步
艾坤同学:这图形为什么看起来这么奇怪,主要区间是0-100000吗???不管了,答案就是0-100000这个区间。

作者:第一步很轻松得到的图是所有评论数据对应的直方图,太笼统,不清晰。我们根据绘制出来的图可以明显的看出>100000数据几乎为0,甚至>50000的数据也是几乎为0,几乎为0 == 没有参考价值,所以下一步就需要把这些没有参考价值的数据清洗了,对有价值的数据进行分析以得到最合适的答案。

第二步:

艾坤同学:原来如此,我学废了。

作者:对数据进行简单的清洗,对有参考价值的数据进行分析。

# 由上图无法清晰判断主要区间,图不够清晰
# 评论在100000后的数目很少,无参考价值,进行简单数据清洗 ->> 删除
# 清洗过后的数据
gb_data_com_useful = []
for i in gb_data_com:
    if i < 100000:
        gb_data_com_useful.append(i)
# 重新计算极差、组距,组数
# 极差
gb_ptp = max(gb_data_com_useful) - min(gb_data_com_useful)
# gb_ptp ->> 83992.0
# 组距
d = 3000
# 组数
bins_gb = int(gb_ptp/d)
bins_gb
# 可视化
plt.hist(gb_data_com_useful,bins = bins_gb)
# 图形展示
plt.show()

第二步
艾坤同学:图好像没有什么变化啊,哎呦,作者在干嘛,怎么回事啊。

作者:图还是很笼统不够不清晰,那就再次对数据进行清洗,留下更有价值的数据。

第三步:

艾坤同学:原来如此,我又学废了。

作者:再次清洗数据,对更有价值的数据进行分析。

# 经过第一次清洗,图还是不清晰,在进行清洗,10000之后数据无参靠价值
# 清洗过后的数据
gb_data_com_useful = []
for i in gb_data_com:
    if i < 10000:
        gb_data_com_useful.append(i)
# 重新计算极差、组距,组数
# 极差
gb_ptp = max(gb_data_com_useful) - min(gb_data_com_useful)
# gb_ptp ->> 9933.0
# 组距
d = 500
# 组数
bins_gb = int(gb_ptp/d)
bins_gb
# 可视化
plt.hist(gb_data_com_useful,bins = bins_gb,density=True)


# 对x轴进行更精细划分
x_ticks = [i for i in range(0,10500,500)]
# 可添加合适标签
x_label = [f"{i}次" for i in range(0,10500,500)]
plt.xticks(x_ticks,x_label,rotation=45)
# 添加组件
plt.xlabel("次数")
plt.ylabel("频率")
plt.title("GB评论次数分布图")

# 展示图形
plt.show()

第三步
艾坤同学:这次得到的图很满意,足够清晰了可以明显的看清评论的主要分布区间是0-500。φ(゜▽゜*)♪!,我真的学废了!

第四步:

艾坤同学:和GB数据一样,对US数据进行相同操作分析,so easy!

作者:艾坤同学都学废了,大家也动手试一试吧!

# US同上
#1.读取数据
us_data = np.loadtxt("US_video_data_numbers.csv ",delimiter=",")
# 2.获取评论数
us_data_com = us_data[:,3]

# 3.可视化
us_data_com_useful = []
for i in us_data_com:
    if i < 10000:
        us_data_com_useful.append(i)
# 重新计算极差、组距,组数
# 极差
us_ptp = max(us_data_com_useful) - min(us_data_com_useful)

# 组距
d = 500
# 组数
bins_us = int(us_ptp/d)
bins_us
# 可视化
plt.hist(us_data_com_useful,bins = bins_us,density=True)


# 对x轴进行更精细划分
x_ticks = [i for i in range(0,10500,500)]
# 可添加合适标签
x_label = [f"{i}次" for i in range(0,10500,500)]
plt.xticks(x_ticks,x_label,rotation=45)
# 添加组件
plt.xlabel("次数")
plt.ylabel("频率")
plt.title("US评论次数分布图")

# 展示图形
plt.show()

第四步

结论:

  1. GB数据评论数主要集中在1-500
  2. US数据评论数主要集中在1-500

到这里第一小问就做完了,与没有什么收获呢?评论区交流吧!

第二问:

绘制图形,分析英国的 Youtube 中视频的评论数与喜欢数的关系。

第一步:

艾坤同学:这个简单啊,折线图,散点图随便选一个画一下就好啦。

作者:考虑两者关系,折线图?散点图?选哪一个呢?
折线图和散点图区别无非就是折线图有线把点连接起来。
这么多点有必要用线连接吗?艾坤同学已经试过了完全没有必要,感兴趣的同学可以自己试着画一画,作者这里直接选择了散点图。

# 1.获取数据
gb_data_com = gb_data[:,3]
# gb_data_com
gb_data_like = gb_data[:,1]

# 2.可视化
# 判断评论数与喜欢数关系 ->> 散点图     折线图? ->> 点太多,无效果
plt.scatter(gb_data_com,gb_data_like)

# 3.展示图形
plt.show()

第一步
艾坤同学:这图看着怎么有种似曾相识的感觉,好像我第一问很轻松得到的那个图,是不是需要数据清洗,再进行分析。

作者:是的艾坤,你很聪明哦,这个图太笼统,不清晰,需要数据清洗后再进行分析。

第二步:

艾坤同学:这步我学废了,我来。

作者:okk,对数据进行清洗,再进行分析。

# 同第一问,图需要清晰化,数据需要清洗
# com主要集中在10000以内
# 数据清洗
# 有用数据
# gb_data_com_ = []
# gb_data_like_ = []

# # 方法1:enumerate()
# for i,j in enumerate(gb_data_com):
#     if j < 10000:
#         gb_data_com_.append(j)
#         gb_data_like_.append(gb_data_like[i])
        
# 方法2:对整体数据进行清洗
gb_data2 = gb_data[gb_data[:,3]<10000]
gb_data_com_ = gb_data2[:,3]
gb_data_like_ = gb_data2[:,1]
plt.scatter(gb_data_com_,gb_data_like_)
# 添加组件
plt.xlabel("comment")
plt.ylabel("like")
plt.title("GB评论数与喜欢数关系")
#展示图形
plt.show()

第二步
艾坤同学:哈哈,我做出来啦,🐔你太美!

作者:根据清洗过后的数据绘制出来的图可以看清评论数与喜欢数的关系了。

结论:

评论数和喜欢数基本呈正相关关系。
做完第二小问,你又有了什么新的收获呢,评论区交流一下吧!

第三问:

现在数据分析人员希望将两个国家的数据拼接至一起进行分析,请你完成数据拼接保存为 all_data.csv;
注意:在 all_data.csv 中,仍需要清楚的知道哪些数据是英国的,哪些数据是美国的。

第一步:

艾坤同学:简单,数据拼接,哈哈哈!
啊不对,怎么分清哪些数据是英国,哪些数据是美国的呢?

作者:数据拼接是很简单,如何清楚的知道哪些数据是英国的,哪些数据是美国的,只需要新增一列,英国的标记为0,美国的标记为1就好啦!。

# 1.获取两个国家数据
# 2.分别给两个国家数据添加标识
# 有一个全为0的数组,确保行数与原有数组一致 ->> 拼接
zeros_data = np.zeros((gb_data.shape[0],1)).astype("int")
zeros_data.shape
g_data = np.hstack((gb_data,zeros_data))

# 有一个全为1的数组,确保行数与原有数组一致 ->> 拼接
ones_data = np.ones((us_data.shape[0],1)).astype(np.int64)
u_data = np.hstack((us_data, ones_data))
u_data
# 数据拼接
all_data = np.vstack((g_data,u_data))
all_data.shape
# 保存数据
np.loadtxt("all_data.csv",all_data,delimiter=",",fmt="%d")

到此,艾坤同学已经完全掌握了本题,大家如果哪有疑问可以在评论区尽情的提出来,艾坤同学会一一帮大家解答的,想要csv文件的同学只需要在评论区回复一句“🐔你太美!”艾坤同学就会立马发给你哦!!!

总结:

本题运用到的知识点:
1.numpy对文件的读取和保存
2.直方图、散点图的绘制
3.部分数据的提取

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sjsflyqy10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值