CoderCastrov logo
CoderCastrov
R

Парсинг Twitter 'KKN Desa Penari' с использованием R

Парсинг Twitter 'KKN Desa Penari' с использованием R
просмотров
4 мин чтение
#R

Анализ текста Twitter с использованием R (Часть 1)

Это часть 1 анализа текста Twitter

Привет, друзья!

Вы уже прочитали твиттер-тред "KKN Desa Penari", который был очень популярен в конце августа 2019 года? Если еще не прочитали, то сначала прочтите твиттер-тред. История рассказывается с двух точек зрения - Види и Нур. Многие СМИ уже сообщили об этой истории, вызвав много мнений и предположений от "благородных" пользователей интернета. Даже группа подростков отправилась в деревню, которую считали "деревней танцовщиц", но автор истории уже объяснил, что эта деревня не является "деревней танцовщиц". Конечно, есть мнения, как положительные, так и отрицательные, относительно этой истории, включая "твиттер-пользователей". Поэтому я попытаюсь провести небольшой простой анализ мнений "твиттер-пользователей" по этому треду.

Тред Види

Тред Нур

В Части 1 я собираюсь собрать данные из твиттера. Здесь под "сбором данных из твиттера" я понимаю скачивание твитов, написанных "твиттер-пользователями", здесь я собираюсь скачать твиты, содержащие "KKN Desa Penari". В Части 2 я проведу анализ текста, который будет включать оценку твитов как положительных или отрицательных. Давайте сразу перейдем к Части 1, используя R!

Получение ключа API Twitter

Для анализа данных с использованием R нам необходимо получить ключ API Twitter. Для этого нужно войти в https://apps.twitter.com и создать приложение. После завершения процесса создания приложения будет отображен ваш ключ API Twitter.

Если у вас уже есть ключ API Twitter, то давайте начнем анализ с использованием R.

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

Давайте установим необходимые пакеты для парсинга Twitter.

install.packages(“SnowballC”)
install.packages(“tm”)
install.packages(“twitteR”)
install.packages(“syuzhet”)
install.packages(“wordcloud2”)
library(SnowballC)
library(tm)
library(twitteR)
library(syuzhet)
library(wordcloud2)

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

Подключение к API ключу Twitter

Затем мы подключаемся к API ключу Twitter с помощью следующего кода:

# Подключение к API ключу Twitter
api_key="XXXXX"
api_secret="XXXXX"
access_token="XXXXX"
access_secret="XXXXX"
setup_twitter_oauth(api_key,api_secret,access_token,access_secret)

В коде выше замените XXXXX на свой собственный API ключ, который вы получили на предыдущем шаге.

Получение данных из твитов Twitter

# Парсинг твитов
tweet <- searchTwitter(“kkn desa penari”, n=10000, resultType = “recent”)
tweet.df <- twListToDF(tweet)
View(tweet.df)
tweet_text<-tweet.df$text
head(tweet_text[1:10])

Мы получаем твиты, связанные с "kkn desa penari", с максимальным количеством выборок для анализа в размере 10 000 твитов с типом "recent", то есть самых новых. "tweet.df" преобразует полученные данные в формат данных data-frame. Данные, полученные из "tweet.df", имеют несколько переменных, таких как сообщение, дата публикации, количество ретвитов и т. д. Поскольку мы будем анализировать только содержание сообщений, мы используем "tweet_text".

Сохранение данных после парсинга

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

write.csv(tweet.df, "D://kkndesapenari_ALL.csv")
write.csv(tweet_text, "D://kkndesapenari_Text.csv")

Я сохраняю их в директории "D://" с именами файлов "kkndesapenari_ALL" и "kkndesapenari_Text".

Очистка данных

Как я уже объяснил ранее, мы будем анализировать только часть сообщений, поэтому мы будем использовать "tweet_text".

# Очистка
tweet.Corpus <- Corpus(VectorSource(tweet_text))
cleaning <- content_transformer(function (x, pattern) gsub(pattern, " ", x))
tweetc <- tm_map(tweet.Corpus, cleaning, "http.*") # удаляем "http..."
tweetc <- tm_map(tweetc, cleaning, "#.*") # удаляем "#..."
tweetc <- tm_map(tweetc, cleaning, "@\\w+") # удаляем "имя пользователя или @"
tweetc <- tm_map(tweetc, cleaning, "RT") # удаляем "RT"
tweetc <- tm_map(tweetc, removePunctuation) # удаляем знаки препинания
tweetc <- tm_map(tweetc, cleaning, "[[:digit:]]") # удаляем цифры
tweetc <- tm_map(tweetc, tolower)
inspect(tweetc[1:10])

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

# Удаление стоп-слов
file_stop <- file("D://R/Twitter/id.stopwords.csv", open = "r")
id_stopwords <- readLines(file_stop)
id_stopwords = c(id_stopwords, "amp")
tweetc <- tm_map(tweetc, removeWords, id_stopwords)
tweetc <- tm_map(tweetc, removeWords, c('kkn','desa','penari','thread','versi'))
tweetc <- tm_map(tweetc, stripWhitespace)
inspect(tweetc[1:10])

Ошибка при выполнении кода? Конечно, будет ошибка. Перед тем, как запустить код выше, вам нужно сначала скачать файл "id.stopwords" здесь** **и укажите правильный путь к файлу в вашей директории. Кстати, в этой ссылке также есть еще 2 файла, загрузите все файлы из этой ссылки, так как они будут использоваться на следующем этапе в ЧАСТЬ 2.

dataframe <- data.frame(text = unlist(sapply(tweetc, `[`)), stringsAsFactors = F)
View(dataframe)
write.csv(dataframe, "D://kkndesapenari_Clean.csv")

Затем я сохраняю очищенные данные и называю их "kkndesapenari_Clean".

Просмотр частоты слов

После завершения очистки текста мы хотим посмотреть частоту слов во всех твитах (10 000 твитов).

#Частота слов
tdm <- TermDocumentMatrix(tweetc)
a <- as.matrix(tdm)
b <- sort(rowSums(a),decreasing=TRUE)
c <- data.frame(word = names(v),freq=v)
head(c,5)

Таким образом, мы получим частоту каждого слова. Для сообщений, связанных с "kkn desa penari", слово "hilang" встречается 2300 раз в твитах, "widya" встречается 1903 раза и т.д. Приведенный выше пример показывает только 5 слов с наибольшим количеством слов, вы можете отобразить их столько, сколько вам нужно.

Облако слов

#облакослов
облакослов2(c, shape = "облако",
 backgroundColor = "черный",
 color = 'случайный-свет', size = 0.5)

Код выше приведет к следующему результату:

облакослов

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

Вот и все, небольшое объяснение о том, как парсить данные из Twitter. Кстати, это ЧАСТЬ 1, еще есть ЧАСТЬ 2, которая будет рассказывать о Оценке текста на основе этих твитов, чтобы мы могли определить, является ли мнение автора позитивным или негативным.

ЧИТАТЬ ЧАСТЬ 2

Приятного чтения :)