データ処理にPythonをよく使ってるくんさんです。
numpy
scipy
pandas
matplotlib
Pillow
あたりを使ったデータ処理でよく使うSnippetを書いていきます。 それぞれexampleでjupyter notebookのリンクを付けています。
日々思い付き次第追記していきます。
移動平均
data = np.convolve(np.ones(N) / N, data, mode="same")
これで前後のN/2
点を平均化した値が得られます。
ただし、存在しないデータは0で埋められるので、最初と最後は値がおかしくなります。
mode=valid
にすればデータの数は減りますが、最初と最後がおかしくなる問題は解決できます。
ipynbs/sma.ipynb at master · hayashikun/ipynbs · GitHub
matplotlibでplotする線の色を自由に変える
matplotlibでplotする線の色はcolor
の引数に色を渡すことで変えられます。
文字列 or RGBAのtupleを渡せば良いです。
plt.plot(x, y, color="red")
とすれば、線の色は赤になります
グラデーションにするときは、matplotlib.cm
を使うと便利です
Colormaps in Matplotlib — Matplotlib 2.2.2 documentation
import matplotlib.cm as cm for i, y in enumerate(y_list): plt.plot(x, y, color=cm.hsv(i / N))
のような感じです。
ipynbs/cm.ipynb at master · hayashikun/ipynbs · GitHub
関数のFitting
関数のフィッティングにはscipy.optimize.curve_fit
が便利です。
scipy.optimize.curve_fit — SciPy v1.1.0 Reference Guide
Initial guessのp0
はデフォルトでは1なので、係数が1から大きく外れる場合はあまり収束しません。なので、なるべくp0は与えたほうがいいでしょう。
ipynbs/fitting.ipynb at master · hayashikun/ipynbs · GitHub
正規分布(ヒストグラム・フィッティング)
測定誤差とかって正規分布なことが多いですよね。
matplotlibでヒストグラムを表示させるときは、plt.hist
を使います。
plt.hist(data, bins=20, range=(0, 1), density=True)
bins
でビンの個数を指定します。指定しないと10になります。
rangeは何も指定しないと(min(data), max(data))
になります。
density=True
にすると、ヒストグラムを積分した面積が1になります。normed=True
は非推奨になりました。
重要なパラメーターはこれくらいでしょうか。 詳しくは
matplotlib.pyplot.hist — Matplotlib 2.2.2 documentation
正規分布のフィッティングはscipy.stats.norm
を使います。
使い方は簡単で、norm.fit(data)
で平均と標準偏差が得られます。
ipynbs/normal_distribution.ipynb at master · hayashikun/ipynbs · GitHub
display
Module: display — IPython 3.2.1 documentation
いろいろいい感じに表示できます。
多分1番良く使うのはpandas.DataFrame
の表示でしょう。
ipynbs/display.ipynb at master · hayashikun/ipynbs · GitHub
バイナリを扱う
測定ソフトウエアが吐くデータってCSVとかだと思うのですが、たまにバイナリを吐いてくるやつがいるんですよね。 それでそのデータの変換はクソ使いにくいソフト限定のときとかあって、マジf**kなんですが、でも大丈夫、Pythonならね。
データの解析はバイナリを読んで頑張るとして、それをPythonで読んだりする方法です。
7.1. struct — バイト列をパックされたバイナリデータとして解釈する — Python 3.6.5 ドキュメント
大抵のことはstruct
を使えばサクッといけます。
読むときにはstruct.unpack_from
かstruct.iter_unpack
を使うことが多いかと思います。
書き込むときはstruct.pack_into
でしょう。