[Bigdata] 5. 맷플롯립 알아보기

2025. 4. 28. 03:21·Data/Bigdata
728x90

5.1 데이터 시각화

컴퓨터 화면에 시각적 이미지 이용하여 데이터를 효과적으로 보여주는 방법

데이터 시각화의 필요성

  1. 복잡한 데이터에 대한 이해를 돕는다
  2. 의사결정을 지원한다
  3. 효과적인 커뮤니케이션 수단이 된다
데이터 수집과 전처리 못지 않게 시각화를 통해서 그 의미를 잘 전달하는 것 역시 데이터 과학자가 해야할 중요한 일들 중 하나

5.2 matplotlib의 다양한 기능 맛보기

맷플롯립 코드 살펴보기

import matplotlib.pyplot as plt

years = [2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
ranks = [5,3,2,3,4,6,7,4]

# 그래프 그리기 plt.plot(x축데이터, y축데이터, 선의 색상, 마커 정보)
plt.plot(years, ranks, color='blue', marker='*')

plt.title("Tottenham Hotspur FC Ranking")

plt.xlabel("Year")
plt.ylabel("Ranking")

plt.show()

x = list(range(-20, 20))

y1 = [2*t for t in x]
y2 = [t**2 for t in x]
y3 = [-.2*t**2 -5 for t in x]

plt.plot(x, y1, 'r--', x, y2, 'g^-', x, y3, 'b*:')
plt.axis([-30, 30, -30, 30])

  • r은 빨강, g는 녹색, b는 파랑을 의미 / --는 점선, -는 실선, :는 짧은 점선을 의미
  • ^는 세모, *는 별표를 의미
  • plt.axis([x축 시작, x축 끝, y축 시작, y축 끝]): 축의 범위를 지정(그림 그릴 영역 지정)

5.3 차트 장식을 도와주는 다양한 기법들

x = np.arange(1, 101)
y = [np.random.rand() * 6 - 3 for _ in range(100)]

plt.plot(x,y,color='r',marker='*')
plt.show()

5.4 넘파이를 이용한 함수 그리기, 범례 표시

  • 범례: 그래프의 여러 요소를 식별하기 위해 사용되는 표식
x = np.arange(-20, 20)

y1 = x
y2 = 3*x
y3 = x**2-5

plt.plot(x, y1, 'r--', label='x')
plt.plot(x, y2, 'g-', label='3^x')
plt.plot(x, y3, 'b:', label='x^2-5')
plt.axis([-20, 20, -20, 100])
plt.legend(loc='lower right')

  • 범례의 위치는 맷플롯립이 최적의 위치를 자동으로 선택하며, loc 키워드 인자 이용해 특정 위치 지정도 가능
    • plt.legend(loc='lower right')경우 범례의 위치는 화면의 오른쪽 하단

5.5  막대형 차트도 손쉽게 그려보자

  • plt.bar(막대를 세울 위치, 데이터의 값 리스트, 막대의 폭)
  • 데이터는 딕셔너리 형태로 만들기
data = {'Korea':33147, 'USA':80412, 'China': 12541, 'Japan':33949, 'France': 46315}

countries = list(data.keys())
GDPs = list(data.values())

plt.bar(countries, GDPs, width=0.4)

plt.ylabel("2023 GDP")
plt.title("IMF 2023 GDP Statistics")
plt.show()

5.6  눈금 표시 방법을 알아보자

years = [1965, 1975, 1985, 1995, 2005, 2015]
ko = [130, 650, 2450, 11600, 17790, 27250]
jp = [890, 5120, 11500, 42130, 40560, 38780]
ch = [100, 200, 290, 540, 1760, 7940]

x_range = np.arange(len(years))

plt.bar(x_range+0.0, ko, width=0.25)
plt.bar(x_range+0.3, jp, width=0.25)
plt.bar(x_range+0.6, ch, width=0.25)
plt.xticks(x_range, years)

 

x_range = np.arange(len(years)) 복잡한 연도 숫자 대신 0,1,2,... 순서 번호 쓰려고
x_range+0.0, x_range+0.3, x_range+0.6 서로 다른 나라 막대들을 나란히 그리려고
plt.xticks(x_range, years) x축 눈금을 진짜 연도(years)로 바꿔서 보이게 하려고
  • x_range = np.arange(len(years)): years 대신 [0, 1, 2, 3, 4, 5] 순서 번호를 사용해서 x축을 간단한 번호(index)로 정리한다.
  • x_range에 +0.0, +0.3, +0.6씩 더해서 나라별(한국, 일본, 중국) 막대가 서로 겹치지 않고 옆에 나란히 보이게 한다.
  • plt.xticks(x_range, years): 눈금을 실제 years로 다시 표기

5.7 데이터를 점으로 표현하는 산포도 그래프와 파이 차트

  • 산포도: 데이터 집합에 포함된 두 변수 간의 관계를 점들로 표현한 그래프
  • 파이차트: 데이터의 상대적인 비율을 시각적으로 표현하는데 사용되는 원형 차트의 일종
    • 데이터 값은 원 전체에 대한 비율로 나타나며, 이 비율에 따라 원이 여러 조각으로 나누어짐
    • 이러한 조각을 세그먼트/슬라이스 라고 함
    • 각 조각의 크기가 전체 데이터에서 차지하는 비율을 직관적으로 보여줌
    • pie() 사용
data={'Apple': 67000, 'Banana':89000, 'Orange': 35000}
fruits = list(data.keys())
sales = list(data.values())

plt.pie(sales, labels=fruits, autopct='%.2f')
plt.title('Fruit Sales Pie Chart')
  • 해당 영역의 비중을 백분율로 표시하고 싶으면 autopct 키워드 매개변수에 출력 형식 지정

5.8 히스토그램으로 자료의 분포를 한눈에 살펴보자

  • 히스토그램: 주어진 자료를 몇 개의 구간으로 나누고, 각 구간의 도수를 조사하여 나타낸 막대 그래프
np.random.seed(42)
# 평균이 100이고 표준편차가 15인 정규분포를 따르는 1000개의 데이터 생성
data = np.random.normal(100,15,1000)
plt.hist(data)

  • 히스토그램을 만들 데이터의 값을 동일한 구간으로 나누어 담는 통을 빈이라고 한다. (디폴트값은 bins = 10)

겹쳐진 히스토그램도 그리자: 다중 히스토그램

  • alpha 속성 값을 주어 투명도를 가지게 한다.
plt.hist(random_n, n, color='orange', label='noraml dist')
plt.hist(random_d, n, color='blue', alpha=0.3, label='random dist')
plt.legend()

5.9 데이터를 효율적으로 표현하는 상자 플롯

상자플롯은 상자-수염 플롯이라고도 하는데 수치 데이터의 최대값, 최소값, 중간값과 사분위 수 등의 많은 정보를 하나의 형태로 효율적으로 가시화할 수 있는 방법

  • 주식 캔들 차트는 상자 플롯을 응용한 차트로 데이터에 대한 기술적 분석의 가장 기본적인 도구로 이용되고 있다.
  • 스피어 스타일과 튜키 스타일이 있는데, 튜키 스타일은 이상치를 확인하기 위해 주로 사용된다.

  • 상자부는 Q2로 표시된 중앙값을 중심으로 상위 25%~하위25%값이 모여있는 구간을 표시
  • 즉, 상자의 아래쪽에서 위쪽까지가 전체 데이터의 50%가 모여있는 구간
  • 위스커 or 수염: 상자 밖 아래위로 세로로 그어진 직선 
  • Q3-Q1: 사분범위 혹은 IQR
  • 이상치: 최대값 범위 밖에 데이터가 존재하는 경우
  • np.boxplot()
표준편차가 커질수록, IQR(사분위수)도 커지고 수염(위스커)의 길이도 커진다.

5.11 하나의 차트에 여러 그래프 그리기: subplots()

예를 들어 subplots(2,2)는 전체 화면을 2행 2열로 나눈다는 의미

 

728x90

'Data > Bigdata' 카테고리의 다른 글

[Bigdata] 4. 넘파이의 세계로  (0) 2025.04.28
[Bigdata] 슬라이싱 정리  (0) 2025.04.28
[Bigdata] 3. 넘파이 시작하기  (1) 2025.04.27
[Bigdata] 2. 데이터 분석을 위한 도구  (0) 2025.04.27
[Bigdata] 1. 빅데이터로 통하는 세상  (0) 2025.04.27
'Data/Bigdata' 카테고리의 다른 글
  • [Bigdata] 4. 넘파이의 세계로
  • [Bigdata] 슬라이싱 정리
  • [Bigdata] 3. 넘파이 시작하기
  • [Bigdata] 2. 데이터 분석을 위한 도구
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (444)
      • App·Android (1)
      • BE (50)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • 실전 자바 기본, 중급 (1)
        • PHP (11)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (28)
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • Python (0)
        • 빅데이터분석기사 (13)
      • Infra (1)
      • Activity (9)
        • Intern (0)
        • SK AI Dream Camp (2)
        • 구름톤 유니브 4기 (1)
        • 리모트 인턴십 6기 (3)
        • 봉사활동 (0)
        • 부스트캠프 AI Tech 8기 (3)
      • CS (8)
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래프탐색
    너비우선탐색
    구현
    오블완
    브루트포스 알고리즘
    정렬
    수학
    백준
    매개변수탐색
    최단경로
    티스토리챌린지
    다이나믹프로그래밍
    그래프이론
    문자열
    이분탐색
    그리디알고리즘
    투포인터
    누적합
    시뮬레이션
    자료구조
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[Bigdata] 5. 맷플롯립 알아보기
상단으로

티스토리툴바