import matplotlib.pyplot as plt
plt.figure(figsize=(8, 2),dpi=80 )
x = 销售数据[“统计日期”][:31]
y = 销售数据[“商品访客数”][:31]
plt.plot(x, y)
plt.xticks(rotation=-90);
from mpl_toolkits import mplot3d
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
ax = plt.axes(projection=‘3d’)
zdata = f1[“直通车展现量”]
ydata = f1[“直通车花费”]
xdata = f1[“序号”]
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap=‘Reds’)
plt.figure(figsize=(10, 4),dpi=80 )
a_money = G7[“直通车展现量”]
b_money = G7[“直通车花费”]
tick_label = G7[“序号”]
a=np.arange(1,62,2)
b=np.arange(1.5,63.5,2)
plt.bar(a, a_money, width=0.5, tick_label=tick_label,
label=‘展现量’)
plt.bar(b, b_money, width=0.5,
tick_label=tick_label, label=‘花费’)
plt.legend()
最小二乘法
from math import e # 引入自然数e
import numpy as np # 科学计算库
import matplotlib.pyplot as plt # 绘图库
from scipy.optimize import leastsq # 引入最小二乘法算法
样本数据(Xi,Yi),需要转换成数组(列表)形式
ti = np.array(f[f[“产品”]“G7”][“序号”])
yi = np.array(f[f[“产品”]“G7”][“销量”])
需要拟合的函数func :指定函数的形状,即n(t)的计算公式
def func(params, t):
m, p, q = params
fz = (p * (p + q) ** 2) * e ** (-(p + q) * t) # 分子的计算
fm = (p + q * e ** (-(p + q) * t)) ** 2 # 分母的计算
nt = m * fz / fm # nt值
return nt
误差函数函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
一般第一个参数是需要求的参数组,另外两个是x,y
def error(params, t, y):
return func(params, t) - y
k,b的初始值,可以任意设定, 一般需要根据具体场景确定一个初始值
p0 = [100, 0.01, 0.3]
把error函数中除了p0以外的参数打包到args中(使用要求)
params = leastsq(error, p0, args=(ti, yi))
params = params[0]
读取结果
m, p, q = params
print(‘m=’, m) # 最大市场潜力
print(‘p=’, p) # 创新系数
print(‘q=’, q)# 模仿系数
u价格因子
有了参数后,就是计算不同t情况下的拟合值
y_hat = []
for t in ti:
y = func(params, t)
y_hat.append(y)
接下来我们绘制实际曲线和拟合曲线
由于模拟数据实在太好,两条曲线几乎重合了
fig = plt.figure()
plt.scatter(ti, yi, color=‘r’, label=‘true’)
plt.plot(ti, y_hat, color=‘b’, label=‘predict’)
plt.title(‘BASS model’)
plt.legend()
最小二乘法
from math import e # 引入自然数e
import numpy as np # 科学计算库
import matplotlib.pyplot as plt # 绘图库
from scipy.optimize import leastsq # 引入最小二乘法算法
样本数据(Xi,Yi),需要转换成数组(列表)形式
ti = np.array(f[f[“产品”]“E3”][“序号”])[:30]
yi = np.array(f[f[“产品”]“E3”][“销量”])[:30]
需要拟合的函数func :指定函数的形状,即n(t)的计算公式
def func(params, t):
m, p, q = params
fz = (p * (p + q) ** 2) * e ** (-(p + q) * t) # 分子的计算
fm = (p + q * e ** (-(p + q) * t)) ** 2 # 分母的计算
nt = m * fz / fm # nt值
return nt
误差函数函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
一般第一个参数是需要求的参数组,另外两个是x,y
def error(params, t, y):
return func(params, t) - y
k,b的初始值,可以任意设定, 一般需要根据具体场景确定一个初始值
p0 = [100, 0.01, 0.3]
把error函数中除了p0以外的参数打包到args中(使用要求)
params = leastsq(error, p0, args=(ti, yi))
params = params[0]
读取结果
m, p, q = params
print(‘m=’, m) # 最大市场潜力
print(‘p=’, p) # 创新系数
print(‘q=’, q)# 模仿系数
u价格因子
有了参数后,就是计算不同t情况下的拟合值
y_hat = []
for t in ti:
y = func(params, t)
y_hat.append(y)
接下来我们绘制实际曲线和拟合曲线
fig = plt.figure()
plt.scatter(ti, yi, color=‘r’, label=‘true’)
plt.plot(ti, y_hat, color=‘b’, label=‘predict’)
plt.title(‘BASS model’)
plt.legend()
LinearRegression
lr=LinearRegression().fit(x_train,y_train)
y_lr_predict = lr.predict(x_test)
print(“lr的均方误差为:”,mean_squared_error(y_test,y_lr_predict))
plt.figure(figsize=(8,4),dpi=100)
plt.title(“LinearRegression”)
plt.plot(y_test,y_lr_predict, ‘*r’)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], ‘b-.’, lw=4) # y=x
plt.ylabel(“Predieted Price”)
plt.xlabel(“Real Price”)
plt.show()