Python, Numpyで片対数グラフの回帰直線を良い感じに描く

データサイエンス

はじめに

片対数グラフの回帰直線をPythonで求めようとして少しハマったのでそのメモ。

実装

必要なライブラリのインポート

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

仮想のデータを準備

x = np.array([3200, 650, 1200, 30, 350, 750, 120, 15, 70, 150])
y = np.array([75, 70, 65, 50, 70, 77, 45, 40, 30, 68])

 

普通にプロット

plt.scatter(x, y, color = 'black', marker='s') 
plt.xlabel('X')
plt.ylabel('Y')
plt.grid()

X軸を対数変換して回帰直線を求める

log_x = [np.log10(i) for i in x]

plt.xscale("log")
plt.xlim([x.min(),x.max()])
plt.scatter(x, y, color = 'black', marker='s') 

# 回帰直線
linear = np.polyfit(log_x, y, 1)
y_linear = [linear[0] * x_linear + linear[1] for x_linear in log_x]
plt.plot(x, y_linear)
print('傾き:', linear[0])
#傾き: 17.696025465382565
print('切片:', linear[1])
#切片: 17.290544163649848

plt.xlabel('X')
plt.ylabel('Y')
plt.grid() 

plt.show()

タイトルとURLをコピーしました