Введение в текстовую аналитику, которая может повысить популярность вашей статьи

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

Twitter API

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

Установка пакетов R

Для этого проекта нам понадобятся 3 пакета R - rtweet, tidyverse и tidytext. Установите их с помощью

install.packages("package-name")

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

Сбор твитов

Чтобы получать твиты, нам сначала нужно сгенерировать токен. Мы можем сделать это с помощью функции create_token () из пакета rtweet. Аргументы можно заполнить, просмотрев информацию на странице вашего нового приложения на сайте разработчика Twitter. Все эти переменные важны для безопасности, поэтому всякий раз, когда вы используете API, обязательно принимайте меры предосторожности, сохраняя эти токены и ключи в секрете.

token <- create_token(app = "<app-name>",
  consumer_key = "<consumer-key>",
  consumer_secret = "<consumer-secret>",
  access_token = "<access-token>",
  access_secret = "<access-secret>")

Теперь собираем твиты! Используйте функцию get_timeline (), чтобы получить доступ к 3200 самым последним твитам любого общедоступного пользователя, чтобы получить больше, чем указанное в одном запросе, который вам придется заплатить.

tweets <- get_timeline("TDataScience", n=3200, token=token)

Теперь в переменной «tweets» хранится 50 столбцов данных с 3200 строками. В первую очередь нас интересуют текст столбцов, избранное_count и retweet_count, но вы можете изучить, на что еще следует обратить внимание.

Удаление нежелательных фраз

Мы также хотели бы удалить некоторые общие для этого домена вещи, в основном ссылки и дескрипторы твиттера. Мы можем использовать функцию gsub () для замены вхождений ссылок и дескрипторов чем-то еще, в нашем случае мы удаляем их, заменяя их пустыми строками. Ниже мы передаем текстовый столбец от одной функции gsub () к другой с помощью оператора конвейера, удаляя URL-адреса и дескрипторы, в конечном итоге сохраняя их в новом столбце с именем clean_text.

tweets$text %>% 
gsub("?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)", "", .) %>% 
gsub("@([A-Za-z0-9_]+)", "", .) -> tweets$clean_text

Удаление стоп-слов

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

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

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text)

Это оставляет нам таблицу ниже, в которой слова «включить», «обучение» и «операции» изначально были частью одной и той же строки в столбце clean_text.

Теперь мы выполняем анти-соединение с набором данных stop_words из пакета tidytext. Это удаляет все слова, которые являются частью как набора данных твитов, так и набора данных stop_words (по сути, это удаляет стоп-слова из ваших данных). Код для этого ниже.

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words)

Получение среднего фаворита и ретвитов

Используя функции groub_by () и summarize () из tidyverse, мы можем получить среднее количество избранных и ретвитов для каждого слова в нашем наборе данных. Я предпочитаю использовать здесь медиану, чтобы исключить влияние, которое некоторые выбросы могут иметь на наши данные.

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words) %>%
group_by(word) %>% 
summarise("Median Favorites" = median(favorite_count), 
  "Median Retweets" = median(retweet_count),
  "Count" =  n())

Фильтрация результатов

Мы хотим видеть слова, у которых больше всего фаворитов / ретвитов, чтобы проинформировать нас о том, о чем мы должны писать. Но давайте рассмотрим случай, когда слово используется только один раз. Например, если есть одна действительно популярная статья о науке о данных в применении к географии Мичигана, мы не хотим, чтобы это склоняло нас к написанию статей о Мичигане. Чтобы исправить это, я отфильтровываю все слова, которые не использовались как минимум в 4 твитах, с помощью функции filter (), а затем сортирую результаты с помощью функцииrange (). Оставляем нам последний фрагмент кода.

tweets %>% 
select(clean_text, favorite_count, retweet_count) %>%
unnest_tokens(word, clean_text) %>%
anti_join(stop_words) %>%
group_by(word) %>% 
summarise("Median Favorites" = median(favorite_count),
  "Median Retweets" = median(retweet_count), 
  "Count" =  n()) %>%
arrange(desc(`Median Favorites`)) %>%
filter(`Count` > 4)

Окончательные результаты

Итак, если вы перескакиваете до конца, чтобы увидеть результаты, или не хотите запускать этот код самостоятельно, вот результаты. Это общие слова в журнале Towards Data Science, ранжированные в зависимости от того, сколько фаворитов обычно получает твит, содержащий это слово.

  1. сайт - 84,5 избранных
  2. финансы - 72 избранное
  3. action - 66 избранное
  4. matplotlib - 59.5 избранных
  5. сюжетные - 57 избранных
  6. красивый - 55,5 избранное
  7. портфолио - 51 избранное
  8. исследовательский - 47 избранное
  9. github - 46.5 избранное
  10. всеобъемлющий - 46 избранное

Примечание: мне действительно пришлось удалить здесь слово «Джеймс», поскольку, по всей видимости, есть автор (ы), который очень популярен с этим именем. Поздравления, Джеймс!

Сейчас я бы посоветовал написать статью под названием «Всеобъемлющее руководство по созданию красивых финансовых графиков с помощью Matplotlib» или что-то в этом роде. Теперь вы можете повторить этот процесс для любого другого пользователя Twitter с общедоступной учетной записью.