CoderCastrov logo
CoderCastrov
Наука о данных

Как ведет себя TrendTopics в Twitter? (1) - Контекст

Как ведет себя TrendTopics в Twitter? (1) - Контекст
просмотров
6 мин чтение
#Наука о данных

Эта статья является частью трилогии текстов, представляющих мою научно-исследовательскую работу по data science:

1- Контекст,

2- Код, обработка и общий обзор данных

3- Создание панели инструментов и исследование данных


Идея моей второй исследовательской работы по науке о данных возникла из наблюдения за тем, как программы телевидения любят создавать и распространять хэштеги во время эфира.

Понимание бизнеса

При этом первоочередной целью является общение с аудиторией, которая смотрит передачу. Второстепенной целью является попадание хэштега в тренды и привлечение внимания других людей к программе.

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

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

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

Что я искал бы?

Думая о возможных связях и характере данных, я задался несколькими вопросами, на которые хотел бы получить ответы:

  • Какая программа наиболее активно взаимодействует с аудиторией в Twitter?
  • Какая тема наиболее популярна?
  • В рамках этой темы, есть ли какой-то представитель, который выделяется по количеству твитов?
  • Какова связь этого с днем недели или временем суток?
  • Какой день недели и время суток наиболее активны в Twitter?

Конечно, у меня были свои предположения по этим вопросам. Эти предположения полностью были подвержены субъективным предпочтениям и не имели никаких оснований.

Для меня среда вечером и воскресенье днем были бы наиболее активными днями из-за футбольных матчей по телевидению. В рамках этой темы, матчи Фламенго выделялись бы по количеству твитов.

С помощью данных мы увидим, что я полностью ошибся, и наиболее обсуждаемые темы далеки от футбола.

Но я уже знал, что хотя бы один из вопросов придется оставить на вторую версию: классификацию trendtopics по темам. Вопрос о том, какая тема наиболее активна в Twitter, будет отвечен на этапе исследовательского анализа. Но, безусловно, это станет намного интереснее с автоматическим классификатором. (Проект 3 вперед?)


Цели обучения

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

  • Парсинг данных из Twitter через API
  • Парсинг HTML-страниц для получения телепрограммы
  • Обработка извлеченных данных
  • Исследование данных для попытки ответить на вопросы
  • Создание панели управления
  • Симуляция развертывания в производственной среде

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

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

Разработка проекта

Скрипт для сбора данных

Первым шагом было получение данных из Twitter.

Это оказалось довольно просто, так как API уже предоставляла нужную информацию. Я создал скрипт на Python для получения и сохранения списка трендовых тем и их количества.

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

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

Я решил начать с программ, показываемых на сайте каналов Globo (https://globoplay.globo.com/programacao/), так как здесь было много интересующих меня каналов. Я начал пытаться сделать веб-скрапинг, искать элементы по html-тегам, id и css-классам, которые я нашел на странице. Я потратил несколько дней на просмотр видео и чтение учебников, потому что мой код не возвращал ожидаемые данные, которые я мог найти с помощью инструментов разработчика Chrome.

После множества попыток я понял по ответу от вызова URL, что это была асинхронная страница. Данные, которые я действительно хотел получить, не находились по адресу, который я вызывал, а получались из внутренних вызовов страницы.

Мне пришлось искать различные альтернативы, которые не появляются в видеоуроках по этой теме, доступных на YouTube или платных курсах. Знание Ajax и асинхронных вызовов, полученное мной во время работы PHP-разработчиком, оказалось фундаментальным.

В этот момент я понял, что мне понадобится использовать библиотеку Selenium в Python, чтобы сделать внутренний вызов и действительно получить полный HTML-код страницы с программами и временем их показа. Но эта таблица тоже не была полной. У нее была вертикальная полоса прокрутки, которая позволяла просматривать только программы снизу с интерактивностью. Поэтому мне пришлось отправлять команды "page down" для таблицы, чтобы получить доступ и сохранить программу всех каналов.

Запуск скриптов 24/7

После разработки алгоритмов и их запуска на моем компьютере, я искал способы запустить их на сервере, работающем 24 часа в сутки. И вот возникла "нерабочая задача". Как это сделать?

Лучшим вариантом, который я нашел, был бесплатный сервер на AWS с 1 ГБ оперативной памяти и 30 ГБ дискового пространства. Проблем с дисковым пространством не возникло, так как информация, записываемая скриптами, представляет собой текстовые файлы с небольшим количеством строк. Кроме того, я мог бы периодически удалять файлы.

Проблема была с оперативной памятью. Скрипт для Twitter работал хорошо, но скрипт для парсинга телевизионных программ не выполнялся. Проблема заключалась в том, что библиотека Selenium должна открывать Chrome для выполнения. С всего 1 ГБ оперативной памяти это было невозможно.

Изменение планов

Из-за ограничений на сервере я решил узнать стоимость простого сервера с как минимум 4 ГБ оперативной памяти, чтобы была возможность выполнить парсинг. К сожалению, я не нашел ничего доступного.

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

Чтобы продолжать учиться и показывать что-то интересное, я начал изучать продвижение и представление данных с помощью storytelling, дашбордов и презентаций. Сначала я подумал о создании чего-то в PowerBI, но не смог опубликовать из-за необходимости лицензии на сервер. После небольшого исследования я обнаружил Streamlit, фреймворк для создания дашбордов и приложений с использованием Python (https://www.streamlit.io/). И, чтобы завершить, они размещают приложения просто интегрируясь с моим GitHub. Это решает одно из моих желаний - имитацию развертывания в производственной среде.

Заключение

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

Я смог создать свои первые парсеры и использовал новую библиотеку и фреймворк.

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

Помимо технических навыков, этот процесс также был очень познавательным. Умение искать информацию по интересующим вопросам существенно повышает производительность. Это может показаться простым вопросом, но на самом деле это не так.

В следующей статье я расскажу о коде и обработке данных.