지금까지 우리는 디지털 텍스트를 분석하기 위해 위키피디아 페이지로부터 다운로드 받은 파일을 이용했습니다. 하지만 빅데이터로서의 디지털 텍스트는 매우 다양한 방식으로 생성되고 있고 또 그 범위 또한 끊임없이 확장되고 있습니다. 그 중 빅데이터로서의 텍스트를 분석할 수 있는 대표적인 도구는 트위터입니다.
트위터는 사회관계망 서비스이자 마이크로 블로그 서비스를 제공하는 플랫폼으로서 스모트폰에 최적화되어있는 서비스이기 때문에 젊은 세대 사이에서 대중적으로 사용되고 있는 온라인 서비스이죠.
오늘날 정보 교류와 소통을 위해 많은 사람들이 트위터와 같은 소셜미디어를 이용하고 있는데요. 트위터에서 생성되고 있는 트윗은 280자 내에서 텍스트로 작성된 특정 주제에 관련한 이슈들, 그리고 사람들의 태도와 감정들을 내포하고 있기 때문에 디지털 텍스트 데이터로서 효용 가치가 많이 있습니다.
오늘 우리는 트위터의 텍스트 데이터를 R에 불러오는 방법을 알아보고자 합니다. 그리고 불러온 트윗 데이터를 텍스트 전처리 및 토큰화 과정을 거쳐서 어휘 빈도수 분석 그리고 더 나아가 감정 분석하는 방법까지 앞으로 살펴볼 것입니다.
사실, 얼마전까지만 해도 트윗을 모으기 위해 API를 이용하고 app을 만들고 access token을 생성하는 과정이 간단했는데요. 점차 소셜미디어를 통한 개인 정보의 유출과 조작이 빈번해지고 있어서 트위터에서도 승인 과정을 까따로운 절차를 거치도록 정책을 바꾸었습니다. 그래서 이 시간에는 트윗 데이터를 모으기 위한 application과 access token을 만드는 과정을 차근차근 설명드리도록 하겠습니다.
우선 트윗 데이터를 불러오기 위해선, 여러분 각자가 트위터 계정이 있어야합니다. 만약 트위터 계정이 없다면 계정을 하나 만들어야 합니다. 가입 절차는 비교적 간단하고 개인 정보 노출도 적기 때문에 여러분 각자가 한번 만들어보시기 바랍니다.
그리고 트위터 API를 이용할 수 있는 access token을 받아야 하는데요. 이를 위해서는 apps.twitter.com을 방문해서 본인의 트위터 계정으로 로그인 한 후 “Apply for a developer account”에서 관련 정보(사용 목적, acount name, 사용 국가…)를 기입해야 트위터 데이터 접근 승인을 받을 수 있습니다. 여기서 만약 연동되어 있는 이메일 계정이 없다면, 사용하고 있는 이메일 계정을 연동해야 합니다.
그리고 신청 과정에서 까다로운 승인 절차가 하나 있는데, “Describe in your own words what you are building” 란에는 직접 API를 이용하고자 하는 이유를 작성해야 한다는 겁니다. 이 답변을 트위터가 검토한 후 사용 승인을 해줘야 트윗을 모을 수 있는 권한을 얻게 되니까, 가능한 성실하게 답변을 작성하는 것이 좋습니다. 여기에서 트위터는 트윗 수집의 목적, 분석 대상, 분석의 방법, 그리고 분석 결과의 형태 등을 묻고 있네요.
서비스 이용 약관을 스크롤을 내려서 읽은 후 동의 박스에 체크 한 후 신청 버튼을 누르고, 연동되어 있는 이메일 계정에서 확인을 하시면 신청을 완료되어 트위터에서 승인을 위한 검토 작업에 들어가게 됩니다. 이 과정은 어쩔 수 없이 시간이 소요되는데요. 여러분들 각자가 어느 정도 여유를 갖고 트위터 검토 작업이 마치고 승인 연락이 오기를 기다리시길 바랍니다.
자, 승인 요청 후 허가를 받게 되면, apps.twitter.com 상에서 Twitter App을 만들 준비가 된 겁니다. 여기에서 App의 이름, 설명 (Description), 그리고 Website에 본인의 트위터 계정 주소를 입력해서 app을 만듭니다.
그리고 트윗 데이터를 불러 모으기 위해 우리는 rtweet
이라는 패키지를 이용할 것이고, 이 패키지는 Callback URL
란에 http://127.0.0.1:1410
이라는 주소를 입력함으로서 이용할 수 있습니다. 그리고 “Developer Agreement”에 체크를 해서 Twitter application을 생성합니다.
rtweet
패키지는 Twitter app과 access token을 만든 후, RStudio 상에서 트윗 데이터를 모으는 과정을 편리하게 실행할 수 있도록 도와주는 함수들을 제공하고 있는데요. 이 패키지는 “Michael Kearney”라는 미국의 미주리 대학의 교수가 만들었습니다. 그리고 트윗 정책이 바뀔 때마다 패키지의 기능 또한 업데이트를 하고 있습니다. 그래서 우리 수업에 필요한 소셜미디어 분석을 위한 빅데이터 수집에 맞는 도구라고 할 수 있겠습니다.
httpuv
패키지를 R에 설치함으로서 웹 브라우저 상에서 인증하는 방식을 이용할 것입니다. 그럼 “apps.twitter.com” 페이지에서 Keys and Access
탭을 클릭해서 본인만의 API 키와 비밀 코드를 카피하겠습니다. 그 코드는 Consumer Key 그리고 Consumer Secret에 나와 있죠. 이 두 코드를 카피해서 R 코드에 복사하겠습니다. Twitter access toekn을 만드는 R 코드는 이렇게 구성하면 됩니다.install.packages("httpuv")
install.packages("rtweet")
library(httpuv)
library(rtweet)
## autheticate via web browser
token <- create_token(
app = "BigDataTextMiningClass", # App의 이름은 어떤것이라도 상관없습니다
consumer_key = "hAri3Q2e2faLuXnFDYRgzOvnF",
consumer_secret = "Prmfy0f1FrwewpF8Rh5N*********************") # Key 와 Secret 코드는 각자 다 다른 코드를 부여 받게 됨으로 각자의 코드를 복사 후 붙이기 해야 합니다.
자 이 코드를 R에서 실행하면, 웹 브라우저 창이 떠서 각자가 만든 Application을 본인의 계정에서 사용하는 것을 허락하는지 묻는 절차가 나타납니다. 여기서 본인 계정으로 로그인 후 인증 버튼(Authorize App)을 클릭하고 RStudio 세션으로 돌아오면 됩니다. 코드 상에서 rtweet
패키지의 create_token
함수는 이 토큰을 환경 변수로 자동적으로 저장하는 기능을 하기 때문에, 이후에도 R 세션에서 rtweet패키지의 함수를 이용해서 트위터 데이터를 모을 수 있습니다.
이렇게 여러 단계를 거쳐 생성한 Twttier app은 각기 고유의 목적을 위한거라면 여러 개를 만들어서 운영해도 됩니다. 그러면 access token 또한 여러개가 되겠죠. 하지만, Twitter app을 이용해서 트윗을 모을 때 트위터의 정책이 15분 동안에는 최대 18000개의 트윗만 모을 수 있는 정책을 취하고 있기 때문에, 이 한도는 무분별하게 개인들의 트윗들을 모으는 것을 방지하는 목적하겠죠. 이 정책에 반하여 계속적으로 15분 한도를 어길시에는 본인 계정의 API 접근 허가가 취소될 수도 있으니 주의하시기 바랍니다.
자, 이렇게 access token까지 생성하면 rtweet
패키지를 이용할 준비가 됐는데요. 패키지의 search_tweets()
함수를 이용해서 관심있는 주제를 해시태그 (#) 형태로 포함하고 있는 트윗들을 모아보도록 하겠습니다. 해시태그는 해당 트윗의 주제 또는 키워드를 표시함으로서 본인의 메세지가 더 잘 노출되거나 검색될 수 있도록 도와주는 역할을 합니다.
지금까지 우리는 BTS라는 Kpop 그룹의 위키피디아 페이지의 텍스트를 분석해왔는데요. 이제는 트위터 상에서 #BTS 해시태그를 포함하고 있는 트윗들을 모아보도록 하겠습니다.
search_tweets()
함수는 찾고자 하는 키워드 설정 뿐만 아니라, 다양한 인자(arguments)들을 설정해서 원하는 데이터를 모을 수 있도록 도와주는 기능을 제공하는데요.
우선 15분간 18000 트윗 한도를 생각해서 우선은 5000개를 모을 것이고 이를 위해 n 인자를 5000으로 설정, 그리고 include_rts 인자를 TRUE가 아닌 FALSE로 설정해서 리트윗 데이터들을 모으지 않도록 하겠습니다. 또 lang이라는 인자를 “en”으로 해서 영어 트윗만 모으고, geocode 를 lookup_coords(“usa”)로 설정해서 지역 정보가 미국에 해당하는 트윗만 모으도록 설정한 후 실행해보겠습니다.
이렇게 모아진 트윗 데이터를 bts_rtweet
이라는 객체에 할당 했습니다. 이 트윗 데이터는 tibble이라 불리는 데이터 프레임 형식을 갖게 되는데요. 객체 내용을 확인해보면, 첫번째 줄에서 제가 모은 데이터의 경우에는 “# A tibble: 4,773 x 88”라고 뜨는 걸 봐서, 4,773개의 트윗이 모아졌고, 각 트윗의 성격을 규정하는 variable들, 다시 말해 각 트윗의 특징 변수들이 88개가 있구나라는 점을 알 수 있습니다. 이러한 데이터 프레임의 형식과 처리 방식에 관해서는 앞으로 차차 자세히 다뤄보도록 하겠습니다. 자, 그럼 우리가 모은 트윗 데이터를 저장하기 위해 save()
함수를 이용해서 “bts_rtweet.RData”라는 파일을 생성해 작업 폴더에 저장하도록 했습니다.
bts_rtweet <- search_tweets("#BTS", n=5000, include_rts = FALSE,
lang = "en", geocode = lookup_coords("usa"))
bts_rtweet
save(bts_rtweet, file="bts_rtweet.RData")