メモめもメモ

環境構築やプログラミングに関するメモ

Python

scikit-learnで混同行列を求める

python向け機械学習ライブラリであるscikit-learnを使って、混同行列を計算します。 scikit-learnのインストール 多くの場合は下記コマンドでインストール可能です。 より詳しいインストール方法は公式ドキュメントを参照してください。 pipの場合 pip insta…

PythonのNetworkXパッケージを使って重み付き有向グラフの最短経路をダイクストラ法で求める

Pythonのネットワーク計算パッケージ「NetworkX」を使用して重み付き有向グラフの最短経路をダイクストラ法で求めます。 NetworkXのインストール 下記のようにpipでインストールができます。 pip install networkx 今回はNetworkX2.2を使用しました。 グラフ…

Python3でコードを並列実行して高速化する

コードを並列実行する方法はマルチスレッドを使う方法とマルチプロセスを使う方法がありますが、Pythonはグローバルインタプリタロック(GIL)と呼ばれる仕組みにより同一プロセス内では常に1スレッドしか進行できません。そのため、マルチスレッドを使う方…

Pythonでパケットキャプチャ(Windows用)

RAWソケットを使ってWindowsでパケットキャプチャを行います。 実行には管理者権限が必要です。このスクリプトでキャプチャできるのはIPから上位のレイヤーであり、Ethernetヘッダはキャプチャできません。 コード import socket MYHOST = "自分のIPアドレス…

pythonでマウスカーソルを移動させる(Windows API使用)

Windows APIのSetCursorPosをpythonのctypesライブラリから呼び出し、マウスカーソルの座標を指定します。 コード 下記コードはx座標100・y座標50の地点へマウスカーソルを移動させます import ctypes # 座標(x, y)にマウスカーソルを移動させる def SetCurs…

Python3でpyopensslを使ってRSA秘密鍵ファイルを生成する

インストール まず、下記コマンドでpyOpenSSLパッケージをインストールします。 cryptographyパッケージも同時にインストールされます。 $ pip install pyopenssl 環境によってはpipではなくpip3を使ってインストールを行います。 コード 鍵長4096bitのRSA暗…

Python3.6でcsvファイルを読む

pythonの標準ライブラリのひとつであるcsvを使うと、簡単にcsvファイルを読み込むことができます。 使い方を見ていきましょう。 CSVファイル 読み込み対象のcsvファイルとして下記のファイル(sample.csv)を使います。 name,age,height,weight yamada,20,17…

Python3のclassに反復処理をサポートさせる

classに__iter__と__next__メソッドを実装することで、反復処理をサポートさせることができます。 反復処理をサポートしたclassは、for文などに対してiterable objectとして与えることが可能です。 コード # 反復処理をサポートしたクラス class iter_sample…

Python3のconfigparserを使って設定ファイルを読み込む

pythonの標準ライブラリのひとつであるconfigparserを使うと、設定ファイルを簡単に扱えるようになります。 これを使うことで、ソースコード中に設定をべた書きするよりもユーザに優しいスクリプトが書けるでしょう。 設定ファイルの用意 test.confとして、…

Python3でプロセスIDからプロセス名を取得する(WindowsAPI使用)

PythonからGetModuleBaseNameを呼び出し、プロセス名を取得します。 Windows APIを利用しているため、Windowsでしか動作しません。 コード import ctypes # 引数としてプロセスIDを与え、プロセス名を取得する def get_name_by_pid(pid): PROCESS_ALL_ACCESS…

Python3でISO 8601形式の時刻を取得する

現在のローカル時刻をタイムゾーン付きのISO 8601形式(YYYY-MM-DDThh:mm:ss±hh:mm)で取得します。 Python3.6からはnaiveなdatetimeオブジェクトもastimezone()を使えるようになりました。 import datetime # --- python3.3以降 --- utctime = datetime.dat…

Python3.6でランダムなパスワードを生成する

Python3.6で実装されたsecretモジュールを使うと、暗号学的に強い乱数を簡単に得ることができます。 これを使ってランダムなパスワードを生成することができます。 import secrets import string # パスワードの文字数 num = 16 # パスワードに使用する文字…