brunch

You can make anything
by writing

C.S.Lewis

네이버 API를 사용한 검색어 트렌드 크롤링 툴-1부

네이버 API 검색어 크롤링을 활용해서 코스피 상장기업 트렌드를 살펴보자

'바닥부터 시작하는 데이터 사이언스' 에서는 본인이 데이터 사이언스를 공부하며 작성했던 코드와, 나름의 미니 프로젝트를 게시할 예정이다. 직접 작성 외에 다른 곳에서 그대로 가져온 코드는 거의 없지만, 가끔 참고를 통해 변형한 코드가 있을 수 있고 이러한 경우엔 출처를 게재할 것이다. 


(프로그래밍, 또는 DS관련 지식에 있어 미숙한 점이 있을 수 있으니, 부정확한 정보가 있다면 지적해주시면 감사하겠다.)


시작은 이랬다..


처음엔 급상승 검색어 데이터를 크롤링해 볼 생각이었다


언젠가부터 네이버는 '네이버 데이터랩'이라는 서비스를 통해 일반 사용자들이 리서치, 연구, 등 각종 목적을 위해 데이터를 손쉽게 사용하도록 모아 제공하기 시작했다. 실제로 네이버 웹을 통해 크롤링을 한다면 웹 상에 현재 올라가있는 실시간 검색어와 같은 데이터들은 긁어모을 수 있지만, 때론 지금까지 네이버에 검색되었던 검색어들의 '행적' 이 필요할 때가 있다. 예를들어 어떤 검색어가 어느 시기에 많이 검색되었는지, 등을 알고 싶은 경우에는 과거의 검색 데이터가 필요하고, 이것은 네이버만이 소유하고 있는 데이터이다. 그런데 이 데이터들을 아주 예쁘게 정리해서 공개한 것이다. 



예를들면 이런식으로, 원하는 시기의 급상승 검색어들을 볼 수가 있다. 나는 문득 이러한 네이버의 과거 검색어들을 좀더 자유롭고 유연하게 활용할 수는 없을까 하는 생각이 들었다. 네이버 데이터랩 서비스는 과거 데이터에 대한 정보를 얻고 싶다면 지금 제공하는 서비스로 충분하지만, 각종 검색어의 과거 데이터를 시계열 정보 (시간 정보) 와 함께 전부 긁어온다면 더 유용한 분석을 많이 할 수 있을 것 같았다. 


예를들어, 위의 스크린캡쳐 화면에만 봐도 세계적인 게임회사 라이엇게임즈 (Riot Games)의  '롤' 점검과, 그의 경쟁사인 블리자드 (Blizzard)의 '오버워치'가 나란히 인기검색어에 들어와 있다. 이렇게 당시에 어떤 일이 일어났느냐에 따라 관련이 있는 검색어들이 함께 검색되곤 한다. 여기서 만일, 지금까지 모든 인기검색어의 시계열 데이터를 얻을 수 있다면 우리는: 


1) 특정 검색어가 인기 검색어에 올랐을 시기의 인기검색어들만을 골라내어 시계열로 만든다

2) 주로 어떤 검색어가 특정 검색어와 함께 인기검색어에 오르는 경향이 있는지 빈도를 체크하고 시각화한다 

3) 특정 검색어가 인기 검색어가 오를 때, 함께 나타나는 인기 검색어들을 분석해 주로 어떤 '배경'에서 특정 검색어가 많이 검색되는지 찾아본다


와 같은 과정을 통해 단지 눈으로 볼때는 쉽게 놓치곤 했던 정보들을 얻을 수 있지 않을까? 예를들어, 우리는 저 스크린샷 속의 '롤', '오버워치', '리니지' 에 검색어를 보고 쉽게 '게임'이라는 공통점을 떠올리면서, 세 검색어가 함께 다량으로 검색된 것을 자연스럽게 받아들일 것이다. 


그런데 이번엔 다음과 같은 경우를 생각해보자. 모바일 앱을 플랫폼으로 하는 퀴즈 프로그램 중 '잼라이브'라는것이 있다. 매일 정해진 시간에 인터넷 방송의 형식으로 진행자가 퀴즈 문제를 내고, 참여자들은 스마트폰 앱으로 접속해 실시간으로 퀴즈를 맞추는 형식이다. 총 12문제가 제시되며, 한문제라도 틀리게되면 그 사용자는 탈락이고, 마지막까지 남는 사용자들이 상금을 전부 나누어 가지는 방식이다. 모든 문제가 3지선다형에, 3초안에 맞춰야 하지만 많은 이들이 순발력과 동체시력을 이용해 검색을 활용하는 모양이다. 


실제로 이 퀴즈쇼의 동시접속 인원은 적게는 6만 명에서 많게는 10만명이 넘어가기도 한다. 그래서인지 자연스럽게 이 퀴즈가 진행되는 15분정도의 짧은 시간동안, 퀴즈에 나온 문제와 관련된 검색어가 네이버 인기검색어에 올라갈 때가 있다. 자, 이제 위의 스크린샷 속 2018년 10월 10일 오후에, 이 퀴즈쇼가 시작됬다고 가정해보자. 1번 문제가 '2018 지방선거가 치뤄지는 월은 몇 월인가?' 이다. 10만 명 중 1만명이 동시에 '지방선거'를 검색해서 '명성교회'를 제치고 검색어 1위로 올라갔다. 3초라는 제한시간때문에 당황한 5천명 정도의 사람은 얼떨결에 '달력'을 검색해버려서 달력이 검색어 7위에 올랐다. 뒤이어 서태지와 양현석이 속해있던 그룹의 이름을 묻는 문제가 나오자 8천명이 '서태지'를 검색했다. 


이 퀴즈쇼에 참여하지 않은 사람들은 지방선거와 서태지, 그리고 달력이 왜 갑자기, 매우 뜬금없이 실시간 검색어에 올랐는지 어리둥절할 것이다. 평소에 이 퀴즈쇼에 참여해본 경험이 있는 이들 중 일부는 '뜬금없이 올라오는걸 보니 퀴즈쇼에 관련 문제가 나왔나?' 생각할지도 모르지만, 인기검색어 순위만 가지고 이렇게 표면적으로 드러나지 않는 연관성, 그리고 그 배경에 있는 현상 (이 경우는 퀴즈쇼)를 짚어내기는 어렵다. 


만일 이 모든 검색어 데이터를 시간대별로 소유하고 있다면, 퀴즈쇼가 진행되는 시간을 기점으로 전후 한시간동안, 갑자기 등장했다가 사라진 검색어들을 중심으로 골라내어 퀴즈쇼에 어떤 문제가 나왔는지 추론할 수 있지 않을까?


앞서 이야기한 것은 하나의 예시일 뿐이지만, 일단 급상승 검색어의 데이터를 시간대별로 긁어오면 유용하고 재미있는 분석을 많이 할 수 있을것만 같은 기분이었다.



어디부터 시작해볼까?


일단 왠지 자체적으로 데이터를 소유하고 관리하고 있기 때문에 (= 웹상에 그냥 떠돌아다니는 정보가 아니기에) API 를 통해 접근 권한을 줄 것 같은 느낌은 들었다. 그래도 혹시, url 주소를 통해 접근해서 html 을 긁어올 수 있지 않을까 하는 생각해 시도는 해 보았다. 위의 스크린샷 상단을 보면, url이 다음과 같이 되어있는 것을 볼 수 있다. 

https://datalab.naver.com/keyword/realtimeList.naver?datetime=2018-10-10T05:59:30

'https://datalab.naver.com/keyword/realtimeList.naver?

까지는 데이터랩의 실시간 급상승 검색어 데이터를 조회하는 페이지로 이어지고, 뒤의 datetime에 내가 설정한 시간대가 나온다. 그럼 Python을 통해 저 부분만 내가 원하는 시간대들로 대체해주고, 내가 원하는 시간대의 검색어 순위를 보여주는 url을 손쉽게 생성할 수 있다는 말이다. 여기서 문제는, 저 url을 통해 정말 깔끔하게 접근이 되느냐 하는 것이다. 


Python의 Beautifulsoup 과 urllib 의 request를 사용해 한번 url에 접근해 html을 긁어와보자. (브런치에 코드를 첨부하는 방법을 몰라 스크린샷으로 삽입하겠다)

soup을 출력해보니 html  코드로 보이는 무언가가 나왔다!

그러나...


다시 자세히보니 역시나, 접근할 수 없다는 내용을 알리는 html페이지였다. 


https://developers.naver.com/main/ 

위 링크를 통해 Naver Developer로 가면 네이버가 공개한 각종 오픈 API 를 활용할 수 있으며, 네이버가 어떤 API 들을 제공하며 API 들 별로 가이드라인이 아주 상세하게 나와있다. 간단한 과정을 거치면 애플리케이션을 만들 수 있고, API 접근 권한을 얻을 수 있다. 



그런데, 안타깝게도 실시간 / 급상승 검색어 API는 과거 지원했었지만 더 이상 지원하지 않는다고 한다..



방향 전환 - 통합 검색어 트렌드 API 활용해보기


https://developers.naver.com/docs/datalab/search/#python

통합 검색어 트렌드 API 는 공개하고 있었기에 이걸 활용해 뭔가 흥미로운 분석툴을 만들 수 있지 않을까 싶은 생각이 들어 방향을 전환하게 되었다. 이는 네이버 트렌드 (https://datalab.naver.com/keyword/trendSearch.naver) 에서 기본적으로 제공하는 기능이지만, 주제어의 갯수가 5개로 제한되어있기 때문에 일일히 검색어를 5개씩 입력하고 데이터를 따로 내려받아야 하는 불편함이 있다. 


API 를 이용해 파이썬을 활용하면 무제한으로 주제어를 검색할 수 있을 뿐 아니라, 문자열 포맷팅을 통해 루프를 돌림으로써, 검색 트렌드를 알고싶은 검색어의 수가 굉장히 많은 때 (ex. 사전이나, 문서 등에 있는 단어 여러개에 대해 모두 검색어 트렌드를 긁어오고 싶을 때, 네이버 트렌드를 이용하면 일일히 수기로 검색어를 입력해야 하지만, API 와 파이썬을 활용하면 이러한 작업을 자동화 할 수 있다.)


우선, 가이드라인을 따라 코드를 작성해보면 다음과 같다. 

API 를 통해 데이터 크롤링을 할 수 있는 링크를 제공해주고 있으며, request 할 때 헤더에 API 허가를 받았다는것을 승인받기 위해 정보를 추가한다. 


body 부분에는 json의 데이터 형식으로 여러가지 파라미터를 설정하게 되어있다. 

- 검색하고자 하는 기간

- 검색 기간의 시간 단위 (일별/주별/월별/ 설정 가능)

- 주제어와 검색어 설정

- 모바일 / PC 검색

- 성별

- 나이


등을 입력할 수 있다. 


이렇게 써놓고보니 네이버 트렌드에서 기본적으로 제공하는 기능 그 이상 특별한 점은 없어보이지만, 코딩을 통해 자동화할 수 있고, 검색어의 수가 제한이 없다는 점에서 활용성은 훨씬 높을 듯 싶다. 또, 네이버 API 를 처음 활용해보는 입장에서는 좋은 출발점인 것 같다. (다음부터 네이버 API 가 제공하는 모든 기능을 하나씩 사용해보고 포스팅해볼까 한다.)


실험삼아 2017년 1월 1일부터 2019년 2월 27일까지, 주제어 및 검색어를 삼성 (Samsung) 으로, 일 간격으로 데이터를 뽑아보았다. 



json 으로 되어있기에, 일련의 과정을 거쳐 DataFrame으로 만들어보도록 하겠다. 


DataFrame으로 만들었다
API를 이용해 얻은 데이터로 그린 차트

플롯팅을 해서, 네이버 트렌드 서비스의 그것과 비교해보자


네이버 트렌드에서 얻은 차트


당연한 결과지만 정확히 일치하는 그래프가 나왔다. 

일단 API를 이용해 검색어 트렌드를 긁어오는것에는 성공이다!



한 걸음 더


여기까지는 아직 네이버 트렌드를 이용하는 것에 비해 메리트가 전혀 없다. 그저 코드를 짜는 수고로움만 있을 뿐... 사실 애초에는 시간대별로 '실시간 급상승 검색어'를 크롤링하려고 시작한 일인데 API 가 지원을 하지 않기에 아쉬운대로 지원하는 API들을 활용해보자 해서 시작하게 된 일이다. 그리고 이 검색어 트렌드 API 는 다른 API 들에비해 비교적 간단하고, 연습삼아 시작하기에 좋은 시작점으로 보였다. 


그래도 이왕 API 를 활용하는거, 어떻게하면 실질적으로 유용하게 활용할 수 있을까 생각해보게 되었다. 내가 당장 앱을 만든다면, 검색 트렌드를 활용하는 기능을 탑재시킬 수 있겠지만 나는 당장 앱을 개발할것도 아니고, 앞으로 리서치나 시장조사 등을 할 때 활용할만한 더 유용한 툴을 구비해놓고 싶은 정도다. 


그럴 때 네이버 트렌드 자료는 매우 유용하다. 그래프로 보여줄 뿐 아니라 엑셀로 시계열 데이터를 다운받을 수도 있다. 실제로 과거에, 사회적기업과 관련된 시장조사를 하며 네이버 트렌드에서 얻은 자료를 활용한 적이 있었다. 


그런데 여기에는 치명적인 걸림돌이 한가지 존재했다. 우선, 수기로 주제어와 단어를 매번 입력해주어야 한다. 이는 검색어의 수가 적을때는 괜찮지만, 주제어가 아주 많아지면 일일히 수기로 입력해야 하고, 오타가 날 가능성도 배제할 수 없게 된다. 


또한, 무엇보다도 주제어 설정이 다섯 개가 최대이다. 따라서 한번에 다섯 개의 주제어에 대해서밖에 검색할 수 없으며, 엑셀로 내려받을때 역시 다섯 개씩 끊어서 엑셀 파일을 생성해야 한다. 심지어는 그래프와, 엑셀 파일 상의 수치가 '절대적인 수치'가 아닌, 내가 입력한 다섯 개의 주제어들의 상대적인 백분율 값으로 스케일링해서 보여주기 때문에, 엑셀 파일들 사이에 스케일 차이가 발생한다. 


실제로 작년 즈음, 여러 사회적기업들에 대한 인지도를 조사하기 위한 수단 중 하나로 네이버 트렌드를 선택했었는데, 약 30개에 달하는 기관들에 관련된 검색어를 입력하다보니 7개의 엑셀 파일이 생성되었고, 각 엑셀 파일간 '트렌드'를 나타내는 인덱스는 다른 스케일을 가지고 있어서 함께 활용할 수가 없었다. 그래서 기준이 되는 하나의 검색어를 정해놓고, 그 검색어를 기준으로 모든 파일의 값들의 스케일링 비율을 계산해 변환해야 했다. 나는 약 30개의 검색어와 7개의 엑셀 파일에 대해 10번 남짓 한 변환만을 거치면 되었지만, 만일 검색해야 할 검색어의 수가 훨씬 많아진다면 그땐 정말 일일히 계산해서 한줄 한줄 데이터 값을 변환하는데만 며칠이 걸릴수도 있다. 


그런데 파이썬과 API 를 사용하면 첫째로 검색 주제어의 갯수의 제약이 없어진다. 또, 코드를 잘만 짜면 아무리 많은 검색어에 대해서라도 '리스트' 만 가지고 있다면 크롤링, 시각화, 그리고 정형화를 자동화할 수 있을 것 같았다. 프로그래밍 전공자가 아니기에 코딩 실력이 미숙하지만 한번 해보기로 했다. 


입력 검색어를 여러 개, 더 편하게, 자동으로 입력할 수 있게 만들기


일단 자동화를 하려면 '검색하고자 하는 주제어의 리스트' 가 있다고 가정하고, 리스트 안에 있는 검색어들에 대해 루프를 돌면서 위에서 코드로 짠 과정을 반복하는 방식이어야 할 것 같다. 문제는 네이버의 API 는, 검색어를 입력하는 파라미터가 json의 형식으로 되어있다는 점이다. 


body = "{\"startDate\":\"2017-01-01\",\"endDate\":\"2017-04-30\",\"timeUnit\":\"month\",\"keywordGroups\":[{\"groupName\":\"한글\",\"keywords\":[\"한글\",\"korean\"]},{\"groupName\":\"영어\",\"keywords\":[\"영어\",\"english\"]}],\"device\":\"pc\",\"ages\":[\"1\",\"2\"],\"gender\":\"f\"}"; 

이렇게, json 형식의 string으로 파라미터를 정의하게 되어 있다. 


json 타입의 데이터가 나에겐 좀 낫설지만, 이리저기 만저보면서 string <> json <> dictionary 사이를 왔다갔다 하며 사용할 수 있다는 감이 왔다. 내가 알기로 json을 사용하는 이유는 자바스크립트, 파이썬 등 여러 플랫폼을 넘나들며 사용할 수 있는 데이터타입이기 때문이며, 파이썬도 자체적으로 json을 다룰 수 있도록 모듈이 제공된다. (그런데 난 왠지 파이썬에서 json을 다루는게 썩 편하지가 않다.)


일단은 위에 짠 코드에서 '삼성'을 검색어로 해서, 파라미터 설정 부분에 여러가지 시도를 해보자




네이버가 제공한 가이드에는 파라미터를 json 형식의 string으로 지정해줬다. 그런데 string 안에 '검색어'를 입력해줘야 하기 때문에 루프를 사용하거나, 자동화하기가 상당히 까다로울 것 같다. 일단 포맷팅을 사용해 검색어를 파라미터 안에 집어넣을 수 있는지 시도해봤다. 


json형태이더라도 어쨌든 python string이기때문에 포맷팅을 하더라도 문제없이 실행된다. 그러나, 검색어의 갯수가 고정적이지 않기때문에 keyword라고 정의한 string 안에 유연하게 검색어를 끼워넣기가 쉽지가 않다.


그래서 아예 파라미터를 dictionary 형태로 정의해주고, json.dumps와 json.loads를 이용해 스트링형태와 json을 오가며 사용할 수 있게 해보면 되지 않을까 싶었다. 



body_dict에 파라미터를 딕셔너리 형태로 만들어주고, json.dumps를 이용해 이것을 json 형태인 str으로 바꿔준다. 그러면 네이버에서 제공해준 것과 똑같은 파라미터가 된다. 


그럼 이제 할 일은, 딕셔너리형태의 저 파라미터를 pythonic하게 주무를 수 있도록 만드는 일이다. 


이런 방식으로 코드를 짜면 될 듯 하다:

>body_dict를, keywordGroups 키만 제외하고 만들어둔다.

>body_dict 딕셔너리의 keywordGroups 키에 대응하는 value가 될 빈 리스트를 만든다. (v_list라 하겠다)

>검색하고자 하는 검색어의 리스트를 받는다. (wordlist 라 하겠다)

>wordlist 안의 모든 값 (i라고 하겠다) 에 대해 v_list의 원소로써 {"groupName" :  "i", "keywords" : ["i"]}를 추가해준다. 만일 연관 검색어나, 해당하는 사항의 트렌드와 양의 상관관계가 있을만한 키워드들을 keywords에 함께 넣어준다. (ex. 삼성과 Samsung, 삼성전자 등)



코스피 상장 주식 리스트된 종목들 트렌드 모아보기


그럼 실제로 데이터셋을 구해서 활용해보자. 나는 대한민국 대표 기업공시채널 - http://kind.krx.co.kr/corpgeneral/corpList.do?method=loadInitPage 에서 코스피 상장 기업 트렌드를 살펴보고자 데이터를 가져왔다. 데이터는 대충 이렇게 생겼다. 


일단 회사명을 주제어로 입력해, 회사명을 사람들이 시기별로 얼마나 검색했는지 종목별로 살펴보는게 목표이다. 추가적으로 회사와 직접적으로 관련이 있는 대표자명, 그리고 주요제품에 포함된 단어들을 키워드로 포함시켜 볼 생각이다. 


먼저 pandas DataFrame형식으로 파일을 불러와서, '회사명'컬럼만 따로 떼어 회사명들이 들어간 하나의 array 를 만들어준다. 그 다음 모든 회사명을 body_list의 주제어와 검색어로 설정해준다.


하이라이트 한 부분의 코드를 통해 거의 775개에 달하는 회사명을 검색어로 설정했다! 만일 네이버 트렌드를 이용했다면 5개씩 끊어 155번에 걸처, 일일히 손으로 입력했어야 했을 작업이다. 


여기에 추가적으로 keywords에, 데이터셋에서 구할 수 있는 연관된 단어들을 입력함으로써 단순히 '회사명'의 검색 트렌드가 아닌, 그 회사와 관련된 검색 트렌드를 구체적으로 뽑아보자. 


지역과 같은 정보는 너무 '일반적'이기 때문에 회사나 종목과 연관없는 검색결과가 더 많을 확률이 높다. 반면 대표자명은, 회사와 주식과 밀접한 연관이 있는 사유로 많이 언급되기 때문에 관련성이 있을 수 있다. 


대표자명만 따로 column을 떼어 살펴보면, 대표자명의 표기법이 제각각이다. 여기서 한번 텍스트를 정제해야겠다. 

자세히 살펴보면 대표자명을 표기하는데 크게 방법이 크게:

- 깔끔하게 석 자가 기재된경우 (ex. 홍길동)

- 이름의 각 글자를 띄어쓰기한경우 (ex. 홍 길 동)

- 대표자가 여러명이어서 콤마로 구분한경우 (ex. 홍길동, 김갑돌)

- 대표자가 여러명인데 콤마로 구분 + 뒤에 괄호와 함께 꼬리말이 붙은경우 (ex. 홍길동, 김갑돌 (각자 대표))

- 그외 다수


로 나뉘는데, '그외 다수' 에 해당하는 기업들의 경우 극히 소수이다. 100% 정확하게 정제하는 것은 어려울 듯 싶다. 먼저 괄호와 함께, 괄호 안에 있는 '각자 대표이사'라는 말을 모두 제거하자. 

df["대표자명"].apply(lambda x: re.sub(r'\(.*\)', '', x))

이를 위해 regex (정규 표현식)을 사용했는데, 정규 표현식의 사용법이 익숙치 않아 stack overflow 를 참고했다. 


그 다음으론, 이름 사이의 띄어쓰기와, 여러 명이 대표로 기재된 경우를 해결해야 한다. 언뜻 보면 ',' 와 ' ' (콤마와 여백) 을 기준으로 split하면 될 것 같지만 (홍길동, 김갑돌 >>["홍길동", "김갑돌"], 한 사람의 이름을 모두 띄어쓴 경우가 분해되어버린다. (ex. 홍 길 동 >> ["홍", "길", "동"]으로 세 명이 되어버린다)


그런데 생각해보면 이름이 대부분 세 글자 혹은 두 글자이며, 한 사람의 이름이 네 글자를 넘어가는 경우가 있어도 극히 드물다. 따라서 공백을 제외한 string의 length 가 5 이상이라면 두 명 이상일 확률이, 3이하라면 한 명일 확률이 아주 높다. 이 점을 이용해 공백과 콤마를 제외한 string의 길이가 5 이상이라면 그낭 ' ' 와 ','를 기준으로 split 해버리고, 그렇지 않다면 한 명으로 간주하고 regex를 활용해 모든 특수문자를 제거해 한 명의 이름으로 만들자. 


df["대표자명"].apply(lambda x: [re.compile('[^ㄱ-ㅣ가-힣]+').sub("",x)] if len(re.compile('[^ㄱ-ㅣ가-힣]+').sub("",x)) < 5 else re.findall(r"[\w']+", x))

물론 100% 깔끔한 정제는 되지 않겠지만, outlier의 수는 극히 적으므로 유의미한 attribute이 되지 않을까 싶다. 


이정도면 전체적으로 깔끔한 수준으로 정리되었다. 


이제 다음과 같은 코드를 통해 네이버 트렌드 검색 인풋으로 회사 이름과, 대표의 이름들이 들어가게 되었다. \



그럼 이제 과연 크롤링이 될 것인가..?


그런데 예상치 못한 request오류가 발생했다. 처음에는 파라미터 값이나, json 데이터 형식을 입력하는 코드를 잘못 짠 줄 알고 여기서 몇 시간을 헤맸다. 그러던중 혹시나 해서 입력값의 수를 5개 이하로 잡고 다시 요청을 해 봤더니 요청이 잘 된다. 네이버 트렌드 기능의 5개 요청 제한은 웹 서비스상에서 5개만 넣을 수 있도록 만든게 아니라, 애초에 요청이 5개까지밖에 안되는 거였다. 



5개씩 분할 요청 및 스케일링 자동화하기 (2부에서 계속)


그렇지만 여기서 포기할 수는 없다. 여전히 5개씩 입력해야 하고, 여전히 5개단뒤로 비율을 계산해 스케일링을 해야 하지만, API와 파이썬을 이용하면 이 단순노동을 자동화할 수 있을 것 같다. 이리저리 검색해보니 나와 비슷한 생각을 가지고 활용하보는 이들이 꽤 있는것 같다. 


이제 위에서 json 형식으로 만든 파라미터를 가지고, 

>> 755개의 input을 5개씩 끊고, 

>> 5개씩 끊은 매 그룹마다 루프를 돌려 request를 통해서 트렌드 데이터를 긁어온다

>> 그 다음, '기준이 되는 값'에 대해 스케일링한다. 그러기 위해서는 '기준'은 모든 그룹에 포함시켜야 할 것이다. 예를들어 기준이 되는 'A'라는 회사가 첫 번째 결과에서 60이라는 수치를 출력했다고 하자. 그러면 매번 5개의 검색어 중 A를 포함시키고, 

(60 / (출력된 A의 값)) * 나머지 검색어들의 값)

의 계산을 통해 스케일링을 해준다. 


스케일링 과정까지 함수를 정의해 루프를 돌려준다면 순식간에 처리할 수 있을 것 같은 기분이 든다. 


다만, 정확도를 위해서는 한 가지 작업이 더 필요한데, 1) 어떤 검색어를 '고정 검색어' (고정값을 얻기 위해 매번 포함시킬 검색어)로 사용할 것인가 이며, 2) 고정값 수치를 설정하기 위해 함께 검색할 나머지 4개의 검색어를 어떻게 선정할 것인가 의 두 가지를 해결해야 한다. 


2 번의 경우엔, 고정 검색어가 정해지면

>> 고정 검색어 + 무작위 4개의 검색어를 n번 요청한다

>> 이 때 얻어진 고정 검색어의 트렌드 인덱스 n 개의 평균을 낸다 (m이라고 하자)

>> 이제 755개의 입력값에 고정 검색어를 포함해 5개씩 검색하고, 매 번 

(m/출력된 고정 검색어의 트렌드 인덱스) * 출력된 모든 검색어의 트렌드 인덱스

의 계산을 통해 스케일링 해준다. 매번 고정 검색어를 포함해야 하므로, 754 / 4 = 188.5 이니까 5개 검색어씩 묶어서 188번, 그리고 마지막 189번째 루프에서는 나머지 고정 검색어 + 나머지 2개의 검색어를 입력해주면 된다. 


원래는 2부에서 다른 네이버 API 를 다뤄볼 생각이었지만, 글이 너무 길어진 관계로 나머지 부분은 2부에서 다뤄보도록 하겠다. (코딩을 하면서 글을 작성했기 때문에 과연 이 프로젝트가 성공할지는 미지수이다...)



예정인 글:

- 구글 음성인식 API를 활용한 스팸 메시지 필터 만들기

- 크라우드 펀딩 웹사이트 크롤링을 통한 펀딩 분석

- 네이버 쇼핑 & 검색 API 활용해보기 

- NBA 선수 데이터 를 통한 상관관계 분석




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari