正在分析 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 数字的视频相互比较。
我正在尝试分析来自多个 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 数字的视频相互比较。