문자열 비교

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...