バイアスと戯れる

Rと言語処理と(Rによる言語処理100本ノック終了)

失われたtidyを求めて

はじめに

 この記事は「tidyポエム Advent Calendar 2017」の7日目の記事です(ほんとうにポエムです)。

adventar.org

続きを読む

『グラフをつくる前に読む本』を読みました(恵贈お礼)

前書き

 グラフをつくる前に読む本 一瞬で伝わる表現はどのように生まれたのか

ビジネスデータ分析では特にそうなのですが、分析して終わりではなく、分析してからが始まりです。良い結果にしろ悪い結果にしろ、再現性はあるのか、偶然なのか、何を変えれば良い結果につながるのか、そうした検討事項を次の施策で検証するという作業を何度も繰り返して、より良い状態を作り上げていきます。 (P231)

 付き合いのある編集さん経由で、著者より「分析に関わる方に読んでもらいたい」という旨を伺い、ご恵贈いただきました。
 この場を借りて改めて感謝いたします。ありがとうございます。
 著者の松本さんと直接面識はありませんが、SNSを通じてやりとりをさせてもらっており、著書を出版されたことを喜ばしく思います。

感想

 さてこちらの書籍は、『グラフを良く見せるためのテクニックではなく、なぜそのグラフを使うのかという本質にせまります』という記述がある通り、可視化のテクニックではなく、「こういうデータを伝えるにはこういうグラフが望ましく、その際にはこういうことに注意しましょう(理由はこの方法がこういう経緯で生まれたものだからです)」という心得をまとめた内容になっております。
 題材はExcelで描けるグラフが取り上げられており、Excelに慣れ親しんでいるビジネスアナリスト向けの読み物と言えます。
 経験的ないし先人から注意をされたデータ分析者(またはデータサイエンティスト)は、データを可視化する際には至極当然に心がけている暗黙知が言葉で説明されており、異なる背景とスキルセットを持つ方々が混在する分析業務の溝を埋めているように感じられて好感が持てるでしょう。

 データの可視化は誰もができてしまうだけに様々な思惑が込められてしまいますが、「どうして彼らはこういう表現をしない・避けているのか」や「このグラフ表現はおかしい」など、読み進めていくと納得感とともに持てるようになります。
 そのため多くの方々に手に取っていただきたいですが、個人的には特にビジネスアナリストの方に読んでいただきたいと思います。

 各章の構成は「グラフの説明、データによる例示、歴史」となっており、中でもグラフの歴史は秀逸です。非常に丁寧に調べられており、勉強になりました。逆に興味を抱けない方などは、もしかしたら向かないかもしれません。また、特別付録としてデータジャーナリズムの話がありましたが、興味深い話題ですので付録ではなく別書籍にまとめられた方がいいのではないでしょうか。
 こちらの書籍の一部や裏話などが著者が属するマーケティングメトリックス研究所(マメ研)のサイトで読めますので、ご興味を持たれた方は一読することをオススメします。
- 「グラフをつくる前に読む本」棒グラフ(作り方編)を一部先行公開!」
 https://www.mm-lab.jp/books/the_book_to_read_before_creating_a_graph_about_bar_graph/
- 「本が大好きな人へ。1冊の本が出版されるまで作者目線でまとめてみました」
 https://www.mm-lab.jp/books/until_the_book_is_published/


メモ

 自分用のメモとして、本著内の記載を下記に列挙していきます。

  • 折れ線グラフ

    折れ線グラフの特徴は「傾きによる変化の発見」です。 (P65)

  • 円グラフ

    円グラフは合算して必ず100%にならなければいけません。 (P71)
    そもそも「円グラフ」は作ってはいけない! (P80)
    総量がわからないので違う円グラフの内訳と比較できない (P80)
    時系列データを用いた時間経過による内訳の推移を表現できない (P80)

  • レーダーチャート

    レーダーチャートが一番得意な表現方法は、複数あるデータ項目の「比較」です。全体と部分を同時に比較しているのです (P102)
    レーダーチャートの中に描ける線は1ではありません。図1のように2つでも良いですし、3つ以上でも可能です。ただし上限は6個程度でしょう。線が多すぎると、同じようなデータが並んだときに見づらくなるからです。 (P110)

  • ヒートマップ

    データ項目を比較するだけなら棒グラフが適しています。棒グラフはデータ項目の比較には適していますが、全体を俯瞰して「まんべんなくデータが散らばっている」、もしくは「データが特定の項目に偏っている」と把握するのには適していません。 (P122)
    ヒートマップは必ず複数のデータを対象にして色を塗ります。目安として5つ以上が望ましいと言われています。 (P123)
    ヒートマップは数字を色に置き換えて、「どのデータ項目にデータが偏っているだろうか?」と考えます。つまりヒートマップが一番得意な表現方法は量の「偏り」です。 (P123)
    細かく比較するのにはヒートマップは適していませんが、全体のデータの傾向を一瞬で把握するのには最適なのです。 (P124)

  • 散布図

    散布図が一番得意な表現方法は、2つのデータ項目の「関係」です。 (P151)
    単なる疑似相関です。年齢を重ねるにつれて責任ある仕事も増えて、賃金が上昇しているのです。一方で、年齢を重ねるにつれて身体を悪くして、悪性新生物が発生しやすくなっているのです。つまり「加齢」という他の要因によって、あたかも賃金の上昇と悪性新生物による死亡率に相関があるように見えるのです。 (P158)

  • 積み上げグラフ

    積み上げグラフが一番得意な表現方法は、データ全体の「内訳」の「比較」です。 (P169)
    「高さ」を比べて特定のデータ項目のデータの違いを感覚的につかめるのが積み上げ棒グラフの特徴です。(P169)

  • 面グラフ

    円グラフには「時系列データを用いた時間経過による内訳の推移を表現できない」というデメリットがあります。そのデメリットは、面グラフを使えば回避できます。 (P179)
    そもそも面グラフとは、折れ線グラフを拡張させたグラフです。基本は折れ線グラフの表現をしているので、時間経過による「推移」を把握できます。だから、円グラフの「時系列データを用いた時間経過による内訳の推移を表現できない」というデメリットを解消できるのです (P181)
    面グラフは必ず複数の時点、面の中に複数のデータ項目を描きます。面の内訳が1つだけ描かれる面グラフは単なる折れ線グラフです。そんな面グラフを目にする機会はないでしょう。面の推移を比べて「全体に対して占める割合が大きい(小さい)データ量はどのように変化するだろう?」と考えます。つまり面グラフが一番得意な表現方法は、データ全体の「内訳」の「推移」です。面グラフは、データ(数字)の総量と内訳の変化を最もわかりやすく図で表現できます (P183)

参考

 可視化のテクニックは、下記の記事などを参考に。


気になった点

  • 選ばれているデータが少々恣意的に感じられた
     実際にデータ分析で可視化手法を選ぶときはデータがあってそれに合った可視化手法を選びますが、書籍では逆に可視化手法に合うデータを選んでいるように感じられました(特に付録のデータジャーナリズムとの繋がりを考えて、政治に関わりそうなデータを選んでいるようにも)。
     また、「再現性を大事に」という言葉あったので、本書で利用したデータを公開していただけると様々な議論ができて良いかと思いました。

  • 散布図の扱いに関して
     棒グラフや折れ線グラフは代表点の傾向を見るのに対して、散布図はデータ全体傾向を俯瞰するために良く使うため、付録などでの別枠で扱った方が良かったかと。データに応じて可視化方法はある程度限定されますが、どういう特徴を持つデータかまだわかっていなかったり、どのように表現したら良さげか、ストーリーを検討する段階で傾向を把握したいときなどに散布図が非常に有効な可視化方法になると思います(前段階での可視化とでも表現すればよいでしょうか)。

  • ナイチンゲールの話
     円グラフの章で活用したという話が触れられており、有名な話ですが知らない人にはウケが良い逸話です。
     ただ、説得できれば結果オーライ的な有名例があるという風に捉えられかねないので、ここで出さなくてもよいと思いました。


広がる宇宙の話

概要

 この記事はR Advent Calendar 2016の14日目の記事です。Rで言語処理する話ばかりしているので、今年は宇宙の話をします。
 急速に広がる宇宙。R界の「宇宙」といえば、tidyverseですね。ということで、CRAN巡りまたはRパッケージ探しが趣味である自分がtidyverseの流れを受けたと「勝手に」考えたライブラリをご紹介します。また、参考ページも併記するので、コードや詳細についてはそちらをご参照ください。
 なお、そもそもtidyverseが何かわからないという方はまず下記のサイトを一読ください。

続きを読む

Japan.R 2015にてLT発表しました

概要

 記事を書くのが遅くなりましたが、12月5日に開催されたJapan.RのLTセッションにて、『Rと形態素解析』というタイトルで形態素解析の説明と、Rで形態素解析ならびにわかち書きする方法を紹介しました。総ページ数80オーバーでしたが、なんとか無事に終えることができました。運営の方々、参加者の皆さん、お疲れさまでした。
 今回は参照しやすいように資料内に書いたRコードを、ブログに記述しました。

続きを読む

"An R package for creating and exploring word2vec and other vector models"を試す(+ GloVeと比較)

前書き

 Rでword2vecが適用できるという{wordVectors}がGitHub上に公開されたので、早速試してみました(+「言語処理100本ノックの課題でGloVeによる結果と比較」)。
 オリジナルのword2vecのC実装を.C()でラップした{tmcn.word2vec}を修正したもので、モデル構築のパラメータを変更できる点や、類似度や似た単語を抽出する関数群が定義されております。
 下記がそのパッケージのGitHubリンクです。

続きを読む

Rによる言語処理100本ノック後半まとめと全体での総括

はじめに

 Rによる言語処理100本ノック(2015版)を最後まで終えることができたので、後半のまとめ記事と全体総括を書きました。Rの実行結果は下記のRPubsにアップロード済みですので、ご確認ください。


 RmdファイルはGitHubにあります(READMEも修正)。
github.com

続きを読む

第51回R勉強会@東京(TokyoR)にてLT発表しました

概要

 10月10日に開催されたTokyoRのLTセッションにて、『Rでいろんな言語』というタイトルでRからPythonを呼ぶパッケージ{PythonInR}を紹介しました。発表の途中でスクリーンが砂嵐になるというトラブルに見舞われましたが、なんとか無事に時間内に収めることができました。
 また、公開したスライドに未掲載だった{PythonInR}を使ってChainerを呼び出したコードを手直ししたので、メモ書きとして残しておきます。

続きを読む