- FACTS :
- ✅ 오전 SQL, 알고리즘 코드카타 각1문
- [ ] 오후 QCC 3회차 복습
- ✅ 오후 파이썬 라이브세션 복습
- ✅ 오후 머신러닝 VOD강의 1주차 1-10까지
- FEELINGS : 머신러닝 기초 강의를 듣기 시작했는데 너무 어려워서 기본서 책을 질러버렸다. 도저히 듣는것만으로는 머릿속에 안들어와서 필기를 하면서 들으려고 강의자료도 프린트하기 시작했다.
지난 주 TIL을 쓰면서 단계별 task를 짜는 것을 잘 못하는 것 같아서 구체적인 해결방안을 생각해봤다. 다른 분들을 보니 markdown이나 주석을 적극적으로 활용해서 단계를 나누는듯 했다. 나도 해봐야지.
⭐️코드 짤 때 mark down이나 #(주석)을 이용해서 문제의 조건을 모두 만족했는지 확인하기!
나중에 실무에서는 여러사람이 내 코드를 같이 보는 일이 많이 생길 수 있으니까 지금부터 습관을 잘 들여야겠다.
- FINDINGS :
입력값이 빈칸이면 조건문을 실행할 필요가 없으므로 맨 앞으로 빼서 걸러주기
dropna()의 기본값.dropna(axis = 'index', how = 'any')과 사용법, 특징
- inplace = True : dropna가 적용된 DataFrame 자체에 dropna를 적용(인덱스는 업데이트되지 않음! reset_index로 인덱스를 다시 설정해야 함)
- inplace = False : dropna가 적용된 DataFrame는 그대로 두고 dropna를 적용한 DataFrame을 return(default)
알고리즘 코드카타
#중간 과정
def solution(s):
answer = ''
for i in range(len(s)):
if (i+1) % 2 != 0:
answer += s[i].upper()
else:
answer += s[i].lower()
return answer
solution("try hello world")
#출력: 'TrY HeLlO WoRlD'
-> 정확성: 18.8
오답 이유: 문장 중간에 띄어쓰기가 여러번 들어갔을 경우
기댓값 : 'TrY_ _ _ _HeLlO_ _ _ _ _WoRlD'
출력값 : 'TrY_ _ _ _ hElLo_ _ _ _ _wOrLd'
-> 따라서 띄어쓰기까지 계산해야함.
def solution(s):
answer = ''
for j in s.split(' '):
for i in range(len(j)):
if (i+1) % 2 != 0:
answer += j[i].upper()
else:
answer += j[i].lower()
answer += ' '
return answer[:-1]
solution("try hello world")
#출력 : 'TrY HeLlO WoRlD '
#다른 사람 풀이
def toWeirdCase(s):
return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))
SQL 코드카타
82. Replace Employee ID With The Unique Identifier
SELECT eu.unique_id, e.name
FROM Employees e
LEFT JOIN EmployeeUNI eu ON e.id = eu.id
파이썬 베이직 라이브 세션 복습
실습 문제1)
#제출 코드
def word_frequency(text):
word = text.split()
word_count = {}
for i in word:
if i in word_count:
word_count[i] += 1
elif text == "":
return "문자열이 비어 있습니다."
else:
word_count[i] = 1
return word_count
# 테스트 1
text1 = "hello world hello python world"
print(word_frequency(text1))
# 테스트 2
text2 = ""
print(word_frequency(text2))
-> 테스트 2를 만족시키지 못했다.
애초에 입력값이 빈칸이면 조건문을 실행할 필요가 없으므로 맨 앞으로 빼서 걸러주기
#정답 코드
def word_frequency(text):
if not text:
return ("입력한 문자열이 없습니다.")
words = text.split()
frequency = {}
for word in words:
if word in frequency:
frequency[word] += 1
else:
frequency[word] = 1
return frequency
# 테스트 1
text1 = "hello world hello python world"
print(word_frequency(text1))
# 출력: {'hello': 2, 'world': 2, 'python': 1}
# 테스트 2
text2 = ""
print(word_frequency(text2))
# 출력: 입력한 문자열이 없습니다.
실습 문제2)
-> 시간이 부족해서 손도 못댔다.. 라이브세션이 끝나고 풀어봤는데 라이브 세션에서 이미 해설을 한번 들어서 그런지 마지막 출력 부분 빼고 쓸 수 있었다.
라이브세션을 안들었으면 헷갈렸을 부분들:
✔️penguins.dropna(how = “any”, inplace = True) - inplace = True 옵션 사용
- inplace = True : dropna가 적용된 DataFrame 자체에 dropna를 적용
- inplace = False : dropna가 적용된 DataFrame는 그대로 두고 dropna를 적용한 DataFrame을 return(default)
dropna에서 inplace=True로 설정하면 결측치가 있는 행이 사라지지만, 인덱스는 업데이트되지 않는다.
따라서 reset_index로 인덱스를 다시 부여해야 한다.
(참고 :https://m.blog.naver.com/j7youngh/222845624447)
✔️penguins[["species", "sex", "bill_length_mm", "bill_depth_mm"]] - 이중리스트
✔️result[cond1 | cond2] - result[조건] 형태
#나의 풀이
import seaborn as sns
# Penguins 데이터셋 로드
penguins = sns.load_dataset("penguins")
#조건1 : Null값 제거
penguins = penguins.dropna()
#조건2 : 특정 컬럼 추출
result = penguins[['species', 'sex', 'bill_length_mm', 'bill_depth_mm']]
#조건3 : species가 "Adelie"이면서 bill_length_mm이 40 이상이거나, species가 "Chinstrap"이면서 bill_length_mm이 30 이하인 데이터
cond1 = (result['species'] == 'Adelie') & (result['bill_length_mm'] >= 40)
cond2 = (result['species'] == 'Chinstrap') & (result['bill_length_mm'] <= 30)
final_result = result[cond1|cond2]
print(final_result.shape)
#정답 코드
import seaborn as sns
# Penguins 데이터셋 로드
penguins = sns.load_dataset("penguins")
display(penguins.isna().sum())
penguins.dropna(how = 'any', inplace = True)
# 특정 열 선택
result = penguins[["species", "sex", "bill_length_mm", "bill_depth_mm"]]
# 'species'가 'Adelie' 면서 'bill_length_mm'이 40 이상이거나
# 'species'가 'Chinstrap'면서 'bill_length_mm'이 30 이하인 데이터 선택
cond1 = (result["species"] == "Adelie") & (result["bill_length_mm"] >= 40)
cond2 = (result["species"] == "Chinstrap") & (result["bill_length_mm"] <= 30)
final_result = result[cond1 | cond2]
print(final_result.shape) # (50, 4)
조건1부분의 null값 제거에서 나는 penguins = penguins.dropna() 으로 썼는데 정답과 결과값이 같아서 여쭤보니
dropna()의 기본 값이 .dropna(axis = 'index', how = 'any')라서 그렇다고 한다.
'내일배움캠프 > TIL' 카테고리의 다른 글
[TIL]250115_통계학 개인과제 문제4,5 (0) | 2025.01.15 |
---|---|
[TIL]250114_SQL,알고리즘 코드카타, 통계학 개인과제1~3번 (0) | 2025.01.14 |
[TIL]250110_코드카타, 파이썬 개인과제 6번 (0) | 2025.01.10 |
[TIL]250109_코드카타, 파이썬 베이직반 2회차, 통계학 3회차 (0) | 2025.01.09 |
[TIL]250108코드카타, 파이썬 개인과제 문제5(Numpy) (0) | 2025.01.08 |