문자열 비교

Python으로 데이터 정제하기

Adel Nehme

VP of AI Curriculum, DataCamp

이번 장에서 다룰 내용

 

 

 

 

 

 

4장 - 레코드 결합

Python으로 데이터 정제하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸는 최소 단계 수

Python으로 데이터 정제하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸는 최소 단계 수

Python으로 데이터 정제하기

최소 편집 거리

Python으로 데이터 정제하기

최소 편집 거리

현재 최소 편집 거리: 2

Python으로 데이터 정제하기

최소 편집 거리

최소 편집 거리: 5

Python으로 데이터 정제하기

최소 편집 거리

 

Python으로 데이터 정제하기

최소 편집 거리 알고리즘

알고리즘 연산
Damerau-Levenshtein 삽입, 치환, 삭제, 전치
Levenshtein 삽입, 치환, 삭제
Hamming 치환만
Jaro distance 전치만
... ...

 

가능한 패키지: nltk, thefuzz, textdistance ..

Python으로 데이터 정제하기

최소 편집 거리 알고리즘

알고리즘 연산
Damerau-Levenshtein 삽입, 치환, 삭제, 전치
Levenshtein _삽입_, _치환_, _삭제_
Hamming 치환만
Jaro distance 전치만
... ...

 

가능한 패키지: thefuzz

Python으로 데이터 정제하기

간단한 문자열 비교

# 두 문자열을 비교합니다
from thefuzz import fuzz

# reeding vs reading 비교 fuzz.WRatio('Reeding', 'Reading')
86
Python으로 데이터 정제하기

부분 문자열과 다른 순서

# 부분 문자열 비교
fuzz.WRatio('Houston Rockets', 'Rockets')
90
# 순서가 다른 부분 문자열 비교
fuzz.WRatio('Houston Rockets vs Los Angeles Lakers', 'Lakers vs Rockets')
86
Python으로 데이터 정제하기

배열과의 비교

# process 임포트
from thefuzz import process

# 문자열과 후보 배열 정의
string = "Houston Rockets vs Los Angeles Lakers"
choices = pd.Series(['Rockets vs Lakers', 'Lakers vs Rockets', 
                     'Houson vs Los Angeles', 'Heat vs Bulls'])

process.extract(string, choices, limit = 2)
[('Rockets vs Lakers', 86, 0), ('Lakers vs Rockets', 86, 1)]
Python으로 데이터 정제하기

문자열 유사도로 범주 통합

2장

.replace()로 "eur"를 "Europe"으로 통합

 

변형이 너무 많다면?

"EU", "eur", "Europ", "Europa", "Erope", "Evropa"...

 

                                                                                                문자열 유사도!

Python으로 데이터 정제하기

문자열 매칭으로 범주 통합

print(survey['state'].unique())
id          state
0      California
1            Cali
2      Calefornia
3      Calefornie
4      Californie
5       Calfornia
6      Calefernia
7        New York
8   New York City
...
categories
  state
0 California
1 New York
Python으로 데이터 정제하기

모든 주 이름 통합하기

# 각 올바른 범주에 대해
for state in categories['state']:

# 오타가 있는 상태값에서 잠재적 일치 찾기 matches = process.extract(state, survey['state'], limit = survey.shape[0])
# 각 잠재적 일치에 대해 for potential_match in matches: # 유사도 점수가 높으면 if potential_match[1] >= 80:
# 오타를 올바른 범주로 교체 survey.loc[survey['state'] == potential_match[0], 'state'] = state
Python으로 데이터 정제하기

레코드 결합

레코드 결합

Python으로 데이터 정제하기

Vamos praticar!

Python으로 데이터 정제하기

Preparing Video For Download...