将数据帧上线性回归的日期转换为浮点

似乎OLS线性回归要在熊猫身上很好地工作,参数必须是浮动的。我从以下形式的csv(称为“gameAct.csv”)开始:

日期、城市、玩家、销售额
2014-04-28,伦敦,1111091.28
2014-04-29,伦敦,1001100.44
2014-04-28,巴黎,871001.33

我想对销售如何依赖于日期进行线性回归(随着时间的推移,销售如何变化?)。我下面的代码的问题似乎是日期不是浮点值。我将非常感谢您对如何解决熊猫索引问题的帮助

我当前的(非工作,但正在编译代码):

将熊猫作为pd导入
从熊猫导入数据帧,系列
将statsmodels.formula.api作为sm导入
df=pd.read\u csv('gameAct.csv')
df.columns=['date'、'city'、'players'、'sales']
城市数据=df[df['city']=='London']
结果=sm.ols(公式='sales~date',data=city\u data).fit()

当我改变城市值时,我得到R^2=1的结果,这是错误的。我还尝试了index\u col=0,parse\u dates==True'来定义dataframe df,但没有成功

我怀疑有更好的方法读取此类csv文件,以便对日期执行基本回归,也可以进行更一般的时间序列分析。感谢您的帮助、示例和资源

注意,使用上述代码,如果我将日期索引(针对给定城市)转换为数组,则该数组中的值的形式如下:

'\xef\xbb\xbf2014-04-28'

如何对所有非销售参数进行AIC分析?(例如,结果可能是销售额与日期和城市的线性关系最为密切)

对于这种回归,我通常将日期或时间戳转换为自数据开始以来的整数天数

这很好地实现了这一点:

df=pd.read\u csv('test.csv'))
df['date']=pd.to_datetime(df['date'])
df['date_delta']=(df['date']-df['date'].min())/np.timedelta64(1,'D'))
城市数据=df[df['city']=='London']
结果=sm.ols(公式='sales~date_delta',data=city_data).fit()

此方法的优点是,您可以确定回归中涉及的单位(天),而自动转换可能会隐式使用其他单位,从而在线性模型中创建混乱的系数。它还允许您将在不同时间开始的多个销售活动的数据合并到您的回归中(假设您对活动的有效性感兴趣,这是活动天数的函数)。如果你有兴趣测量一年中的某一天的趋势,你也可以选择1月1日作为你的0。选择自己的0日期可以让您控制所有这些

还有证据表明statsmodels支持熊猫的时间序列。您也可以将其应用于线性模型:
http://statsmodels.sourceforge.net/stable/examples/generated/ex_dates.html

另外,请注意:
您应该能够直接从csv中自动读取列名,就像我发布的示例代码一样。在您的示例中,我看到csv文件第一行中的逗号之间有空格,导致列名称像“date”。删除空格,自动读取csv标题就可以了

发表评论