2017-12-14 9 views
1

ファイアウォールログから収集したデータテーブルをヒストグラムで表示しようとしているため、ファイル内の各日付に1つのバーがあり、特定の列に発生回数が積み重ねられていますバーで。Pyplotスタックヒストグラム - カラム内の発生量

私はここでいくつかの例を検討しましたが、それらはすべて特定の列にどのような値があるかを知ることに基づいているようでした - そして、私がここで達成しようとしているのは、可能なすべてのフィールドを知る。

私は列のようなプロトコルを使用している例では

#!/usr/bin/python 

import pandas as pd 
import numpy as np 
import glob 
import matplotlib.pyplot as plt 

csvs = glob.glob("*log-export.csv") 
dfs = [pd.read_csv(csv, sep="\xff", engine="python") for csv in csvs] 

df_merged = pd.concat(dfs).fillna("") 

data = df_merged[['date', 'proto']] 
np_data = np.array(data) 

plt.hist(np_data, stacked=True) 
plt.show() 

しかし、これは図以下を示しています。

histogram

と私はこのような何かを達成したいと思います:

stacked

これを達成するための提案はありますか?

+0

あなたは1日あたり(プロトコルの)ヒストグラム(または他の方法でラウンドを)埋める必要がありますプロットし、 [ここ](https://matplotlib.org/examples/pylab_examples/bar_stacked.html)のようにプロットします。 現在、1つのヒストグラムに日付とプロトコルを入力しますが、これは意味をなさないものです。 – YSelf

答えて

1

セットアップ
あなたが何も提供しなかったのでデータを補う必要がありました。

df = pd.DataFrame(dict(
    Date=pd.date_range(end=pd.to_datetime('now'), periods=100, freq='H'), 
    Proto=np.random.choice('UDP TCP ICMP'.split(), 100, p=(.3, .5, .2)) 
)) 

ソリューション
使用pd.crosstabが、その後

pd.crosstab(df.Date.dt.date, df.Proto).plot.bar(stacked=True) 

enter image description here

+0

これはまさに私が探していたものでした - ありがとう! –

関連する問題