[혼공분석] 6주차

LeeHsss·2025년 2월 19일
0

데이터 분석

목록 보기
8/9
post-thumbnail

Chapter 06. 복잡한 데이터 표현하기

Chapter 06-1. 객체지향 API로 그래프 꾸미기

pyplot 방식으로 그래프 그리기

  • matplotlib.pyplot에 있는 함수를 사용하면 함수들이 하나의 figure 객체에 대한 상태를 공유한다.
plt.plot([1, 4, 9, 16])
plt.title('simple line graph')
plt.show()

객체지향 API 방식으로 그래프 그리기

  • 하나의 figure에 여러 개의 subplot을 추가할 때 자주 사용한다.
fig, ax = plt.subplots()
ax.plot([1, 4, 9, 16])
ax.set_title('simple line graph')
fig.show()

폰트 지정하기: font.family 속성 사용

  • matplotlib 기본 폰트는 rcParams 객체의 'font.family' 속성에 저장되어 있다.
plt.rcParams['font.family'] = 'NanumGothic'

폰트 지정하기: rc() 함수 사용

  • rc() 함수의 첫 번째 매개변수에는 설정할 그룹을 지정, 두 번째 매개변수에는 그룹의 하위 속성을 지정
# font.family의 경우
plt.rc('font', family='NanumGothic')
  • rc() 함수를 사용하면 그룹 내의 여러가지 속성을 동시에 적용할 수 있다.
plt.rc('font', family='NanumGothic', size=11)

출판사별 발행도서 개수 산점도 그리기

  1. 고유한 출판사 목록 만들기
  • value_counts() 메서드를 사용해 고유한 출판사 목록을 만든다. (value_counts 메서드는 카운트가 높은 순으로 결과를 내림차순하여 정렬한다.)
  • 슬라이스 연산자를 사용하여 상위 30개 출판사를 선택한다. (마지막 인덱스는 슬라이스 연산자에서 범위에 포함되지 않으므로 하나 더 큰 수로 지정해야 한다.)
  • ns_book7 데이터프레임에서 상위 30개 출판사에 해당하는 행을 표시하는 불리언 배열을 만든다. (isin() 메서드 사용)
top30_pubs = ns_book7['출판사'].value_counts()[:30]
top30_pubs_idx = ns_book7['출판사'].isin(top30_pubs.index)
ns_book8 = ns_book7[top30_pubs_idx].sample(1000, random_state=42)
  1. 산점도 그리기
fig, ax = plt.subplots(figsize = (10, 8))
ax.scatter(ns_book8['발행년도'], ns_book8['출판사'])
ax.set_title('출판사별 발행 도서')
fig.show()
  1. 값에 따라 마커 크기를 다르게 나타내기
  • scatter() 함수는 마커의 크기를 지정할 수 있는 s 매개변수를 제공한다.
  • 선 그래프와 산점도의 마커 크기는 rcParams['lines.markersize']로 지정하며 기본 값은 6이다.
  • s 매개변수의 기본 값은 rcParams['lines.markersize']의 제곱을 사용한다.
  • s 매개변수의 값을 하나의 실수로 바꾸면 산점도의 모든 크기가 동일하게 바뀐다.
    • 입력 데이터와 동일한 길이의 배열을 지정하면, 각 데이터마다 마커의 크기가 다른 산점도를 그릴 수 있다.
fig, ax = plt.subplots(figsize = (10, 8))
ax.scatter(ns_book8['발행년도'], ns_book8['출판사'], s = ns_book8['대출건수']) # 대출건수 열을 마커 크기로 전달 => 대출 건수가 많은 도서를 상대적으로 크게 그린다.
ax.set_title('출판사별 발행 도서')
fig.show()
  1. 마커 꾸미기
  • 투명도 조절하기: alpha 매개변수는 마커의 투명도를 결정한다.
  • 마커 테두리색 바꾸기: edgecolor 매개변수는 마커 테두리의 색을 결정한다.
    • 마커 테두리를 그리면 여러 개의 마커가 겹칠 때, 경계를 구분할 수 있다.
  • 마커 테두리 선 두께 바꾸기: linewidths 매개변수는 마커 테두리 선의 두께를 결정한다. (기본값: 1.5)
  • 산점도 색 바꾸기: c 매개변수는 산점도의 색을 지정한다.
    • s 매개변수와 마찬가지로 c 매개변수에 데이터 개수와 동일한 길이의 배열을 전달하면 각 데이터를 다른 색깔로 그릴 수 있다.
    • 큰 값은 밝은 노랑색, 낮은 값은 진한 녹색으로 그린다.
  1. 값에 따라 색상 표현하기: 컬러맵
  • matplotlib은 컬러맵을 사용하여 값에 따른 색상을 다르게 표현하다.
  • scatter() 함수의 기본 컬러맵은 viridis
    • jet: 자주 사용하는 컬러맵 중 하나의 종류. 낮은 값일수록 짙은 파란색이고, 높은 값으로 갈수록 노란색으로 바뀌다가 빨간색으로 바뀐다.
    • 컬러맵은 cmap 매개변수를 통해 지정할 수 있다.
    • 컬러막대는 scatter() 함수의 반환 값을 figure 객체의 colorbar() 메서드에 전달한다.

Chapter 06-2. matplotlib 고급 기능 배우기

하나의 피겨에 여러 선 그래프 그리기

  • 선 그래프를 그리는 plot() 함수를 여러번 호출하기
  • plot() 함수를 여러 번 호출하면 별도로 색을 지정하지 않아도 자동으로 선 그래프마다 색을 다르게 그린다.
    • 범례 추가하기
      • plot() 함수를 호출할 떄, 각각 label을 추가
      • 마지막에 axes 객체에 legend() 메서드를 추가한다.
      • loc 매개변수로 범례의 위치를 지정할 수 있다.
    • x축 범위 설정하기
      • axes 객체의 set_xlim() 사용
      • matplotlib.pyplot을 사용할 때는 xlim() 함수를 사용
    • y축 범위 설정하기
      • axes 객체의 set_ylim() 사용
      • matplotlib.pyplot을 사용할 때는 ylim() 함수를 사용
    • pyplot의 axis() 함수를 통해 x축, y축의 범위를 리스트 형태로 설정할수도 있다.
      plt.axis([1985, 2025], [0, 13000])

스택 영역 그래프 그리기

  • 스택 영역 그래프는 하나의 선 그래프 위에 다른 선 그래프를 차례대로 쌓는 것이다.
  • stackplot() 함수를 사용해서 그릴 수 있다.

💡 pivot_table()

  • pivot_table() 메서드를 사용하면 데이터의 구조를 변경할 수 있다.

💡 get_level_values()

  • pandas의 인덱스 객체에서 호출이 가능.
  • 다단으로 구성된 열 이름에서 선택한 항목만 가져올 수 있다. (인덱스로 접근, 0 이면 첫번째 항목)

하나의 피겨에 여러개의 막대 그래프 그리기

  • bar() 메서드를 여러번 호출하기.

스택 막대 그래프 그리기

  • matplotlib에는 stackplot() 메서드처럼 막대 그래프를 쌓을 수 있는 함수가 없다.
  • bar() 메서드의 bottom 매개변수를 사용하여 수동으로 쌓을 수 있다.
    • bottom 매개변수는 막대가 시작할 y 좌표를 결정한다.

데이터 값 누적하여 그리기

  • pandas 데이터프레임의 cumsum() 메서드를 사용하면 데이터 누적을 쉽게 할 수 있다.
    • cumsum() 메서드는 기본적으로 행을 따라 값을 누적한다. (axis 매개변수를 1로 지정하면, 열 방향으로 값을 누적할 수 있다.)
  • 데이터 값을 누적하여 그래프를 그릴 때는 가장 큰 막대를 먼저 그려야 한다. 그렇지 않으면 가장 큰 막대가 이전 막대를 덮어쓰게 된다.

원 그래프 그리기

  • 전체 데이터에 대한 비율을 원의 부채꼴로 나타낸 그래프이다. (pie chart라고도 부른다.)
  • matplotlib의 pie() 함수를 사용해서 그린다.
  • 기본적으로 3시 방향부터 반시계 방향으로 데이터를 그린다.
  • startangle 매개변수에 따라 데이터를 그리는 시작 위치를 변경할 수 있다. (0 => 3시, 90 => 12시)

💡 비율 표시하고 부채꼴 강조하기

  • autopct 매개변수: 파이썬의 % 연산자에 적용할 포맷팅 문자열을 전달할 수 있다.
    • %d: 각 부채꼴의 비율이 정수로 표시됨.
  • explode 매개변수: 떨어뜨리길 원하는 조각의 간격을 반지름의 비율로 지정하여, 시각적으로 부각 시킬 수 있다.

숙제.

필수 숙제

p.314의 손코딩 (matplotlib의 colormap으로 산점도 그리기)을 
코랩에서 그래프로 출력하고 캡처하기

추가 숙제

p356~359의 스택 영역 그래프를 그리는 과정을 정리하기

💡 스택 영역 그래프: 하나의 선 그래프 위에 다른 선 그래프를 차례대로 쌓는 것

  • matplotlib의 stackplot() 메서드를 사용해서 그릴 수 있다.
  1. pivot_table() 메서드로 각 '발행년도' 열의 값을 열로 바꾸기
    각 출판사의 연도별 대출건수를 구하기 위함.
# 만약 값이 없는 항목에 대해 기본 값을 주고 싶은 경우에는 
# fill_value 매개변수에 기본 값을 지정하면 된다.
ns_book10 = ns_book9.pivot_table(index='출판사', columns='발행년도')
ns_book10.head()

  1. 발행년도 열을 리스트 형태로 바꾸기
    다단으로 구성되어 있는 열에서 발행년도만 뽑아서 리스트로 만든다. get_level_values() 메서드 사용.
ns_book10.columns[:10] # 컬럼 10개 조회

top10_pubs = top30_pubs.index[:10]

# 다단 열 중 인덱스 1에 해당하는 값 조회
year_cols = ns_book10.columns.get_level_values(1)
  1. stackplot() 메서드로 스택 영역 그래프 그리기
    legent() 메서드의 loc 매개변수로 범례의 위치를 지정할 수 있다.
fig, ax = plt.subplots(figsize=(8, 6))
ax.stackplot(year_cols, ns_book10.loc[top10_pubs].fillna(0), labels=top10_pubs)
ax.set_title('연도별 대출건수')
ax.legend(loc='upper left')
ax.set_xlim(1985, 2025)

plt.show()

profile
조금씩 지식의 영역을 넓혀가는 중이에요...😌

0개의 댓글

관련 채용 정보