Парсинг Twitter 'KKN Desa Penari' с использованием R
Table Of Content
- Анализ текста Twitter с использованием R (Часть 1)
- Получение ключа API Twitter
- Установка пакетов
- Подключение к API ключу Twitter
- Подключение к API ключу Twitter
- Получение данных из твитов Twitter
- Парсинг твитов
- Сохранение данных после парсинга
- Очистка данных
- Очистка
- Удаление стоп-слов
- Просмотр частоты слов
- Облако слов
Анализ текста 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, которая будет рассказывать о Оценке текста на основе этих твитов, чтобы мы могли определить, является ли мнение автора позитивным или негативным.
Приятного чтения :)