카테고리 없음
[내일배움캠프] 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()
자료 출처
파이썬 기초반 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. 매직 메서드 (= 클래스의 함수)
- 특정 연산이나 행동 정의
- 파이썬 인터프리터에 의해 특정 상황에서 자동으로 호출
- __로 둘러싸인 이름 가짐 (이중 언더스코어)
- 객체의 생성, 표현, 연산 등 다양한 동작 커스터마이즈
주요 매직 메서드
- __init__(self, ...): 객체 초기화
- __str__(self): 문자열 표현 (str() 함수나 print() 함수에서 사용)
- __repr__(self): 개발자를 위한 문자열 표현 (디테일한 print())
- __len__(self): 길이 반환 (len() 함수에서 사용)
- __getitem__(self, key): 인덱싱 또는 키 접근 (obj[key]) (dict 형태)
- __setitem__(self, key, value): 인덱싱 또는 키를 통한 할당 (obj[key] = value) (dict 형태)
- __iter__(self): 이터레이터 반환
- __eq__(self, other): 동등성 비교 (==)
- __lt__(self, other): 작음 비교 (<)
- __add__(self, other): 덧셈 연산 (+)
- __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
더보기
/