결측치 다루기

SQL Server 데이터베이스에서 데이터 정제하기

Miriam Antona

Software Engineer

결측치 이해하기

| registration_code | airport_code | carrier_code | canceled | on_time | delayed | diverted |
|-------------------|--------------|--------------|----------|---------|---------|----------|
| ...               | ...          | ...          | ...      | ...     | ...     | ...      |
| 000000119         | JFK          | AA           | 74       | 819     | 233     | 13       |
| 000000130         | JFK          | HA           | NULL     | NULL    | NULL    | NULL     |
| 000000131         | JFK          | HA           | NULL     | NULL    | NULL    | NULL     |
| 000000132         | MSP          | YV           | 0        | 6       | 1       | 0        |
| ...               | ...          | ...          | ...      | ...     | ...     | ...      |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 이해하기

| registration_code | airport_code | carrier_code | canceled | on_time | delayed | diverted |
|-------------------|--------------|--------------|----------|---------|---------|----------|
| ...               | ...          | ...          | ...      | ...     | ...     | ...      |
| 000000119         | JFK          | AA           | 74       | 819     | 233     | 13       |
| 000000130         | JFK          | HA           |          |         |         |          |
| 000000131         | JFK          | HA           |          |         |         |          |
| 000000132         | MSP          | YV           | 0        | 6       | 1       | 0        |
| ...               | ...          | ...          | ...      | ...     | ...     | ...      |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 이해하기 - 원인

  • 의도적으로 누락됨
  • 입력 오류
  • 데이터가 없음
SQL Server 데이터베이스에서 데이터 정제하기

결측치 이해하기 - 해결책

  • 권장:
    • 누락값을 조사해 확보
  • 비즈니스에 따라:
    • 그대로 둠
    • 결측 행 삭제
    • 다른 값으로 대체(텍스트, 평균 등)
SQL Server 데이터베이스에서 데이터 정제하기

결측치 제거 - IS NOT NULL

| airport_code | airport_name                            | airport_city      | airport_state |
|--------------|-----------------------------------------|-------------------|---------------|
| ...          | ...                                     | ...               | ...           |
| DFW          | Dallas/Fort Worth International         | Dallas/Fort Worth | Texas         |
| BOS          | Logan International                     | Boston            | Massachusetts |
| SEA          | Seattle/Tacoma International            | NULL              | NULL          |
| PHL          | Philadelphia International              | Philadelphia      | NULL          |
| SLC          | Salt Lake City International            | NULL              | Utah          |
| MCO          | Orlando International                   | Orlando           | Florida       |
| TPA          | Tampa International                     | Tampa             | Fl            |
| FLL          | Fort Lauderdale-Hollywood International | Fort Lauderdale   | FL            |
| ...          | ...                                     | ...               | ...           |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 제거 - IS NOT NULL

SELECT * FROM airports
WHERE airport_state IS NOT NULL
| airport_code | airport_name                            | airport_city      | airport_state |
|--------------|-----------------------------------------|-------------------|---------------|
| ...          | ...                                     | ...               | ...           |
| DFW          | Dallas/Fort Worth International         | Dallas/Fort Worth | Texas         |
| BOS          | Logan International                     | Boston            | Massachusetts |
| SLC          | Salt Lake City International            | NULL              | Utah          |
| MCO          | Orlando International                   | Orlando           | Florida       |
| TPA          | Tampa International                     | Tampa             | Fl            |
| FLL          | Fort Lauderdale-Hollywood International | Fort Lauderdale   | FL            |
| ...          | ...                                     | ...               | ...           |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 제거 - IS NOT NULL

SELECT * FROM airports
WHERE airport_state IS NULL
| airport_code | airport_name                 | airport_city | airport_state |
|--------------|------------------------------|--------------|---------------|
| SEA          | Seattle/Tacoma International | NULL         | NULL          |
| PHL          | Philadelphia International   | Philadelphia | NULL          |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 제거 - <> ''

SELECT * FROM airports
| airport_code | airport_name                            | airport_city      | airport_state |
|--------------|-----------------------------------------|-------------------|---------------|
| ...          | ...                                     | ...               | ...           |
| DFW          | Dallas/Fort Worth International         | Dallas/Fort Worth | Texas         |
| BOS          | Logan International                     | Boston            | Massachusetts |
| SEA          | Seattle/Tacoma International            | NULL              |               |
| PHL          | Philadelphia International              | Philadelphia      |               |
| SLC          | Salt Lake City International            | NULL              | Utah          |
| MCO          | Orlando International                   | Orlando           | Florida       |
| TPA          | Tampa International                     | Tampa             | Fl            |
| FLL          | Fort Lauderdale-Hollywood International | Fort Lauderdale   | FL            |
| ...          | ...                                     | ...               | ...           |
SQL Server 데이터베이스에서 데이터 정제하기

결측치 제거 - <> ''

SELECT * FROM airports
WHERE airport_state <> ''
| airport_code | airport_name                            | airport_city      | airport_state |
|--------------|-----------------------------------------|-------------------|---------------|
| ...          | ...                                     | ...               | ...           |
| DFW          | Dallas/Fort Worth International         | Dallas/Fort Worth | Texas         |
| BOS          | Logan International                     | Boston            | Massachusetts |
| SLC          | Salt Lake City International            | NULL              | Utah          |
| MCO          | Orlando International                   | Orlando           | Florida       |
| TPA          | Tampa International                     | Tampa             | Fl            |
| FLL          | Fort Lauderdale-Hollywood International | Fort Lauderdale   | FL            |
| ...          | ...                                     | ...               | ...           |
SQL Server 데이터베이스에서 데이터 정제하기

다른 값으로 채우기 - ISNULL

ISNULL ( check_expression , replacement_value )  
  • ISNULL <> IS NULL
SQL Server 데이터베이스에서 데이터 정제하기

다른 값으로 채우기 - ISNULL

SELECT 
    airport_code, 
    airport_name, 
    airport_city, 
    ISNULL(airport_state, 'Unknown') AS airport_state
FROM airports
| airport_code | airport_name                            | airport_city    | airport_state |
|--------------|-----------------------------------------|-----------------|---------------|
| ...          | ...                                     | ...             | ...           |
| SEA          | Seattle/Tacoma International            | NULL            | Unknown       |
| PHL          | Philadelphia International              | Philadelphia    | Unknown       |
| SLC          | Salt Lake City International            | NULL            | Utah          |
| MCO          | Orlando International                   | Orlando         | Florida       |
| TPA          | Tampa International                     | Tampa           | Fl            |
| FLL          | Fort Lauderdale-Hollywood International | Fort Lauderdale | FL            |
| ...          | ...                                     | ...             | ...           |
SQL Server 데이터베이스에서 데이터 정제하기

다른 값으로 채우기 - ISNULL과 AVG

| registration_code | airport_code | carrier_code | canceled |
|-------------------|--------------|--------------|----------|
| ...               | ...          | ...          | ...      |
| 000000128         | JFK          | B6           | 181      |
| 000000129         | JFK          | EV           | 18       |
| 000000130         | JFK          | HA           | NULL     |
| 000000131         | JFK          | HA           | NULL     |
| 000000132         | MSP          | YV           | 0        |
| 000000133         | MSP          | AA           | 15       |
| ...               | ...          | ...          | ...      |
  • NULL을 평균으로 대체합니다.
SQL Server 데이터베이스에서 데이터 정제하기

다른 값으로 채우기 - ISNULL과 AVG

SELECT registration_code, airport_code, carrier_code,
ISNULL(canceled, (SELECT AVG(canceled) FROM flight_statistics)) AS canceled_fixed
FROM flight_statistics
GROUP BY registration_code, airport_code, carrier_code, canceled
| registration_code | airport_code | carrier_code | canceled |
|-------------------|--------------|--------------|----------|
| ...               | ...          | ...          | ...      |
| 000000128         | JFK          | B6           | 181      |
| 000000129         | JFK          | EV           | 18       |
| 000000130         | JFK          | HA           | 65       |
| 000000131         | JFK          | HA           | 65       |
| 000000132         | MSP          | YV           | 0        |
| 000000133         | MSP          | AA           | 15       |
| ...               | ...          | ...          | ...      |
SQL Server 데이터베이스에서 데이터 정제하기

다른 값으로 채우기 - COALESCE

COALESCE ( arg1, arg2, arg3, ... )
SELECT 
airport_code,
airport_city,
airport_state,
COALESCE (airport_state, airport_city, 'Unknown') AS airport_state_fixed
FROM airports
| airport_code | airport_city | airport_state | airport_state_fixed |
|--------------|--------------|---------------|---------------------|
| ...          | ...          | ...           | ...                 |
| SLC          | NULL         | Utah          | Utah                |
| PHL          | Philadelphia | NULL          | Philadelphia        |
| SEA          | NULL         | NULL          | Unknown             |
| ...          | ...          | ...           | ...                 |
SQL Server 데이터베이스에서 데이터 정제하기

연습해 봅시다!

SQL Server 데이터베이스에서 데이터 정제하기

Preparing Video For Download...