アウトプット記録

いろんなことをアウトプットします

『Python実践データ分析100本ノック』やりました

2月半ばから末にかけて、やりました。

さくっと手を動かす感じならよさげです。

筆者スペック

  • 理系大卒
  • Pythonは半年程度業務でやった程度
  • データ分析・機械学習はnumpy、pandasの使い方をなんとなく知っている程度

本の内容

公式ページ

Python実践データ分析100本ノック - 秀和システム あなたの学びをサポート

データ分析の現場にあって入門書にないもの――それは、「汚いデータ」(ダーティデータ)です。本書は、データ分析の現場では、どんなデータに出会い、どのような問題が生じ、どう対応すればよいのかというノウハウを解説します。事前の加工(視覚化)から機械学習最適化問題まで、100本ノックをこなして、ビジネス現場で即戦力になれる「応用力」を身につけましょう! Pandas、Numpy、Matplotlibなど10個のライブラリを練習します。

データ分析を業務でどう使うか?どういうデータが有るのか?に重きをおいた入門書、という位置づけかと考えています。

概要

  • データ分析は可憐なものではなく泥臭い作業が殆ど

  • どうスコアを上げるか、ではなく、どんなデータをどう扱ってどこに着目するか、の大切さを学べる本です

  • 具体的な理論やアルゴリズムの技術はこの本の範囲外です

  • サクッと手を動かす入門書としてはとっかかりとしてよいのではないでしょうか。ここから好きな領域を学んで更に深堀していく、のがよいかと

章別の感想

1章

データ分析の基礎、という感じ。データ分析をかじった人なら一回くらいはやったことがあるんじゃないでしょうか。

キーワード:データの読み込み、結合、集計、matplotlibで可視化

2章

現場でありがちな「汚い」データを確認して加工する。欠損値の補完はデータを抜く、平均で埋める、とかはあるが、変わらないものだったら他のデータから補完する、という手も使える。(同じ商品単価を利用する)

2つのデータをJOINする際には違う列名でも結合できる、と。途中でデータを出力して、そこから再び分析を再開ができます。

ちなみに、こんなエラーが出るようになりました

D:\Program Files\Anaconda3\lib\site-packages\pandas\core\[indexing.py:189](http://indexing.py:189/): SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: [http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy](http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy)
self._setitem_with_indexer(indexer, value)

pandasのSettingWithCopyWarningを理解する (1/3) - 子供の落書き帳 Renaissance

調べると結構出てくるようだ。iloc[]を使っているからかな?

キーワード:データの揺れ、クレンジング、ダンプ

3章

1,2章の復習+データ活用するための着眼点、といった感じ。

集計したデータに対して、どんな特徴があるのか、どんな傾向があるのか、を把握するためにどこに着目してどう集計すべきか、がまとまっていました。

キーワード:レフトジョイン、ジョインキー

4章

これまで加工してきたデータに基づいて、クラスタリングと線形回帰を実施しました。この章でようやく世間がイメージするデータ分析に近くなってきた印象です。

ここでのポイントとしては、

現場では、精度の高いブラックボックスのようなモデルより、精度が低くても説明可能なモデルのほうが使われることも多い

だと思いました。コンペでは多少理由がわからなくても良い結果が出ることを求めるのに対し(あくまでイメージですが)、現場ではただいい結果が出るよりは、この数値やデータに大きな影響がある、を伝えてあげることが重要なのではないでしょうか。

直感的にあの数値が影響しそう、を客観的なデータ分析で伝えてあげる、がデータサイエンティストの役目なのではないでしょうか。

キーワード:クラスタリング、K-means、主成分分析、線形回帰、LinearRegression、説明変数、目的変数、過学習、回帰予測モデル

5章

最終的には決定木を用いて、求める結果に対して予測するモデルを生成します。

ただ、決定木を使う部分は章の後半であり、やっていることも正直アルゴリズムを使って、パラメータをいじる程度です。

真骨頂としては前半部のデータの加工の流れかなと。本文中にも、

「データ分析は、データ加工が8割」とよく言われますが、実際にこのように手を動かしてみると実感できるかと思います。

とあるように、いかに使いやすいようにデータを加工できるか、がポイントであり、この本で重視している点かなと。

キーワード:カテゴリカル変数、ダミー変数化、決定木

6章

最適化問題とよくキーワードの具体的な流れや課題設定の流れを確認できました。ただ、ネットワーク可視化は小規模なのであまり有用性を感じなかったというか、それで?と思ってしまいました。

(これまでこういった手の内容を知っていなかった、というのもありますが。)

キーワード:ネットワーク可視化、NetworkX、最適化問題、目的関数、制約条件

7章

6章の輸送最適化問題を最適化計算アルゴリズムを使って解きました。

その上で、その妥当性を「あの手この手で」で確認する作業でした。

何を調査するか、確認すべきかは、現場によって異なります。最も重要なことは、結果を鵜呑みにせず、常に疑う姿勢を持って現場の業務改善に望むことです。

キーワード:pulp、ortoolpy、線形最適化

8章

この章は面白かったですね。人間関係のつながりをネットワーク的に可視化。その上で、口コミで広がっていく様子まで可視化しました。

そうしたシミュレーションを定義してやってみる、のはわかりますが、この章では実データからシミュレーションで使えるパラメータを取り出す、ことをやっていました。

「ノック78:シミュレーションのために実データからパラメータを推定しよう」は実際のデータから必要なパラメータを推測していました。この手法が他のデータではどうするか、他のパラメータではどうするか?は結構骨が折れました。しかし、ここが現場では一番の肝になりそうな部分かなと。

9章

ここからは発展編として打って変わって画像識別です。

環境構築で結構詰まって進みが悪かったです。バージョンが悪いのかなんなのか全然終わらず・・・

python-opencvでQt plugin "cocoa"が見つからないというエラー - Qiita

人型を取得するアルゴリズムを使って動画上の人の数を取得しました。結果としてはわかりやすかったですが、ノイズもあり、なかなか簡単にはいかないなと。

画像識別の流れは把握できますが、解説がサラッとしすぎているので、不完全燃焼感がありました。。。

キーワード:OpenCVHOG特徴量、Dlib

10章

アンケートデータをもとに、形態素解析によってデータ分析、最終的には類似するアンケート結果の集計まで行いました。

こちらもざっくりと概要を掴む、という感じでしたが、なかなか面白い感じでした。

キーワード:正規表現形態素解析MeCab、類似文書の検索

全体を通しての感想

「おわりに」の文章の中で以下の一文が印象に残りました。

それぞれの現場で働く担当者さんとの対話を行うなかで、より良い解を見つけていき、必要であればその都度技術を学びながら解決していく姿が、真のデータサイエンティストの姿であると言えます。

データサイエンス、は一見華麗なように見えますが、実際業務に活かす場合には泥臭い作業がほとんどだと思います。

現場の課題はなにか?理想はどこか?そのギャップはどこか?ギャップを表すためにはどうするか?ギャップを埋めるためには何が必要か?データ分析でできるか?必要なデータはあるか?などなど・・・。

そういったことを解決してようやく、さあ分析してみようか、となるはずです。(もっとも、この本の例題のように、データがあるからなんかわかることない?ということも往々にしてありそうですが。)

データサイエンティストがきれいな仕事ではなく泥臭いものだ、ということがよくわかる本でした。