카테고리 없음

[내일배움캠프] 24일 차 - Matplotlib 특강, 파이썬 기초반 7, 8강

554083460 2025. 6. 16. 21:08

 

 

 Matplotlib 특강

 

 

더보기

 

Matplotlib 특강 : 허진성 튜터님

 

1. 설치

python -m pip install -U pip
python -m pip install -U matplotlib

 

왜 배워야 하는가?

1. 취업한 회사가 데이터 환경이 제대로 갖추어지지 않은 곳일 수 있다.

2. 코드 디버깅에 사용한다. 데이터 상태 간단히 확인해서 인사이트 도출하는 데 도움 준다.

 

학습 방법

- 코테에 나오지는 않는다! 이해하고 암기할 필요는?

- 좋은 코드를 복사해온 다음, 원하는 부분만 수정하는 방식으로 해도 됨

- 과제도 샘플 코드 복사한 다음, 원하는 부분만 수정하며 하기

 

2. Matplotlib 기본 사용

 

기본 그래프 그리기

 

예제 1

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])  # y축의 값이라 가정함
plt.show()

 

예제 2

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])  # X축, Y축 순서로
plt.show()

 

스타일 지정하기

 

예제

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')  # r: 색깔, red / o: 원형마커
plt.axis([0, 6, 0, 20])
plt.show()
  • ro : 빨간색 원형 마커
  • b- : 파란색 실선
문자 색상이름 문자 마커종류 문자 의미
b blue . - 실선
g green , 픽셀 -- 점선
r red o -. 점-실선 혼합
c cyan v 아래 삼각형 : 점선 (촘촘)
m magenta ^ 위 삼각형 " 선 없음
y yellow < 왼쪽 삼각형    
k black > 오른쪽 삼각형    
w white s 정사각형    
  white p 오각형    
    *    
    + + 기호    
    x x 기호    
    D 다이아몬드    
           

 

여러 개의 그래프 그리기

import matplotlib.pyplot as plt
import numpy as np

# 200ms 간격으로 균일하게 샘플된 시간
t = np.arange(0., 5., 0.2)

# 빨간 대쉬, 파란 사각형, 녹색 삼각형
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

 

 

3. Matplotlib 숫자 입력하기

 

예제

import matplotlib.pyplot as plt

plt.plot([2, 3, 5, 10])  # Y values
plt.show()

 

x, y값 입력하기

 

예제

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [2, 3, 5, 10])  # 순서대로 x, y 값
plt.show()

 

레이블이 있는 데이터 사용하기

import matplotlib.pyplot as plt

data_dict = {'data_x': [1, 2, 3, 4, 5], 'data_y': [2, 3, 5, 10, 8]}

plt.plot('data_x', 'data_y', data=data_dict)
plt.show()

 

기본 사용

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X-Label')  # X축 이름
plt.ylabel('Y-Label')  # Y축 이롬
plt.show()

 

여백 지정하기

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [2, 3, 5, 10])
plt.xlabel('X-Axis', labelpad=15)  # X축 레이블 15px 여백 지정
plt.ylabel('Y-Axis', labelpad=20)
plt.show()

 

폰트 설정하기

import matplotlib.pyplot as plt

font1 = {'family': 'serif',
         'color': 'b',
         'weight': 'bold',
         'size': 14
         }

font2 = {'family': 'fantasy',
         'color': 'deeppink',
         'weight': 'normal',
         'size': 'xx-large'
         }

plt.plot([1, 2, 3, 4], [2, 3, 5, 10])
plt.xlabel('X-Axis', labelpad=15, fontdict=font1)
plt.ylabel('Y-Axis', labelpad=20, fontdict=font2)
plt.show()

 

위치 지정하기

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [2, 3, 5, 10])
plt.xlabel('X-Axis', loc='right')  # X축 레이블의 위치
plt.ylabel('Y-Axis', loc='top')
plt.show()

 

 

4. 다양한 차트 그리기

 

바 차트

categories = ['A', 'B', 'C', 'D', 'E']
values = [1, 10, 3, 8, 5]

plt.bar(categories, values)
plt.show()

 

산점도

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y)
plt.show()

 

히스토그램

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

plt.hist(data, bins=4)
plt.show()

 

여러 그래프 함께 그리기

x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]

plt.plot(x, y1)
plt.plot(x, y2)
plt.show()

 

 

5. 실전 차트 구성하기

# 구글 드라이브 데이터 가져오기

'''
from google.colab import drive
drive.mount('/content/drive')

import pandas as pd

# 파일 경로
file_path = '/content/drive/MyDrive/데이터/sample.csv'

# 불러오기
df = pd.read_csv(file_path)
df.head()

'''
# DB 데이터 가져오기

'''
# mysql 커넥터 설치
# pip install kagglehub pandas mysql-connector-python

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="your_username",       # 여기에 본인 MySQL 사용자 이름 입력
    password="your_password",   # 여기에 본인 MySQL 비밀번호 입력
)
cursor = conn.cursor()
'''
# 캐글 데이터 바로 가져오기

'''
import kagglehub
import os

# Download latest version

path = kagglehub.dataset_download("") # <- 여기에 값 복사

csv_file = os.path.join(path, "Sample - Superstore.csv") # 파일 이름 변경
df = pd.read_csv(csv_file, encoding='ISO-8859-1') # 인코딩 방식 확인
df.head()
'''
import kagglehub
import os

# Download latest version
path = kagglehub.dataset_download("vivek468/superstore-dataset-final")

print("Path to dataset files:", path)

# 2. CSV 파일 찾기
csv_file = os.path.join(path, "Sample - Superstore.csv") # 파일 이름 변경
df = pd.read_csv(csv_file, encoding='ISO-8859-1')
df.head()
import matplotlib.pyplot as plt

# 연도별로 그룹화 (예: 'Order Date' 컬럼이 있을 경우)
df['Order Date'] = pd.to_datetime(df['Order Date'])
df['Year'] = df['Order Date'].dt.year

# 4개년치만 추출 (예: 2020~2023년)
yearly_sales = df[df['Year'].between(2014, 2017)].groupby('Year')['Sales'].sum()

# 라인 그래프 그리기
plt.plot(yearly_sales.index, yearly_sales.values, marker='o', linestyle='-', color='b')
plt.title("Yearly Sales Trend")
plt.xlabel("Year")
plt.ylabel("Total Sales")
plt.grid(True)
plt.show()

 

 

자료 출처

스파르타 코딩클럽 데이터 Docs

특강 세션 colab

Matplotlib Tutorial

 

 

 

 

 파이썬 기초반 7, 8강

 

 

더보기

 

파이썬 기초반 7, 8강: 원유선 튜터님

 

1. 정적 메서드

 

@staticmethod 데코레이터를 사용하여 정의
클래스나 인스턴스의 상태에 접근하지 않습니다.

class MathOperations:
    @staticmethod
    def add(x, y):
        return x + y

 

 

2. 상속

  • 한 클래스가 다른 클래스의 속성과 메서드 물려받음
  • 코드 재사용성 높임
  • 계층 구조 만듦
    • 부모 클래스(또는 기본 클래스)의 기능을 자식 클래스(또는 파생 클래스)가 물려받음
    • 자식 클래스는 부모 클래스의 기능을 확장하거나 수정
  • 'Animal' 클래스를 상속받은 'Cat'과 'Dog' 클래스는
    각각 speak 메서드를 오버라이드하여 고유한 동물 소리를 반환
# 상속: 기능이나 속성을 가져다 쓴다
# (상)위에 있는 클래스
class Animal: # 부모 클래스, 상위 클래스
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        return f"울고있습니다."

# 아래 있는 클래스
class Dog(Animal): # 자식 클래스, 하위 클래스
    # def __init__(self, name)
    def speak(self): # 재정의
        return f"{self.name} says Woof!"

dog = Dog("바둑이") # Animal을 상속받았기 때문에 init 메서드를 따로 정의하지 않아도 된다.
print(dog.speak()) # 바둑이 says Woof!

class Cat(Animal):
    # def __init__(self, name):
    def speak(self): # 재정의
        return f"{self.name} says Meow!"

 

다중 상속

  • 한 클래스가 둘 이상의 부모 클래스로부터 상속받는 것
  • 여러 클래스의 기능 조합
  • 여러 부모 클래스의 기능을 하나의 클래스에 통합할 수 있음
  • 복잡성 증가할 수 있으므로 신중하게 사용해야 함
class Flying:
    def fly(self):
        return "날 수 있어요!"

class Swimming:
    def swim(self):
        return "수영할 수 있어요!"

class Duck(Flying, Swimming):
    # def fly(self):
    #     return "날 수 있어요"
    # def swim(self):
    #     return "수영할 수 있어요"
    pass

duck = Duck()
print(duck.fly())   # 출력: 날 수 있어요!
print(duck.swim())  # 출력: 수영할 수 있어요!

 

추상 클래스

  • 직접 인스턴스화할 수 없는 클래스
  • 다른 클래스들이 구현해야 할 메서드의 틀을 제공
  • @abstractmethod 데코레이터를 사용하여 추상 메서드를 정의
  • 추상 클래스를 상속받는 클래스는 모든 추상 메서드를 구현해야 함
# 추상 클래스: 빈 틀(개념)을 먼저 만들어 놓는다.
# 개념적으로 정리하기 위해서 틀을 미리 만들어 놓는 것

from abc import ABC, abstractmethod
# abc 모듈의 ABC 클래스를 상속받아 만든다
class Shape(ABC): # 모양이라는 추상 클래스
    @abstractmethod
    def area(self): # area라는 추상 메서드
        pass

class Square(Shape): # 구체화 시키기
    def __init__(self, side):
        self.side = side
    
    def area(self):
        return self.side ** 2
        
class Circle(Shape): # 구체화 시키기
    def __init__(self, r):
        self.r = r
    
    def area(self):
        return 3.14 * (self.r **2)

 

프로퍼티

  • 메서드를 속성처럼 사용할 수 있게 해주는 기능
  • getter, setter, deleter 기능을 구현
    • getter: @property 데코레이터 사용
    • setter: @속성명.setter 사용
    • 속성에 접근하거나 수정할 때 특별한 로직을 실행할 수 있다
  • 주요 특징
    • 캡슐화: 내부 데이터를 숨기고 접근 방법을 제어할 수 있다.
    • 유효성 검사: 값을 설정할 때 유효성을 검사할 수 있다.
    • 계산된 속성: 다른 속성을 기반으로 값을 동적으로 계산할 수 있다.
    • 호환성: 기존 코드를 변경하지 않고도 속성의 내부 구현을 변경할 수 있다.

  • 프로퍼티의 장점
  • 데이터 보호: 직접적인 속성 접근 제한해 데이터의 무결성 보장
  • 유연성: 내부 구현 변경하더라도 외부 인터페이스는 그대로 유지
  • 계산된 속성: 필요할 때만 값 계산하여 성능 최적화
  • 코드 가독성: 복잡한 getter/setter 메서드 대신 간단한 속성 접근 형태로 코드를 작성
# 프로퍼티: 속성 / 메서드를 속성처럼 사용할 수 있게 만든 것, getter setter
class Person:
    def __init__(self, birth_year):
        self.birth_year = birth_year
    
    @property # getter -> 값 가져오기 / 메서드를 속성값처럼 사용
    def age(self):
        return 2025 - self.birth_year
    
    @age.setter # age 함수의 값을 세팅(setter)해줄 수 있다.
    def age(self, new_age):
        self.birth_year = 2025 - new_age

joy = Person(2000)
print(joy.age) # age는 메서드지만 속성값처럼 접근 가능
# 25
# joy.birth_year = 1995 # 이렇게 내부에 있는 변수를 직접 수정 -> 위험 / 우회해서 내부 변수에 접근할 수 있게

joy.age = 30
joy.birth_year = 1995
joy.age = 30

 

 

3. 매직 메서드 (= 클래스의 함수)

 

  • 특정 연산이나 행동 정의
  • 파이썬 인터프리터에 의해 특정 상황에서 자동으로 호출
  • __로 둘러싸인 이름 가짐 (이중 언더스코어)
  • 객체의 생성, 표현, 연산 등 다양한 동작 커스터마이즈

 

주요 매직 메서드

  1. __init__(self, ...): 객체 초기화
  2. __str__(self): 문자열 표현 (str() 함수나 print() 함수에서 사용)
  3. __repr__(self): 개발자를 위한 문자열 표현 (디테일한 print())
  4. __len__(self): 길이 반환 (len() 함수에서 사용)
  5. __getitem__(self, key): 인덱싱 또는 키 접근 (obj[key]) (dict 형태)
  6. __setitem__(self, key, value): 인덱싱 또는 키를 통한 할당 (obj[key] = value) (dict 형태)
  7. __iter__(self): 이터레이터 반환
  8. __eq__(self, other): 동등성 비교 (==)
  9. __lt__(self, other): 작음 비교 (<)
  10. __add__(self, other): 덧셈 연산 (+)
  11. __call__(self, ...): 객체를 함수처럼 호출
class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
    
    def __str__(self):
        return f"{self.title} by {self.author}"
    
    def __len__(self):
        return self.pages
    
    def __add__(self, other):
        return self.pages + other.pages

book1 = Book("파이썬의 정석", "홍길동", 300)
book2 = Book("Django 마스터", "김철수", 250)

print(str(book1))  # 인스턴스를 문자열로 바꿔라        # 출력: 파이썬의 정석 by 홍길동
print(len(book1))  # 인스턴스의 길이를 출력해라        # 출력: 300
print(book1 + book2)  # 인스턴스끼리 더하라          # 출력: 550

 

 

자료 출처

스파르타 코딩클럽 데이터 Docs