import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
x = np.array([[1920,1925,1930,1935,1940,1945,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2020,2025,2030,2035,2045,2055,2065,2075,2085,2095]]).T
y = np.array([[55963,59737,64450,69254,71933,72147,84115,90077,94302,99209,104665,111940,117060,121049,123611,125570,126926,127768,128033,128084,128032,128057,127834,127593,127414,127237,127095,126933,125325,122544,119125,115216,106421,97441,88077,78564,70381,63125]]).T
# train a linear regression model
regr = Pipeline([
('poly', PolynomialFeatures(degree=4)),
('linear', LinearRegression())
])
regr.fit(x, y)
# make predictions
xt = np.linspace(1920, 2100, num=300, dtype = 'int').reshape(300, 1)
yt = regr.predict(xt)
# plot samples and regression result
plt.plot(x, y, 'o')
plt.plot(xt, yt)
plt.show()