인사말
안녕하세요~!
월요일이 다시 찾아왔습니다 😂
이번 주부터는 확연한 겨울 같은 날씨가 되었네요
감기 조심하세요!
비염도 조심하시구요 ㅠㅠ
저는 아침부터 비염 때문에 목도 따갑고 코도 간지러워서
마스크 끼고 활동했답니다 😢
오늘의 일정 | |
오전(09:00 ~ 13:00) | 09:00 ~ 09:50 코드카타 2문제 풀기 10:00 ~ 10:15 팀 회의 및 코드카타 리뷰 10:15 ~13:00 머신러닝 강의 듣기 및 실습 |
오후(14:00 ~ 18:00) | 14:00 ~ 16:00 통계학 Zoom 실시간 강의 듣기 16:00 ~ 18:00 머신러닝 강의 듣기 및 실습 |
저녁(19:30 ~ 21:00) | 19:30 ~ 20:00 팀 저녁 회의 20:00 ~ 20:50 프로그래머스 4일차 문제 풀기 20:50 ~ 21:00 TIL 제출 |
요약
- 코드 카타 문제 풀이
- 두 수의 차
- 두 수의 곱
- 머신러닝 결측값 처리
- 제거
- 대체
- 프로그래머스 4문제 풀이
오전 (09:00 ~ 13:00)
오늘부터 시작되는 코드 카타!
문제를 두 개 풀어주고 팀원분들과 대화 및 회의를 진행 해주었어요
<두 수의 차>
def solution(num1, num2):
answer = num1 - num2
return answer
두 수의 차를 구해야 하니까
연산 함수인 - 를 써서 해결해주었답니다 😋
<두 수의 곱>
def solution(num1, num2):
answer = num1 * num2
return answer
이번에는 곱을 구하는 거기 때문에
곱하기의 연산 기호인 *를 써서 풀어주었습니다 😋
하루를 문제로 시작하니까 재밌고 좋네요 ㅎㅎ
(10:15 ~ 13:00) 머신러닝 강의 듣기 및 실습
결측값 처리하는 실습을 해보았어요
이제 시작점인 건데, 결괏값이 잘 나와가지고
기분이 좋았던 거 있죠? 😋
사람은, 단순해야 행복함을 잘 느낄 수 있게 되는 거 같아요
<결측값 처리 방법 3가지>
종류 | 설명 | 함수 | 함수 설명 |
제거 |
결측값이 포함된 행 또는 열을 제거 | df.dropped_rows = df.dropna() |
결측값이 포함된 행 제거 |
df_dropped_cols = df.dropna(axis=1) |
결측값이 포함된 열 제거 | ||
대체 |
결측값을 특정 값으로 대체 | df_filled = df.fillna(0) |
결측값을 0으로 대체 |
df_filled_mean = df.fillna(df.mean()) |
결측값을 각 열의 평균값으로 대체 | ||
df_filled_median = df.fillna(df.median()) |
결측값을 각 열의 중간값으로 대체 | ||
df_filled_mode = df.fillna(df.mode().iloc[0]) |
결측값을 각 열의 최빈값으로 대체 | ||
예측 |
머신러닝 모델을 사용하여 결측값을 예측 | from sklearn.linear_model import LinearRegression |
|
df_with_na = df[df['column_with_na'].isnull()] df_without_na = df[df['column_with_na'].notnull()] |
결측값이 있는 열과 없는 열 분리 | ||
model = LinearRegression() model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na']) |
회귀 모델 학습 | ||
predicted_values = model.predict(df_with_na[['feature1', 'feature2']]) |
결측값 예측 | ||
df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values |
예측된 값으로 결측값 대체 |
세 가지 다 해보았어요
<결측값 제거>
data = {
'A': [1, 2, np.nan, 4, 5, 100, 1, 2, 2, 4, '1', '2', '3', '4', '5', 10, 20, 30, 40, 50],
'B': [5, np.nan, np.nan, 8, 10, 60, 10, 20, 20, 40, '10', '20', '30', '40', '50', 5, 4, 3, 2, 1],
'C': [1, 2, 3, 4, 5, 5, 100, 200, 200, 400, 100, 200, 300, 400, 500, 1, 2, 3, 4, 5],
'D': [np.nan, np.nan, 3, 3, 3, 5, 5, 5, 5, 5, np.nan, np.nan, np.nan, np.nan, np.nan, 2, 3, 4, 5, 6],
'category_column': [np.nan]*10 + ['A', 'B', 'A', 'C', 'B'] + [np.nan]*5,
'value_column': [np.nan]*10 + [1, 2, 3, 4, 5] + [np.nan]*5,
'target': [np.nan]*15 + [1, 0, 1, 0, 1]
}
일단 데이터 값이 되어줄 정보를 넣어주고요
# Nan이 있는 행 삭제하기
df_dropped_rows = df.dropna()
print(df_dropped_rows)
Columns: [A, B, C, D, category_column, value_column, target]
Index: []
결괏값이 이렇게 나왔어요
행을 하나하나 다시 봤는데
NaN가 없는 행이 없더라구요,,?
강의 내용과는 다른 결괏값이 나와서 동공지진 일어났어요
이어서 열도 삭제 해보았습니다
# Nan이 있는 열 삭제하기
df_dropped_cols = df.dropna(axis=1)
print(df_dropped_cols)
여기서 열은 .dropna(axis=1)만 추가해주면 되더라구요
결괏값도 잘 나온 걸 확인할 수 있었습니다 ㅎㅎ
제거 방법을 쓰면 데이터가 많이 날아가기 때문에
제거를 쓰기 보다는 대체랑 예측을 많이 쓴다고 합니다!
확실히 제거를 해버리니까
그 많던 자료가 싹- 사라졌네요 ㄷㄷ
<결측값 대체>
# 결측값을 0으로 대체
df_filled = df.fillna(0)
# 결측값을 각 열의 평균값으로 대체
df_filled_mean = df.fillna(df.mean())
# 결측값을 각 열의 중간값으로 대체
df_filled_median = df.fillna(df.median())
# 결측값을 각 열의 최빈값으로 대체
df_filled_mode = df.fillna(df.mode().iloc[0])
대체를 하는 경우는 데이터 타입을 봐야 된대요
평균값으로 대체할 거라고 해도
문자열로 돼 있으면 오류가 발생한다고 하더라구요
데이터 파일의 타입을 확인한 후에
적절한 코드로 대체 해주시면 되겠습니다!
이번 자료에는 0으로 채워주었습니다 히히
<결측값 예측>
from sklearn.linear_model import LinearRegression
# 결측값이 있는 열과 없는 열 분리
df_with_na = df[df['column_with_na'].isnull()]
df_without_na = df[df['column_with_na'].notnull()]
# 회귀 모델 학습
model = LinearRegression()
model.fit(df_without_na[['feature1', 'feature2']], df_without_na['column_with_na'])
# 결측값 예측
predicted_values = model.predict(df_with_na[['feature1', 'feature2']])
# 예측된 값으로 결측값 대체
df.loc[df['column_with_na'].isnull(), 'column_with_na'] = predicted_values
예측은 머신러닝으로 하는 거래서
실습으론 해보지 않았습니다
강사님도 하시는 걸 안 보여주셔서
저도 못해봤어요,, 😢
오후 ( 14 : 00 ~ 18 : 00 )
(14:00 ~ 16:00)
14시부터 16시까지는 통계학 Zoom 수업을 들었어요!
오랜만에 벡터랑 함수를 들으니까 반가웠어요
저의 나이 때는 행렬이 교육과정이 변경되면서
없어진 내용이었나 봐요,, 🤔
행렬이 나오면서 신기한 느낌이었어요
그래도 듣다보니까 이해가 가긴 하더라구요!
2x3 이랑 3x3의 구조를 곱할 때는
조금 버거워지기 시작했지만
다시 집중해서 보니까 이해가 가더라구요!
아직까진 머신러닝과 무슨 연관이 있는지는 깨닫지 못했어요
내일도 통계학 특강이 있을 예정이니,
꼼꼼히 집중해서 들어보려구요!
(16:00 ~ 17:00)
내일 해볼 이상치 처리 방법을 미리 보고 있었어요
음,, 강의를 보면서 따라 해보는 건 좋지만
말 그대로 따라해본다는 느낌이고,
머리로는 들어오지 않아서 걱정이에요
그래서 미리 강의 자료를 정독해서 이해하려 하는데
머신러닝에 대해서 개념이 자리 잡혀있진 않나봐요
연관이 있으니까 배운다는 건 알겠는데
음,, 딱 거기까지밖에 생각이 미치네요
머신러닝 다시 봐야겠어요
(17:00 ~ 18:00)
다른 교육생분들과 잠시 얘기를 나눈 후
저녁 먹으러 갔습니당 😋
저녁( 19 : 30 ~ 21 : 00)
팀 저녁 회의를 해준 후에 TIL 수정을 마친 후
프로그래머스 4일차 문제를 풀어보았어용
<피자 나눠먹기 (1)>
def solution(n):
if n % 7 == 0:
answer = n/7
elif n % 7 != 0:
answer = n/7 +1
return int(answer)
주어진 피자 한 판에 7조각이 있으니까
딱맞아 떨어지면 피자 한 판이 더 필요할 일이 없죠
근데 7조각으로 나눴을 때 나머지가 생긴다면
피자 한 조각이 더 필요할 테니까
한 판 더 시켜야겠죠~?
이렇게 끝내고 나면 쉬운 거를
문제 풀 땐 왜 이리 생각 안 나고 막막한 건지!!!
너무 열받아요!!!!! 😫
<피자 나누기 (2)>
def solution(n):
pizza_piece = 6
while True:
if pizza_piece % n != 0:
pizza_piece = pizza_piece +6
elif pizza_piece % n == 0:
answer = pizza_piece/6
break
return int(answer)
이제는 피자가 6조각이구요 사람 수만 바껴요
그럼 6조각을 고정으로 사람 수에 알맞게
늘려줘야겠죠?
def solution(n):
pizza_piece = 6
그래서 피자 조각은 6개로 할당 해주구요
while True:
if pizza_piece % n != 0:
pizza_piece = pizza_piece +6
만약
피자 조각을 사람 수로 나누었을 때
딱맞아 떨어지지 않으면!?!?!?
기존에 있던 6조각에다가 한 판을 더 추가해줘야죠
피자 조각을 기준으로 삼았기 때문에 +6을 해줍니다 😎
elif pizza_piece % n == 0:
answer = pizza_piece/6
break
return int(answer)
자 이제 다른 조건도 봐야죠
이전에는 6조각으로 나누어지지 않으면이었으니까
이번엔 딱맞아 떨어지는 조건으로 주고
break를 넣어주었습니다
왜냐!?
n은 100까지라는 범위가 주어졌구요
6으로 나누었을 때 딱맞아 떨어지는 것도
100 안에서 한계가 있잖아요
게다가 while문이라서 멈추어줄 함수가 필요하답니당 😋
<피자 나누기 (3)>
def solution(slice, n):
1 < slice < 11
if n % slice != 0:
answer = 1
else:
answer = 0
return answer + n // slice
이번에는 피자를 2조각 ~ 10조각으로만 잘라준대요
그 잘리는 조각을 slice로 이름 지어줬구요
마찬가지로 사람 수는 n으로 할당되었습니다
if n % slice != 0:
answer = 1
else:
answer = 0
앞서 slice의 값은 계속 변하죠?
원하는 조각 수로 잘라준다고 했으니까요
그렇기 때문에 사람 수에다가 조각 수를 나누어줍니다
이 나눈 값에 나머지가 생긴다면
피자 수가 부족하다는 말이니까 한 판 더 추가시켜야 합니다
여기서 answer은 피자 한 판을 의미합니다
else로는 나누었을 때 0이 되는 애들은
한 판을 추가할 필요가 없으니까 answer = 0으로 둘게요
return answer + n // slice
그리고 최종적으로
n // slice 사람 수에다가 조각만큼 나누었을 때의 몫을 구해줘요
왜냐구요?
그래야 몇 판 먹었는지 알 수 있거든요 😄
거기에다가 answer 값을 더해주면
원하는 결괏값이 나온답니당
return n // slice + (1 if n % slice != 0 else 0)
구석에서 TIL 작성하면서 다시 재검토 중이었는데
다른 동기분들이 오셔서 알려주고 가셨어요 🤣
삼항 연산자로는 이렇게 코드를 완성한다고 하네요
<배열의 평균값>
def solution(numbers):
answer = sum(numbers) / len(numbers)
return answer
파이썬에는 평균을 구하는 함수가 없어서
이렇게 구해주시면 됩니다 :)
끝끝!!
캬~~~
마무리
오늘 늦게까지 했어요!! (현재시각 23:23)
오늘 해야 할 거를 내일로 미루지 않아서 기분이 좋아요 히히
한 번 미루기 시작하면 계속 밀리기 때문에!!
오늘 내로 끝내서 기분 좋습니다 아주 만족스러워요 🤑
문제 풀 수 있도록 도와주신 주변분들,,
감삼다,, (넙죽넙죽) 덕분에 살아가네요 히히
오늘 할 일 끝!!
감사합니다~ 😁
'내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 본캠프 13일차_코드 카타 3문제, git, 머신러닝 전처리, 프로그래머스 6일차 문제 (6) | 2024.12.11 |
---|---|
내일배움캠프 본캠프 12일차_코드 카타, 이상치값 처리, 통계학, 프로그래머스 4문제, 백준 3문제 (7) | 2024.12.10 |
내일배움캠프 본캠프 10일차_머신러닝 전처리 및 백준 3문제,git (0) | 2024.12.06 |
내일배움캠프 본캠프 9일차_ 머신러닝 (3) | 2024.12.05 |
내일배움캠프 본캠프 8일차_파이썬 라이브러리 공부 (1) | 2024.12.04 |