명시적 타입 변환

: 변수에 저장된 값을 다른 데이터 타입으로 바꾸는 것을 의미 (정수 -> 문자열, 문자열 -> 실수)

명시적 타입 변환
(프로그래머가 직업 타입 변환 함수를 사용하여 데이터를 변환하는 방식)
함수 예시
int()


실수를 정수로 변환
a = 3.14
b = int(a)
print(b)  # 3
문자열을 정수로 변환
c = "100"
d = int(c)
print(d)  # 100
주의
: 변환하려는 문자열이 숫자가 아니면 오류가 발생

e = int("abc")
# ValueError: invalid literal for int()
float()


정수를 실수로 변환
a = 10
b = float(a)
print(b)  # 10.0
문자열을 실수로 변환
c = "3.14"
d = float(c)
print(d)  # 3.14
주의
: 변환하려는 문자열이 실수 형태가 아니면 오류가 발생

e = float("abc")
# ValueError: could not convert string to float
str()

정수를 문자열로 변환
a = 10
b = str(a)
print(b)  # "10"
실수를 문자열로 변환
c = 3.14
d = str(c)
print(d)  # "3.14"
bool()


숫자를 불리언으로 변환
a = 0
b = bool(a)
print(b)  # False

c = 1
d = bool(c)
print(d)  # True
빈 문자열과 None은 False 
e = ""
f = bool(e)
print(f)  # False
그 외의 값은 True
g = "Hello"
h = bool(g)
print(h)  # True
list() 문자열을 리스트로 변환
a = "hello"
b = list(a)
print(b)  # ['h', 'e', 'l', 'l', 'o']
tuple() 리스트를 튜플로 변환
c = [1, 2, 3]
d = tuple(c)
print(d)  # (1, 2, 3)
set() 리스트를 셋으로 변환 (중복 제거)
e = [1, 2, 2, 3, 4]
f = set(e)
print(f)  # {1, 2, 3, 4}

 

암시적 타입 변환

: Python이 자동으로 데이터를 변환하는 경우

# 정수와 실수의 연산에서 발생하는 암시적 변환
a = 5
b = 2.0
c = a + b
print(c)  # 7.0 (정수 5가 실수 5.0으로 암시적 변환됨)
print(type(c))  # <class 'float'>

 

리스트 

리스트(List)
리스트란? 여러 개의 항목을 순서대로 저장할 수 있는 가변 자료형
표현법 대괄호[], 쉼표(,)로 구분됨
특징 1. 순서가 있다.
2. 가변적이다.
3. 중복된 요소를 가질 수 있다.
사용 예시
종류 함수 예시
생성 리스트명 = [] fruits = ["apple", "banana", "cherry"]
요소 접근 print(fruits[0]) print(fruits[0])  # apple
요소 변경 fruits[1] fruits[1] = "blueberry"
print(fruits)  # ['apple', 'blueberry', 'cherry']
요소 추가 .append() fruits.append("orange")
print(fruits)  # ['apple', 'blueberry', 'cherry', 'orange']
요소 제거 .remove() fruits.remove("blueberry")
print(fruits)  # ['apple', 'cherry', 'orange']
길이 확인 len() print(len(fruits))  # 3

 

튜플

튜플(Tuple)
튜플이란? 리스트와 유사하지만, 한 번 생성되면 수정할 수 없는 불변 자료형
표현법 소괄호(), 쉼표(,)로 구분됨
특징 1. 순서가 있다
2. 불변적이다
3. 중복된 요소를 가질 수 있다
사용 예시
종류 함수 예시
생성 튜플명 = () coordinates = (10, 20)
요소 접근 print(coordinates[0]) # 튜플 요소 접근
print(coordinates[0])  # 10
요소 변경 변경 불가 # 튜플은 불변이므로 요소 변경 불가
# coordinates[0] = 15  # 오류 발생
길이 확인 len() # 튜플 길이 확인
print(len(coordinates))  # 2
하나의 요소를 가진 튜플 생성 튜플명 = (5,) # 하나의 요소를 가진 튜플을 생성할 때는 뒤에 쉼표를 붙임
single_element_tuple = (5,)
print(type(single_element_tuple))  # <class 'tuple'>

 

딕셔너리

딕셔너리(Dictionary)
딕셔너리란? 키-값 쌍{Key-Value Pair}으로 데이터를 저장하는 자료형
표현법 중괄호{}, 각 키와 값은 콜론(:)으로 구분됨
특징 1. 순서가 없으며(버전 3.7부터는 삽입 순서 유지), 키를 통해 접근함
2. 가변적
3. 키는 유일해야 하며, 값은 중복될 수 있음
사용 예시
종류 함수 예시
생성 딕셔너리명 = {} # 딕셔너리 생성
person = {
    "name": "Alice",
    "age": 25,
    "city": "New York"
}
값 접근 print(딕셔너리명[key]) print(person["name"])  # Alice
값 변경 딕셔너리명[key] = value person["age"] = 26
print(person)  
# {'name': 'Alice', 'age': 26, 'city': 'New York'}
값 새로 추가하기 딕셔너리명[key] = value person["email"] = "alice@example.com"
print(person)
# {
'name': 'Alice',
'age': 26,
'city': 'New York',
'email': 'alice@example.com'
}
키-값 쌍 제거 del 딕셔너리명[key] del person["city"]
print(person)
# {
'name': 'Alice',
'age': 26,
'email': 'alice@example.com'
}
키 목록 접근 person.keys() print(person.keys())  
# dict_keys(['name', 'age', 'email'])
값 목록 접근 person.values() print(person.values())
# dict_values(['Alice', 26, 'alice@example.com'])

 

셋(Set)
셋이란? 중복되지 않는 요소들의 집합을 나타냄
표현법 중괄호{}, 순서가 없음, 중복을 허용하지 않음
특징 1. 순서가 없음
2. 가변적
3. 중복된 요소를 가질 수 없음
사용 예시
종류 함수 예시
생성 셋명 = {} numbers = {1, 2, 3, 4, 4, 5}  # 중복된 요소는 하나로 처리됨
print(numbers)  # {1, 2, 3, 4, 5}
요소 추가 .add() numbers.add(6)
print(numbers)  # {1, 2, 3, 4, 5, 6}
요소 제거 .remove() numbers.remove(3)
print(numbers)  # {1, 2, 4, 5, 6}
셋의 집합 연산
생성 셋명 = {} odd = {1, 3, 5, 7}
even = {2, 4, 6, 8}
합집합 .union() union_set = odd.union(even)
print(union_set)  # {1, 2, 3, 4, 5, 6, 7, 8}
교집합 .intersection() intersection_set = numbers.intersection(odd)
print(intersection_set)  # {1, 5}
데이터 타입
종류 설명
숫자형 10은 숫자
문자형 "Hello"는 문자열(문자 데이터)
불리언 True는 불리언(논리 데이터)

 

숫자형
종류 함수 예시
정수형 int() 10, =5, 0
실수형 float() 3.14, 0.001, 2.0
복소수형(complex)   1 + 2j, 3 - 4j

 

문자형
종류 표현법 예시
기본형 작은 따옴표(''), 큰 따옴표("") name = "Alice"
greeting = 'Hello, World!'
여러 줄 문자열 삼중 따옴표(''', """) message = """안녕하세요!
여러 줄의 문자열을 이렇게 작성할 수 있습니다."""
문자열 연결 + full_name = "Alice" + " " + "Smith"  # Alice Smith
문자열 반복 * repeated_greeting = 
"Hello! " * 3    # Hello! Hello! Hello!
문자열 인덱싱 print(text[숫자]) text = "Python"
print(text[0])   # 'P'
문자열 슬라이싱 print(text[시작:끝] text = "Python"
print(text[1:4]) # 'yth'

 

불리언
종류 표현법 예시
기본형 True, False 두 가지만 가질 수 있음 is_sunny = True
is_raining = False
불리언 연산 and, or, not a = True
b = False

print(a and b)  # False
print(a or b)   # True
print(not a)    # False
비교 연산의 결과 ==, !=, >, < x = 10
y = 20

print(x == y)  # False
print(x < y)   # True

 

산술 연산자
연산자 기능 예시 결과
+ 덧셈 3 + 2 5
- 뺄셈 5 -2 3
* 곱셈 4 *3 12
/ 나눗셈 10 / 2 5.0
% 나머지 7 % 3 1
** 거듭제곱 2 ** 3 8
// 7 // 3 2

 

비교 연산자
연산자 기능 에시 결과
== 값이 같음 3 == 3 True
!= 값이 다름 3 != 4 True
> 5 > 2 True
< 작음 2 < 5 True
>= 크거나 같음 5 >= 5 True
<= 작거나 같음 4 <= 5 True

 

논리 연산자
연산자 기능 예시 결과
and 두 조건이 모두 참일 때 True and False False
or 두 조건 중 하나라도 참일 때 True of False True
not 논리값을 반대로 뒤집음 not True False
a = True
b = False

print(a and b)  # False
print(a or b)   # True
print(not a)    # False

 

대입 연산자
연산자 기능 예시 결과
= 값 할당 x = 5 x = 5
+= 더한 후 할당 x += 3 x = x + 3
-= 뺀 후 할당 x -= 3 x = x - 3
*= 곱한 후 할당 x *= 2 x = x * 2
/= 나눈 후 할당 x /= 2 x = x / 2
%= 나머지를 구한 후 할당 x %= 2 x = x % 2
**= 거듭제곱 후 할당 x **= 2 x = x ** 2
//= 몫을 구한 후 할당 x //= 2 x = x // 2
x = 10
x += 5  # x = x + 5
print(x)  # 15

x *= 2  # x = x * 2
print(x)  # 30

x //= 3  # x = x // 3
print(x)  # 10

 

비트 연산자
( 이진수(bit) 수준에서 연산을 수행함 )
연산자 기능 예시 결과
& 비트 AND 5 & 3 1
| 비트 OR 5 | 3 7
^ 비트 XOR 5 ^ 3 6
~ 비트 NOT (보수) ~5 -6
<< 왼쪽 시프트 (Left Shift) 5 << 1 10
>> 오른쪽 시프트 (Right Shift) 5 >> 1 2
a = 5  # 이진수로 101
b = 3  # 이진수로 011

print(a & b)  # 1 (이진수 001)
print(a | b)  # 7 (이진수 111)
print(a ^ b)  # 6 (이진수 110)
print(~a)     # -6 (이진수 보수)
print(a << 1) # 10 (이진수 1010)
print(a >> 1) # 2 (이진수 010)

 

멤버십 연산자
[특정 값이 시퀀스(문자열, 리스트, 튜플 등)에 속해 있는지 확인]
연산자 기능 예시 결과
in 시퀀스에 값이 포함되어 있는지 확인 "a" in "apple" True
not in 시퀀스에 값이 포함되어 있지 않은지 확인 "b" not in "apple" True

 

식별 연산자
(두 변수가 동일한 객체를 가리키는지 확인)
연산자 기능 예시 결과
is 두 변수가 동일 객체인지 확인 a is b True or False
is not 두 변수가 동일하지 않은 객체인지 확인 a is not b True of False
x = ["apple", "banana"]
y = ["apple", "banana"]
z = x

print(x is z)       # True (z는 x를 가리킴)
print(x is y)       # False (x와 y는 내용은 같지만, 다른 객체)
print(x == y)       # True (x와 y는 값이 동일함)
print(x is not y)   # True (x와 y는 다른 객체)

 

 

❤️‍🔥 WIL : Weekly I Learned

금주를 다시 살펴보며 저의 상태를 확인해 볼까요~?


2024년 12월 2일 월요일 🙄

Class와 __init__()을 공부한 날이었어요

객체를 생성해야 하는 Class였는데 🤔

그냥 스쳐 지나가는 개념이었어요

자주 쓰는 거라고 하셨지만,, 네,,

제 머리가 거부하네요 🤯

알아야 하는 게 많은데, 한꺼번에 파도처럼 밀려오니까

그대로 휩쓸렸습니다 키키

계속 반복해서 해봐야겠어요

화가 잔뜩 난다죠. 🙄 


2024년 12월 3일 화요일 🫠

씁쓸한 맛을 남긴 Pivot_table 공부한 날이었습니다

이야,,

이야,,

이야,,

과제 너무 어려운 거 아니에요??

병아리한테 수탉처럼 짖어보란 느낌이었어요 🤔

제가 자신 있게 아는 코드와 함수가 적어서 이런 느낌을 받았겠죠 😝

어쨌거나 튜터 님을 괴롭히며 해냈기에, 뿌듯했지만

머리에 남는 건 없어서 공허했습니다 🫠


2024년 12월 4일 수요일 😤

오늘은 Ch.1의 과제를 해설하는 강의가 있었어요

히히 튜터님을 갈고닦아서 같이 만든 하나의 작품이(ㅋㅋ)

동기분들 앞에 전시돼서 뭔가 기분이 묘했어요

스스로에 대해서 좀, 부끄럽단 생각이 들더라구요

해낸 결과물이긴 하지만, 설명하라고 하거나 다시 해보라 하면

못한다는 걸 스스로 알고 있었거든요 ㅠ

너무 조급하게 마음을 잡고 있는 거 같긴 해요

여유를 가져봐야겠어요 😤


2024년 12월 5일 목요일 🤪

오늘부터 머신러닝을 배워야 했어요

아직 파이썬도 잘 모르거든요?

게다가 라이브러리까지 다루는 진도까지 나가버렸는데

아무것도 따라가지 못했어요

스트레스 너무 심해요,, 하,,

잘하고 싶은 욕심은 많은데 

해야 할 게 쏟아지듯이 들어오니까, 

너무 조바심 들어서 힘드네요

게다가 머신러닝까지 해야 하다니요 ㅋㅋㅋ,,

에라 모르겠다~ 🤪

주말에 천천히 파이썬부터 시작해서 해야겠어요


2024년 12월 6일 금요일 😞

오늘 하루종일 집중하지 못했습니다. 예.

이리될 줄 알았어요

차라리 처음부터 차근차근해야 할 리스트를 짜서

일정을 짜볼 걸 그랬어요

머릿속이 구름으로 가득 차서 멍~만 때리네요

구름 다 걷어내야겠어요

내일 주말입니다! 오로지 저를 위한 시간이에요

내일 틀을 가다듬어볼 거예요

다음 주엔 코드카타가 생겨서 매일 1문제씩 들어야 하거든요

기운을 내봅시다,, 차라리 문제 풀며 머리 굴릴 때가 더 행복해요

이번주도 수고 많으셨습니다

파이팅!


12시간 공부 시간을 넘어서도 같이 문제 풀어주신 ㅂㅁㄴ님 넘 감사해요

덕분에 기운차리고 흥미를 다시 느끼게 되었습니다

격려 해주시고 자존감 챙겨주는 말로 저를 채워주셔서 감사해요 😽

열심히 해보겠습니다 (◍⁃͈ᴗ•͈) 

인사말

안녕하세요!

오늘도 머신러닝에 대해서 공부를 해볼 겁니다

처음 접하는 생소한 내용이라서 너무 막막하네요

오늘은 오전에 Zoom으로 하는 Git 수업이 있어서

오전 시간 동안은 Zoom 수업을 들어주었습니다

오후부터 본격적으로 머신러닝을 공부하였어요!

오늘의 일정
오전 (09 : 00 ~ 13 : 00) 10:00 ~ 12:15 Zoom 수업_Git
오후 (14 : 00 ~ 18 : 00) 14:00 ~ 15:30 전처리 공부
16:00 ~ 16:30 튜터님과 면담
16:30 ~ 16:40 매니저님의 순회 방문
16:40 ~ 17:40 전처리 공부한 내용을 TIL 작성
저녁 (19 : 30 ~ 21 : 00) 19:30 ~ 20:00 팀 회의
20:00 ~ 20:55 백준 문제 풀이
새로 알게 된 코드
a, b = map(int,input().split()) input()을 문자열로 받게 되었을 때 하나하나씩 매핑해주고, 공백을 기준으로 나눔

 

오전( 09 : 00 ~ 13 : 00 )

깃허브 설치됐는지 확인하기

처음에는 Markdown에 대해서 배웠어요

재밌더라구요 히히

Markdown.md
0.00MB

# 오늘 배운 markup
## 1. 두 번째 제목
## 2. 종류
2.1 제목
2.1.1 #

2.2 리스트
2.2.1 그냥 숫자 입력하면 들여쓰기가 돼요

2.3 코드블럭
2.3.1
```python
def hi():
    print(Hello)
```
2.3.2 인라인 코드 블럭
문장 적어주시고 `print()`를 백틱으로 감싸주시면 돼요

2.4 링크
2.4.1 [str],(url) <- 콤마는 빼주세요
2.4.2 예시
[네이버](http:/www.naver.com)
이렇게 적으면 뜨죠?

2.5 이미지 넣기
2.5.1 ![str](이미지 파일 이름)
![고양이](imgs/고양이.jpeg)

2.6 텍스트 강조
2.6.1 볼드체
2.6.1.1 **로 글자를 감싸주세요

2.6.2 기울림체
2.6.2.1 *로 글자를 감싸주세요

2.6.3 취소선
2.6.3.1 ~~로 글자를 감싸주세요

2.7 인용문
2.7.1 다음 줄에 >로 시작해주세요
> 그렇게 하시면 이렇게 됩니다

진짜 진짜 재밌었어요

문서 작성하고 편집하고 만드는 거 좋아하거든요

이번에 Markdown으로 배울 수 있어서 좋았습니다 😋


오후 ( 14 : 00 ~ 18 : 00 )

데이터 전처리에 대해서 이론 공부를 진행시켰어요!


요약

  1. 데이터 전처리란?
    1. 데이터 전처리 개념
    2. 특징
    3. 전처리 방법
    4. 전처리의 효과
    5. 주요 기법

1. 데이터 전처리란?

  1. 개념 : 데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정
  2. 특징
    1. 원시 데이터(raw data)는 종종 불완전하거나, 노이즈가 많거나, 형식이 일관되지 않아 직접 모델링에 사용하기 어려움
    2. 데이터 전처리는 데이터의 품질을 높이고, 분석 결과의 신뢰성을 확보하기 위한 필수적인 과정임
  3. 전처리 방법
결측값 처리 데이터셋에서 누락된 값을 처리하는 작업
이상값 처리 데이터셋에서 비정상적으로 큰 값이나 작은 값을 처리하는 작업
중복 데이터 제거 동일한 데이터가 여러 번 나타나는 경우, 이를 제거
데이터 타입 전환 데이터의 타입을 적절하게 변환하는 작업
데이터 정규화 데이터이 범위를 일정하게 맞추는 작업
인코딩 범주형 데이터를 수치형 데이터로 변환
샘플링 데이터셋의 크기를 줄이거나 늘리는 작업
특징 선택 및 추출 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출

 

4. 데이터 전처리의 효과

데이터 품질 향상 결측치, 이상치, 중복 데이터를 처리하여 데이터의 품질을 높임
모델 성능 향상 적절한 스케일링, 정규화를 통해 모델의 학습 속도와 성능을 개선함
데이터 일관성 확보 서로 다른 출처에서 수집된 데이터를 일관된 형식으로 변환함
특성 공학
(Feature Engineering)
유용한 특성(Feature)을 생성하거나 변환하여 모델의 예측 능력을 향상시킴

 

5. 데이터 전처리의 주요 기법

  1. 결측치 처리(Handling Missing Data) : 데이터셋에 누락된 값을 처리함
    • 삭제: 결측치가 있는 행이나 열을 삭제.
      • 결측치가 적을 때 유용하지만, 데이터 손실이 발생할 수 있음
    • 대체: 평균, 중앙값, 최빈값 등으로 결측치를 대체
    • 예측: 다른 특성을 사용하여 결측치를 예측하고 채움
  2. 이상치 처리(Handling Outliers) : 데이터에서 비정상적으로 크거나 작은 값을 처리
    • 제거: 이상치를 데이터셋에서 제거
    • 변환: 이상치를 다른 값으로 변환
      • 예: 상한선이나 하한선으로 대체
    • IQR 방법: IQR(Interquartile Range)을 사용하여 이상치를 탐지하고 처리
  3. 데이터 정규화 (Normalization) : 정규화는 데이터를 일정한 범위로 스케일링하는 과정
    • 일반적으로 [0, 1] 범위로 변환함
      • Min-Max 정규화: 최소값을 0, 최댓값을 1로 변환
  4. 데이터 표준화 (Standardization) : 표준화는 데이터를 평균 0, 분산 1로 변환하는 과정
  5. 특성 공학 (Feature Engineering) : 데이터로부터 새로운 유용한 특성을 생성하는 과정
    • 특성 생성: 기존 데이터를 기반으로 새로운 특성을 생성함
      • 예: 날짜 데이터를 사용하여 요일 특성 생성
    • 특성 선택: 모델 성능에 중요한 특성을 선택하고, 중요하지 않은 특성을 제거함
  6. 데이터 인코딩 (Data Encoding) :  비정형 데이터를 모델이 이해할 수 있는 형태로 변환함
    1. 레이블 인코딩 (Label Encoding): 범주형 데이터를 숫자로 변환
    2. 원-핫 인코딩 (One-Hot Encoding): 범주형 데이터를 이진 벡터로 변환
  7. 데이터 분할 (Data Splitting) : 데이터를 학습용(train), 검증용(validation), 테스트용(test)으로 분할. 이를 통해 모델의 일반화 성능을 평가할 수 있음
    1. 학습 데이터 (Training Data): 모델 학습에 사용되는 데이터
    2. 검증 데이터 (Validation Data): 모델 튜닝 및 성능 검증에 사용되는 데이터
    3. 테스트 데이터 (Test Data): 최종 모델 평가에 사용되는 데이터

저녁 ( 19 : 30 ~ 21 : 00 )

히히 오후 회의를 끝내고 20시부터 백준코딩 해봤어요

프로그래머스로만 풀어보다가 백준코딩으로 풀어보니까

구조가 달라서 애먹었어요 😂

문제 푸니까 바로 깃허브로 잘 들어와서 다행이에요 히히

문제 1. Hello World! 를 출력하시오.

print("Hello World!")

문제 푸니까 너무 재밌어요 ㅋㅋㅋㅋ

차라리 문제를 풀어야 공부에 집중을 하게 되네요

히히

 

문제 2. A+B

# 1트
a, b = int(input())
print(a+b)

처음에는 이렇게 입력하였어요

안 되더라구요

# 2트
a, b = int(input().split())
print(a+b)

이렇게 하니까 TypeError가 나네요,, 🤦🏻‍♀️ 

# 3트
a, b = input().split()
a = int(a)
b = int(b)
print(a+b)

TypeError가 났다고 하길래

input으로는 잘 받았다는 거니까

형변환을 밑에서 따로 해줬어요 🤔

끼야아아아아아ㅏㅇㄱ

꺄아아아아아아악

맞췄어요 ㅠㅠㅠㅠㅠㅠㅠ 흐엉

순간적으로 스트레스받았어요 허엉ㅇ

백지에다가 창의력을 발휘하려 하니까

뇌정지 쩔게 오네요,, 하하하하,,

 

a, b = map(int,input().split())
print(a+b)

언니한테 물어봤을 때

이렇게 쉽게 푸시더라구요,, 🙄

제가 map함수를 이해 못 한 거 같아요

split()도 들었던 거 같은데 제 머리엔 없던 함수였어요

하하하

오늘도 배워갑니다.. 👍🏻

 

문제 3. A-B

# 1트
a, b = input().split()
a = int(a)
b = int(b)
print(a-b)

앞선 문제와 비슷한 구조이기 때문에

똑같은 방식으로 코드를 짜주었습니다 😊

히히 넘 뿌듯하네요 🤭 


마무리

하하,,

머신러닝과 친해질 수 있을지 잘 모르겠어요

확실히 주말에 더 공부해야겠습니다

다른 추가 자료들 찾아보며 공부해야겠습니다

한 주 동안 수고 많으셨어요!

편안함 밤 되시길 바랍니다

주말에 푹 쉬시고 다음 주도 달려봅시다!

파이팅!! 🔥

감사합니다

인사말

안녕하세요~!

오늘부터 팀이 바뀌어서 5조에서 10조로 가게 되었어요!

새로운 분들과 대화를 나누고, 팀 노션도 같이 짜고

공부 내용도 새롭게 하나 더 추가 되었어요!

새로운 규칙들과 새로운분들과 함께 하니 낯설지만

환경을 주기적으로 바꿔주는 것도 좋은 거 같아요!

잘해봅시당! >_<

오늘의 일정
오전 11:00 ~ 17:00 -> 머신러닝 강의 2개 듣기
오후 17:00 ~ 18:00 과제1 해설 Zoom 수업 듣기
저녁 19 : 30 ~ 21 : 30 캐글 설치 및 설정하기

요약

  1. 머신러닝이란?
    1. 전통적 프로그래밍 vs 머신러닝 
    2. 머신러닝 구성 요소들(데이터셋, feature, 레이블, 훈련, 테스트)
    3. 머신러닝의 학습
      1. 학습 과정
      2. 학습 방법
  2. 과적합이란?
    1. 과적합 방지
  3. 머신러닝 실습

 


오전 ~ 오후( 11 : 00 ~ 17 : 00)

Zoom 수업이 있기 전까진 새로 받은 머신러닝에 대해 공부하려 합니다!

아직 SQL, 파이썬, 파이썬 라이브러리에 대해 제대로 습득을 하지 못 했는데

또 새로운 걸 머리에 집어 넣으려 하니까

스트레스가 폭발을 하려 하네요 🤯

 

음,, 어떻게 해야 할까요 🤔

뭐 어쩌겠어요 일단 해야죠

안 하면 안 할수록 미룬 일만 많아지니까,,

할 일을 미룬다는 게 더 싫어요 저는,,

 

1. 머신러닝이란?

  1. 개념
    1. 컴퓨터가 명시적으로 프로그래밍 되지 않아도 데이터를 통해 학습하고, 예측할 수 있도록 하는 기능
    2. 대량의 데이터를 알고리즘에 입력하여 학습과정을 통해 모델을 생성하고 예측을 수행함

1.1 전통 프로그래밍 vs 머신러닝

전통적인 프로그래밍 머신러닝
규칙과 논리를 프로그래머가 직접 정의 데이터를 이용해 패턴과 규칙을 스스로 학습
명시적 명령과 조건문을 통해 문제 해결 예측 모델을 통해 새로운 데이터에 대한 결과 도출
  프로그램이 아닌 모델이 중심

 

1.2 머신러닝의 구성 요소

  1. 데이터셋
    1. 개념 : 모델을 학습시키기 위한 데이터 모음
    2. 구성
      • 입력 데이터 : 모델이 학습할 수 있느 정보
      • 출력 데이터 : 모델이 예측해야 하는 목표값
  2. 특징(Feature)
    1. 개념 : 데이터셋에서 모델이 학습할 수 있는 개별 속성
    2. 예시 : 주택가격 예측할 시, 주택의 크기, 위치 , 방의 개수 등이 feature에 해당됨.
  3. 레이블(Label) = 정답
    1. 개념 : 예측하고자 하는 목표 변수
    2. 특징
      • 지도학습 모델에서는 레이블이 있는 데이터셋을 이용하여 모델을 학습시킴
      • 어떤 주제냐에 따라 레이블(정답)이 달라짐
  4. 모델
    1. 개념
      • 데이터의 특징으로부터 레이블(정답)을 예측할 수 있는 지식을 학습할 수 있는 프로그램/함수
    2. 특징 
      • 입력 데이터와 출력 데이터 간의 관계를 학습하여 새로운 데이터에 대한 예측 수행
  5. 학습
    1. 개념
      • 모델이 데이터를 통해서 패턴을 인식하고 이를 기반으로 예측을 수행할 수 있도록 함수 내의 가중치를 조정하는 과정
    2. test : 학습이 끝난 후 새로운 data, 실제 data로 모델의 성능을 검사함

 

1.3 머신러닝의 학습

<학습 과정>

 

  1. 데이터 수집 : 모델을 학습시키기 위한 필요 데이터 수집 단계
    • 예) 과일 가게에 가서 과일 사진 찍어오기
  2. 데이터 전처리 : 결측값 처리, 이상치 제거, 정규화 등등의 작업 단계
    • 예) 사과랑 오렌지만 비교할 건데, 바나나 사진이 있는 경우 이를 삭제
  3. Feature 선택 : 중요 feature을 선택하고 불필요한 피쳐를 제거하여 학습 효율을 높이는 단계
    • 예) 과일 모양, 가격, 무게, 구매한 갯수 중 불필요한 "구매한 갯수"는 제거
  4. 모델 선택 : 문제에 적합한 머신러닝 알고리즘을 선택
    • 예) 사과와 오렌지의 비교에 가장 적절한 머신러닝(모델)을 선출
  5. 모델 훈련 : 트레이닝 데이터셋을 사용하여 모델을 학습시킴
    • 예) 사과는 빨간색이야, 오렌지는 주황색이야 / 사과가 오렌지보다 크기가 더 작아
  6. 모델 평가 : 테스트 데이터셋을 사용하여 모델 성능을 평가
    • 예) 사과와 오렌지를 한 공간에 잔뜩 놓고 비교하는지 확인하기
  7. 모델 배포 : 학습된 모델을 실제 환경에 배포하여 예측 수행

 

<학습 방법>

  1. 지도학습(Supervised Learning)
    1. 개념 : 레이블(정답)이 있는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 회귀(Regression) : 연속적인 값을 예측하는 문제
        1. 예) 주택 가격 예측, 주식 가격 예측
      2. 분류(Classification) : 이산적인 값을 예측하는 문제
        1. 예) 이메일 스팸 필터링, 이미지 분류
  2. 비지도 학습(Unsupervised Learning)
    1. 개념 : 레이블(정답)이 없는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 군집화(Clustering) : 데이터를 유사한 그룹으로 묶는 문제
        1. 예) 고객 세분화, 이미지 세그멘테이션
      2. 차원 축소(Dimensionaliy Reduction) : 고차원 데이터를 저차원으로 변환
        1. 예) PCA, t-SNE
  3. 앙상블 학습(Ensemble Learning)
    1. 개념 : 여러 개의 머신러닝 모델을 결합하여 더 나은 성능을 얻는 방법
      1. 배깅(Bagging) : 여러 모델을 독립적으로 학습시키고, 예측을 평균내거나 다수결 투표로 최종 예측
        1. 예) 랜덤 포레스트
      2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습시키고, 이전 모델의 오차를 보완하여 최종 예측을 수행
        1. 예) 그래디언트 부스팅, XGboost
      3. 스태킹(Stacking)
        1. 개념 : 여러 모델을 학습시키고 예측 결과를 새로운 데이터로 사용하여 메타 모델을 학습

2. 과적합이란?

과적합(Overfitting)

  1. 개념
    1. 모델이 훈련 데이터에 지나치게 적응하여 새로운 데이터에 대한 일반화 기능이 떨어지는 현상
    2. 모델이 너무 복잡하여 훈련 데이터의 노이즈까지 학습해버리는 경우에 발생함

 

2.1 과적합 방지

  1. 더 많은 데이터를 수집
  2. 교차 검증(Cross-validation) 사용
  3. 정규화(Regularization) 기법 적용
  4. 간단한 모델 사용

🔥머신러닝에서는 "절대로 좋다"라는 개념은 없음! 상황에 따라, 주제에 따라, 성능에 따라 다 다름🔥


저녁 ( 20 : 00 ~ 21 : 00)

19시 30분부터 20시까지 팀별 회의를 마치고 실습을 진행해보았습니다

1주차 강의를 2번 돌려봤더니 생각보다 시간이 많이 걸리네요 😭

처음 접하는 개념이라서 한 바퀴는 그냥 들어보고

두 바퀴로는 강의 자료랑 함께 보고

세 바퀴로는 공책에 적어가며 했더니 시간이 생각보다 오래 걸려요

주말에도 공부 해야겠어요,,

파이썬 라이브러리도 제대로 이해 못 했거든요,,

 

3. 머신러닝 실습

2주차 강의에서는 데이터셋을 다운받는 내용이 나왔어요

그 중에서 kaggle을 다운받는 절차를 따라 해봅시당

공식 홈페이지에 들어가셔서

회원가입부터 해주세요,,

그래야 프로필이 쓰고 settings에 들어갈 수 있더라구요

프로필 눌러주시면

Settings가 있습니다

스크롤하셔서 내려주시면

API가 있어요

거기에서 Create New Token을 눌러주시면

파일이 하나 다운로드 되실 겁니다

이걸 또 눌러주시면

이렇게 key를 받으실 거예요! 파일 저장해주세요!

~/.kaggle/kaggle.json

 

이렇게 되면 명령어를 통해서 다운로드 받을 수 있게 된대요!

kaggle datasets download -d <dataset-identifier>

 

음,, 저는 프로그래머가 아니기 때문에

그냥 공식 홈페이지에서 다운받았습니다.

https://www.kaggle.com/c/titanic/data

 

Titanic | Novice

Kaggle profile for Titanic

www.kaggle.com

이제서야 진행할 수 있겠네요!

휴우 😤

 


마무리

오늘은 뭔가 한 게 없는 날인 거 같아요

근데 벌써 내일이 금요일이래요! 🫠

내일 다시 머신러닝 2주차부터 해서 실습 하려구요,,

ㅠㅠ

화이팅입니다 ㅠㅠ

 

감사합니다!

 

 

 

인사말

오늘 과제 제출을 하고!

내일부터 새로운 강의를 받은 후 공부하기 때문에

이전에 받았던 파이썬 라이브러리 강의를 완강하려 합니다!

그러고 저녁(20 : 00 ~ 21 : 00)엔 Zoom으로 회의가 있고

새로운 과제를 받는다고 하네요 😅

파이팅,,,,


오전 ( 09 : 00 ~ 13 : 00 )

Git Hub에 폴더 생성 완료해주고! ( ~10 : 00)

파이썬 라이브러리 강의를 시청하였습니다.


<10 : 00 ~ 20 : 00>

요약

  1. Pandas 개념
  2. 시리즈(Series)
  3. 데이터프레임(DataFrame)
  4. 시리즈(Series) vs 데이터프레임(DataFrame)
  5. Numpy(Numerical Python)
    1. 연산
    2. 기타 메서드
    3. 배열의 인덱싱, 슬라이싱

<Pandas>_데이터 처리가 필요한 모든 분야에서 사용됨

  1. 개념 
    1. 파이썬에서 데이터를 쉽게 다룰 수 있게 해주는 데이터 분석 라이브러리
    2. 데이터를 표(테이블) 형식으로 다루기 쉽게 만들어 줌
    3. 다양한 데이터 조각 기능을 제공함
    4. 데이터를 정리하고 분석하는 데 아주 강력한 도구임.
      1. 데이터 프레임(DataFrame)
        1. 판다스의 핵심 자료 구조임
        2. 엑셀의 스프레드 시트처럼 행(row)과 열(column)로 구성된 2차원 데이터 구조
      2. 시리즈(Series)
        1. 단일 열을 나타내는 1차원 데이터 구조
        2. 데이터 프레임의 구성 요소 중 하나
  2. 특징 : 판다스를 이용하면 데이터의 필터링, 정렬, 집계 등 다양한 작업을 간단한 코드로 수행 가능함

 

<시리즈 (Series) >

시리즈(Series)

  1. 개념 : 인덱스(Index)와 데이터 값(Value)이 쌍으로 구성됨
  2. 특징
    1. 인덱스를 통해 데이터에 빠르게 접근할 수 있음
    2. 데이터 타입은 자동으로 설정되지만, 원하는 타입으로 변경 가능함
  3. 예시
import pandas as pd

# 시리즈 생성
s = pd.Series([10, 20, 30, 40], index = ['a', 'b', 'c', 'd'])
print(s)
a    10
b    20
c    30
d    40
dtype: int64

pd.Series()를 쓸 때 시리즈는 꼭 대문자로 작성해주셔야 오류가 안 나요!!

 

<데이터프레임(DateFrame)>

데이터프레임(DateFrame)

  1. 개념
    1. 2차원의 표 형태 데이터 구조
    2. 엑셀의 전체 시트(Sheet)처럼 생김
    3. 여러 개의 시리즈(Series)가 모여서 만들어짐.
  2. 특징
    1. 행(row)과 열(column)로 구성된 2차원
    2. 다양한 데이터 타입을 각 열에 담을 수 있음
    3. 인덱스와 컬럼명을 사용해 특정 데이터에 접근할 수 있음
  3. 예시
# 예시: 데이터 프레임 생성
data = {
    '이름': ['철수', '영희', '민수'],
    '나이': [25, 30, 35],
    '직업': ['학생', '회사원', '프리랜서']
}

df = pd.DataFrame(data)
print(df)
   이름  나이     직업
0  철수  25     학생
1  영희  30    회사원
2  민수  35  프리랜서
# data의 컬럼만 뽑아보기

data["이름"]

결괏값
['철수', '영희', '민수']
# 인덱스와 칼럼명을 사용해 특정 데이터에 접근하기

파일명["이름"][0]

결괏값
'철수'

 

<시리즈(Series) vs 데이터프레임(DataFrame)>

차이점 공통점
시리즈는 1차원, 데이터프레임은 2차원 둘 다 인덱스를 가지고 있어서 데이터에 쉽게 접근 가능
시리즈는 하나의 데이터 타입,
데이터 프레임은 다양한 데이터 타입 기입 가능 (리스트, 튜플, 딕셔너리 등등)
판다스에서 가장 기본적인 구조

 

<Numpy(Numerical Python)>

  1. 개념
    1. 과학 계산에 강력한 성능을 제공하는 파이썬 라이브러리
    2. 다차원 배열 객체인 ndarray와 배열을 효율적으로 처리할 수 있는 다양한 함수들을 제공함.
    3. 데이터 분석, 머신러닝, 딥러닝에서 기초가 되는 라이브러리
    4. 판다스와 함께 자주 사용됨
  2. 특징
    1. 고속 배열 연산 : C언어로 작성돼 있어, 파이썬 기본 리스트 보다 훨씬 빠른 연산 가능
    2. 다양한 수학 함수 : 배열 간의 덧셈, 뺄셈, 곱셈 등의 연산을 효율적으로 수행
    3. 선형대수, 통계함수 : 복잡한 수학 계산도 간단히 처리 가능
  3. 예시
  • 배열(ndarray) 생성하기
import numpy as np

# 리스트로 생성하기
## 1차원 배열 생성

arr = np.array([1, 2, 3, 4, 5])
print(arr)
[1 2 3 4 5]

 

  •  배열의 연산
arr = np.array([1, 2, 3, 4, 5])

# 각 원소에 2를 더하기
arr_add = arr + 2
print(arr_add)

# 각 원소에 2를 곱하기
arr_mul = arr * 2
print(arr_mul)
[3 4 5 6 7]
[ 2  4  6  8 10]

 

  • 배열간의 연산
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 배열 간 덧셈
arr_sum = arr1 + arr2
print(arr_sum)

# 배열 간 곱셈
arr_mul = arr1 * arr2
print(arr_mul)
[5 7 9]
[ 4 10 18]

 

  • 배열의 기타 메서드
메서드 설명 메서드 코드 결괏값
0으로 채워진 배열 np.zeros() zero_arr = np.zeros((2, 3)) # 2x3 크기의 배열
print(zero_arr)
[[0. 0. 0.]
 [0. 0. 0.]]
1로 채워진 배열  np.ones() ones_arr = np.ones((3, 2))  # 3x2 크기의 배열
print(ones_arr)
[[1. 1.]
 [1. 1.]
 [1. 1.]]
특정 값으로 채워진 배열  np.full() # 2x2 크기의 7로 채워진 배열
full_arr = np.full((2, 2), 7)
print(full_arr)
[[7 7]
 [7 7]]
연속적인 값으로 채워진 배열 np.arange() # 0부터 9까지의 연속된 값
range_arr = np.arange(10)
print(range_arr)
[0 1 2 3 4 5 6 7 8 9]
메소드 설명 메소드
array 속 개수 확인 arr.size()
array의 데이터 타입 확인 arr.dtype()
array의 용량 차지 확인 arr.nbytes()
array의 차원 확인 arr.ndim()
array를 1차원으로 입력하기 arr.ravel()
array의 차원은 바꾸지 않고 평탄화 arr.flatten()
array의 sum arr.sum(), arr.sum(axis = 1), arr.sum(axisi = 0)
*axis = 1는 열, axis = 0은 행

 

  • 배열의 인덱싱과 슬라이딩

인덱싱(Indexing)

: 배열의 특정 위치의 값을 가져옴

arr = np.array([10, 20, 30, 40, 50])

# 첫 번째 원소
print(arr[0])

# 마지막 원소
print(arr[-1])
10
50

 

슬라이싱(Slicing)

: 배열의 일부분을 잘라내는 방법

arr = np.array([10, 20, 30, 40, 50])

# 두 번째부터 네 번째 원소까지
sliced_arr = arr[1:4]
print(sliced_arr)
[20 30 40]

 

다차원 배열의 인덱싱과 슬라이싱

: 콤마(,)로 구분해서 함

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 특정 원소 접근 (2행 3열)
print(arr2d[1, 2])

# 슬라이싱 (2행까지, 2열까지)
sliced_arr2d = arr2d[:2, :2]
print(sliced_arr2d)
6
[[1 2]
 [4 5]]

저녁 ( 20 : 00 ~ 21 : 00)

오늘까지 과제였던 걸 리뷰도 하면서,

새로운 과제를 설명 듣는 Zoom 수업에 참여하였습니다


마무리

벌써 내일이면 새로운 강의를 받게 되고

새로운 과제도 시작하고

새로운 팀에서 새로운 팀원과 공부하게 되네요 😢

시간 너무 빠른 거 같아서 서운할 정도입니다

그래도

모든 분들을 한 번씩은 뵈어야

나중에 팀 프로젝트를 진행할 때 유리할 거 같아요

좋게 생각하려구요,, 아쉽지만 🥲

 

공부할 게 많이 쌓여있어서

스트레스도 쌓이고 있지만

그래도 해야 하는 걸 어떡합니까!

오늘도 수고 많으셨어요 ㅎㅎ

감사합니다.

인사말

오늘은 1시간 일찍 와서 시작했답니당!

그리고

어제부터 Pandas를 통해서 문제를 풀어보았어요!

갈수록 많은 것들을 머리에 집어넣고

복잡한 코드를 짜게 되니까 머리가 아프네요 😖

그래도 해야죠 어떡하겠어요 🤪

오늘도 파이팅입니다!

감기 조심하세요 ㅠㅠ


오전 ( 08 : 00 ~ 13 : 00)

<pivot_table 생성 후 Index 변경하기>

import pandas as pd

# 데이터프레임 예시
data = {
    '날짜': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    '제품': ['A', 'B', 'A', 'B'],
    '판매': [10, 20, 30, 40]
}

df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot = df.pivot_table(
    values='판매',         # 집계할 값
    index='날짜',          # 행으로 사용할 컬럼
    columns='제품',        # 열로 사용할 컬럼
    aggfunc='sum',         # 집계 함수 (기본값: 'mean' 또는 'sum' 가능)
    fill_value=0           # 결측값을 채울 값
)

print(pivot)

pivot_table을 gpt한테 물어보았어요

피벗 테이블이 저렇게 구성되었군요..!

집계할 때 쓰나봐요!

3번 문제 내용

드래그를 옆으로 하면

소계(검거), 소계(발생)을 하라고 돼 있더라구요

그래서

pivot_table = df.pivot_table(
    values = '' # 집계할 값
    index = '구 별' # 행으로 사용할 컬럼
    columns = '' # 열로 사용할 컬럼
    aggfunc = 'sum' # 집계 함수
    fill_value = '집계할 값 없음'
)

여기까지는 작성하였으나,,

values에 넣을 값이랑 columns에 넣을 값을 모르겠더라구요

pvt = pd.pivot_table(
    dataframe,
    index = '구 별', # 행으로 사용할 컬럼
    aggfunc = 'sum', # 집계 함수
    fill_value = 0, # 결측 값
    #margins = True # 총 계가 생김
)
print(pvt)

그래서

넣지 않았습니다! 🤣

어차피 다 할 건데 굳이 계산하려는 값이랑

열을 정할 필요가 없더라구요

그래서 깔끔하게 없애버리고!

불러올 값들이 있는 파일명인 "dataframe"을 기입해주었습니다

그리고!

굳이 해보았는데 margins = True으로 기입해주면 총 계가 생기게 됩니다

margins는 기본값이 False기 때문에 True로 바꿔줘야 합니다!

 

<Quiz 4_drop 써서 삭제하기>

데이터프레임명.drop([row])

퀴즈 자체에서 코드를 주셨길래

그대로 따라써보았습니다

근데 "구 없음"만 지워야 하잖아요? 🧐

KeyError: "['구 없음'] not found in axis"

엥??

dataframe에는 "구 없음"이 존재한단 말이죠? 🤨

그래서 dataframe 파일 말고,

pivot_table을 끌고 와보았습니다

pvt2 = pvt2.drop(['구 없음'])

원래의 pvt 파일에는 "광진구"와 "구로구" 사이에 "구 없음"이 존재했거든요!

짜잔 - ✨

없애버렸습니다 😎

pivot_table을 기준으로 해야 하는 이유가

저희가 강남서 -> 강남구 이런 식으로 바꾸었잖아요

그 파일을 기준으로 pivot_table을 만들었구요

그래서 데이터의 이 되는 게 "pivot_table"이 된다고 생각합니다!

그래서 pivot_table로 drop 해주니까 변경되네요! 🤪

 

<Quiz 5_각 범죄별 검거율 구하기 및 Columns 추가>

일단은 컬럼을 먼저 추가 해주었어요

검거율은 평균값을 구하고 나눠야 한다 생각을 해서

간단한 컬럼부터 추가해주었습니다

# 컬럼 추가하기
파일명['추가할 컬럼명'] = 시리즈 객체
ex) data['강도 검거율'] = data['강도(발생)'] / dataf['강도(검거)'] * 100
# Quiz 5_컬럼 추가하기 및 검거율 계산
## 리스트로 시도해보려 했으나, 실패

add_value_name = ['강간 검거율','강도 검거율','살인 검거율', '절도 검거율','폭력 검거율', '검거율']
add_value_happen = []
pvt2['강도 검거율'] = pvt2['강도(발생)'] / pvt2['강도(검거)'] * 100
print(pvt2['강도 검거율'])

생성해야 할 컬럼들이 많이 때문에

한 번에 처리하고 싶어서 이리저리 머리를 굴려봤습니다

처음에는 리스트로 시도해보았는데

생각해보니까,, 데이터 파일 자체가 큰 애였다면

리스트로 하기엔 무리라고 생각이 들더라구요 🫠

다른 방법을 생각해보았습니다,,

data['강도 검거율'] = data['강도(발생)'] / data['강도(검거)'] * 100

어쨌거나 이 문장이 반복되어야 한단 말이죠? 🧐

반복..?

반복..!?!?

for문을 가져와보았습니다

for crime in ['강간', '강도', '살인', '절도', '폭력']:

일단 이렇게 만들고 밑에는

for crime in ['강간', '강도', '살인', '절도', '폭력']:
        pvt2[f'{crime} 검거율'] = pvt2[f'{crime}(발생)'] / pvt2[f'{crime}(검거)'] * 100

이렇게 해서 넣어주었어요 (파일 이름 : pvt2)

crime이라는 이름의 리스트를 만들어주었구요

f{} 이렇게 써서 편하게 쓸 수 있어요!

이걸 포매팅이라고 하거든요! 종류가 다양한데,

포매팅은 내일 공부할 겁니다 😎

결과물 아 ~ 주 예뻐서 맘에 들어용 ㅎㅎㅎ


오후 ( 14 : 00 ~ 18 : 00 )

정신없이 찾아보고 물어보고

팀원 분들이랑 소통도 하니까 점심 시간이더라구요

그래서 후다닥 밥 챙겨 먹고,

매니저 님께 git hub 꿀팁 얘기도 듣고 난 후에

남은 문제들 풀어보았습니다!

 

<Quiz 6_필요없는 column을 del을 써서 삭제하기>

삭제 해봅시다 😎

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[f'{delete_columns}']
print(pvt2)

앞서 컬럼을 한 번에 생성했듯이

삭제도 같은 방식으로 해보았어요

되네요..?

됐다고 나오니까 오히려 불안했어요,, 👀

그래서 확인 받으러 튜터 님께 갔죠?

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[delete_columns]
print(pvt2)

수정된 코드입니다

뭐가 달라졌냐구요?

포매팅 중에서 f{}가 있잖아요

그게 print할 때만 쓰는 거라고 하셨어요

그래서 포매팅에 대해서 공부하였습니다..

(내일 제대로 각 잡고 하려고 했는데,, 쩝 👀)

 

< f{}(f-string) 쓰는 방식>

When :  Python에서 문자열을 조작할 때

How : print(f"{}")

Ways :

1. 기본형

  • f를 문자열 앞에 추가
  • {} 안에 변수를 넣으면, 해당 변수의 값이 문자열 안에 삽입됨
# 예시
name = "민경"
score = 95
print(f"이름: {name}, 점수: {score}")
이름: 민경, 점수: 95

 

2. 표현식

x = 5
y = 10
print(f"두 수의 합은 {x + y}입니다.")
두 수의 합은 15입니다.

 

3. 숫자 포매팅 (소수점)

pi = 3.141592653589793
print(f"원주율은 {pi:.2f}입니다.")  # 소수점 2자리로 출력
원주율은 3.14입니다.

.2f는 f는 실수를 의미, 2는 소수점 2자리까지를 의미

 

4. 중첩 변수

name = "Alice"
greeting = f"Hello, {name}!"
message = f"Message: {greeting}"
print(message)

greeting에서 {name}에 들어가는 값을 쓸 거고

message에서 {greeting}의 문장을 쓸 구조로 돼 있어요

Message: Hello, Alice!

 

5. 함수 호출

word = "Python"
print(f"단어 '{word}'의 길이는 {len(word)}입니다.")

함수 len()이 들어가서도 작동이 가능해요!

대신 {len()} 구조로 들어가야 하네요!

단어 'Python'의 길이는 6입니다.

 

6. 할당하기 (=)

x = "배"
y = "민경"
print(f"{x=}, {y=}")  # 변수명과 값 출력

오,, ㅋㅋㅋㅋㅋㅋㅋㅋ

재밌네요! 되게 유용하네요

다양하게 많이 쓰이니까, 신기한 거 같아요

한 번 더 파일명을 언급하지 않아도 된다는 것도 너무 좋구요!

 

<Quiz 7_ rename>

드디어 마지막 문제입니다!!

rename을 해볼게요!

이번에도 for문으로 해결할 겁니다!

# Quiz 7. rename하기

# 1트
for rename_columns in {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'}:
     if rename_columns in pvt2:
         pvt2.rename(rename_columns)

될 줄 알았는데 안 되더라구요

# 오류 내용
TypeError: Index(...) must be called with a collection of some kind, '강간(발생)' was passed

타입이 다르대요,,

고칠 줄 아는 정도였으면 좋았을 텐데

도저히 뭐라는지 모르겠어서 그냥 .rename()으로 했습니다.

# 2트
rename_columns_on = pvt2.rename(columns = {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'})

print(rename_columns_on)

이게 의문점이 들었던게요

중괄호{}면 딕셔너리란 말이죠?

근데 왜 key가 먼저 들어가지 않고, value가 먼저 들어갔는지

그게 너무 궁금했습니다

일단 결과는 잘 나왔어요 👀

제가 생각하기에는 이미 기존 파일에

key 문자 그대로 잘 들어가 있어서 바로 value로 들어간 거 같아요 🧐

그리고 문제의 문장을 보면 "컬럼명을 rename으로 변경하세요" 잖아요

그래서 앞전에 피벗 테이블을 작성했듯이

'columns도 그대로 집어넣으면 "열로 사용한 컬럼"의 뜻이니까 그대로 되겠지 뭐'

라는 생각으로 그대로 rename 뒤에 집어넣었거든요

근데,, 되네요? 🙄

알다가도 모르겠어요

일단 저렇게도 넣을 수 있구나를 깨달았습니당!


저녁 ( 18 : 00 ~ 19 : 00)

숙제도 이제 다 끝냈기 때문에!

git에 대해서 공부 좀 하고, 생성 하려구요!

git을 어떻게 해야 하는지 전혀 몰라서

팀원 분들이랑 얘기 나눴습니다!

homework라는 공간 속에

숙제한 파일을 넣을 거라서, 팀원 분께 물어봤어요

이렇게 파일을 업로드 하였는데,

폴더를 생성해서 하는 게 어떻냐고 하시더라구요

저기 파란색 칸 보이시나용?

저기에서 슬래시(/)를 쓰면 폴더로 생성되고, 그 뒤로는 파일명으로 되나봐요!

이렇게 생성하면 됩니다!

제출은 내일 하려구요 ㅎㅎ


마무리

오늘 뭔가 휘익 휘익 지나간 거 같아요

이리 치이고 저리 치여서 체력 소모가 컸지만

팀원 분들과 막힐 때마다 소통하고,

튜터 님께 가서 힌트 얻고, 다시 해보고

이걸 반복하니까 너무 재밌었습니당 ㅎㅎㅎ

 

아직 안개가 사라지지 않아서 앞이 잘 보이진 않지만

희미하게라도 앞이 보이는 느낌이에요!

적극적으로 배움을 이어 나가려 해서 제가 너무 좋아요 🥰

주변 분들도 너무 좋구요 히히 🥰

 

한 번 할 거면 제대로 해야죠 히히

내일도 파이팅!!

감사합니당

인사말

안녕하세요~

벌써 교육 2주차가 됐네요!

12월 4일까지 과제 제출이 있기 때문에

그 날까지는 과제 중심으로 공부를 하게 될 것 같습니다!

그래도 프로그래머스의 0단계 문제를 꼬박 꼬박 3개씩 풀어보려구요!


오전 ( 09 : ~ 13 : 00)

오늘은 과제 2를 공부했답니다!

class를 써서 인적사항을 정리하는 내용인데요

과제의 조건을 저렇습니다.

그래서 class에 대해 제대로 강의 영상을 보지 않고,

알고 있는 내용만으로 작성을 해보았어요

 

<11월 29일 금요일_1트>

11월 29일 금요일에 새벽까지 남아서 해봤거든요?

해야 할 일은 빨리빨리 끝내고 싶어해서, 해보았는데

감이 전혀 잡히지 않아서,, 그냥 자러 갔습니다

 

<12월 1일 일요일_2트>

될리가 없죠 🧐

다시 보고, 계속 뭐가 문제인지 생각해보니까

"객체"를 설정하지 않았더라구요

그리고 첫 번째의 def __init__(): 에서

한 번에 다 적어내려도 됐던 거였어요..!

유튜브 강의를 보고 깨달았답니다 ㅠㅠ

 

<12월 1일 일요일_3트>

객체를 이런식으로 설정하는 게 아닌가봐요? 🧐

영상을 좀 더 찾아보고 해봐야겠어요

 

<12월 2일 월요일_4트>

# 4트
class person:
    def __init__(self):
        self.name = input("이름을 입력해주세요 -> ")
        self.gender = input("성별을 입력해주세요 -> ")
        self.age = int(input("나이를 입력해주세요 -> "))
        
    def display(self):
        print("이름 : {}, 성별 : {}, 나이 : {}".format(self.name, self.gender, self.age))
        
# 객체 생성(=person_info)
person_info = person()
person_info.display()

display() = show()랑 같더라구요

처음엔 show()로 입력하였는데, 과제 내용을 보니까

display()로 하라고 해서 수정하였습니다!

그리고

이해하지 못 했던 "객체 생성"도 영상을 여러개 보다 보니,

이해하게 되었습니다. 😝

# 4트
    def display(self):
        print("이름 : {}, 성별 : {}, 나이 : {}".format(self.name, self.gender, self.age))
print("이름 : ", self.name, "성별 : ", self.gender, "나이 : ", self.age)

그리고 .format() 함수를 이렇게도 표현할 수 있다는 걸

튜터 님한테 상담했을 시, 알게 되었습니다

근데 .format()을 쓰는 게 더 편한 거 같아요 😋

추가 정보를 알려주셔서 감사합니다 히히 😉

 

11 : 00 ~ 13 : 00

이제 마지막 과제인 "Python 라이브러리로 데이터 분석하기" 만 남았는데요

아직 라이브러리에 대한 개념이 없어서,

스파르타 내일배움캠프에서 지급해준

파이썬 라이브러리 강의를 시청해주었습니다 😋

그래서 pandas라는 것도 깔아보았습니다

Terminal에서 설치를 설정하면 되더라구요..

강의로 설치를 따라가려 했는데

강의 보면서 하니까 전혀 모르겠어서 튜터 님께 찾아가서 해결했습니다 😢

이제 import pandas 해서 쓰면 된다고 하셨어요!

 

과제 3번은 시작부터 어렵네요 ㅠㅠ

 

<가상환경 활성화 하기>

1. conda 공식 사이트에 들어가서 설치를 합니다.

2. 가상환경 이름을 만들어주고 생성 해줄게요

<VSCode> Terminal에서 써주시면 됩니다!

 conda create -n <환경이름> python=3.10
Ex) conda create -n myenv python=3.10

3. 가상환경을 활성화 해줄 겁니다

conda activate <환경이름>
conda activate myenv

4. 주피터도 설치해주고요

conda install jupyter

5. ipykernel도 설치해줍니다.

conda install ipykernel

6. 가상환경을 jupyter 커널로 추가해줍니다.

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"

7. 주피터 노트북을 실행해서 브라우저에서 잘 되고 있는지 확인 해줄게요

jupyter notebook

8. 버전 확인 및 파일이 잘 열어지는지 확인해볼게요

import numpy as np
import pandas as pd

print("NumPy version:", np.__version__)
print("Pandas version:", pd.__version__)
df = pd.read_excel('crime.xlsx')
df

9. 다시 VSCode로 돌아가서 ipynb 파일을 찾아갑니다.

그러면 오른쪽에 Select Kernel이 떠요 그걸 누르시면

이렇게 이전까지 생성 중이었던 가상환경이 보이실 겁니다.

그걸 눌러주세요.

최종 화면이 이렇게 된다면

준비 끝입니다 😭

팀원 언니의 도움이 없었더라면 여기까지 절대 못 왔어요 ㅠㅠ

설정을 끝내고 나니까, 꼬질꼬질한 시골 강아지가 된 기분이네요

하필 오늘 입은 옷도 누렁이 옷이었구요 🤣


오후 ( 14 : 00 ~ 18 : 00)

15시까지가 되어서야 가상환경 설정을 끝냈습니다 ⛳️

이제  과제 3번을 해보아야겠지요,,

과제 3번에는 총 7가지의 Quiz가 있습니다

첫 번째 퀴즈

import pandas as pd
df = pd.DataFrame('crime.xlsx')
print(df)

왜 안 되는지 모르겠어요

뭐가 문제였을까요 🧐

 

그래서 다시 인강으로 돌아가보았습니다

데이터 프레임이라는 내용이 있거든요

import pandas as pd

# 예시: 시리즈 생성
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

약간 딕셔너리와 비슷한 구조더라구요

Series는 리스트 느낌이었고, index는 딕셔너리 느낌이었습니다.

 

15 : 30 ~ 16 : 30

<Data Frame 생성하기>

import pandas as pd
dataframe = pd.read_excel('crime.xlsx')
dataframe

일단 첫 번째 퀴즈는 완수를 해냈어요!

강의를 듣다가도 첫 번째 퀴즈를 풀어낼 수 있을 거 같아서

계속 고민을 해봤더니 처음에 테스트겸 파일 불러왔잖아요?

그거를 그냥 data frame으로 적었습니다

여기서 추출이 돠냐 안 되냐는 다음 문제를 풀어보면서 확인하려구요 😤

 

16: 35 ~ 18 : 00

<유튜브에 있는 파이썬 판다스 강의 시청>

기본 개념이 있어야 할 수 있겠다 싶어서

기초부터 차근차근 쌓아가려구요,,

오늘의 문제 풀이는 여기까지만 하고

개념 정리 후에 저녁 시간엔 프로그래머스 문제 풀 겁니다 😉


저녁 ( 19 : 00 ~ 21 : 00)

벌써 오늘의 저녁 시간이 됐네요

과제 3번의 2번 문제를 풀어보았습니다!

문제에서 힌트를 얻어서 만들어보았어요

dataframe['구 별'] = dataframe['관서명'].map(df).fillna('구 없음')

dataframe

새롭게 만들 열을 dataframe['컬럼 명']으로 추가해주고

그와 참조할 열 이름을 dataframe['관서명'].map(df)으로 해준 뒤!!

여기서!! 처음 알은 함수!! .fillna()는 fill in처럼 ~을 채우다 라는 의미라고 하더라구요

그래서 .fillna()만 적으면 NaN으로 출력되는 걸 확인했습니다!

그래서 원하는 값으로 .fillna('구 없음')을 적어주어 문제 해결했습니다!


마무리

하,, 머리 너무 아픕니다

판다스가 확실히 데이터가 없고, 배운 적도 없어서 감이 안 잡혀요

하나 푸니까 다음 문제에 또 막히고

하나 푸니까 다음 문제에 또 막혀요

알아낼 때 재밌긴 한데!

과정이,, ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

과정 덕분에 해결이 되었을 때만큼 짜릿한 게 없는 거 같아요 😁

내일은 더 파이팅 해야겠어요

4일에 제출해야 하기 때문에 담은 4문제 풀어야 해요!!

파이팅!! 🔥

+ Recent posts