wangxishi

2020-09-09   阅读量: 19650

Python 数据分析师

用python拟合出每个客户的线性方程,主要想看斜率

扫码加入数据分析学习群

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

近6.xlsx

1.png


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
71.8775 1 42 关注作者 收藏

评论(20)

ermutuxia
2020-09-10





通过调用dir(reg),可以查看reg后面可以跟哪些属性和方法


image.png

image.png

0.1718 1 0 回复
wangxishi
2020-09-10

好的,如果想看完整的回归方程并画图,可以操作吗

0.0000 0 0 回复
ermutuxia
2020-09-11

可以看下我写的这个帖子

15.9718 1 0 回复
ermutuxia
2020-09-11

https://www.pinggu.com/post/details/5f5b00e548b2b7754effa41b

0.0000 0 0 回复
ermutuxia
2020-09-10

reg.coef_ 这个是编写sklearn库的人这样命名的,coef_是reg对象的一个属性,这个命名我们自己改不了。也许编写这个库的人哪天觉得coef_这个名字不好听就换掉。目前就只能这样用

0.0000 0 0 回复
wangxishi
2020-09-10

coef=reg.coef_[0]后面的[0]是切片位置从0开始对吧,那reg.coef和[0]中间为什么会有下划线呢

0.0000 0 0 回复
ermutuxia
2020-09-10

这一句没什么用

0.0000 0 0 回复
ermutuxia
2020-09-10

序号那一列的第i个值就是第i个人的id

0.0000 0 0 回复
wangxishi
2020-09-10

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

这行是怎么实现调取第i行数据的,我看后面没有调用id的代码呀

如果想看整个线性回归方程并画图,可以看吗?

0.0000 0 0 回复
ermutuxia
2020-09-10

这是把某个斜率从斜率列表里面调出来,虽然只有一个x也就是一个斜率,但是这个斜率也是放在一个列表里,需要通过切片的方式把这个数字调出来

0.0000 0 0 回复
wangxishi
2020-09-10

coef=reg.coef_[0]

这个代码是啥意思

0.0000 0 0 回复
wangxishi
2020-09-10

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

这行是怎么实现调取第i行数据的,我看后面没有调用id的代码呀

0.0000 0 0 回复
ermutuxia
2020-09-10

image.png

0.0000 0 0 回复
ermutuxia
2020-09-10

#导入库

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]

#要求y是一维数组

y=data.loc[i,"近6":"近1"].values

#要求x是二维数组,哪怕x只由一个变量

x=np.array([1,2,3,4,5,6]).reshape(6,1)

try:

reg.fit(x,y)

coef=reg.coef_[0]


except:

coef="异常情况"

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


0.0000 0 0 回复
ermutuxia
2020-09-10

不客气!

0.1045 1 0 回复
wangxishi
2020-09-10

好的 谢谢!

0.0000 0 0 回复
ermutuxia
2020-09-10

是的,斜率为正表示上升,为负表示下降

0.1045 1 0 回复
wangxishi
2020-09-10

出来了,这种情况下,斜率是正数,就是表示6个月由远到近数值在上升吧

1.png

0.0000 0 0 回复
ermutuxia
2020-09-10

出现这个错误是因为传入的y要求是一维数组,x要求是二维数组,而你简单互换身份后,没有讲x设定为二维数组,y设定为一维数组。应该这样改:

#要求y是一维数组

y=data.loc[i,"近6":"近1"].values

#要求x是二维数组,哪怕x只由一个变量

x=np.array([1,2,3,4,5,6]).reshape(6,1)


0.1045 1 0 回复
ermutuxia
2020-09-10

出现这个错误是因为传入的y要求是一维数组,x要求是二维数组,而你简单互换身份后,没有讲x设定为二维数组,y设定为一维数组。应该这样改:

#要求y是一维数组

y=data.loc[i,"近6":"近1"].values

#要求x是二维数组,哪怕x只由一个变量

x=np.array([1,2,3,4,5,6]).reshape(6,1)


0.1045 1 0 回复
wangxishi
2020-09-10

变换x和y以后,代码这么写,斜率出来都显示是异常情况,是什么原因呢

for i in range(rows):

reg=linear_model.LinearRegression()

id=data2["credit_no"][i]

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

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

try:

reg.fit(x,y)

coef=reg.coef_[0]

except:

coef="异常情况"

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


0.0000 0 0 回复
ermutuxia
2020-09-10

是的x就是日期,一般x是确定的,能够控制的,日期就相当于是确定的,每走一个月加一个数字1

0.0000 0 0 回复

推荐课程