Анализ данных в списке объектов - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь проанализировать данные из нескольких видео на YouTube. Я понятия не имею, как использовать API YouTube или даже если это возможно с помощью этого метода. Вместо этого я использую Python 2.7 через PythonAnywhere.

Я создал класс 'Video' со многими атрибутами:

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 лучше в долгосрочной перспективе, если не для удобства чтения.

Любая помощь очень ценится, и я прошу прощения за такой широкий вопрос; Я не смог найти ответ в другом месте на этом сайте.

Редактировать - Больше информации: Я собираю данные из десяти самых популярных видео каждый день в одно и то же время. Список объектов на один день сохраняется в виде файла выбора. При анализе данных я загружал все файлы и добавлял их в один список.

Причина, по которой я ищу наиболее / более эффективный способ, заключается в том, что я использую PythonAnywhere для планирования очистки данных, и я не хочу постоянно находиться в тарпите; Мне нужно время на обработку данных.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если предположить, что каждый экземпляр Video содержит атрибуты одного видео, то каждый раз, когда вы создаете новый экземпляр Video, вы можете обновить глобальную переменную. Что-то вроде:

total_views += video.views

или

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

Это довольно простой и простой подход, не зная ничего о вашей кодовой базе. Теоретически, вы должны быть в состоянии полностью избавиться от цикла for, если только вы не хотите сравнить выбранное число видео друг с другом.

0 голосов
/ 26 апреля 2018

Для меня это хороший случай для фрейма данных 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 для поиска вещей. Я не сделал слишком много с этим, хотя, так что может быть лучший способ.

...