天天看點

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

疑惑

如何用VOSviewer分析CNKI資料?

》一文釋出後,有同學問我:

王老師,我有個問題,我用cnki導出關鍵詞後,想統計關鍵詞的詞頻,我應該用什麼樣的工具?如果不利用citespace和python,做出excel那種的統計表格,該怎麼做呢?

這個問題,我覺得很有意思。統計關鍵詞的詞頻,确實也用不到Citespace。

那我們就來試試看,怎麼做才好。

資料

首先檢索文獻。我這裡檢索的是2017年知網收錄的“競争情報”相關的論文。一共154篇。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

image

下面就是手動全選,翻幾頁,選完全部。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

然後導出文獻。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

預設的格式顯然不符合我們的要求,因為根本不包含關鍵詞。我們可以選擇“自定義”。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

注意前面幾項内容,是無法不勾選的。我們因為要分析關鍵詞,是以勾選關鍵詞項。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

好了,我們用xls格式導出。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

注意在macOS下面,導出後的Excel檔案打開的時候會報錯,忽略即可。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

經檢驗,資料完整。但是我們最好重新儲存成為新的xlsx檔案,以便于後續正常使用。我們另存為檔案名cnki.xlsx。

注意這裡的關鍵詞列,可以看到關鍵詞之間用兩個分号來分割。有的文章關鍵詞多,有的關鍵詞少。我們要統計關鍵詞詞頻,就得處理這種格式問題。

分析

因為讀者要求,不可以用Citespace,也不許用Python。Excel的程式設計我又不會,怎麼辦呢?

後來一想,幹脆用R好了。

打開RStudio環境。

如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

建立一個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"
           
如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

結果令我們很不滿,因為關鍵詞顯示都是方框。

别着急,這種情況,是因為系統預設使用的字型不能識别漢字。隻要告訴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"
           
如何用R分析CNKI文獻關鍵詞詞頻?疑惑資料分析讨論延伸閱讀

這次看着就舒服多了,不是嗎?

讨論

讀過本文之後,你有什麼心得要分享給大家嗎?有沒有不同的意見或看法?歡迎留言,記錄下你的思考,我們一起交流讨論。

如果你對我的文章感興趣,歡迎點贊,并且微信關注和置頂我的公衆号“玉樹芝蘭”(nkwangshuyi)。

如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微網誌或朋友圈分享給他們。讓他們一起參與到我們的讨論中來。

延伸閱讀

如何用《玉樹芝蘭》入門資料科學? 資料科學相關文章合集(玉樹芝蘭)

繼續閱讀