対大データに徒手空拳…
DBCLS2回目。辞令を拝命(拝命でいいのかな?)。
次回までのTODO: シャチハタ用意、通勤区間・距離・手段要調査。
kazusa…
(便所先生の領域。わざわざ手を出するだけの強力なアルゴリズムは、思い当たる節が無い…。)
PubMed内でインパクトファクタ的な
- 「インパクトファクター」は通常過去2年分と当年分の間で、雑誌単位で計算するものらしい:
- みたいな。
インパクトファクターは Web of Science の収録雑誌の3年分のデータを用いて計算される。たとえばある雑誌の2004年のインパクトファクターは2002年と2003年の論文数、2004年のその雑誌の被引用回数から次のように求める。
A = 対象の雑誌が2002年に掲載した論文数
B = 対象の雑誌が2003年に掲載した論文数
C = 対象の雑誌が2002年・2003年に掲載した論文が、2004年に引用された延べ回数
C÷(A+B) = 2004年のインパクトファクター
- トムソンロイター社のロイターじゃない方が、もともと出していたものらしい。
- ついでにランキングやクラスタリングのモデルをつくってもいい
- Rを使いたいとか無謀なことを思う
ちなみにpubmed内でもつい最近まで、cites情報は、本文に次ぐ非公開情報だったらしい。
で、そのpubmedのメタデータxmlファイル群はダウンロードしないでもdbclsにある。
ただしファイル名の下3桁が617までは完全版で、以降は不備の可能性がある暫定版。
で、各xmlファイルの内容は…とか教えていただいてたら、@yag_aysさんがrubyでパースしてCSVに変換するプログラムを以前書いていたと。ラッキー。
CommentsCorrectionsのうち、refType="Cites"のものだけを取り出すようにとコメントをいただいたが、さらに、それもyagさんが書き換えにつきあって下さったのでラッキー(?)。感謝。
(あれ、おれ、なにもしてないんじゃね?)
で、とりあえず、計算が4時間かかる予定なので、とりあえず現在得られた分まででなにかやるかという。
ちなみに得られるcsvは
この論文のPMID,引用論文のPMID1,引用論文のPMID2… …
の形式。
あ、
この論文のPMID,引用論文のPMID1 この論文のPMID,引用論文のPMID2 …
にしとけばよかったかな…。
げ、もう16,395m390 Bytes = 15.6MBになっている。
が、これでもRで読み込むと結構時間がかかる。
> read.csv("Desktop/medline.csv",FALSE)
CSVの各行の長さは一定ではないので空だとNA値が入る。NAはis.na()でないと調べられない。
しかし、これを隣接行列に展開して…とか何も考えずにやると大変なことになる。(おそらく)スパースではあるが、ともかく添字がでかい。隣接行列に展開すると容量O(n^2)なので、library(bigmemory)のbig.matrixでも足りない(abortした。big.matrix()はメモリ上で非圧縮なようだ)。
つうか、これ、SQLiteとかkey-value strage(いじったことないけど)にすべき規模かもしれない。
追記: Rに未練があったので。
個人的にLLで数値計算というのはいまいち馴染めないので、Rで、SQLiteやファイルに保存しつつ処理する方法を調べた。
1. R.huge(非推奨…):
Package ‘R.huge’:
THIS PACKAGE HAS BEEN DEPRECATED. Do not start building new projects based on it. Cross-platform alternatives are the following packages: bigmemory (CRAN), ff (CRAN), BufferedMatrix (BioConductor).
2. sqlite.data.frame {SQLiteDF} / SQLite Data Frame:
http://cran.md.tsukuba.ac.jp/web/packages/RSQLite/
> install.packages("DBI") … > install.packages("SQLiteDF") … > library(SQLiteDF) 要求されたパッケージ DBI をロード中です >
3. ff: memory-efficient storage of large data on disk and fast access functions:
The ff package provides data structures that are stored on disk but behave (almost) as if they were in RAM by transparently mapping only a section (pagesize) in main memory
http://cran.md.tsukuba.ac.jp/web/packages/ff/
> install.packages("ff") also installing the dependency ‘bit’ … > library(ff) … >
4. BufferedMatrix:
http://www.bioconductor.org/packages/2.4/bioc/html/BufferedMatrix.html
全体に対してMax(X)、Min(X)、mean(X)、Sum(X)、Var(X)、Sd(X)、および行・列に対してrowSums(X)、colSums(X)ができる。ただしColMode()、RolMode()の指定があるらしい。(バッファ出し入れ操作の解説読むのがめんどくさい…。)
ちなみに、(欠番があるが)CSVデータは最終的に224.1952MBに。
$ wc medline.csv 1111089 1111089 235085725 medline.csv
この形式のまま計算できるならオンメモリでもいけるだろう。
が、行列演算に相当する計算をどうやろうか、ぱっと浮かばない…。「スパース」とか「行列圧縮」とか、いままで無視しきってやってきたツケが回ってきた感じ…。