2017-03-29 249 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 

可能有更优雅的方式比这个研究你的数据,但我希望这可以帮助您获得前进。