日々精進

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

二つのndarrayがすべて一致していることを判定する

AI

ndarray A,Bがある場合、 (A==B).all() のようにする 参考: stackoverflow.com

PyCharmのwatchウィンドウでList内に含まれているオブジェクトを見やすくする

AI

PyCharmのwatchウィンドウの各変数のところに表示される文字列はstr(obj)の結果なので、 何もしないとこんな感じになる。 <Point object at 0x7F156BAE92E8> これをもっと見やすくしたい・・という場合、以下のようにstrを定義する。 class Point(object): def __str__(self): return f"{self</point>…

Pythonで==のoverride

AI

eqをoverrideする。 class Foo: def __init__(self, item): self.item = item def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ else: return False 参考: stackoverflow.com

複数のグラフをfor loopで描画する

AI

以下のように、plotを実行した後毎回showを実行する。 for y_ax in ys: ts = Series(y_ax,index=x_ax) ts.plot(kind='bar', figsize=(15,5)) plt.show() 参考: stackoverflow.com

DataFrameの列の文字列から一部を切り出して別の列を作る

AI

pandas.Series.extract を使う。例えば、Titanicで名前から敬称を抽出して別の列にするコードは以下。 train["Title"] = train["Name"].str.extract("([^\s]+)\.", expand=False).astype("category") 参考: note.nkmk.me

pythonでlistをlistに追加する

AI

listを繋げて一つのlistを作る場合はextendを使う。 list1.extend(list2) 参考: www.javadrive.jp

ndarrayをテキストで保存する

AI

JSONで保存したい場合は以下のようにEncoderを定義する必要がある。 class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, numpy.integer): return int(obj) elif isinstance(obj, numpy.floating): return float(obj) elif i…

pythonで特定のDirectoryのファイルをすべて処理する

AI

以下のようにos.listdirを使うとできる。 for f in os.listdir(f"{ROOT_PATH}/test/data"): print(f) 参考: stackoverflow.com

OpenCVを使おうとすると「ImportError: libGL.so.1: cannot open shared object file: No such file or directory」エラー

IT

以下を実行すると直る。 sudo yum install -y mesa-libGL.x86_64 参考: www.hakopako.net

docker-compose upを実行すると「no basic auth credentials」エラー

IT

原因は認証情報がAWS CLIに渡ってないこと。IAMロールには「AmazonEC2ContainerRegistryReadOnly」ポリシーが付いていればECRからImageをPullできる。 ただ、アクセスキーを使わない場合でも以下を実行する必要がある。 aws --region ap-northeast-1 ecr get…

WindowsのPyCharmで改行コードをLFにする

AI

PyCharmはWindows環境ではデフォルトで改行コードCRLFを使うが、 ファイルをサーバにアップロードして実行する場合、エラーが起きてしまう。 なので改行コードをLFにしたい。その方法は以下。Macで開発してればこんなことないのに。。 www.jetbrains.com

JupyterNotebookで「ValueError: attempted relative import beyond top-level package jupyter」エラー

AI

原因は上の階層のPythonファイルをImportできないため。多分セキュリティ上の理由でそういう仕様になっている。 しょうが無いのでJupyterNotebookファイルのサブフォルダに読み込むPythonファイルを配置した。 参考: stackoverflow.com

GitHub Wikiに画像を貼り付ける簡単な方法

IT

Issueに一度貼り付けて、生成されたURLをコピペする。詳細は以下参照。これなんでWikiでできないんだろ。。 akiyoko.hatenablog.jp

pandas.DataFrame.histで表示するヒストグラムを大きくする

AI

DataFrame.histを実行しただけだと、グラフちっさ!となるので以下のようにすると大きくなる。 fig = plt.figure(figsize = (15,20)) ax = fig.gca() train.hist(ax = ax) 参考: stackoverflow.com

.ssh/configを分割する方法

IT

接続先のサーバが増えてくると、.ssh/configがカオスになる。。 Includeキーワードを使うと、configファイルを分割できる。これだ!と思ったが、会社で使っているwindows10のWSLでは open-sshのバージョンが古く、Includeに対応してない。Ubuntuのバージョン…

gitでコミット済ファイルをignoreする方法

IT

IDEの設定ファイルはプロジェクト共通で使う設定をコミットし、個人的な設定が入ってもそれはコミットしない ということがしたくなる。コミット済のファイルを.gitignoreでignoreするよう設定してもignoreされない。。 各開発者が以下を実行すればローカルの…

pandasでランダムに行をsamplingする

AI

DataFrame.sampleでできる。 以下の記事では、x.ix[random.sample(x.index, n)] とすると最初の回答に書いてあるが 今はDataFrameがsampleをサポートしているのでこっちを使った方が良いっぽい。 二番目の回答に書いてあるけど、見落としそう。。 参考: sta…

sklearn.model_selection.cross_val_scoreのスコア計算方法

AI

色々あるのでタスクに応じて適切なものを選ぶこと。 scikit-learn.org 上記が公式ドキュメントだけど、なぜか社内からscikit-learnのサイトが表示出来ない。。ので以下を見ながら書いてます。不便。 qiita.com

LightGBMにはnative apiとscikit-learn apiがある

AI

scikit-learn apiはnative apiのWrapper。メリデメは以下。 scikit-learn apiのメリット scikit-learnのツールが使える。(Pipeline、cross_val_scoreなど) scikit-learnの各アルゴリズムとIFが揃うので、アルゴリズムの取り替えが容易。これによってアンサ…

LightGBMでどの特徴量がカテゴリ変数かを指定する

AI

LightGBMにpd.DataFrameを渡す場合、SeriesのdtypeがcategoryだったらLightGBMもカテゴリ変数として扱ってくれる。 なので、前処理の時に以下のようにしてdtypeを変換するとよい。 train["Pclass"] = orig_train["Pclass"].astype("category") 参考: blog.a…

PandasでFeatherファイルを読み込むと「TypeError: read_feather() got an unexpected keyword argument 'nthreads'」エラー

AI

pyarrowのバージョンの問題らしく、古いバージョンのpyarrowでは問題ないらしい。 解決策は feather.read_dataframe を使ってファイルを読み込むこと。 import feather df_raw = feather.read_dataframe('tmp/bulldozers-raw') 参考: forums.fast.ai

Feather形式でファイルを保存する時に「pyarrow.lib.ArrowNotImplementedError: halffloat」エラー

AI

原因はFeatherが裏で使っているParquetが半精度浮動小数点に対応していないため。 しょうが無いのでfloat32を使うよう修正した。 参考: github.com

「DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.」エラー

AI

原因は以下。 ・cross_val_score関数の内部に以下のコードがあり、想定外のクラス(カテゴリ)がないかをチェックしている。 ・その際、想定外のクラスが無ければdiffが空のndarrayになる。if diff: のところはndarrayが空の場合Falseと判定されることを利用…

pandasでcsvを読み込むときは型を指定する

AI

型を指定しないと、int64などの大きい型になりメモリを食うため。 Titanicのデータセットで実験した結果は以下。 型指定なし <class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): PassengerId 891 non-null int64 Survived 891 non-null i</class>…

JupyterNotebookをパスワードなしでログイン出来るようにする

AI

以下のようにオプションを渡すとパスワードを聞かれなくなる。 jupyter notebook --ip='*' --NotebookApp.token='' --NotebookApp.password='' 参考: stackoverflow.com

docker runしてもコンテナが起動しない

IT

正確には起動してすぐに終了する。原因はCMD ["/root/run.sh"] でサーバの起動スクリプトを実行していたが そのスクリプトの先頭に #!/bin/bash を書いてないことだった。なんと。。 参考: blog.sky-net.pw

draw.ioにはデスクトップ版がある

IT

draw.ioは便利だけど、Webアプリはセキュリティ上の問題で社内で使えないルールになってる。。という人に朗報です。 draw.ioはデスクトップ版があるのでこれを使えば良い。 www.moongift.jp 作図ツールとして便利だから社内で使えるようになってよかった。

PythonでJISコードを文字に変換すると意図した文字にならない

AI

↓の文字コード表では、JISコードの0x2422は「あ」という文字に対応している。 ash.jp 以下によると、JISコードとは「ISO-2022-JP」の別名 ja.wikipedia.org 以下によると、「ISO-2022-JP」に変換するにはiso2022_jpを指定すればいいように見える。 docs.pyth…

dockerコンテナにsshトンネル経由でポートに接続すると「channel 4: open failed: connect failed: Connection refused」エラー

IT

原因はDockerfileにEXPOSEを書いていないことだった。 EXPOSE 8888を追加してlocalhost:8888にアクセスするようにしたら直った。

ABCIは超安い機械学習環境

AI

ABCIは機能的には劣化版EC2のような感じのクラウド環境。 料金はEC2の同等インスタンスを比べて1/6ぐらいっぽいのですごい安い。 とにかく安く計算回したい場合はアリかもなぁ。後は物理マシンを買う場合と比較してどうか。 参考: abci.ai