物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Python

MacでPython 3をインストールする方法

HomeBrewをインストール brew.sh 上記のサイトにシェルコマンドが載ってる。記事執筆時は /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" だった。HomeBrewを入れると、ついでにXcodeもインストールされ…

Python OpenCV 大量のアイコンからモザイクアートを作ってみる

Pythonで実装してみた 元画像を読み込むところ。BGRに分割し、分割された領域ごとの平均輝度値を求める import cv2 import glob import numpy as np orgfile = "original02.png" orgimg = cv2.imread(orgfile) P=20 #分割する縦横のピクセル数 Nx = int(orgi…

Python tweepy Twitter APIの使い方 (メモ)

可能な限り全てのツイートを検索して取得する。ただし、サーチバン等により検索で出て来ないツイートは取得できない。 import tweepy tweets = [] query = "物理の駅" for page in tweepy.Cursor(api.search_tweets,q=query, tweet_mode='extended',result_t…

Python: Jupyter上で、tracebackで例外をcatchしてから標準出力して正常終了する

try: raise "ERROR" except: try: import traceback traceback.print_exc() except:pass

Python tweepy twitterの標準検索APIの仕様 (日本語訳)

https://docs.tweepy.org/en/latest/api.html#tweepy.API.search_tweets API.search_tweets(q, *, geocode, lang, locale, result_type, count, until, since_id, max_id, include_entities) Returns a collection of relevant Tweets matching a specified …

LISE++ファイルをPythonで読み取りBeamDumpの設定を調べる

LISE++ファイルは、テキストファイルで作られているのでPythonで容易に読み取ることができる。 [] で囲まれた文字列をカテゴリ、その中で記述された = で区切られたKeyとValueを辞書型で詰めている。; 以降はコメントとして無視している。 def read_lise_lpp…

Python jupyter lab で動的なグラフを作る

Jupyter lab等でグラフを動的に動かしたいとき、例えば特定の値を変えたグラフをセルを実行することなく次々と表示させたい時、ipywidgets.interactを使うと良い。 使用例 %matplotlib inline import matplotlib.pyplot as plt import ipywidgets import num…

Python 時間をdatetime型、文字列、unixtimeに相互変換

文字列→datetime, unixtime, 文字列 import datetime tstr = '2020/9/17 9:00:01' tdt = datetime.datetime.strptime(tstr, '%Y/%m/%d %H:%M:%S') d_week = {'Sun':'日','Mon':'月','Tue':'火','Wed':'水','Thu':'木','Fri':'金','Sat':'土'} print(type(tdt…

Python ログインが必要なサイトでスクレイピングするための前準備 POSTで認証

session を使い回すところがポイント import requests session = requests.Session() url = "https://test.test/login" data = { "email": "mail@mail.mail", "password": "password", } ret = session.post(url=url, params=data) assert(ret.status_code==…

(Solved v2.2.2 and later) Slackdump_v2.2.0 Katakana charactors directory problem

日本語訳は下に (Japanese translation below) This problem was fixed in version v2.2.2 and later. Please download the latest version of the slackdump. There is an excelent software called slackdump that allows you to back up all your visible…

Python matplotlib で 2つの軸を左右・両方左に描画する

物理では、例えば、β と Energy [MeV/u] のように、同じ量だが異なる表記をすることがある。 これを1つのグラフに同時に表示したいとき、以下のようにする。 import numpy as np import matplotlib.pyplot as plt Zs = np.arange(1, 100, 1) data1 = 0.5+Zs*…

Python: jsonをdumpsするときの浮動小数点の桁数を制御する

dumpsで桁数を制御することはできないが、loadsで制御することが可能。速度は遅くなるが、dumps→loads→dumps にすると良い。 import json print(json.dumps([23.67, 23.97, 23.87])) print(json.dumps([23.67000000000002, 23.96999999999999, 23.8700000000…

Python Jupyter Lab で RuntimeError: Cannot enter into task <1> while another task <2> を解消する

Jupyter Lab で以下のようなエラーが出た。tornado がエラーだとか。 Exception in callback <TaskWakeupMethWrapper object at 0x000002767EB13B80>(<Future finis...a24"\r\n\r\n'>) handle: <Handle <TaskWakeupMethWrapper object at 0x000002767EB13B80>(<Future finis...a24"\r\n\r\n'>)> Traceback (most recent call last): File "c:\user…</future></handle></future></taskwakeupmethwrapper>

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 は なので、 と…