Rで解析:便利!Rで読み込むxmlファイル

Rの解析に役に立つ記事

PubMedは文献検索サイトで検索結果をxmlで出力できます。xmlはRで編集が可能なので、PubMed検索結果のxmlから論文タイトルとアブストラクトを読み込み、タグプロットと単語の出現数をまとめたcsvを出力するコードを作成しました。なお、PubMed以外のxmlファイルでもRで操作が可能なので参考例としてご覧ください。


スポンサーリンク
スポンサーリンク

解析の前準備

パッケージの導入

  • XMLファイルの操作に必要な”XML”
  • 英語のテキストマイニングに必要な”tm”
  • タグクラウドに必要な”wordcloud”
  • 色の設定に必要な”RColorBrewer”

*パッケージの一括導入は下記コードで可能です。

install.packages(c("XML", "tm", "wordcloud", "RColorBrewer"))

なお、install.packages(パッケージ名)にすることで個別にインストールができます。

xmlファイルのダウンロード

  1. PubMedにアクセスする。http://www.ncbi.nlm.nih.gov/pubmed
  2. 検索する。
  3. 検索結果の右上に表示されるSend toをクリックしFile→FormatをxmlとしCreate Filを押す。そうすると、xmlファイルがダウンロードできます。

コードの実行

コードを実行すると、読み込むxmlファイルと保存先フォルダの確認があります。結果は保存先フォルダに、論文タイトルとアブストラクトそれぞれの単語出現数をまとめたcsvファイルとタグプロットが出力されます。詳細はコードにコメントを記述していますのでご確認ください。

###ライブラリーの読み込み#####
library("tcltk")
library("XML")
library("tm")
library("wordcloud")
library("RColorBrewer")
########

###タグクラウドのテキストの色を設定#####
Col <- brewer.pal(8, "Dark2") #文字色の指定
########

###プロットする単語の出現数設定。"論文タイトル", "アブストラクト"の設定です。以上での抽出結果となります。#####
WordFreq <- c(5, 15)
########

###データの読み込み#####
selectAXlm <- paste(as.character(tkgetOpenFile(title = "xmlファイルを選択",filetypes = '{"xmlファイル" {".xml"}}',initialfile = "*.xml")), sep = "", collapse =" ")
MasterAnaData <- xmlInternalTreeParse(selectAXlm)
########

###結果保存先のフォルダを設定#####
SaveDir <- as.data.frame(paste(as.character(tkchooseDirectory(title = "データ保存フォルダを選択"), sep = "", collapse =" "))) #初期dirpathの取得準備
SaveDir <- paste(SaveDir[1:(nrow(SaveDir)),], sep = " ", collapse = "/" ) #保存pathの取得
setwd(SaveDir)
########

###xmlファイルから論文タイトルとアブストラクトを抽出#####
###xmlの操作は要素名を抽出し、その値をまとめることが多いと思います。多くはxpathSApply()で補えると思います。多くの要望があればxmlライブラリのコマンドをまとめようかなと思います。#####

Title <- as.data.frame(xpathSApply(MasterAnaData, "//ArticleTitle", xmlValue)) #論文タイトルの抽出
Abstract <-as.data.frame(xpathSApply(MasterAnaData, "//AbstractText", xmlValue)) #アブストラクトの抽出
########

AnaList <- c("Title", "Abstract") #抽出するデータ名により変更

for(i in seq(AnaList)){
  
  ###テキストマイニングの設定、お好みに合わせてください#####
  CorMaster <- Corpus(DataframeSource(eval(parse(text = AnaList[i])))) #コーパスの作成
  CorMaster <- tm_map(CorMaster, stripWhitespace) #空白の削除
  CorMaster <- tm_map(CorMaster, removeNumbers) #数字の削除
  CorMaster <- tm_map(CorMaster, removePunctuation) #句読点の削除
  CorMaster <- tm_map(CorMaster, removeWords, stopwords("english")) #and, or等の削除
  TermVec <- DocumentTermMatrix(CorMaster) #タームマトリックスの集計
  ########
  
  ###単語解析結果をデータフレーム化#####
  AnalyticsAllWords <- as.data.frame(apply(TermVec, 2, sum)) #単語の出現率を集計
  AnalyticsAllWords <- cbind(rownames(AnalyticsAllWords), AnalyticsAllWords)
  AnalyticsAllWords <- subset(AnalyticsAllWords, !(AnalyticsAllWords[, 1] %in% c("chlorella", "the", "this", "can", "thus", "these")) )#除去したい単語を設定
  AnalyticsAllWords <- AnalyticsAllWords[sort.list(AnalyticsAllWords[, 2], decreasing=TRUE),] #出現数を降順で並び替え
  AnalyticsWords <- subset(AnalyticsAllWords, AnalyticsAllWords[, 2] &gt;= WordFreq[i]) #指定した数以上で抽出
  colnames(AnalyticsAllWords) <- c("単語", "出現数") #行名の設定
  ########
  
  png(paste(AnaList[i], ".png", seq = ""), width = 1280, height = 800) #plotをpngで保存
  ###タグクラウドのプロット#####
  wordcloud(AnalyticsWords[, 1], AnalyticsWords[, 2], scale=c(8,.2),
            random.order = FALSE, rot.per = .15, colors = Col)
  ########
  dev.off()
  
  write.csv(AnalyticsAllWords, paste(AnaList[i], "_結果.csv", seq = ""), row.names = FALSE) #結果をcsvで保存
}

出力結果

図のようなタグクラウドとcsvファイルが保存先に指定したフォルダに出力されます。補足ですが、紹介したコードでは出力する単語の出現数を論文タイトルは5以上, アブストラクトは15以上にしています。適時変更してください。なお、PubMed以外のxmlファイルでもRで操作が可能です。統計情報はxmlで公開されているものもあります。ぜひ試してください。


少しでも、あなたのウェブ解析が楽になりますように!!

タイトルとURLをコピーしました