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


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ファイルがダウンロードできます。名称未設定-1

コードの実行

コードを実行すると、読み込む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] >= 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で公開されているものもあります。ぜひ試してください。
Abstract


少しでも、あなたのウェブ解析が楽になりますように!!
もし、不明点がありましたらこちらからお問い合わせください。

スポンサードリンク

おすすめコンテンツ


スポンサードリンク