Python

メモ_Flaskでmysql.connectorとpymysqlだとエラーハンドリングが失敗する

Flaskアプリで、Mysqlと接続して情報を表示するという単純な処理で、DB接続のエラーハンドリングが失敗する。 mysql.connectorではなく、pymysqlライブラリを利用するようにしたら解消した。。。mysql.connectorとpymysqlを一緒に使うとダメなのかな。 mysql…

メモ_Pythonプロジェクトでソースコード群だけからrequirements.txtを生成する前準備

Pythonプロジェクトでソースコード群だけからrequirements.txtを生成する前準備のメモです。 githubなどからソースコードだけは取得できる状況で、手元には真っ新なPython環境しかなくて(出先で借りたパソコンで google colabとか)、requirements.txt なども…

Jupyter lab / notebook 上で、GUIで画像のフォーマット変換&リサイズを行うPythonコード

Jupyter lab / notebook 上で、GUIで画像のフォーマット変換&リサイズを行うPythonコードです。たまに画像を扱う際、Jupyter lab / notebook の操作画面からできるだけ離れたくない場合などに使う想定です。 コード: import ipywidgets as widgets from IPy…

メモ_JupyterNotebookでtqdmを利用してプログレスバーを表示する

JupyterNotebookで処理時間が長いコードを実行する際、完了までどのくらいかかるか、どのくらい進行したかをリアルタイムでプログレスバーで表示したい場合、tqdmというライブラリを利用することができます。 pip install tqdm コード例: サンプルとして、My…

メモ_FlaskアプリでDBから指定範囲のデータをjsonでダウンロードさせる機能の追加

Flaskで構築したWebアプリに、DBから指定した範囲のデータをjson形式でダウンロードさせる処理を追加する際のメモ。 サンプルの仕様: id(連番)、prime_list(素列を格納)というカラムがあるDB(DB名はnuminfo、table名はrime_num)から、idないしprime_listの範…

メモ_Flaskアプリでapp.py以外でルート定義を行う方法

Flaskアプリを開発していて、app.pyがだんだん肥大化して見通しが悪くなることがあります。ルート(エンドポイント)定義をapp.py以外に切り出してコードをスッキリさせることができます。 一般的な方法は、FlaskのBlueprintを使用することです。Blueprintは…

メモ_Flaskアプリでjson fileをダウンロードさせる機能を追加

Flaskで構築したWebアプリに、Webページなどに表示させているデータをjson形式でダウンロードさせるための機能の追加についてのメモ。超簡単。 サンプルコード: from flask import Flask, Response, json app = Flask(__name__) @app.route('/json/') def do…

ipywidgetsを利用してJupyter notebook上でWebFormからMySQLを参照・更新するアプリを作る。

ipywidgetsライブラリを利用してJupyter notebook上でWebFormを直接実行するアプリが作れます。できるだけJupyter notebook(あるいはJupyter lab)から出ずに作業を続けたい場合などに便利です。データを可視化したグラフのパラメーターをリアルタイムに可変…

メモ_Python-FlaskとMysqlで構築したWebアプリでデータ参照をpandasに変えて高速化

データを表示するFlaskアプリを作っていたところ、数万件程度のレコードであれば一瞬で終わるので問題ないのですが、レコード数が数百万件程度になってくると、Webページの最初の表示が4秒ぐらいかかるようになります。 数百万件レコードに対するsqlクエリー…

メモ_VM上のゲストOS(Ubuntu)で立ち上げたFlaskアプリをホストOS(Windows)側からも閲覧可能にする

VM上のUbuntuでJupyter labを立ち上げてから、ホストOS(WIndows11)側のブラウザでJupyter labを開くと、pythonコード&テキスト編集とターミナル操作がブラウザで完結するので楽なのですが、Flaskアプリ(Jupyter notebookでは表示できない処理とか)も同時に…

ChatGPTに、任意の文章中に指定単語の含有数をカウントし、出力するPythonモジュールを書いてもらった

ChatGPTに、任意の文章に対して指定した単語がいくつ含まれるかをカウントして、結果を出力するPythonモジュールを書いてもらいました。 指示文(プロンプト): 以下の仕様に沿ったPythonモジュールを書いてほしいです。 仕様:入力したテキストを形態素解析し…

メモ_Pythonでの小数点計算の計算速度を、float、decimal、fractionそれぞれで比較してみた。

Pythonに限った話ではありませんが、コンピューターで小数点の計算をさせると誤差が生じるため、期待通りの計算結果が得られないことがあります。 例えば、0.1+0.2 は 0.3 ではなく、0.30000000000000004 となります。 10進数小数を正確に計算するためにdeci…

メモ_Flaskアプリでキャッシュを有効にして高速化

Flaskを用いたWebアプリとかで、Flask-Cachingというパッケージを使ってキャッシュを有効することで高速化できます。 @cache~デコレータをつけるだけという、とてもシンプルな方法。以下メモ。 準備: Flask-Cachingをpipでインストール pip install Flask-C…

メモ_セキュリティー対策のためDB接続情報をコード外部に置く

手元でデータ前処理とかで使う場合は、面倒なのでコード中にDB接続情報を書いてしまったりするけど、外部に出すアプリなどのコードではあまりに怖いので、接続情報は外部化して安全にしておきたいですよね。 コンフィグファイルを使用する: テキストファイル…

メモ_大量のファイル操作をメモリ内で完結させて高速化

大量のファイル操作を伴う処理は、ストレージの性能にもよりますが、大抵は遅い処理になります。 そこで、メモリ内で完結するようにファイル操作を行うと、どのくらい高速化されるか、実際に確認してみました。 tmpfsというLinuxにあるメモリ内の一時領域を…

メモ_Pythonで期待通りに四捨五入できない場合

pythonでround関数で小数点以下の数値を 四捨五入しようとすると、正確に計算されないケースがあります。 Round関数で四捨五入がうまくいかないケースを実際に試してみた結果: 下記の結果は、たしかに2.68ではなく、2.67になります。 f = 2.675 print(round(…

ChatGPTに、任意の桁数の円周率を計算するPythonコードを書いてもらった

ChatGPTに、任意の桁数の円周率を計算するPythonコードを書いてもらいました。 mpmathという高精度演算ライブラリを使って、非常にシンプルなコードになりました。 コード: import mpmath # 計算する桁数を指定 mpmath.mp.dps = 10000000 # 円周率を計算 pi …

メモ_正規表現の処理速度_簡単なベンチマーク_Pythonとc

ふと気になったので、正規表現の処理速度を簡単にベンチマークしてみました。 正規表現パターンr'\d{3}-\d{3}-\d{3}-\d{3}-\d{3}-\d{3}'と文字列'123-456-789-123-456-789'のマッチングを1000万回おこなって、その実行時間を計測して表示してます。 以下がコ…

ChatGPTにsocket通信のサンプルpythonコードを書いてもらった

ChatGPTにsocket通信のサンプルpythonコードを書いてもらいました。 指示文(プロンプト): UDPでsoket通信を行うpythonのコードを書いてください。サーバ側はsocket_server.py 、クライアント側はsocket_client.py としてください。クライアントからの通信を…

メモ_saltとStretchingで処置したパスワードに対するHash処理の速度

パスワードなどの重要な情報をHash化して扱うのは、オープン系システム構築時の基本の一つですが、最近推奨されているハッシュ化として、saltとstretchingという方法があります。 salt は ハッシュ化する文字列に、さらに別の文字列を加えて処理することで解…

メモ_pipのlistをpandasで奇麗に表示

ちょっとしたtipsというか盲点というか、pandasを使ってpipのlistを奇麗に表示する方法。Jupyter notebookとかで使うと便利。 コード out = !pip list import pandas as pd # データフレーム表示オプション設定 pd.set_option('display.max_rows', None) # …

メモ_pandasのデータサイズと必要なメモリ容量、メモリサイズの削減について

pandasで特に何も考えずにデータを入れて展開していると、結構なメモリを消費します。 pandasのデータサイズと必要なメモリ容量ですが、pandasのデータフレームのサイズは、行数と列数によって決まり、データフレームの各列(カラム)のデータ型によって必要な…

メモ_カラムのずれたcsvをpandasに読み込んで、ズレを訂正して再保存してデータ全体をマージ

国土地理院-全国地名データ(位置参照情報)からダウンロードしてきたデータのうち、福岡県のcsvだけカラムがずれていてので、訂正して全国のデータとマージしてpandasに展開するまでの一連の作業メモ。 1. 福岡県のcsvデータのカラムずれを訂正 いったんcsv…

メモ_OpenAIのAPI利用料金について

Open AIのAPIが面白くて、ついつい、いろいろ試して遊んでしまいますが、割とすぐに無料枠を使い切ってしまいがちです。 OpenAIのAPIの無料枠は、2023年3月からは、3か月間有効な5ドル分の無料クレジットが付与されるそうです。以前は確か15ドルでした。 無…

pandasのmean関数を利用する処理と、利用しない場合の速度比較

データ分析では定番のPython/Pandasですが、いろいろ便利な関数が最初から用意されています。以下はその一例。 sum(): 各列の合計値を計算します。 mean(): 各列の平均値を計算します。 median(): 各列の中央値を計算します。 max(): 各列の最大値を計算しま…

csvをpandasに読み込んでデータフレームを保存して再利用するコード一連

csvからデータをpandasに読み込む csvの一行目にカラム名を定義していない場合、別途、カラム名を定義したcsvを用意する。 import pandas as pd # カラム定義用のCSVファイルパス column_definition_file = "column_definition.csv" # カラム定義のCSVファイ…

Pythonでcsv形式からParquet形式データに変換

Parquet形式のデータは列ベースのデータフォーマットで、Apacheプロジェクトの一つです。商用サービスだとDatabricksが有名ですね。 Parquet形式の利点は行ベースのデータ形式(csvとか)と比べて、特定の列データだけを扱うクエリが非常に高速になることです…

ChatGPTに、飲酒後のアルコール分解にかかる時間を計算するPythonコードを書いてもらった

ChatGPTに、飲酒後のアルコール分解にかかる時間を計算するPythonコードを書いてもらいました。体重と飲んだお酒の種類、量を標準入力して、計算結果を表示するという単純なものです。 指示文(プロンプト): 飲酒後にアルコールが分解されるまでの時間を概算…

テキストファイルから、タグの名前だけを取り出すPythonコード

htmlやxmlなどのテキストファイルから、タグの名前だけを取り出すPythonコードです。例えば、<tagname>~</tagname>のtagnameだけを取り出したいときに使用します。 取り出したい情報は正規表現で探しているので、正規表現を変えれば、ほかの用途でも使えます。 コード: import …

ChatGPT_APIで任意のテキストを短くしたり長くするPythonコード

ChatGPTのAPIを利用して、任意のテキストを短くしたり長くするPythonコードです。 APIに投げるprompt部分をもう少し詳細に指定するようにすれば、どのくらいの短さ(長さ)にするかも制御できるかもしれません。 import openai def convert_to_short(prompt): …