안녕하세요 강사님, 강사님 강의는 다른 강사님들 강의와는 다르게 먼저 한번 전체적으로 다뤄주고나서 나중에 세세히 강의해주시는것 같습니다. 지금 장고핵심기능 리뷰를 보고 있는데, 각 섹션마다 수강생들이 어떤 부분을 염두하고 보면 좋은지를 알려주시면, 혹은 어떤 목적으로 섹션을 나눴는지를 알려주시면 제가 강의를 이해하고 앞으로 강의를 듣는데 좀더 이해가 잘 될거같습니다. 감사합니다.
섹션 11의 이미지 성능 최적화 강의에서 Next.js의 이미지 성능 최적화에 대해 설명하실 때의 강의 코드가 <Image /> 컴포넌트가 아닌 <img /> 요소인데도 이미지 성능 최적화가 잘 되는 것을 보았습니다. 그럼 굳이 <img /> 요소 대신 <Imgae /> 컴포넌트를 사용해야 하는 이유가 있나요?
3. 각 트레이너별로 그들이 포켓몬을 포획한 첫 날(catch_date)을 찾고, 그 날짜를 'DD/MM/YYYY' 형식으로 출력해주세요. 해당 문제에서 catch_date는 UTC 기준의 데이터이므로, 한국 기준으로 하려면 catch_datetime을 사용해야 한다고 하셨는데요! 테이블을 보면, TIMESTAMP 타입인 catch_datetime만 UTC 기준의 데이터인 것으로 이해했는데 DATE 타입인 catch_date가 UTC 기준의 데이터인 이유가 무엇인가요?
1 . 해당 명령어를 치려면 전역변수로 등록 하고 ui 파일 있는 위치에서 명령어를 실행하기 2 . 환경변수 등록 없이 pyside6-uic.exe 파일이있는 폴더로 터미널 경로를 이동하고 .ui 파일도 exe 폴더있는 경로로 이동시켜서 명령어 실행 위에 두가지 방법으로 했을때 .py로 컴파일이 됐었는데 pyside6-uic login.ui -o login_ ui.py 명령어 실행 할때 vscode 로 다른 방법이 있나요? 환경변수 등록을 안하고 그냥 터미널로 바로 실행하면 pyside6-uic 배치파일 에러가 떴었고 .ui 파일 있는곳에서 실행을 꼭 해야 하더라고요
--1. 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. 단, group by를 사용해서 집곟나ㅡㄴ 것이 아닌 query_logs의 데이터의 우측에 새로운 컬럼을 만들어주세요. select *, count(query_date) over(partition by user) as total_query_cnt from advanced.query_logs order by 1, 3 --2. 주차별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후, 실행한 수를 활용해 랭킹을 구해주세요. 단, 랭킹이 1등인 사람만 결과가 보이게 해주세요 with query_cnt_by_team as( select extract(WEEK from query_date) as week_number, team, user, count(user) as query_cnt from advanced.query_logs group by all ) select *, rank() over(partition by week_number, team order by query_cnt desc ) as rk from query_cnt_by_team qualify rk = 1 order by 1, 2, 4 desc -- 3. (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요. with query_cnt_by_team as( select extract(WEEK from query_date) as week_number, team, user, count(user) as query_cnt from advanced.query_logs group by all ) select *, lag(query_cnt, 1) over(partition by user order by week_number) as prev_week_query_cnt from query_cnt_by_team -- 4. 시간의 흐름에 따라 일자별로 유저가 실행한 누적 쿼리 수를 작성해주세요. select *, sum(query_cnt) over (partition by user order by query_date rows between unbounded preceding and current row) as cumulative_sum from ( select query_date, user, count(user) as query_cnt from advanced.query_logs group by all ) order by 2, 1 -- 5. 다음 데이터는 주문 횟수를 나타낸 데이터입니다. 만약 주문 횟수가 없다면 NULL로 기록됩니다. 이런 데이터에서 NULL 값이라고 되어있는 부분을 바로 이전 날짜의 값으로 채워주는 쿼리를 작성해주세요. WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ), raw_data2 as( select *, last_value(raw_data.number_of_orders ignore nulls) over(order by date) as last_value_orders from raw_data ) select * from raw_data2 WITH raw_data AS ( SELECT DATE '2024-05-01' AS date, 15 AS number_of_orders UNION ALL SELECT DATE '2024-05-02', 13 UNION ALL SELECT DATE '2024-05-03', NULL UNION ALL SELECT DATE '2024-05-04', 16 UNION ALL SELECT DATE '2024-05-05', NULL UNION ALL SELECT DATE '2024-05-06', 18 UNION ALL SELECT DATE '2024-05-07', 20 UNION ALL SELECT DATE '2024-05-08', NULL UNION ALL SELECT DATE '2024-05-09', 13 UNION ALL SELECT DATE '2024-05-10', 14 UNION ALL SELECT DATE '2024-05-11', NULL UNION ALL SELECT DATE '2024-05-12', NULL ), raw_data2 as( select *, last_value(raw_data.number_of_orders ignore nulls) over(order by date) as last_value_orders from raw_data ) --6. 5번 문제에서 NULL을 채운 후, 2일 전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요(이동평균) select * except(number_of_orders), avg(last_value_orders) over (order by date rows between 2 preceding and current row) as moving_avg from raw_data2 --7. app_logs 테이블에서 Custom session을 만들어 주세요. 이전 이벤트 로그와 20초가 지나면 새로운 session을 만들어 주세요. session은 숫자로 (1, 2, 3..) 표시해도 됩니다. -- 2022-08-18의 user_pseudo_id(1997494153.8491999091)은 session_id가 4까지 나옵니다 with base as( select event_date, datetime(timestamp_micros(event_timestamp), 'Asia/Seoul') as event_datetime, event_name, user_id, user_pseudo_id from advanced.app_logs where event_date = "2022-08-18" and user_pseudo_id = "1997494153.8491999091" order by event_timestamp ), diff_data as ( select *, datetime_diff(event_datetime, prev_event_datetime, second) as second_diff from ( select *, lag(event_datetime, 1) over(partition by user_pseudo_id order by event_datetime) as prev_event_datetime from base order by event_datetime ) ) select *, sum(session_start) over(partition by user_pseudo_id order by event_datetime) as session_number from ( select *, case when prev_event_datetime is null then 1 when second_diff >= 20 then 1 else null end as session_start from diff_data )
수치형 컬럼들 리스트로 만들 시, cols = list(X_train.columns[X_train.dtypes != 'object']) 시험에서 이렇게 해도 되나요? object랑 int랑 float 세개만 나오면 이렇게 해도 될 듯한데, 그 외 변수들이 나올 경우 대비해서, 수치형 컬럼들만 리스트 할 때, 어떤식으로 코딩하는 것이 나을까요?
5강 기상청사이트 날씨모듈 구현1 중에서 다음과 같이 날씨 태그를 살펴보는데 <span class="tmp">4.6<small>℃</small> <span class="minmax"><span>최저</span><span>-</span><span>최고</span><span>-</span></span></span> _span_tmp.span.decompose() 을 통하여 <span class="tmp">4.6<small>℃</small></span> 남기고 모두 지우는데 제가 알기로는 span 태그가 모두 사라지는 걸로 알고 있었는데 처음 span 태그는 원래 사라지지 않는건가요?? 보통의 블로그에서는 처음부터 삭제대상 태그인 경우가 없었던지라 좀 당황스럽습니다.
시험환경에서 fillna(method = 'bfill')를 사용했더니, 아래 에러코드가 발생해서 gpt로 확인했더니, train['컬럼명'] = train['컬럼명'].bfill()로도 사용할 수 있더라구요. 시험환경에서 이러한 에러코드가 발생했으니 실제 시험에서도 이렇게 사용해도 상관 없을까요 ? 에러코드 전문 /goorm/Main.out:12: FutureWarning: Series.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead. train['abc'] = train['abc'].fillna(method = 'bfill')
안녕하세요 :) 섹션 9 부분을 다 듣고 나서 명확히 이해가 가지 않는 부분이 있어 질문드립니다. getServerSideProps를 이용하여 페이지를 로딩할 때 는 "컴포넌트가 렌더링되어 HTML이 생성되는 곳"이 프론트 서버(Next.js 서버) 이고, useEffect를 이용하여 페이지를 로딩할 때 는 "컴포넌트가 렌더링되어 HTML이 생성되는 곳"이 클라이언트(브라우저) 라고 이해하는게 맞을까요?
강사님 안녕하세요. 학습을 거의 끝낸 상태라 거의 마지막 질문이 될 것 같기도 한데요^^ 클라이언트 컴포넌트는 서버 컴포넌트를 Import 할 수 없기 떄문에 Next 는 서버 컴포넌트를 클라이언트 컴포넌트로 동작시킨다고 배웠습니다. 그런데 만약 이러한 서버 컴포넌트에 async 방식의 api 코드가 포함되어 있는 경우에는 이런 코드가 클라이언트 방식으로 동작하면 문제가 발생할 것 같은데요. 결국, 이런 상황에서는 서버 컴포넌트를 그대로 두어서는 안되고 강의에서 설명하신 합성 방식으로 변경을 하거나 아니면 해당 서버 컴포넌트의 API 로직을 react-query 나 useEffect 훅을 이용해서 실행될 수 있는 클라이언트 컴포넌트로 리팩토링을 해야만 되는거 같은데 제가 올바로 이해한 게 맞을까요?