Рубрики
Без рубрики

Наконец получил ответ на долгосрочный вопрос – сколько раз я смотрел шоу на Netflix

Я подпишусь на Netflix уже почти 10 лет. Конечно, у меня есть мои любимые серии и фильмы Tha … Помечено Github, Python, Dataanalysis, Datavisualization.

Я подпишусь на Netflix уже почти 10 лет. Конечно, у меня есть мои любимые серии и фильмы, которые я неоднократно наблюдаю, особенно перед сном. С этим я пришел запомнить много сцен, особенно от друзей, Brooklyn 99 и современной семьи. Я всегда задавался вопросом, сколько раз я смотрел шоу, но Netflix никогда не дал мне этот ответ. До настоящего времени.

Несколько дней назад я узнал, что можно было скачать все мои данные из Netlix , который включал мою историю просмотра. Как следует из названия, история просмотра имеет журналы для всех вещей, которые вы смотрите на Netflix со временем, продолжительностью сеанса, заголовок контента и многое другое. Итак, это было просто вопрос манипулирования данными мало, и я наконец-то имел ответ на вопрос, у меня на некоторое время.

Прямой (и скучный) ответ

Мой первый подход был довольно простым, используя все мои знания от Excel, создавая некоторые формулы для фильтрации и суммирования часов. Через несколько минут я получил свой ответ, и к моему удивлению, я узнал, что смотрел друзей почти в 20 раз!

Я получил свой ответ, но давайте быть искренним, сколько веселья – маленькая клетка на Excel? Было так много, я все еще мог сделать, а также сделать это красивым. Это была также отличная возможность написать немного питона и играть с D3 то, что я хотел сделать на некоторое время. Я часто чувствую необходимость и возможность использовать D3, но не знакомись с ним.

TL; DR;

Если вы не хотите читать детали, вы можете пойти прямо к этому Пример страницы , чтобы увидеть формат отчета. Или к этому Страница Github проекта Где вы можете вилочную/загрузку и использовать на своих собственных данных.

Данные

Я ни в коем случае не специалист по анализу данных или визуализации данных. Тем не менее, я знаю, что первый шаг в работе на наборе данных – это понять, и это то, что я сделал. Наряду с информацией Netflix дает доступную с вашей учетной записи, есть также табличный лист, который содержит всю документацию для всех данных, которые вы получите. Это сделало очень легко понять все поля в файле CSV активности просмотра. Вот решающая информация от нее w.r.t. этот проект:

Profile Name: the name of the profile in which viewing occurred
Duration: the length of the viewing session
Title: the TV show or movie viewed
Supplemental Video Type: Videos other than a TV show or a movie (such as trailers)

Для моего анализа я хотел игнорировать все записи, где «Дополнительный тип видео» имел значение: различные видео, такие как прицепы, рекапитации и т. Д.

Название Регулировка и экстракция

От проверки данных я мог видеть, что смогу бы также сломать названия, чтобы восстановиться в случае телешоу, что было шоу, сезон и эпизод. Вот несколько примеров названий нескольких записей:

Brooklyn Nine-Nine: Season 6: The Honeypot (Episode 7)
The IT Crowd: Series 3: Tramps Like Us (Episode 3)
Chilling Adventures of Sabrina: Part 1: Chapter Eleven: A Midwinter's Tale (Episode 11)
Skins: Vol. 2: Tony and Maxxie (Episode 1)

Как видите, хотя между именами сезонов существует не так много согласованности, с одним регулярным выражением, я мог бы захватить название серии, сезон, а также имя эпизода. Это может потерпеть неудачу для некоторых языков/шоу, но оно работало довольно хорошо в моих данных как эвристика. Мне пришлось добавить несколько переводов, потому что у моих данных были записи как на английском, так и в бразильском португальском. Regexp выглядит как:

r'(.*): (Season|Part|Vol\.|Series|Chapter|Temporada|Parte|Universo|Capítulo) ([ a-zA-Záéíê\d]*( Remix)*): (.*)'

Продолжительность

Чтобы облегчить мою жизнь, я решил преобразовать все продолжительность в формате « HH: MM: SS », до единых целых секунд. Это позволяет мне суммировать все длительности, не заботясь об формате. Позже в потоке я мог просто преобразовать от секунды до более удобного пользователя.

# 0:01:05 -> 65
def durationTimeToSeconds(duration):
    try:
        [hour, minutes, seconds] = duration.split(':')
        return int(hour)*3600 + int(minutes)*60 + int(seconds)
    except:
        return 0

# 65 -> 00:01::05
def secondsToDurantion(seconds):
    hours = math.floor(seconds/3600)
    remainingSeconds = seconds - (hours*3600)
    minutes = math.floor(remainingSeconds/60)
    remainingSeconds = remainingSeconds - (minutes*60)
    return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, remainingSeconds)

Обработка данных

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

Мой скрипт начинается с обработки информации CSV, фильтруя данные, которые я не хочу (в этом случае, только игнорируйте прицепы и конкретные виды видео), и создавая массив с конкретной информацией, которую я хочу, а также доступные профили в моем счету. Из этого я сломаю его на два набора данных, фильмов и серии. В основном, что я делаю, это подводят сумму баланса для всех вхождений одинаковой записи в каждом профиле.

Ну, на данный момент я делаю много для петлей и множество IFS, а в конце концов, у меня есть данные в формате:

# for movies
{
    'profile 1': {
        'movie 1' : 3974,
        'movie 2' : 3412,
        'movie 3' : 3974
    },
    'profile 2': {
        'movie 1' : 3974,
        'movie 4' : 3780,
        'movie 5' : 2629
    }
}

# for tv-shows
{
    'profile 1':
    {
        "serie 1": {
            'season 1': {
                'episode 1': 241,
                'episode 2': 3552
            },
            'season 2': {
                'episode 1': 241,
                'episode 2': 3552,
                'episode 3': 3512
            }
        }
    }
}

Просмотр данных

Моя цель состояла в том, чтобы создать HTML-страницу, где я мог видеть данные и взаимодействовать с различными типами визуализации. Но я не хотел писать струны в Python, который позже будет записан в файл. По моему опыту это может сделать скрипт довольно большим и запутанным, поэтому я решил использовать Jinja , «Современный и дизайнерский язык шаблонов для Python, смоделированный после шаблонов Джанго».

Для использования Jinja вы в основном создаете шаблон, который в моем случае является HTML-файлом, и, в местах, которые вы хотите включить конкретную информацию, вы звоните оказывать Передача данных для замены/добавления. Что-то вроде:

loader = jinja2.FileSystemLoader('template.html')
env = jinja2.Environment(loader=loader)
with open('output.html', 'w') as output:
    output.write(env.get_template('').render(variableToReplace=values))

Стол

Чтобы начать, я хотел простую таблицу со всеми данными. Это помогло мне лучше понять данные, посмотрим, что я делаю не так, особенно вокруг извлечения информации с телешоу. С Jinja это было довольно легко. В моем файле шаблона HTML я создал таблицу и добавил теги Jinja:


        {% for item in watched_table %}
        
        {% endfor %}
    
Profile Movie Type Watched time (HH:MM:SS)
{{item.profile}} {{item.title}} {{item.type}} {{item.total_time}}

Jinja принимает массив и способен выполнять итерацию на полях. Все, что мне нужно было сделать, это создать объект в формате Ожидаемый (с профилем, заголовка, тип, Total_seconds и Total_time) и Boom! Стол был построен как ожидалось.

Визуализация

Я хотел что-то вроде Cureemap для визуализации, позволяя мне увидеть информацию на разных уровнях (пользователь, фильмы/серии, сезон и т. Д.). Проверка примеров на странице D3, я думал, что Осветимый Sunburst был отличный вариант. Позже я пришел, чтобы найти Осветимый Sunburst с этикетками , что было почти идеально.

Для тех, которые не знакомы, D3.js – это библиотека JavaScript для манипулирования документами на основе данных, помогая вам приносить данные в жизнь, используя HTML, SVG и CSS. Страница примера имеет много красивых визуализаций, и это зрение для больных глаз!

Во всяком случае, я смог использовать в значительной степени тот же код, что и в примере, только изменение нескольких вещей на этикетках и названиях. Самая сложная часть здесь фактически генерировала файл в ожидаемом формате для D3. (Я не буду в подробности, но вы можете найти их в сценарии на Github ).

Я был поражен тем, что даже у меня было довольно много записей (почти 40 тысяч), D3 сгенерировал изображение SVG в небольшом времени. Использование, однако, не самый гладкий, довольно отзывчивый.

С этим я закончил свой первый этап для страницы анализа, и вы можете увидеть пример (с реальными данными) в Эта страница Отказ

Будущая работа

Во время работы я заметил, что многое можно улучшить. В основном новые визуализации могут быть добавлены, борьба с частями доступных данных, но я еще не работал.

Последние мысли

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

Я рассмотрю работать над этим немного больше, улучшая визуализацию и облегчая использование сценария (возможно, опубликовать его как ноутбук?). Если у вас есть какие-либо предложения или возникли проблемы с скриптом, вы можете найти меня на Twitter Отказ

Оригинал: “https://dev.to/thamara/finally-got-an-answer-to-a-long-lasting-question-how-many-times-i-watched-a-show-on-netflix-1i6e”