본문 바로가기

분석/데이터분석47

[BigQuery] 최신의 데이터를 가져오는 3 가지 방법 먼저, 아래와 같은 데이터가 있다고 가정을 합니다. A 파트의 데이터가 우리가 갖고 있는 user_id 기준으로 중복이 있는 tbl_user 라는 테이블입니다.B 파트는 우리가 사용하고자 하는 user_id 기준으로 최신의 정보만 있는 "만들려고 하는 테이블" 입니다. 방법 1첫번째 방법은 사용자(user_id)별로 updated_at 기준으로 번호를 생성하고, 최신의 데이터를 가져오는 방법입니다.withuser_info as ( select user_id , name , phone , address , hobby , row_number() over(partition by user_id order by updated_at desc) as.. 2024. 12. 9.
그룹별로 랜덤 sampling 하기 예전에 단순히 랜덤 sampling 을 하는 SQL 을 공유한 적이 있다. https://walkingfox.tistory.com/149 Mysql 샘플링 (Sampling) : 랜덤 추출Mysql 에서 랜덤(무작위)으로 몇개의 데이터를 추출하는 경우에 사용할 수 있는 쿼리 문장이다. order by 절에 rand() 함수를 적용하면 데이터가 랜덤한 순서로 추출이되면 limit 절로 그 갯수를 정하는walkingfox.tistory.com 이번에는 데이터가 그룹별로 있을 경우 그룹별로 랜덤하게 sampling 하는 방법에 대해서 적어보려 한다. 아래와 같은 tbl_user 테이블이 있다고 가정한다.연령대와 유져id 로 구성되어 있는age_groupuser_id10대12310대23420대345......6.. 2024. 8. 27.
피처 스케일링 (Feature Scaling) 피처 스케일링이란 서로 범위가 다른 변수(피처)들의 스케일을 일치시켜주는 작업을 말한다. 예를 들면 아래와 같이 x1, x2, x3의 범위나 분포를 같은 규격으로 맟춰주는 작업인데,거리를 기반으로 하는 모델에서는 스케일이 맞지 않으면 좋지 않은 성과를 나타내게 되기 때문이다. 여기서는 두 가지 방법을 소개해보고자 한다. 1. min-max 정규화 : 최소값을 0 최대값을 1로 정규화 한다.2. standardization 정규화 : 평균을 0 표준편차를 1로 표준화한다. 아래와 같은 테이블이 있다고 하면,import pandas as pdheight_weight_dict = {'키':[1.7, 1.4, 1.9], '무게':[60, 50, 70]}df = pd.DataFrame(height_weight_d.. 2024. 5. 22.
머신러닝에서 인코딩 방법 머신러닝 모델은 문자 데이터를 인식하지 못합니다.그렇기 때문에 문자로 구성된 데이터를 숫자형태로 바꿔줘야하는데 이를 인코딩이라고 합니다. 인코딩은 아래와 같이 두 종류가 있습니다.1. Label Encoding (레이블 인코딩) : 원본 데이터의 값에 사전순으로 번호를 매깁니다.2. One-Hot Encoding (원-핫 인코딩) : 여러 값 중에 하나(one)만 활성화(hot)하는 방법입니다. 위 두 방식을 python 코드로 구현해보겠습니다. 1. Label Encoding from sklearn.preprocessing import LabelEncoderfruits = ['apple', 'orange', 'banana', 'pear', 'apple', 'banana', 'orange', 'apple.. 2024. 5. 22.
회귀모델의 성과 측정 지난 번에 "분류모델의 성과 측정"에 대해서 적은 바 있다.https://walkingfox.tistory.com/220 분류모델의 성과 측정큰 구분에서 모델을 두 부류로 나누자면 아래와 같이 볼 수 있다. 회귀 모델 분류 모델 회귀모델의 경우 평균제곱근 오차(RMSE) 를 사용하지만, 분류모델의 경우는 confusion_matrix 를 이용하여 정확walkingfox.tistory.com 이번에는 "회귀모델의 성과 측정"에 대해서 적어보고자 한다.아래의 지표들은 회귀모델을 통하여 얻은 예측치가 실제 값과 얼마나 차이가 있는지? 즉 얼마나 잘 예측했는지를 나타내는 지표들이다.  이를 구하는 방법을 python 샘플 코드를 참조하세요.import numpy as npfrom sklearn.metrics i.. 2024. 5. 22.
Recursive Query (재귀쿼리) 아래의 쿼리는 mysql 8.x 버젼대에서 실행한 내용입니다. (recursive 쿼리를 지원하는) 1. 테이블 생성 HTML 삽입 미리보기할 수 없는 소스 위 코드를 실행하면 sample 데이터를 생성할 수 있으며, 그 데이터는 아래의 구조를 나타낸 데이터입니다. 2. 하향탐색 재귀쿼리 (기준 node 에서 아래 방향으로 탐색) HTML 삽입 미리보기할 수 없는 소스 -- start 부분에서는 하향검색을 시작할 노드를 설정하는 부분이다. -- repeat 부분에서는 위에서 설정한 초기 값이 재쿼리의 타이틀인 find_division 에 들어가고 그 값을 기준으로 다시 division 을 조인한다. division 테이블이 하위 코드를 탐색하게 되는 테이블이라 d.upper_division_code 를.. 2024. 3. 12.
분류모델의 성과 측정 큰 구분에서 모델을 두 부류로 나누자면 아래와 같이 볼 수 있다.회귀 모델 (https://walkingfox.tistory.com/223)분류 모델회귀모델의 경우 평균제곱근 오차(RMSE) 를 사용하지만, 분류모델의 경우는 confusion_matrix 를 이용하여 정확도(accuracy), 정밀도(precision), 재현율(recall), F1 등을 이용한다. 1. Confusion_Matrix오차행열이라고 하며, 실제 데이터의 값과 모델이 예측한 값의 표라고 볼 수 있다.2. Accuracy정확도라고 하며, 오차행열의 4가지 경우 중에서 정확히 양성 그리고 음성을 맟춘 비율을 이다.3. Precision정밀도라고 하며, 양성이라고 예측한 부분 중 실제 양성인 부분에 대한 비율이다.FP 는 실제로는.. 2024. 2. 23.
[SQL] 월별로 잔존타입별 고객수 계산 아래와 같은 테이블이 있다고 가정하고, -- 테이블 명세 : tbl_order customer_id : 고객 아이디 (int) order_date : 주문일자 (date) order_id : 주문번호 (int) order_price : 주문금액 (int) 계산하려고 하는 것은 아래의 고객 타입별 고객 수입니다. -- 이번달 구매한 고객 신규고객 : 이번달 첫구매한 고객 잔존고객 : 전월과 이번달 구매한 고객 귀환고객 : 신규고객이 아니면서, 전월 구매하지 않은 고객이 이번달 구매한 고객 -- 이번달 구매하지 않은 고객 이탈고객 : 전월 구매한 고객이 이번달 구매하지 않은 고객 HTML 삽입 미리보기할 수 없는 소스 2024. 1. 25.
[BigQuery] 연속된 일자 생성하기 빅쿼리에서는 generate_date_array 라는 함수를 사용하면, 일련의 날짜 데이터에 대한 배열을 결과 값으로 얻을 수 있다. 이를 응용하면, 특정 기간안에 주별 데이터(주별 시작일, 연도, 주넘버)를 구하여 여러 쿼리에 활용할 수 있다. declare from_date, to_date date; set from_date = date_sub('2023-01-01', interval 375 day); set to_date = '2023-12-31'; select date_trunc(date(base_dt), week(sunday)) as current_dd , format_date('%Y', base_dt) as week_year , format_date('%U', base_dt) as week_n.. 2023. 10. 10.
[BigQuery] datetime 과 timestamp 의 차이점 ? Google 빅쿼리를 사용하면서 컬럼의 날짜 타입을 보면 date, time 등은 직관적으로 쉽게 이해할 수 있다. 그리고 datetime 이라는 타입은 역시 날짜와 시간의 정보가 함께 있는 타입이구나 라고 어렵지 않게 이해할 수 있다. 그런데 timestamp 라는 타입이 또 존재한다. 이 역시 날짜와 시간의 정보가 함께 있는 타입이다. 그렇다면 (1) 이 두 타입 datetime 과 timestamp 의 차이는 무엇일까? 결론 먼저 이야기하자면, datetime : 로컬의 시간을 저장하는 타입 timestamp : UTC 즉, 세계 표준시를 저장하는 타입 이라고 말할 수 있다. 그래서 bigquery 에서 아래의 그림처럼 조회를 해보면 timestamp 옆에는 UTC라는 표시가 되어있다. 그리고 위에.. 2023. 8. 25.