inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

[인프런 빅쿼리 빠짝스터디 2주차] 윈도우 함수, FRAME 설정, QUALIFY

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

연습 문제 (1) -- 1) SELECT user_id , visit_month , LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS lead_visit_month , LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS lead2_visit_month FROM advanced.analytics_function_01 ORDER BY user_id -- 2) SELECT user_id , visit_month , LEAD(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month , LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS after2_visit_month , LAG(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS before_visit_month FROM advanced.analytics_function_01 ORDER BY user_id, visit_month -- 3) 유저가 접속했을 때, 다음 접속까지의 간격을 구하시오. SELECT * , after_visit_month - visit_month AS diff_month FROM ( SELECT user_id , visit_month , LEAD(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month FROM advanced.analytics_function_01 ) ORDER BY user_id , visit_month -- 4) 이 데이터셋을 기준으로 user_id의 첫번째 방문 월, 마지막 방문 월을 구하는 쿼리를 작성해주세요. SELECT * , FIRST_VALUE(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS first_month , LAST_VALUE(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS last_month FROM advanced.analytics_function_01 ORDER BY user_id , visit_month -- 윈도우 함수 - 데이터 범위 지정 SELECT * , SUM(amount) OVER () AS amount_sum , SUM(amount) OVER (ORDER BY order_id) AS cumulative_sum , SUM(amount) OVER (PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user , AVG(amount) OVER (ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amount FROM advanced.orders ORDER BY order_id 연습 문제 (2) -- 1) SELECT * , COUNT(user) OVER (PARTITION BY user) AS total_query_cnt FROM advanced.query_logs ORDER BY user -- 2) 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 week_number , team , query_cnt DESC -- 3) 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 ORDER BY user , week_number -- 4) SELECT query_date , team , user , query_cnt , 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 , team , user , COUNT(user) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) ORDER BY user , query_date -- 5) 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 ) SELECT * , LAST_VALUE(number_of_orders IGNORE NULLS) OVER (ORDER BY date) AS before_number_of_orders FROM raw_data -- 6) 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 ), filled_data AS ( SELECT * EXCEPT(number_of_orders) , LAST_VALUE(number_of_orders IGNORE NULLS) OVER (ORDER BY date) AS number_of_orders FROM raw_data ) SELECT * , AVG(number_of_orders) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg FROM filled_data -- 7) WITH step1 AS ( SELECT * EXCEPT(event_params, platform) , DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime FROM advanced.app_logs WHERE user_pseudo_id = "1997494153.8491999091" AND event_date = '2022-08-18' ), step2 AS ( SELECT * , DATETIME_DIFF(event_datetime, prev_event_datetime, SECOND) AS second_diff FROM ( SELECT * , LAG(event_datetime) OVER (ORDER BY event_datetime) AS prev_event_datetime FROM step1 ) ORDER BY event_datetime ) SELECT * , SUM(session_start) OVER (ORDER BY event_datetime) AS session_num FROM ( SELECT * , CASE WHEN second_diff IS NULL THEN 1 WHEN second_diff >= 20 THEN 1 ELSE 0 END AS session_start FROM step2 ) ORDER BY event_datetime

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
ho 댓글 1 좋아요 0 조회수 118

semester1,2 관련 질문입니다 ㅎㅎ

미해결

[PY 0201] 인공지능을 위한 파이썬 레벨1

혹시 총 커리큘럼의 semester1,2에 대한 강의는 인프런에 탑재하실 생각은 없는지 여쭤보고 싶네요~

  • python
  • 인공지능(ai)
cks9921 댓글 2 좋아요 0 조회수 203

[인프런 빅쿼리 빠짝스터디 2주차] 윈도우 함수, FRAME 설정, QUALIFY

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

연습 문제 (1) 윈도우 함수 -- 1) user들의 다음 접속 월과 다다음 접속 월을 구하는 쿼리를 작성해주세요. SELECT user_id, visit_month, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_1, LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_2, FROM `advanced.analytics_function_01` ORDER BY user_id LEAD 함수와 적절한 수를 이용해 작성 LEAD 함수에 들어가는 인자에 따라 다음인지 다다음인지 정할 수 있음 따로 정해주지 않을 경우 1로 인식 OVER 의 뒷 내용이 생각보다 조금 복잡해 한번에 떠오르지는 않았음 OVER 의 ORDER BY 의 기본은 오름차순 -- 2) user들의 다음 접속 월과 다다음 접속 월, 이전 접속 월을 구하는 쿼리를 작성해주세요. SELECT user_id, visit_month, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_1, LEAD(visit_month, 2) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_2, LAG(visit_month) OVER (PARTITION BY user_id ORDER BY visit_month) AS previous_visit_month_1, FROM `advanced.analytics_function_01` ORDER BY user_id LAG 사용해 이전 값 구해봄 LAG 안에 특별한 숫자를 주지않으니 1로 인식하는 것을 확인함 LEAD 값이 NULL → 해당 값이 마지막 값 LAG 값이 NULL → 해당 값이 첫번째 값 -- 3) user의 다음 접속까지의 간격을 구하시오 SELECT user_id, visit_month, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_1, (LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) - visit_month) AS diff_month, FROM `advanced.analytics_function_01` ORDER BY user_id SELECT 절에서 만들어진 컬럼은 그대로 사용할 수는 없음 하지만 위와 같이 할 경우 너무 길어지고 복잡해짐(중복됨) → 서브쿼리 사용 SELECT *, (after_visit_month_1 - visit_month) AS diff_month FROM ( SELECT user_id, visit_month, LEAD(visit_month, 1) OVER (PARTITION BY user_id ORDER BY visit_month) AS after_visit_month_1, FROM `advanced.analytics_function_01` ORDER BY user_id ) 쿼리를 최대한 덜 수정하는 방향으로 작성해 볼 것 (2) QUALIFY -- amount_total : 전체 SUM -- cumulative_sum : row 시점에 누적 SUM -- cumulative_sum_by_user : row 시점에 유저별 누적 SUM -- last_5_orders_avg_amount : order_id 기준으로 정렬하고, 직전 5개 주문의 평균 amount SELECT *, SUM(amount) OVER() AS amount_total, SUM(amount) OVER(ORDER BY order_id) AS cumulative_sum, SUM(amount) OVER(PARTITION BY user_id ORDER BY order_id) AS cumulative_sum_by_user, AVG(amount) OVER(ORDER BY order_id ROWS BETWEEN 5 PRECEDING AND 1 PRECEDING) AS last_5_orders_avg_amount FROM advanced.orders ORDER BY order_id BETWEEN 앞에 ROWS 를 빼먹어서 계속 오류를 냈음 -- 1) 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리를 작성해주세요. -- 단, GROUP BY를 사용해서 집계하는 것이 아닌 query_logs의 데이터의 우측에 새로운 컬럼을 만들어주세요. SELECT *, COUNT(query_date) OVER(PARTITION BY user) AS cnt_by_user FROM advanced.query_logs 데이터에 NULL 값이 없으므로 어떤 열을 세던지 상관 없음 -- 2) 주차별로 팀 내에서 쿼리를 많이 실행한 수를 구한 후, 실행한 수를 활용해 랭킹을 구해주세요. -- 단, 랭킹이 1등인 사람만 결과가 보이도록 해주세요 SELECT *, RANK() OVER(PARTITION BY team, week_key ORDER BY cnt_by_user DESC) AS rnk FROM ( SELECT user, team, IF(query_date < '2024-05-01', 1, 2) AS week_key, COUNT(user) AS cnt_by_user FROM advanced.query_logs GROUP BY ALL ) QUALIFY rnk = 1 ORDER BY team, week_key '주차별’에 대한 아이디어가 잘 떠오르지 않았음 → 데이터의 범위가 좁기 때문에 일단은 IF를 통해 주차를 구분해줌 → 날짜 범위가 넓어지면 어떻게 할지 아직은 모르겠음 서브 쿼리 사용해봄 PARTITION 이 2개임(주차별, 팀별) QUALIFY 사용할 것(생각 못하고 LIMIT 쓰려다 막힘) -- 강의 코드 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 week_number, team, query_cnt EXTRACT 함수 통해 ‘주차’ 추출 GROUP BY 후 윈도우 함수 사용 → 유연하게 사용할 것 -- 3) (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준 1주 전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리를 작성해주세요 SELECT *, LAG(query_cnt) OVER(PARTITION BY user ORDER BY week_number) AS previous_week_cnt FROM query_cnt_by_team ORDER BY user WITH AS 로 만든 테이블 그대로 사용 -- 4) 시간의 흐름에 따라, 일자별로 유저가 실행한 누적 쿼리 수를 작성해주세요 SELECT *, SUM(query_cnt) OVER(PARTITION BY user ORDER BY query_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumul_cnt FROM ( SELECT user, team, query_date, COUNT(*) AS query_cnt FROM advanced.query_logs GROUP BY ALL ) ORDER BY user, query_date GROUP BY 한 서브쿼리 사용 FRAME 사용이 그렇게 까다롭진 않았음 FRAME 의 defalut 값 → UNBOUNDED PRECEDING ~ CURRENT ROW -- 5) 다음 데이터는 주문 횟수를 나타낸 데이터입니다. 만약 주문 횟수가 없으면 NULL로 기록됩니다. -- 이런 데이터에서 NULL 값이라고 되어있는 부분을 바로 이전 날짜의 값으로 채워주는 쿼리를 작성해주세요 SELECT date, IF(number_of_orders IS NULL, LAG(raw_data.number_of_orders, 1) OVER(ORDER BY date), number_of_orders) AS number_of_orders FROM raw_data 조건문 사용해서 IS NULL 인 값들만 LAG 사용 기존의 number_of_orders가 사라지는 문제가 있음 마지막 날짜는 안채워짐(연속으로 NULL 이라) -- 강의 코드 SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS last_value_orders FROM raw_data LAST_VALUE + IGNORE NULLS 사용 -- 6) 5번 문제에서 NULL을 채운 후, 2일 전 ~ 현재 데이터의 평균을 구하는 쿼리를 작성해주세요(이동 평균) SELECT *, AVG(last_value_orders) OVER(ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average FROM ( SELECT *, LAST_VALUE(number_of_orders IGNORE NULLS) OVER(ORDER BY date) AS last_value_orders FROM raw_data 서브쿼리 사용했지만 WITH 로 정의해도 됨 → 문제에서는 WITH 가 연속 두번 나오는데, WITH 는 한번만 작성해도 됨(, 로 구분) -- 7) app_logs 테이블에서 Custom Session을 만들어 주세요. 이전 이벤트 로그와 20초가 지나면 새로운 Session을 만들어 주세요. -- Session은 숫자로 (1, 2, 3 ...) 표시해도 됩니다 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 ) SELECT *, SUM(diff_classification) OVER(ORDER BY event_datetime) + 1 AS session_id FROM ( SELECT *, IF(DATETIME_DIFF(event_datetime, before_datetime, second) > 20, 1, 0) AS diff_classification FROM ( SELECT *, LAG(event_datetime) OVER(PARTITION BY user_pseudo_id ORDER BY event_datetime) AS before_datetime, FROM base ) ) ORDER BY event_datetime timestamp와 1초의 관계 : timestamp 1당 1초 아닌가? → 그렇다면 굳이 datetime으로 바꿀 필요가 있나 서브쿼리 2번 중첩해서 사용 IF 문 사용해 20초 차이남 → 1 차이 안남 → 0 으로 파생해 누적합 + 1로 session_id 도출 첫 행 before_datetime에 예외처리 해줄 것 그런데 PARTITION BY 를 매 OVER 안에 무조건 써야 하나? EDA(2) 요일별 접속자 수 + 기간 내 이벤트날 요일별 접속자 평균을 내보자 일 > 토 > 수 > 금 > 목 > 화 > 월 → 역시 쉬는날이 더 배달 수요가 많은건가? → 수요일은 왜 일까? 2022-08-01(월) ~ 2023-01-20(금) 의 데이터 주말(토, 일)이 아닌 공휴일 목록 → 네이버 캘린더 참조 2022-08-15 월 : 광복절 2022-09-09 금 : 추석연휴 2022-09-12 월 : 추석연휴 2022-10-03 월 : 개천절 2023-01-23 월 : 설 연휴 2023-01-24 화 : 설 연휴(대체공휴일) 주요 이벤트 → 특정 사건이 있을 경우 배달 수요가 늘거나 줄지 않을까? / 위키 사이트 참조 2022-08-02 화 : 코로나19 누적 감염자 2천만 명 돌파 2022-08-08 월 : 수도권 기록적인 폭우 및 홍수 2022-10-31 월 : 할로윈데이 / 2022-10-29 토에 이태원 압사 사고 발생 2022-11-08 화 : 한국시리즈 2022-11-17 목 : 2023학년도 대학수학능력시험 2022-11-24 목 : 카타르 월드컵 vs 우루과이 2022-11-28 월 : 카타르 월드컵 vs 가나 2022-12-03 토 : 카타르 월드컵 vs 포르투갈 2022-12-19 월 : 카타르 월드컵 결승 2022-12-25 일 : 크리스마스 등등… “특정 사건”의 중요도를 정성적으로 평가하기에는 어렵다고 느낌 → 오히려 반대로 갑자기 이용자 수의 변화가 급격하게 나타나는 날짜를 위주로 봐야하나? → 그런데 앱 이용자 수 성장 시기에는 항상 상승만해서 보기 애매할 듯 → 요일별 경향을 따져야 할 수도 일요일 < 월요일(개천절) < 화요일 → 앱 이용자 수 상승 예시 월드컵에 따른 이용자 수 변화는 뚜렷하지 않음 수요일에 딱히 뭔가 보이진 않음 → 평일의 절반이 지남에 따른 보상 심리가 원인일수도? 시간대에 따른 이용자 수 마찬가지로 시간대별 평균 이용자 수 구해봄 저녁 시간대(19시 ~ 22시)가 가장 이용자 수 많음 점심 시간대(12시 ~ 14시)가 그 다음 당연하게도 식사 시간에 배달 앱 수요가 많음 시간대 별로 food_id 에 따른 수요가 다른지 확인해볼 것 → 시간대 별 이용자에게 추천해주는 음식 다르게 설정할 수 있음 하루의 기준을 0시로 잡아도 되나?에 대한 의문이 생김(야식 수요) → 이거에 대한 기준을 다시 잡고 일별 이용자 수 다시 구해야 할수도

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
양승엽 댓글 1 좋아요 0 조회수 153

코랩 코드 작성 시 힌트 안나오게 하는 방법

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

코랩 작성 시 회색 문자로 힌트 같은게 계속 뜨더라구요.. 이거 없앨 수 있는 방법 있나요? 제가 생각한 것으로 하고 싶은데, 자꾸 보이네요..

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 2 좋아요 0 조회수 677

외래키 관계라는게 무슨 의미인지 잘 모르겠습니다.

미해결

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

안녕하세요 강사님. post 모델과 코멘트, 즉, post 테이블과 코멘트는 외래키 관계라고 설명해주셨는데, 제가 db용어를 잘 모르고, 찾아봐도 와닿지 않아서 이해가 잘 되지 않았습니다. 감사합니다.

  • react
  • python
  • django
  • web-api
  • htmx
sunnnwo 댓글 2 좋아요 0 조회수 323

xgboost의 결과값

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

# XGBoost from xgboost import XGBClassifier xgb = XGBClassifier() xgb.fit(X_tr[cols], y_tr) pred = xgb.predict_proba(X_val[cols]) pred[:10] array([[8.8499719e-01, 1.1500280e-01], [9.5693278e-01, 4.3067228e-02], [5.9604776e-01, 4.0395224e-01], [9.1923535e-01, 8.0764659e-02], [7.2003794e-01, 2.7996209e-01], [9.8670012e-01, 1.3299899e-02], [9.9945015e-01, 5.4984458e-04], [9.1459018e-01, 8.5409813e-02], [1.7607212e-03, 9.9823928e-01], [9.4050205e-01, 5.9497967e-02]], dtype=float32) XGB의 결과값이 이렇게 나와도 되나요..?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 2 좋아요 0 조회수 197

검증용 데이터 분리시

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

y = (y_train['income'] == '>50K').astype(int) 이렇게 하면 50k 보다 큰 값에서는 1이 나오는데, 만약 3개의 값으로 나오게 하려면 어떻게 해야하나요? (0, 1, 2) 등등 그리고 윗 코딩대로 진행하면 <=50k 는 자동적으로 0이 되는건가요? 이유가 있을까요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 2 좋아요 0 조회수 101

[인프런 빅쿼리 빠짝스터디 2주차 과제] 윈도우 함수 연습문제

미해결

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

🔐 이번주차 중요 키워드 : 윈도우 함수, FRAME, QUALIFY ✅ 윈도우 함수 연습문제 1번 1) 사용자별 쿼리를 실행한 총 횟수를 구하는 쿼리 작성 단, group by를 사용해서 집계하는 것이 아닌 query_logs의 데이터 우측에 새로운 컬럼을 만들어주세요. select *, count(query_date) over (partition by user) as query_cnt from advanced.query_logs order by query_cnt desc ✅ 윈도우 함수 연습문제 2번 2) 주차별로 팀 내에서 쿼리를 많이 실행한 수 구하기 2-1) 실행한 수를 활용해 랭킹 구하기 -- 단, 랭킹이 1등인 사람만 결과가 보이도록 해주세요. week_number | team | user | query_cnt | team_rank select * , rank() over(partition by week_number, team order by query_cnt) as team_rank from ( select EXTRACT(week FROM query_date) as week_number, team, user, count(query_date) as query_cnt from advanced.query_logs group by all ) qualify team_rank = 1 order by week_number, team, query_cnt DESC ❗ 새롭게 알게된 함수 : EXTRACT(week FROM query_date) as week_number → 기존의 알고 있던 함수와 같은 결과값 : DATE_TRUNC(query_date, WEEK) AS week_number ❗ qualify team_rank = 1 : QUALIFY 덕분에 서브쿼리 없이 바로 조건에 사용가능함! ✅ 윈도우 함수 연습문제 3번 3) (2번 문제에서 사용한 주차별 쿼리 사용) 쿼리를 실행한 시점 기준 1주전에 쿼리 실행 수를 별도의 컬럼으로 확인할 수 있는 쿼리 작성 select * , LAG(query_cnt, 1) over (partition by user order by week_number) as pre_week_query_cnt from ( select EXTRACT(week FROM query_date) as week_number, team, user, count(query_date) as query_cnt from advanced.query_logs group by all ) ✅ 윈도우 함수 연습문제 4번 4) 시간의 흐름에 따라, 일자별로 유저가 실행한 누적 쿼리수 작성 ## FRAME의 default값은 UNBOUNDED PRECEDING AND CURRENT ROW with query_cnt_by_team as ( select EXTRACT(week FROM query_date) as week_number, team, user, query_date, count(query_date) as query_cnt from advanced.query_logs group by all ) select *, sum(query_cnt) over (partition by user order by query_date ASC) as cumulative_SUM1, sum(query_cnt) over (partition by user order by query_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cumulative_SUM2, from query_cnt_by_team ❗ FRAME의 default값은 UNBOUNDED PRECEDING AND CURRENT ROW ✅ 윈도우 함수 연습문제 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 ) select * , ifnull(number_of_orders, LAST_VALUE(number_of_orders IGNORE NULLS) over(order by date)) as filled_orders from raw_data -- 조건절 ifnull 사용할 수 있음. -- LAG()를 사용하면 마지막 NULL값인 경우 채우는 값도 NULL! -- 그렇기 떄문에, LAST_VALUE()인데, NULL은 무시하라는 IGNORE NULLS! ❗️LAST_VALUE에서 IGNORE NULLS 안하면 값은 NULL ✅ 윈도우 함수 연습문제 6번 6) NULL을 채운후, 2일전 ~ 현재 데이터의 평균 (이동평균) 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 ) select * , AVG(filled_orders) over (order by date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS avg_orders from ( select * , ifnull(number_of_orders, LAST_VALUE(number_of_orders IGNORE NULLS) over(order by date)) as filled_orders from raw_data ) ✅ 윈도우 함수 연습문제 7번 7) app_logs 테이블에서 custom_session을 만들어 주세요:) 이전 이벤트 로그와 20초가 지나면 새로운 session을 만들어 주세요. event_date | event_timestamp | event_datetime | evnet_name | user_id | user_pseudo_id | before_event_datetime | second_diff | session_start | session_id with base as ( select event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') as event_time, 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 ) select *, sum(session_start) over (partition by user_pseudo_id order by event_time) as session_num from ( select *, CASE WHEN before_event_datetime IS NULL THEN 1 WHEN second_diff >=20 THEN 1 ELSE 0 END AS session_start from ( select *, DATETIME_DIFF(event_time, before_event_datetime, SECOND) AS second_diff from ( select *, LAG(event_time,1) over (partition by user_pseudo_id order by event_time) as before_event_datetime from base order by event_time ) ) ) ❗ 새롭게 알게 된 함수 DATETIME_DIFF : 처음에 날짜-시간 차이를 단순히 (-)로만 생각했다가 잘못된 결과 도출 → DATETIME_DIFF 함수로 정답도출!

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
JYP 댓글 1 좋아요 0 조회수 103

7회 기출유형(작업형3)

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

7회 기출유형(작업형3)에서 상관계수 구하는 문제, ERP와 각 변수 사이의 상관계수 계산이면 ERP 자기자신(상관계수 1)은 빼고 다른 변수들하고만을 말하는걸까요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김예지 댓글 2 좋아요 0 조회수 134

네이버커페크롤링

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

itmes 에 여러글이 담긴거 확인하고 밑에서 for문 돌리는데 맨위에 있는 글 하나만 뜨네요 뭔가 잘못했나 해서 확인했는데 어떤게 문제인거죵..

  • python
  • 웹-크롤링
진용 댓글 3 좋아요 0 조회수 192

수강기간 연장

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

0 안녕하세요,, 저는 필기 유효기간 마지막 실기시험을 2과목 40점, 3과목 10점으로 탈락했어요,, 빅분기실기 강의 유효기간이 11월 10일까지라서,, 급하게 다시 필기취득하고, 또다시 실기접수를 하였습니다. 유효기간이 며칠안남아서,, 혹시 일주일만 더 연장해주실 수 있나요? 아니면 추가 비용납부해서 연장이 가능할까요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
lovelove567 댓글 1 좋아요 0 조회수 152

백 버튼 하는중인데 핸드폰에 버튼이 안나와요

미해결

[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)

제 기기에는 강의처럼 밑에 버튼이 안나오는데 왜 그런걸까요?

  • android
  • kotlin
  • firebase
승원 댓글 2 좋아요 0 조회수 268

회사 내 환경 자원에서 수강중인데 아나콘다 유료로 회사내에서는 설치가 되지 않습니다.

미해결

프로그래밍 시작하기 : 도전! 45가지 파이썬 기초 문법 실습 (Inflearn Original)

회사 내 환경 자원에서 수강중인데 아나콘다 유료로 회사내에서는 설치가 되지 않습니다. 아나콘다 설치가 불가능할경우 주피터 노트북 환경 설정 가이드를 알수는 없을까요?

  • python
jeongsoo_e.lee 댓글 2 좋아요 0 조회수 324

로지스틱 회귀관련

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

안녕하세요? 강사님이 저술하신 빅데이터분석기사 실기관련해서 로지스틱회귀 419쪽 문제 중에 p-value가 0.05보다 작은 유의한 변수만 사용한 ~~~~ 여기서 교재는 독립변수로 age , service, booked가 되었는데. service도 0.05 넘는 독립변수가 아닌지요? 이 것도 제외 해야 하는것이 아닌지요?

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
kccjjang 댓글 2 좋아요 0 조회수 153

제가 이해한 칸토어집합 문제를 풀어서 써봤습니다.

해결됨

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

나중에 강의를 복습 할 때 제가 어떤식으로 문제에 접근하고 이해하고 강의를 들었는지 회고 하기 위해서 기록 해둡니다. 또한 제가 이해한 부분이 다른 분들에게 도움이 되면 더 좋겠습니다. 목표 문자열 길이가 주어지면 길이가 1이 될때까지 - - 형태로 바꾸는 문제 제약조건 1 <= N <= 12 어떻게 해결? 입출력 결과를 보면 아래와 같이 추론이 가능하다. ans[0] = 3⁰ = 1 => - ans[1] = 3¹ = 3 => - - ans[2] = 3² = 9 => - - - - => ans[2-1] + 3²⁻¹ + ans[2-1] 결론적으로 => ans[i-1] + 3ⁱ ⁻ ¹ + ans[i-1] 이러한 규칙을 찾을 수 있다. 시간 복잡도 칸토어 집합은 0부터 N까지 각 단계별로 3⁰ + 3¹ + 3² + ... 3¹² 만큼의 문자열을 처리해야 하므로 모든 합이 전체 연상량이다. 0 <= N <= 12 ans[0] ~ ans[12] ans[i]의 길이 : 3ⁱ ans[0] : 1 ans[1] : 3 ans[2] : 9 - 위에 0,1,2일때 공백 - 합쳐서의 길이 등비수열

  • python
  • 코딩-테스트
  • 알고리즘
rhkdtjd_12 댓글 1 좋아요 2 조회수 194

인프런 강의 내용 자료

미해결

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

작업형3 강의에서 단일, 대응, 독립표본 간단하게 잘 정리해주신 것을 보여주셨는데 혹시 이런 강의자료들은 따로 다운받을수는 없을까요? 깃허브에서는 기본학습 심화학습 이렇게만 작성된 코드밖에 없더라구요,,

  • python
  • 머신러닝
  • 빅데이터
  • pandas
김정원 댓글 2 좋아요 0 조회수 123

iloc 범위 관련

해결됨

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

line = int(X_train.shape[0]) X_train = all_df.iloc[:line, :].copy() X_train 이렇게 된 코딩은 iloc에서 line까지가 아니라 line-1까지 가져온다는 뜻 아닌가요? ㅜㅜ 강사님께서 line까지 가져온다고 말씀을 주셔서요.

  • python
  • 머신러닝
  • 빅데이터
  • pandas
  • 빅데이터분석기사
김치현 댓글 2 좋아요 0 조회수 104

Heroku 데이터로드 문제.

미해결

MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React

heroku에 deploy하고나서 openApp하면 데이터가 로드 돼야 하는데 안돼는 이유가 먼지 그리고 axios 통신을 localhost:5000해서 문제인지 궁금합니다.

  • react
  • node.js
  • mongodb
  • express
  • firebase
박성현 Park 댓글 2 좋아요 0 조회수 209

인기 태그

인프런 TOP Writers

주간 인기글