본문 바로가기
혼공학습단9기

혼자 공부하는 데이터 분석 with 파이썬: 6주차(Chapter 06-1)

by 이두스 2023. 2. 19.

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()

그래프에 한글 출력하기

# 코랩에서 한글다운
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()

 

마커 꾸미기

  1. 투명도 조절하기: alpha 매개변수
  2. 마커 테두리 색 바꾸기: edgecolor 매개변수(기본값 마커의 색 face)
  3. 마커 테두리 선 두께 바꾸기: linewidths 매개변수(기본 1.5)
  4. 산점도 색 바꾸기: 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()