見出し画像

わざわざめんどくさいコード打ち込んでまでPythonでデータ分析する意味


6/24追記
Python触ったことないけど、JavaScript / Node.js環境でのプログラミングはやったことある方向けに、必要そうなものをまとめてみました。
私自身が検証したわけではないので参考までに。


 皆さま最近、データサイエンティストという職業をよく耳にされるかと思います。私個人としては、データを通して経営判断に一定の示唆を与えることを主な役割とする職種かと認識しています。技術の発達によりデータを取得することも、取得したデータを分析することもできる範囲が拡大してきたことが社会的な背景でしょう。
詳細なスキルセットなどは一般社団法人データサイエンティスト協会が以下の通り設定しています。

https://prtimes.jp/main/html/rd/p/000000005.000007312.html より引用

 そのような流れの中、データサイエンティストがPythonというプログラミング言語を利用しているということについて聞いたことがある方もいらっしゃるかと思います。

 私自身は一小売業の経営企画部門にて、簡単にデータを分析する程度であり、データサイエンティストというわけではないのですが、ここ半年程度Excelではなく Pythonを用いてデータを分析しています。

https://abcsupplychain.com/python-vs-excel/ 画像引用元

 Pythonはプログラミング言語なので、コードを書いてデータを操作します。従って、学習コストが高く扱えるようになるだけでも一苦労です。例えば、これから分析するデータの列名を見たいと思ったとして、

import pandas as pd

df = pd.read_excel('../data/filename.xlsx')
print(df.columns)

このようにコードを書かなければいけません。Excelであればスクロールすれば済みますよね。
また、A列とB列を足してその結果をC列に記載するとしても

df['C列'] = df['A列'] + df['B列']

いちいちコード書きます。
A列の名前を19年売上、B列の名前を20年売上に変えたいと思ったら

df = df.rename(columns = {'A列''19年売上''B列''20年売上'})

やはりコードを書きます。Excelだったら直接打ち込めば済む話なのに。余談ですが、この{ }を[ ] にしてしまうと動きません。エラーが出て怒られます。逆に[ ]で書く場合もあり、これを { }で書いてもエラーです。
 Python使ったことない方は以上の説明を読んだだけでも、面倒臭そう、Excelでいいやという感想を持たれるかと思います。

本記事では、ExcelではなくPythonでわざわざ操作するメリットとして、初心者ながらに気づいた点を忘備録的にまとめていきたいと思います。Python興味あるけど触ったことない、という方に少しでも私の経験が伝われば幸いです。

今回の記事ではScikit-learnによる機械学習モデルの作成など、そもそもExcelでは実装が困難なデータ分析については範囲外とし、あくまでもExcelでもできることをPythonとJupyter labで実施する場合のメリットについて記述していきます。

Pythonのメリット

やったことが後から見てわかりやすい

 皆さまこのような経験はないでしょうか

上司「そういえば、1年前にもらったあのデータのあの部分なんだけど」
私「はい、なんでしょうか」
上司「なんの数字をもとにして、どうやって算出したんだっけ?」
私「そんな昔のこと忘れたわ

 Excelで加工したデータは作業の履歴が残りません。引用元を別シートにして、数値引っ張ってくる関数を残しておいて、などなど後から見てわかるような工夫はしますが、日々の仕事に忙殺され1年も経ったら覚えていないことも多いかと思います。

 Pythonでは上に書いたように、全てコードを書いて処理していきます。引用元データも作業過程も、全てコードとして残っているので、読めばわかります。学習当初は見るのも辛かったコードが味方になってくれる瞬間です。
コードの横にはコメントを書いておくこともできます。後から見返すと非常にわかりやすいです。

修正がしやすい

 同じく、このような経験はないでしょうか

上司「先週〇〇部からもらったデータのC列なんだけど」
私「今度はなんだ」
上司「間違ってたわ」
私「全部やり直しかよ」

 基本的には数値を変更すれば、結果に全て反映されるように作業を進めていくかとは思います。ですが納期を優先して、場合によっては不可逆な書き方をしてしまい、結果としてデータに誤りがあった際に結構な量の作業をやり直さなければならないこともあるかもしれません。もしくは、操作ミスにより数値が合わず、やり直しになることもあるでしょう。

 そのような時でも、プログラム上のコードを少し遡れば修正が可能です。また、操作ミスをしたとしてもコード上の誤りがあればエラーが出て教えてくれるので、事前に気づくこともできます。これもエラーが友達になる瞬間ですね。

データを改竄してしまう恐れがない

私「あかん、間違ってローデータ全部上書きしてしまった」
私「データ全部取り直しや」

 Excelだったとしても作業するシートとローデータが入っているシートは基本分けていると思いますが、そこは人間ですのでヒューマンエラーも起こります。Pythonの場合、例えば上のコードについて

df = pd.read_excel('../data/filename.xlsx')
print(df.columns)

この場合、dataというフォルダに入っているfilename.xlsxというExcelファイルを呼び出し、中のデータをdfという変数に入れています。ポイントとなるのは、Python上での作業で、元のデータを触るわけではないという点です。これにより、ローデータを意図せず変更してしまう恐れがありません。

フリーズしてもデータが無くならない

私「ピボットテーブル組んだらめちゃくちゃ重くて画面が白いんだが」
私「テーブル同士を外部結合しないと・・・」
私「あっ」
上司「どうしたんだ?」
私「この1時間が無に帰しました」

 元のデータを操作しているわけではないというところと関連しますが、あくまでコードというテキストを書いているだけなので、フリーズして全てが無に帰すことはありません。最近はエクセルのオートセーブも充実していますが、完璧ではありませんよね。

 コードエディターにはオートセーブ機能がついており、単純なテキストファイルのため、かなり頻繁にオートセーブしてくれます
 また、仮にセーブできていなかったとしても、残っているのはコードであり続きが書きやすいです。Excelの場合、どこまで作業したのかを判断するところからスタートとなりますが、Pythonであれば単純にコードの続きを書くだけなので、スムーズに作業を再開できます

普段と違ったグラフを描ける

多少発展的な内容となりますが、こんなグラフをかけます。

イメージ図なので、下記グラフを実際に現したものではないです

 例えば、y軸を売上として売上大きい順に全ての店舗を並べ、その中で坪数が中央値より大きい店を赤、小さい店を青として色分けしてグラフを描く場合を考えます。Excelでもできなくはないかもしれませんが、なんだか大変そうです。Pythonで実行すると下記のコードのようなイメージです

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('../data/filename.xlsx'# A列: col_A に売上 B列: col_Bに坪数
median_col_B = df['col_B'].median() #坪数の中央値をmedian_col_Bとして定義

# 色分けする関数を定義
def color(value):
 if value < median_col_B
  return 'red'
 else:
  return 'blue'

# yを売上として、グラフの変数を設定
y = df['col_A']
x = range(len(y))
area = df['col_B']
color = list(map(color, area)) #中央値以上を赤、中央値以下を青

# 棒グラフを描く
fig, ax = plt.subplots()
ax.bar(x, y, color = color)

fig.show()

 コード書いた経験ない方は吐いてしまったかもしれませんが、慣れると呼吸と一緒です。空で書けるようになります。ただの棒グラフであればExcelでもPythonでもあまり変わりませんが、各データに条件をつけるとなると、Python使った方が楽ですね。

その他

一般的に言われている
・処理が早い
・複雑な処理がしやすい
なども実感していますが、文章で伝えることは難しいので詳細は割愛します。特に処理速度については実際に触って体感して頂かないと伝わりにくいかと思います。

Pythonのデメリット

もちろん良いことばかりではありません。学習コスト以外のデメリットも感じました

共有がしにくい

実際に起きたエピソードなのですが

同僚「この前いただいた部門別の集計表なんですけど、集計に使用したエクセルファイルとか共有いただけませんか」
私「ないよ」
同僚「ないの?どうやったの」
私「ぱいそん!」
同僚「・・・」
私「・・・」

ローデータをPythonで集計していくと、作業過程などをPython知らない方と共有することが困難になります。仕事の俗人化を生み出す原因になりかねないと感じました。

仕事が増える

あいつは早いからあいつにやらせようみたいなことが増えます。
私は仕事増えるの嬉しい人ですし、コード書くの好きですし、仕事でコード書く練習できるの嬉しいので構わないのですが、嫌な人は嫌だと思います。

浮く

魔法使いみたいな目で見られるようになります。出る杭になることに耐えられない人はやめておきましょう。
現在勤めている会社が多様性を認めてくれる会社で良かったと思います。

どうしたらできるようになるか

少しでも興味を持っていただいた方へ、Pythonでのデータ分析ができるようになるために、私自身が実践したことを記載させていただきます。私自身まだまだ勉強過程ではありますが参考までに。

最低限の文法の学習

そんなに時間かけなくていいです。完全未経験の方は、辛いかもしれませんが、無料教材がネットにたくさんありますので、勉強してみてください。

データ分析とは別に何か作ってみる

Pythonはプログラミング言語ですので、データ分析以外にもできることはあります。試しに何か作ってみましょう。私はAIカメラを作ってみました。

Excelを封印する

自分を追い込みましょう。

あとがき

ゆうて勉強大変だから機械学習しないならExcelでいいです。


この記事が気に入ったらサポートをしてみませんか?