pandas로 bar,hist,density 그리기
- Python / Pandas
- 2022. 3. 15.
matplotlib에서 특징이 있는 그래프를 그리곤 했었는데 pandas만으로도 여러가지 그래프를 그릴 수 있습니다.
이번 포스팅에서 다룰 그래프는 막대 그래프 종류만으로 구성해보았습니다.
bar, histogram, density 세가지에 대해서 다루어 보겠습니다.
bar plot
시리즈(Series)
-0.5~0.5 사이의 랜덤한 숫자 10개를 bar plot으로 그려보겠습니다.
plot 파라미터로 kind='bar' 를 입력합니다.
np.random.seed(222)
s = pd.Series(np.random.rand(10)-0.5)
s.plot(kind='bar')

판다스에서 하는 것이기 때문에 시리즈나 데이터프레임만 가능합니다.
numpy나 리스트는 matplotlib로 할 수 있습니다.
데이터프레임(DataFrame)
데이터프레임일때도 가능합니다.
df = pd.DataFrame(np.random.rand(10,3),columns=['x','y','z'])
df.plot(kind='bar')

쌓는 bar plot도 가능합니다.
stacked=True를 추가로 입력합니다.
df.plot(kind='bar',stacked=True)

축을 바꾸려면 kind='barh'으로 입력합니다.
df.plot(kind='barh',stacked=True)

히스토그램(histogram)
히스토그램을 그릴려면 판다스에 내장되어있는 hist()를 사용합니다.
hist 안의 파라미터는 matplotlib와는 다르니 주의해야 합니다.
디폴트값으로 히스토그램은 10개 구간으로 나눠집니다.
컬럼이 하나일때
np.random.seed(222)
df = pd.DataFrame(np.random.randn(1000))
df.hist()

구간을 나눌려면 bins를 사용합니다
df.hist(bins=100)

컬럼이 여러개일때
컬럼이 여러개인 데이터프레임을 히스토그램으로 그리면 기본적으로 나눠져서 그려집니다. 즉, subplot으로 나옵니다.
df = pd.DataFrame(np.random.randn(1000,4),columns=['a','b','c','d'])
df.hist()

지정된 컬럼만 히스토그램으로 그리기
컬럼을 지정하면 지정된 컬럼에 한해서 히스토그램을 그립니다. 하지만 hist 메쏘드에서는 여러 컬럼은 안되고 한개의 컬럼에 대해서만 가능합니다.
df.hist(column='a')

지정 컬럼을 정하고 싶다면 plot으로 돌아와 그려냅니다.
한꺼번에 그리고 싶다면 plot으로 돌아와 그려냅니다.
현재의 df는 겹쳐있으므로 약간 위치를 조정하고 그려보겠습니다.
df2 = pd.DataFrame(
{'a': np.random.randn(1000) + 1,
'b': np.random.randn(1000),
'c': np.random.randn(1000) - 1,
'd': np.random.randn(1000)+2
},
columns=['a', 'b', 'c','d'],
)
df2.plot(kind='hist',alpha=0.5)

stacked도 가능합니다.
df.plot(kind='hist',stacked=True)

그룹별로 그리기
해당 데이터프레임이 그룹별로 나눌 수 있을때, 그룹 별로 히스토그램을 따로 그릴 수 있습니다.
df를 4개의 그룹으로 나누겠습니다.
df

Q컬럼을 보면 4개의 그룹으로 나눠진 것을 볼 수 있습니다.
이런 경우 hist에 by='Q' 를 입력하면 그룹별로 히스토그램을 그려줍니다.
df.hist(by='Q')

특정 컬럼에 대해 그룹별로 그리고 싶다면 컬럼을 지정합니다.
df.hist(column='a',by='Q')

축 바꾸기
축을 바꾸고 싶다면 orientation='horizontal' 를 넣어줍니다.
컬럼이 하나더라도 똑같습니다.
여러 컬럼에 대해서만 보이겠습니다.
df.hist(orientation='horizontal')

density plot
히스토그램에서 추정한 선을 그려넣는 density plot입니다.
hist에서 density=True로 density를 허용한 상태로 만든 후 plot에 kind='kde' 를 넣습니다.
정규분포를 그려보겠습니다.
s = pd.Series(np.random.randn(1000))
s.hist(density=True)
s.plot(kind='kde')

정규분포가 아니더라도 density plot이 가능합니다.
s = pd.Series(np.random.rand(1000))
s.hist(density=True)
s.plot(kind='kde')

마치며
보시는 것처럼 히스토그램은 matplotlib와는 약간 다릅니다. 약간의 지식이 필요해보입니다.
각자의 장단점이 있으니 참고하시고 자신에게 더 맞는 툴을 쓰면 될 것 같습니다.
더 다채롭고 싶다면 matplotlib로 하는 게 낫습니다.
그렇지만 hist, plot 을 쓰면 간단한 코드로 그래프를 그려낼 수 있는 부분에서는 판다스가 더 괜찮습니다.
pandas로 그릴 수 있는 그래프가 아직 남았습니다.
나머지는 다음 포스팅에 작성하도록 하겠습니다.
관련 포스팅
ndarray 랜덤한값 생성
'Python > Pandas' 카테고리의 다른 글
[Pandas] 데이터프레임 리스트,numpy 배열로 변환 (0) | 2022.09.22 |
---|---|
pandas로 box,area,scatter 그리기 (0) | 2022.03.17 |
pandas plot (0) | 2022.03.10 |
[Pandas]구간 나누기(pd.cut,pd.qcut) (0) | 2022.03.08 |
[Pandas] 그룹화된 데이터프레임 필터링하기 (0) | 2022.03.07 |
데이터목장님의
글이 좋았다면 응원을 보내주세요!