본문 바로가기
Python

[데이터 가공, 정규표현식] G마켓 생수 데이터 가공하기 Python

by 지식광부키우기 2021. 7. 19.

안녕하세요. 인문계공돌이입니다.

 

저번에 G마켓 사이트에서 생수 데이터를 수집했는데 분석을 할 수 있는 데이터로 가공해보겠습니다.

 

 

 

데이터 가공 with 정규표현식

 

 

저번에 크롤링한 데이터입니다. 

 

이대로 통계 분석을 하게 된다면 제품 구성 별로 가격이 다르기 때문에 제대로된 분석이 되지 않습니다.

 

용량과 단위를 추출해서 규격을 통일 시키겠습니다.

 

제품명에 보면 2L, 6병 등이 섞여 있습니다. 

 

제가 최종적으로 만들고 싶은 것은 2L * 6 = 12L 와 같은 데이터입니다.

 

 

일단 제주삼다수로 작업을 해보았습니다.

 

 

원하는 숫자 및 문자 추출을 위해 정규표현식을 사용하였습니다.

 

\d는 숫자를 찾습니다.

 

\d만 쓰게 되면 0.5L, 20병의 경우 [0, 5, 2, 0]이 됩니다.

 

제가 원하는 숫자는 0.5와 20이므로 추가적인 조치를 더 취해야 합니다.

 

*는 0회 이상 나타나는 문자열을 찾습니다.

 

즉, \d*라면 \d가 0회 이상 나타나는 문자열을 찾게 됩니다.

 

여기에 \.을 추가함으로써 소수점을 고려하게 됩니다.

 

0.5L의 경우 0.까지를 나타냅니다.

 

\d*\.? 까지가 숫자(소수점 포함)을 찾게되고

 

\d*\.?\d+로 원하는 형식의 숫자를 모두 찾았습니다.

 

여기서 두 가지 방법을 사용하려고 했습니다.

 

list의 길이가 2인 것들만 사용할 것인지

 

아니면 ml등의 문자가 뒤에 붙은 것만 뽑아 내서 할지

 

이번 포스팅에서는 뒤에 ml등의 문자가 추가로 붙은 것으로 진행했습니다.

 

(?=) 전방탐색을 통해 2L 같이 L 앞에 찾고자 하는 문자가 있다는 것으로 해석하게끔 사용했고

 

 

L, ml, ML, Ml 등의 사람들이 설정해놓은 표현이 다양했기 때문에

 

| 즉, or를 사용해서 모두 추출했습니다.

 

 

이렇게 해도 또 2리터, 2L 같이 두 번 들어갈 수 있기 때문에 

 

 

용량 각 값의 리스트의 길이가 1인 것만 필터링했고 그렇지 않은 것은 삭제했습니다.

 

 

병, 페트, PET, 개 등의 앞에 있는 숫자도 추출하기 위해 동일한 작업을 거쳤습니다.

 

 

2L의 2, 6병의 6 등을 잘 추출했습니다.

 

이제 규격을 통일 시킬 차례입니다.

 

 

용량과 단위를 곱해서 새로운 변수 리터를 만들었습니다.

 

하지만 용량에서 100단위가 넘어가는 경우는 단위가 ml였기 때문에 1L = 1000ml인 것을 고려하여 / 1000을 했습니다.

 

 

제주삼다수의 데이터 가공은 끝났습니다.

 

스파클과 롯데칠성 아이시스 역시 똑같이 진행했습니다.

 

 

마지막에 세 데이터 프레임을 합쳤습니다.

 

이제 데이터 가공이 끝났으니

 

다음 번에는 EDA나 통계 분석을 해보겠습니다.

댓글