如何在PythonAnywhere用Python2.7分析已爬取的YouTube视频数据?
分析YouTube视频数据的具体方法
嘿,你已经搞定了最费劲儿的爬取环节,接下来的数据分析其实很直观,咱们用Python 2.7一步步来实现你要的指标:
第一步:整理数据集合
首先确保你把所有爬取到的Video实例都存到了一个列表里——相信你爬取的时候已经在做这件事了,类似这样:
# 初始化存储所有视频的列表 videos = [] # 爬取过程中,每生成一个Video实例就添加进去 # 示例: videos.append(Video( title="我的第一个测试视频", description="这是一段演示内容", views=1200, likes=65, dislikes=3, tags=["Python", "数据分析"], comments=[] ))
第二步:计算基础统计指标
平均观看量、点赞数、点踩数
Python 2.7里整数除法会自动取整,所以记得先把总数转成float再除以视频数量,避免结果失真:
# 平均观看量 total_views = sum(video.views for video in videos) average_views = float(total_views) / len(videos) print("平均观看量:{:.2f}".format(average_views)) # 平均点赞数 total_likes = sum(video.likes for video in videos) average_likes = float(total_likes) / len(videos) print("平均点赞数:{:.2f}".format(average_likes)) # 平均点踩数 total_dislikes = sum(video.dislikes for video in videos) average_dislikes = float(total_dislikes) / len(videos) print("平均点踩数:{:.2f}".format(average_dislikes))
中位数(更抗极端值的参考指标)
平均值容易被少数爆火视频拉高,中位数能更客观反映大多数视频的真实表现:
# 先把观看量排序 sorted_views = sorted(video.views for video in videos) video_count = len(sorted_views) if video_count % 2 == 0: # 偶数个数据,取中间两个值的平均值 median_views = (sorted_views[video_count//2 - 1] + sorted_views[video_count//2]) / 2.0 else: # 奇数个数据,直接取中间值 median_views = sorted_views[video_count//2] print("观看量中位数:{:.2f}".format(median_views))
第三步:进阶分析(可选)
按标签统计平均表现
想知道哪个标签的视频更容易获得高观看量?用字典就能轻松统计:
tag_stats = {} for video in videos: for tag in video.tags: if tag not in tag_stats: # 初始化标签的统计项:总观看量、视频数量 tag_stats[tag] = {'total_views': 0, 'count': 0} tag_stats[tag]['total_views'] += video.views tag_stats[tag]['count'] += 1 # 计算每个标签的平均观看量 tag_avg_views = { tag: float(stats['total_views']) / stats['count'] for tag, stats in tag_stats.items() } # 按平均观看量从高到低排序,取Top5 sorted_tags = sorted(tag_avg_views.items(), key=lambda x: x[1], reverse=True) print("\nTop 5高平均观看量标签:") for tag, avg_view in sorted_tags[:5]: print("{}: {:.2f}".format(tag, avg_view))
点赞率分析(点赞数/观看量)
这个指标能更精准反映视频的受欢迎程度(避免只看绝对点赞数的偏差):
# 过滤掉观看量为0的视频,避免除以0报错 valid_videos = [v for v in videos if v.views > 0] # 计算每个视频的点赞率 like_rates = [(v.title, float(v.likes)/v.views) for v in valid_videos] # 按点赞率从高到低排序,取Top5 sorted_like_rates = sorted(like_rates, key=lambda x: x[1], reverse=True) print("\nTop 5高点赞率视频:") for title, rate in sorted_like_rates[:5]: print("{}: {:.2%}".format(title, rate))
针对Python 2.7的小提示
- 建议在文件开头加上
from __future__ import print_function,这样print()会以函数形式工作,使用format方法时更灵活; - 处理数千条数据时,尽量用生成器表达式(比如
sum(video.views for video in videos))而非列表推导,能节省不少内存。
内容的提问来源于stack exchange,提问作者Muzly
相关产品推荐
相关产品推荐

