Skip to content

Instantly share code, notes, and snippets.

@komasaru
Last active May 26, 2018 01:53
Show Gist options
  • Save komasaru/ad4728963f5abe6e180e425d62b531d7 to your computer and use it in GitHub Desktop.
Save komasaru/ad4728963f5abe6e180e425d62b531d7 to your computer and use it in GitHub Desktop.
Python script to compute regression line/curve(1-4D).
#! /usr/local/bin/python3.6
"""
Regression curve
"""
import random
import sys
import traceback
import numpy as np
import matplotlib.pyplot as plt
class RegressionCurve:
def __init__(self, xs, ys):
self.xs, self.ys = xs, ys
def exec(self):
""" Execution """
try:
self.__scatter() # Scatter given points
self.__plot_1() # Plot regression line
self.__plot_2() # Plot regression curve(2-D)
self.__plot_3() # Plot regression curve(3-D)
self.__plot_4() # Plot regression curve(4-D)
self.__show() # Graph showing
except Exception as e:
raise
def __scatter(self):
""" Scatter given points """
try:
print("x={}\ny={}".format(self.xs, self.ys))
plt.scatter(self.xs, self.ys, c='#cc0000', label="Points")
except Exception as e:
raise
def __plot_1(self):
""" Plot regression line """
try:
a, b = np.polyfit(self.xs, self.ys, 1)
print("a={:.4f}, b={:.4f}".format(a, b))
fs = [a * x + b for x in self.xs]
plt.plot(self.xs, fs, label="1-D")
except Exception as e:
raise
def __plot_2(self):
""" Plot regression curve (2-D) """
try:
a, b, c = np.polyfit(self.xs, self.ys, 2)
print("a={:.4f}, b={:.4f}, c={:.4f}".format(a, b, c))
fs = [x * (x * a + b) + c for x in self.xs]
plt.plot(self.xs, fs, label="2-D")
except Exception as e:
raise
def __plot_3(self):
""" Plot regression curve (3-D) """
try:
a, b, c, d = np.polyfit(self.xs, self.ys, 3)
print("a={:.4f}, b={:.4f}, c={:.4f}, d={:.4f}".format(a, b, c, d))
fs = [x * (x * (x * a + b) + c) + d for x in self.xs]
plt.plot(self.xs, fs, label="3-D")
except Exception as e:
raise
def __plot_4(self):
""" Plot regression curve (4-D) """
try:
a, b, c, d, e = np.polyfit(self.xs, self.ys, 4)
print("a={:.4f}, b={:.4f}, c={:.4f}, d={:.4f}, e={:.4f}"
.format(a, b, c, d, e))
fs = [x * (x * (x * (x * a + b) + c) + d) + e for x in self.xs]
plt.plot(self.xs, fs, label="4-D")
except Exception as e:
raise
def __show(self):
""" Graph showing """
try:
plt.title("Regression Line/Curve (1-4D)")
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc=2)
plt.grid()
plt.show()
except Exception as e:
raise
if __name__ == '__main__':
try:
random.seed(1)
xs = list(range(0, 50))
ys = [random.randint(0, 1000) for _ in range(50)]
obj = RegressionCurve(xs, ys)
obj.exec()
except Exception as e:
traceback.print_exc()
sys.exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment