250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

Python 연습장

Python Visualization(1) - Pandas 내장 Plot 함수 본문

코딩

Python Visualization(1) - Pandas 내장 Plot 함수

포숑 2021. 12. 30. 20:15
728x90

데이터를 탐색할 때, 그리고 데이터 가공 후 모델링 후에 결과를 효과적으로 표현할 때에는 시각화가 중요하다.

요즘에는 tableau를 통한 시각화를 많이 사용하고 있다는데, 파이썬에서 데이터 굴리는 게 더 익숙한 나로서는 파이썬에서 바로 편집하는 게 더 수월하다.

Python에서는 기본적으로 matplotlib과 seaborn을 통해 시각화 기능을 구현하고 pandas에서 갖고 있는 기본 내장 함수도 있다.

오늘은 별도의 import 없이 바로 사용할 수 있는 Pandas 내장 plot 함수에 대해 알아보려고 한다.

 

먼저 데이터셋을 불러오자. 앞에 포스팅했던 sklearn 내장 데이터셋을 활용했다.

import pandas as pd
from sklearn.datasets import load_iris 
iris = load_iris() 
df = pd.DataFrame(data = iris.data, columns = iris.feature_names)
df['target'] = iris.target_names[iris.target] 
print(df)
  sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
5 5.4 3.9 1.7 0.4 setosa

위와 같이 데이터프레임이 출력되고, 칼럼명은 단위까지 있어서 복잡하니까 iloc로 숫자로 불러오겠다.

df['sepal length (cm)'] 은 df.iloc[:,0] 과 동일한 결과를 가져온다.

 

sepal length 를 plot으로 표현하려면 matplotlib을 불러오기 전 기본 내장 함수로 볼 수 있다.

df.iloc[:,0].plot() # 또는 df.iloc[:,0].plot(kind='line')

여기서 x는 자동적으로 index가 되고 y는 sepal length 다. 

 

데이터의 탐색 시 맨 처음 확인하는 게 데이터의 분포인데, 전통적으로 데이터 분포를 처음에 확인하는 그래프는 단연 히스토그램이다. 
histogram도 별도의 함수를 불러올 필요없이 바로 작동된다.

df.iloc[:,0].hist()

x 축은 데이터 값 range 이고 y 축은 해당 범위에 속하는 데이터의 개수다.

histogram의 bin 개수는 hist(bins = 10) 으로 조정 가능하다.

 

histogram을 봤으면 boxplot도 봐야지.

df.boxplot()

혹은 하나만 보고 싶으면 아래와 같이 입력하면 된다.

df[['sepal length (cm)']].boxplot()

 

scatter plot 도 마찬가지로 scatter()로 나오면 좋겠지만 이런 함수는 없다. scatter 그리기는 다른 함수 대비 까다롭다.

칼럼 하나만 불러오는 판다스 시리즈 형태로는 그릴 수 없고 데이터 프레임에만 함수가 사용 가능하다.

df.plot(kind='scatter')로 입력 후 x, y를 반드시 지정해줘야 한다.

df.plot(kind='scatter',x='sepal length (cm)', y='sepal width (cm)')

 

 

barplot도 확인할 수 있다.

인덱스 별로 barplot을 그리면 지저분하니까 먼저 groupby를 사용하여 데이터를 타겟별 평균으로 가공해주겠다.

 

df.groupby('target').mean()
target sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
setosa 5.006 3.428 1.462 0.246
versicolor 5.936 2.770 4.260 1.326
virginica 6.588 2.974 5.552 2.026

 

 

여기서 끝에 bar()만 써줘도 되고, plot.bar() 또는 plot(kind='bar') 모두 가능하다. 

horizontal로 보고 싶다면 barh로 바꾸면 된다.

 

df.groupby('target').mean().plot(kind='barh')

 

한 가지 속성에 대해서만 보고 싶으면 칼럼명만 추가해준다.

df.groupby('target').mean()['sepal length (cm)'].plot()
df.groupby('target').mean().plot(kind='barh', y='sepal length (cm)')

 

여기서 색상을 바꾸고 싶다면, 속성 순서대로 지정해주면 된다. legend는 그냥 한번 빼봤다.

df.groupby('target').mean().plot(kind='barh', color = ['grey','purple','pink','green'],legend=False)

 

더 많은 옵션들이 있지만 pandas 기본 plot 함수는 아무래도 matplotlib 보다는 자유도가 조금 떨어져서 이 정도로만 사용하게 되는 것 같다.

다음번에는 matplotlib과 seaborn으로 시각화하는 방법을 다룰 예정이다. 

 

 

728x90
Comments