【Python】コピーペースト用メモ | ムノログ 合同会社ムジンケイカクプロのITノウハウブログ
Pythonと機械学習

【Python】コピーペースト用メモ

python Pythonと機械学習

Pythonでよく使うコードをコピーペースト用に。

isnull

print(df['labelnum'].isnull())
print(df.isnull().any())

PandasでCSVをデータフレームに

df = pd.read_csv(f'{folder_path}2019-03-10.csv', dtype = None, delimiter = ",")

dfとしてPandasで読み込む。
後で分割してtrainとvaliとtestに3分割。

指定列の文字列の置換とNanの0埋め

df['着順1'] = df['着順1'].str.replace('失', '0')
df['着順1'] = df['着順1'].str.replace('欠', '0')
df['着順1'] = df['着順1'].str.replace('故', '0')
df['着順1'] = df['着順1'].str.replace('落', '0')
df['着順1'] = df['着順1'].fillna(0)

ValidationDataで予測結果を見る

多値分類 multiclass classification

va_pred = model.predict_classes(va_x)
va_pred = pd.Series(va_pred)
va_pred.to_csv(f'{folder_path}va_pred.csv')

ValidationDataで予測結果を確認する時。
よく2行目で、NumPyからDataFrameへ変換したことでエラーに遭遇してしまうのでメモ。

予測と結果のズレ「予測に0がない」

score = log_loss(va_y_check, va_pred, eps=1e-7)

ValueError: y_true and y_pred contain different number of classes 10, 2. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2 3 4 5 6 7 8 9]

print(va_y_check.unique())
[5 0 2 8 6 7 4 1 3 9]

print(va_pred.unique())
[7 3 4 1 5 2 9 6 8]

score = log_loss(va_y_check, va_pred, eps=1e-7)

0の発生確率が低すぎるので、予測結果に0がない。
そのため、ラベル数が違うのでエラーになる。

pred = model.predict_classes(test_x)
pred = model.predict_proba(x_test)
上記の差でもなる。
log_lossを使用する際に、確率を与える必要がある。
(誤認識かもしれないので継続して調べる)

よく忘れる実行時間の計測用

import datetime
print(datetime.datetime.now())

時間がかかる処理の前と後に挿入。
経過時間を出すプログラムは、あまり入れていない。

データ型を確認する

print(df['列名'].dtype)

型変換とエラー

print(df['result'].astype(int))

ValueError: Cannot convert non-finite values (NA or inf) to integer
非有限値(NAまたはinf)を整数に変換できません

NaNがあると考えて、

print(df.unique())

などでチェックする。その後、

NaNの0埋め

df['result'].fillna(0,inplace=True)

うちでよくあるパターン

年月日の列をdate型に変換

print(pd.to_datetime(df['年月日の列の名前']))

型変換

print(pd.to_datetime(df['年月日']))
#型をチェック
print(df['result'].dtype)

df['result'] = df['result'].replace('置換文字', -1)
df['result'].fillna(0,inplace=True)
print(df['result'].unique())

#型をintに。
print(df['result'].astype(int))
#型が上書きされない。
print(df['result'].dtype)

#上書き
df['result'] = df['result'].astype(int)
print(df['result'].dtype)

1次元のリスト

#Series シリーズに変換
df= pd.Series(df)
#一列だけのデータ

DataFrame データフレーム

df= pd.DataFrame(df)

プリント

#プリント
print(df)

フォルダパス

folder_path = '/content/drive/My Drive/XXXXXXXXXXXX/'

ユニークな要素のカウント

#要素のリストができる。
print(df.nunique())
#値をCSVにして、EXCELで眺める
df.to_csv(f'{folder_path}df.csv')
#print(df.unique())
print(df[0].unique())

置換

#複数条件 特定範囲 数値置換 サンプル
train_x.loc[(train_x['date_flag'] < 2000) & (train_x['date_flag'] >= 0), 'date_flag'] = 1
print(train_x["date_flag"])
print(train_x["date_flag"].nunique())

複数条件の時に、()で括ってやるルールがわからなくて、ハマってしまったことも備忘。

Pythonでの機械学習時のGPU利用

from keras import backend as K

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
sess = tf.Session(config=config)
K.set_session(sess)

参考にしたサイトさん、失念中。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 21 06:29:32 2020

@author: mkp
"""

import pandas as pd
import numpy as np

#A,B,Cの名前で3列、2行のデータ(DataFrame)を作成
df = pd.DataFrame([[1,2,3], [4,5,6]], columns=list('ABC'))

#同じ列数でデータ(DataFrame)を作成
df2 = pd.DataFrame([[7,8,9]], columns=list('ABC'))

#それを結合させる
df3 = df.append(df2)


#更に1行追加する
df.loc['add'] = [df.loc[0][0],11,12]
print(df)

データ(DataFrame)への列追加

addcolという列を、既存データフレームに追加する方法例。

df2 = df.assign(addcol="")

データ(DataFrame)を一行ずつ処理

for index, row in df.iterrows():
    print(row)
    print('\n')
for row in df.itertuples(name=None):
    print(row[1])
    words = m.parse(row[1])
    print(words)

一行目の一列目だけを処理していく例。
mecabの処理。

mecab-python

-Ochasen
(名詞など細かく分析データが出る)
-Owakati
(わかち書き)