ビジネスデータ分析をEXCELからPython中心に変更してわかった多くのメリット

今年に入ってから、前々から行いたかったデータ分析のPython移行に本格的に取組み始めてやく3か月が経過しました。経営コンサル業界にいるとデータ分析はどうしても全員が使えるExcelが中心となってしまうのですが、徐々に環境を整えようやく軌道にのってきたので状況をまとめたいと思います。

当初はEXCELでできない機械学習などを行いたいと思って使い始めましたが、だんだんそれ以外のメリットが見えてきました。当記事では、そんな使ってみてわかってきたPythonのメリットを紹介していきます。

なお、現在使用しているツールはすべて無料で使える(オープンソース)、または初期投資がかからないクラウド環境(AWS)で構築ができるものとなっています。データ分析をPythonやRで行うようにしたいんだけど、「それEXCELじゃダメなの?」と上司に言われる方のお役に立てると幸いです。

EXCEL & オンプレ中心のデータ分析業務を、Python & クラウドに移行

Python移行だけではなく、いろいろな所に手を加えたので以下に現在の状況をまとめています。1

移行内容
(移行中のものを含む)
Before
従来のデータ分析
After
現在のデータ分析
データ分析(クライアント) EXCEL, SQLServer Management Studio(SSMS) Python(Jupyter Notebook), 様々なPythonパッケージ
データ分析(サーバ) SQL Server AWS EMR(Cloudera Impala)
データ管理 共有フォルダはあるものの, 分析作業用のEXCELは随時共有(メールなど) すべての分析結果をGitにアップロード
タスク・知識管理 (口頭・メールなどにもとづき個人が管理) Redmine

Before

  • 数億行のデータをローカルのデータ分析用サーバ(MS SQL Server)に格納(環境構築はチームの専門のエンジニアに依頼)
  • 現場チームは会社PC(Windows7)にインストールしたクライアント(SQL Server Management Studio)からSQLクエリを実行し、出力結果をEXCELにコピーしEXCEL上でデータ分析を実施。分析結果はPowerpointに貼り付けて資料化。レポートとして出力する場合にはVBAを使用することも。
  • データ分析に使用したSQLクエリやEXCELファイルは各担当者が管理をするため、他のメンバーに分析ロジックを共有することが困難であったり、チームにノウハウが蓄積せずクオリティが担当者依存になってしまうことが課題に。
  • PJTに関するPowerpoint以外のドキュメントが残っておらず、取り組みテーマとしてホットなもの以外のドキュメントが残らない構造。

After

  • 一部のビッグデータが、ローカル環境で扱うにはあまりに膨大になってしまったためクラウド(AWS)の活用を始める。
  • 軌道に乗ってきたため、ローカルの分析用サーバで管理していたデータを徐々に移行(AWS基盤の構築管理はニアショアの専門エンジニアに依頼)
  • 現場チームは会社PC上に構築したPython環境(Jupyter Notebook)上でPythonコードとSQLを書き、AWSから取得したデータをもとに分析を行う(主にpandasを使用)
  • 必要に応じて、データ分析の結果はグラフ化(matplotlib)しPowerpointに添付, レポート化(Excelの場合にはxlwings)。
  • データ分析で作成したファイル(主にJupyter Notebook ファイル)はRedmine上のGitで管理し個人で作成したデータ分析もチームで共有。
  • Redmine上のWikiを活用するようにして、各MTGで作成したPowerpoint以外にもメンバーの暗黙知を徐々にドキュメントとして残すように。(これはまだ取組み始めたばかり。)

Future

  • ビッグデータ運用基盤としてはimpalaよりも、RedshiftやSpark on AWS のほうが将来性が高そうなので、機会を見つけてそちらも試してみたい。
  • Redmineのタスク管理はまだまだ使いこなせる部分がありそう。
  • チーム(現場チーム&ニアショアインフラチーム)の交流をよりスムーズにするためにSlackなどのチャットツールを入れてみたい。(これはおそらく会社の許可が必要)

データ分析をPythonで行うメリット

実際に、上記のような移行作業を試行錯誤を行いながら行っていく中で、データ分析をPythonで行うことのメリットが見えてきました。23

メリット1: Excelではそもそもできないデータ分析が可能に

これはわかりやすいことですが、EXCELの機能ではできないことがPythonならできるということがやはり多く有ります。

100万行を超えるデータを取り扱うことができます。EXCELでもアドインを使えばより大規模なデータを使えるアドインも有るようですが(参考:PowerPivot) 、以前使った際には重くて使い物になるレベルでは無いという印象。

Pythonは(特に欧米の、)アカデミックな研究で使われるケースが多く、データ分析のための追加パッケージがものすごいスピードでオープンソースで開発されています。例えば有名なものだと下記のようなものがあります。

英語ページですが、下記リンクのハーバード大学のデータサイエンスの講義では、Pythonによるデータ分析を中心に講義をしており、データの集計・加工だけではなくscikit-learnによる機械学習や,BeautifulSoup4によるWebスクレイピングも取り扱っているようです。

参考: ハーバード大学のデータサイエンス講義: CS109 Data Science

Python自体はデータ分析専用ではなく汎用のプログラミング言語なので、Webサービスを作るなどその他様々な事ができます。

メリット2: 誤操作によるヒューマンエラーが激減

EXCELは直感的に操作しやすいインターフェースで誰もが使いやすい一方で、よく「計算式の参照先が一つずれていた」,「操作しているうちに、誤ってキーボードに触れてしまいデータを書き換えてしまった」といったようなヒューマンエラーが頻発してしまいすが、Pythonではデータは直接編集するには一定手順が必要ですし、引数となるデータもマウスではなくコードで指定するので、そのようなミスが激減しました。

メリット3: ロジックの可視化によるチームレベルの底上げとコードの再利用率の向上

いくつかメリットを取り上げていますがこれが一番大きいです。EXCELでは構造上どうしても計算ロジックが各セルに埋没してしまい、データに対してどういう操作をしているかを理解するのに相当なコストが掛かってしまい同じような計算をする場合であっても、一から作りなおすということが多い気がします。

また、EXCELだとロジックの共有が難しいので、同僚がどのようにデータ分析をやっているかをどうしても共有しづらいのでコンサルタントのデータ分析業務はは一人屋台方式になりがちです。Pythonを使うことで、Gitを利用してデータ分析のロジックの記述であるコードを全員が共有することで、一人屋台方式から皆でデータ分析に関するノウハウを共有できる体制になりつつあります。

通常複数人で行うシステム開発に対して、データ分析は1人or2人程度で行うことが多いのでまだまだこの辺りのノウハウな発展途上だと思います。システム開発で使われるようなツールや方法論から良いところをデータ分析の領域にも取り入れていきたいです。

同様の理由で、ロジックをデータから切り離せるので計算基準に変更があった場合や、一度作ったロジックを再利用したい場合であっても手戻りが少なくなります。一回一回の作業がEXCELのほうが短く終わるケースで合ったとしても、内容の近い分析を複数回行う場合などコードの再利用のメリットは極めて大きいと思います。4

メリット4: より優秀な人を獲得できるように

これはどちらかというとクラウドを使ったことによる部分もかなり大きいのですが、Pythonを使い、Gitなどによるスムーズな共有が出来るようになり、国内地方リモートチーム(ニアショア)でのデータ分析が実現可能になりました。最近はコンサル業界がかなり人で不足なのでそういった形でより柔軟にチームを組めるようになるメリットはかなり大きいです。

また、技術的に新しいことに取り組むということがスキルアップにつながるので、より優秀な人が社内・社外から獲得しようとする場合も、今後効果を発揮するのではないかと考えています。

最後に

まだまだこのような体制での本格的な運用は始めたばかりで毎日試行錯誤ですが、すでにかなりの手応えを感じており、今後も更なる生産性の向上が期待できます。当初はメリット1に記述した、機械学習などのEXCELでできないことを出来るようになることが狙いでしたが、やっていく中他のメリットが見えてきました。今後も使い込んでいろいろなケースで利用できるようになっていきたい所です。

  1. もちろんEXCELを完全に排除したわけではなく、目的に応じて活用しています。 

  2. 必ずしもPythonだけのメリットではなく、データ分析言語のR やその他言語でも実現できることもあるかと思います。 

  3. デメリットは学習コストの高さ。 

  4. システムエラーを起こさないコツは、なるべくコードを書かずに再利用することだそうです。EXCELファイルもたくさん作るとどうしてもエラーが紛れ込む確率は高くなってしまいます。 

Written on March 27, 2016