pythonでfitting
簡単な回帰モデルを作らないと行けなくなりそうなので、事前確認。 pythonはド素人なもので。
環境構築
こういうテスト環境はdockerでやりたいので、以下を参考にさせて頂きました。
Alpine Linuxにnumpy, scipy, scikit-learn, pandasを入れた - Qiita
Dockerfile
FROM alpine:latest RUN apk --update-cache \ add musl \ linux-headers \ gcc \ g++ \ make \ gfortran \ openblas-dev \ python3 \ python3-dev \ freetype-dev \ libjpeg-turbo-dev \ libpng-dev RUN pip3 install --upgrade pip RUN pip3 install numpy \ scipy \ scikit-learn \ matplotlib \ pandas RUN mkdir /app
build command
docker build ./ -t python-test
script準備&実行
docker run -it --name python-test-container python-test docker cp ./test.py python-test-container:/app/test.py docker start python-test-container docker exec python-test-container python3 /app/test.py docker cp python-test-container:/app/plot.png plot.png
データ的に反比例の関数になるはずなので、scipy.optimizeのcurve_fitを使う。python、すごく便利ですね。
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit def fitfunc(x, a): return a/x x = np.array([それっぽい適当なデータ]) y = np.array([それっぽい適当なデータ]) param, cov = curve_fit(fitfunc, x, y) list_y_fit = [] for num in x: list_y_fit.append(param[0] / num) array_y_fit = np.array(list_y_fit) plt.plot(x, y, marker="o", linestyle="None") plt.plot(x, array_y_fit, marker="") plt.savefig('/app/plot.png') print("a = " + str(param[0])) plt.show()
結果はこんな感じ。