Python

SlackからエクスポートしたZIPファイル内のファイルパスの文字化けを修正する

いつからかSlackのチャンネル名に日本語が使えるようになったが、SlackからエクスポートしたZIPファイルのファイル名、ディレクトリ名はcp437 コードページ437 - Wikipedia でエンコードされているため、UTF-8にするには、cp437としてエンコードする必要があ…

Python: SlackにインポートするためのCSVファイルを、Slackのエクスポートしたデータ(ZIPファイル)から作成する

旧ワークスペースの一部のチャンネルのみ、新ワークスペース(新WS)にCSVファイルで移行するためのPythonスクリプトを書いたので紹介する。 準備することは、 旧ワークスペースからエクスポートしたデータ (アーカイブしたZIPファイル) ワークスペースのチャ…

Pytyon: Jupyter lab 起動時に cannot import name 'soft_unicode' from 'markupsafe'

C:\Users\Masahiro\Downloads\slack>jupyter lab Traceback (most recent call last): File "c:\users\masahiro\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "c:\users\masahiro\a…

Python: 2次元図で凸多角形の内部のイベントを得る

例外処理はちゃんとしてないので注意せよ。 import numpy as np import awkward as ak import matplotlib.pyplot as plt # 配列作成 obj={} rs = np.random.RandomState(0) obj["memx"]=rs.rand(1000) obj["memy"]=rs.rand(1000) memx = "memx" memy = "memy…

Python: Energy loss と Energy straggling

まず、各定数の確認する。 import numpy as np elementary_charge = 1.602176634*10**-19 # 電気素量 C c_light_m = 299792458 # 光速 m/s electron_mass_kg = 9.1093837015*10**-31 # 電子質量 kg permittivity_vacuum = 8.8541878128*10**-12 # 真空の誘電…

Python: 4桁の原子量

standard_weights = [1.008, 4.003,\ 6.941, 9.012, 10.81, 12.01, 14.01, 16.00, 19.00, 20.18,\ 22.99, 24.31, 26.98, 28.09, 30.97, 32.07, 35.45, 39.95,\ 39.10, 40.08, 44.96, 47.87, 50.94, 52.00, 54.94, 55.85, 58.93, 58.69, 63.55, 65.38, 69.72,…

Pythonから外部プログラムを実行して標準出力をstrで得る

WindowsでもC++を直接呼ぶ方法があるらしいが、めんどくさいので引数で情報を渡して、標準出力で結果を得ることにする。 import subprocess exe = 'puroguramu.exe' arg = "hikisu" #引数が1つの例 proc = subprocess.Popen([exe, arg], stdout=subprocess.P…

Python matplotlib でよく使う機能のまとめ tips

描画に応じてキャンパスを無視して出力する。bbox_inches="tight" plt.savefig("result.png", bbox_inches="tight") 長方形を描画 matplotlib.patches.Rectangle アスペクト比を調整 matplotlib.axes.Axes.set_aspect 矢印を描画 matplotlib.pyplot.quiver g…

Python lmfitを使って、マルチガウシアンでフィッティングする

phst.hateblo.jp の続編 mzfit が使っている tensorflow が重すぎなのと、モジュール読み込みに時間がかかるのと、機能的に不足する点があったのと、マルチプラットフォームであるべきという思想に反するので、lmfitを使ってマルチガウシアンでのフィッティ…

Python ウェブサイトで公開されているネットワーク障害の頻度を解析する

名古屋大学の障害情報一覧にあるネットワーク障害の発生年月日、発生月をPythonで解析してみる。2022/05/14 時点でのHTML構造に対応しているので、ホームページの構造が更新されると使えなくなることをご承知おきください。 データをダウンロード import url…

Python + NumPy: 乱数生成のシード(RandomState)をちゃんと管理する

qiita.com NumPyでは、発生する乱数をシードを使ってコントロールすることが可能で、グローバルシードを使う方法と、乱数状態を保持したクラスを使う方法がある。 グローバルシードを変更する np.random.seed(seed) と、乱数状態クラスを取得するための np.r…

Python: イオンの質量

単一原子の基底状態のイオンの質量をPythonで求める。データは nds.iaea.org から引っ張ってきた。APIの説明。 def get_ion_mass(z, a, q): import os gs_filename = "ground_states.csv" if not os.path.exists(gs_filename): import urllib.request url = …

Python 動的にモジュールを作成、import、再import (リロード) する

Pythonはインタプリタなので、文字列から動的なimportが可能である。 Pythonのコードの中で、NewModule.py を作って、それを読み込んでみよう。 NewModule.py に書くテキスト print(0) a = 10 + 0 Pythonコード。import importlib が重要。 module_name = "N…

複数の配列から、特定の配列で条件に合うものを削除したり、値を変えたりする

2つめの配列を条件にして、他の配列も削除したり、他の配列の値も変えたりする。 後者では、変える値は1つめから3つめまで全て同じ値になってしまう。異なる値にする方法はあるのだろうか。 import numpy as np a1 = np.array([10, 20, -30, 99, 33]) a2 = n…

Python lmfitを使って、2次元ヒストグラムを2次元正規分布でフィッティングする (1次元も)

qiita.com lmfit.github.io pip3 install lmfit で lmfitをインストールする コード import numpy as np import lmfit from lmfit.lineshapes import gaussian2d, lorentzian import matplotlib.pyplot as plt npoints=10000 np.random.seed(0) x = np.rando…

Python: 二次元データを二次関数(y=ax^2+bx+c)でフィッティング、係数と誤差を得る

phst.hateblo.jp の二次関数版 import numpy as np # データ生成 x = np.array([10.09659323, 10.40523609, 10.72069954, 11.03063238, 11.33665493, 11.6391395, 11.9381814, 12.23925842, 12.5349865, 12.82765475, 13.11407145, 13.40273189, 13.69487096…

Python: 正規分布同士の分離度と重なりの割合

分離度(Resolution, R)=2.5のヒストグラムがどういうのか想像できなかったので作ってみた。分離度はそれぞれの分布を正規分布としたとき、隣り合うピークの平均値の差 と、各ピークの標準偏差を使い、以下の式で定義している。 半値全幅 FWHM は なので、 と…

Python: 元素記号

periodic_table = ["H", "He",\ "Li", "Be", "B", "C", "N", "O", "F", "Ne",\ "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar",\ "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr",\ "Rb", "Sr",…

PythonでPanasonic製のウェブカメラの画像を定期的に保存する

参考にしたサイト qiita.com わざわざ書き直すまでもないが、一応メモとして残しておく。 import requests from requests.auth import HTTPDigestAuth import datetime from time import sleep username = "user" password = "password" url = 'http://192.1…

Python: リストを組み合わせて合計がXになる整数の組み合わせの計算

ある特定の需要から、必要な消耗品リストの金額を組み合わせて、合計額がX円になる消耗品の組み合わせ(予算X円の残額を0円にする組み合わせ)を調べたくなった。 qiita.com 上記の再帰をうまく使ったコードほぼそのままだが、予約語の置き換えとPython3への対…

Python: matplotlibの二次元ヒストグラムhist2dでエントリー数が0のビンの色を白くする方法-2

第一弾の記事 phst.hateblo.jp 最も実用的な方法は一番下のサンプルコードなので途中は読み飛ばしてもいいよ。 CERN ROOTのTH2等だとエントリー数が0のbinは自動的に白くなるがmatplotlibの場合そうはならない。matplotlibのhist2dで白くするには、hist2dの…

Python+Pillowで画像のDPIを取得、書き換える

サンプルコード from PIL import Image filepath = "a.jpg" im = Image.open(filepath) # 画像を開く print(im.info["dpi"]) # DPIを取得する # (72, 72) _dpi = 144 im.save(filepath, dpi = (_dpi, _dpi)) # 新しいDPIに書き換えて出力する im.close() # …

Python+uproot+Awkward ArrayでCERN ROOTファイルを読み、書き出す

業界にも依るとは思うが、イベント単位になっているデータの標準形式がROOTファイルというところは多いだろう。ただ、数10GB級のROOTファイルを一斉に処理したいような需要ではなければ、あえてROOT(というかC++)を使って解析する必要性は感じられないので、…

Python +mzfit (zfit) で マルチガウシアンフィッティング

サイエンスの界隈でよく使われているzfitと、zfitを簡単に使うためのラッパーであるmzfitを使ってみる。 pypi.org pypi.org zfitが依存しているfittingのコアの部分である ipopt はWindowsに非対応なので、WindowsユーザーはWSLなどを使ってLinux環境で実行…

Python+OpenCVで画像の丸っぽさと伸びている方向の角度を求める

OpenCVのmomentsを使って丸っぽさと、伸びている方向の角度を求めるコードを書いてみた。 関数moments_round_angleのXとYは以下の論文の定義通りである。これは、二次のモーメントの対称性を表す指標である。(ちなみに一次のモーメントからは重心などが求ま…

Python scipyで離散データの内挿 interpolate 積分 integrateを使ってみる

線形補間 # サンプルデータを取得 import urllib.request with urllib.request.urlopen("https://gitlab.com/gifuescan/atima_rangeenergy/-/raw/1e7c7d1432c302d0705a5ea9fe40d696ec468e54/splines_emul_1.41/BeamZ1_TargetZ6.txt") as web_file: data = we…

Python: 非対称な誤差の計算をモンテカルロシミュレーション法で計算する

Asymmetric uncertainties in measurements: SOAD a Python package based on Monte Carlo Simulations https://aip.scitation.org/doi/abs/10.1063/1.5135421 という論文があったので使ってみた。数学的に正しいかどうかは確認していない Githubにソースコ…

PythonでJPGの2値画像をPNG画像に変換する

元々2値のPNG画像を無理やりJPG画像にすると、アナログノイズ的に輝度値が揺らいでしまう。 また、JPG画像の方が画像サイズが増えてしまうこともある。 JPG画像にしても輝度値は大きく変わらないので、閾値127で2値画像を作り、PNG形式で保存する関数を作っ…

Python + pandas でcsvデータの一部を除去して保存する

pandas で読んだデータの一部を除去して保存する方法。下の例ではdata1という変数が1000以下のものを除去している。 import pandas as pd df = pd.read_csv('run0001.csv') index_drop = [] for i, row in enumerate(dfdump.itertuples()): if row.data1<100…

Python (numpy+scipy)でプロファイルヒストグラムを描画する

プロファイルヒストグラム(Profile histograms ROOT: TProfile Class Reference を参照) は、2次元データをあるX軸の区画ごとに、Y軸のデータの平均値と標準偏差などを描画したものである。 matplotlib - Plotting profile hitstograms in python - Stack Ov…