簡體   English   中英

如何可視化來自熊貓數據框的時間數據?

[英]How can I visualize time data from a Pandas Dataframe?

偶爾我會有時間數據,我只想可視化事件發生的頻率。 所以我基本上有一個日期時間列表,我想用

  • x軸為小時(0-24,因此為24個bin)
  • y軸是事件數

所以基本上它是一個直方圖,按小時分組

我已經有一個解決方案,但是如何確保所有24個垃圾箱都存在? (它看起來也可能更好)

最小的例子

#!/usr/bin/env python


"""Create and visualize date with timestamps."""

# core modules
from datetime import datetime
import random

# 3rd party module
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt


def create_data(num_samples, year, month_p=None, day_p=None):
    """
    Create timestamp data.

    Parameters
    ----------
    num_samples : int
    year: int
    month_p : int, optional (default: None)
    day_p : int, optional (default: None)

    Returns
    -------
    data : Pandas.Dataframe object
    """
    data = []
    for _ in range(num_samples):
        if month_p is None:
            month = random.randint(1, 12)
        else:
            month = month_p
        if day_p is None:
            day = random.randint(1, 28)
        else:
            day = day_p
        hour = int(np.random.normal(loc=7) * 3) % 24
        minute = random.randint(0, 59)
        data.append({'date': datetime(year, month, day, hour, minute)})
    data = sorted(data, key=lambda n: n['date'])
    return pd.DataFrame(data)


def visualize_data(df):
    """
    Plot data binned by hour.

    x-axis is the hour, y-axis is the number of datapoints.

    Parameters
    ----------
    df : Pandas.Dataframe object
    """
    df.groupby(df["date"].dt.hour).count().plot(kind="bar")
    plt.show()


df = create_data(2000, 2017)
visualize_data(df)

如您所見,缺少7、9和10。

在此處輸入圖片說明

使用所有值對所得的DataFrame 重新索引 ,然后調用plot方法:

res = df.groupby(df["date"].dt.hour).count().reindex(np.arange(24), fill_value=0)
res.plot(kind="bar")
plt.show()

在此處輸入圖片說明

試試這個功能:

def visualize_data(df):
    """
    Plot data binned by hour.

    x-axis is the hour, y-axis is the number of datapoints.

    Parameters
    ----------
    df : Pandas.Dataframe object
    """
    y = df.groupby(df["date"].dt.hour).count()
    for i in range(24):
        y.loc[i] = 0 if i not in y.index else y.loc[i]  # Add missing locations.
    y.sort_index(inplace = True)   # Sort the locations.
    y.plot(kind="bar")
    plt.show()
matplotlib.style.use('ggplot')

參見-https://pandas.pydata.org/pandas-docs/stable/visualization.html

如您所見,缺少7、9和10。

O事件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM