はじめに
- データ分析実務で頻繁に利用するPythonのデータ分析手法まとめです
- ここでいう「実務」とは機械学習やソリューション開発ではなく、アドホックなデータ分析や機械学習の適用に向けた検証(いわゆるPoC)を指します
- 領域によっては頻繁に使う手法は異なるかと思うので、自分と近しい領域のデータ分析をしている方の参考になればと思います
- 今回は前処理でよく使うコードをまとめましたが、今後、データ集計編とデータ可視化編もまとめてみようと思います
前処理
Datetime型への変換:pd.to_datetime()
- pd.read_csvでデータを読み込むと日付がobject型となるので、datetime型へ変換する必要がある
- 日付データを入れると基本的に自動で年・月・日等を判断して変換してくれる
- 特殊なフォーマットの際はformat='%Y年%m月%d日 %H時%M分'といった形で指定する(なぜかmとdだけ小文字)
data['Month'] = pd.to_datetime(data['Month'])
# pd.to_datetime(data['Month'], format='%Y-%m')
数値データのカテゴリ化:pd.cut()
- 数値データからカテゴリデータ化に変換する(例:年齢を年代に変換)
- 数値データを入れて、bins=np.arange(0, 100, 10)でカテゴリのインターバルを指定する
- デフォルトだと右端がビンに含まれて、左端がビンに含まれないので、right=Falseとすると反転する
- 特に年齢を年代に変換する際は、right=Falseとしてないと、60才は50代になってしまうので注意が必要
data['n_interval'] = pd.cut(data['n'], bins=np.arange(0, 1000, 10), right=False)
定義した関数のデータフレームへの適用:Dataframe.apply()
- 定義した関数をデータフレームに適用して、データを変換する
- def~で処理用の関数を定義した後、Dataframe.apply(定義した関数)で処理する
def trans(x):
if x >= 300:
return True
elif x < 300:
return False
data['n_tf'] = data['n'].apply(trans)
Bool型をint型(1/0)、float型(1.0/0.0)へ変換
- 掛け算をするだけで変換されます
- int型に変換する場合は 1、float型へ変換する場合は1.0
data['n_tf_int'] = data['n_tf']*1
data['n_tf_float'] = data['n_tf']* 1.0
フォルダ内のCSVデータを一括読込:globとpd.read_csv()
- 前処理かは微妙ですが、データ一式を複数csvファイルで受領した際に、一括して読み込む際の方法
- globモジュールを利用し、csvファイルを正規表現で指定し、pd.read_csvで読み込んだ後、pd.concatで結合
import glob
files = glob.glob('*.csv')#フォルダ内のCSVファイルを取得
print(files)
['airline4.csv', 'airline3.csv', 'airline2.csv', 'airline.csv']
# リストで取得したファイル名をfor文で一つづつ読込み、縦方向へ結合していく
df = pd.DataFrame()
for file in files:
t = pd.read_csv(file)
df = pd.concat([df, t], axis=0)#縦方向への結合なのでaxis=0を指定
最後に
- 実際のビジネスでデータ分析をす際によく使う手法をまとめてみました
- 今後、頻出するコードがあれば随時アップデートします
- 冒頭にも書いた通り、今後、集計編とデータ可視化編もまとめてみようと思います
- 他にもよく使う手法あればフィードバック頂けますと幸いです