[TIL]_2025.03.04~05 본캠프 16~17일차 (3): 파이썬 종합반 1주차, 2주차

JIYUU·2025년 3월 5일

1주차 -

01. 이번에 배울 것

파이썬은 다양한 데이터 패키지, 시각화 패키지, 머신러닝, 딥러닝 패키지 등을 사용할 수 있기 때문에
데이터 분석을 위해서는 반드시 파이썬 문법을 알아야 함

02. 환경 세팅하기

Colaboratory (필수)
장점 : 구글 계정만 있으면 어디서든 로그인해서 사용할 수 있다.
본인의 컴퓨터에 설치하는 것이 아니기 때문에 고사양의 환경에서도 파이썬을 작동할 수 있음

03. Colab 주요 단축키

  • 코드 실행 : Shift + Enter
  • 새 코드 셀 추가 : 코드 셀 위에서 Ctrl + M + A (Windows 및 Linux) 또는 Command + M + A (Mac)
  • 코드 셀 삭제 : 코드 셀 위에서 Ctrl + M + D (Windows 및 Linux) 또는 Command + M + D (Mac)
  • 코드 셀 분할 : 코드 셀 위에서 Ctrl + M + 하이픈(-) (Windows 및 Linux) 또는 Command + M + 하이픈(-) (Mac)을 누릅니다.
  • 셀 유형 변경 : 마크다운 셀로 변경하려면 코드 셀 위에서 Ctrl + M + M(Windows 및 Linux) 또는 Command + M + M (Mac)를 누릅니다.
  • 실행 취소 : Ctrl + M + Z (Windows 및 Linux)

04. 출력문

코드를 출력시켜서 사람이 직접 볼 수 있게 해주는 문법
print() : 화면에 값을 출력할 때 사용됨
변수란 어떤 값을 담는 바구니다

  • 실전예시1 : 데이터 분석 결과물 출력
num_records = 1000

print(f'총 {num_records} 명의 레코드가 분석되었습니다.')

05. 변수

1) 변수란? =을 사용하여 값을 저장하는 공간으로 사용 전에 선언되어야 함

# 변수 사용
print(name)  # "Alice" 출력
print("나이:", age)  # "나이: 25" 출력

# 변수를 사용한 연산
double_age = age * 2
print("나이의 두 배:", double_age)  # "나이의 두 배: 50" 출력
  • Sequence Type : 순서가 있는, 순서대로 나열된 자료형
    ex. 문자, 리스트, 튜플 등

2) 변수의 종류 1 : 문자열

  • "", '' 로 감싸서 선언
  • 문자열 변수끼리 연결(concatenamte)하여 새로운 문자열 만들 수 있음
  • 문자열 메소드 : .lower, .upper. .strip([chars]), .split(sep=None, maxsplit=-1) 등

3) 변수의 종류 2 : 숫자열

  • 정수 = int, 연산결과 항상 정수
  • 실수 = float, 연산 결과 항상 실수
  • 나눗셈 = / (실수 반환), // (정수 반환)
  • 숫자열 메소드 : abs(), round()

4) 변수의 종류 3 : 불리언(Boolean)

  • 참True, 거짓False으로 나타내는 데 사용
# Boolean 변수 선언
is_raining = True
is_sunny = False

# 비교 연산자를 사용하여 Boolean 값 비교
x = 10
y = 5

greater_than = x > y
print(greater_than)  # True 출력

5) NaN (결측값)

  • 데이터에서 결측치(Missing Data)를 나타내는 값
  • 수학 연산에서의 NaN
# 0으로 나누는 연산
result = 1 / 0
print(result)  # 출력: Infinity

import math

# 유효하지 않은 수학적 연산
result = math.sqrt(-1)
print(result)  # 출력: nan
  • 데이터프레임(DataFrame)에서의 NaN
import pandas as pd

# NaN을 포함한 데이터프레임 생성
data = {'A': [1, 2, None],
        'B': [3, None, 5]}
df = pd.DataFrame(data)

print(df)
# 출력:
#      A    B
# 0  1.0  3.0
# 1  2.0  NaN
# 2  NaN  5.0

6) 입력문 (input)

  • input()은 키보드로 사용자에게 입력을 받는 함수
  • 숫자를 입력하면 문자열(str)로 반환됨

7) 변수 실전 예시 1 : 데이터를 담을 때

# 학생들의 성적 데이터를 변수에 할당
grade1 = 85
grade2 = 92
grade3 = 78
grade4 = 90
grade5 = 88

# 각 변수에 담긴 데이터 출력
print("첫 번째 학생의 성적:", grade1)
print("두 번째 학생의 성적:", grade2)
print("세 번째 학생의 성적:", grade3)
print("네 번째 학생의 성적:", grade4)
print("다섯 번째 학생의 성적:", grade5)

# 위의 방법 보다는 리스트, 딕셔너리 활용이 효율적임!

8) 변수 실전 예시 2 : 계산된 값을 담을 때

# 데이터를 변수에 할당
data1 = 85
data2 = 92
data3 = 78
data4 = 90
data5 = 88

# 데이터의 평균 계산
total = data1 + data2 + data3 + data4 + data5  # 모든 데이터의 합을 계산
count = 5  # 데이터의 개수를 직접 지정
average = total / count  # 데이터의 평균을 계산

# 결과 출력
print("데이터 평균:", average)

# 위와 같이 사용도 가능은 하지만, 리스트 혹은 다른 자료 구조를 통해 관리하는 것이 효율적임!

9) 변수 실정 예시 3 : 머신러닝 모델구조 자체를 담을 때

  • 주로 변수에 모델 객체 할당
  • 모델 저장 및 불러오기 가능
# Scikit-learn 라이브러리를 활용하여 간단한 선형 회귀 모델을 변수에 할당
from sklearn.linear_model import LinearRegression

# 선형 회귀 모델 객체 생성
model = LinearRegression()

# model이라는 변수를 사용하여 선형 회귀 모델을 사용 가능

06. Quiz

1) 다음 두 수의 합을 구하여 출력하세요.
첫번째 수 : 15
두번째 수 : 27

  • 답안
num1 = 15
num2 = 27

print(num1 + num2)

2) 다음 문장을 변수에 담고 출력하세요
"Python은 데이터 분석과 인공지능 분야에서 매우 인기 있는 프로그래밍 언어입니다."

sentence = "Python은 데이터 분석과 인공지능 분야에서 매우 인기 있는 프로그래밍 언어입니다."

print(sentence)

  • 정답
# 다양한 정답이 있을 수 있으므로 아래 답은 참고로 확인하세요!
first = 15
second = 27
print(first + second)

# 결과로 42가 출력되면 정답입니다!
>>> 42
# 다양한 정답이 있을 수 있으므로 아래 답은 참고로 확인하세요!
string = "Python은 데이터 분석과 인공지능 분야에서 매우 인기 있는 프로그래밍 언어입니다."
print(string)

# 결과로 아래 문장이 출력되면 정답입니다!
>>> 'Python은 데이터 분석과 인공지능 분야에서 매우 인기 있는 프로그래밍 언어입니다.'

2주차

01. 리스트 기본 사용법

1) 리스트란?

  • 파이썬에서 가장 자주 사용되는 데이터 구조로 변경 가능(Mutable)한 시퀀스(sepuence) -> 순서가 있다!
  • [] 대괄호를 사용하여 만든다
  • 리스트 안에는 여러 가지 값을 요소(element)로 순서대로 담을 수 있음

2) 리스트의 기본 사용법
- 인덱싱 (Indexing)
리스트의 특정 위치의 값에 접근하는 방법

# 리스트 생성
numbers = [1, 2, 3, 4, 5]

# 첫 번째 요소에 접근하기 (파이썬에서는 첫번째가 0임)
first_number = numbers[0]
print("First number:", first_number)

# 두 번째 요소에 접근하기
second_number = numbers[1]
print("Second number:", second_number)

# 마지막 요소에 접근하기
last_number = numbers[-1] # 뒤에서 첫번째
print("Last number:", last_number)

# 음수 인덱스를 사용하여 역순으로 요소에 접근하기
second_last_number = numbers[-2]
print("Second last number:", second_last_number)

- 리스트의 메소드 ⭐
list변수 뒤에 붙여서 사용해줌!
- append(): 리스트에 항목을 추가⭐
- extend(): 리스트에 다른 리스트의 모든 항목을 추가
- insert(): 리스트의 특정 위치에 항목을 삽입
- remove(): 리스트에서 특정 값을 삭제
- pop(): 리스트에서 특정 위치의 값을 제거하고 반환
- index(): 리스트에서 특정 값의 인덱스를 찾기
- count(): 리스트에서 특정 값의 개수를 세기
- sort(): 리스트의 항목들을 정렬
- reverse(): 리스트의 항목들을 역순으로 뒤집기

- 참고!) **‘반환’**이라는 표현은 함수의 결과 값을 밖으로 끄집어 낸다라는 것을 의미.

- 리스트 값 삭제

  • del list[] : 리스트의 인덱스로 어떤 값을 삭제할 것인지 지정하여 제거
    remove와 결과는 같지만, 인덱스로 지정한다는 것이 다름
  • list.clear() : 리스트 내의 모든 값을 제거

- 리스트 값 변경
list[]로 원하는 위치를 인덱싱하고 값을 변경해준다.

my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']

# 리스트 값 변경하기
my_list[3] = 'dragonfruit'
print(my_list)  # 출력: ['apple', 'banana', 'cherry', 'dragonfruit', 'elderberry']

- 중첩된 리스트에서 인덱싱하기
리스트 안에 대괄호로 또 다른 리스트가 중첩되어 있는 경우가 있음
이런 경우에는 인덱싱을 두번하면 됨!

# 중첩된 리스트에서 인덱싱하기
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list[1][0])  # 출력: 4 (두 번째 리스트의 첫 번째 항목)

- 리스트 실전 예시 : 간단한 데이터 연산

# 리스트를 사용한 간단한 데이터 계산 예시
grades = [85, 92, 88, 78, 90]
average_grade = sum(grades) / len(grades) # 리스트의 길이 = 요소의 개수
print("평균 성적:", average_grade)

02. 리스트 고급 사용법

1) 슬라이싱

  • 리스트의 일부분을 추출하는 것
  • 특정 범위의 항목을 선택, 리스트 자르기 가능
  • 슬라이싱을 할 때에 끝에 입력할 인덱스는 내가 선택할 인덱스보다 +1(1부터 12번째의 요소를 가져올 때에 [0:13]을 해야함!)
# 리스트 슬라이싱의 구분

new_list = old_list[start:end:step]

velog 오류로 아래부분은 날아가서 다시 작성....😇

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. 일부분만 추출하기
print(my_list[2:5])   # 출력: [3, 4, 5]

# 2. 시작 인덱스 생략하기 (처음부터 추출)
print(my_list[:5])    # 출력: [1, 2, 3, 4, 5]

# 3. 끝 인덱스 생략하기 (끝까지 추출)
print(my_list[5:])    # 출력: [6, 7, 8, 9, 10]

# 4. 음수 인덱스 사용하기 (뒤에서부터 추출)
print(my_list[-3:])   # 출력: [8, 9, 10]

# 5. 간격 설정하기 (특정 간격으로 추출)
print(my_list[1:9:2]) # 출력: [2, 4, 6, 8]

# 6. 리스트 전체를 복사하기
copy_of_list = my_list[:]
print(copy_of_list)   # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 7. 리스트를 거꾸로 뒤집기
reversed_list = my_list[::-1]
print(reversed_list)  # 출력: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# 리스트에서 홀수 번째 인덱스의 값들 출력하기
my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90]

odd_index_values = my_list[1::2]
print("홀수 번째 인덱스의 값들:", odd_index_values)  # 출력: [20, 40, 60, 80]

2) 정렬

  • sort() : 리스트 내의 요소들을 기본적으로 오름차순(알파벳순) 정렬할 때 사용
  • 원래의 리스트를 변경하는 개념이다
  • reverse = : True일 경우 역순 배열, False일 경우 정배열
my_list.sort(reverse=False)

3) 리스트 실전 예시 : 데이터를 임의의 범위만큼 선택할 때 슬라이싱, 인덱싱

  • 실제 Iris 공용 데이터(유명한 데이터셋!) 활용한 예시
  • 참고) AI모델을 학습할 때 train dataset으로 학습하고 test dataset으로 평가를 진행하기 때문에, 이 두 데이터가 절대로 섞이면 안되고 따로 구분을 해주어야 한다.
from sklearn.datasets import load_iris

# Iris 데이터셋 불러오기
iris = load_iris()

# Iris 데이터셋에서 특정 범위의 데이터 슬라이싱하기
train_data = iris.data[:100]  # 인덱스 0부터 99까지의 데이터 추출
print("학습 데이터:", train_data)
test_data = iris.data[100:]  # 인덱스 100부터 끝까지의 데이터 추출
print("학습 데이터:", test_data)

04. 튜플 사용법

1) 튜플이란?

  • ()를 사용하여 생성하는 변경 불가능한(immutable) 시퀀스(sequence) 자료형
  • 요소의 추가, 삭제 등의 변경이 불가하여 데이터 보호할 때 주로 사용
  • 새로운 튜플을 생성하거나 튜플끼리 병합은 가능함

2) 튜플 인덱싱, 슬라이싱

  • 리스트와 유사한 방식으로 가능
my_tuple = (1, 2, 3, 'hello', 'world')

print(my_tuple[0])      # 첫 번째 요소에 접근
print(my_tuple[-1])     # 마지막 요소에 접근
print(my_tuple[2:4])    # 인덱스 2부터 3까지의 요소를 슬라이싱

3) 튜플에서 자주 사용하는 메서드

  • count(): 지정된 요소의 개수를 반환
  • index(): 지정된 요소의 인덱스를 반환

4) 튜플과 리스트의 차이점

  • 튜플 : 변경 불가! 순서 있음
  • 리스트 : 변경 가능! 순서 있음

5) 튜플→리스트로 변경, 리스트→튜플로 변경

  • list() : 튜플에서 리스트로 변경
  • tuple() : 리스트를 튜플로 변경

**6) 튜플 실전 예시 : 변하면 안되는 개인정보 데이터 튜플로 담기

  • 데이터 불변성을 보장, 데이터 일관성 유지!
# 데이터 표현 예시
record = ('John', 30, 'john@example.com')

05. 딕셔너리 사용법

1) 딕셔너리란?

  • {}를 사용하여 키(Key)와 값(Values)의 쌍으로 데이터를 저장하는 자료구조
  • 키는 중복 불가, 값은 중복 가능
  • pandas 라이브러리와 함께 dataframe을 만들어 표 형태로 데이터를 출력하는 데에 자주 사용됨
my_dict = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3'
}
# 많은 데이터를 담는 경우가 많아, 가독성을 위해 중괄호 내에서 줄바꿈

2) 딕셔너리 기본기

  • 딕셔너리 사용 예시
# 빈 딕셔너리 생성
empty_dict = {}

# 학생 성적표
grades = {
    'Alice': 90,
    'Bob': 85,
    'Charlie': 88
}

# 접근하기
print(grades['Alice'])  # 출력: 90

# 값 수정하기
grades['Bob'] = 95

# 요소 추가하기
grades['David'] = 78

# 요소 삭제하기
del grades['Charlie']

**3) 딕셔너리에서 자주 사용되는 메소드

  • keys(): 모든 키를 dict_keys 객체로 반환
  • values(): 모든 값을 dict_values 객체로 반환
  • items(): 모든 키-값 쌍을 (키, 값) 튜플로 구성된 dict_items 객체로 반환
  • get(): 지정된 키에 대한 값을 반환합니다. 키가 존재하지 않으면 기본값을 반환
  • pop(): 지정된 키와 해당 값을 딕셔너리에서 제거하고 값을 반환
  • popitem(): 딕셔너리에서 마지막 키-값 쌍을 제거하고 반환
# 딕셔너리 생성
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# keys() 메서드 예제
keys = my_dict.keys()
print("Keys:", keys)  # 출력: dict_keys(['name', 'age', 'city'])

# values() 메서드 예제
values = my_dict.values()
print("Values:", values)  # 출력: dict_values(['John', 30, 'New York'])

# items() 메서드 예제
items = my_dict.items()
print("Items:", items)  # 출력: dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])

# get() 메서드 예제
age = my_dict.get('age')
print("Age:", age)  # 출력: 30

# pop() 메서드 예제
city = my_dict.pop('city')
print("City:", city)  # 출력: New York
print("Dictionary after pop:", my_dict)  # 출력: {'name': 'John', 'age': 30}

# popitem() 메서드 예제
last_item = my_dict.popitem()
print("Last item popped:", last_item)  # 출력: ('age', 30)
print("Dictionary after popitem:", my_dict)  # 출력: {'name': 'John'}

4) 딕셔너리 실전 예시 : 데이터를 사전 처럼 저장할 때

# 제품 카탈로그
products = {
    '1001': {'name': 'Keyboard', 'price': 20.99, 'stock': 50},
    '1002': {'name': 'Mouse', 'price': 15.50, 'stock': 70},
    '1003': {'name': 'Monitor', 'price': 199.99, 'stock': 30}
}

# 날짜별 이벤트 관리
events = {
    '2024-04-01': ['Meeting with client', 'Team lunch'],
    '2024-04-02': ['Presentation preparation', 'Project review'],
    '2024-04-03': ['Training session', 'Code debugging']
}

06. Quiz

1) 리스트 활용 퀴즈

  • 다음 리스트에서 세 번째 요소를 출력하세요.
my_list = [10, 20, 30, 40, 50]

# 작성한 답
print(my_list[2])
  • 다음 리스트에 60을 추가하세요.
my_list = [10, 20, 30, 40, 50]

# 작성한 답
my_list.append(60)
  • 다음 리스트의 길이를 출력하세요.
my_list = ['apple', 'banana', 'orange', 'grape']

# 작성한 답
print(len(my_list))
  • 다음 리스트의 마지막 요소를 제거하세요.
my_list = ['car', 'bus', 'bike', 'train']

# 작성한 답
my_list.pop(-1)
  • 다음 리스트를 역순으로 출력하세요.
my_list = ['red', 'green', 'blue', 'yellow']

# 작성한 답
my_list.reverse()
print(my_list)

2) 튜플 활용 퀴즈

  • 다음 튜플에서 세 번째 요소를 출력하세요.
my_tuple = (10, 20, 30, 40, 50)

# 작성한 답
print(my_tuple[2])
  • 다음 튜플의 길이를 출력하세요.
my_tuple = ('apple', 'banana', 'orange', 'grape')

# 작성한 답
print(len(my_tuple))
  • 다음 튜플을 역순으로 출력하세요.
my_tuple = ('red', 'green', 'blue', 'yellow')

# 작성한 답
reversed_tuple = my_tuple[::-1]
print(reversed_tuple)
  • 다음 튜플을 리스트로 변환하세요.
my_tuple = (1, 2, 3, 4, 5)

# 작성한 답
list(my_tuple)
  • 다음 튜플과 다른 튜플을 연결하여 새로운 튜플을 만드세요.
my_tuple1 = ('a', 'b', 'c')
my_tuple2 = ('d', 'e', 'f')

# 작성한 답
my_tuple = my_tuple1 + my_tuple2
print(my_tuple)

3) 딕셔너리 활용 퀴즈

  • 다음 딕셔너리에서 'name'에 해당하는 값을 출력하세요.
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 작성한 답
print(my_dict['name'])
  • 다음 딕셔너리에 'gender'를 추가하세요.
my_dict = {'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}

# 작성한 답
my_dict['gender'] = 'male'
print(my_dict)
  • 다음 딕셔너리의 길이를 출력하세요.
my_dict = {'a': 100, 'b': 200, 'c': 300}

# 작성한 답
print(len(my_dict))
  • 다음 딕셔너리에서 'age'를 제거하세요.
my_dict = {'name': 'Charlie', 'age': 35, 'city': 'Chicago'}

# 작성한 답
del my_dict['age']

0개의 댓글