文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

本文通過文本的挖掘,對人們在冠狀病毒鎖定期間正在做什麼以及他們的感覺進行的探索性和情感分析


文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?


隨著越來越多的國家宣佈在全國範圍內關閉,大多數人被要求留在家裡隔離。 我們來看看國外的人們在此“關閉”期間如何度過時間以及感覺如何,所以我分析了本文中的一些推文,看看國外友人到底都幹什麼。

數據獲取和預處理

對於數據集,我使用txxxR庫從推提取了20,000條帶有“ #quarantine”和“ #stayhome”主題標籤的推文。

將數據導入R後,我們需要對推文進行預處理並將其標記化為單詞(令牌)以進行分析。

<code>tweet_words %
select(id,
screenName,
text,
created) %>%
mutate(created_date = as.POSIXct(created, format="%m/%d/%Y %H")) %>%
mutate(text = replace_non_ascii(text, replacement = "", remove.nonconverted = TRUE)) %>%
mutate(text = str_replace_all(text, regex("@\\\\w+"),"" )) %>%
mutate(text = str_replace_all(text, regex("[[:punct:]]"),"" )) %>%
mutate(text = str_replace_all(text, regex("http\\\\w+"),"" )) %>%
unnest_tokens(word, text)/<code>

從數據集中刪除常見詞和停用詞

在對數據集進行標記和預處理之後,我們需要刪除對分析無用的停用詞,例如“ for”,“ the”,“ an”等。

<code>#Remove stop words
my_stop_words word = c(
"https","t.co","rt","amp","rstats","gt",
"cent","aaya","ia","aayaa","aayaaaayaa","aaaya"
),
lexicon = "txxxxr"
)#Prepare stop words tibble
all_stop_words %
bind_rows(my_stop_words)#Remove numbers
suppressWarnings({
no_numbers %
filter(is.na(as.numeric(word)))
})#Anti-join the stop words and tweets tibbles
no_stop_words %
anti_join(all_stop_words, by = "word")/<code>

我們還可以使用以下代碼進行快速檢查,以查看從數據集中刪除了多少個停用詞:

<code>tibble(total_words = nrow(tweet_words),
after_cleanup = nrow(no_stop_words)
)/<code>

結果所示如下:

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

右邊的數字(155,940)是刪除停用詞後剩餘的令牌數。

現在我們的數據清洗已經完成了,可以進行處理了

詞頻分析

進行文本挖掘的常用方法是查看單詞頻率。 首先,讓我們看看推文中一些最常用的詞。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

前五個詞是:

<code> 隔離-出現13358次
Covid19 –出現1628次
冠狀病毒-出現了1566次
天-出現1200次
家-出現了1122次/<code>

顯然,隔離與冠狀病毒/ COVID-19的狀況有關,人們為了避免暴露於這種病毒而留在家裡。

<code>#Unigram word cloud
no_stop_words %>%
count(word) %>%
with(wordcloud(word, n, max.words = 100, random.order = FALSE,scale=c(4,0.7),
colors=brewer.pal(8, "Dark2"),random.color = TRUE))/<code>

最常見的正面和負面詞

獲得單詞頻率後,我們可以使用“ NRC”詞典為每個單詞分配一個標籤(正或負)。 然後,我們可以創建標記到標籤的詞雲。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

詞雲展示中,我們知道在隔離期間大多數人感到壓力和無聊。 但從好的方面來看,我們還了解到人們正在發出友善的信息,告訴其他人保持安全和健康。

<code>#Positive and negative terms word cloud
no_stop_words %>%
inner_join(get_sentiments("bing"), by = c("word" = "word")) %>%
count(word, sentiment, sort = TRUE) %>%
acast(word ~ sentiment, value.var = "n", fill = 0) %>%
comparison.cloud(colors = brewer.pal(2, "Dark2"),
max.words = 100)/<code>

情感分析

情感分析可幫助我們從文本數據中識別表達的文本和觀點。 它有助於我們瞭解人們對特定主題的態度和感受。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

提取推文的情感排名

當人們擔心冠狀病毒時,我們大多數人仍然保持積極態度。 令人驚訝的是,與否定詞相比,人們在隔離期間發佈了更多肯定的詞。

<code>#Sentiment ranking
nrc_words %
inner_join(get_sentiments("nrc"), by = "word")sentiments_rank %
group_by(sentiment) %>%
tally %>%
arrange(desc(n))#ggplot
sentiments_rank %>%
#count(sentiment, sort = TRUE) %>%
#filter(n > 700) %>%
mutate(sentiment = reorder(sentiment, n)) %>%
ggplot(aes(sentiment, n)) +
geom_col(fill = "mediumturquoise") +
xlab(NULL) +
coord_flip() +
ggtitle("Sentiment Ranking") +
geom_text(aes(x = sentiment, label = n), vjust = 0, hjust = -0.3, size = 3)/<code>

情感內省-弄清人們的情感

通過使用“ NRC”詞典,我們還可以將單詞標記為八種類型的情感以及正面和負面的詞語。


文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?


分配標籤後,我們可以對情緒進行分組並生成一個單詞頻率圖表,如下圖所示。 另請注意,可以在多個情感標籤下找到某些術語,例如音樂和金錢。

基於上述情感標籤的一些見解:

<code> 在此期間,人們正在努力爭取金錢,(沒有)生日,音樂和藝術品
人們在談論政府:國會與協議/<code>
<code>#Ten types of emotion chart
tweets_sentiment %
inner_join(get_sentiments("nrc"), by = c("word" = "word"))tweets_sentiment %>%
count(word, sentiment, sort = TRUE)#ggplot
tweets_sentiment %>%
# Count by word and sentiment
count(word, sentiment) %>%
# Group by sentiment
group_by(sentiment) %>%
# Take the top 10 words for each sentiment
top_n(10) %>%
ungroup() %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~ sentiment, scales = "free") +
coord_flip() +
ggtitle("Word frequency based on emotion")/<code>

可視化單詞關係

進行文本挖掘時,單詞關係的可視化很重要。 通過將單詞排列到“網絡”圖中,我們可以看到單詞在數據集中如何相互連接。

首先,我們需要將數據集標記為雙字(兩個字)。 然後,我們可以將單詞排列到連接的節點的組合中以進行可視化。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

“隔離”數據集的網絡圖

<code>#Tokenize the dataset into bigrams
tweets_bigrams %
select(id,
# screenName,
text,
created) %>%
mutate(created_date = as.POSIXct(created, format="%m/%d/%Y %H")) %>%

mutate(text = replace_non_ascii(text, replacement = "", remove.nonconverted = TRUE)) %>%
mutate(text = str_replace_all(text, regex("@\\\\w+"),"" )) %>%
mutate(text = str_replace_all(text, regex("[[:punct:]]"),"" )) %>%
mutate(text = str_replace_all(text, regex("http\\\\w+"),"" )) %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2)#Separate the bigrams into unigrams
bigrams_separated %
separate(bigram, c("word1", "word2"), sep = " ")#Remove stop words
bigrams_filtered %
filter(!word1 %in% all_stop_words$word) %>%
filter(!word2 %in% all_stop_words$word)#Combine bigrams together
bigrams_united %
unite(bigram, word1, word2, sep = " ")/<code>

來自網絡圖的一些有趣的見解:

<code> 人們在隔離期間在推上寫日記
在檢疫期間,人們會聽李·摩根(Lee Morgan)的爵士音樂
在檢疫期間,Jojo的現場表演越來越受歡迎
自我隔離是與Covid-19對抗的一種方式,人們對健康技巧和消除壓力的技巧很感興趣/<code>

單詞相關性分析—那麼人們對社交距離的感覺如何?

隔離或遠離社交可能會在情感上帶來挑戰,我想進一步瞭解人們在此期間的感受。

單詞相關性使我們能夠研究一對單詞在數據集中一起出現的常見程度。 它使我們對特定單詞及其與其他單詞的關聯有了更多的瞭解。

通過詞雲,我們知道“壓力”和“無聊”經常出現在我們的數據集中。 因此,我提取了三個單詞:“無聊”,“重音”,“卡住”以查看其單詞相關性。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

隔離期間,待在家裡期間感覺的單詞相關性

從“無聊”,“壓力”和“卡住”的單詞相關性中得出的見解:

<code> 人們在感到無聊時會使用TikTok(抖音的海外版)和遊戲來消磨時間
乏味幾乎可以概括大多數人在2020年的生活
造成壓力,人們正在網上尋找減輕壓力的提示

人們在家中“被困”時在Netflix上觀看恐怖電影/連續劇/<code>

單詞相關性分析—那麼人們在家做什麼呢?

為了瞭解人們在此居家和隔離期間在家裡做什麼,以度過自己的時間,我提取了三個詞:“玩耍”,“閱讀”和“觀看”,以獲取更多見解。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

隔離期間,待在家裡期間所採取措施的單詞相關性

從“玩耍”,“閱讀”和“觀看”的詞相關性中得出的見解:

<code> 大多數人可能會通過玩遊戲,看電影和視頻來度過自己的時間
人們花時間閱讀他們的孩子
人們在此期間也終於有時間閱讀/<code>

單詞相關性分析-生日,金錢和社區…

情感標籤圖表中經常出現三個單詞,分別是“生日”,“社區”和“金錢”。 因此,我研究了該詞與其他術語的相關性。

文本挖掘實戰:看看國外人們在病毒隔離期間都在家裡做什麼?

從“生日”,“社區”和“金錢”一詞的相關性得出的見解:

<code> 生日聚會被取消。 取而代之的是,人們在推上表達自己的願望
人們同意金錢並不能阻止我們感染該病毒的觀點/<code>

結論

我們能夠深入瞭解人們在此冠狀病毒關閉期間的感受以及他們在做什麼,同時仍然遵循社會隔離規則。

我們提取的一些主要見解包括:

<code> 人們在冠狀病毒情況下感到壓力重重,但仍保持積極態度
在此居家和隔離期間,Tiktok和Netflix被廣泛使用
人們將更多的時間花在與孩子,藝術,音樂和電影上/<code>

最後:以上主要基於對數據科學和機器學習的研究。 我們不是衛生專業人員,因此本文的觀點不應解釋為專業建議。


分享到:


相關文章: