Python 연습장
Python Visualization(1) - Pandas 내장 Plot 함수 본문
데이터를 탐색할 때, 그리고 데이터 가공 후 모델링 후에 결과를 효과적으로 표현할 때에는 시각화가 중요하다.
요즘에는 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으로 시각화하는 방법을 다룰 예정이다.
'코딩' 카테고리의 다른 글
Python Visualization(3) - matplotlib의 그래프 종류 (0) | 2022.01.04 |
---|---|
Python Visualization(2) - matplotlib 기본 (0) | 2022.01.03 |
딥러닝 시계열 알고리즘 정리 (0) | 2022.01.01 |
사이킷런 데이터셋 (sklearn.datasets) (0) | 2021.12.29 |
Mac 에서 Python 시작하기 (w/ spyder) (0) | 2021.12.28 |