时间序列中各列的相关性

时间:2019-06-21 16:35:07

标签: python pandas

我试图了解销售活动与已结订单的相关性。

例如,1月的销售活动在2月带来了一定数量的机会,从而在3月赢得了一定数量的订单。我遇到的困难是,活动/机会/赢得订单之间并不总是有一个月的间隔。在我看来,pandas .corr想使用特定的数据集,但这是我的未知数之一,也是我试图理解的事情之一。另一个困难是天平。通话次数以通话次数为准。机会和获胜订单以美元计算。所以我的问题是,有没有一种方法可以最好地拟合来自不同列的数据,以便我可以应用相关性?

将熊猫作为pd导入

d = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
     'Year': [2019, 2019, 2019, 2019, 2019],
    'CallsActivity': [10, 20, 30, 40, 50],
    'NewOpportunitiesRevenue': [0, 5000, 10000, 15000, 20000],
    'WonOpportunitiesRevenue': [0, 0, 1000, 2000, 3000]
}
df = pd.DataFrame(data=d)

我希望它显示为以下内容:

correlation_d = {
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
     'Year': [2019, 2019, 2019, 2019, 2019],
    'CallsActivity': [10, 20, 30, 40, 50],
    'NewOpportunitiesRevenue': [5000, 10000, 15000, 20000, 'NaN'],
    'WonOpportunitiesRevenue': [1000, 2000, 3000, 'NaN', 'NaN']
}
correlation_df = pd.DataFrame(data=correlation_d)

input(correlation_df)

如果在这个简单的示例中手动移动列,则可以使相关起作用,但是我不知道从哪里开始为我的实际数据集自动化研究的那一部分。我很感谢对此的见识。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果我将您的问题解释为:“如何自动为每列选择理想的滞后量?”然后,您可以做的是: 循环执行以下操作: 1)计算两列之间的相关性, 2)将相关性与已经看到的最新最大相关性进行比较,如果新相关性大于最新最大值,则更新最大值以包含找到的新相关性(因为它更大),否则将最大值保持为它是。每次发现新的最大值时,还要记录列最大值的最新行移位(滞后)。 3)上下移动两列之一 X 。 4)返回循环顶部。

循环将继续进行,直到您无法再上下移动列并且已经探究了所有合理的滞后为止。然后,您将观察到最大的相关性,并给出最大的相关性。 从大的 X 开始非常重要,这样算法才能快速运行并调整 X 越来越小,需要权衡精度与速度。

我相信这14分钟的视频可能也会对您有所帮助。它将教您如何进行滚动统计和滚动函数,以便您可以基于函数和现有行自动创建新行:Rolling statistics - p.11 Data Analysis with Python and Pandas Tutorial

但是,我不确定您是否在为所有列自动上下移动给定的滞后量时遇到麻烦,或者在确定开始时的理想滞后量时是否遇到麻烦每列?我会通过评论问您这个问题,除了我还没有足够的声誉点来做到这一点...

编辑:如果要计算“滚动窗口”(一直沿数据移动的子样本)的相关性,也可以使用pandas.rolling_corr()。但是我相信您仍然需要自己循环移动数据以找到最佳延迟。要移动数据,请使用切片器符号df ['第一列名称'] [Shift_variable:]