다중 변환 전략

SQL로 하는 탐색적 데이터 분석

Christina Maimone

Data Scientist

다중 변환

SELECT * FROM naics;
   id   |                  category                   | businesses 
--------+---------------------------------------------+------------
 111110 | Agriculture: Soybean Farming                |       4788
 111130 | Agriculture | Dry Pea and Bean Farming      |       3606
 111140 | Agriculture: Wheat Farming                  |       6393
 111150 | Agriculture - Corn Farming                  |      26469
 111160 | Agriculture: Rice Farming                   |        949
 111199 | Agriculture - All Other Grain Farming       |      15035
 111211 | Agriculture | Potato Farming                |        617
 611110 | Education - Elementary and Secondary        |     187859
 611210 | Education | Junior Colleges                 |       3961
 611310 | Education: Colleges and Universities        |      29148
SQL로 하는 탐색적 데이터 분석

CASE WHEN

-- :, -, | 각각에 대한 CASE

SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, ' - ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, -- 결과에 별칭 지정
sum(businesses) -- 업체 수도 선택 FROM naics GROUP BY major_category; -- 위에서 만든 범주로 그룹화
 major_category |  sum   
----------------+--------
 Education      | 220968
 Agriculture    |  57857
SQL로 하는 탐색적 데이터 분석

재코딩 테이블

원본 값: fruit 테이블

 customer | fav_fruit 
----------+-----------
      349 | apple
      874 | Apple
      703 | apple
      667 | bannana
      622 | banana
      387 | BANANA
      300 | APPLES
      313 |  apple
      499 |  banana
      418 | apple
      841 | BANANA
      300 | APPLE
      754 | apple

표준화 값: recode 테이블

 original | standardized  
----------+--------------
 APPLES   | apple
 apple    | apple  
 Apple    | apple
 bannana  | banana
 apple    | apple
  banana  | banana
 banana   | banana
 APPLE    | apple
  apple   | apple
 BANANA   | banana
SQL로 하는 탐색적 데이터 분석

1단계: CREATE TEMP TABLE

CREATE TEMP TABLE recode AS

  SELECT DISTINCT fav_fruit AS original,  -- 원본(지저분한) 값

         fav_fruit AS standardized        -- 새 표준화 값

    FROM fruit;
SQL로 하는 탐색적 데이터 분석

초기 테이블

SELECT * 
  FROM recode;
 original | standardized 
----------+--------------
 APPLES   | APPLES
 apple    | apple  
 Apple    | Apple
 bannana  | bannana
 apple    | apple
  banana  |  banana
 banana   | banana
 APPLE    | APPLE
  apple   |  apple
 BANANA   | BANANA
(10행)
SQL로 하는 탐색적 데이터 분석

2단계: 값 업데이트

UPDATE table_name
   SET column_name = new_value
 WHERE condition;
SQL로 하는 탐색적 데이터 분석

2단계: 값 업데이트

-- 모든 행: 소문자, 양끝 공백 제거

UPDATE recode 
   SET standardized=trim(lower(original));
-- 특정 행: 오탈자 수정

UPDATE recode
   SET standardized='banana'
 WHERE standardized LIKE '%nn%';
-- 모든 행: s 제거

UPDATE recode
   SET standardized=rtrim(standardized, 's');
SQL로 하는 탐색적 데이터 분석

정리된 recode 테이블

SELECT * 
  FROM recode;
 original | standardized 
----------+--------------
 APPLES   | apple
 apple    | apple
 Apple    | apple
 apple    | apple
  banana  | banana
 banana   | banana
 APPLE    | apple
  apple   | apple
 BANANA   | banana
 bannana  | banana
(10행)
SQL로 하는 탐색적 데이터 분석

3단계: 원본과 recode 테이블 JOIN

원본만

SELECT fav_fruit, count(*) 
  FROM fruit 
 GROUP BY fav_fruit;
 fav_fruit | count 
-----------+-------
 APPLES    |     1
 apple     |     1
 apple     |     3
  banana   |     1
 BANANA    |     2
  apple    |     1
 APPLE     |     1
 bannana   |     1
 banana    |     1
 Apple     |     1
(10행)

재코딩 값 사용

SELECT standardized, 
       count(*) 
  FROM fruit
       LEFT JOIN recode
       ON fav_fruit=original
 GROUP BY standardized;
 standardized | count 
--------------+-------
 apple        |     8
 banana       |     5
(2행)
SQL로 하는 탐색적 데이터 분석

요약

  1. 원본 값으로 CREATE TEMP TABLE
  2. 표준화 값 생성 위해 UPDATE
  3. 원본과 표준화 데이터 JOIN
SQL로 하는 탐색적 데이터 분석

Evanston 311 데이터를 정리해 보세요!

SQL로 하는 탐색적 데이터 분석

Preparing Video For Download...