2017-12-14 5 views
1

방화벽 로그에서 수집 한 데이터 테이블을 히스토그램에 표시하려고합니다. 파일의 각 날짜마다 하나의 막대가 있고 특정 열의 누적 개수가 누적됩니다. 술집에서.Pyplot Stacked histogram - 열의 발생량

여기 몇 가지 예제를 살펴 보았지만 모두 특정 열에 어떤 값이 있는지 알 수 있다는 사실을 기반으로 한 것처럼 보였습니다. 여기서 얻으려고하는 것은 필요없이 히스토그램을 표시하는 방법입니다 가능한 모든 필드를 알아야합니다.

내가 열로 프로토콜을 사용한 예에서는

:

#!/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

및 I는 다음과 같이 성취하고자 :

stacked

어떤 제안이 이것을 달성하는 방법?

+0

당신은 한 날짜 당 (프로토콜) 히스토그램 (또는 다른 방법으로 라운드를) 작성해야 플롯 [여기] (https://matplotlib.org/examples/pylab_examples/bar_stacked.html)와 같이 그려주십시오. 현재 하나의 히스토그램에 날짜와 프로토콜을 채우는 것은 의미가 없습니다. – 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

이것은 정확히 내가 찾고 있었던 것입니다 - 감사합니다! –