如何使用Python进行节目观众数的线性回归预测
的有关信息介绍如下:线性回归预测模型是机器学习中的基本算法之一,使用于很多场景的预测,如可以根据房子的面积简单预测房子的价格,也可以进行预测下周哪个电视节目会有更多的观众,这里我们以预测电视节目的观众为场景,具体说明如何使用Python进行预测的。
首先我们需要准备用于预测的数据
我们将数据保存在csv文件中然后在python中读取出来供应用处理。
样例数据:
sdx,sdx_number,ljx,ljx_number
1,4.83,1,2.84
2,4.27,2,2.32
3,3.59,3,2.55
4,3.53,4,2.49
5,3.46,5,2.73
6,3.73,6,2.6
7,3.47,7,2.64
8,4.34,8,3.92
9,4.66,9,3.06
在Python中到定义一个函数将文件中的数据读取到我们的内存模型中,我们使用pandas库进行数据读取,如下所示:
#导入依赖库
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets,linear_model
#读取cvs文件的数据的函数
def read_data(file_name):
data=pd.read_csv(file_name)
#文件的数据模型
shandianxia_x_param=[]
shandianxia_y_param=[]
lvjianxia_x_param=[]
lvjianxia_y_param=[]
#数据填充
for x1,y1,x2,y2 in zip(data['sdx'],data['sdx_number'],data['ljx'],data['ljx_number']):
shandianxia_x_param.append([float(x1)])
shandianxia_y_param.append([float(y1)])
lvjianxia_x_param.append([float(x2)])
lvjianxia_y_param.append([float(y2)])
return shandianxia_x_param,shandianxia_y_param,lvjianxia_x_param,lvjianxia_y_param
print(read_data('e:/jiemudata.csv'))
定义一个函数,根据上一个步骤读取的数据进行预测对比看看那个界面更受欢迎。
def compare_viewers(x1,y1,x2,y2):
reg1=linear_model.LinearRegression()
reg1.fit(x1,y1)
shandianxia_predicated_value=reg1.predict(10)
reg2=linear_model.LinearRegression()
reg2.fit(x2,y2)
lvjianxia_predicated_value=reg2.predict(10)
if shandianxia_predicated_value>lvjianxia_predicated_value:
print("闪电侠在下一周会有更多观众")
else:
print("绿箭侠在下周会有更多观众")
进行数据预测和比对,将read_data获取到的数据传入compare_viewers函数中:
all_data=read_data('e:/jiemudata.csv')
compare_viewers(all_data,all_data,all_data,all_data)
运行程序后可以看到结果如下图所示
为了更形象、更直观表现数据,我么把相关数据使用图表展现出来,我么在比对函数中增加数据表展现功能:
def compare_viewers(x1,y1,x2,y2):
reg1=linear_model.LinearRegression()
reg1.fit(x1,y1)
shandianxia_predicated_value=reg1.predict(10)
#将预测值加入到数据模型中,统一展现
x1.append()
y1.append([shandianxia_predicated_value])
plt.figure()
plt.title("Jiemu Number View")
plt.xlabel("Week")
plt.ylabel("Numbers")
plt.axis([0,10,0.0,10.0]) #x,y轴的范围值
plt.grid(True)
plt.plot(x1,y1,'r.')
reg2=linear_model.LinearRegression()
reg2.fit(x2,y2)
lvjianxia_predicated_value=reg2.predict(10)
x2.append()
y2.append([lvjianxia_predicated_value])
plt.plot(x2,y2,'g*')
plt.show()
if shandianxia_predicated_value>lvjianxia_predicated_value:
print("闪电侠在下一周会有更多观众")
else:
print("绿箭侠在下周会有更多观众")
运行完整的代码,就可以看到所有的数据,包含了预测的数据在图表中展现出来,完整的代码如下:
#导入依赖库
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets,linear_model
#读取cvs文件的数据的函数
def read_data(file_name):
data=pd.read_csv(file_name)
#文件的数据模型
shandianxia_x_param=[]
shandianxia_y_param=[]
lvjianxia_x_param=[]
lvjianxia_y_param=[]
#数据填充
for x1,y1,x2,y2 in zip(data['sdx'],data['sdx_number'],data['ljx'],data['ljx_number']):
shandianxia_x_param.append([float(x1)])
shandianxia_y_param.append([float(y1)])
lvjianxia_x_param.append([float(x2)])
lvjianxia_y_param.append([float(y2)])
return shandianxia_x_param,shandianxia_y_param,lvjianxia_x_param,lvjianxia_y_param
#预测并比对
def compare_viewers(x1,y1,x2,y2):
reg1=linear_model.LinearRegression()
reg1.fit(x1,y1)
shandianxia_predicated_value=reg1.predict(10)
#将预测值加入到数据模型中,统一展现
x1.append()
y1.append([shandianxia_predicated_value])
plt.figure()
plt.title("Jiemu Number View")
plt.xlabel("Week")
plt.ylabel("Numbers")
plt.axis([0,10,0.0,10.0]) #x,y轴的范围值
plt.grid(True)
plt.plot(x1,y1,'r.')
reg2=linear_model.LinearRegression()
reg2.fit(x2,y2)
lvjianxia_predicated_value=reg2.predict(10)
x2.append()
y2.append([lvjianxia_predicated_value])
plt.plot(x2,y2,'g*')
plt.show()
if shandianxia_predicated_value>lvjianxia_predicated_value:
print("闪电侠在下一周会有更多观众")
else:
print("绿箭侠在下周会有更多观众")
#进行数据预测和比对
all_data=read_data('e:/jiemudata.csv')
compare_viewers(all_data,all_data,all_data,all_data)
最后我们在给一系列的预测,创建一个拟合图形展现
plt.plot(x1,reg1.predict(x1),'r-')#绿色线条
plt.plot(x2,reg2.predict(x2),'g-')#绿色线条
------------compare_viewers函数完整代码-----------------------
#预测并比对
def compare_viewers(x1,y1,x2,y2):
reg1=linear_model.LinearRegression()
reg1.fit(x1,y1)
shandianxia_predicated_value=reg1.predict(10)
#将预测值加入到数据模型中,统一展现
x1.append()
y1.append([shandianxia_predicated_value])
plt.figure()
plt.title("Jiemu Number View")
plt.xlabel("Week")
plt.ylabel("Numbers")
plt.axis([0,15,0.0,10.0]) #x,y轴的范围值
plt.grid(True)
plt.plot(x1,y1,'r.')
#绘制拟合模型
plt.plot(x1,reg1.predict(x1),'r-')#绿色线条
reg2=linear_model.LinearRegression()
reg2.fit(x2,y2)
lvjianxia_predicated_value=reg2.predict(10)
x2.append()
y2.append([lvjianxia_predicated_value])
if shandianxia_predicated_value>lvjianxia_predicated_value:
print("闪电侠在下一周会有更多观众")
else:
print("绿箭侠在下周会有更多观众")
plt.plot(x2,y2,'g*')
#绘制拟合模型
plt.plot(x2,reg2.predict(x2),'g-')#绿色线条
plt.show()