機械学習の事前準備でよく使うPandasの機能

機械学習の事前準備でよく使うPandasの機能

機械学習の事前準備に使うPandasの機能

機械学習を行う前の事前処理として、よく使うPandasの機能をまとめています。
さらに詳細なコードはGitHubのコードを参考にしてください。

import文

とりあえず読み込んでおきたいライブラリ

import numpy as np
import numpy.random as random
import scipy as sp
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
%matplotlib inline
import sklearn
%precision 3

ファイルの読み込みと保存

CSVファイルの読み込み

data = pd.read_csv("data.csv")

read_csv()関数の引数は多く存在する。

read_csv(filepath_or_buffer:Union[str, pathlib.Path, IO[~AnyStr]], sep=’,’, delimiter=None, header=’infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=’infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar='”‘, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

主要な引数として、 sep :区切り文字の指定、headr=Noneでヘッダーの有無、encodingでエンコーディングの指定などができる。

エクセルで作成したCSVファイルは文字化けします。その際にはencoding=’SHIFT-JIS’を使用。それでもうまくいかない時はencoding=’cp932’を試して見ると良い。
タブ区切りのCSVファイルについては、pd.read_table()関数を使う。

エクセルファイルの読み込み

data = pd.read_excel('data.xlsx', sheet_name='sample')


CSVファイルの保存

data.to_csv('./data.csv')

データの確認

何行何列のデータか確認

data.shape

結果
(205, 26)


「有効データ数」「データ型」「メモリ使用量」などの総合的な情報を表示

data.info

結果
bound method DataFrame.info of symboling normalized-losses make … city-mpg highway-mpg price
0 3 ? alfa-romero … 21 27 13495
1 3 ? alfa-romero … 21 27 16500
2 1 ? alfa-romero … 19 26 16500
3 2 164 audi … 24 30 13950
4 2 164 audi … 18 22 17450
.. … … … … … … …
200 -1 95 volvo … 23 28 16845
201 -1 95 volvo … 19 25 19045
202 -1 95 volvo … 18 23 21485
203 -1 95 volvo … 26 27 22470
204 -1 95 volvo … 19 25 22625

[205 rows x 26 columns]


変数別の基本統計量の確認

data.describe()

結果

symboling while-base length width height
count 205.000000 205.000000 205.000000 205.000000 205.000000
mean 0.834146 98.756585 174.049268 65.907805 53.724878
std 1.245307 6.021776 12.337289 2.145204 2.443522
min -2.000000 86.600000 141.100000 60.300000 47.800000
25% 0.000000 94.500000 166.300000 64.100000 52.000000
50% 1.000000 97.000000 173.200000 65.500000 54.100000
75% 2.000000 102.400000 183.100000 66.900000 55.500000
max 3.000000 120.900000 208.100000 72.300000 59.800000

先頭からの表示

data.head()

結果

horsepower width height
196 114 67.2 56.2
53 68 64.2 54.1
0 111 64.1 48.8
97 69 63.8 53.5
112 95 68.4 56.7

後ろからの表示

data.tail()

結果

horsepower width height
70 123 71.7 56.3
198 162 67.2 56.2
120 68 63.8 50.6
50 68 64.2 54.1
178 161 67.7 52.0

列に複数の同じ値がある場合、それぞれの値の数を調べる

trans['列名'].value_counts()

表示結果


欠損値処理

欠損値の数の確認

data.isnull().sum()


欠損値の削除

data = data.dropna(subset=["kcal"])


欠損値を平均値で埋める

data = data['kcal'].fillna(data['kcal'].mean())


欠損値を0にしてそれ以外の文字列を1にする

data['event'] = pd.isnull(data['event']).map(lambda x : 0 if x else 1 )


教師データの分離と削除

教師データ分離

y = train_base["y"]


教師データ削除(説明変数作成)

X = train_base.drop('y',axis=1)


ダミー変数作成

ダミー変数作成

X = pd.get_dummies(X[["week","temperature"]])


標準化

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_standerd = scaler.fit_transform(X)


学習用データとテストデータの分離

ホールドアウト法

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.5,random_state=0)