Latest update on 2018年3月7日 (水) at 15:42:47.
【第1169回】 R研究集会2015(2015年12月5日)
- 立川には7:00頃到着。駅ビルのパン主体の軽食店で朝食を食べながら仕上げ作業。終わらなかったが9:00を過ぎたので統数研へ。
- R研究集会は予定通り10:00スタート。以下メモ(内容は中澤が聞き取った範囲なので間違っていたらごめんなさい)。
- (1) 今朝リリースされたR AnalyticFlow version 3の話(ef-prime鈴木さん)。4ペインのGUI操作できるRのフロントエンド。データプレビューから実際に読む→「結果が見える」設計なので,head()とかprint()とかsummary()をしなくてもいい(それらはボタンになっているので簡単に実行できるが)。フローへはドラッグドロップでノードができる。テキストファイルの読み込みはファイルビューアで選択して開くだけ。ファイル形式は自動判定される(指定することもできる)。オプションは選ぶだけでなく,自分で追加できる(ファインチューニング)。今回の特徴は,Rの知識がなくても,統計解析の知識があれば使えるようにしたこと。Rの知識があればファインチューニング可能。Javaで開発したので(Oracle Java 8 JDKが必要)いろいろなOSで使えて多言語対応している。社内で実際に運用してきたものなのである程度安定しているはず。カスタムUI機能でこんなモジュール作ってみました(生存時間解析など歓迎),という場合はお知らせいただけると有り難い。それがオープンソースの強みでは。詳細は"R AnalyticFlow"で検索(バージョン3のファーストガイドがあった)。(質疑)Windows環境でJavaは32bitでも64bitでも大丈夫。forループを書くためのツールもある。グラフィックのinteractiveな操作は未実装。でもRのパッケージは全部使えるので大丈夫。dplyr,data.table,ggplot2を使っていないのは生成されるコードの可読性のため。subsetでdata.frameにしている。
- (2) 岡田さんによるRとIoT (Internet of Things=モノのインターネット)。岡田さんは7月からuminに異動。マイコン機器(Raspberry Piのようなものも含む)によって自動計測されたデータをRで処理するという話。機械自体がWiFiやBluetooth,3Gなどの機能をもったことが大きい。Rはシングルスレッドなので,基本的にリアルタイム処理は苦手。ネットワーク経由で少しずつデータが入ってくるのも苦手。普通は他の方法で蓄積したデータを解析するがShinyでやりたい。IoT機器がどのように通信するかを考える。いったんマイコンでデータを受けてから,BT+スマホ,WiFi,3Gなどでネットにデータを流す。httpで通信するものもあるがマイコンでは扱いにくい。MQTTというプロトコルがIoT機器ではよく使われる。データフォーマットはXMLは重いのでJSONがよく使われている。行単位の情報送信が多いのでcsvも見掛けない。MQTT Broker自体はストレージ機能が無い。mongoDBなどのKey-Valueストアにそのまま流す。mongoDBに蓄積したデータをRから読むのが初級。Rから直接MQTT Brokerにsubscribeして送られてきたデータを読むのが中級。ここまでは成功。Rで直接ハードウェアアクセスする上級編はまだできていない。mongoliteパッケージを利用。mongoDBのクエリsort={"$natural":-1}を使って最新X件のデータだけ取り出している。データフレームへの変換も自動。GPS位置情報,気温・気圧などの測定値をリアルタイムで送信してShinyで自動的にグラフが更新されるようにでいている。施錠・解錠とか,LEDの点灯数を変えるとか(モバイルルータ経由で)もできる。Shinyで表示するには若干のTipsがある。reactiveValues()とかreactivePoll()を使う。後者がミリ秒単位でポーリング間隔を指定。本当のリアルタイムでやりたければシリアル通信。
- (3)は自分の発表(今年夏にやった集中講義の一部の紹介)。semの結果でAGFIが出てないとか中途半端で申し訳ありませんでした(追記:AGFIが出るコードを含む改良版プレゼンpdf……といってもまだ不十分……をアップロードしました)。尺度構成における得点について丁寧な検証が必要ではないか(リッカート尺度のままの場合と標準化した上で分散を最大化する場合と別のスコアを割り当てる場合で大きな違いが出る事例はないのか? など)というコメントをいただいた。時間を見付けてやってみなければ。
- (4) 谷村さんによる「RとTikZを組み合わせたインフォグラフィック」。地域住民にわかりやすくデータを提示するためにRはどこまでできるか。国際助産師の日のインフォグラフィックの例。Rの機能だけで。(A)新聞に掲載されているグラフをRで再現する。背景はストライプ,xlabやyabはない。タイトルがグラフに入り込むなどコンパクト化。まずストライプを描画する関数を作成。backrect関数を定義し,panel.firstを使おうと思ったがbarplotではうまくいかないので,先にbackrectを描いてからbarplotをadd=TRUEで描画。他にもいろいろ工夫する。heisei.l関数で軸ラベルに平成年号,speech.baloon関数で吹き出しを付けた。できたものはフォントが弱いのが弱点。フォントの追加が面倒で,基本的に1つのfamily。(B)新聞記事の主要国の論文数。国別データであること,ノーベル賞のメダル画像で学術研究関連のデータであることが一目でわかる。CSVで主要国の論文数データをダウンロード(2009年まで)。メダル画像の読み込みはlibrary(png)のreadPNG("",TRUE)で読み,rasterImage()で貼り付ける。これをpanel.firstの引数に使えば背景に載せられる。matplot()はpanel.firstに非対応なので,まずplot()で1つの国だけ描画し,matlines()で他国を重ね描き。影付のラベルを描画するための関数も作った。ぼかしが必要なドロップシャドウはRだけでは難しい(gridSVGパッケージを使えば可能)。単に位置をずらした灰色のボックスを下に敷いた。ImageMagickを使うとちゃんとしたドロップシャドウも簡単に作れる。Rからsystem()を使ってラベル画像を作り,readPNGで読み込む手もある。文字のレイアウトが難しい。Rで再現すると折り返しも自動化はできない。そこでTikZを(tikZDeviceパッケージ,options(tikzDefaultEngine="luatex")で)使う。Beamerとの相性は抜群(開発者が同じなので)。tikz()でTeXファイルを吐いてスライドに読み込むだけ。図をTeXにすればpdfの命令を埋め込むことができる。pdfliteralを追加してサイズ,色,白抜きなども可能。ただしtikz()はラスター画像に対応していない。Rグラフィックの中でメダルを背景に貼り付けてもTeXファイルに変換できない。(C)日本人の男女別平均寿命の推移。元データは西暦なのでlibrary(Nippon)のjyear()を使って和暦に変換。X軸はcexで●の大きさを変えてプロット。次にTikZコードを編集し,\node at (120, 60) {\ includegraphics[width=15mm]{agedmale.png}};のようにする。吹き出しも簡単。本文中からの矢印で参照といったこともTikZなら可能。TikZで世界が広がるが,本格的なインフォグラフィクスはドローソフトに任せるのが順当。(質疑)版下作りのときフォントはpdfよりもcairoやquartzの方がずいぶんマシ。Rの中からpdf内部で吹き出しなどの解釈が可能なコードを出せると便利というコメントがあったが,現状ではTeXにしてから弄るしかないとのこと。
- 昼休みは往路で買ってきた握り飯を食べ,コーヒーを飲んだ。いろいろな知人とゆっくり喋れた。
- (5) 探索的データ解析におけるR,Python,Juliaの比較。トヨタIT開発センターの福島さん(クルマ関係のデータマイニングが本業)。『データ分析プロセス』『データサイエンティスト養成読本』の著者。近々『R言語徹底解説』が共立出版から出る。Hadley Wickham渾身の本の訳。Wonderful Rシリーズが共立から新シリーズとして出る予定(『データ解析のためのR・Python・Julia入門』というのも出る予定だそうなので,その著者が福島さんなのか? Juliaの伝道師と呼ばれる方と共同執筆とのこと)。Juliaは今のところMatlab代替な感じ。データ解析ソフトの動向で,KDnuggetsアンケート(2015年5月)の結果によるとRが1位,Pythonは4位。従来はSASやSPSSと比較されてきたが,今回はPython,Juliaという言語処理系と比較する。Rは7000を超えるパッケージ,強力なグラフィクス機能など,統計解析のデファクトスタンダードといえる。Pythonは1991年開発。PyDataと呼ばれるデータ解析環境のコミュニティも強力。ライブラリも多数ある。JuliaはMITのJeff Bezanson氏を中心として開発されている科学計算のソフトウェア。LLVMによるJITコンパイラによる科学技術計算の高速化が期待されている。洗練された言語仕様。なぜ作ったか? の答えはIn short, because we are greedyとのこと。データの読み込みはどの言語も大差ない(PythonとJuliaは外部ライブラリを使うが簡単)。要約統計量はRのsummary()ほど賢くない。bankというオブジェクトに対して,Pythonのbank.describeやJuliaのdescribe(bank)は不十分。層別集計はPythonとRは手間は大差ないが,Pythonの出力は見にくい。Juliaはaggregate関数でできるが出力が見にくい。相関係数は簡単。多変量連関図は,RではGGalleyパッケージのggpairsが素晴らしい。Pythonはできるがカテゴリ対応が今ひとつ。Juliaでは多変量連関図は自分でフルスクラッチビルドが必要。まだまだ探索的データ解析に関してはRはPythonやJuliaよりずっと多機能。ただし,速度に関していえば,MCMCのGibbs samplingの同じ処理をするコードを3つの処理系で作って比べてみると,Rでは0.03〜0.04秒,Rcppでは100倍くらい高速化される。Pythonでは0.02秒弱。JuliaではRcppの倍くらいの時間に収まる。Dynamic Time Warpingの例では,Rが250マイクロ秒程度。Rcppでは約5マイクロ秒。Pythonが約1250マイクロ秒,Juliaは130マイクロ秒程度。速度はRcpp最強。フルスクラッチでアルゴリズムを書きたい人にはJuliaは良い。(質疑)deep learningはPythonではあるけれどもRには見当たらない。deep learningの入出力をRでというのはh2oパッケージくらいしかない。既にPythonでのインターフェースが主流になっているから,今後もRにそのようなインターフェースが増えてくる見込みはあまりなさそう。(質疑2)最適化の信頼性とかはどうか。一応,PythonやJuliaにもパッケージはあるが,今後の検討課題。(質疑3)Rにおけるfactorのような型は? Pythonのpandasパッケージに名義変数や順序変数という型は提供される。Juliaは型はあるけれどもカテゴリは鬼門。モデル内で自動的にダミー変数に展開するような機能はない。
- (6) なかまさんのパッケージRhpcの状況。ここ最近増えた機能の説明。Rhpcは,元々Rをスーパーコンピュータで使うベンチマークだった。RhpcBLASctlは一部で人気。データ採取のための最低限の機能として,Rhpc_worker_call及びRhpc_lapplyを実装。スーパーコンピュータ上では,通常SPMD。でもなかまさんがSPMDを嫌いなのでapply系で並列処理。スーパーコンピュータなのでMPIを選択(MPIが入っていないスーパーコンピュータはない)。ワーカープロセスはEmbedding Rで作成(libR必須)。Windows版も始めた(Rユーザの9割がWindowsなので)。Rhpc基本関数はこれまでと同じ。MPIの初期化と終了処理及びコミュニケータに関するRhpc_initializeとかAplly系のRhpc_lapplyとか,ワーカー上の乱数の初期化の関数とか。Rhpc_applyとかRhpc_sapplyもラッパーとして実装した。parallel::ClusterExport(MPI)では8ノードでsnowの2.7倍の速度がでた。定期的にGCがかかるため,その時間が大きい。MPIよりRhpcは遥かに速い。ロードバランシングなしだと激速。foreign MPIとしては,FortranやCの外部MPIプログラムは。Fortranや.Cで呼び出す。データの受け渡しにいろいろ工夫が必要らしいが,たぶん自分でこの関係のコードを書かないとよくわからないな。MS-MPIは最新はバージョン7で1週間くらい前に出たばかり。MS-MPI v5 SDK以降のデフォルトパスには括弧が含まれ,64bit版ではdefファイルを用いてリンクする必要がある。MPIの実効だけならSDKは不要。Rhpcはソースからビルド可能なように,いずれのMS-MPIでもできるようになっている。Windows上では,mpiexec.exeを使うがオプション引数が複雑なのでバッチファイルを書いたとのこと。もっと良い並列化技術が必要。
- (7) Rを利用した災害情報の収集と解析・可視化(山本義郎先生と院生)。『Rによるデータマイニング入門』がやっと出た。これから始めようという人にお勧めの入門書とのこと。東海大学の地域連携活動として減災に取り組んでいて,災害情報処理を始めた。DITSの開発・活用→To-Collabo。本年の防災週間にはTwitter社がTwitterを活用した防災訓練の実施を全自治体に呼びかけ,何十もの自治体が参加した。例えば和光市では災害用ハッシュタグ基準が定められている。ほとんどのTwitterユーザはGPS機能をオフにしているのが困ったところ。そこで災害情報tweetのためのDITSというアプリをスマホ用に作った。Web-GISイメージなど(東京23区でYahooのウェブサービスを使って実現した)。Googleマップへの可視化。plotGoogleMapパッケージを使用し,座標系は平面直角座標系(たぶん緯度経度でも使える)。データはcsvで読む。EPSGコードを指定するところで緯度経度を入れれば良さそうなものだが,今のところエラーが出てしまってうまくいかない。平塚市と伊勢崎市で例示。平塚市の公開データ世帯数,総人口,等々。位置参照情報は国土交通省の「GPSホームページ」CSV形式による街区レベル位置参照情報と大字・町丁目レベルデータを取得。オープンデータは大字・町丁目単位で集計されることが多いので,大字・町丁目レベル位置参照情報と結合したcsvファイルを作った。これをdata <- read.csv("", header=TRUE)で読み,plotGoogleMaps(data, zcol="総人口", ...)で地図を表示。mapTypeIdでいろいろなプロットができる。bubbleSP()ではバブルをプロット,iconlabels()で数字とアルファベットは表示できる。Windowsでは日本語は文字化けする(文字コードをutf8にしてもダメか?)。男女別人口を円グラフでプロットした例。複数の可視化を1つの地図にまとめることもできる。基本的にadd=TRUEしたプロットをオブジェクトに付値し,それをpreviousMaps=で参照してプロットする。Rとtwitterの連携は,twitteRパッケージとROAuthパッケージを使用。streamRパッケージでtweetを取得。JSON形式で,取得実行中のtweetのみを取得できる。filterStream()関数。オプションでtrack=iconv("検索語", "CP932", "UTF-8")指定で取得できたが,3ヶ月くらい前からできなくなってしまった。ジオタグが付いていないtweetは,Google Geocoding APIを使ってツイート中の住所を緯度経度に変換した(アクセス制限が1日2,500件)。これも今現在はうまく動作しなくなっている。座標系番号は位置参照情報から取得。和光市での実証実験のとき,RMeCabで地名を抽出して分析したが,川崎市,町田市のつぶやきが入ってしまうと変なグラフになるので,それを外して対応分析して可視化した。(質疑)谷村さんの本に書かれている方法で中継させると直角座標系への変換はエラーにならないはず,とのこと。災害情報の標準化の動きはまだ不十分。
- (8) Rによるデータ視覚化のための動的グラフの利活用。久保田さん。インターラクティブに操作できるものということ。manipulate,ggvis,iplots,rCharts,plotly,gridSVG,googleVis,shinyを使って,自殺統計の表示を例にしてやってみる。難易度はmanipulateが簡単だが,RStudioの中でしか呼べない。公開はRPubsなどに出すと静止画になってしまう。スライダーやピックを組合せることもできる。複雑なことは難しい。自殺の地域統計をNipponパッケージでコロプレス図にしたい場合に,年の選択をインタラクティブにしたいとして,manipulateで呼べるのは1つの関数だから,複数の処理を1つの関数にしなくてはいけない(まあ,function()で関数定義するだけだから大した手間では無いと思うが)。分割を変えたいとかになると,それも引数に入れた関数を作らねばならない。ggvisはggplot2に慣れた人には良さそう(結局対話操作にはshinyを使うが)。iplotsはJavaベース。平行座標プロットやモザイクプロットなどで複数のグラフをリンクできる。plotlyは最近できた便利なパッケージで公開できる(注:ただ,plotlyパッケージをインストールしてみたら,plotly()で呼び出せるインターフェースは既にdepricatedでggplotly()推奨となっていた。gridグラフィックスになってしまったが,exampleでコメントで表示される例にでてきた最初の2行をやってみたら,確かに簡単に動作した)。shinyがもっと便利。複雑なインターフェースが簡単に定義できるし公開も簡単なのでお勧め。
- 30分休憩。
- (9) 徳島大学の服部さん。元々音声認識と認知科学をやっていた。オランダにおけるヒッチハイカーのマインドについて。自己紹介としては,R fanaticでStackOverflow好き,猫好き,GIS好き(注:しかし,それ以上に英語の発音が素晴らしいのが印象的だった)。ヒッチハイカーのデータがHitchwikiに転がっていた。元自衛隊員の旅人から教えて貰った。2006年11月オープン。2015年12月3日現在,22680のデータ点が存在。一ヶ月に1000くらいのペースでデータが増えている。最近ポーランドのデータが増えた。ダウンロードできるデータの形式はKML形式。データの前処理が大変だった。StackOverflowで情報検索したら,layer nameがわからないと読めないという返事とカスタム関数を書けという返事があった。headerを見たらlayerらしきものがあって試したが読めなかった。そこでreadLinesで全部読んでパタン検索することにした。enc2utf8()とiconv()で多言語を統一しgrep()とna.lock()で分割し,stringiパッケージの関数を使ってlapplyでデータ抽出。stringiパッケージは高速で便利(しかも日付オブジェクトも操作可能)。悪戦苦闘してオランダのヒッチハイクデータを抽出した。ヨーロッパ全土のデータから20kmメッシュにして,どこでヒッチハイクが多いかを地図に示した。他の国では大都市周辺で多いが,オランダは国全体で多い(合法だし)。国としてはフランス,ドイツ,オランダの順。都市名を抽出し(GADMのlevel2で,最も長い形式で),ヒッチハイカーのコメントとともに抽出し,コメントが書かれた場所からコメントに出てきた都市までの距離をdistN1()で計算。これを地図に載せると,アムステルダムやユトレヒトを起点としたネットワークができていることがわかる。比較的近いところから入ってくる線が多い。Gronigenだけは特殊。オランダでは近くの町を考えながらヒッチハイクをしているらしい。町の名前がウムラウトの処理など悩ましいところ。ドイツ語を母語としない人の書き込みではウムラウトが使われていなかったり。networkVisで視覚化というのを今後やりたい,とのこと。(質疑)名前の揺らぎの解決は?→結局は自分でコードを書くしかないかも。鉄道網との関連は?→まだやっていないが,マップに載せれば見られるはず。なお,stationという単語は出てくるがgas stationであることが多いし,bus stopの方が関連高い。
- (10) 徳島大学石田先生。「API(周り)の話」という予定演題だったが,「Rとオープンデータ」に変更。専門はテキストマイニング。新米探偵の本も書いたのでR本が増殖した。Hadley Wickhamの本の原著は『Advanced R』。訳書は現在校正中。とても良い本とのこと。オープンデータとは自由に使えて再利用でき,誰でも再配布できるようなデータのこと。決まりはクレジットを残すことと同じ条件で配布すること。電子政府総合窓口にも,コンピュータ処理に適した形式の必要性が書かれている。「5★オープンデータ」の話。★pdf,jpg;★★xls, doc;★★★csv, xml,★★★★RDF, XML;★★★★★Linked RDFとのこと。利用者側の気持ちとしては,データの取得から加工,要約,作図まで自動化させて欲しい。四国八十八ヶ所の札所は日本語サイトでは一覧表がないが,USAのwikiにあるので,rvestを使って抽出できてLeafletで地図にも表示できた。しかし日本のオープンデータも増えてきていて,LinkDATAはRのAPIまで提供されている。SPARQLというパッケージを使うとRDFが読めるが,国会図書館のサイトはXMLからだとUTF16を返してきたりするが,xml2パッケージを使うとutf8に自動変換してくれる。rvestは便利で,LinuxやMacOSならOK。しかし,WindowsはCP932なので化ける。ダッシュの代わりに全角マイナスが使われているとかも切れる。一般ユーザはWindowsが多いので対応しなくてはいけないのが悩みの種。とくにHadley WickhamのパッケージはCP932と相性悪い。WEBスクレイピングをするには,Jsonとrlistは相性が良い。ただ生のAPIを弄るのは面倒。Amazonはタイムスタンプ込みで認証符号化しているが良いパッケージが多数ある。dichika/NHKGなどなど「盆栽日記」に多数のAPIを弄るパッケージが公開されている,とのこと。特定のSNSターゲットのAPIは今後増えてくるだろう。TwitterはtwitteRなど便利だが,Windowsの場合文字コード変換が鬼門。何度も変換する必要がある。
- (11) 東京医科歯科大学樋口先生による「Bioconductor update」。2011年に第2版が出た本以降のアップデートについて,主観に満ちた自分自身のためのまとめ,とのこと。Bioconductorはバイオインフォマティクス研究の支援環境提供。AMIやdockerイメージでも提供されている。サンプルコードにパイプ演算子が使われている。生物はゲノム=DNA→RNA→タンパクが原則で,オミクス解析はそれぞれの層ごとに違うターゲット。最近はRNA干渉とかSNIP多型とか翻訳後就職とか新しい知見も。Bioconductor version 3.2 Software (1104)にはたくさんのパッケージが入っている。AssayDomain,BiologicalQuestion,Infrastructure,ResearchField,StatisticalMethod,Technology,WorkflowStepなど。それぞれ既にdockerのイメージとして提供されていて,それを使って解析できたりするとのこと。データもいろいろ含まれている。大幅な機能向上。大量のマイクロアレイデータの正規化(oligoパッケージ),次世代シークエンサー関連ツール(Rsamtools,Rbamtoolsなど),大規模解析(ffとcrlmmでCNVコピー数変異の解析とか→コピー数の増減とがん発症には密接な関係がある),さまざまなデータベースがRの形式で提供されているとか,最新のツール(ゲノム編集によるRNS設計のCRISPRseekとか,AtlasRDFとか)も使えるとか利点が大きい。dockerによるBioconductorの利用としては,Rstudio経由とかコマンドライン版Rを使うなどの使い方がある。以降は「個人として」の発表(危ない話?)。Updateといえば第3版。いまさら? という感じもあったが,アップデートも必要かと。(中略)ブログや口頭での評価はいろいろ(hoxo_m氏から中途半端とお叱りを受けたので直接謝ったという話は面白かった)。第3版を書くとしたらRの基礎は書かなくて良いだろう。ただしケーススタディとしてデータフレーム操作やスクレイピングによる情報付加は効果的かもしれない(dplyrやrvest)。もう少し理論的背景の開設にも踏み込みたい。問題は育児が忙しくて(?!)時間が取れないこと。(質疑)cranとbioconductorの並立状態について,bioconductorにしか入っていないパッケージはどれくらいある?→未整理だがそのうちまとめたい(?)。
- 最後に総合討論があって,今後のこの研究集会の方向性についてなど議論して幕となった。
- 急いで渋谷に向かい,ソフトボール部OB総会に出て東京都リーグ2部昇格を祝ってから,22:40頃までソフトボール部同期のI君とマイアミ(昔のイメージと全然違うオシャレな店になっていた)で喋って(つきあってくれてありがとう>I君)マークシティのバス乗り場へ。若干遅れて着いたバスに乗ったらすぐに眠ってしまった。
△Read/Write COMMENTS
▼前【1168】(いろいろな仕事をしてから夜行バスで東京へ(2015年12月4日)
) ▲次【1170】(日曜も締め切りすぎの仕事(2015年12月6日)
) ●Top
Notice to cite or link here | [TOP PAGE]