Google RefineによるRDFデータへの変換

前のエントリーでVirtuosoのインストールについて書きました。VirtuosoをRDFストアとして使ってみるところまで書きたいのですが,その前にRDF形式のデータが必要です。そこで,このエントリーではCVS形式などのテーブルデータをGoogle RefineRDF Extension for Google Refineを使ってRDFに変換する方法について書きます。

Google Refineのインストール

Google Refineはここからダウンロードします。現行のバージョンは2.1です。


Google Refineのインストールは指示に従うだけです。インストールできたら,起動してみましょう。Webブラウザが立ち上がり,http://127.0.0.1:3333/が開かれるはずです。

[,w480]

Google Refineへのデータのロード

何か適当なプロジェクトを作成してテーブルデータをロードしてみましょう。ここでは例として次のデータを使って書きます。

都道府県 県庁所在地 人口 面積/km^2
茨城県 水戸市 268686 217.43
栃木県 宇都宮市 511973 416.84
群馬県 前橋市 339094 311.64
埼玉県 さいたま市 1228594 217.49
千葉県 千葉市 963495 272.08
東京都 新宿区 324824 18.23
神奈川県 横浜市 3692809 437.38


まず,このデータをコピーして適当な名前を付けてファイルに保存します(たとえばcapitals.tsvとします)。「Create a New Project」の「Data file:」の「Choose File」ボタンを押して,このファイルを選択します。「Project Name:」のところに自動的にファイル名が入ったと思います(上の例の場合,「capitals」になるはずです)。とりあえずこれで「Create Project」をクリックしましょう。プロジェクトのページが作成され,そのページに移動します。

[,w480]

RDF Extension for Google Refineのインストール

RDF形式のデータを扱えるようにするために,アイルランドDERI(The Digital Enterprise Research Institute)が公開しているRDF Extensionを入れます。RDF Extensionはここからダウンロードします。現行のバージョンは0.5.2 (beta)です。


RDF Extensionのインストールは,RDF Extensionを以下のディレクトリの下に置くだけです。

~/Library/Application Support/Google/Refine/extensions/

ただし,Google Refineのインストール直後では「Refine」の下に「extensions」というディレクトリは無いと思うので,自分で作ります。ここに解凍したRDF Extensionを置きます。こんな感じです。

~/Library/Application Support/Google/Refine/extensions/grefine-rdf-extension-0.5.2/

以上です。Google Refineを再起動して,先ほど作成したプロジェクトのページを見てみましょう。RDF Extensionのページに説明がありますが,画面の右上の「Extensions:」のところに「RDF▼」というメニューが新たに出来ているはずです。

[,w480]

RDFデータへの変換

RDFデータを作成するためには,この「RDF▼」メニューから「Edit RDF Skelton…」を選択し,RDFデータを設計します。その後,この画面に戻って,「RDF▼」の上あたりにある「Export▼」から「RDF as RDF/XML」もしくは「RDF as Turtle」を選ぶと,RDF形式のファイルを作成できます。詳しくはRDF Extensionのページを参考にしてください。


なお,RDFの表現方法は他にもいろいろなフォーマットがありますが,現行のバージョンのGoogle Refine(+RDF Extension)でエクスポートできるのはRDF/XML(.xml)とTurtle(.ttl)のみです。


実際にRDFデータを作ろうとすると,predicateやURIの設計でつまづくと思います。これらはとりあえず自分で適当に考えたものでも動きますが,まじめに設計するにはすでにあるものを参考にするといいようです。オライリーの『セマンティックWebプログラミング』では次の3つのページから探すことが推薦されていました。

さいごに

Google Refineはとてもいいツールだと思いますが,大量に変換する場合にはスクリプトを書くのが効率いいと思います。また,ここではテーブルデータをRDFに変換しましたが,RDBのデータをRDFへ変換するツールもいくつか公開されているようです。R2RMLなどを参照してください。

関連エントリー

VirtuosoをMac OS Xにインストール

Semantic WebだとかLinked Dataだとか,いろいろなとこから公開されているデータを自分のPC上で組み合わせることで新たな価値を創出する,そんな時代になりつつあります。しかしそのためには,それを容易にする基盤が必要です。というわけで,RDFストアとしてVirtuosoMac OS Xにインストールしたのでそのログです。なお,VirtuosoはOpen-Source EditionMac OS Xのバージョンは10.6(Snow Leopard)です。

Gawkのインストール

Virtuosoのインストールをする際にGawkGNU Awk)が必要なので,あらかじめ入れておきます。Gawkここからダウンロードします。

$ cd gawk-3.1.1
$ ./configure
$ make
$ sudo make install

ちなみに3.1.1は最新版のGawkではないのですが,これはVirtuoso(6.1.3)のREADMEファイルの「Package Dependencies」の項にGawkのバージョンとして3.1.1が記載されていたためです。これ以外のバージョンは試していません。

Virtuosoのインストール

Sesameについてはオライリーの『セマンティックWebプログラミング』に書かれていたので,Virtuosoのインストールに挑戦してみました。VirtuosoのOpen-Source Editionはここからダウンロードします。

$ cd virtuoso-opensource-6.1.3
$ ./configure
$ make
$ sudo make install

インストールなどについて詳しくは,virtuoso-opensource-6.1.3/ディレクトリにあるINSTALLやREADMEファイルを見てください。

Virtuosoの起動

インストールが終わったら,Virtuosoを起動します。

$ cd /usr/local/virtuoso-opensource/var/lib/virtuoso/db
$ sudo /usr/local/virtuoso-opensource/bin/virtuoso-t -f &

これでサーバーが起動されたので,Webブラウザhttp://localhost:8890/conductor/にアクセスするとVirtuosoが使えます(何も起こらないときは,fgを2回実行してください)。

[,w480]

さいごに

後日,テーブルデータからRDFデータへの変換,RDFデータのVirtuosoへのロード,SPARQLによる検索などについて書く予定です。

関連エントリー

PyMOLでαヘリックスをシリンダー表示

αヘリックスが目立つタンパク質を表示する場合,詳細よりも全体像を把握するためにヘリックスをざっくりとした筒(シリンダー)で表示するとすっきりすることがあります。このシリンダー表示をPyMOLで行う方法です。

PyMOL>set cartoon_cylindrical_helices, 1


[,w120] → [,w120]


ヘリックス以外の部分(βシートとループ)もすっきりさせるには次のようにします。

PyMOL>set cartoon_fancy_sheets, 0
PyMOL>set cartoon_smooth_loops, 1


[,w120] → [,w120] → [,w120]


[,w120] → [,w120] → [,w120]


う〜ん。2枚目と3枚目の違いはあまりわかんないですけどね。気になる人にはなる,くらいで。詳しくはPyMOL Wikiへ。

PyMOLでタンパク質を虹色に塗るときのいろいろ

PyMOLでタンパク質を虹色に塗る場合には,マウスだと「C」メニューから「spectrum > rainbow」と選びますが,これをコマンドでやる方法などについてです。


このタンパク質(↓)を例に見ていきましょう。紫色の球はイオンです。


[,w120]

基礎編

虹色にする場合にはコマンド入力欄に次のように入力します。

PyMOL>spectrum


ここで,一部の残基などを選択しておいてその部分のみ虹色にしたい場合には,少し書き方が変わります。たとえば,今回はイオンの色は変えないでタンパク質の色のみ変えたいとします。仮にタンパク質を「sele」という名前で選択してあるとすると,次のようになります。

PyMOL>spectrum count, rainbow, sele


[,w120]


「count」が残基番号で色づけすることを,「rainbow」が虹色に色づけすることを表しています。もしB-factorの値に従って色づけする場合には「count」の代わりに「b」とするだけです。

PyMOL>spectrum b, rainbow, sele


[,w120]

応用編1:B-factorの最大値と最小値を指定する。

「spectrum」コマンドによる色づけでは,何も指定しなければ最大値と最小値は自動的に決められてしまいます。これでは比較するときに不便なこともありますね。B-factorのカラムに別の値を自分で入れていたりすると特に(あるある!)。次のようにして最大値と最小値を指定することができます。

PyMOL>spectrum b, rainbow, sele, minimum=17, maximum=37


[,w120]


ちょっとやりすぎな感じはありますが,まあ,デモなので。

応用編2:Rainbowの色を変える

Rainbowで色づけをすると,勝手にN末端が青,C末端が赤となってしまいます。でも逆の方が感覚に合う人もいるし(わたし),そもそも虹色じゃなくて赤→白→青みたいな色づけがしたいこともあります。特に,B-factorのカラムに別の値を自分で入れていたりすると(あるある!)。


まずは,虹の順番を逆にしてみましょう。色の指定の「rainbow」を「rainbow_rev」に替えましょう。これで色の順番がさっきと逆になります(N末端が赤,C末端が青になります)。

PyMOL>spectrum count, rainbow_rev, sele


[,w120]


では次に,もっと自由な色へ挑戦。虹色以外だって選べます。黄色→青にしてみましょう。

PyMOL>spectrum b, yellow_blue, sele, minimum=0, maximum=10


[,w120]



ここでは保存度に従って色を付けています(B-factorのカラムに保存度を入れています;保存度は0〜10の範囲を取るように調整してあります)。青いところが進化の過程でよく保存しているところ,黄色いところがその逆です。イオンが透過するところはよく保存してますね。まあでも,もっといい色の選択がありそうですね。。

補足1:タンパク質

ここで使ったタンパク質はKcsAというタンパク質でした(見えやすくするために実際のタンパク質の一部しか表示していません)。

補足2:保存度の計算

保存度はJSD(Jensen–Shannon divergence)という方法を使って計算しています。お手軽だけどけっこういい結果が得られるので,機能部位予測などで使われています。

補足3:色の一覧

色の指定の全一覧は,存在しない色を指定すると表示されます。または,PyMOL Wikiにいろいろ書いてあります。

補足4:虹の色の順番

私は小学校で,虹の色の順番を次のように習いました。歌で覚えたので,今でもすぐに言うことができます。渡辺茂先生,ありがとうございました!

赤,橙,黄,緑,青,藍,紫

MeCab+Pythonのセットアップ

MeCabをインストールしたのでそのメモです。MeCabの公式サイトと『Pythonによる日本語自然言語処理』を参考にさせていただきました。OSはMac OS 10.6です。

MeCabのインストール(mecab-0.98)

$ ./configure --with-charset=utf8
$ make
$ sudo make install

文字コードUTF-8を指定しました。

辞書のインストール(mecab-ipadic-2.7.0-20070801)

$ ./configure --with-charset=utf-8
$ make
$ sudo make install

文字コードUTF-8を指定しました。

Python用のバインディングをインストール(mecab-python-0.98)

$ sudo python setup.py install

動作テスト

次のような簡単なスクリプトを書いてテストしました。これも上記した2つのサイトを参考に書きました。出力は形態素だけにしています(-O wakati)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import codecs
import MeCab

reload(sys)
sys.setdefaultencoding("utf-8")
sys.stdin = codecs.getreader("utf-8")(sys.stdin)
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

document = "旧石器時代日本列島において確認されている人類の歴史は、約10万年ないし約3万年前までさかのぼる。"

mecab = MeCab.Tagger("-O wakati")
output = mecab.parse(document)
print output,


次のような出力が得られました。なお,print文の最後のカンマは余計な改行の出力を防ぐためのおまじないです。

旧石器時代 日本 列島 において 確認 さ れ て いる 人類 の 歴史 は 、 約 10 万 年 ないし 約 3 万 年 前 まで さかのぼる 。

現在時刻を取得・ファイル名用に整形

ファイル名の一部に現在時刻を入れたくなることがあるので,Pythonでそれをやるときのメモ。

>>> from datetime import datetime
>>> basename = datetime.now().strftime("%Y%m%d-%H%M%S")
>>> basename
'20110420-131622'

リストラだってアウトソーシングする時代

先日,『君たちに明日はない』および続編の『借金取りの王子』(垣根涼介)を読みました。ふだん小説はぜんぜん読まないのですが,ある日ふらっと本屋に行ったときにポップにひかれて手にとって,チラッと読んだら面白そうだったので,つい買ってしまいました。実際に読んでみると,想像以上に面白かったです。ポップ重要


ある意味で似たテーマの小説として『マイレージ,マイライフ(原題:Up in the Air)』(Walter Kirn)があります。これもざっと読みました(時間がなかったので流し読みで)。時間があるときに何人かでこれを題材に話をしたら,けっこう楽しめたかもな,と思います。

君たちに明日はない』&『借金取りの王子

帯によるとなんかNHKでドラマ化されていたらしいですが,うちにはテレビが無いので知らんのです。この本の中にはやたら「美人」という表現の女性が出てくるのですが,個人的には,ドラマで誰がそれらの美人を演じたのかが興味津々です。


主人公はリストラを請け負う専門会社の社員です。物語は,その主人公とリストラの対象になった人たちの駆け引きを中心に進みます。各章が個々のリストラ対象者になっているので,短編集みたいで読みやすいです。


素晴らしいのはこの「企業のリストラを請け負うプロフェッショナル」という設定ですね。この設定になった時点で,つまらないはずがないと思うのです。そして,垣根涼介さんはそこにどんなドラマが生まれるのか,というのを見事に書ききっていると思います。リストラ,深いです。深い。そうか,リストラの理由はデキが悪いからってだけじゃなかったんだね。。


「リストラだってアウトソーシング」ではなく,「リストラこそアウトソーシング」なんじゃないかあ。まあともかく,人間ドラマとか,食うか食われるかの駆け引きとかが好きな人には絶対的にオススメですよ。

マイレージ,マイライフ』

頭がよくて教養もある人が,ドラッグをキメて小説を書いたらこうなるんだろうな,という感じの内容でした。もしくは精神的に不安定なときに書いたか。作者が飛行機に乗ったときに他の乗客と交わした会話にヒントを得て書いたものだそうですが,内面的には作者の世界観が色濃く反映された小説なのではないかと思います。


こっちは映画化されていて,その公式サイトはこちら(日本語版)(予告編が観れます)。自分は映画は見ていないですが,予告編や映画評論家の語りを見る限り,小説と映画はまったく別物です。さすがハリウッド!


自分は飛ばしつつ読んだのでこの小説の内容をうまく表現できないですが,訳者あとがきを参考にしましょう。

 地上とエアワールド。本書ではその一種のパラレルワールドを舞台に,過去と現在が交錯し,進行形のできごとに回想と幻想と心象風景がはいりこみ,正気と妄想がいりまじり,奇妙なエピソードが積み重なり,後半ではドラッグも手伝って彼の妄想は加速し,現実と非現実な世界とがまざりあうように展開されていきます。


要は,主人公は疲れていて精神的に不安定で,心臓発作でたまに意識を失い,かつドラッグもキメるのですが,この小説はその主人公の一人称で書かれているのです。というわけで,話がしょっちゅうトビます。

 彼らは空を飛び,知らない街を訪れます。孤独や不安や疎外感を抱えて。どこかで人間関係を望みながら。もっといい人間になりたいと願いながら。家族への複雑な思い。父親にたいする憧れと母親にたいする葛藤。そういった意味で,本書は現代人が自らのアイデンティティアイデンティティを模索し見つけだしていく物語だと思います。そしてまた,いったん切り離したはずの家族とのつながりを問いかける物語だとも言えるのではないでしょうか。


これを読んで,読者は「まあ,確かにそうかもしれないけど,でもちょっと違うよね。」と感じると思うのです。読み手によっていろんな解釈ができる小説です。というわけで,時間のある人はこの小説から何が読み取れるのかをじっくり考えると面白いのではないかと思います。ちょっと流行っているらしい「読書会」でみんなでわいわいやるのにちょうどいいのではないでしょうか。


ちなみに原題『Up in the Air』からネイティブの人が感じるニュアンスは分かりかねますが,邦題としては『マイレージ,マイライフ』は秀逸だと思います。グッジョブ!