Chapter 06 "복잡한 데이터 표현하기"
Chapter 06-1의 주제는 '객체지향 API로 그래프 꾸미기' 이다.
전체적으로 배울 내용은 다음과 같다
- 객체지향 API로 그래프 그리기
06-1 객체지향 API로 그래프 꾸미기
pyplot 방식과 객체지향 API 방식
- 그리기
- pyplot 방식
- 객체지향 API 방식
# 설정
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 100
pyplot 방식으로 그래프 그리기
# pyplot 방식
plt.plot([1, 4, 9, 16])
plt.title('simple line graph')
plt.show()
객체지향 API 방식으로 그래프 그리기
# 객체지향 API 방식
fig, ax = plt.subplots() # 하나의 Axes 객체를 가지는 피겨 생성
plt.plot([1, 4, 9, 16])
plt.title('simple line graph')
plt.show()
그래프에 한글 출력하기
- 맷플롯립의 기본 폰트가 한글을 지원하지 않음
- 네이버의 나눔폰트 다운
- 네이버 나눔 글꼴 다운로드 : https://hangeul.naver.com/2017/nanum
# 코랩에서 한글다운
import sys
if 'google.colab' in sys.modules:
!echo 'debconf debconf/frontend select Noninterative'| \
debconf-set-selections
# 나눔 폰트 설치
!sudo apt-get -qq -y install fonts-nanum
import matplotlib.font_manager as fm
fm._rebuild()
그리고 '런타임 다시 실행'을 진행하면 된다.
폰트 지정하기(1): font.family 속성
- 맷플롯립의 기본 폰트: 영문 sans-serif
# 폰트 확인
plt.rcParams['font.family']
# 결과
# ['sans-serif']
# 폰트 설정
plt.rcParams['font.family'] = 'NanumGothic'
폰트 지정하기(2): rc() 함수
- font.family 의 경우 font가 그룹 family는 그룹의 하위 속성
- rc() 함수 첫 번째 매개변수에는 그룹인 font지정. 두 번째 매개변수에는 그룹 하위 속성 지정
# 나눔바른고딕 폰트로 설정
plt.rc('font', family='NanumBarunGothic')
# 한 그룹 내의 여러 설정을 동시에 지정 가능
plt.rc('font', family='NanumBarunGothic', size = 11)
# check
print(plt.rcParams['font.family'], plt.rcParams['font.size'])
# 결과
# ['NanumBarunGothic'] 11.0
# 제목 한글로 바꿔보기
plt.plot([1, 4, 9, 16])
plt.title('간단한 선 그래프')
plt.show()
# 다시 복귀
plt.rc('font', size = 10)
출판사별 발행 도서 개수 산점도 그리기
import gdown
import pandas as pd
# ns_book7 다운
gdown.download('https://bit.ly/3pK7iuu','ns_book7.csv', quiet = False)
# pandas dataframe
ns_book7 = pd.read_csv('ns_book7.csv', low_memory = False)
ns_book7.head()
고유한 출판사 목록 만들기
# 상위 30개 출판사
top30_pubs = ns_book7['출판사'].value_counts()[:30]
top30_pubs
# 불리언 인덱스
top30_pubs_idx = ns_book7['출판사'].isin(top30_pubs.index)
top30_pubs_idx
# 상위 30개 출판사의 총 발행 도서 개수
top30_pubs_idx.sum()
# 결과
# 51886
# 1000개만 사용할 것이기 때문에 sample로 무작위 선택
ns_book8 = ns_book7[top30_pubs_idx].sample(1000, random_state=42)
ns_book8.head()
산점도 그리기
fig, ax = plt.subplots(figsize=(10, 8))
ax.scatter(ns_book8['발행년도'], ns_book8['출판사'])
ax.set_title('출판사별 발행 도서')
fig.show()
값에 따라 마커 크기를 다르게 나타내기
- scatter()의 s 매개변수(기본값 6)
# 마커 크기 조절
fig, ax = plt.subplots(figsize=(10, 8))
ax.scatter(ns_book8['발행년도'], ns_book8['출판사'], s=ns_book8['대출건수'])
ax.set_title('출판사별 발행 도서')
fig.show()
마커 꾸미기
- 투명도 조절하기: alpha 매개변수
- 마커 테두리 색 바꾸기: edgecolor 매개변수(기본값 마커의 색 face)
- 마커 테두리 선 두께 바꾸기: linewidths 매개변수(기본 1.5)
- 산점도 색 바꾸기: c 매개변수
# 마커 꾸미기
fig, ax = plt.subplots(figsize=(10, 8))
ax.scatter(ns_book8['발행년도'], ns_book8['출판사'],
linewidths=0.5, edgecolors = 'k',alpha = 0.3,
s = ns_book8['대출건수']*2, c = ns_book8['대출건수'])
ax.set_title('출판사별 발행 도서')
fig.show()
값에 따라 색상 표현하기: 컬러맵
- scatter는 viridis
- jet 컬러맵을 사용
- 컬러 막대도 추가
# jet 컬러맵 사용 + 컬러 막대
fig, ax = plt.subplots(figsize=(10, 8))
sc = ax.scatter(ns_book8['발행년도'], ns_book8['출판사'],
linewidths=0.5, edgecolors = 'k',alpha = 0.3,
s = ns_book8['대출건수']**1.3, c = ns_book8['대출건수'], cmap='jet')
ax.set_title('출판사별 발행 도서')
fig.colorbar(sc)
fig.show()
'Data Analysis > 혼공학습단9기' 카테고리의 다른 글
회고록 (0) | 2023.02.26 |
---|---|
혼자 공부하는 데이터 분석 with 파이썬: 6주차(Chapter 06-2) (0) | 2023.02.19 |
혼자 공부하는 데이터 분석 with 파이썬: 5주차(Chapter 05-2) (0) | 2023.02.19 |
혼자 공부하는 데이터 분석 with 파이썬: 5주차(Chapter 05-1) (0) | 2023.02.19 |
혼자 공부하는 데이터 분석 with 파이썬: 4주차(Chapter 04-2) (0) | 2023.02.19 |