pythonのpandasとnotebookを使ってデータ分析(4)
それでは、前回の続きで線形近似曲線を引いて分析を行ってみたいと思います。
線形近似曲線と言っていますが、直線?
などと疑問に思ったりしますが、とりあえず書いてみます。
%matplotlib inline import pandas import numpy import matplotlib.pyplot as plt
df = pandas.DataFrame({ 'x': [6.559112404564946264e-01, 6.013845740818111185e-01, 4.449591514877473397e-01, 3.557250387126167923e-01, 3.798882550532960423e-01, 3.206955701106445344e-01, 2.600880460776140990e-01, 2.245379618606005157e-01], 'y': [1.397354195522357567e-01, 1.001406990711011247e-01, 5.173231204524778720e-02, 3.445520251689743879e-02, 3.801366557283047953e-02, 2.856782588754304408e-02, 2.036328213585812327e-02, 1.566228252276009869e-02]})
前回と同じくここまで書いて、、、
(あ、「numpy」追加してます)
fig = plt.figure(figsize=(15,6)) ax1 = fig.add_subplot(2, 2, 1) ax2 = fig.add_subplot(2, 2, 2, sharey=ax1) ax3 = fig.add_subplot(2, 2, 3, sharey=ax1) ax4 = fig.add_subplot(2, 2, 4, sharey=ax1) ax1.plot(df['x'], df['y'], "ro") ax2.plot(df['x'], df['y'], "ro") ax3.plot(df['x'], df['y'], "ro") ax4.plot(df['x'], df['y'], "ro") ax1.set_title("ols fit") ax2.set_title("Linear exp fit") ax3.set_title("log fit") ax4.set_title("parabora fit") ax1.grid() ax2.grid() ax3.grid() ax4.grid() str = "Sample Data" str1 = "Fitted Function:\n" def r2_string(r): return "$R^{2} = %0.5f$" % (r) def ols_string(a, b, c): str2 = "$y = %0.4f x %s %0.4f$\n" % (a, "+" if b >= 0 else "", b) return [str, str1 + str2 + r2_string(c)] def func_ols(a, b, x): return a * x + b xx = numpy.arange(0.7, 0.2, -0.01) model1 = pandas.ols(y=df['y'], x=df['x'], intercept=True) ax1.plot(xx, func_ols(model1.beta.x, model1.beta.intercept, xx)) ax1.legend(ols_string(model1.beta.x, model1.beta.intercept, model1.r2), loc="upper left") plt.show()
こんな感じで追加すると、左上の図に線形近似曲線が追加されました。
こういうデータの散布図に対して、近似曲線をひく事をカーブフィッティングというようで
視覚的にフィットしているか?というのが分かります。
4種類の近似曲線をひいてみると、
- 直線的なのか?(2つの数値は比例しているか?)
- 指数的なのか?(縦軸は急成長しているか?)
- 対数的なのか?(縦軸は終息しつつあるのか?)
などが見えてきます。(多項式近似曲線は?)
OLSは「Ordinary least squares」の略だそうで、最も基本的な分析?
線形近似曲線の式が得られます。
「beta.x」というのが、その式の回帰係数で
「r2」は、寄与率、決定係数というらしくて、どのぐらいフィットしているか?
が表されます。
R2は、0〜1の範囲で、1に近いほどフィットしているという事になります。
近似曲線の見た目のフィット具合と、数値的なフィット具合の両方で確認する感じですね。
今回の結果だけだと、まだ高いのか低いのか判断が付かないですね。
それでは、次回引き続き他の近似曲線を追加して分析していきましょう。
参考
https://ja.wikipedia.org/wiki/%E6%9B%B2%E7%B7%9A%E3%81%82%E3%81%A6%E3%81%AF%E3%82%81
https://ja.wikipedia.org/wiki/%E8%A8%88%E9%87%8F%E7%B5%8C%E6%B8%88%E5%AD%A6