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 (わかち書き)
当サイトはリンクフリーです。
ご自身のブログでの引用、TwitterやFacebook、Instagram、Pinterestなどで当サイトの記事URLを共有していただくのは、むしろありがたいことです。
事前連絡や事後の連絡も不要ですが、ご連絡いただければ弊社も貴社のコンテンツを紹介させていただく可能性がございます。