공부/AI

패스트캠퍼스 강의 정리 - Python 프로그래밍 기초 1

글로벌디노 2024. 11. 23. 15:53

 

 

머신러닝 프로젝트 워크 플로우

  1. 비즈니스 문제 정의 : 해결해야 할 문제를 명확히 한다
  2. ML 문제 프레이밍: 비즈니스 문제를 머신러닝 문제로 변환
  3. 데이터 수집: 문제 해결에 필요한 데이터를 수집
  4. 데이터 통합: 문제 해결에 필요한 데이터를 통합
  5. 데이터 준비 및 정제: 수집한 데이터를 머신러닝 모델에 적합하게 처리하고 오류를 수정
    • 데이터 정제: 수집한 데이터에서 오류, 누락값, 이상치 등을 식별하고 처리
    • 데이터 증강: 데이터의 양을 늘리거나 다양성을 확보하기 위해 데이터를 변형
  6. 데이터 시각화 및 분석: 데이터를 시각적으로 분석하여 패턴을 파악
    • 특징 증강: 기존 특징에서 새로운 특징을 생성하여 모델 성능을 향상
  7. 모델 훈련 및 매개변수 조정: 머신러닝 모델을 훈려하고 최적의 성능을 위해 매개변수를 조정
  8. 모델 평가: 모델의 성능을 평가
  9. 모델 배포
  10. 모니터링 및 디버깅
  11. 재훈련: 필요에 따라 모델을 재훈련

가장 손품이 많이가는 부분이 데이터 처리 부분 (3, 4, 5, 6)

 

 

Why Python?

 

1) 간결하고 쉽다

같은 기능을 다른 언어들에 비해 짧은 코드로 구현 가능

 

2) 데이터분석과 머신러닝을 위한 수많은 라이브러리들이 있다

NumPy (Numerical Python) - 과학적 계산을 위한 핵심 라이브러리. 다차원 배열 객체와 이러한 배열에서 효율적으로 작동하는 도구를 제공

pandas - 데이터 조작 및 분석을 위한 라이브러리

matplotlib - 정적, 대화형, 애니메이션 그래프를 생성하기 위한 시각화 라이브러리

SciPy (Scientific Python) - 과학 및 공학 분야의 다양한 계산 작업을 위한 라이브러리. NumPy 기반으로 구축되었다

scikit-learn - 머신러닝을 위한 라이브러리

TensorFlow - Google에서 개발한 오픈소스 머신러닝 프레임워크

 

3) 다양한 확장이 용이하다

 

 

R - 다양한 통계기법, 예쁜 데이터 시각화에 유리한 언어 

장고 ( Django ) - 파이썬으로 만들어진 오픈소스 웹 프레임워크. 점프 투 장고로 학습 가능

 

파이썬 시작하고 추천하는 업무 자동화 실습

- 이메일 보내기

- SMS 보내기 (카페24)

- CSV/엑셀 파일 만들기

- Selenium을 통해 카페에 파이썬으로 글 쓰기

- 슬랙 메세지 보내기

- 슬랙 봇 만들기

- 카카오톡 봇 만들기

 

아나콘다, 미니콘다 비교

 

기능 아나콘다 미니콘다
포함된 패키지 1,500개 이상 conda, Python, 필수 패키지
크기 약 3GB 약 400MB
설치 시간 오래 걸림 빠름
용도 초보자, 편리성 숙련자, 유연성

 

파이썬 프로그래밍 3가지 방법

- Command Interface

- .py

- Jupyter notebook

 

 

https://deepnote.com/

jupyter notebook 기반에 다양한 기능을 추가한 에디터로

파이썬 문법에 익숙해지면 사용해 보는것을 추천

 

https://nteract.io/

.ipynb 파일을 주피터노트북 없이 열어볼 수 있는 프로그램

수정용도 보다는 뷰어로써 활용하는것 추천

 

 

Jupyter notebook

- 웹 브라우저에서 코드를 실행할 수 있는 대화형 컴퓨팅 환경

- 코딩하며 바로 결과를 확인할 수 있다

- 문서화가 용이하다(Markdown 활용)

 

 

자주 사용되는 단축키

 

- Run : Shift + Enter, Ctrl + Enter

- Delete : DD (vs Z)

- Insert : A(above), B(below)

- Markdown mode : M (vs Y)

- Comments : Select -> Ctrol + /

 

자동완성 : Tab

Help : Shift + Tab or help(something)

 

현재 작업 디렉토리 경로확인 :

import os

os.getcwd()

 

 

기초 데이터 타입

 

1. 숫자형 (Numeric Types)

정수 (int) - 양의 정수, 음의 정수, 0. 예) 10, -5, 0

실수 (float) - 소수점이 있는 숫자. 예) 3.14, -2.5, 0.0

복소수 (complex) - 실수부와 허수부로 이루어진 숫자. 예) 2 + 3j, -1.5 - 2j

 

2. 문자열 (String Type)

문자열 (str): 텍스트 데이터를 나타낸다. 작은따옴표 또는 큰따옴표로 둘러싸인다.

예: "Hello", 'Python', "123"

 

3. 불리언 (Boolean Type)

불리언 (bool): 참 (True) 또는 거짓 (False) 값을 나타낸다. 주로 조건문이나 논리 연산에 사용된다.

 

4. None 타입

None: 값이 없음을 나타내는 특별한 데이터 타입. 변수에 값이 할당되지 않았거나, 함수에서 값을 반환하지 않을 때 사용.

 

5. 컬렉션 타입 (Collection Types)

리스트 (list): 여러 값을 순서대로 저장하는 가변적인 (mutable, 수정 가능한) 컬렉션. 대괄호 []로 표시.

    예: [1, 2, 3], ["apple", "banana"]

튜플 (tuple): 여러 값을 순서대로 저장하는 불변적인 (immutable 수정 불가능한) 컬렉션. 소괄호 ()로 표시.

    예: (1, 2, 3), ("apple", "banana")
딕셔너리 (dict): 키-값 쌍으로 데이터를 저장하는 컬렉션. 중괄호 {}로 표시. 

    예: {"name": "John", "age": 30}, {"apple": 1, "banana": 2}
집합 (set): 중복되지 않는 값들을 저장하는 컬렉션. 중괄호 {}로 표시.

    예: {1, 2, 3}, {"apple", "banana"}

 

 

연산자

 

1. 산술 연산자:

덧셈 (+): 두 값을 더합니다. 3 + 5 = 8
뺄셈 (-): 두 값을 뺍니다. 10 - 3 = 7
곱셈 (*): 두 값을 곱합니다. 2 * 4 = 8
나눗셈 (/): 두 값을 나눕니다. 10 / 2 = 5.0
정수 나눗셈 (//): 나눗셈의 몫을 정수로 반환합니다. 10 // 3 = 3
나머지 (%): 나눗셈의 나머지를 반환합니다. 10 % 3 = 1
지수 (**): 거듭제곱을 계산합니다. 2 ** 3 = 8


2. 비교 연산자:

같음 (==): 두 값이 같은지 비교합니다. 5 == 5는 True
같지 않음 (!=): 두 값이 다른지 비교합니다. 5 != 3는 True
크다 (>): 왼쪽 값이 오른쪽 값보다 큰지 비교합니다. 10 > 5는 True
작다 (<): 왼쪽 값이 오른쪽 값보다 작은지 비교합니다. 3 < 8는 True
크거나 같다 (>=): 왼쪽 값이 오른쪽 값보다 크거나 같은지 비교합니다. 7 >= 7는 True
작거나 같다 (<=): 왼쪽 값이 오른쪽 값보다 작거나 같은지 비교합니다. 2 <= 5는 True


3. 할당 연산자:

할당 (=): 변수에 값을 할당합니다. x = 10
덧셈 할당 (+=): 변수에 값을 더하고 다시 할당합니다. x += 5는 x = x + 5와 같습니다.
뺄셈 할당 (-=): 변수에 값을 빼고 다시 할당합니다.
곱셈 할당 (*=): 변수에 값을 곱하고 다시 할당합니다.
나눗셈 할당 (/=): 변수에 값을 나누고 다시 할당합니다.
나머지 할당 (%=): 변수에 값의 나머지를 구하고 다시 할당합니다.
지수 할당 (**=): 변수에 값의 거듭제곱을 구하고 다시 할당합니다.

 

4. 논리 연산자:

and: 두 조건이 모두 참일 때 True를 반환합니다.
or: 두 조건 중 하나라도 참일 때 True를 반환합니다.
not: 조건의 결과를 반전합니다. True는 False로, False는 True로 바꿉니다.

 

5. 비트 연산자:

비트 AND (&): 각 비트를 AND 연산합니다.
비트 OR (|): 각 비트를 OR 연산합니다.
비트 XOR (^): 각 비트를 XOR 연산합니다.
비트 NOT (~): 각 비트를 반전합니다.
왼쪽 시프트 (<<): 비트를 왼쪽으로 이동합니다.
오른쪽 시프트 (>>): 비트를 오른쪽으로 이동합니다.

 

6. 멤버십 연산자:

in: 특정 값이 시퀀스 (리스트, 튜플, 문자열 등)에 있는지 확인합니다.
not in: 특정 값이 시퀀스에 없는지 확인합니다.


7. 식별 연산자:

is: 두 변수가 같은 객체를 참조하는지 확인합니다.
is not: 두 변수가 다른 객체를 참조하는지 확인합니다.

 

 

파이썬 공부시 자주 나오는 에러들

 

1. SyntaxError (문법 오류)

의미: 파이썬 코드의 문법 규칙에 어긋나는 부분이 있을 때 발생합니다.
원인: 콜론(:) 누락, 괄호 불일치, 들여쓰기 오류 등
해결 팁: 에러 메시지에 표시된 라인과 해당 라인 근처의 코드를 주의 깊게 확인하여 문법 오류를 수정합니다.


2. IndentationError (들여쓰기 오류)

의미: 파이썬은 코드 블록을 들여쓰기로 구분하기 때문에, 들여쓰기가 잘못되었을 때 발생합니다.
원인: 스페이스와 탭 혼용, 불필요한 들여쓰기, 들여쓰기 부족 등
해결 팁: 코드 블록의 들여쓰기를 일관되게 (스페이스 4개 또는 탭) 맞춰줍니다.


3. NameError (이름 오류)

의미: 정의되지 않은 변수나 함수를 사용하려고 할 때 발생합니다.
원인: 변수/함수 이름 오타, 변수/함수 선언 전 사용, 존재하지 않는 변수/함수 호출 등
해결 팁: 변수/함수가 정의되었는지, 이름에 오타는 없는지 확인합니다.

 

4. TypeError (타입 오류)

의미: 데이터 타입이 맞지 않는 연산이나 함수 호출을 시도할 때 발생합니다.
원인: 숫자와 문자열을 더하려는 경우, 리스트에 정수 인덱스 대신 문자열 인덱스를 사용하는 경우 등
해결 팁: 연산이나 함수 호출에 사용되는 변수들의 데이터 타입을 확인하고, 필요시 타입 변환을 수행합니다.

 

5. ValueError (값 오류)

의미: 함수나 연산에 적절하지 않은 값을 전달했을 때 발생합니다.
원인: 정수를 입력받아야 하는 함수에 문자열을 전달하는 경우, 범위를 벗어난 값을 사용하는 경우 등
해결 팁: 함수나 연산에 필요한 값의 유형과 범위를 확인하고, 입력 값을 수정합니다.

 

6. IndexError (인덱스 오류)

의미: 리스트, 튜플, 문자열 등의 시퀀스에서 존재하지 않는 인덱스에 접근하려고 할 때 발생합니다.
원인: 범위를 벗어난 인덱스 사용, 빈 시퀀스에 접근 등
해결 팁: 시퀀스의 길이와 접근하려는 인덱스 값을 확인합니다.

 

7. KeyError (키 오류)

의미: 딕셔너리에 존재하지 않는 키를 사용하려고 할 때 발생합니다.
원인: 키 값 오타, 존재하지 않는 키 사용 등
해결 팁: 딕셔너리에 해당 키가 있는지 확인하고, 키 값에 오타가 없는지 확인합니다.

 

8. AttributeError (속성 오류)

의미: 객체에 존재하지 않는 속성이나 메서드에 접근하려고 할 때 발생합니다.
원인: 속성/메서드 이름 오타, 해당 객체가 가지고 있지 않은 속성/메서드 사용 등
해결 팁: 객체의 속성과 메서드를 확인하고, 이름에 오타는 없는지 확인합니다.

 

9. ZeroDivisionError (0으로 나누기 오류)

의미: 0으로 나누기를 시도할 때 발생합니다.
원인: 나눗셈 연산에서 분모가 0인 경우
해결 팁: 분모가 0이 되는 경우를 처리하는 조건문을 추가합니다.

 

10. FileNotFoundError (파일 찾을 수 없음 오류)

의미: 존재하지 않는 파일을 열려고 시도할 때 발생합니다.
원인: 파일 경로 오류, 파일 이름 오타 등
해결 팁: 파일 경로와 파일 이름을 확인합니다.

 

 

 

type() 함수 - 객체의 데이터 타입을 반환하는 내장 함수

 

예시)

# 정수
print(type(10))        # <class 'int'> 출력
# 실수
print(type(3.14))      # <class 'float'> 출력
# 문자열
print(type("Hello"))    # <class 'str'> 출력
# 리스트
print(type([1, 2, 3])) # <class 'list'> 출력
# 튜플
print(type((1, 2, 3))) # <class 'tuple'> 출력
# 딕셔너리
print(type({"a": 1, "b": 2}))  # <class 'dict'> 출력

 

 

len() 함수 - 객체의 길이(요소의 개수)를 반환하는 내장 함수. 주로 문자열, 리스트, 튜플, 딕셔너리, 셋 같은 시퀀스형 데이터의 길이를 확인하는 사용

 

예시)

# 문자열
print(len("Hello"))    # 5 출력
# 리스트
print(len([1, 2, 3])) # 3 출력
# 튜플
print(len((1, 2, 3))) # 3 출력
# 딕셔너리
print(len({"a": 1, "b": 2}))  # 2 출력
# 세트
print(len({1, 2, 3})) # 3 출력

 

 

인덱싱(indexing) 과 슬라이싱(slicing)

 

시퀀스형 데이터(문자열, 리스트, 튜플 등)에서 특정 요소 또는 일부 요소를 선택하는 데 사용

 

1. 인덱싱

- 특정 위치의 요소 하나를 선택

- 대괄호 [] 안에 원하는 요소의 인덱스를 지정

- 파이썬의 인덱스는 0부터 시작. 0, 1, 2, 3 ...

- 음수 인덱스 사용가능. -1은 마지막 요소, -2는 마지막에서 두번째 요소

 

예시)

my_string = "Hello"
my_list = [10, 20, 30, 40, 50]

print(my_string[0])  # "H" 출력
print(my_list[2])   # 30 출력
print(my_string[-1]) # "o" 출력
print(my_list[-2])  # 40 출력

 

 

2. 슬라이싱

- 시퀀스에서 연속된 일부 요소를 선택

- 대괄호 [] 안에 시작 인덱스:끝 인덱스 를 지정

- 시작 인덱스 부터 끝 인덱스 - 1 까지의 요소가 선택

- 시작 인덱스를 생략하면 처음부터, 끝 인덱스 를 생략하면 끝까지 선택

- 시작 인덱스:끝 인덱스:간격 과 같이 간격을 지정하여 요소를 건너뛰며 선택 가능

 

예시)

my_string = "Hello"
my_list = [10, 20, 30, 40, 50]

print(my_string[1:4])  # "ell" 출력
print(my_list[2:])    # [30, 40, 50] 출력
print(my_string[:3])   # "Hel" 출력
print(my_list[::2])   # [10, 30, 50] 출력

 

 

함수 (function, method)

 

프로그래밍에서 특정 작업을 수행하는 코드 블록. 마치 작은 프로그램처럼 동작하며, 코드를 재사용 가능하게 만들고 프로그램의 구조를 체계적으로 구성.

 

함수의 장점:

 

- 코드 재사용성 증대: 한 번 정의된 함수는 프로그램 내에서 여러 번 호출하여 사용 가능하다. 이는 코드 중복을 줄이고 유지보수를 용이하게 한다.

- 모듈화: 프로그램을 여러 개의 함수로 나누어 구성함으로써 코드의 가독성과 이해도를 높일 수 있다.

- 추상화: 복잡한 로직을 함수 내부에 숨기고, 간단한 인터페이스를 통해 함수를 사용할 수 있도록 하여 코드의 복잡성을 줄인다.


함수의 구성 요소:

 

- 함수 정의 (def): def 키워드를 사용하여 함수를 정의한다. 함수 이름, 매개변수, 함수 본문으로 구성된다.

- 함수 이름: 함수를 식별하기 위한 고유한 이름이다.

- 매개변수: 함수에 입력으로 전달되는 값을 나타낸다. 함수 정의 시 괄호 안에 선언한다.

- 함수 본문: 함수가 수행하는 작업을 정의하는 코드 블록이다.

- 반환 값 (return): 함수 실행 후 결과로 반환되는 값이다. return 문을 사용하여 값을 반환한다.

 

예시들)

 

1. 기본적인 함수:

def greet(name):
  """주어진 이름으로 인사하는 함수"""
  print(f"안녕하세요, {name}님!")

greet("홍길동")  # "안녕하세요, 홍길동님!" 출력

greet 함수는 name이라는 매개변수를 입력으로 받아 인사말을 출력한다.

 

 

2. 값을 반환하는 함수:

def calculate_area(width, height):
  """직사각형의 넓이를 계산하는 함수"""
  area = width * height
  return area

area = calculate_area(5, 10)  # 넓이를 계산하여 area 변수에 저장
print(area)  # 50 출력

calculate_area 함수는 width와 height를 입력으로 받아 직사각형의 넓이를 계산하고, 계산된 넓이 값을 반환한다.

 

3. 기본값을 가진 매개변수:

def greet(name, greeting="안녕하세요"):
  """주어진 이름과 인사말로 인사하는 함수"""
  print(f"{greeting}, {name}님!")

greet("홍길동")  # "안녕하세요, 홍길동님!" 출력
greet("홍길동", "반갑습니다")  # "반갑습니다, 홍길동님!" 출력

greet 함수의 greeting 매개변수는 기본값으로 "안녕하세요"를 가진다. 함수 호출 시 greeting 값을 지정하지 않으면 기본값이 사용된다.

 

4. 가변 인자 함수:

def sum_all(*args):
  """모든 입력 값을 더하는 함수"""
  total = 0
  for num in args:
    total += num
  return total

result = sum_all(1, 2, 3, 4, 5)  # 여러 개의 숫자를 입력으로 전달
print(result)  # 15 출력

sum_all 함수는 *args를 사용하여 임의의 개수의 인자를 받을 수 있다.

 

 

인자(argument) 와 매개변수(parmeter) 용어 차이

 

매개변수 - 함수를 정의할 때 함수에 전달된 값을 나타내기 위해 사용하는 변수

인자 - 함수를 호출할 때, 실제로 함수에 전달되는 값

def add(x, y):  # x, y는 매개변수
  """두 숫자를 더하는 함수"""
  return x + y

result = add(3, 5)  # 3, 5는 인자

 

 

함수의 디폴트값

 

함수의 매개변수에 미리 지정된 값을 의미. 함수 호출 시 해당 매개변수에 값을 전달하지 않으면, 디폴트 값이 자동으로 사용된다.

def greet(name, greeting="안녕하세요"):
  """주어진 이름과 인사말로 인사하는 함수"""
  print(f"{greeting}, {name}님!")

위 예시에서 greeting 매개변수의 디폴트 값은 "안녕하세요"이다.

 

주의사항

 

- 디폴트 값은 불변 객체를 사용해야 한다. 리스트나 딕셔너리와 같은 가변 객체를 디폴트 값으로 사용하면, 함수 호출 시 예상치 못한 결과가 발생할 수 있다.

- 디폴트 값이 있는 매개변수는 디폴트 값이 없는 매개변수 뒤에 위치해야 한다. 그렇지 않으면 SyntaxError 발생

 

활용 예시)

def calculate_interest(principal, rate=0.05, time=1):
  """원금, 이율, 기간을 입력받아 이자를 계산하는 함수"""
  interest = principal * rate * time
  return interest

# 모든 매개변수에 값을 전달하는 경우
interest1 = calculate_interest(10000, 0.03, 2)  # 원금 10000원, 이율 3%, 기간 2년
print(interest1)  # 600.0 출력

# 이율과 기간을 생략하는 경우 (디폴트 값 사용)
interest2 = calculate_interest(10000)  # 원금 10000원, 이율 5% (디폴트 값), 기간 1년 (디폴트 값)
print(interest2)  # 500.0 출력

# 이율만 지정하는 경우
interest3 = calculate_interest(10000, 0.04)  # 원금 10000원, 이율 4%, 기간 1년 (디폴트 값)
print(interest3)  # 400.0 출력

 

 

변수의 범위(scope)

 

1. 지역 변수 (Local Varialble)

- 함수 내부에서 정의된 변수

- 함수가 호출될 때 생성되고, 함수 실행이 종료될 때 소멸

- 함수 내부에서만 접근 가능하며, 함수 외부에서는 접근할 수 없다

 

예시)

 

2. 전역 변수 (Global Variable)

- 함수 외부에서 정의된 변수

- 프로그램 실행 시작 시 생성되고, 프로그램 종료 시 소멸

- 프로그램 전체에서 접근 가능

 

예시)

 

 

3. global 키워드

- 함수 내부에서 전역 변수를 수정하고 싶을 때 사용

 

실습)

 

반응형