カーオーディオ到着までの「つなぎ」

2014年の6月末に、悩んだあげくハイブリッド車を購入。しかし不幸にも、別途購入予定のカーオーディオ(カーナビ)が、計画していた旅行に間に合わなくなりました。そこで「つなぎ」として Bluetooth スピーカーを購入したのが、2週間ほど前のことです。あれこれ調べた結果、Bose® SoundLink® Mini を購入し、ホテルに届くよう手配しました。

Bose を選んだのは、以前から種々の商品を使用してきて「外れ」がなかったからですが、今回はあくまでも「つなぎ」役です。そこそこ聞ける音ならばよい、と考えていたのですが、驚きました。どうしたらこんな低音を出せるのか…。長期使用の結果ではないため、耐久性は不明ですが、現段階では大満足。当然ながら個人の見解ですが、今回の購入は「大当たり」でした。

iPhone 5s にインストールした「Yahoo!カーナビ」を使い、後部座席に SoundLink Mini セットする。「カーナビいらないじゃん」とか、「悲しいことに備え付けのカーオーディオよりも良い音がする」などのユーザー評価どおり、スマホの周辺機器事情は、おそろしいことになっていますね…。

カテゴリー: 趣味 タグ: , , ,

Mendeley Desktop の文献ファイルを Dropbox 一つで共有する方法[備忘録]

Mendeley Desktop の ”File Organizer" タブ

本稿では、「Dropbox を使い、複数の Windows PC 間で Mendeley Desktop の文献ファイルを共有・管理する方法」について述べています。この方法に従えば、Mendeley のオンラインストレージにファイルをアップロードすることなく、複数のPCで同様の使い勝手を実現できます。かなりラフで不親切な記述になっていますが、備忘録としての位置づけですので悪しからず。とはいえ、Mendeley の使用経験をお持ちの方なら、概容はご理解いただけるかと思います。私的な環境で検証したに過ぎず、またレジストリの修正を内容として含みますので、記述した手法を実際に適用される場合には自己責任にてお願いします。


文献管理に Mendeley を使いはじめて、およそ1年が経過しました。職場と自宅の両方で使用する都合上、複数のWindows PC間で文献ファイルを共有・管理する方法を探し求めてきましたが、納得できる解決策が見当たりませんでした。文献に添付のPDFだけを同期しても、最初に設定を行ったPCではそれらのファイルを登録文献から開けますが、別のPCからはできません。問題を根本的に解決するためには、メタデータを含む設定ファイル(SQLite データベース)も同期する必要があるのです。

そのような中、SugarSync を利用する方法(例えば 【改良版】 Mendeleyで管理している文献を複数のPCで共有する方法 : My Scratch Pad )が目にとまりました。このアプリケーションは、同期対象となるファイル・フォルダーを自由に選択できるため、理屈通りにいけば異なるPCで全く同じ使い勝手を実現できます。「本筋」を感じるやり方でしたが、残念ながら私の環境(Windows 8.1 Enterprise 64bit)では SugarSync のファイル同期が停止してしまい、失敗に終わりました(アプリケーションを再起動すれば再開するのですが…)。

以前から有料版の Dropbox を使用していることもあり、「何とかこれ一つで共有できないものか」と腰を据えて調べ直した結果、次のサポート情報(英文)にたどり着いたのです:
How to redirect where the sqlite database is stored

この中に記載された情報を閲覧するだけでも十分なのですが、自身の備忘録を兼ねて、以下に共有設定の要点を記しておくことにします。

1. Mendeley Desktop の終了

Mendeley Desktop が起動していれば、これを終了します。

2. SQLite データベースを含むフォルダーのコピー

Dropbox内の適当な場所に、データベースファイル(*.sqlite)を含むフォルダー(Windows 8.1 では、”C:Users<ユーザー名>AppDataLocalMendeley LtdMendeley Desktop” がデフォルト)を、Dropboxの適当な場所に丸ごとコピーします。コピーを終えたら、コピー先のフルパスをエクスプローラーなどを利用して取得し、どこかに貼り付けておくとよいでしょう。

3. 設定ファイル保存パスの変更

レジストリエディター(regedit.exe)を起動し、左ペインのフォルダーツリーから、”HKEY_CURRENT_USER > Software > Mendeley Ltd. > Mendeley Desktop” を選択します。そしてこの場所に「文字列値」”dataDirectory”(引用符は不要です)を作成し、データとして上の2. で貼り付けたパスを入力します。設定例を下図に示します。

Mendeley Desktop の Windows レジストリ

SQLite データベースファイル(*.sqlite)の保存パスを変更するには、文字列値 “dataDirectory” を新規作成し、データとしてパスを表す文字列を記述する。

4. 設定変更の確認(省略可)

Mendeley を起動して、ダミーでもよいので適当なPDFファイルを文献として追加してみます。添付したら Dropbox 内の文献データフォルダー(下図”copy files to:”のボックスで指定したフォルダー)に該当するファイルが作成され、2. でコピーしたフォルダー内のデータベースが更新されていることを(タイムスタンプなどから)確認してみてください。

Mendeley Desktop の ”File Organizer" タブ

Mendeley Desktop の “File Organizer” タブの内容を表示したところ。”copy files to:” ボックス内文字列が、文献ファイルの保存パスを示す。

1. から4.を終えたら、別のPCでも同様の設定を行います。その際、同期の「競合」を回避するため、Dropbox の同期が正常に完了していることを事前に確かめてください。またPC間で、文献データフォルダーへのパスは同じにしておいてください

以上の操作によって、複数のPCで文献情報を共有・管理することが可能となり、いずれのPCでも添付した文献ファイルを同様に開けるようになります。先のサポート情報によれば、MacやLinuxでも文献ファイルの共有が可能なようです。なお、本稿ではクラウド上のストレージサービスとして Dropbox を使いましたが、ローカルPCとクラウド間で同期を実現する他のサービスでも、おそらく同様の結果を得ることができると思います。


[変更履歴]

  • 2014-01-16: オリジナル
  • 2014-01-19: 文献データフォルダーへのパスをPC間で同一に設定する、という条件を追記。
  • 2014-01-21: 冒頭の要約に一文を追記。
カテゴリー: 研究 タグ: , , , , ,

パッケージ lsa の検証2: query() [備忘録]

ScreenClip1401121612

前回の記事で、R のパッケージ lsa に含まれる associate() を取り上げました。今回は、同パッケージの関数 query() です。タイトルには「検証」とありますが、単にコードを実行し、それに対する所感を述べただけの内容になっています。


query() は、既存の索引語リストにもとづき、検索質問(query)用のベクトルを生成する関数です。まずは、関数のコードを見ておくことにします:

構造を確認したところで、lsa パッケージのマニュアル p.13 以降の記述内容にもとづき、サンプルコードを実行してみます。

既存の索引語・文書行列から行名を索引語リストとして取り出し、これをもとに query() で「検索質問ベクトル」を生成する ― これが上記コードの内容です。サンプルは、接辞処理(stemming)が不要な「語基に等しい単語」だけを含むため、stemming 引数を FALSE としても問題のないことが分かります。

関数が返したベクトルを見ると、既存の文書に存在する索引語をすべて抜き出し、検索質問文中にそれらが出現する頻度を列挙しているようです。確認のため、既存のリストには存在しない索引語 “something” を追加し再実行してみます。

予想通り、”something” が文書内に存在しないため、query() はこれを無視するようです。日本語でも同様にベクトルを生成できるか、確かめてみましょう。冒頭に示したサンプル内の索引語・文書名を日本語に置き換え、コードを実行します。

おや?生成した検索質問ベクトルの中に、”犬” と “猫” が出てきません。textmatrix() で作成した「既存文書の内容」を確認してみると、

やはり “犬” と “猫” が含まれていません。textmatrix() は associate() の検証 でも使いました。その時のコードを今回のものと見比べた結果、引数 minWordLength=1 が足りないことに気づきました。出力結果をよく見ると、消失した語はいずれも「1文字」です。

そこで、textmatrix(td, minWordLength=1) として、やり直してみます。

textmatrix() の minWordLength を省略すると、2 を指定したのと等価になります。(マニュアルp.17 textmatrix() 参照)。日本語に置き換えた “犬” と “猫” は共に1文字なので、この引数で 1 を指定しておかないと行列から削除される、というわけです。英文では dog・cat は2文字以上ですので、引数を省略しても結果に影響はありません。query() のサンプルでは、コード簡略化のため敢えて指定しなかったのでしょう。

とにかく、query() で問題なく日本語を扱えそうで、めでたし、です。

query() に関するまとめは以下の通りです:

  • 引数 stemming を省略するか、これに FALSE を指定することで、(少なくともサンプルの範囲内では)日本語にも適用可
  • 和文の「索引語・文書行列」作成に textmatrix() を利用する場合、適宜 minWordLength = 1 を加える。


2013-02-06: オリジナル

2014-01-12: アイキャッチ画像を設定

2014-01-13: コード表示のフォーマットを変更

カテゴリー: 研究 タグ: , , , , , , ,

パッケージ lsa の検証1: associate() [備忘録]

ScreenClip1401121625

R言語(以下、R)のパッケージにはマニュアルが付属しており、そこには関数を使ったサンプルコードの記述があります。本稿では、lsa パッケージ 0.63-3(Fridolin Wild 氏作)に含まれる関数 associate() について、マニュアル (2012-02-14 版)に従いコードを実行し、出力結果や気づいた点などを備忘録としてまとめています。検証に使用した R のバージョンは 2.15.2 で、Ubuntu 12.04 LTS Desktop x64 上で実行しました。


LSA(潜在的意味分析)は、テキストデータから抽出した索引語・文書行列の次元縮約を目的とした、情報検索技術の一つです。この手法には、(1) 次元数の削減によって、検索速度の向上を期待できる、(2)「文書や検索質問文から抽出した索引語」の関連性(類似度)を数値化できる、などの利点があります。R の lsa パッケージには、LSA に有用な関数が多数収録されていますが、それらの日本語への適用性や利用方法などを、詳細に記した資料は少ないようです。

今回は、索引語間の類似度を求める関数 associate() について、サンプルコードに基づく検証を試みます。パッケージのインストールとロードを終えた後、まずはマニュアル [p.3-4] の記述に従い、コードを一通り実行してみます。

[code lang=”r” gutter=”false”]
> # create some files
> td = tempfile()
> dir.create(td)
> write( c("dog", "cat", "mouse"), file=paste(td, "D1", sep="/"))
> write( c("hamster", "mouse", "sushi"), file=paste(td, "D2", sep="/"))
> write( c("dog", "monster", "monster"), file=paste(td, "D3", sep="/"))
> write( c("dog", "mouse", "dog"), file=paste(td, "D4", sep="/"))
> # create matrices
> myMatrix = textmatrix(td, minWordLength=1)
> myLSAspace = lsa(myMatrix, dims=dimcalc_share())
> myNewMatrix = as.textmatrix(myLSAspace)
> # calc associations for mouse
> associate(myNewMatrix, "mouse")
cat   hamster     sushi       dog
0.9980298 0.8556159 0.8556159 0.7943692
[/code]

分析対象となる文書はD1、D2、D3、D4 の4つで、それぞれ、dog・cat・mouse 、hamster・mouse・sushi、dog・monster・monster、dog・mouse・dog を索引語として含みます。associate() の実行結果から、cat の数値が ほぼ 1  と高く、mouse に最も類似した語は cat であることが分かります。

なぜ類似しているかは、下の 索引語・文書行列から明らかです。cat の行ベクトル(索引語ベクトル)を cat とすれば、 cat = [0.323556998, 0.2436250, -0.003898531, 0.3993739] 、mouse については mouse = [0.966555903, 0.7595387, -0.111586760, 1.1726914] となります。ここから mouse = 3 * cat の関係を読み取ることができ、両ベクトルの成す角が「ほぼ 0である」ことを導けます。associate() は既定で cosine 尺度を用いるため、計算結果がおよそ 1 になっている、というわけです。

[code lang=”r” gutter=”false”]
> myNewMatrix
D1         D2           D3        D4
cat      0.323556998  0.2436250 -0.003898531 0.3993739
dog      1.118406354  0.4506422  1.218297522 1.6313033
mouse    0.966555903  0.7595387 -0.111586760 1.1726914
hamster  0.243624962  0.2718479 -0.281114472 0.2440658
sushi    0.243624962  0.2718479 -0.281114472 0.2440658
monster -0.007797061 -0.5622289  1.750687134 0.3468525
[/code]

ところで、先の実行結果には monster が存在しません。これはなぜでしょうか。とりあえず、associate() の構造を確認してみます。

[code lang=”r” gutter=”false”]
> associate
function (textmatrix, term, measure = "cosine", threshold = 0.7)
{
if (measure == "cosine") {
term2term = cosine(t(textmatrix))
}
else if (measure == "pearson") {
term2term = cor(t(textmatrix), method = "pearson")
}
else if (measure == "spearman") {
term2term = cor(t(textmatrix), method = "spearman")
}
else {
stop("[associate] ERROR: This closeness measure is not supported.")
}
ix = which(term2term[term, ] > threshold)
ranks = sort(term2term[term, ix], decreasing = TRUE)
ranks = ranks[-which(names(ranks) == term)]
return(ranks)
}

[/code]

上のコードでは、measure、threshold の各引数を省略した場合には、それぞれ cosine(尺度)、0.7 をデフォルトで用いることになっています。このことから、先の例では値が 0.7 に達しなかったため、 monster が表示されなかったと推測できます。改めてマニュアルを読み返してみると、「索引語すべてを表示するには、threshold を 0 にせよ」とありました。これは、cosine(t(textmatrix)) の最小値が 0 であることを意味するのですが…。とにかく threshold = 0 として、再実行してみます。

[code lang=”r” gutter=”false”]
> associate(myNewMatrix, "mouse", threshold = 0)
cat   hamster     sushi       dog
0.9980298 0.8556159 0.8556159 0.7943692
[/code]

やはり monster が出て来ません。仕方がないので、monster 側からアプローチしてみます。

[code lang=”r” gutter=”false”]
> associate(myNewMatrix, "monster", threshold = 0)
dog
0.5502966
[/code]

dog 以外はどこへ消えたのでしょう…。よくよく考えてみれば、cosine 尺度による計算結果は、一般的には「-1 から 1」までの値をとるはずです。そこで、threshold = -1 として以下を実行してみます。

[code lang=”r” gutter=”false”]
> associate(myNewMatrix, "monster", threshold = -1)
dog          cat        mouse      hamster        sushi
0.550296579 -0.007325483 -0.070051159 -0.576276571 -0.576276571
[/code]

無事にすべての索引語が表示されました。私は英文の解釈を誤ったのでしょうか。引数 threshold の関連箇所をマニュアルから引用しておきます:

Internally, a complete term-to-term similarity table is calculated, denoting the closeness (calculated with the specified measure) in its cells. All terms being close above this specified threshold are returned, sorted by their closeness value. Select a threshold of 0 to get all terms.

マニュアル記載のコードに基づく確認作業はここまでで、ひとまず作成したファイルを削除しておきます。

[code lang=”r” gutter=”false”]
> # clean up
> unlink(td, recursive=TRUE)
[/code]

次に、サンプル内の索引語と文書名を日本語に置き換えて、動作に問題ないか確認してみます。

[code lang=”r” gutter=”false”]
> # create some files
> td = tempfile()
> dir.create(td)
> write( c("犬", "猫", "マウス"), file=paste(td, "文書1", sep="/"))
> write( c("ハムスター", "マウス", "寿司"), file=paste(td, "文書2", sep="/"))
> write( c("犬", "モンスター", "モンスター"), file=paste(td, "文書3", sep="/"))
> write( c("犬", "マウス", "犬"), file=paste(td, "文書4", sep="/"))
> # create matrices
> myMatrix = textmatrix(td, minWordLength=1)
> myLSAspace = lsa(myMatrix, dims=dimcalc_share())
> myNewMatrix = as.textmatrix(myLSAspace)
> # calc associations for mouse
> associate(myNewMatrix, "マウス")
猫 ハムスター       寿司         犬
0.9980298  0.8556159  0.8556159  0.7943692
> myNewMatrix
文書1      文書2        文書3     文書4
マウス     0.966555903  0.7595387 -0.111586760 1.1726914
犬         1.118406354  0.4506422  1.218297522 1.6313033
猫         0.323556998  0.2436250 -0.003898531 0.3993739
ハムスター  0.243624962  0.2718479 -0.281114472 0.2440658
寿司       0.243624962  0.2718479 -0.281114472 0.2440658
モンスター -0.007797061 -0.5622289  1.750687134 0.3468525
[/code]

このように、少なくともサンプルの範囲内では、問題なく日本語の分析もできるようです。

[code lang=”r” gutter=”false”]
> # clean up
> unlink(td, recursive=TRUE)
[/code]

今回の検証から、associate() について次のことが分かりました:

  • 索引語すべての類似度を列挙する場合には、threshold = -1 を指定する
  • 日本語を扱える(可能性が高い)。

2013-02-06: オリジナル

2014-01-12: アイキャッチ画像を設定

カテゴリー: 研究 タグ: , , , , , ,

Ubuntuリポジトリからインストールした R その他のアップデート[備忘録]

R Logo

昨年の中ごろ、「MeCab と R」を使い、研究用の検索エンジンをLAMP環境下で試作しました。パフォーマンスを改善し、セキュリティを確保するためには、当然ながらアプリケーションを適切に更新する必要があります。しかし、その作業は思っていたよりも煩雑で、「手順の整理」が必要と感じました。本稿は、「MeCab と R のアップデート」に関する手引き(個人的な覚え書き)です。


初期インストール時の環境

アップデートの対象となるアプリケーションは次の3つです。

  1. MeCab 0.98(日本語形態素解析器)と IPA辞書
  2. R 2.14.1(R 本体)
  3. RMeCab 0.990(MeCab を R から呼び出すためのパッケージ)。

これらは、Ubuntu 12.04 LTS Server x64(Precise Pangolin) 上で、パッケージ管理システムを使いインストールしたもの。1. については、リポジトリに存在するバージョンが古いため、手動で *.tar.gz を展開して最新版をインストールします。2.は、APT ツールを使って更新できますが、設定ファイルの書き換えが必要になります。3.は、ダウンロードした *.tar.gz を使い、R を起動した状態で更新します。

アップデートの手順

1.と3.は、 RMeCab – RとLinuxと… の中に、関連記述があります。2.は http://cran.r-project.org/bin/linux/ubuntu/README を参照するのがよいでしょう。

これらの資料から要点を抜粋し、情報を補足しながら再集約したものが以下の手順です。

MeCab の手動更新

リポジトリからインストールした古いバージョン 0.98 を削除したのち、2013-01-25 現在の最新版 0.994 を手動でインストールします(バージョン 0.98 に対して、apt-get update/upgrade としても、現段階では 0.994 に置換できません)。手始めに、削除するパッケージをターミナル(端末)から確認します。

[code lang=”bash” gutter=”false”]
$ sudo dpkg -l | grep ‘mecab’
ii  libmecab1                        0.98-1                           Libraries of Mecab
ii  mecab                            0.98-1                           Japanese morphological analysis system
ii  mecab-ipadic                     2.7.0+20070801-3                 IPA dictionary compiled for Mecab
ii  mecab-ipadic-utf8                2.7.0+20070801-3                 IPA dictionary encoded in UTF-8 compiled for Mecab
ii  mecab-utils                      0.98-1                           Support programs of Mecab</pre>
[/code]

次いで、これらをアンインストール(完全削除)します。

[code lang=”bash” gutter=”false”]
$ sudo apt-get purge libmecab1 mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils
[/code]

ここからインストール作業に入ります。Downloads – mecab – Japanese morphological analyzer – Google Project Hosting から、最新の MeCab 関連ファイル(本体と辞書)をダウンロードしておき、そのディレクトリをカレントにして MeCab 本体をインストールします。

[code lang=”bash” gutter=”false”]
$ tar zxvf mecab-0.994.tar.gz
$ cd mecab-0.994
$ ./configure –with-charset="utf8"
$ make
$ sudo make install
$ sudo ldconfig
[/code]

将来のアンインストールに備えて、インストールパスを明らかにしておきます。MeCab 本体については、

[code lang=”bash” gutter=”false”]
$ which mecab
/usr/local/bin/mecab
[/code]

とすれば確認できます。

ライブラリの場所は、make install 後のメッセージ

[code lang=”bash” gutter=”false”]
Libraries have been installed in:
/usr/local/lib
[/code]

から、/usr/local/lib であることが分かります。

続いて、辞書( UTF-8)をインストールします。

[code lang=”bash” gutter=”false”]
$ tar zxf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure –with-charset="utf-8"
$ make
$ sudo make install
[/code]

辞書ファイルへのパスは、make 後の表示メッセージ(の一部)から読み取り可能です。

[code lang=”bash” gutter=”false”]
Libraries have been installed in:
/usr/local/lib
[/code]

下のコマンドは、表示通りで間違いないことを確認したものです。

[code lang=”bash” gutter=”false”]
$ cd /usr/local/lib/mecab/dic
nobuo@u12041dktx64-Godzilla:/usr/local/lib/mecab/dic$ ls
ipadic
[/code]

ipadic が存在するので、/usr/local/lib/mecab/dic が辞書へのパスです。

以上を終えた後、念のため動作確認を行います。

[code lang=”bash” gutter=”false”]
$ mecab -v
mecab of 0.994
$ mecab
長崎は今日も雨だった
長崎 名詞,固有名詞,地域,一般,*,*,長崎,ナガサキ,ナガサキ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
今日 名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
雨 名詞,一般,*,*,*,*,雨,アメ,アメ
だっ 助動詞,*,*,*,特殊・ダ,連用タ接続,だ,ダッ,ダッ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
[/code]

リポジトリを使った R の更新

vi などのエディタで、/etc/apt/sources.list に以下のとおり追記します。ここで、cran.md.tsukuba.ac.jp は、筑波大学にある CRAN ミラーサーバーの一つ。precise は、Ubuntu 12.04 のコードネームです(## で始まる行はコメントで、省略可能)。

[code lang=”bash” gutter=”false”]
## To obtain the latest R packages
deb http://cran.md.tsukuba.ac.jp/bin/linux/ubuntu precise/
[/code]

そして、次のコマンドで公開鍵を取り込みます。

[code lang=”bash” gutter=”false”]
$ sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys E084DAB9
[/code]

最後に、端末から以下を実行します。これによって、R を 2.15.2  に更新できます。これらのコマンドは、R を含むすべてのパッケージを更新する点に注意してください。

[code lang=”bash” gutter=”false”]
$ sudo apt-get update
$ sudo apt-get upgrade
[/code]

RMeCab の手動更新

RMeCab は CRAN で公開されていないため、作者のWebサイトにあるリンクから、ファイルをダウンロードしておく必要があります。その後スーパーユーザーの権限で R を起動し、次のように作業を進めます。

[code lang=”bash” gutter=”false”]$ sudo R[/code]

起動後、パッケージをインストールします。ここでは、/home/RUser/Downloads/ にRMeCab のパッケージファイルがあるものとします。

[code lang=”r”]> install.packages("/home/RUser/Downloads/RMeCab_0.996_R_x86_64-unknown-linux-gnu.tar.gz", repos = NULL)[/code]

ここで、パッケージの存在とインストールパスを確認しておきます。

[code lang=”r”]
> library()
[/code]
[code lang=”r”]
パッケージ (ライブラリ ‘‘/usr/local/lib/R/site-library’’ 中):

RMeCab interface to MeCab
RWeka R/Weka interface
RWekajars R/Weka interface jars
Snowball Snowball Stemmers
dataframe Fast data frames
lsa Latent Semantic Analysis
rJava Low-level R to Java interface

パッケージ (ライブラリ ‘‘/usr/lib/R/library’’ 中):

KernSmooth Functions for kernel smoothing for Wand & Jones
(1995)
MASS Support Functions and Datasets for Venables and
Ripley’s MASS
Matrix Sparse and Dense Matrix Classes and Methods
base The R Base Package
boot Bootstrap Functions (originally by Angelo Canty
for S)
class Functions for Classification
cluster Cluster Analysis Extended Rousseeuw et al.
codetools Code Analysis Tools for R
compiler The R Compiler Package
datasets The R Datasets Package
foreign Read Data Stored by Minitab, S, SAS, SPSS,
Stata, Systat, dBase, …
grDevices The R Graphics Devices and Support for Colours
and Fonts
graphics The R Graphics Package
grid The Grid Graphics Package
lattice Lattice Graphics
methods Formal Methods and Classes
mgcv Mixed GAM Computation Vehicle with GCV/AIC/REML
smoothness estimation
nlme Linear and Nonlinear Mixed Effects Models
nnet Feed-forward Neural Networks and Multinomial
Log-Linear Models
parallel Support for Parallel computation in R
rpart Recursive Partitioning
spatial Functions for Kriging and Point Pattern
Analysis
splines Regression Spline Functions and Classes
stats The R Stats Package
stats4 Statistical Functions using S4 Classes
survival Survival Analysis
tcltk Tcl/Tk Interface
tools Tools for Package Development
utils The R Utils Package
[/code]

install packages() によって旧バージョンは上書きされるため、事前・事後の削除作業は不要です。パッケージに含まれる関数 RMeCabC () を使い、動作を確認してみます。

[code lang=”r” gutter=”false”]
> library(RMeCab)
> RMeCabC("長崎は今日も雨だった")
[[1]]
名詞
"長崎"

[[2]]
助詞
"は"

[[3]]
名詞
"今日"

[[4]]
助詞
"も"

[[5]]
名詞
"雨"

[[6]]
助動詞
"だっ"

[[7]]
助動詞
"た"
[/code]

最後に、R のパッケージをすべてアップデートしておきます。これで作業は完了です。

[code lang=”r”]> update.packages(checkBuilt=TRUE, ask=FALSE)[/code]

おわりに

あれこれ書き連ねましたが、以下の点については精査していません。これらを「この先解決すべき課題」とします。

  • MeCab をリポジトリから更新する方法はないのか?
  • 上の結論が「なし」であるすれば、アンインストールしやすいよう、checkinstall などのツールでパッケージ管理できないか?(これはおそらくできるはず)

なお、本稿執筆中に mecab-0.995.tar.gz が公開されたことを書き添えておきます。

(本稿の内容とは無縁ですが、SyntaxHilighter Evolved が R をサポートしてくれていて、たいへん助かりました。)


  • 2013/01/30: オリジナル
  • 2013/02/03: タイトル末尾に「[備忘録]」を追加
  • 2013/08/02: R 本体 –> MeCab 本体
  • 2014/01/12: アイキャッチ画像を設定
カテゴリー: 研究 タグ: , , , , , , ,

Evernote を使った日記作成: 三日坊主から脱却する独善的手法

日付に関する検索式を入力し、サムネール形式で結果を表示しているところ。

一般論はさておき、「振り返りによる改善効果」や「心の癒やし」などの観点から、日記には実益があると感じています。しかし、日々の行動や所感を継続的に記録することは、三日坊主の私にとっては「一生の難題」です。そこで今回は、 Evernote を利用した「日記の半自動作成」をテーマとして取り上げてみました。


旧来、日記の作成は「脳に蓄積された情報」あるいは「実体のある身近な記録物」に依存していました。昨今では、それらの一部は「クラウドに蓄積されたデジタルデータとそれを取得するためのソフトウェア」に置き換わりつつあります。一般ユーザーの手の届く範囲で考えるなら、Evernote などのノートテイキングソフトが、日記作成に関して最有力ではないでしょうか。

Evernote には、様々なソフトとの連携を実現している点・OS を問わず利用できる点で、他にはない大きな魅力・強みがあります。機能の豊富さからも、「身の回りの情報を一元管理できる(離れた場所に、もう一つの小さな脳を所有できる)ツール」に近づきつつあると言ってよいでしょう。

 私の場合、情報収集は主としてWindows および iPhone OS 上で行っています。 しかし、Linux でも Evernote にコンテンツを保存できるアプリがあり、Ubuntu などでシステム開発を行う際にはそれを利用しています。

「もう一つの脳」を所有するとなれば、地道かつ小まめにデータを収集する必要があるのは当然です。しかし、Evernote に慣れ親しんだユーザーにとって、このような営みは日記とは無関係な「半ば習慣化された行動」であり、特にストレスがかかる作業ではないでしょう。

さて、問題は「蓄積した情報をどのように日記化するか」ですが、私はごく単純に次のような検索式を使い対処しています。

created:20130109 -created:20130110

「created:[日付] -created:[日付]」が1日分のノートを検索する際の基本書式で、「全てのノート」にフォーカスを置き、検索ボックスにこれらの文字列を入力します。上式の意味するところは、「作成日が 2013年1月9日以降かつ1月10日より前 のノートを検索せよ」です。ここで created:20130109 と記述するだけだと、1月9日以降のノートがすべて列挙されてしまいます。検索日が「1月9日」ならば1日分を検索できますが、1月10日以降に検索すると2日分以上を引き出すことになります。

検索式を駆使すれば、「多様な日記」を構成できます。最も単純な例として、created を updated に書き換えることで、作成日ではなく更新日を基準にノートを検索することができます。検索構文については、検索構文 – Evernote Developers に詳細な記述があります。

作成日に基づく検索式を使った日記の実例が下の図です。日記らしさを表現するため、ノートを時刻の降順にサムネール形式で表示しています。検索結果を表示しただけの代物ですが、(少なくとも私にとっては)日記としての役割を十分に果たしてくれます。

日付に関する検索式を入力し、サムネール形式で結果を表示しているところ。

Evernote で日付に関する検索式を入力し、サムネール形式で結果を表示しているところ。作成したクエリーは、左ペインに「2013-01-14 の日記」などの名称で保存されていることがわかる。

日記を構成する検索式(クエリー)は、次のように名前をつけて保存しておくこともできます。何度も参照する可能性が高い「特別な意味を持つ一日」に対しては、このような方法は有効でしょう。

検索クエリーを保存するダイアログボックス

検索条件の記述と保存に用いるダイアログボックス。Evernote では適切な検索構文を使ってクエリーを作成し、名前をつけて保存することができる。

この方法では日記を動的に生成するため、既存のノートに変更を加えると更新日が書き換わり、結果として表示内容に影響を及ぼすことがあります。また、「デジタルノートを使っても、行動を網羅的に記録できるわけでもないし、そもそもその時の心情をどうやって記録するんだ」という正当な意見も出てくるでしょう。作成にかける手間を最小限に抑えつつ、もう少し詳細な記録を求めるならば、次のように所感を書き加えるやり方もあります。

検索結果として表示されるノートをすべて選択して「ノートリンクのをコピー」を実行し、結果を新規ノートに貼り付ける。そしてリンクの傍らに所感等のメモを書き込んでおく。

上記手法に従えば、PCを常用する人たちならば、作成した日記から一日の行動を概ねたどることができるでしょう。限定的な情報であっても、そこから一日の記憶が蘇り、当時の感情を呼び起こすことができたなら、日記として機能していると言ってよいでしょう。

頭の中で「今日の出来事」を振り返り、紙に思いを書き綴る ― ソフトに依存せず年賀状を直筆で作成するのと同様、世代に関わりなくそのような行為は大切にすべきだと私は思います。しかしながら、私のようなタイプの方が他にいらっしゃるなら、提示した手法にも多少なりとも意義を見出せると考え、本稿を書き記しました。あなたは、どのような意見をお持ちでしょうか。


[変更履歴]

  • 2013-01-20: オリジナル
  • 2014-01-12: 日付の書式を変更・アイキャッチ画像を設定
  • 2014-01-13: 変更履歴の書式変更(記事間で統一のため)
カテゴリー: その他 タグ: , ,

Iconia Tab W500S の SSD 換装

SSD 換装後の Iconia Tab W500S

一つ前の記事で、Office 2013 のインストールに用いた PC は、下の Iconia Tab W500S です。

SSD 換装後の Iconia Tab W500S

Crucial の 256GB SSD に換装し、日本語版 Window 8 Enterprise(32ビット)のインストールを終えた Iconia Tab W500S。

この機種の場合、SSD の購入時容量は32GB に過ぎず、Windows 8 上に Office 2013 をフルインストールするのは困難です。そこで、事前に SSD を 256GB にアップグレードしておきました。今回は、その手順などについて少々…。


換装のきっかけとなったのは、「 Iconia Tab 分解動画 」の存在です(「ICONIA TAB W500を分解する · Web=Log(A4)」からたどり着きました)。この動画を参考にしながら、偶然手元にあった処分予定のクレジットカード2枚を使って作業開始したのが昨年末のこと。
下図は自身のPCを分解し、SDD を交換してバッテリー(図中の青色のパーツ)を元に戻したところです。

SSD 換装直後の Iconia Tab W500S

SSD 換装直後の Iconia Tab W500S

換装に用いたSSDは、Crucial 社製の256GB。

また WiFi アダプタを取り外し、下の製品と交換して WiMAX での通信も可能にしました。

分解自体はそれほど難しくなかったのですが、換装を急ぐあまり、「あとからでいいや」とばかりに BIOS をアップデートせず SSD を装着したのが間違いのもと。組み立てた後、何度試しても BIOS画面が立ち上がりません。結局、Acer のサイトからダウンロードした BIOS の最新版をインストールするため、いったん旧 SSD に戻してから OS を起動するはめとなりました。その後は無事に BIOS が立ち上がり、外付けDVD ドライブからインストーラーを起動して、Windows 8 Enterprise(32ビット)の新規インストールに成功しました。しかし、これは相当な「時間の無駄」です。

上記反省を踏まえた「機器換装から OS のインストールに至るおおよその手順」を、以下にまとめておきます。

  1. PC の BIOS を最新バージョンにアップデート
  2. ヘラ(クレジットカードなどでも可)を使い、慎重に分解
  3. バッテリーの取り外し
  4. SSD・無線LAN アダプタの交換
  5. SSD ファームウェアのアップデート
  6. バッテリーを装着し、元通りに組み立て
  7. DVD(あるいはUSB HDD)からブートできるよう、BIOS で起動順序を設定
  8. OS(Windows 8)のクリーンインストール
  9. 各種ドライバのインストール

上記手順中、1.と5.はたいへん重要で、「必須の作業」と考えてよいでしょう。ただ、私が今回用いたCrucial の SSD は、幸いなことにファームウェアが最新版であったため、実際には5.のアップデートは不要でした。

なお、ファームウェアが最新の状態であっても、BIOS が SSD を認識しないことがあります。そのような場合、Crucial の製品ならば次の情報で対処できるかもしれません。

Why did my SSD “disappear” from my system? – Crucial Community

換装後2週間が経過しましたが、Iconia Tab は今のところ問題なく稼働しています。このような記事を書く際の決まり文句になりますが、換装に挑戦される方はどうか自己責任で。


2013/01/17: オリジナル

2014/01/12: アイキャッチ画像を設定

カテゴリー: その他 タグ:

Outlook 2013 .ostファイルのパス設定

レジストリ エントリーの追加

職場でスクールアグリーメントに加入している関係から、Office 2013 Professional Plus (32ビット製品版)を一足早く手にしました。
メインPCで使用中の 2010 バージョンと連携する各種ソフト(たとえばEndNote X6)の正常動作が確認できていないこともあり、(当然ながら)いきなりのアップグレードは無謀と判断。まずは予備機にインストールしてみました。 そのとき遭遇した「軽微な問題」について、簡単に触れておきたいと思います。

OSは日本語版 Windows 8 Enterprise (32ビット)、PCは Acer の Iconia Tab W500S (SDD を 256GB に換装)です。この中にインストールしてあったOffice 2010 Professional Plus を同 2013 にアップグレードしました。ライセンス認証を「プログラムと機能」を経由して終えた後、まずは Word を、次に Outlook を起動。ここで後者に問題が発生しました。

起動してみるとローカルの既存コンテンツ(メール、タスク、予定表などのアイテムすべて)が消失しており、Exchange Server からアイテムを再取得している様子。旧バージョンでは、インストール後に .ost ファイルの保存場所を移動したのですが、今回のアップグレード直後に確認してみると、「C:Users[ユーザー名]AppDataLocalMicrosoftOutlook」にファイルを新規作成していました。

アップグレードしたわけなので、以前の設定を引き継ぐと思い込んでいたのが間違いのもと。「既知の問題」として、Readme のどこかにそのことが書いてあったかもしれませんが、とにかくサポート技術情報を検索し次の記事をみつけました。

You cannot change the location of the offline Outlook Data File (.ost) in Microsoft Outlook 2013

技術情報には機械翻訳による日本語版もありますが、レジストリ編集の記述内容がわかりづらい。英文を直接参照した方がよいと思います。

この中には対策が2つ書かれています。「いずれか一つを使いなさい」とあるのですが、Method 1 では上手くいかなかったため、レジストリを編集する Method 2 を使い対処しました。解説どおり ForceOSTPath を Expandable String Value(展開可能な文字列値)として追加すると、下図のようになります。この操作によって、もともと使用していたフォルダ内の.ost を選択できるようになりました。

レジストリ エントリーの追加

展開可能な文字列値 ForceOSTPath の追加

環境依存するのでしょうが、私の場合、レジストリ サブキーのパスが技術情報の記述と異なっていました。この方法で対処される方がもしいらっしゃれば、その際にはご注意ください。


2013/01/16: オリジナル公開

2014/01/12: アイキャッチ画像を設定

カテゴリー: その他 タグ: ,

はじめてのデータマイニング[3]: 箱ひげ図の示すもの

R の boxplot関数 で描画した「箱ひげ図」の解釈

Excel® 2010 を使った散布図の作成」で解説した散布図は、2変数以上の関係を読み取る際に、たいへん強力なツールとなります。しかし、すべてのデータをありのままにプロットするため、「1変数に関する全体傾向の把握」に時間を要するという弱点もあります。例えば国語と数学の得点関係を示す散布図から、「数学の試験結果には、どのような特徴がありますか?」と問われると、即座に回答することは難しいでしょう。

箱ひげ図」は、散布図の弱みを補い、散布図と協調してデータマイニングの方向性(どこを掘れば宝が出てきそうか)を示す、たいへん重要なグラフです。今回は、箱ひげ図の外観および描画に必要な統計量について理解し、箱ひげ図から何がわかるのか考えていきたいと思います。


箱ひげ図(box plot、以下BP)は、「データの散らばり具合」を示すグラフの一つで、2012年度から高等学校・数学I「データの分析」(「学習指導要領」p.54)において取り上げられるようになりました。しかし、BPには描画方法(基礎となる統計量の求め方)が複数存在するため、これが指導者の頭を悩ませる結果になったようです。

この連載記事では混乱を避けるため、「Tukey の hinge 」にもとづくBPを、「標準」として用います。これは, R の boxplot関数を使って描画するBPの、既定値でもあります。(R については、今後の連載記事で取り上げます。)

R で作成した標準BPのサンプルと、描画に必要な統計量を示したものが下の図です。図の作成には、「国語・数学・英語の試験結果」に含まれる数学の得点を用いました。

R の boxplot関数 で描画した「箱ひげ図」の解釈

R の boxplot関数 で描画した「箱ひげ図」の解釈

 

図の構成要素

BPは、幾何学的な形状を持つ「三つの部品」で構成されます: (1) 箱(2分割された長方形)、(2) 箱から上下に延びる「ひげ」(直線)、(3)  外れ値(他からかけ離れた非凡な値)を示すマーカー(図中の「○」)。

少し補足しておくと、上図のBPは「90度回転させて描く」場合もあります。その場合、上の文中の「上下」を「左右」に、「水平線」を「垂直線」に読み替えてください。また(1) については、箱に「ノッチ」と呼ぶ切れ込みを入れることがあり、形状が長方形とは異なる場合もあります。(3) については、使用するソフトウェアによって、マーカーの表示方法が異なります。

基礎となる統計量

BPを構成する部品の「位置や大きさ」を決定する統計量が、中央値・上側ヒンジ・下側ヒンジ・最大値・最小値です。これらは「分布の偏りの影響を受けづらい」性質を持っており、これが箱ひげ図の特徴にもなっています。このほか、極端に大きい(あるいは小さい)値を示す統計量として、「外れ値」を用います。

ここで、代表値(すべてのデータを代表する値)として、平均値とともによく用いる「中央値」を例に取り、「偏りに強い」根拠を示しておきましょう。
例えば、生徒5名の試験結果(100点満点)が「36, 37, 41, 46, 100」であったとします。このとき平均値は52点、中央値は41点になります(中央値の計算は下節を参照)。平均値は、極端に大きな値である「100」に引き寄せられる形になりますが、中央値はその影響を受けません。5名の得点を代表する値としては、中央値が相応しいと思いますが、あなたはどのように感じますか。

以下、五つの統計量について、計算方法の概略を述べます。

中央値

中央値(メジアン、メディアン)は、全データの中で順位的に中央(50%)に位置する値をいいます。BPにおいては、これを「箱を二分する水平線」で示します。

計算方法は次のように至ってシンプルです:

  • データが奇数個の場合には、「中間の順位」が存在するため、これが中央値となる。先の例「36, 37, 41, 46, 100」では、5名の中間は3番目なので、中央値は41になる。
  • 「36, 37, 41, 46」のように偶数個の場合、全体を二分して、値の小さなグループ「36, 37」の最大値と、値の大きなグループ「41, 46」の最小値を平均する。したがって、中央値は「(37+41)/2=39」。

上図の例ではデータ数が偶数個(44)ですので、青・オレンジのグループ内で最大値を、緑・黄のグループ内で最小値をそれぞれ求め平均します。値はいずれも82ですから、中央値は「82点」になります。

※「同一の値が多数存在する場合には、別の計算方法を用いるべき」という考え方もあります。詳細については、「中央値(Me)」などを参照してください。

ヒンジ

ヒンジ(Turkey の hinge)は、「箱」の外枠を形成する統計量です。ヒンジには「下側ヒンジ(以下、LH)」と「上側ヒンジ(UH)」があり、それぞれ「中央値以下のデータ」の中央値「中央値以上のデータ」の中央値として求めます。LH・UHともに、中央値の求め方に帰着するため、計算は容易です。

  • 「36, 37, 41, 46, 100」の場合、LHは、中央値41以下の中央値、すなわち「36, 37, 41」の中央値となり37。UHは「41, 46, 100」の中央値で46。
  • 「36, 37, 41, 46」のように偶数個の場合には、中央値は39。しかし、この値は実存しないので、LHは「36, 37」を対象に求める。結果としてLHは、「(36+37)/2=36.5」、同様にUHは「(41+46)/2=43.5」。

上図のようにデータ数が増えても、計算要領は全く同じです。LHは「青・オレンジのグループの中央値」、UHは「緑・黄のグループの中央値」として求まるので、それぞれ75・85になります。図をよく観察すれば、ヒンジの求め方を視覚的に理解できるでしょう。

ところで、ヒンジに類似した統計量として「四分位数」があります。冒頭で「BPの描画方法には複数ある」と述べましたが、その一つが四分位数にもとづく方法です。

四分位数は、値の順位にもとづき全体を4等分したとき、値の小さな方から25%、50%、75%に該当する数値です。そして、それぞれを第1四分位数(以下、Q1)、第2四分位数(Q2)、第3四分位数(Q3)と呼びます。ここで、Q2は上で述べた中央値と同義です。

データが奇数個の場合には、LH・UHとQ1・Q3はそれぞれ求め方が同じになり、二つの統計量は一致します。しかし、データが偶数個になると、Q1とQ3は中央値のように2数の平均では求まらず、比例配分の計算が必要になります。このため、LH・UHとQ1・Q3は一致しない場合が出てきます。

※偶数個のデータに対する計算方法は、「四分位数」などの資料を参考にしてください。

実際に計算してみると、データが偶数個の場合でも、Q1・Q3とLH・UHの値に大差は生じません。しかし、論文やレポートなど、学術的な文書でBPを扱う場合には、箱の描画にどのような統計量を用いたのか、明記しておく必要があります。

最大値・最小値・外れ値

最大値と最小値は、ひげの終端を定める数値です。したがって、両者とヒンジとの距離が「ひげの長さ」になります。最大値・最小値とも、普通ならあっさり求まる統計量ですが、標準BPでは、最大・最小に条件がつくため注意が必要です。

条件つきの最大・最小は次の手順で求めます。

  1. 「箱の長さ」にもとづき、暫定的なひげの終端(最大値・最小値)を求める。ここで、ひげの長さは、箱の長さ「UH-LH」の1.5倍と定義する。すると、上・下に伸びるひげの終端は、それぞれ、UH+(UH-LH)・1.5、LH-(UH-LH)・1.5となる。
  2. ひげの終端値を、実存データと照合する。「上のひげ」については、暫定的な上端以下に存在する最も大きな値を、最終的なひげの上端、すなわち最大値と定める。「下方のひげ」についても同様に、下端(最小値)を定める。

このことを、図のデータで確認してみましょう。手順1. を数学の試験結果に当てはめると、ひげの上端は 85+(85-75)・1.5=100、下端は 75-(85-75)・1.5=60 になります。これらがそれぞれ暫定的な最大値・最小値です。
次に手順2. に従い、実際のデータと照合します。暫定的最大値100以下の実存データは、98。暫定的最小値60以上の実存データは、60です。したがって、最終的な最大値・最小値は、それぞれ98・60と定まり、これらの値まで「ひげ」を伸ばします。

もし上で定めた最大・最小値の範囲外にデータが存在すれば、それは「外れ値」としてプロットされます。図では最小値の下に、59が存在しますので、これが外れ値になります。

外れ値が検出され、その発生原因があとから修正不能な人為的な過誤(計測ミスや記録ミスなど)によることが明白ならば、外れ値を除去して分析することもあります。

なお、外れ値についても、検出のアルゴリズムが複数存在します。したがって、学術文書ではどのように外れ値を検出したか、明記しておく必要があります。

箱ひげ図が示すもの

上図で示したBPの右側に、「1変数の散布図」を配置したのが下の図です。これは、BPが示す「データの散らばり具合」を、実存データと比較するために描いたものです。このような散布図をBPとともに描くことはあまりしませんが、分布傾向を読み取る上で、良い方法だと筆者は考えています。

箱ひげ図と1変数の散布図

箱ひげ図と1変数の散布図

縦方向に配置した散布図では、同一得点のデータ同士が重なり合い、一つのマーカー(●)で表示されています(外れ値59だけ、赤)ので注意してください。したがって、すべての●を数え上げても、データ総数の44に一致しません。

では、この図をもとに、「箱ひげ図から何がわかるのか」について考えてみましょう。

BPの役割は、「データの散らばり具合」の要約と可視化です。したがって、散布状況を速やかに大まかに把握できれば、その役割を果たしたことになります。

箱ひげ図の定義から、「箱」には全データの半数(25%目から75%目)が含まれます。それらのデータは、集団において中間層を形成することから、「順位的にごく普通の(一般的な)データ」、すなわち「集団を代表するデータの集まり」とみなせます。そして、箱の中で「最も一般的データを一つ挙げる」とすれば、それが全データを代表する「中央値」です。
一方、「ひげ」が示す範囲内のデータは、「集団の両極に存在するやや特殊なデータ」と見ることができます。

さて、本稿の冒頭で「数学の試験結果には、どのような特徴がありますか?」という問いかけを例示しました。これには、上で述べた内容を踏まえ、次の観点から特徴をまとめ上げ答えればよいでしょう。

  • 全データを代表する中央値(箱を分割する水平線)は?
  • 代表的データの集まり(箱の中身)は、どのような範囲にある?
  • 中央値は「代表的データの集まり」の中で、どこ位置する(分割線は箱の中でどのように偏っている)?
  • やや特殊なデータの限界値(二つのひげの終端)は?
  • 外れ値(並外れた値、特殊なデータ)は存在する?

ただし、BPを解釈する上で注意すべき点もあります。それは、「箱」や「ひげ」の範囲内に、実際のデータが(数値的に)必ずしも等間隔で散らばっているわけではない、ということです。これは右の散布図から明らかです。
BPはあくまでも要約図なので、全データを4等分した、その中身まで細かく読み取ることはできません。しかし、散布図だけを見ていても、「具体的な特徴」は簡単には見えてきません。

データマイニングでは、散布図と箱ひげ図を併せてデータを眺め、集団全体の特徴を把握することが重要です。このことをぜひ記憶にとどめてください。

今回は、BPの理論についてまとめました。次回の記事では、Excel® 2010 を使ってBPを実際に描画したいと思います。

まとめ

  • 箱ひげ図は、「データの散らばり具合」を要約して示すグラフ
  • 箱ひげ図は、幾何学的な形状を有する三つの部品で構成される: (1) 箱(2分割された長方形)、(2) 箱から上下に延びる「ひげ」(直線)、(3) 外れ値(他からかけ離れた非凡な値)を示すマーカー
  • 「Tukey の hinge」を 使った箱ひげ図では、中央値・上側ヒンジ・下側ヒンジ・最大値・最小値を使い、部品の大きさ・長さを定める
  • 箱ひげ図の描画方法は複数存在するため、学術的な文書では方法を明記する
  • データマイニングでは、箱ひげ図と散布図を併用し、互いの利点を生かしながらデータの特徴を明らかにする

ver.0.0.0-120518
ver.0.1.0-120518
ver.0.1.1-120518
ver.0.1.2-120519 
2014-01-12: アイキャッチ画像を設置

 

カテゴリー: 教育 タグ:

はじめてのデータマイニング[2]: Excel® 2010 を使った散布図の作成

散布図(国語と数学の得点比較)の描画例

B.Everriteは、右に掲げた著書の第2章で、 E.Tufte の記述を引用しながら次のように述べています:

  • 2変数以上の関係を示す散布図(あるいはその応用図)は、グラフの中で最も重要である
  • 散布図のようなグラフは、存在するかもしれない「変数間の因果関係」を考察するよう、分析者に促す

(以上、筆者が訳文を要約)。

データマイニング(DM)において知見・法則性を得るためには、「変数間の関係」を把握しなければなりません。そこで今回は、分析の第一歩として、「2変数の散布図」をExcel® 2010 を使って描いてみます。


基本的な散布図

最初に、描画の「ゴール」となる散布図を下に示しておきます。

散布図(国語と数学の得点比較)の描画例

元となるデータには、前回の記事で示した「国語・数学・英語の試験結果」を用いています。Excel® を操作する際には、サンプルデータ を次のリンクからダウンロードしてください。通常はブック形式を選べばよいでしょう。

※CSVファイルを使用する際に、データ形式に関する警告メッセージを Excel® が表示するかもしれません。その場合、すべてのメッセージに対して肯定的に答え、強制的に開いてください。また、作成したグラフを保存するために、あらためてファイルを「Excel ブック形式」で保存しなおす必要があります。

散布図の描画手順

上図をどのように描くのか、本稿では手順全体を三つのステップに分割し説明します:(1) 空白の散布図を挿入し、データ系列を手動で追加する、(2) X軸・Y軸の「長さの比」を等しくする、(3) データの「散らばり」を把握しやすくするため、対角線を描く。

以下、ステップごとに動画を作成し、操作例を収めましたので、適宜参照してください。

(1) データ系列の追加

Excel(R) 2010 を使った散布図の作成[1/3]: 描画の基本 – YouTube

ここでは分析対象とは無関係の空白セルを選択し、あとから「系列」を手動で追加する、という方法でグラフを挿入してみます。こうすることで、X軸(横軸)・Y軸(縦軸)に割り当てる変数を自由に選択できるメリットが生まれます。また、自分自身でどの変数をいずれの軸に割り当てたかを明確に把握できます。なお、グラフを読み取りやすくするため、描画の「場所」を「グラフシート」としました。

(2) X軸・Y軸の調整

Excel(R) 2010 を使った散布図の作成[2/3]: 軸の縦横比設定 – YouTube

軸の設定は、たいへん重要な作業です。適切に調整すれば、「それまで見えなかった事実・傾向」が浮かび上がることがあります。逆に調整が不適切だと、錯覚によって誤解が生じるかもしれません。

ステップ(1) で描いたグラフ軸に目を向けると、いずれも100点を上限とする「得点」を扱っていますが、横軸の目盛幅が縦軸よりも広くなっています。このような場合には、目盛幅をそろえて描画するのが基本です。

動画では、凡例を削除、軸ラベルを追加、そして[軸の書式設定]コマンドからデータの最小値・最大値・目盛間隔・補助目盛間隔の設定を変更しています。

さらに2軸の長さを等しくするため、プロットエリアを正方形にサイズ変更しています。しかし、エリアのサイズを数値指定する・マウスで1:1の比率で描く―などの機能は、Excel® 2010には見当たりません。そこで、厳密さは欠きますが、「正方形に近い状態」にサイズ変更するテクニック(両軸の交点を起点とした正方形を描画して、それにプロットエリアのサイズを合せる)を使っています。ここで、下絵となる正方形は、[Shift]キーを押しながらマウスをドラッグすることで描画できます。

(3) 対角線の描画

Excel(R) 2010 を使った散布図の作成[3/3]: 対角線の描画 – YouTube

対角線(今回のケースでは、y=xの直線)を描画すると、データの偏りを把握しやすくなります。たとえば対角線の上方にプロットした「マーカー」が位置すれば、それは「得点が 国語<数学 の生徒」であり、下方ならば「国語>数学 の生徒」になります。

描画には、Excel® 2010の[挿入]―[図形]から「直線」を選択し利用する方法もあります。今回は正確さを求めるため、2点間を直線で結びました(詳細は動画を参照してください)。

冒頭で示した散布図には、動画の最終画面に対し、マーカーに変更を加えるなどの設定を追加してあります。さらに読みやすいグラフになるよう、いろいろ工夫してみてください。

余談ですが、対角線の描画中にアクシデントが発生しました。それは、「系列」を追加した後に、「グラフタイトル」が消失する―というもの。記事をご覧になっている皆さんも、「グラフエリア」上部に配置したタイトル「国語と数学の得点比較」が消える結果となったでしょうか。少々気になるところです。

何を読み取るか

入念に仕上げた散布図から、あなたならば何を読み取りますか。

本稿冒頭の図をみて、「全体として 国語>数学 の傾向にある」「2名の生徒は、群を抜いて数学の得点が高い」「7名ほどの生徒は、数学の得点が際立って低い」など、いくつかの傾向や事実が次々と浮かび上がってくるのではないでしょうか。散布図の役割は、まさにこのような意見・議論を引き出すことにあります。このような考察から、「数学の学習塾を立ち上げれば、儲かるかもしれない」という発想が生まれるかもしれません。

サンプルデータには教科(変数)が三つ存在しますので、実際には「国語・数学、国語・英語、数学・英語」のグラフをそれぞれ描画しなければなりません。それらを合せて読み取りながら、「変数間の因果関係」を考察することになります。

※3変数を同時に表現する「バブルチャート」を用いる方法もあります。また R を使うと、2変数を組み合わせた散布図を同時に描画する「散布図行列」を簡単に作成できます。これらは今後の記事で取り上げる予定です。

もちろん、グラフの読み取りには主観が混入しますので、ヒトによって意見が食い違うこともあるはずです。そのような相違を最小化し、客観性を高めるためにDMの統計手法が存在します。このことから、散布図に代表されるグラフは、「元となるデータ」と「統計手法」との橋渡し的な役割を果たすことがわかるはずです。

まとめ


ver.0.0.0-120506

カテゴリー: 教育 タグ: , , ,