日々精進

新しく学んだことを書き留めていきます

pandasのtransformメソッドで「ValueError: Length mismatch」エラー

欠損値の補完をする際にグループ毎に平均値を計算し、その値で補完したいという場合。以下のコードを実行すると「ValueError: Length mismatch」エラーがでた。

f = lambda x: x.fillna(x.mean())
df['Age'] = df.groupby('Group')['Age'].transform(f)

原因はAge列にNaNが入っている行があったため。 そこを値で補完してやると直った。

numpyで列をまるごと入れ替える

標準化するときなど、列単位で変換して入れ替えることがある。 以下のようにすると2列目を標準化して入れ替えられる。

# X2という行列がすでに定義されているものとする
scaled_X2 = np.copy(X2)
scaler = StandardScaler()
scaled_X2[:, 1] = scaler.fit_transform(X2[:, 1].reshape(-1, 1)).reshape(-1)

X2[:, 1].shape #=> (n, )になる。これは1次元配列で列ベクトルではないのでfit_transformには渡せない。
X2[:, 1].reshape(-1, 1).shape #=> (n, 1)になる。これは列ベクトルなのでfit_transformに渡せる。

参考: stackoverflow.com

webpackでビルドしたソースコードをデバッグ実行可能にする

webpackでビルドしたjsファイルはデバッグし辛くて困っていた。 source mapを生成すればconcat前のjsファイル単位でDevToolから開けるし、Breakpointも置ける。神か。 source mapを生成する方法は、webpack.config.jsに以下を追加するだけ。

module.exports = {
  devtool: 'inline-source-map',
  ...
}

デバッグが超快適にnなりました。

参考: qiita.com

stackoverflow.com

Webで写真を撮るボタンを作る方法

要件は以下。 ・ボタンをタップするとカメラが起動する ・カメラで写真を撮るとWeb画面に戻る ・Uploadボタンをタップすると写真をアップロードする

以下のタグを使うとカメラを起動し、写真を撮ることができる(Mobile Safari、Chromeで確認)

<input type="file" accept="image/*" capture>

参考:

HTML Media Capture Examples

webpack3でビルドするとビルドに10分ぐらいかかる

webpack --progress を実行してビルド時のログを出すと、 additional asset processing のメッセージが出たところで固まる。 原因はUglifyJsPluginが悪さをしていること。 とりあえずUglifyJsPluginを使わないようwebpack.config.jsの該当行をコメントアウトすればビルドは早くなる。 根本対応はwebpack4にバージョンアップすること。 バージョンアップするとwebpackプラグインもいくつかバージョンアップしないといけないのでちょっと大変だけど。。

参考:

github.com