정규표현식(RegEx)의 활용 1. (contains와 그 flags 활용)

2019. 9. 2. 16:21Programming Tutorial/Python

테이블 형태의 자료구조를 상상해봅시다.

 

Column 중에 Text 정보를 가진 Column에서 일정 패턴 규칙을 가진 Text열을 추출 하고자 할때

 

정규표현식을 이용할수 있겠습니다.

 

관련 활용 예시를 간단히 알아보겠습니다.

 

일단 자료로 쓸 .csv파일을 load해서 추출대상 column을 따로 분리해두도록 합시다.

 

import pandas as pd
import re

hn = pd.read_csv("hacker_news.csv")
titles = hn['title']

pandas는 기본적으로 활용하는 모듈이니 그렇다 치고.

 

re모듈은 정규표현식을 활용하는데 도움을 주는 모듈입니다. 상세한 내용은 별도 포스팅에서 다루겠습니다.

 

hn으로 csv파일 전체를 불러왔고, titles라는 변수에 title열의 정보를 분리해두었습니다.

 

제목정보가 들어있는 모양이네요. 별도의 출력함수로 확인할수 있겠으나 여기서는 생략토록 하겠습니다.

 

이제 'SQL'이라는 글자가 들어있는 titles 열의 개수를 확인해야 하는 Quest가 떨어졌습니다.

 

SQL은 sQl이 될수도 Sql이 될수도 있습니다. 대소문자를 가리지 않는거죠.

 

일단 상기 내용을 다 감안하여 정규표현식을 작성하면 아래처럼 되겠네요.

 

pattern = r"[Ss][Qq][Ll]"
sql_counts = titles.str.contains(pattern).sum()

일일히 문자별로 대소를 다 커버하게 적어줘야 되니 상당히 귀찮습니다. 3글자 이상이되면 더더욱 그렇겠지요.

그리고 contains라는 매서드를 써서 pattern에 맞는 열을 추출하고 sum 매서드로 개수를 확인했습니다.

 

위와같은 정규식 표현을 쉽게 처리하는 방법이 있습니다.

re.I를 contains 매서드에 flags로 지정하여 처리하는 방법입니다.

 

pattern = r"SQL"
sql_counts = titles.str.contains(pattern, flags = re.I).sum()

위와같이 그냥 SQL만 써줘도 flags에 re.I를 할당 했기 때문에 대소문자 변형을 감안하여 추출할수 있습니다.

 

이상 정규표현식을 Data 분석에 활용할때 써먹기 좋은 정보중 하나였습니다.

 

~str.contains(pattern , flags = re.I)  ..

 

잊지말고 기억해야겠네요.