2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리를 진행토록 하겠습니다.

 

예제 노트북 파일 : Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 강좌 내용을 단계별로 copy&paste 해서 실행하시면 됩니다. 또는, Jupyter notebook을 실행하고 단계별로 실행하셔도 됩니다.

예를 들어, 9_missing_value.ipynb를 생성하고 vscode에서 실행하면, Jupyter notebook이 실행됩니다.(vscode에서 실행도 가능하며, 웹브라우저에서도 실행 가능합니다.)

또는, github 리포지토리를 clone 하신 후, vscode나 Jupyter notebook에서, 위의 노트북 파일을 열면 됩니다. 
 

상세한 환경 구성이 필요하시다면, 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 1. Python 개발 환경 구성 문서를 참조해 WSL, vscode, conda, jupyter notebook 설정을 모두 먼저 완료하시길 권장해 드립니다.

 

 

 

TL;DR

Pandas를 사용하여 중복 데이터와 결측값을 처리하는 방법을 다룹니다. 결측값이 있는 행은 dropna 함수를 사용하여 삭제할 수 있으며, 중복된 행은 duplicated 함수와 drop_duplicates 함수를 사용하여 처리할 수 있습니다.
 

 

Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리

대부분의 머신러닝 알고리즘은 missing value을 발견하면 오류를 리턴합니다. 따라서 DataFrame에서 missing value가 있는 row를 제거해야 합니다.

 

항공편 지연 데이터셋에는 항공편 및 항공편 지연에 대한 정보가 포함되어 있습니다.

import pandas as pd

delays_df = pd.read_csv('Lots_of_flight_data.csv')
delays_df.head()

 

 

info는 DataFrame에 있는 row 수와 각 column에 대해 Null이 아닌 값의 수를 표시합니다. 이를 통해 어떤 column에 null값(missing value)이 있는지 확인할 수 있습니다.

delays_df.info()

=== 결과 ===

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 300000 entries, 0 to 299999
Data columns (total 16 columns):
 #   Column               Non-Null Count   Dtype  
---  ------               --------------   -----  
 0   FL_DATE              300000 non-null  object 
 1   OP_UNIQUE_CARRIER    300000 non-null  object 
 2   TAIL_NUM             299660 non-null  object 
 3   OP_CARRIER_FL_NUM    300000 non-null  int64  
 4   ORIGIN               300000 non-null  object 
 5   DEST                 300000 non-null  object 
 6   CRS_DEP_TIME         300000 non-null  int64  
 7   DEP_TIME             296825 non-null  float64
 8   DEP_DELAY            296825 non-null  float64
 9   CRS_ARR_TIME         300000 non-null  int64  
 10  ARR_TIME             296574 non-null  float64
 11  ARR_DELAY            295832 non-null  float64
 12  CRS_ELAPSED_TIME     300000 non-null  int64  
 13  ACTUAL_ELAPSED_TIME  295832 non-null  float64
 14  AIR_TIME             295832 non-null  float64
 15  DISTANCE             300000 non-null  int64  
dtypes: float64(6), int64(5), object(5)
memory usage: 36.6+ MB

 

이렇게 결과가 출력됩니다.

TAIL_NUM, DEP_TIME, DEP_DELAY, ARR_TIME, ARR_DELAY, ACTUAL_ELAPSED_TIME, AIR_TIME - 이 column들에 missing value가 포함되어 있습니다.

 

Missing value를 처리하는 많은 방법이 있으며, 가장 간단한 방법은 missing value가 있는 행을 삭제하는 것입니다.

dropna는 null(missing value) 값이 포함된 행을 삭제합니다.

delay_no_nulls_df = delays_df.dropna()   # Missing values가 있는 row 삭제
delay_no_nulls_df.info()                 # 확인을 위해 전체 row의 수와 Non-null value 수를 체크

=== 결과 ===

<class 'pandas.core.frame.DataFrame'>
Int64Index: 295832 entries, 0 to 299999
Data columns (total 16 columns):
 #   Column               Non-Null Count   Dtype  
---  ------               --------------   -----  
 0   FL_DATE              295832 non-null  object 
 1   OP_UNIQUE_CARRIER    295832 non-null  object 
 2   TAIL_NUM             295832 non-null  object 
 3   OP_CARRIER_FL_NUM    295832 non-null  int64  
 4   ORIGIN               295832 non-null  object 
 5   DEST                 295832 non-null  object 
 6   CRS_DEP_TIME         295832 non-null  int64  
 7   DEP_TIME             295832 non-null  float64
 8   DEP_DELAY            295832 non-null  float64
 9   CRS_ARR_TIME         295832 non-null  int64  
 10  ARR_TIME             295832 non-null  float64
 11  ARR_DELAY            295832 non-null  float64
 12  CRS_ELAPSED_TIME     295832 non-null  int64  
 13  ACTUAL_ELAPSED_TIME  295832 non-null  float64
 14  AIR_TIME             295832 non-null  float64
 15  DISTANCE             295832 non-null  int64  
dtypes: float64(6), int64(5), object(5)
memory usage: 38.4+ MB

 

원본 DataFrame을 유지할 필요가 없는 경우는 새 DataFrame을 만드는 대신 원본 DataFrame의 row를 삭제하면 됩니다.

inplace=True는 지정된 DataFrame에서 row를 삭제합니다.

delays_df.dropna(inplace=True)
delays_df.info()

=== 결과 ===


<class 'pandas.core.frame.DataFrame'>
Int64Index: 295832 entries, 0 to 299999
Data columns (total 16 columns):
 #   Column               Non-Null Count   Dtype  
---  ------               --------------   -----  
 0   FL_DATE              295832 non-null  object 
 1   OP_UNIQUE_CARRIER    295832 non-null  object 
 2   TAIL_NUM             295832 non-null  object 
 3   OP_CARRIER_FL_NUM    295832 non-null  int64  
 4   ORIGIN               295832 non-null  object 
 5   DEST                 295832 non-null  object 
 6   CRS_DEP_TIME         295832 non-null  int64  
 7   DEP_TIME             295832 non-null  float64
 8   DEP_DELAY            295832 non-null  float64
 9   CRS_ARR_TIME         295832 non-null  int64  
 10  ARR_TIME             295832 non-null  float64
 11  ARR_DELAY            295832 non-null  float64
 12  CRS_ELAPSED_TIME     295832 non-null  int64  
 13  ACTUAL_ELAPSED_TIME  295832 non-null  float64
 14  AIR_TIME             295832 non-null  float64
 15  DISTANCE             295832 non-null  int64  
dtypes: float64(6), int64(5), object(5)
memory usage: 38.4+ MB

 

여러 데이터 소스에서 데이터를 로드하면 중복 row가 생길 수 있습니다.

airports_df = pd.read_csv('airportsDuplicateRows.csv')
airports_df.head()

=== 결과 ===

  Name City Country
0 Seattle-Tacoma Seattle USA
1 Dulles Washington USA
2 Dulles Washington USA
3 Heathrow London United Kingdom
4 Schiphol Amsterdam Netherlands

 

duplicates를 사용하면 중복 row를 찾아냅니다. row가 이전 row와 중복되면 True를 리턴합니다.

airports_df.duplicated()

=== 결과 ===

0    False
1    False
2     True
3    False
4    False
5    False
6    False
7    False
dtype: bool

 

drop_duplicates는 중복 row를 삭제합니다.

airports_df.drop_duplicates(inplace=True)
airports_df

=== 결과 ===

Name City Country
0 Seattle-Tacoma Seattle USA
1 Dulles Washington USA
3 Heathrow London United Kingdom
4 Schiphol Amsterdam Netherlands
5 Changi Singapore Singapore
6 Pearson Toronto Canada
7 Narita Tokyo Japan

 

반드시 결측값을 삭제할 필요는 없습니다. 여러 방법으로, 결측값을 효과적으로 메우는(?) 다양한 방법도 존재합니다.

예를 들어, 평균값을 넣거나, 결측값을 채우기 위한 머신러닝 작업을 수행해, 결측값을 채우는 방법도 있습니다.

 

수고하셨습니다.

 

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/even-more-python-for-beginners-data-tools/09 - Handling duplicates and rows with missing values at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 36257
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 18855
34 Azure Databricks - MLflow를 이용한 머신러닝(5) - Model 배포 file 코난(김대우) 2021.10.14 547
33 Azure Databricks - MLflow를 이용한 머신러닝(4) - Model Registry file 코난(김대우) 2021.10.12 386
32 Azure Databricks - MLflow를 이용한 머신러닝(3) - Project file 코난(김대우) 2021.10.08 364
31 Azure Databricks - MLflow를 이용한 머신러닝(2) - Tracking file 코난(김대우) 2021.10.08 475
30 Azure Databricks - MLflow를 이용한 머신러닝(1) file 코난(김대우) 2021.10.08 502
29 Azure Databricks - Spark에서 머신러닝 분산 처리 file 코난(김대우) 2021.10.07 199
28 PySpark cheat sheet 자료 - RDD, 데이터 처리 file 코난(김대우) 2021.10.01 165
27 PySpark을 이용한 머신러닝 튜토리얼 예제 코난(김대우) 2021.10.01 948
26 Form Recognizer로 문서에서 표 데이터 추출 file 코난(김대우) 2021.01.21 410
25 MLaaS - 12가지의 머신러닝을 먼저 도입한 기업들의 고민 file 코난(김대우) 2021.01.15 800
24 Python 머신러닝 강좌 - 15. Matplotlib으로 데이터 시각화(visualization) file 코난(김대우) 2021.01.09 819
23 Python 머신러닝 강좌 - 14. NumPy와 Pandas 코난(김대우) 2021.01.09 768
22 Python 머신러닝 강좌 - 13. 모델의 정확도 평가(accuracy evaluating) 코난(김대우) 2021.01.09 1747
21 Python 머신러닝 강좌 - 12. 머신러닝 모델 테스트 코난(김대우) 2021.01.09 1068
20 Python 머신러닝 강좌 - 11. scikit-learn으로 선형회귀(linear regression) 모델 머신러닝 트레이닝 수행 코난(김대우) 2021.01.08 433
19 Python 머신러닝 강좌 - 10. 머신러닝을 위해 scikit-learn으로 트레이닝 데이터와 테스트 데이터 분할 코난(김대우) 2021.01.08 620
» Python 머신러닝 강좌 - 9. 중복데이터와 결측값(missing value) 처리 코난(김대우) 2021.01.08 303
17 Python 머신러닝 강좌 - 8. Pandas DataFrame 컬럼(column) 분할(split)과 삭제(remove) 코난(김대우) 2021.01.08 449
16 Python 머신러닝 강좌 - 7. Pandas DataFrame으로 CSV 파일 읽고 쓰기 코난(김대우) 2021.01.08 615
15 Python 머신러닝 강좌 - 6. CSV 파일과 주피터 노트북 file 코난(김대우) 2021.01.08 557





XE Login