STEP 05. PYTHON으로 크롤러 만들어서 데이터 가져오기
이번에는 정식으로 코드를 짜서 가져오도록 하겠습니다. 정보를 긁어올 것은 검색어별 네이버 블로그 제목과 날짜, 간단한 내용입니다. 이런 크롤러를 어떻게 만드는지는 우선 이번 프로젝트가 끝난 이후 기본적인 설치부터 하나하나 설명하는 시간을 가져보겠습니다.
위 크롤러는 검색어를 옵션으로, 블로그 제목, 게시 날짜, 내용 일부를 가져오는 것이라 코드가 200줄 정도로 그리 길지 않습니다. 해당 코드를 통해 데이터를 가져와봤는데요. 사실 이렇게 데이터를 가져올 때도 개인적으로 다른 작업을 해야하니 HEADLESS MODE를 설정하고, 파일로 만들어 실행하는 것을 추천합니다.
실행파일로 할 경우 하나의 검색어라도 구간 별 옵션 등을 넣는다면 동시에 여러 페이지의 데이터를 수집할 수 있기도 하고, 여러 검색어로 동시에 가져올 수도 있어 데이터 수집하는 시간을 대폭 줄일 수 있습니다. 물론 다른 일을 하거나 잠을 자면서 모을 때는 그 숫자를 그리 늘리지 않아도 됩니다.
만약 여러 크롤러를 pyinstaller를 이용해 실행 파일을 만든 뒤 동시에 돌리면 아래와 같이 진행됩니다.
모든 작업이 백그라운드에서 이루어지는 HEADLESS MODE이다보니, 작업이 어떻게 진행되는지 파악하기 힘들어 실행화면을 켜둔 상태입니다. 이렇게 과부하가 일어나지 않는 선에서 동시에 여러 개의 크롤링을 진행하게 되면 대폭 시간을 아낄 수 있습니다.
네이버 블로그를 키워드와 크롤링할 건 수를 입력받아 작업하는 크롤러를 실행해보았습니다. 작업 시간에 하나로 몇 만 개의 크롤링을 진행하면 시간이 오래 걸리니 위처럼 몇 천개 정도씩만 진행해보도록 하겠습니다.
여러 개의 크롤러를 동시에 돌려 각 키워드 별로 2,500건 정도의 데이터를 수집했습니다. 블로그, 카페, 뉴스에서 2~4가지 키워드로 데이터 크롤링을 하는데 20분 정도 걸린 것 같습니다.
이렇게 PYTHON과 같은 외부 프로그램을 통해 크롤링해서 저장한 데이터는 POWER BI에서 자체적으로 수행했을 때보다 오류가 발생이 적고 원활하게 돌아갑니다. 불러들인 정보 중에서 게시일이 날짜가 아닌 '몇 시간 전~'과 같은 식으로 표시된 항목들을 [오류 값 바꾸기] 기능을 이용해 오늘 날짜를 입력해주었습니다.
일정 빈도수 이상 나온 키워드만을 반영한 워드 클라우드입니다. 크롤링을 2,500개 정도밖에 하지 않았더니 해당 데이터가 전부 2020년 데이터여서 오늘 밤 자기 전에 만 개 단위의 크롤러를 돌려놓고 자야할 것 같습니다.
STEP 06. R로 데이터 전처리 하기
이전 과정에서 보이는 바와 같이 크롤링한 데이터를 무작정 시각화했다가는 검색한 키워드가 제일 많이 나오거나 의미없는 단어들이 반복되며 높은 값을 가지고 노출되는 등의 문제가 발생합니다. 때문에 이러한 불필요한 데이터를 처리하기 위해 R의 도움을 받아보겠습니다.
우선 데이터를 정제하기 전에 예외처리할 사항을 만들어보도록 하겠습니다. 이러한 예외어 처리 사전을 만들 때, 작은 길이의 글자가 먼저 처리되며 중간이나 뒷부분에 적힌 긴 글자가 처리되지 않는 경우도 있으니 긴 글자부터 첫 열에 오도록 정렬해두는 것이 좋습니다.
다음으로는 R Studio를 실행합니다.
R을 통해서 KoNLP 라이브러리를 불러온 뒤, useNIADic 사전을 불러와 해당 사전의 기준으로 크롤링한 데이터들을 명사 기준으로 분류한 모습입니다. 이후 하나의 행에 여러 요소가 들어가있으므로, 이를 unlist 함수를 사용해 각각의 행으로 분할해주겠습니다(list 형태를 vector 형태로 바꿔주는 과정입니다).
이렇게 명사 기준으로 분류된 것들을 다시 한 번 정제해주겠습니다.
사전에 만들어둔 예외사전의 내용을 txt0에 불러왔습니다. 안의 내용이 제대로 들어왔는지 확인하고(만약 글자가 깨져서 이상하게 보인다면 encoding을 변경하면 됩니다), 이를 기준으로 간단한 반복문을 사용해 예외사전에 있는 내용을 제거해주겠습니다.
30행 코드에서는 숫자를 제거하고,
31행 코드에서는 특수문자를,
32행 코드에서는 빈칸을,
33행 코드에서는 지금까지의 제거해주는 과정에서 생긴 빈 행을 없애주었습니다.
33행은 정확히 말하자면 빈행이 없는 행만을 다시 가져온 것입니다.
36행 코드에서는 지금까지의 정제 과정에서 혹여나 남게된 한 글자짜리 데이터를 모두 제거했습니다.
그렇게해서 남은 글자를 보니(38행 코드), 총 8만 개 정도가 남았네요.
이를 40행 코드에서 테이블 형식으로 wordcount 라는 변수에 저장한 뒤, 이를 42행에서 많이 반복된 순서대로 정렬시켰습니다. 이렇게 보니 '코스'라거나 '가능', '사람'과 같이 여전히 정제해야할 거 같은 단어들이 남아있어 다시 한 번 정제해보겠습니다.
이상 네이버 블로그에서 2,500건의 키워드 검색 데이터를 가져와 문자를 정제해보는 과정이었습니다.
이후에는 이러한 더 많은 데이터를 정제함으로써 각 연도의 트랜드를 분석하고, 연도별로 인기있는 장소는 어떠했고, 여행 트랜드는 어떠했는지, 그래서 결국 앞으로의 트랜드는 어떻게 될 것인지에 대해 예측해보는 시간을 가져보겠습니다.