複数の変換のための戦略

SQLによる探索的データ分析

Christina Maimone

Data Scientist

- 複数ステップの変換

SELECT * FROM naics;
   id   |                  category                   | businesses 
--------+---------------------------------------------+------------
 111110 | 農業: 大豆栽培                |       4788
 111130 | 農業 | 乾燥エンドウ豆・豆類の農業      |       3606
 111140 | 農業: 小麦農業                  |       6393
 111150 | 農業 - トウモロコシ栽培                  |      26469
 111160 | 農業: 稲作                   |        949
 111199 | 農業 - その他すべての穀物農業       |      15035
 111211 | 農業 | ジャガイモ栽培                |        617
 611110 | 初等・中等教育        |     187859
 611210 | 教育 | 短期大学                 |       3961
 611310 | 教育: 大学・短期大学        |      29148
SQLによる探索的データ分析

CASE WHEN

-- Case for each of :, -, and |

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, -- alias the result
sum(businesses) -- also select number of businesses FROM naics GROUP BY major_category; -- Group by categories created above
 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,  -- original, messy values

         fav_fruit AS standardized        -- new standardized values

    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 rows)
SQLによる探索的データ分析

ステップ 2: UPDATE の値

UPDATE table_name
   SET column_name = new_value
 WHERE condition;
SQLによる探索的データ分析

ステップ 2: UPDATE の値

-- All rows: lower case, remove white space on ends

UPDATE recode 
   SET standardized=trim(lower(original));
-- Specific rows: correct a misspelling

UPDATE recode
   SET standardized='banana'
 WHERE standardized LIKE '%nn%';
-- All rows: remove any s

UPDATE recode
   SET standardized=rtrim(standardized, 's');
SQLによる探索的データ分析

結果の再コード化テーブル

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 rows)
SQLによる探索的データ分析

ステップ3: JOIN 元のテーブルと再コード化されたテーブル

Original only

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 rows)

再コード化された値

SELECT standardized, 
       count(*) 
  FROM fruit
       LEFT JOIN recode
       ON fav_fruit=original
 GROUP BY standardized;
 standardized | count 
--------------+-------
 apple        |     8
 banana       |     5
(2 rows)
SQLによる探索的データ分析

まとめ

  1. CREATE TEMP TABLE 元の値を使用
  2. UPDATE 標準化された値を作成する
  3. JOIN 元データを標準化データへ
SQLによる探索的データ分析

Evanston 311 データを整理しよう!

SQLによる探索的データ分析

Preparing Video For Download...