正在分析 objects 列表中的数据

Analysing data in list of objects

我正在尝试分析来自多个 YouTube 视频的数据。我不知道如何使用 YouTube API,甚至不知道该方法是否可行。相反,我通过 PythonAnywhere.

使用 Python 2.7

我创建了一个 'Video' class 具有许多属性:

class Video:
    def __init__(self, title, description, views, likes, dislikes, tags, comments...):
        self.title = title
        ...

并为数以千计的视频抓取了这些数据。计划是分析数据以找出平均观看次数、喜欢次数等,以及标题、描述中最流行的词……或每天观看次数最多的视频(基于上传日期和当前观看次数)。我正在尝试分析很多事情。

问题是:对于许多 objects 的列表,分析此类数据的最佳方法是什么? (或者有比使用 objects 列表更好的方法吗?)

我尝试通过一个 for 循环来累积数字,然后在最后显示数字。

我也尝试过使用列表理解(例如 print("Longest title:" + str(max([len(v.title) for v in allVids]))).

我担心像这样使用多个列表理解是低效的,如果不是为了可读性,单个巨大的 for 循环在长 运行 中会更好。

非常感谢任何帮助,对于如此宽泛的问题,我深表歉意;我无法在此站点的其他地方找到答案。

编辑 - 更多信息: 我每天都在同一时间从十大热门视频中抓取数据。一天的 objects 列表被保存为 pickle 文件。在分析数据时,我一直在加载所有文件并将它们全部添加到一个列表中。

我正在寻找 most/more 有效方法的原因是因为我正在使用 PythonAnywhere 来安排数据的抓取,我不想在 tarpit每时每刻;我需要一些处理时间来分析数据。

对我来说,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()

查看子集选项和过滤的索引和选择。

您可能需要对评论做一些不同的事情,具体取决于您希望如何分析评论,但我认为 pandas 会为您提供一个很好的基础来评估您可能希望看到的内容。如果将所有评论加载到数据框中,则可以使用 str.contains 运算符来查找内容。虽然我没有做太多,所以可能有更好的方法。

假设每个 Video 实例都包含一个视频的属性,那么每次创建一个新的 Video 实例时,您都可以更新一个全局变量。类似于:

total_views += video.views

或:

if video.views > most_viewed_video.views:
    most_viewed_video = video

这是一种相当直接和简单的方法,无需了解您的代码库的任何其他信息。从理论上讲,您应该能够完全摆脱 for 循环,除非您想将 select 数字的视频相互比较。