오늘 한 일은,
- SQL 공부
- [코드카타] SQL 1문제 풀기 (98번)
- 파이썬 공부
- [코드카타] 알고리즘 1문제 풀기 (62번)
- [라이브 세션] 파이썬 7회차 수강하기
- 기초 프로젝트 준비
- 주어진 데이터셋 EDA하는 중
팀플: 기초 프로젝트 준비
굴리는 과정 보러가기 :
[본캠프 24일차] 부록: [chap 2] 기초 프로젝트 준비
어제부터 주제를 정해서 기초 프로젝트 과제를 해나가고 있다. 어제도 하긴 했는데, 낡고 지친 관계로 어제 TIL에 해당 내용을 적지 못했다. 비주얼 코드 스튜디오와 씨름하기만도 지치고 바빠
maandoo.tistory.com
어제에 이어 오늘도 아직 데이터를 이리저리 굴려보는 중이다. 프로젝트하면서 문제를 발굴하기 위해서 데이터를 살펴보면서 티스토리에 기록하면서 보고 있는데 내용이 길어져서 앞으로는 이런 식으로 프로젝트에 대한 내용은 부록으로 따로 글을 빼서 기록하려고 한다.
SQL 공부: [코드카타] SQL 문제 풀기 (98번)
98. (550) Game Play Analysis 4
Write a solution to report the fraction of players that logged in again on the day after the day they first logged in, rounded to 2 decimal places. In other words, you need to count the number of players that logged in for at least two consecutive days starting from their first login date, then divide that number by the total number of players.
-- 98번 문제 쿼리 적는 과정 (1)
-- 최초 로그인 날짜의 바로 로그인한 사용자 집계하기
SELECT COUNT(player_id)
FROM Activity
WHERE (player_id, event_date) IN ( -- player_id와 event_date를 한쌍으로 확인함
SELECT player_id,
ADDDATE(MIN(event_date), INTERVAL 1 DAY) -- 사용자의 최초 event_date에서 바로 그 다음날
FROM Activity
GROUP BY player_id)--날짜 계산하는 기준
우선 어떻게 하지 하면서 바라보다가 최초 로그인 날짜에 연달아 또 로그인한 사용자부터 구하기로 했다. WHERE절에 서브쿼리를 사용해 조건을 걸어준다. player_id와 event_date를 한 쌍으로 보는데, 서브쿼리 안에 있는 player_id와 계산한 일자가 일치하면 된다. 계산은 다음과 같이 한다.
- ① player_id 기준으로 MIN() 함수로 최초 로그인 일자를 구한다
- ② ①에서 구한 일자에 ADDDATE() 함수로 하루를 더해 그 다음날을 구한다
그러고서 '이제 어떡하지' 하고 멍하니 바라보다가 이 쿼리 자체를 SELECT절에 스칼라 서브쿼리로 쓸 수 있으려나 싶었다.
-- 98번 문제 쿼리 적는 과정 (2) (최종 쿼리, 정답 처리됨)
-- 최초 로그인 날짜의 바로 로그인한 사용자 집계하기
SELECT ROUND((SELECT COUNT(player_id) -- 과정 (1)의 쿼리를 서브쿼리로 묶어서 fraction의 분자로 사용
FROM Activity
WHERE (player_id, event_date) IN (
SELECT player_id,
ADDDATE(MIN(event_date), INTERVAL 1 DAY)
FROM Activity
GROUP BY player_id)) / COUNT(DISTINCT player_id), 2) fraction -- fraction의 분모로는 중복값을 제외한 player_id의 수를 COUNT() 함수로 집계
FROM Activity
근데 이게 제출하니 통과가 되다니. SELECT절이 이렇게 길어도 괜찮은가 싶기도 하고. 가독성이 최악 아닌가..? 아닌가, 그냥 낯선 건가.
과정 (1)의 쿼리를 fraction을 계산하는 데 서브쿼리로 묶어서 그대로 분자로 들어가고, 분모로는 중복값을 제외한 player_id를 집계해 전체 사용자 수를 집계했다. 그리고 이를 ROUND() 함수로 문제에서 요구하는 형태로 숫자가 조회되도록 했다.
파이썬 공부: [코드카타] 알고리즘 문제 풀기 (62번)
62. 옹알이 (2)
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
def solution(babbling):
answer = 0 # babbling에서 발음할 수 있는 단어 수를 집계할 변수
words = ['aya', 'ye', 'woo', 'ma'] # 조카가 할 수 있는 발음을 리스트에 저장
for i in babbling: # babbling에서 한 단어씩 차례대로
for j in words: # words에서 한 발음씩 차례대로
if j*2 not in i: # babbling의 단어에 같은 발음이 연달아 나오지 않는다면
i = i.replace(j, ' ') # babbling의 단어에서 그 발음을 공백으로 대체
if i.strip() == '': # 그리고 그 단어(i)에서 공백을 제거한 것이 ''과 일치하면
answer += 1 # 그 단어는 조카가 발음할 수 있는 단어
return answer
우선 발음할 수 있는 소리들을 담는 리스트를 하나 만들었다.
babbling에서 한 단어들씩 보고, 또 그 단어에 대해서 words 속 발음들을 하나씩 대조해보는데
먼저 같은 발음을 연달아 나올 때를 제외하고서 발음이 나오는 경우에는 해당 발음을 공백으로 대체했다.
그리고 공백을 제거했을 때 남아있는 문자열이 없다면 발음할 수 있는 단어라는 의미이기에 answer에 1을 더했다.
이제 다시 데이터 만지작 만지작 하러 가보기로...
'[내배캠] 데이터분석 6기 > 본캠프 기록' 카테고리의 다른 글
[본캠프 26일차] 기초 프로젝트 준비➃, SQL 코드카타, 파이썬 코드카타 (0) | 2025.03.25 |
---|---|
[본캠프 25일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비③ (0) | 2025.03.24 |
[본캠프 23일차] SQL 코드카타, 파이썬 코드카타, 기초 프로젝트 준비 (0) | 2025.03.20 |
[본캠프 22일차] SQL 코드카타, 파이썬 코드카타, 파이썬 공부 (0) | 2025.03.19 |
[본캠프 21일차] SQL 코드카타, 파이썬 코드카타, 파이썬 공부 (0) | 2025.03.19 |