Python

備忘録:SQLAlchemyのConnectionとTransactionの区別について

SQLAlchemy 1.4系と2.0系の両方において、データベース接続オブジェクトとトランザクションオブジェクト (sqlalchey.Transaction) を区別できるか調べてみた。結果、isinstance() を使ったプログラム実行時の型チェックで両者を区別することも、mypy および …

備忘録:SQLAlchemyのORMとCoreを組み合わせて使うのが良さそう

最近、身をもって学んだことの備忘録。SQLの薄いラッパーとしてSQLAlchemyを使いたいプロジェクト(後述)では以下の方針で進めるのが良いと思う。 ORMレイヤーで、クラス定義をする Coreレイヤーで、クエリー生成をする ただしテーブルオブジェクトではなく…

Pandasで同一データをto_parquetすると重複が起こる

今日試して学んだこと。Pandasで同一データフレームを複数回to_parquetで出力すると、同一データが重複する形で出力される。なので、例えばCSVファイルをPandasでParquetデータセットとしてETLするような処理を走らせる場合には同一CSVファイルを複数回処理…

matplotlib inlineでSVGや高画質なPNGを使う

Python のグラフ描画パッケージ matplotlib のグラフが Jupyter Lab / Jupyter Notebook 上でボヤけて表示されるのが嫌だったので、それを改善する方法を調査した。 なお、ここで紹介する手法にはどれもデメリットがある。完璧を求めて変にストレスを感じる…

RustでPythonの拡張モジュールを書く (setuptools-rust)

今日は setuptools-rust を使い、 Rust 言語で Python 拡張モジュールを勉強がてら書いてみたので記録しておく。 1.0 未到達なので、すぐに変わってしまうかもしれないけれど、 大きな流れは変わらないだろう…と期待している。 2021-11-28: setuptools-rust …

もう存在しないJupyterのKernelを削除する

Jupyter Notebook や Jupyter Lab を使っていると、たまに古い Kernel の情報が残ってしまうことがある。 具体的な経験としては、もう使わないなと思って Julia 1.0 をアンインストールしたところ、 Julia 1.0 で IJulia をインストールしたときの情報が残っ…

NumPy をマルチスレッドで計算させる

Anaconda / Miniconda や pip で普通に NumPy をインストールすると、その計算は複数 CPU コアを備えた計算機でも常にシングルスレッドで実行され…ると今日まで思い込んでいた。が、実は環境変数を設定すれば NumPy はマルチスレッドで計算してくれるらしい…

matplotlibで横軸(X 軸)を日時にする

意外とハマってしまったので、今日は matplotlib で横軸(X 軸)を日時にする方法を備忘録。初歩的な内容。

bashのプロンプトに前回実行コマンドの終了ステータスコードを表示する

zsh の walters 等のプロンプトテーマは「前回実行したコマンドの成否 (exit status / return code) に応じて表示を変える」ようになっている。これは非常に良いなと思ったため bash で同じコトができないか調べてみた。

Pythonで組み込み関数と同名の変数を使うべきでない理由

Python では input() や len() など、様々な組み込み関数を用意している。そして、これらと同じ名前で変数や関数を後から定義すると、それらを「上書き」できる。つまり、例えば input という名前の変数にファイルから読み出したデータを格納するようなコー…

Flask (Werkzeug)のResponseのmimetypeとcontent_typeの違い

Flask で HTML ではないデータを返送する場合、通常は HTML 応答に Content-Type ヘッダーを設定することになる。そのためには Response オブジェクトの mimetype プロパティや content_type プロパティに値を設定すれば良いのだけれど、これまでどちらに値…

Flaskアプリからデータをストリーミング方式で返送する

(2019-08-14: 全面的に書き換えました) Flask アプリで動的に生成したデータ(例:RDB のクエリー結果を CSV にして返す)をダウンロードさせるような機能を実現する場合、これまでデータを一度 view 関数で完成させた後に返送するしかないと思っていた。…

Windows で Python の csv モジュールで改行コードを正しく出力する

Python 標準の csv パッケージ は CSV ファイルを手軽に入出力できるので重宝しているのだけれど、Windows で使うと改行コードがおかしくなることがあった。見た目的には「各行が 2 回改行されてしまう」ような状態。これを回避する簡単な方法がやっと分かっ…

matplotlibで描いたグラフをファイル保存しつつJupyterでは表示させない方法

Jupyter Notebookで時間のかかる機械学習やデータ解析の処理を走らせているとき、その経過状況をグラフにプロットして観察したい、ということがある。そういうとき、エポックごとに 1 からグラフ描画処理を普通に走らせると Notebook 上にグラフが「追記」さ…

tesseract + pyocr使い方メモ

ひょんな理由で tesseract の使い方を知る必要に迫られたので、簡単に調査。取り急ぎ、次の情報が得られることが目標。 認識された文字(≠単語)のテキストデータ (UTF-8) それらの位置情報(左上点の座標と幅と高さ) もちろん、プログラム的にこれらの情報…

map()やリスト内包表記をジェネレーターで機能拡張(?)する

(主に Python を対象に書いたけれど、Julia その他 map 関数とジェネレーターがある処理系すべてで通用する話) あるリストを元に、新しいリストを生成したいとする。ここで、もし結果のリストが元のリストの各要素に一対一対応するのであれば、普通に map(…

Jupyter Notebookは複数カーソル編集に対応している

偶然気が付いたのだけれどJupyter Notebookは複数カーソル編集に対応しており、Ctrl+クリックでカーソルを追加、Alt+マウスドラッグで矩形選択ができる。これまで、複数カーソルを使った編集をしたい時にはイチイチVisual Studio Codeにコピペして編集して戻…

Windows+Python 3.6+OpenCV環境構築(2018年)

2018年12月20日現在、Windows上で構築したAnacondaまたはMinicondaなPython環境でOpenCVを使うには、以下の方法があるようだ。 pipコマンドでopencv-pythonをインストール pip install opencv-python condaコマンドで、conda-forgeからopencvをインストール …

Python, Cython, Numba, TensorFlowの処理速度比較

Python, Cython, Numba, TensorFlowで、処理速度を比較してみた。未完成感あるけれど、いったん今日時点での結果を記録しておく。 github.com 原点を中心とした半径 1 の円の、x, y ともに正である領域(四分の一円)を考えると、その面積は ということで円…

Pythonのwith文で実行時間を測るクラスを書いた

Pythonのwithブロックの実行時間を測るユーティリティクラスStopwatchを書いた。

Anacondaの仮想環境が作られる標準のディレクトリを変更する

Anaconda の conda コマンドでは、いわゆる仮想環境を作成することで任意のバージョンの Python やパッケージの組み合わせを一つの計算機で共存させることができる。今日は、その仮想環境のファイル群を配置する標準のディレクトリを変更する方法について書…