การจับคู่รูปแบบ

การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

การระบุรูปแบบ: ตัวอย่าง

 camis    |              name               | inspection_date | score | nta  | ... 
 ---------+---------------------------------+-----------------+-------+------+-----
 ...      | ...                             | ...             | ...   | ...  | ...
 41659848 | LA BRISA DEL CIBAO              | 01/30/2018      | 20    | QN26 | ...
 40961447 | MESON SEVILLA RESTAURANT        | 03/19/2019      | 50    | MN15 | ...
 50063071 | WA BAR                          | 05/23/2018      | 15    | MN17 | ...
 50034992 | EMPANADAS MONUMENTAL            | 06/21/2019      | 17    | MN35 | ...
 50095871 | ALPHONSO'S PIZZERIA & TRATTORIA | 01/16/2020      | 10    | MN28 | ...
 41104041 | THE SPARROW TAVERN              | 09/17/2019      | 13    | QN72 | ...
 50016937 | BURGER KING                     | 09/14/2018      | 12    | QN55 | ...
 50066469 | DARBAR'S CHICKEN & RIBS         | 08/07/2017      | 11    | QN55 | ...
 41195691 | F & J PINE RESTAURANT           | 05/02/2019      | 26    | BX49 | ...
 50015706 | EL RINCONCITO DE LOS SABORES    | 12/18/2019      | 20    | QN35 | ...
 ...      | ...                             | ...             | ..    | ...  | ...
1 https://www1.nyc.gov/site/planning/data-maps/open-data/dwn-nynta.page
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

การระบุรูปแบบ: ตัวอย่าง

คำนำหน้าที่ถูกต้องสำหรับรหัส NTA

  • MN - Manhattan
  • BK - Brooklyn
  • BX - Bronx
  • QN - Queens
  • SI - Staten Island
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

การระบุรูปแบบ: ตัวอย่าง

ผลลัพธ์ตารางที่มีกล่องสีแดงไฮไลต์รหัส NTA ที่ไม่ถูกต้อง

การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

ตัวดำเนินการ LIKE

SELECT * FROM restaurant_inspection WHERE nta LIKE 'QN544';
SELECT * FROM restaurant_inspection WHERE nta = 'QN544';
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

ตัวดำเนินการ LIKE

อักขระสำหรับการจับคู่รูปแบบ

  • % - จับคู่ลำดับอักขระใดก็ได้ ตั้งแต่ 0 ตัวขึ้นไป

  • _ (ขีดล่าง) - จับคู่อักขระเพียง 1 ตัว

SELECT 
* 
FROM 
restaurant_inspection 
WHERE nta LIKE 'QN%';

 

 

 

SELECT 
* 
FROM 
restaurant_inspection 
WHERE nta LIKE 'QN%' 
AND nta NOT LIKE 'QN__';
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

Regular expressions (REs)

  • การจับคู่รูปแบบด้วย LIKE มีข้อจำกัด
  • บางครั้งต้องการรูปแบบที่เจาะจงกว่านี้
  • Regular Expressions (REs) ช่วยให้จับคู่รูปแบบได้หลากหลายกว่า
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

ตัวดำเนินการ SIMILAR TO

  • เพิ่มความสามารถในการจับคู่รูปแบบ
    SELECT 
      camis, name, inspection_date, score, nta 
    FROM 
      restaurant_inspection 
    WHERE nta SIMILAR TO 'QN%' AND nta NOT SIMILAR TO 'QN__';
    
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

พื้นฐาน REs

Metacharacter การใช้งาน ตัวอย่าง RE ตัวอย่างที่จับคู่ได้
\d จับคู่ตัวเลข (0-9) \d\d\d '345'
? จับคู่ 0 หรือ 1 ครั้งของอักขระก่อนหน้า x\d? 'x5'
+ จับคู่ 1 ครั้งขึ้นไปของอักขระก่อนหน้า \d+ '10'
* จับคู่อักขระใดก็ได้ 0 ครั้งขึ้นไป \d* '3081'
[] จับคู่อักขระใดก็ได้ภายในวงเล็บ [a-z] 'f'
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

การใช้ REs กับ SIMILAR TO

SELECT 
    camis, name, inspection_date, score, nta 
FROM 
    restaurant_inspection 
WHERE nta SIMILAR TO 'QN%' AND nta NOT SIMILAR TO 'QN__';
SELECT 
    camis, name, inspection_date, score, nta 
FROM 
    restaurant_inspection 
WHERE 
    nta NOT SIMILAR TO '[A-Z][A-Z]\d\d';
 camis    |        name        | inspection_date | score | nta  
 ---------+--------------------+-----------------+-------+------
 41659848 | LA BRISA DEL CIBAO | 01/30/2018      | 20    | Q26
 41104041 | THE SPARROW TAVERN | 09/17/2019      | 13    | QN723
การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

มาฝึกกันเถอะ!

การทำความสะอาดข้อมูลในฐานข้อมูล PostgreSQL

Preparing Video For Download...