我正在尝试分析来自多个YouTube视频的数据。我不知道如何使用YouTube API,或者即使通过该方法也可以。相反,我通过PythonAnywhere使用Python 2.7。
我创建了一个视频'具有许多属性的类:
class Video:
def __init__(self, title, description, views, likes, dislikes, tags, comments...):
self.title = title
...
已经为数千个视频抓取了这些数据。计划是分析数据以找出平均数量的观看次数,喜欢等等,以及标题,描述中最受欢迎的单词......或每天观看次数最多的视频(基于上传日期和当前视图)。我试图分析很多东西。
问题是:对于许多对象的列表,分析此类数据的最佳方法是什么? (或者有更好的方法而不是使用对象列表吗?)
我通过一个累积数字的for
循环尝试了这个,然后我在最后显示数字。
我还尝试使用列表推导(例如print("Longest title:" + str(max([len(v.title) for v in allVids])))
。
我担心使用这样的多个列表推导效率低下,如果不是为了可读性,那么从长远来看单个巨型for
循环会更好。
非常感谢任何帮助,我为这样一个广泛的问题道歉;我无法在本网站的其他地方找到答案。
修改 - 更多信息: 我每天都在同一时间从十大热门视频中抓取数据。一天的对象列表将保存为pickle文件。在分析数据时,我一直在加载所有文件并将它们全部添加到一个列表中。
I&#39的原因; M寻找最/更有效的方式是因为I' M使用PythonAnywhere调度数据的刮擦和我不'吨要在那tarpit所有的时间;我需要一些处理时间来分析数据。
答案 0 :(得分:1)
对于我来说,对于Pandas数据框来说,这听起来是个好例子,其中每个视频的统计数据都是带有相关数据的列或行。
您可能需要先进行for循环来构建数据框,但假设它适合内存,那么您应该为其余的评估做好准备。它看起来像这样。
import pandas as pd
# create a data frame
df = pd.DataFrame(columns=['upload date', 'title', 'description', 'views', 'likes', 'dislikes']
# add data to data frame
for vid in saved_vids:
df[vid, 'title'] = vid.title
df[vid, 'views'] = vid.views
# and so on
这可以让您轻松找到每日平均观看次数等。
df.views.mean()
查看子集化选项和过滤的索引和选择。
根据您想要分析的方式,您可能需要对评论做些不同的事情,但我认为大熊猫会为您提供一个很好的基础来评估您可能希望看到的内容。如果将所有注释加载到数据框中,则可以使用str.contains运算符来查找内容。我没有做太多的事情,但可能有更好的方法。
答案 1 :(得分:0)
假设每个视频实例都包含一个视频的属性,那么每次创建新的视频实例时,都可以更新全局变量。类似的东西:
total_views += video.views
或:
if video.views > most_viewed_video.views:
most_viewed_video = video
这是一个相当直接且简单的方法,而不了解您的代码库。从理论上讲,你应该能够完全摆脱for循环,除非你想要将一个选定数量的视频相互比较。