備忘録メモ

私は非エンジニアで企画職です。
普段の業務ではエクセル、Accessがメインですが、
業務効率化とクオリティ向上のためにpythonを活用した
データ分析ができるようになりたいと考え勉強中です。

※将来的にexcelにpythonが組み込まれる未来も見据えて、excel,accessとの違いを意識してメモを残します
ExcelにPythonが搭載?

前提

前提としてpython/jupyterのインストールが必要
※私はanacondaを利用

pythonで実施する工程を決める

下記の処理がpythonによる威力を発揮する

  • 初期データ処理
  • 初期分析(EDA)
  • グラフ描画

逆にpythonで実施しないこと

  • アウトプットデータの保存
    • 分析し終わったらアウトプットに使ったdataframeをCSVに吐き出す
  • 最終的にアウトプットする表組みの作成
    • 表の表現、見せ方はエクセルの方が優れている
  • マスタ作成/マスタ管理
    • データ処理用のマスタはエクセルで作成/持っていたほうが応用が効く

excel/accessと比較した際のpythonを使うメリット/デメリット

メリット

  • データ→グラフ化が容易で、グラフを見ながら分析できる
    • Accessだと一度excelへ吐き出してからグラフ描画する必要があり、手間だしファイルが増える。
    • Excelも同様でどの表とグラフが一致しているかわかりにくいことも多々。
  • どのようにデータ処理したかが残るため、後で処理を追いやすい
    • 仕事も型化しやすい
  • ファイル数が少なくて済む/管理が楽
    • Access/Excelだと多くのファイル、シートが必要になるケースがあり、その管理が大変。
  • データ処理が早い
    • (Accessよりも早い、、、気がする。ただせいぜい数百万行くらいのデータ処理しかしないので大きく業務効率化はしない)

デメリット

  • 仕事が引き継げない/理解してもらえない
    • 周りにpythonでデータ処理しようなんて人は少ないため、仕事が引き継げない
  • ちょっとした作業はexcelの方が断然早い
  • 欠損値の補完や名寄せはエクセル/目検の方が早いケースあり
    • データを見ながらよしなに補完する必要があるとき/社名や商品名などの目検が必要なケースは、行数にもよるが目検の方が早いケースあり

excel⇔pythonのデータやり取り

excel/csvからの取り込み/出力

取り込み

import pandas as pd

#Excelファイルを読み込む 
df = pd.read_excel('sample.xlsx')

#シート名を指定する
df = pd.read_excel('sample.xlsx', sheetname='sample1')

#行を指定する
df = pd.read_excel('sample.xlsx', sheetname='sample1', skiprows=5, skip_footer=5)

#列を指定する
df = pd.read_excel('sample.xlsx', sheetname='sample1', parse_cols="A:C, E:H")  #A,B,C,E,F,G,H列を取り込む

# csvファイルの読み込み
df = pd.DataFrame.read_csv('sample.xlsx')

書き込み

import pandas as pd

# Excelファイルに書き込む
df.to_excel("sample2.xlsx")

取り込んだデータの整形

行の削除

#都道府県カラムの”東京”というデータのみ削除する
df = df[df["都道府県"] != '東京']  #東京というデータのみを選択して代入する

指定したデータの上書き

データの指定 → loc[行条件,列条件]
df.loc[(df.Age.isnull())&(df.Initial=='Miss'),'Age']=22

文字列の変換

#”東京”というデータを”TOKYO”へ変換する
df = df.replace('東京', 'TOKYO')

型変換

df.astype(int)
output_df = output_df.astype({'visitor':int})

列名の振り直し

rename

インデックスの振り直し

output_df = output_df.reset_index(drop=True)

列の順番の振り直し

df = df.ix[:,['東京','神奈川', "千葉",'埼玉']]

excelだったら・・・

vlookup(マスタの反映)

ピボットテーブル

df = pivot(,,,)

ピボットテーブル2(クロスタブ)

pd.crosstab(x,y,margins=True)

重複の削除

set()
df.drop_duplicates(subset=['A', 'C'], keep=False)

DataFrame や Series の重複データをチェック・削除-python
【Python】list, pandas.Seriesの重複を削除する

文字列の分割

df["sample"].split("a")

sumifs/countifs

gruopby()

excelだとできないがpythonだとスピーディにできること

ラベリング(ビニング/Binning)

データの値に応じて、分類を設定できる。
すなわち、[10,23,34,27,34,43,30,53]みたいなデータを
[10代、20代、30代、40代、50代]みたいに分けることができる

#cutは基準にそって分類する
df['Age_Range']=pd.qcut(df['Age'],[0,10,20,30,40,50,999],labels=['10歳未満','10代','20代','30代','40代','50代以上'])

#qcutは値の大きさ順にn等分する
df['Age_Range']=pd.qcut(df['Age'],7)

pandas の cut、qcut でデータ解析-python

縦持ち横持ち変換

for文をの記述で比較的かんたんに縦持ち・横持ちを変換できる
横持ちデータが意外と多く、ピボットテーブルでもその扱いはめんどくさい。

横持ち

City 2000 2001 2002 2003
Tokyo 1 2 3 4
Osaka 5 6 7 8
Nagoya 9 10 11 12


縦持ち

City Year Value
Tokyo 2000 1
Tokyo 2001 2
Tokyo 2002 3
Tokyo 2003 4
Osaka 2000 5
Osaka 2001 6

※データは以下省略

Excel ファイルをPythonで読み込んで整理されたデータフレームにする

(参考)

Python(Pandas/XlsxWriter)を使ってExcelファイルを操作してみる②

【Python】pandasでExcelを読み込む
Python で Excel ファイルを読み込む (xlrd)

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.