表計算ソフトを常用する人に勧めたい『10年戦えるデータ分析入門』

10年戦えるデータ分析入門』という本を読みました。

この書籍の趣旨は、データベース操作言語 SQL を使って分析を行いビジネスに役立てようというもの。

なぜSQLを使うのか (どうして Excel や R や C++ ではいけないのか) という根本的な疑問に対して、著者は第1章の冒頭から SQL を使うことが適当である事の明確な根拠を提示します。

第2章でリレーショナルデータベースについての導入が行われ、以後のページの大半を占める第1部は日常業務で便利なデータの探索や集計の具体的な実行方法の解説に費やされます。

普段は意図して触れていませんが私もソフトウェア開発に携わる者なので、これだけであれば本書に内容的な新規性を見出す事はなかったでしょう。

本書が特徴的であるのは、検索したデータを表示する際に「limit節で表示行数を絞る (48p) 」などの具体的なアドバイスや HAVING や GROUP BY などの「select文の節の実行順序 (77p) 」など、自明であると思われている (事が多い) が故に省略されがちな項目についても丁寧に記述されている点です。

先述の SQL (リレーショナルデータベース) を使う事が適当である理由とも合わせて、データ分析よりもむしろデータベースに初めて触れる人に最初に読んでもらいたい本であると思われた事が、本書を購入した実の理由です。

本書では「正規化」と「テーブル作成」という言葉こそ登場しますが、具体的な正規形や論理設計の詳細には触れられていません。まして通読中に物理設計やパフォーマンスを意識する事は基本的にはありません。

こうした割り切った構成で、集計表の作成など日常業務で頻繁に使われるデータの参照方法に特化している点に好感が持てます。

(知らずのうちであったとしても) データベースに触れない日はないほどデータベースが普及している今日では、そこに蓄えられたデータを参照して活用できるようになる事が第一で、新規にデータベースを設計する為の技術は必要になってから学べば良いからです。

そうした意味で第1部を読み終えた後に更にテーマを深化させた内容としてお勧めしたいのが、『達人に学ぶ SQL徹底指南書』です。

CASE式を使った条件分岐から始まり、行列変換、行間比較、集合演算など、SQL だけでここまで表現 (分析) できるのかと感嘆し、長すぎる 学生生活の中で何度も読み直したものですが、データ分析のためのSQL技術書という点で本書の延長上に位置する内容となっています。




一方、SQLを用いた分析システム構築について触れた第2部については、一転して概念の導入的な記述が増えます。一つ一つのテーマについて具体的に触れていると、それだけで分厚い本が何冊も書ける容量と高度な専門性が要求される内容となってしまい本書の趣旨が曖昧になるので、導入に留めて詳細は他の書籍に譲るという割り切りなのかもしれません。

第2部の内容のみでシステム設計ができる訳ではありませんが、重要な項目は一通り押さえられています。対して本書を通して触れられていない項目には、内部スキーマ、サイジング等のパフォーマンスに関連するもの、相関等の統計的な分析手法、分析結果の可視化と評価等があります。

そうした点を加味しても、本書に対する私の印象は通読するだけの価値があったというものでした。表計算ソフトを日頃から常用しており、入力する行数が増えてくるとパソコンの反応が鈍くなって埒が明かないと思う人にとっては、SQLの利用により劇的に作業効率が上昇する事も十分に考えられる為、本書を上梓して下さった著者に賞賛を送りたい気分でさえあります。

本書の参考文献には挙げられていませんが、経営視点からのデータ分析について私は個人的に『14のフレームワークで考えるデータ分析の教科書』をお勧めします。どのようなデータを収集し、何の目的に使用するかを具体的に記述している点が特徴です。

統計学については『統計学入門』と言いたいところですが、読み手を選ぶので『完全独習 統計学入門』あたりをまず一読される事を提案いたします。

機械学習については ベイズの 定番 Pattern Recognition and Machine Learning (Information Science and Statistics) も良いのですが、昨今の日本語書籍の充実ぶりも目覚ましいものがあります。

中でも個人的にお勧めなのが『言語処理のための機械学習入門 』です。

必要な数学的知識 (最適化・確率・情報量) から始まり、深層学習の登場以前の種々の手法について丁寧に解説されています。

OpenStreetMapからGarmin GPS用の地図ファイルを作成する

MAXXIS太魯閣国際ヒルクライム2016に参加する際、Garmin GPS デバイス用の台湾地図が欲しかったので、Open Street Mapから自分で作成する事にしました。

太魯閣や花蓮について一般地図よりも詳細な地図が欲しいところですし、今後、出張でイスラエルやメキシコに行く事があった際などに自分で何とかできるようになりたいので、この機会に覚えてしまいます。

使用するのは mkgmap と splitter というJavaのソフトウェア(というかライブラリ)です。

どちらも mkgmap 本家からjarファイル形式でダウンロードできます。

リンク先の本家ではパソコン上で作成した地図をデータ転送用のソフトを用いて GPS 端末に転送する方法を説明していますが、私はそんな面倒なことはしたくないので gmapbmap.img やら gmapsupp.img やらのファイルを作成して GPS 端末の Garmin ディレクトリ (フォルダ) 直下に置くことを考えます。

GarminのGPSデバイスは、このディレクトリに含まれている img という形式のファイルを自動的に読み込んで地図として表示します。

したがって、デバイス購入時から含まれている img ファイルを削除して、ご自身で作成された img ファイルで上書きしてしまえば、その地図情報が端末に表示されるようになります。

例えばこんな具合に。


そこで OpenStreetMap というフリーの地図データを素材に、この img ファイルを自作してしまおうという訳です。

そこでドキュメントを読み込んでいくと、どうやらOpenStreetMapの地図ファイル作成には *.pbf という形式のファイルが必要となる事が分かりました。

このPBF形式のファイルの入手は OpenStreetMapによると、複数あるリンク先のサイトの中からダウンロードできるとの事です。

配布元のサイトを幾つか抜粋すると、このような具合。



私が今回欲しいのは台湾の道路地図と花蓮の詳細地図なので、Geofabrikから Sub Region: Taiwan と Metro Extracts から Hualien のタイル (PBFファイル) をダウンロードします。

ファイルを確認すると、ちゃんとpbf形式になっていますね。




Wikiを見ていくと、mkgmap を使う前にpbfファイルを分割する必要がありそうなので、splitterを使ってダウンロードしたファイルを分割します。

これは mkgmap が対応できるデータの容量に限りがあるためで、一部の都市だけのデータを用いる場合など、対象のデータサイズが小さい場合には必要ないこともあります。

しかし、扱う範囲が北海道や九州、台湾ぐらいの大きさになる場合には、予め分割しておいたほうが無難です。

分割する際には Java の VM に 2GB 程度のメモリを割り当てる必要がありますので、実行前にお使いのパソコンの状態をご確認ください (と言っても最近の機種であれば、4GB以上のRAMが搭載されていることが普通なので、あまり問題になることはないかと思います)。

$ java -Xmx2048M -jar ~/lib/splitter-r437/splitter.jar --description="OSM TAIWAN" --output-dir=tmp/ ~Downloads/taiwan-latest.osm.pbf

ここで実行時にエラーを吐き出した場合、おそらくJavaのバージョンがあっていないので、シムリンクを張り替える必要があります。

$ export JAVA_HOME='/usr/libexec/java_home -v 1.8'

実行すると新たなファイルが幾つか生成されますが、このうち使うのは 632なんとか.osm.pbf というファイルです。

$ java -Xmx2048M -jar ~/lib/mkgmap-r3676/mkgmap.jar --route --add-pois-to-areas --bounds=bounds --index --gmapsupp *.osm.pbf

他のファイルを使うと様々な設定ができそうなのですが、取り敢えずはファイルを作成する事を優先するので、今回は割愛します。

何に使うのか、そのうち調べておかないとな(・。・;

mkgmapの実行が終わると、gmapsupp.img というファイルができますので、これをGarmin GPSデバイスの指定ディレクトリ(/Garmin)に置くとデバイスで地図を読み込めるようになります。

一緒に作成された 6324なんとか.img というファイルを試しにデバイスの Garmin ディレクトリに置いてみると、現在の gmapsupp.img の内容(日本地図)に加えて、台湾の地図も表示できる謎デバイスに
仕上がりました。

これってストレージ容量が許す限り、いくらでも重複して入れても良いのですかね。

Garminデバイス側の設定で、どの地図を表示するのか選ぶ事ができるのですが、たくさん有りすぎて、どれがどこの地図だか分からなくなりました。PC上で調べれば分かるので、転送する前に把握しておけば良いのですけどね。

これで一応は、台湾行きの準備が整いました。

Genymotionを起動するにはVirtualBoxが必要

※ この話題は Genymotion Version 2.6.0 版の話です。ソフトウェア更新等の環境の変化により、記述内容が適応できなくなる場合がございます。

当たり前に見えて、調べても情報が見当たらなかったので記述します。

最近、ご無沙汰していたMacBook AirにGenymotionをインストールしたところ、下記のようなエラーメッセージが表示され、ソフトウェアが起動しませんでした。

Virtualization engine not found. Plugin loading aborted.

これは何事だと、Android Studioを再インストールしたり、エラーメッセージで検索しても一向に解決策らしい情報を得られませんでした。

エラーメッセージを読んで行くと、どうやらVirtualBoxが必要だということが判明し、そう言えば、こっちのパソコンには入れてないなと思い返してインストールしてみたところ、あっさり解決しました。

いや、WindowsやLinux用の筐体は別に持っているのに、貧弱なノートで仮想マシンを動かして演算なんてしたくないですし…