使用Python中的时间序列数据创建水平条形图

时间:2016-04-27 04:06:28

标签: python pandas matplotlib plot graph

我有以下问题:

鉴于pandas数据框有许多独特的主机名,我想绘制一个水平条形图,表明该主机名发生特定问题的时间长度。

我有以下代码:

# Create a bar plot for each unique system name of all ticket entries
for sys_name in unique_sys_names:
    # Grab the df that refers to just the issues with that system name
    j_data_sys = eff_j_data[eff_j_data['System Name'] == sys_name]
    eff_j_data_sys = j_data_sys[['Created','Resolved','Summary']]
    eff_j_data_sys.plot.barh(x=eff_j_data_sys['Resolved']-eff_j_data_sys['Created'],y=range(0,len(eff_j_data_sys)))

基本上,我在一个更大的pandas数据帧中有唯一的主机名,每个都有一个从1到N的问题。在for循环中,我只是遍历唯一的主机名(sys_name),然后我抓住了所有的与j_data_sys中的主机名相关的问题。然后我抓住每个问题的创建和解决的所有时间以及问题摘要。我想做的只是如下图所示:Example Bar Plot

当然,这可能包括N个问题,每个问题都有相应的开始和结束时间戳。

包含此数据的示例数据框将是:

           Created            Resolved           Summary
9  2016-04-25 10:29:00 2016-04-26 13:22:00  1 Blade Missing
10 2016-04-25 10:10:00 2016-04-25 10:23:00  Blade in Lockdown

建议以适当的方式最佳地表示此数据的任何其他建议。

谢谢,

1 个答案:

答案 0 :(得分:0)

我认为您不需要条形图,因为它用于可视化分类数据的相对分布。一种解决方案可以使用以下方法。让我们假设我们以csv格式提供测试数据。

In [1]: import pandas as pd
        import matplotlib.pyplot as plt
        df = pd.read_csv("df.txt", parse_dates = ["Created", "Resolved"], index_col = "Summary")
        df = df.stack().reset_index().rename(columns={0:"date"}).set_index("date")[["Summary"]]
        df = pd.get_dummies(df).applymap(lambda x:x if x else pd.np.nan)
        for n, col in enumerate(df.columns): df[col] = df[col]*n
        df.plot(lw=10, legend=False)
        plt.yticks(pd.np.arange(len(df.columns)), df.columns)
        plt.tight_layout()
        plt.show()

基本上,上面的代码是转换" Created和Resolved"新数据帧的索引中的列,然后在发生时为每个事件分配数值,如果不是则为NaN。结果数据框是:

In [2]: df
Out[2]: 
                     Summary_1 Blade Missing  Summary_Blade in Lockdown
date                                                                   
2016-04-25 10:29:00                      0.0                        NaN
2016-04-26 13:22:00                      0.0                        NaN
2016-04-25 10:10:00                      NaN                        1.0
2016-04-25 10:23:00                      NaN                        1.0

结果图:

enter image description here

我希望这可以帮到你。 问候。