본문 바로가기
Study/Data Science 개인 공부

Do it! 데이터 분석을 위한 판다스 입문 4장

by 주원주 2023. 7. 5.

04장 그래프 그리기

04-1 데이터 시각화가 필요한 이유

  • 앤스콤 4분할 그래프: 데이터를 시각화하지 않고 수치만 확인할 때 발생할 수 있는 함정을 보여주기 위해 만든 그래프
    • 데이터 집합은 4개의 그룹으로 구성, 모든 데이터 그룹은 x, y열을 가지고 있음
    • 4개의 데이터는 각각 평균, 분산과 같은 수칫값이나 상관관계, 회귀선이 같다
    • 위의 결과를 보고 '4개의 데이터 그룹의 데이터는 모두 같을 것이다'고 착각할 수 있음 >> 함정
    • 하지만 데이터 그룹을 시각화하면 데이터 그룹이 서로 다른 데이터 패턴을 가지고 있다는 점을 금방 파악할 수 있음
  • 앤스콤 데이터 집합은 seaborn 라이브러리에 포함되어 있음 >> load_dataset 메서드에 문자열 anscombe을 전달하면 앤스콤 데이터 집합을 불러올 수 있음 (데이터프레임의 열 이름 중 dataset 열은 데이터 그룹을 구분)
  • matplotlib 라이브러리로 그래프 그리기
    • 전체 그래프가 위치할 기본 틀 생성 (figure 메서드)
    • 그래프를 그려 넣을 그래프 격자 생성 (add_subplot 메서드)
    • 격자에 그래프 하나씩 추가 (순서는 왼쪽에서 오른쪽 방향)
    • 만약 격자의 첫 번째 행이 꽉 차면 두 번째 행에 그래프 그려 넣음
    • set_title 메서드로 격자에 제목 추가
    • suptitle 메서드로 기본 틀에 제목 추가
    • tight_layout 메서드로 각 그래프의 레이아웃 조절

04-2 matplotlib 라이브러리 자유자재로 사용하기

  • 히스토그램: 데이터프레임의 열 데이터 분포와 빈도를 살펴보는 용도로 자주 사용 (hist 메서드)
    • 일변량 그래프: 변수를 하나만 사용해서 그린 그래프
  • 산점도 그래프: 변수 2개를 사용해서 만드는 그래프 (scatter 메서드)
    • 이변량 그래프: 변수 2개를 사용
  • 박스 그래프: 이산형 변수와 연속형 변수를 함께 사용
    • 이산형 변수: 명확하게 구분되는 값 (여성/남성)
    • 연속형 변수: 명확하게 셀 수 없는 범위의 값 (tip)
  • 다변량 그래프: 3개 이상의 변수를 사용한 그래프
    • 다변량 그래프가 필요한 이유: 적재 적소에 맞는 그래프 요소를 추가하여 표현 가능
    • ex) 산점도에서 점의 크기를 다르게 하거나, 점의 색상을 다르게 하거나, 점의 투명도 조절하기 등

04-3 seaborn 라이브러리 자유자재로 사용하기

  • seaborn 라이브러리 자체를 활용하면 matplotlib보다 좀 더 화려한 그래프를 그릴 수 있음
  • 히스토그램: subplots, distplot 메서드 사용
    • 따로 인자 설정하지 않으면 히스토그램과 밀집도 그래프 같이 출력
    • kde=False >> 밀집도 그래프 제외
    • hist=False >> 히스토그램 제외
    • rug=True >> 양탄자 그래프 추가
  • 산점도 그래프: seaborn 라이브러리의 regplot 메서드 사용
    • regplot 메서드를 사용하면 산점도 그래프와 회귀선을 함께 그릴 수 있음
    • 회귀선을 제거하려면 fit_reg 인자를 False로 지정하기
    • 또는 lmplot 사용, hue 인자값에 열 이름 넣으면 색상 추가 가능
    • 산점도 그래프의 점 크기 조절: scatter_kws에 딕셔너리 형태로 인자값 전달 
      • ex) scatter_kws = {'s':tips['size']*10}
    • 산점도 그래프의 점을 다른 기호로 표현: markers 인자값에 표현하고자 하는 기호를 리스트에 담아 전달
      • ex) markers=['o', 'x']
    • 데이터셋 그룹별로 그래프를 나누어 그리기: lmplot 메서드에 추가로 col, col_wrap 인자 설정
      • col_wrap 인자: 그래프를 그릴 열의 최댓값을 지정
      • col 인자: 데이터 그룹을 구분할 열 지정
  • 히스토그램 & 산점도 한꺼번에: jointplot 메서드 사용
    • x, y 인자에 원하는 열 이름 지정, data 인자값으로 데이터프레임 지정
  • 육각 그래프: 2차원 표면에 육각형으로 데이터를 쌓아 표현하는 그래프
    • 산점도 그래프에서 점이 겹쳐 보일 경우 점을 구분하기 어렵다는 단점 보완
    • 특정 데이터의 개수가 많아지면 점점 진한 색으로 표현
    • jointplot 메서드를 그대로 사용, 대신 kind 인자값을 hex로 지정
    • 육각형으로 그래프를 그리는 이유는 육각형이 2차원 표면을 덮을 때 가장 효과적이기 때문
  • 바 그래프: 지정한 변수의 평균을 계산하여 그릴 수 있음
  • 박스 그래프: 최솟값, 1분위수, 중위수, 3분위수, 최댓값, 이상치 등 다양한 통계량을 한 번에 표현
  • 바이올린 그래프: 박스 그래프 + 커널 밀도 추정 (박스 형태를 바이올린 형태로 바꾼 것)
    • 데이터 분산이 모호하게 표현된다는 박스 그래프의 단점 보완
    • violinplot 메서드를 사용하여 그릴 수 있음
    • 색상 추가: hue 인자값으로 사용할 열 이름 추가
  • 관계 그래프: 위의 그래프들을 종합한 형태
    • pairplot 메서드에 데이터프레임을 넣는 방법으로 간단하게 그릴 수 있음
    • 색상 추가: hue 인자값으로 사용할 열 이름 추가
    • 중복된 정보가 표현된다는 단점 존재
      • 관계 그래프의 절반(대각선 기준 위)은 나머지 절반(대각선 기준 아래)과 같음
      • 이러한 경우 중복된 그래프가 그려지는 위치를 직접 지정하여 원하는 그래프로 교체
      • map_upper 메서드: 대각선 기준 위쪽에 그릴 그래프 지정
      • map_lower 메서드: 대각선 기준 아래쪽에 그릴 그래프 지정
      • map_diag 메서드: 대각선 중심으로 그릴 그래프 지정
  • FacetGrid 클래스로 그룹별 그래프 그리기
    • FacetGrid에 데이터프레임과 그룹을 구분할 열 이름 전달하여 객체 생성
    • 객체의 map 메서드에 그래프 종류와 x축으로 지정할 열 이름을 순서대로 전달
    • col, row 인자값에 따라 격자가 만들어짐 (ex. 2개 * 2개의 경우의 수라면 2행 2열의 격자)

04-4 데이터프레임과 시리즈로 그래프 그리기

  • (참고) fig, ax = plt.subplots()를 사용하는 이유 (출처: https://m.blog.naver.com/allieverwanted/222146678032)
    • fig는 데이터가 담기는 프레임으로 크기, 모양 변형은 가능하지만 실제로 프레임 위에 글씨를 쓰는 것은 불가능
    • ax는 실제 데이터가 그려지는 캔버스, 모든 plot은 axes 위에서 이루어져야 함
  • 히스토그램: 시리즈에 있는 plot 속성에 정의된 hist 메서드 사용하면 해당 시리즈의 값을 이용하여 히스토그램을 바로 그릴 수 있다
    • hist 메서드의 alpha, bins, ax 인자를 사용하여 투명도 조절 (alpha는 투명도, bins는 x축 간격)
  • 밀집도: kde 메서드 사용
  • 산점도 그래프: scatter 메서드 사용
  • 육각 그래프: hexbin 메서드 사용
    • 육각 그래프의 육각형 크기는 gridsize 인자로 조절 가능
  • 박스 그래프: box 메서드 사용

04-5 seaborn 라이브러리로 그래프 스타일 설정하기

  • seaborn 라이브러리로 만든 그래프의 스타일은 set_style 메서드를 사용하여 바꿀 수 있음
    • set_style은 스타일을 적용할 부분에서 한 번만 실행하면 됨
    • 메서드를 실행한 이후의 그래프가 모두 지정한 스타일로 바뀜
    • seaborn 라이브러리의 스타일은 darkgrid, whitegrid, dark, white, ticks로 5종류

출처: Do it! 데이터 분석을 위한 판다스 입문 (Chen, Daniel Y. 지음)

https://www.yes24.com/Product/Goods/64625506