9. 그래프와 시각화
15, 16일차 (2020-06-25, 26)도 이 책으로 시작:
파이썬 라이브러리를 활용한 데이터 분석 - 교보문고
영화 평점, 이름통계, 선거 데이터 등 실사례 사용 | ★ 『파이썬 라이브러리를 활용한 데이터 분석』 드디어 개정!이 책의 초판이 출간된 2012년은 pandas 개발 초기로, 파이썬용 오픈소스 데이터
www.kyobobook.co.kr
아래의 요약은 책을 충실히 요약한 것이 아닌 오늘 공부한 것의 정리일 뿐입니다.
저자의 코드 예제 github repository: http://github.com/wesm/pydata-book
자세한 내용 책을 사서 보시거나 영문판의 경우 저자의 홈페이지에 3판의 open edition이 있습니다 (https://wesmckinney.com/book/).
GitHub - wesm/pydata-book: Materials and IPython notebooks for "Python for Data Analysis" by Wes McKinney, published by O'Reilly
Materials and IPython notebooks for "Python for Data Analysis" by Wes McKinney, published by O'Reilly Media - GitHub - wesm/pydata-book: Materials and IPython notebooks for "Pyth...
github.com
Python for Data Analysis, 3E
About the Open Edition The upcoming 3rd edition of Python for Data Analysis is available as an “Open Access” HTML version on this site https://wesmckinney.com/book in addition to the usual print and e-book formats. This is currently an Early Release ve
wesmckinney.com
독자에게 전하는 조언:
1) 데이터 분석을 생산적으로 하기 위해 파이썬으로 훌륭한 소프트웨어를 개발할 수 있을 정도로 파이썬 고수가 되어야 할 필요는 없다고 생각한다.
2) Numpy의 깊은 이해가 필수 사항은 아니며, 배열 위주의 프로그래밍과 생각하는 방법에 능숙해지는 것이 과학 계산의 고수가 되는 지름길이다.
들어가며
%matplotlib notebook # 주피터 노트북에서
이 장에 포함된 코드 예제를 실행
9.1 matplotlib API 간략하게 살펴보기
ipython에서 %matplotlib
9.1.1 figure와 서브플롯
matplotlib의 figure 객체를 생성 - plt.figure()
크기와 비율의 결정 - figsize()
빈 figure로는 무의미하므로 최소 하나 이상의 subplots를 생성 - add_subplot()
fig.add_subplot()에서 반환되는 객체는 AxesSubplot으로 각각의 인스턴스 메서드를 호출해서 다른 빈 서브플롯에 직접 그래프를 그릴 수 있다.
특정한 배치에 맞추어 여러 개의 서브플롯을 포함하는 figure를 생성하는 일 - plt.subplots()
메서드
이 메서드는 Numpy 배열과 AxesSubplot 객체를 새로 생성
Refer 표 9-1 pyplot.subplots
옵션
서브플롯 간의 간격 조절하기
subplots_adjust()
메서드 - 서브플롯 간 적당한 간격과 여백을 추가
9.1.2 색상, 마커, 선 스타일
matplotlib에서 가장 중요한 plot()
함수: x, y 좌표 값이 담긴 배열과 추가적으로 색상과 선 스타일을 나타내는 축약 문자열을 인자로 받는다.
실무에서 소통을 위해 좀 더 명시적인 방법으로 표현
마커도, 색상 스타일 축약 문자열 다음에 지정할 수 있다.
즉, 'ko--'
은 linestyle='dashed', color='k', marker='o'
와 같다.drawstyle
인자를 이용해서 바꿀 수 있다.plt.legend
로 범례 생성, ax.legend
는 축의 범례 추가
9.1.3 눈금, 라벨, 범례
matplotlib.pyplot
을 이용하여 순차적으로 꾸미는 방법과 API를 이용하여 좀 더 객체 지향적으로 꾸미는 방법
pyplot은 대화형 사용에 맞추어 설계되었다.
현재 활성화된 혹은 가장 최근에 생성된 AxeSubplot 객체에 대해 동작
제목, 축 이름, 눈금, 눈금 이름 설정하기
set_xticks()
- 전체 데이터 범위를 따라 눈금을 어디에 배치할지 지정, 기본적으로 이 위치에 눈금의 이름이 들어감set_xticklabels()
- 눈금 이름을 바꾸고 싶을 때set_xlabel()
- x축에 대한 이름을 지정set_title()
- 서브플롯의 제목을 지정
범례
가장 쉬운 방법은 각 그래프를 그릴 때 label
인자를 포함시켜 그리는 것이다.
그리고 나서, 가장 마지막에 ax.legend()
나 plt.legend()
를 실행하여 자동으로 범례가 생성
legend 메서드에 loc
인자에 best
옵션만으로 충분하다.
9.1.4 주석과 그림 추가하기
text()
- 그래프 내의 주어진 좌표에 부가적인 스타일로 글자를 그려 준다.arrow()
annotate()
- x, y 좌표로 지정한 위치에 라벨을 추가
단일 셀 안애서 코드를 실행
일반적인 도형을 표현하기 위한 patches라는 객체를 제공, 객체를 생성한 후 add_patch()
로 호출하여 적용
9.1.5 그래프를 파일로 저장하기
plt.savefig()
메서드에 파일명과 확장자를 문자열로 전달하여 저장dpi
인자 - 인치당 도트 해상도를 지정bbox_inches
인자 - 실제 그림 둘레의 공백을 잘라냄, tight
로 지정 시 그림 둘레의 비어 있는 공간을 모두 제거
Refer 표 9-2 Figure 객체의 savefig
함수의 옵션
9.1.6 matplotlib 설정
rc
메서드 - 프로그래밍의 방법으로 설정을 바꿔서 저장하여 불러올 때마다 사용할 수 있다.
첫 번째 인자로 설정하고자 하는 컴퍼넌트의 이름의 문자열을 전달, 예를 들어, figure
, axes
...
그 다음 인자로 설정할 값에 대한 키워드 인자 전달, 예를 들어, figsize=
9.2 pandas에서 seaborn으로 그래프 그리기
9.2.1 선그래프
Series와 DataFrame은 둘 다 plot()
메서드를 이용해 그래프를 생성 (기본적으로 선 그래프를 생성)
Series 객체의 색인은 자동으로 x축으로 해석, use_index=False
를 넘겨 이를 방지할 수 있다.ax
인자는 그리드 배열 상에서 서브 플롯의 위치를 좀 더 유연하게 그릴 수 있다.
DataFrame에서 plot()
은 각 컬럼 별로 선 그래프를 그리고 자동적으로 범례를 생성한다.
Refer 표 9-3 Series.plot 메서드 인자, 표 9-4 DataFrame의 plot 메서드 인자
9.2.2 막대 그래프
plot.bar()
, plot.hbar()
- 각각 수직, 수평 막대 그래프를 그린다.
Note Series의 막대그래프를 그릴 때 - s.value_counts().plot.bar()
를 이용해서 빈도를 그릴 수 있다.
DataFrame에서 각 로우의 값을 묶어서 하나의 그룹마다 각각의 막대를 그림
누적 막대 그래프는 stacked=True
인자 전달
import seaborn as sns
sns.barplot(x='tip_pct', y='day', hue='time', data='tips', orient='h')
data
인자에 DataFrame을 받으며, x
, y
인자에 컬럼 이름을 참조한다.hue
인자를 이용하여 추가 분류에 따라 나눠 그릴 수 있다.
seaborn.set
메서드에 설정을 변경할 수 있다.
9.2.3 히스토그램과 밀도 그래프
plot.hist()
메서드를 사용해서 히스토 그램 작성plot.density()
메서드를 이용해서 밀도 그래프를 표준 KDE 형식으로 생성
seaborn 라이브러리의 distplot()
메서드를 이용하여 히스토그램과 밀도 그래프를 한 번에 그릴 수 있다.
9.2.4 산포도
seaborn 라이브러리의 regplot()
메서드를 이용하여 산포도와 선형회귀직선을 함께 그릴 수 있다.
seaborn 라이브러리의 pairplot()
메서드를 이용하여 짝지은 그래프 혹은 산포도 행렬을 그릴 수 있다.
대각선 (diag_kind=
인자)에 밀도 그래프나 히스토그램을 넣을 수 있다.
9.2.5 패싯 그리드와 범주형 데이터
seaborn 라이브러리의 factorplot()
메서드를 이용하여 파셋 그리드의 추가적인 그룹 차원을 가지는 그래프를 그릴 수 있다.seaborn.FarcetGrid
클래스를 이용하여 더 세부적인 커스터마이징 가능
9.3 다른 파이썬 시각화 도구
웹이나 출판을 위한 정적 그래프를 생성한다면 matplotlib, pandas, seaborn이 기본이다.
즉, 기본을 다 떼고 딴 것을 더 알아 보세요.
9.4 마치며
오늘의 흔적:
'Prev Contents > Wrangling' 카테고리의 다른 글
[파이썬 라이브러리를 활용한 데이터 분석] 17~20일차 (423~479p) (0) | 2022.06.30 |
---|---|
[파이썬 라이브러리를 활용한 데이터 분석] 16, 17일차 (385~422p) (0) | 2022.06.27 |
[파이썬 라이브러리를 활용한 데이터 분석] 14, 15일차 (307~345p) (0) | 2022.06.25 |
[파이썬 라이브러리를 활용한 데이터 분석] 12~14일차 (269~306p) (0) | 2022.06.24 |
[파이썬 라이브러리를 활용한 데이터 분석] 12일차 (237~267p) (0) | 2022.06.22 |