CoderCastrov logo
CoderCastrov
Анализ данных

Как ведет себя TrendTopics в Twitter? (2) - Код, обработка и общий обзор данных

Как ведет себя TrendTopics в Twitter? (2) - Код, обработка и общий обзор данных
просмотров
6 мин чтение
#Анализ данных

Эта статья является частью трилогии текстов, представляющих мой проект по изучению datascience:

1- Контекст,

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

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


Введение

Ссылка на Контекст

Парсинг Twitter

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

Код является непрерывным выполнением, которое делает вызовы API каждые 5 минут и сохраняет результат в файл CSV.

Код: trendtopicsTXT.py

Веб-скрапинг телепрограммы

Скрипт также выполняется непрерывно, но в этом случае каждые 15 минут. HTML-теги извлекаются с помощью Beautiful Soup, а информация записывается в текстовый файл. После получения данных о первых показанных каналах производится прокрутка страницы вниз, чтобы загрузить и получить данные о всех каналах.

Разработка этого кода принесла больше вызовов и потребовала больше изучения. Особенно из-за проблемы "у меня на машине работает". Помните, я рассказывал, что использовал бесплатный сервер AWS с 1 ГБ, чтобы запустить скрипты? Мне потребовалось время, чтобы понять, что проблема выполнения на сервере заключалась в том, что мне приходилось работать с Chrome с таким ограниченным объемом ресурсов. Я даже попробовал Firefox, но это тоже не сработало. Еще одна попытка заключалась в том, чтобы убедиться, что скрипт Twitter не выполняется одновременно с парсером, чтобы ресурсы были выделены, но безуспешно.

Поэтому я вынужден был отказаться от работы с телепрограммой, по крайней мере пока.

Код: Scrap2Chrome.py

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

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

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

Для данных из Twitter требовалась большая обработка.

На данный момент в сырых данных содержится 1 025 657 строк.

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

Произведенные преобразования следующие:

  1. В первую очередь было стандартизировано использование хэштегов, удалив символ # и приведя все к верхнему регистру. Это позволило объединить одинаковые трендовые темы, которые отображались отдельно как хэштеги или слова в твитах.

  2. Затем были созданы столбцы в фрейме данных для представления времени, идентификатора дня недели, названия дня недели и даты без времени. Я сделал это для упрощения последующей обработки группировки и отображения информации на графиках.

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

Результат:

  1. Сбор данных о трендовых темах происходил каждые 5 минут. Я не проверял результаты каждого запроса, но заметил ошибки в некоторых из них из-за проблем с подключением и ошибок ответа от API. Это могло повлиять на анализ, так как оно могло повлиять на общее количество упоминаний хэштега.

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

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

  1. На данный момент обработка данных привела к почти 90 000 записей о хэштегах, количестве и времени запроса, охватывающих 27.10.2020 - 17.02.2021.

Другие анализы

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

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

Я сгенерировал подстроки, посчитал количество каждой из них, но количество записей оказалось очень большим. Было бы необходимо отфильтровать мусор и смешанные значения: NOVE могло происходить от NOVEMBRO, NOVENA или NOVELA.

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

Знакомство с данными

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

Обнаружение выбросов

Сбор данных начался в конце октября. Мне потребовалось около 30 дней, чтобы получить графики, по которым я уже мог что-то проанализировать. При анализе количества событий по дням недели один конкретный день недели сильно выделялся по сравнению с другими. Первое впечатление было, что в сборе или обработке данных произошла ошибка. Чтобы найти ошибку, я проанализировал открытые данные и понял, что это было связано с влиянием выборов в США 3 ноября 2020 года. Несмотря на то, что я запрашивал хэштеги из Бразилии, выборы 2020 года в США также вызвали большой резонанс здесь.

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


Обзор данных

Весь период

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

Среднее количество по дням недели

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

Среднее количество по часам дня

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

Тепловая карта дня недели и часа дня

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

Notebook с кодом преобразований и создания CSV-файла, который будет использоваться в dashboard. (AnaliseTT)**

Заключение

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

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

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

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

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