2017-03-29 233 views
1

我有一個數據框,其中每一行代表一個日期,其中一些事件記錄在數據庫中。Seaborn - 如何解釋distplot中x軸的值?

每個事件都有一個它所關心的日期,所以例如一個在2017-02-03登錄的事件可能屬於2017-02-02(意思是它在事件發生後的第二天記錄)。

Screenshot of the dataframe head

我試圖想象每一列的分佈在distplot,獲得當被記錄的事件之間的距離的概念,而迄今爲止,它涉及(「關於人們是否會記錄事件同一天,後一天,甚至更晚?「)。

到目前爲止,我已經創建了一個迭代每列並將其繪製成seaborn distplot的函數。然後

def plot(dates): 
    plt.figure(figsize=(45,25)) 
    for date in dates: 
     sns.distplot(df[date], kde=False, bins=len(dates)) 
    return 

情節是這樣的: this

但是,我不知道如何解釋在x軸上的值。

它顯示範圍從0到3500,這是什麼意思?

有沒有其他更好的方法來形象化?

+0

您能更好地解釋數據幀實際包含的內容嗎?行中日期的含義是什麼,列中日期的含義是什麼,數據框中的數字是什麼? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest行索引是記錄事件的日期,列標題中的日期是事件發生的日期。 例如在2017-02-02發生了前一天發生的1092個事件(2017-02-01)和發生在同一天的3136個事件(2017-02-02)。 行的總和會給你當天記錄的總事件數,而列的總和會給出當天發生的總事件數。 – Marius

+0

我認爲這裏的疑惑是,顯然你可以在實際發生之前記錄事件,例如,在2017-02-02有20個事件記錄,只發生8天后(2017-02-10)。 – ImportanceOfBeingErnest

回答

1

sns.distplot是一個直方圖。這意味着它顯示了某個值落入特定區間的頻率。

這裏,計算每列的直方圖。因此,在圖中您發現多長時間一次發生在此列中。 「多久一次」是y軸,位於x軸上。因爲您正在爲數據框的每個n列執行此操作,所以最終會生成n不同的直方圖(每個顏色都不相同)。

例如,每列中只有一個值在3000以上,因此您會在圖中看到一個3000左右的小欄。另一方面,每列中有0到100之間的許多值,因此您會看到一個大約爲0的大塊。

+0

是的,我實際上想要在同一個圖中繪製多個直方圖(以查看它們是否大部分重疊,或者它們是否相似)。 我想我應該使用別的東西時可能會使用distplot錯誤。我想知道的是「事件發生的日期距離記錄的大多數事件有多遠?」。有更好的情節嗎? – Marius

2

在當前skript中,您循環顯示數據並繪製同一圖中的所有輸出。在您提供的示例圖中,x軸顯示在2017-02-28發生的事件,我假定它是數據集中的最後一個日期。但是,不同的顏色會顯示來自其他日期的數據,這些數據會繪製在循環內的同一圖中。關於情節的解釋:x軸顯示每天的事件數量:朝向圖的右側,您可以看到,通常只有一天,大量(> 1000左右)的事件是記錄器。從圖的左側可以看出,只有一個事件被記錄時大約有50天。一個簡單的條形圖可能更易於解釋:它會在x軸上顯示日期,並在y軸上顯示記錄的事件數量。 你可以繪製和修改你的函數如下保存每個日期單獨的條形圖圖:

def plot(dates): 
    for date in dates: 
    plt.figure() 
    plt.bar(np.arange(0,len(dates)),df[date], width=1.0) 
    ax=plt.gca() 
    ax.set_xticks(np.arange(0,len(dates)),)+0.5) 
    ax.set_xticklabels(dates) 
    plt.savefig('barchart_'+date+'.png') 
    return 

可能有更優雅的方式比這個研究你的數據,但我希望這可以幫助您獲得前進。