👩🏻💻 Point of Today I LEARNED
📌 SQL
● 코드카타
📌 Python
● pandas 과제 (1번~5번)
● 라이브세션 5회차 복습 (이상치 제거)
📌 아티클 미션
● 관계형 데이터베이스

우선 결측치 제거까지 복습 완료.. (제일 쉬운..)
내일 결측치 대체 + 이상치 개념 정리 하고
실습 복습까지 가보자고.
1. SQL
1-1. 코드카타 제한시간 두고 풀기
1) 코드카타 112번
https://leetcode.com/problems/count-salary-categories/description/

수평 결합은 생각도 못하고 수직 결합만 찾는 나 . . . . .
튜터님이 union 잊어버리지 말라고 하셨는데 잊어버린 나 . . .
재귀문이고 뭐고 그냥 union하셔요
- 첫 번째 오답 : groupby 후 count(1)을 했다.
- 문제 이유 : count(1)은 null 값을 무시하지 않고 센다. count(*)도 마찬가지
(이 기본적인 걸.. 핳) - 해결 : count(1) → count(a.category)
- 문제 이유 : count(1)은 null 값을 무시하지 않고 센다. count(*)도 마찬가지
with level as (
select 'Low Salary' as category
union
select 'Average Salary' as category
union
select 'High Salary' as category
)
select
l.category,
coalesce(count(1),0) as accounts_count -- ⚠️ count(1)
from level l
left join
(select
case when income > 50000 then 'High Salary'
when income >= 20000 then 'Average Salary'
else 'Low Salary'
end as category
from accounts) a
on l.category = a.category
group by l.category
2) 코드카타 115번
https://leetcode.com/problems/movie-rating/description/
- 문제 포인트
- UNION
- RANK의 order by절에서 바로 집계 함수 적용 가능 (count,avg)
(select
name as results
from
(select
u.name,
rank() over(order by count(1) desc, u.name) as rnk
from users u
join movierating r
on u.user_id = r.user_id
group by u.user_id) a
where rnk = 1)
UNION
(select title as results
from
(select
m.title,
rank() over(order by avg(r.rating) desc, m.title) as rnk
from movies m
join movierating r
on m.movie_id = r.movie_id
where r.created_at < '2020-03-01'
group by m.movie_id) b
where rnk = 1)
Q. 이렇게 하면 안되려나?
rank() over(partition by u.user_id order by count(1) desc, u.name) as rnk
rank() over(partition by m.movie_id order by avg(r.rating) desc, m.title) as rnk
A. ❌ 값이 달라진다.
이유 : 저렇게 되면 그룹 내에서의 평균을 구해버림
내가 원하는 건 전체에서의 평균임! 그래서 바깥에서 group by 로 평균 구해주고 들어가야 함.
2. Python
2-1. pandas 과제
1) 5번
어제 빡세게 복습한 내용이다!
어제와 다른 점은
- dtstart, until 값 직접 만들어줘야 함(파생값)
- Date_of_Journey 컬럼 타입이 object 임
그렇다면 처음부터 형변환 해줘야하는군. (string → datetime)
이 때 힌트로 새로운 파라미터가 주어졌다.
🔻🔻🔻🔻🔻
pd.to_datetime의 새로운 파라미터
infer_datetime_format=True/False
: datetime이 어떤 형식인지 확인하고 자동으로 형변환해주는 파라미터
: 곧 없어질 예정
Q. 근데 dayfist=True랑 infer_datetime_format=True를 같이 써야하나?
dayfirst=True 를 해주면 이미 일/월/년 형식인걸 알려준 거기 때문에 굳이 infer~ 안 써줘도 됨
반대로 dayfirst=True 없이 infer~만 단독으로 사용하면 월/일/년 형식일 때에는 제대로 된 결과가 나오지 않을 수 있음.
🔻 문제에 적용해보자.
from dateutil.rrule import rrule, WEEKLY, WE
df['Date'] = pd.to_datetime(df['Date_of_Journey'], dayfirst=True, infer_datetime_format=True)
start_date = df['Date'].min()
end_date = df['Date'].max()
weekly_rule = rrule(WEEKLY, dtstart=start_date, until=end_date, byweekday=WE)
a=[]
for i in weekly_rule:
a.append(i)
filter_wed = df[df['Date'].isin(a)]
average = filter_wed['Price'].mean()
print(average)
- 해석
- pd.to_datetime으로 1차 형변환 (string → datetime)
- infer_datetime_format으로 원하는 형식으로 바뀐 거 확인
- 생긴 게 'YYYY-MM-DD'인 것 뿐이지 'Date' 컬럼은 datetime 형식이다.
- 따라서 min, max 함수 적용 가능!
- 어차피 원하는 형식으로 바뀌어있으니까 굳이 마지막에 string 으로 다시 변환해서 형식 바꿔줄 필요 없음!
- dayfirst = true와 format 지정의 차이가 있을까?
- df['Date'] = pd.to_datetime(df['Date_of_Journey'], format='%d/%m/%Y')
- df['Date'] = pd.to_datetime(df['Date_of_Journey'], dayfirst=True)

모든 컬럼값이 / - , 등 같은 형식으로 되어있으면 format으로 명확히 지정해줘도 되는데
하나라도 다른 형식이 있으면 오류가 난다. 그러니 dayfist=True를 범용적으로 사용해주자!
2-2. 라이브세션 5회차 복습
1) 결측치 제거 방법
## 열 단위 제거
df3.dropna(axis=1) #결측치가 하나라도 있으면 그 열 전부 삭제
df3.dropna(axis=1, how='all') #전체 열이 결측값이면 그 열 전부 삭제
df3 = df3.drop('Unnamed: 4', axis=1) #'Unnamed: 4' 컬럼 삭제 <- df.isna().sum() 으로 선파악 후삭제 case
## 행 단위 제거
df3.dropna(axis=0, how='all') #전체 행이 결측값이면 그 행 전부 삭제
df3.dropna()
df3.dropna(axis=0, how='any') #결측치가 하나라도 있으면 그 행 전부 삭제
- 기타 옵션
- inplace = True/False
- True → 원본 바로 업데이트(덮어쓰기)
- False(기본값) → 원본 변경하지 않음/ 새로운 변수 필수
- inplace = True/False
3. 아티클 미션
[아티클 미션] -16 관계형 데이터베이스
양질의 데이터를 판별하는 5가지 방법 : 3 관계형 데이터베이스인가? | 요즘IT보통 빅데이터의 특성을 이야기할 때 3V라는 단어를 언급하는 경우가 많습니다. Velocity(속도), Volume(양), Variety(다양성)
rosenps3.tistory.com
'데이터 분석' 카테고리의 다른 글
| [day34] 5주차 마지막 TIL (0) | 2025.03.21 |
|---|---|
| [day32] 이상치, 결측치 / range의 step 은 0이 될 수 없다! (0) | 2025.03.19 |
| [day30] 파이썬 파이팅이다 이거야 (0) | 2025.03.17 |
| [day29] 4주차 WIL (0) | 2025.03.16 |
| [day27] 어느덧 4주차 마무리 (0) | 2025.03.14 |