热线电话:13121318867

登录
2020-09-09 阅读量: 28289
用python拟合出每个客户的线性方程,主要想看斜率

如图,我有每个客户近6-近1的数据,想算出每个客户近6-近1数据的斜率,每个客户的斜率都要算出来,x 是近1到近6这6列的数据,y取1,2,3,4,5,6就可以,因为y代表月份,近1个月到近6个月的月份 代表y
测试文件已传

近6.xlsx

1.png


71.8775
42
关注作者
收藏
评论(20)

发表评论
wangxishi
2020-09-10

以为我也想用一元线性方程,所以一元线性方程对应的x,y的参数,x是自变量,y是因变量,那么其实x应该是日期吧

0.0000 0 0 回复
ermutuxia
2020-09-10

是的

0.0000 0 0 回复
wangxishi
2020-09-10

好像是你说的这样的,那么我是不是把代码里面x变量和y变量换一下就可以了

0.0000 0 0 回复
ermutuxia
2020-09-10

按照我的理解如果你想研究这个指标的变化趋势,横轴应该是时间,纵轴应该是指标值,那么x应该是时间,y是具体的指标值。你看下是否应该这样。

0.0000 0 0 回复
wangxishi
2020-09-10

还有个问题,我这个代码里面,近6的数代表前6个月的数据,对应的y为“1”,那么如果我的斜率是正数,就说明我的近6到近1的数据是上升趋势对吧

0.0000 0 0 回复
wangxishi
2020-09-10

我找到原因了,问题出在我的缩进有问题,data2.loc[i,"斜率"]=coef这行代码的缩进不正确导致的,现在可以了,感谢!

0.0000 0 0 回复
wangxishi
2020-09-10

1.png

0.0000 0 0 回复
ermutuxia
2020-09-10

我把你的截图下载下来查看,发现里面没有截取斜率数据,你重新截一下

0.0000 0 0 回复
wangxishi
2020-09-10

我只跑出来了最后一行数据的斜率,是不是循环出问题了?

0.0000 0 0 回复
wangxishi
2020-09-10

我这样跑出来为什么斜率都是空的呢,只有一个有值

for i in range(rows):

reg=linear_model.LinearRegression()

id=data2["credit_no"][i]

x=data2.loc[i,"近6个月里程数":"近1个月里程数"].values.reshape(6,1)

y=[1,2,3,4,5,6]

try:

reg.fit(x,y)

coef=reg.coef_[0]

except:

coef="异常情况"


data2.loc[i,"斜率"]=coef

1.png

0.0000 0 0 回复
s1223452840
2020-09-09

image.png

0.1045 1 0 回复
s1223452840
2020-09-09

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

plt.rcParams['font.family'] = ['sans-serif']

plt.rcParams['font.sans-serif'] = ['SimHei']


# 读取数据

data_1 = pd.read_excel("直线.xlsx",index_col = "序号")

data_1


#创建一个拟合直线的函数

def linear_regression(x, y):

N = len(x)

sumx = sum(x)

sumy = sum(y)

sumx2 = sum(x ** 2)

sumxy = sum(x * y)

A = np.mat([[N, sumx], [sumx, sumx2]])

b = np.array([sumy, sumxy])

return np.linalg.solve(A, b)


slope = []

for i in range(288):

slope.append(list(linear_regression(data_1.iloc[i],b))[0])

slope


32.4776 1 0 回复
ermutuxia
2020-09-09

image.png

image.png

0.1045 1 0 回复
ermutuxia
2020-09-09

#导入库

import pandas as pd

import numpy as np

#导入数据

data=pd.read_excel("C:\\Users\\Administrator\\Desktop\\1599639998_298148.xlsx")

from sklearn import linear_model

#将没有求得的斜率预设为缺失值

data["斜率"]=np.nan


#求数据行数

rows=data.shape[0]

#从第一行(第一个人)开始,进行循环,多少行数据就循环多少次,做多少个回归

for i in range(rows):

reg=linear_model.LinearRegression()

#调取第i行的x数据

id=data["序号"][i]

x=data.loc[i,"近6":"近1"].values.reshape(6,1)

y=[1,2,3,4,5,6]

#如果遇到不能回归的情况可以跳过去,比如缺失值太多无法回归

try:

reg.fit(x,y)

coef=reg.coef_[0]


except:

coef="异常情况"

data.loc[i,"斜率"]=coef


#将结果导出

data.to_excel("C:\\Users\\Administrator\\Desktop\\结果.xlsx")



image.png



0.1045 1 0 回复
s1223452840
2020-09-09

image.png 2.002就是第一条直线的斜率,你再写个循环即可

0.1045 1 0 回复
s1223452840
2020-09-09

https://www.jb51.cc/python/185582.html 你可以参考一下这个网址

0.0000 0 0 回复
wangxishi
2020-09-09

对,比如第一个人的x有6个数值,y就是1,2,3,4,5,6,然后拿x和y做出一元线性方程,y=ax+b,我主要想看的是每个客户的这个一元线性方程里面的a,就是斜率

0.0000 0 0 回复
ermutuxia
2020-09-09

最后多少个人就是多少个斜率

0.0000 0 0 回复
ermutuxia
2020-09-09

比如第一个人的x有六个数,y有6个数,然后用x和y做回归,求斜率,是这样吗?

0.0000 0 0 回复
ermutuxia
2020-09-09

你是通过回归求斜率吗?

0.0000 0 0 回复