疑惑
《
如何用VOSviewer分析CNKI資料?》一文釋出後,有同學問我:
王老師,我有個問題,我用cnki導出關鍵詞後,想統計關鍵詞的詞頻,我應該用什麼樣的工具?如果不利用citespace和python,做出excel那種的統計表格,該怎麼做呢?
這個問題,我覺得很有意思。統計關鍵詞的詞頻,确實也用不到Citespace。
那我們就來試試看,怎麼做才好。
資料
首先檢索文獻。我這裡檢索的是2017年知網收錄的“競争情報”相關的論文。一共154篇。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIDOwQ2N5YTN2UDZhJjZyMjNjlDZwcDNlJzMyQGOzQWNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
image
下面就是手動全選,翻幾頁,選完全部。
然後導出文獻。
預設的格式顯然不符合我們的要求,因為根本不包含關鍵詞。我們可以選擇“自定義”。
注意前面幾項内容,是無法不勾選的。我們因為要分析關鍵詞,是以勾選關鍵詞項。
好了,我們用xls格式導出。
注意在macOS下面,導出後的Excel檔案打開的時候會報錯,忽略即可。
經檢驗,資料完整。但是我們最好重新儲存成為新的xlsx檔案,以便于後續正常使用。我們另存為檔案名cnki.xlsx。
注意這裡的關鍵詞列,可以看到關鍵詞之間用兩個分号來分割。有的文章關鍵詞多,有的關鍵詞少。我們要統計關鍵詞詞頻,就得處理這種格式問題。
分析
因為讀者要求,不可以用Citespace,也不許用Python。Excel的程式設計我又不會,怎麼辦呢?
後來一想,幹脆用R好了。
打開RStudio環境。
建立一個RMarkdown檔案。清除全部正文内容。正式開始我們的分析過程。
首先,設定時區。
Sys.setenv(TZ="Asia/Shanghai")
然後設定工作目錄。請根據你的具體情況,更改為自己的工作目錄。
setwd("/Users/wsy/coaching/term-frequency-cnki/")
下面載入幾個必要的軟體包。
library(tidyverse)
library(readxl)
library(tidytext)
讀入我們的Excel檔案。
df <- read_excel("cnki.xlsx")
我們隻需要其中的兩列資料,分别是标題和關鍵詞。
df1 <- df %>%
select(starts_with('Keyword'), starts_with('Title'))
因為原先的Excel裡面列名中英文混合,這裡我們修改為英文名稱,便于後續使用。
colnames(df1) <- c('keyword', 'title')
然後我們就需要對關鍵詞這一列進行處理了。我們拆分一下,把關鍵詞拆分,每一行保留一個關鍵詞。
df1 %>%
unnest_tokens(word, keyword, token = stringr::str_split, pattern = ";;")
結果如下:
## # A tibble: 524 x 2
## title word
## <chr> <chr>
## 1 基于内容分析法的企業競争情報研究 内容分析法
## 2 基于内容分析法的企業競争情報研究 企業競争情報
## 3 基于内容分析法的企業競争情報研究 應用
## 4 淺談智庫運作機制對優化競争情報循環的啟示 智庫
## 5 淺談智庫運作機制對優化競争情報循環的啟示 運作機制
## 6 淺談智庫運作機制對優化競争情報循環的啟示 競争情報
## 7 可視化分析視角下的國内競争情報發展演進 競争情報
## 8 可視化分析視角下的國内競争情報發展演進 戰略行為
## 9 可視化分析視角下的國内競争情報發展演進 研究熱點
## 10 可視化分析視角下的國内競争情報發展演進 發展趨勢
## # ... with 514 more rows
這樣看着就清晰多了,是不是?
下面我們需要設定停用詞。畢竟我們搜尋的主題詞是競争情報,這裡再統計“競争情報”沒有意義。是以我們需要在停用詞表裡過濾掉它。
我們先看看系統預設的停用詞表是什麼樣子的?
data(stop_words)
stop_words
## # A tibble: 1,149 x 2
## word lexicon
## <chr> <chr>
## 1 a SMART
## 2 a's SMART
## 3 able SMART
## 4 about SMART
## 5 above SMART
## 6 according SMART
## 7 accordingly SMART
## 8 across SMART
## 9 actually SMART
## 10 after SMART
## # ... with 1,139 more rows
哦,原來是個資料框,那我們仿照這個樣子,也設定自己的停用詞表。
my_stop_words_list = c('競争情報')
my_lexicon_list = c('UNKNOWN')
my_stop_words = data.frame(my_stop_words_list, my_lexicon_list, stringsAsFactors=FALSE)
colnames(my_stop_words) <- c('word', 'lexicon')
my_stop_words
這一段裡面,我們先建立兩個向量,分别是停用詞和詞典。因為我們不涉及詞典的屬性設定,是以統一設定為UNKOWN。
顯示的結果,停用詞表是個資料框,裡面隻有一個停用詞——“競争情報”。
## word lexicon
## 1 競争情報 UNKNOWN
下面我們把剛才的内容串起來,先拆關鍵詞,然後停用詞過濾,最後統計停用詞詞頻,并且排序:
df1 %>%
unnest_tokens(word, keyword, token = stringr::str_split, pattern = ";;") %>%
anti_join(my_stop_words) %>%
count(word, sort = TRUE)
## Joining, by = "word"
## # A tibble: 362 x 2
## word n
## <chr> <int>
## 1 大資料 17
## 2 企業競争情報 9
## 3 企業 8
## 4 情報學 7
## 5 産業競争情報 6
## 6 反競争情報 6
## 7 研究熱點 6
## 8 情報服務 5
## 9 情報需求 4
## 10 知識圖譜 4
## # ... with 352 more rows
看來今年的競争情報研究文獻裡,最突出的關鍵詞是“大資料”。
然後我們嘗試用ggplot可視化一下,隻看那些出現3次以上的關鍵詞統計結果:
df1 %>%
unnest_tokens(word, keyword, token = stringr::str_split, pattern = ";;") %>%
anti_join(my_stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 3) %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n)) +
geom_col() +
xlab(NULL) +
coord_flip()
## Joining, by = "word"
結果令我們很不滿,因為關鍵詞顯示都是方框。
别着急,這種情況,是因為系統預設使用的字型不能識别漢字。隻要告訴ggplot一聲,讓它使用漢字字型,例如黑體,就可以了。
df1 %>%
unnest_tokens(word, keyword, token = stringr::str_split, pattern = ";;") %>%
anti_join(my_stop_words) %>%
count(word, sort = TRUE) %>%
filter(n > 3) %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n)) +
geom_col() +
xlab(NULL) +
coord_flip() +
theme(text=element_text(family="SimHei"))
## Joining, by = "word"
這次看着就舒服多了,不是嗎?
讨論
讀過本文之後,你有什麼心得要分享給大家嗎?有沒有不同的意見或看法?歡迎留言,記錄下你的思考,我們一起交流讨論。
如果你對我的文章感興趣,歡迎點贊,并且微信關注和置頂我的公衆号“玉樹芝蘭”(nkwangshuyi)。
如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微網誌或朋友圈分享給他們。讓他們一起參與到我們的讨論中來。