Python 分析对象列表中的数据

Python 分析对象列表中的数据,python,object,youtube,analyzer,Python,Object,Youtube,Analyzer,我试图分析来自多个YouTube视频的数据。我不知道如何使用YouTube API,甚至不知道通过这种方法是否可行。相反,我使用的是Python2.7到Pythonywhere 我创建了一个具有许多属性的“视频”类: class Video: def __init__(self, title, description, views, likes, dislikes, tags, comments...): self.title = title ... 并

我试图分析来自多个YouTube视频的数据。我不知道如何使用YouTube API,甚至不知道通过这种方法是否可行。相反,我使用的是Python2.7到Pythonywhere

我创建了一个具有许多属性的“视频”类:

class Video:
    def __init__(self, title, description, views, likes, dislikes, tags, comments...):
        self.title = title
        ...
并搜集了数千个视频的数据。该计划是分析数据,找出平均数量的意见,喜欢等和最流行的话在标题,描述。。。或者每天观看次数最多的视频(基于上传日期和当前观看次数)。我正试图分析很多事情

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

我尝试通过一个for循环来累加数字,然后在末尾显示数字

我还尝试使用列表理解(例如
print(“最长标题:”+str(max([len(v.title)表示所有视频中的v]))

我担心像这样使用多个列表理解是低效的,如果不是为了可读性,一个巨大的
for
循环从长远来看会更好

非常感谢您提供的任何帮助,对于如此广泛的问题,我深表歉意;我在本网站的其他地方找不到答案

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


我之所以寻找最有效的方法,是因为我正在使用PythonyWhere来安排数据的抓取,我不想一直呆在柏油坑里;我需要一些处理时间来分析数据。

对我来说,熊猫数据帧是一个很好的例子,因为每个视频的统计数据都是一列或一行相关数据

最初,您可能需要执行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操作符查找内容。尽管如此,我还没有做太多的处理可能是更好的方法。

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

total_views += video.views
或:


这是一种相当直接和简单的方法,不需要了解任何关于代码库的其他信息。从理论上讲,您应该能够完全摆脱for循环,除非您希望将选定的数字a视频彼此进行比较。

我喜欢这一建议,但我每天都在抓取数据,并且对象保存在一个文件夹中pickle文件,所以实现这个已经太晚了(尽管我可以运行一个一次性脚本,将这些运行总数相加,然后向对象添加代码,以便在对象被刮取时进行更新-我可能会研究一下)。使用熊猫似乎是进行许多必要分析的一种更为整洁的方式。正如你所说,评论更为棘手,而且存在某些问题(例如,标题中适合大小写的百分比)这可能需要一种不同的方法,但Pandas确实清理了很多混乱,减少了很多循环。很高兴我能提供帮助。我确实知道,通过将整列文本作为小写或大写来处理Pandas的大小写不敏感的内容是非常容易的。可能会帮助您处理正确的大小写标题。例如:df.titles.str.lower().isin([‘酷标题1’、‘酷标题2’])
if video.views > most_viewed_video.views:
    most_viewed_video = video