[英]Correlation of columns across time series
我試圖了解銷售活動與已結訂單的相關性。
因此,例如,1月份的銷售活動在2月導致了一定數量的機會,這導致3月份贏得了一定數量的訂單。 我遇到的困難是活動/機會/贏得訂單之間並不總是有一個月的滯后。 在我看來,pandas .corr想要使用特定的數據集,但這是我未知的事情之一,也是我想要了解的事情之一。 另一個難點是尺度。 呼叫以呼叫數量來衡量。 機會和贏得的訂單以美元計算。 所以我的問題是,有沒有辦法最好地適應來自不同列的數據,以便我可以應用相關性?
將pandas導入為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)計算兩列之間的相關性,2)將該相關性與已經看到的最新最大相關性進行比較,如果新的相關性大於最新的最大值,則更新最大值包含找到的新關聯(因為它更大),否則保持最大值。 每次找到新的最大值時,還記錄最新最大值的列行移位(滯后)。 3)將兩列中的一列向上/向下移動X行。 4)回到循環的頂部。
循環應該繼續,直到你不能再向上/向下移動列,你已經探索了所有合理的滯后。 然后,您將獲得觀察到的最大相關性以及給出它的偏移量(滯后)。 從一個大的X開始是非常重要的,這樣算法可以快速運行並調整X以使其更小和更小,以便在速度上權衡准確性。
我相信這個14分鍾的視頻也可以幫到你。 它將教您如何進行滾動統計和滾動功能,以便您可以根據函數和現有行自動創建新行: 滾動統計 - 第11頁使用Python和Pandas教程進行數據分析
但是,我不確定您是否無法將列向上和向下移動給定滯后量,自動對所有列,或者如果您在確定每列開始的理想滯后量時遇到問題? 我會通過評論問你這個問題,除了我還沒有足夠的聲譽點才能做到這一點......
編輯: 如果要計算“滾動窗口”(繼續沿數據移動的子樣本)的相關性,也可以使用pandas.rolling_corr()。 但我相信你仍然需要自己在循環中移動數據以找到最佳滯后。 要移動數據,請使用切片器符號df ['1st Column name'] [Shift_variable:]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.