日々精進

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

AI

CenterNetをインストールしようとすると「nvcc: command not found」エラー

AI

CenterNetのインストール手順にmake.shを実行する手順があるが、これを実行すると「nvcc: command not found」エラーが発生した。 https://github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md nvccはcudaのコンパイラで、cuda toolkitに含まれ…

conda env create~を実行すると「ERROR: Could not find a version that satisfies the requirement 」エラー

AI

原因はメッセージの通り指定したバージョンがないことだけど、今回conda env createで使ったファイルは既存の仮想環境から exportしたものだったのでびっくりした。 pythonだとパッケージのバージョンが消えることがあるのか。。 今回はpytorchの0.4.1.post2…

pip install pycocotoolsを実行すると「gcc: error: pycocotools/_mask.c: No such file or directory」エラー

AI

pip install cython でcythonをインストールすると直る。 参考: github.com

pythonでログにstacktraceを出力する

AI

以下のようにexc_info=Trueを指定すると例外をraiseしたところからのスタックトレースを出力してくれる。 catchした例外オブジェクトを渡さなくてもいいんだね。 logger.info("hmm", exc_info=True) 参考: qiita.com docs.python.org

SQL Alchemyで実行されたSQL文をログに出す

AI

以下のようにconfigを設定すればいい。 app = Flask(__name__) app.config["SQLALCHEMY_ECHO"] = 1 他にも色々とflaskに設定できる項目があるので詳細は以下参照。 flask-sqlalchemy.palletsprojects.com

pandasのto_csvで出力したcsvファイルをエクセルで開くと文字化けする問題

AI

原因はto_csvで出力されるファイルがBOM無しUTF8で、エクセルはBOM付きでないと開けないため。 毎回BOMを付けるのは面倒なので、エクセルでしか見ないならto_excelでエクセルファイルを開いた方が楽。 pandasから読み込むのもパッケージを入れればできる。 …

DataFrameのデータを見やすくログに出す

AI

tabulateパッケージを使えばできる。 でもコードは以下のように長くなる。。まあ普段はprint(df)でいいかな。 print(tabulate(df, headers='keys', tablefmt='psql')) 参考: stackoverflow.com

pd.cutの端っこの閾値を∞にしたい

AI

以下のようにfloat("inf")を閾値にすればいい。 pd.cut(df, [0, 1, float("inf")]) 参考: stackoverflow.com

Jupyterで%autoreloadを設定していてもモジュールが再読み込みされない

AI

原因は%autoreloadの前にimportしていたため。 # これはだめ import my.module %load_ext autoreload %autoreload 2 # これはOK %load_ext autoreload %autoreload 2 import my.module 参考: qiita.com

pythonのdictから値を取得する時に、値がなかったらエラーでなくNoneが返るようにする

AI

dictionary[key]のようにアクセスするとkeyがなかった時にエラーになるが、 dictionary.get(key)でアクセスするとkeyがなかった時にNoneが返るだけでエラーにならない。 参考: stackoverflow.com

Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」エラー

AI

原因はout of memoryなので解決策は メモリを増やすか、メモリ使用量を減らすか。 因みにPandasでデータ処理する場合、処理するデータの5倍ぐらいのメモリを用意することが推奨されているらしい。 とりあえずデータ型をより小さいものにすることでメモリ使用…

matplotlibで目盛りを整数にする

AI

以下でできる。 ax.xaxis.set_major_locator(MaxNLocator(integer=True)) 参考: stackoverflow.com

datetime型のSeriesをstrに変換する

AI

Series.dt.strftimeを使えばフォーマットを指定して文字列にできる。 all_data['Order Day new'] = all_data['Order Day new'].dt.strftime('%Y-%m-%d') 参考: stackoverflow.com

DataFrameのgroup毎に連番を振る

AI

C列にグループ内での連番を振りたい場合は以下のようにする。 df['C'] = df.groupby(['A','B']).cumcount() 参考: stackoverflow.com

DataFrame.plotを実行すると「ValueError: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 12, 'y' with size 12.」エラー

AI

原因はDataFrame.plotメソッドの引数としてkind="scatter"とcolor=Noneを渡していたこと。 kind="scatter"がlineやbarなら問題ないけど、なぜかscatterだけcolor=Noneを渡すとエラーになる。。 この現象が以下のIssueで報告されているものかはっきりわからな…

Pandasでresampleした時にnaをゼロ埋めする方法

AI

resampleして新しく行が挿入された場合、そこの値はNaNになる。 それをゼロにしたいがbfillなど近くのサンプルの値で埋める方法しか見付からなかった。。 色々やってるとsum()を実行すると0になることがわかった。例は以下。 summary = summary.set_index(DA…

int型のSeriesにNaNを設定したい

AI

dtypeがintだとNaNを代入出来ない。astype("Int64")でInt64型に変換するとpd.NAをセットできる。 参考: stackoverflow.com

JupiterLabでエディタを縦に分割する方法

AI

タブを右クリックしてNew View for Notebookをクリックすると分割出来る。 参考: discourse.jupyter.org

progress_aggregateにdictを渡すと「TypeError: 'dict' object is not callable」エラーになる

AI

これはtqdmのバグ。以下で報告されているがまだ対応されてない。。 github.com

JupyterLabで表示した画像をクリップボードにコピーする方法

AI

JupyterLabで表示した画像のコピーが出来ない・・と困ってたけど、Shift+Clickでブラウザ標準のコンテキストメニューが出るので、そこから「画像をコピー」を選択するとできた! JupyterLabの右クリックメニューの中に画像をコピーとかも入れといて欲しい。…

DataFrameのindexを1originにする

AI

df.index = df.index + 1 でできる。 参考: qiita.com

整数データのmedianが小数を含むことがある

AI

pandasでSeriesのmedianを取ったら、2.5みたいな値が返ってきてびっくりした。データは整数しかないので整数になると思ってた。。 データ数が偶数の場合は中央の値が二つになるのでその平均を取るっぽい。(1,2,3,4の場合、2,3が中央の値になって中央値は2.5…

binningはPandasよりnumpyを使うと速い

AI

大体そうだと思うけど、binningが遅い場合はnumpyで処理すると速くなる。 以下がpandasを使った実装。 def cut_bins(s): m = s.max() categories = pd.cut(s, [0, m * 0.05, m * 0.25, m * 0.75, m * 0.95, m]) category_counts = categories.cat.codes.valu…

JupyterNotebookでtqdmを使うとプログレスバーの行が沢山表示されて鬱陶しい

AI

import tqdmの代わりにfrom tqdm.notebook import tqdmを使えば良い。 参考: stackoverflow.com

JupyterNotebookでtqdmを使っても「HBox(children=(FloatProgress(value=0.0, max=1247.0), HTML(value='')))」という文字が出るだけ

AI

原因はwidgetsをインストールしてないため。以下を実行してインストールすると直った。 jupyter labextension install @jupyter-widgets/jupyterlab-manager 参考: stackoverflow.com

pythonでJSTの時刻を文字列にする方法

AI

ファイル名に現在時刻を含めて保存するような場合、デフォルトではUTCなので都合が悪い。 以下でJSTにできる。 datetime.datetime.now(pytz.utc).astimezone(pytz.timezone("Asia/Tokyo")).strftime("%F %X") この他にtzlocalを使った方法なども見付かったが…

asfreqを実行すると「ValueError: cannot reindex from a duplicate axis」エラー

AI

原因はindexに重複があるため。indexを一意にすると直った。 参考: stackoverflow.com

Pandasでasfreqを実行するとDataFrameの行数が0になる

AI

原因はIndexがSortされていなかったため。 どうもasfreqはindexが時系列で、ソートされていることを前提としているっぽい。

pythonで特定のフォルダのモジュールを全部読み込む方法

AI

特定のクラスのサブクラスをsubclassesを使ってすべて取得する必要があったが、subclassesはimport済のサブクラスしか返してくれない。 なので以下のコードで特定のフォルダ内のすべてのモジュールをimportした。 def import_feature_creators(): feature_fi…

.ipynbから自作の.pyファイルをimportする

AI

/edaフォルダに.ipynbがあり、/srcに.pyモジュールがある場合、以下のように.pyモジュールのフォルダをsys.pathに追加するとimportできるようになる。 import sys sys.path.append('../src/') ただし、init.pyがないフォルダの.pyファイルはimportできないの…