livin' seberia

smart mirror project [day 2]

DIY IOT - smart mirror project

2월 17일 둘째날

오늘의 목표. 책을 살펴보니 라즈베리파이로 소리 정도는 재생 해보고 싶고, 날씨API를 끌어다 쓸 적절한 코드를 짜고자 한다. (시각화는 내일쯤...)


오늘은 소리를 재생했다. 스피커 케이블을 찾을 길이 없어 고민하고 있는데 연구실 오빠가 "이어폰을 쓰면 됨"이라고 알려주었다. 역시 길은 어디에나 있다. 느려터진 랜선을 부둥켜 안고 good morning wav 파일을 검색해 다운을 받았다. 그리고 돌려봤는데...... "good bye"란다. (음....?) 음원이 이상하다.


이어 날씨api를 받아 파이썬으로 코드를 작성해보았다. 이곳 저곳 뒤져봤는데, 많은 이들은 open weather api를 쓴다. (구글 웨더 api도 있었지만, 2010년대 초반 이후로 서비스가 중단됐다고 한다)

하지만 내가 제일 좋아하는 사이트(앱으로 즐겨찾기도 해뒀더랬다)는 forecast.io 다. 물론 당연히 이곳도 api를 제공한다! 심지어 언어별로 라이브러리도 친절하게 잘 형성돼있다. 

나는 파이썬을 쓰므로, 파이썬에 맞는 라이브러리 두 개를 찾았다. 

깃헙의 https://github.com/ZeevG/python-forecast.io     이걸 참고할 수 있고, 
참고로 파이썬 켜기 전에 pip install python-forecastio 를 돌려줘야 forecastio를 import 할 수 있다. 
또 다른 하나는 https://github.com/dvdme/forecastiopy    다. 이 또한 pip install forecastiopy를 해줘야 한다. 
개인적으로는 후자가 매우 마음에 들었다. 

위와 같은 결과가 나오고(개인적으로 저 마이구미를 꼭 화면에 담고 싶었으므로 걍 나이브하게 사진을 찍어 올림.....) 

나는 저 데이터들 가운데 temperature min - max 와 humidity, summary 를 뽑아낼 예정이다. 더불어 icon을 가져다 실제 예쁜 아이콘들과 매칭해 출력할 것이다. 


내친김에 뉴스api도 좀 썼다. ap news나 reuter보단 nytimes에 좀 더 마음이 가서... (물론 한국어를 파싱할 수 있는 네이버 개발자 툴을 활용할 수도 있지만... 한글화 작업은 다음에 해보기로... 더구나 나는 외신을 더 많이 보므로...)


결과적으로 top stories의 제목만 용케 잘 뽑아 왔다. 욝 타임즈의 api는 여기를 참고하면 된다. 

http://developer.nytimes.com/docs/top_stories_api/

물론 스택오버플로에 올라온 것도 활용했다. http://stackoverflow.com/questions/16431120/nytimes-api-python

처음엔 섹션을 science만 설정했는데, 오늘자 top stories에 해당 분야가 없었는지 출력값이 [ ]로 나와버렸다. 맞춤형 콘텐츠를 실시간으로 받아보는 일은 결국 콘텐츠 생산자에게 달려있으니...


그러고보니 시계를 안 했다. (ㅋㅋㅋㅋㅋㅋㅋ 미러의 핵심인데...)

이 글에서 맨 마지막에 나온 코드로는 팝업으로 뜨는 디지털 시계만 나온다. 맨 마지막줄 root.mainloop()을 후에 잘 활용하면 될 듯. 
내 라즈베리파이가 영 이상한 시간을 가리키고 있어서 사진은 저리 나왔다. 음, 영 이상한 시간은 아니고 GMT 기준시다. 세계기준시인 타임티커에서 데이터를 가져온 것으로 보이고, 이걸로라면 날짜도 바로 따올 수 있을 것 같다(???!)



....늘 그렇듯 안 예쁜 건 예쁘게 만들면 된다. (아마도 그럴거다...) 그리고 마이구미는 몹시 귀엽다.



이제 시각화 작업을 하면 된다.

(그럼 이제 다시 js와 css를 펼쳐야 하는 것인가...?...)



'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 1]  (0) 2016.02.17
smart mirror project [intro]  (0) 2016.02.17

smart mirror project [day 1]

DIY IOT - smart mirror project

2월 16일 첫째날

에버노트에 끄적끄적한 뒤로 설날도 있고(새댁이라 바빴다) 신경쓸 여타 공부거리도 많아서 이제야 시작. (핑계...)

오늘의 소제목: 시작은 복잡하였으나 끝은 심플하리라.

 

오늘 결국 라즈베리파이 초보자용 키트를 질렀다가 연구실에 한가득 있는 것을 뒤늦게 발견하고는! 환불 버튼을 강하게 내려친 뒤 냅다 가져다 작업을 시작했다! 

일단 라즈베리파이의 곱디 고운 자태를 먼저 감상.

예쁘다. 저 한 가운데 저 라즈베리가 겁나 예쁘다. 난 원래 마이구미같이 생긴 저런 문양을 좋아한다. (참고로 연구실에 있던 것이 라즈베리파이 1 버전이어서, usb 포트가 두 개 뿐이다. 요즘은 더 잘 돌아가고 조금은 더 빠르며 usb 포트가 4개나 되는 라베2가 더 인기가 좋다고 한다) 

하지만 여기에 os를 설치하는 것부터가 난관이다. 망할 win32 disk imager에 sd카드가 안 떠서다. 용량이 모자라는 것도 아닌데. 

혹시 몰라 sd카드를 전용 포맷프로그램을 검색해 깔아가면서 굳이 완벽 포맷을 했고(그건 잘 한 일이다) 그럼에도 불구하고 raspbian OS imager에 f: 디스크가 안 뜬 고로, 나는 noobs lite 버전을 받았다.

'굳이 imager drive에 f:가 뜨지 않아도 걍 드래그 앤 드롭을 써도 무방하다는 사실'을 나중에야 깨달았다 ^ㅡ^


아 저 무언가 다 끼워줘야 할 것 같은 소켓(?)이 널린 자리에 케이블도 하나 둘 찾아 드렸다. 키보드와 마우스의 동글을 usb포트에 꼽고, 전원은 노트북에 연결했다. (그래도 된다) 모니터는 급한대로 데탑 HDMI로 연결했고, 랜선을 끌어다 포트에 꽂았다. 

그리고나서... 켰다! 켜졌다! 


책에 나오는 것처럼 온갖 옵션 화면은 뜨지 않았지만(그래서 비번이고 뭐고 입력할 일이 없었... 뭔가 좀 이상하지만 걍 진행하기로 했다) 아무튼 뭔가 자태 고운 라스베리가 나타났다! 유후!

맥 터미널이랑 리눅스랑 명령어가 비슷해 어렵지 않게 (따라)쓰긴 좋았다. 기본 세팅 완료. 

그리고 책에 나온대로 일단 GPIO까지 설치 완료.


처음 보는 라스베리파이 자태를 열심히 감상하고, 분주하게 돌아다니며 선을 끌어다 쓰고 어쩌고 하는 데 두 시간 남짓 걸렸다. 





근데 이거 어떻게 끄는 거지...




(sd카드 빼면 망한다고 한다. 걍 메뉴 들어가서 shut down을 누르면 된다.)





'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 2]  (5) 2016.02.17
smart mirror project [intro]  (0) 2016.02.17

smart mirror project [intro]

DIY IOT - smart mirror project

만들고 싶다고 생각한 것은 2월 2일 즈음이었다. 지금으로부터 어언 2주 전. 당시 에버노트에 올린 글은 다음과 같다. (참고로 나는 내 메모장으로 에버노트를 아주 잘 활용한다) 그리고 이 글은 결과론적으로 개발을 막 시작한 현재 '해 두길 잘 한 스크랩'이 됐다. (뭐 얼마나 효용이 있는 줄은 모르겠으나...) 



구글 안드로이드를 활용한 구글 엔지니어의 자기네 집 욕실 스마트 미러 만들기 
다음과 같은 UI를 활용. 예쁜듯… 예쁜듯!!!

꽂히었다.


라스베리파이를 이용해 iCal parser써서 만든 케이스도 있음. 여기가 코드도 더 상세하게 나온듯. 



일단 스마트한 거울을 만들려면 다음과 같은 것들이 필요하다.
40핀짜리 LCD 패널과 함께 움직일 TV LCD Controller Board (1920*1080) 
http://www.ebay.com/itm/360626141655   - 이게 벌써 3만원이 넘..


이 스마트한 화면을 껐다 켰다 할 수 있는 스위치도 있어야할테고 - 잌 2만원쯤



디스플레이 패널이 있어야하는데 엌 이건 뭐 모니터를 사야하나 - 여기서 20만원이… 다른 방법도 있을테지! 중국산도 많고, 음음, 일단 어디 누가 버리는 모니터 없나 봐야겠다.  (엌ㅋㅋㅋ그러고보니 오빠 놋북 모니터가ㅋㅋㅋㅋㅋ) 
잠깐, 걍 갤기어 가지고도 뭐 할 수 있지 않을까? =ㅅ= 엄마 안쓰는 것 같던데 어차피 1세대…흡… 



이걸 가지고 하는 방법은 다음과 같다고 한다. 

그리고 거울이 있어야 한다. two-way mirror 라는걸 사야 나도 비추고 반대편의 것도 비출 수 있다. 아아. 
10cm X 10cm = 2만원쯤 한다. http://www.twowaymirrors.com/glass/   여기 사이트에선 무려 diy 키트도 판다.
음 근데 two-way mirror도 좋지만 vanity vision도 나쁘지 않은 것 같다. 

…diy키트를 받아볼까…

… 아 없단다. 휴우 다행. (나는 누구나 그냥 손 안 대고 코 풀 수 있는 건 하기 싫다)

그리고 또 필요한 게 있다. 
케이스를 씌워야 얘네가 고정이 되겠지.


잊지말고 챙겨야 할 분들이 또 있다.
  • A Raspberry Pi
  • A HDMI Cable (to connect the Raspberry to the Monitor)
  • A USB to micro USB cable (to power the Raspberry Pi)
  • A power cable to power the monitor

ok? …. 



이러고 끝나면 누구나 다 한다.
하지만 준비물을 모두 갖춘 지금부터가 진짜 시작.

얘를 돌리려면 라스베리파이를 하드드라이브라고 생각하고, 그 안에 코드를 팍팍 심어준 다음에, 이걸 반대편 모니터에 연결하고 그 위에 거울을 붙이면 되는 식이다. 

그럼 라스베리파이를 잘 만져야한다는 뜻이다.


….음….
그러고보니 라스베리파이의 가격을 검색해보지 않았다. 
해외직구로 40파운드, 우리돈 8만원쯤 한다. 

고로 다 합쳐 약 한, 뭐… 한 40만원 짜리 거울을 만드는 셈이다. 핳핳핳


오오 그런데 위에 보면, Amazon fire tv stick 이라는, android apk를 받을 수 있는 기특한 놈이 있다고 한다. 

tv를 보기 위한 스틱이지만, UI를 운영하는 뭐 그런것도 있는 셈이다. 그러면 라스베리파이가 필요가 없다. 
(근데 이것도 직구를 해야한다 =ㅁ=)

거울에 바로 비춰도 좋을만한 것들이 뜬다. 
….?!!

돈이 조금 줄어들기도 했고... 어쨌든 해 볼 만은 하겠다. 




설 지나고 시작해볼까. 
아 나 바쁜데.
(바쁘긴 개뿔..)



'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22
smart mirror project [day 3]  (0) 2016.02.19
smart mirror project [day 2]  (5) 2016.02.17
smart mirror project [day 1]  (0) 2016.02.17

미디어에서의 애견 노출과 유기견 증가의 상관관계

play with data

The Dog and The Media 

※ 아주 예전에 긁어 모아둔 데이터를 활용해보았다. 위 그림은 내가...


방송에도 흐름이 있다. 2010년대 들어 '가족' 테마를 시작으로 '쿡방', '인테리어', '살림', '먹방'에 이르기까지 대부분 집과 관련한 예능이 봇물처럼 쏟아지고 있다. 애완견 또한 단골 손님이다. 몇몇 강아지는 국민견이라는 명칭을 부여 받는다. 특히 여느 소재와 달리 강아지나 고양이는 '편집의 힘' 덕에 일약 스타덤에 오른다. 

TV에 애완견이 노출될수록 그 종의 강아지가 많이 키워지고 또 버려진다는 말은 줄곧 있어왔다. 하지만 데이터로 밝혀진 바는 없다. 이 연구는 '강아지를 출연시키는 TV프로그램과 버려지는 애완견 수'에 연관성이 있지 않을까하는 생각에서 시작됐다. 


데이터는 국내 유기견 무료분양 사이트 게시판에서 긁었다. 자신의 강아지를 대신 키워줄 사람을 찾는 곳이다. 대부분 자신보다 사정이 더 나은, 더 좋은 주인에게 강아지를 보내고 싶다며 글을 올렸다. 제각기 사정이 다르고, 글쓴이들이 특정될 수도 있는만큼 사이트는 비공개한다. 이 곳에는 총 8천여 건이 올라와있지만, 한국어 수집이 쉽지 않은 관계로 그 중 10%인 약 8백 건(2015.05.31~2015.11.01)을 분석했다. 이 가운데 애완견이 새끼를 낳아 분양하는 경우가 아닌 634건을 다뤘다. 샘플이 작고, 데이터 대상인 게시판의 한계(이를테면 시간이 지난 뒤 자신이 쓴 글을 삭제하는 경우도 발견됐다)도 있다. 데이터도 더 늘릴 계획이고, 문제점도 차츰 보완할 예정이다. 


2015년 2-3분기에 가장 많이 버려진 강아지는 '2015년생 믹스견과 2015년생 푸들'

견종과 출생연도를 함께 기재했다. 글쓴이가 밝히지 않은 경우에는 '불확실'로 분류했다. d3 mosaic을 활용해 시각화했지만 티스토리 방침상 사진으로 캡쳐해 첨부한다. (아쉽다) 나이 또는 태어난 해를 기재한 경우에 한해 계산했다. 키워진 지 705일 만에 게시판에 올라왔다. 541마리가 평균 705.1일 키워진 것으로 나타났다.


방송 노출된 견종일수록 버려지는 경우도 증가(....한다고 봐도 무방하지 않을까)

소제목에서 저리 꼬리를 내린 이유는 아래에 나온다. 먼저 방송 시점과 강아지의 출생 분기를 기준으로 확인해봤다. 해당 시각화에는 Tableau를 활용했다. 시각화를 공부하며 늘 느끼는 거지만 인터랙션보다 중요한 건 한 눈에 들어오는 정보다. (라고 사진을 올리는 자는 나름의 변명을 던져본다...)

태어난 연도 및 분기별 강아지들의 게시판 출현 빈도를 다음과 같이 체크했다. 푸들과 말티즈, 믹스견은 국내에서 많이 길러지는 만큼 사실상 전 연령대에서 버려지고 있다. 


최근 10년 새 프로그램명과 함께 '국민견' 또는 '강아지 화제' 등이 언급된 프로그램을 검색해 리스트를 생성했다. 다음과 같다. 

일시

  프로그램

품종

이름

   2008.1.1  

  베토벤 바이러스

블루먼 콜리

토벤이

2008.2.1

  1박2일

그레이트 피레니즈

상근이

2009.6.1

  결혼못하는남자

치와와

상구

2010.2.1

  지붕뚫고 하이킥

잉글리시십독

히릿

2011.6.1

  신기생전

빠삐용

안드레

2012.8.15

  아름다운 그대에게

사모예드

상추

2013.1.1

  오로라공주

알래스카 말라뮤트

떡대

2013.10.26

  슈퍼독

잭 러셀테리어

이치

2013.10.26

  슈퍼독

Mix 보더콜리

수근이

2013.10.26

  슈퍼독

포메라니안

초롱이

2013.10.26

  슈퍼독

아메리칸 불리

코만도

2014.1.1

  삼시세끼-정선편

Mix

밍키

2014.1.1

  식샤를 합시다

포메라니안

바라씨

2014.5.1

  1박2일

그레이트 피레니즈

호야

2014.9.24

  내겐 너무 사랑스러운 그녀

골든 리트리버

달봉이

2014.10.1

  압구정백야

스코티시 테리어

왕비

2015.1.1

  삼시세끼-어촌편

치와와

산체

2015.1.4

  슈퍼맨이 돌아왔다

진돗개

새봄

2015.2.1

  일밤-애니멀즈

불독

만두

2015.2.1

  일밤-애니멀즈

닥스훈트

녹두

2015.2.1

  일밤-애니멀즈

잉글리시십독

호떡

2015.2.1

  일밤-애니멀즈

킹 찰스 스패니얼

2015.2.1

  일밤-애니멀즈

비숑 프리제

에디

2015.2.1

  일밤-애니멀즈

Mix

파니, 주니

2015.2.1

  일밤-애니멀즈

포메라니안

복실이

2015.2.1

  일밤-애니멀즈

푸들

테리

2015.4.1

  냄새를 보는 소녀

포메라니안

뭉치

2015.4.1

  식샤를 합시다2

포메라니안

도그

2015.6.1

  나혼자산다

푸들

고구마

2015.8.1

  삼시세끼-정선편2

Mix

사피, 에디


프로그램이 짧게는 몇 주에서 길게는 수 년간 지속하는 점을 고려해야 했다. 따라서 강아지의 미디어 출현 시점을 모두 분기로 정제해야 했다. 사실 미디어에 얼마나 노출돼야 사람이 강아지를 사거나 구하고 싶어지는 지를 알기는 쉽지 않다. (일단 개인차가 클 것으로 예상된다) 

따라서 다시 리스트를 짜면 다음과 같다. 

2008년 1분기 - 블루먼 콜리, 그레이트 피레니즈

2009년 2분기 - 치와와

2010년 1분기 - 잉글리시 십독

2011년 2분기 - 빠삐용

2012년 3분기 - 사모예드

2013년 1분기 - 알래스카 말라뮤트 

2013년 4분기 - 잭 러셀 테리어, Mix 보더콜리, 포메라니안, 아메리칸 불리

2014년 1분기 - Mix견, 포메라니안

2014년 2분기 - 그레이트 피레니즈

2014년 3분기 - 골든 리트리버

2014년 4분기 - 스코티시 테리어

2015년 1분기 - 치와와, 진돗개, 불독, 닥스훈트, 잉글리시 십독, 킹 찰스 스패니얼, 비숑 프리제, Mix견, 포메라니안, 푸들

2015년 2분기 - 포메라니안, 푸들

2015년 3분기 - Mix견

노란색 또는 연두색으로 컬러바(Color bar)가 칠해진 견종이 바로 위 프로그램에 출연한 강아지들이다. 프로그램 노출 이후를 붉은 색으로 표시했다. 이 강아지들만 추려 프로그램 방영 전후의 상관관계를 분석했다. 그 결과 방영 전에 태어난 강아지들과 방영 후 태어난 강아지 수 사이에는 강한 상관관계(cor=0.7612, df = 15, p<0.05)가 있었다. TV 방영 전에 태어나 버려진 강아지가 많으면 방영 후에 태어나 버려진 강아지도 많다는 것이다. 

방영 후에 태어난 강아지와 전에 태어난 강아지 수의 차이(diff)를 통계적으로 살펴봤다. t-test 결과 95% 신뢰구간이 (-2.205, 8.675)로 나타난다. 다만, p값이 0.226으로 귀무가설을 기각하기는 어렵다. (샘플 수를 늘려야한다...!!!) 통계를 넘어 단순히 수치상으로 본다면 방송 후에 태어나 입양됐다 게시판에 오른 강아지의 수가 방송 전 강아지에 비해 55마리나 많다. 통계적으로 의미를 더하려면 무엇보다 더 많은 샘플을 확보해 더 자세하게 조사해야할 것이다. (주르륵..)

앞서 말했듯 이 데이터에는 꽤 많은 한계가 있다. 최근 글을 파싱했기 때문에 최근 태어난 강아지가 유독 많은 것일 수도 있고, tv 방영여부와는 별개로 라이프 스타일의 변화 때문에 애완견을 더 키우게 된 것일 수도 있다. 사실 800개 넘는 글의 형태소를 분석한다 한들 견종을 일컫는 말이 제각각이고, 태어난 날짜 등을 셈하기가 어려웠다. 따라서 모두 수작업으로 데이터를 정제해야 했다. (애로사항1) 잘 정리된 데이터가 있다면, 아마 더 나은 연관성을 찾아볼 수도 있을 듯 하다. (정부 기관에 정보공개 청구를 하든, 사회단체에 문의를 하든 해야겠다. 한국어 자연어 처리는 정말이지... 애로사항2..)

미디어에게 "무책임하게 마구잡이식으로 강아지 예능 만들지 말라고!" 라고 아주 크게 외치고 싶지만, 사실 그들만 탓할 것도 아니다. 강아지를 키운다는 것이 얼마나 큰 책임감을 요구하는 지를 모두가 잘 알고 있어야 한다. 이번 데이터를 모으면서 글을 올리는 사유도 함께 참고했다. 가장 많이 나온 말은 '개인사정'이었다. 특히 '직장에 하루종일 있다보니 강아지가 집에 혼자 있다'며 '더 나은 환경으로 보내주고 싶다'는 말이 많았다. 그 다음으로 '임신(또는 결혼)을 해서', '이사가는 집이 아파트', '이민을 간다', '아이의 아토피 때문에', '주민들의 민원으로 어쩔 수 없이', '기존에 키우던 강아지와 너무 싸워서', '부모님의 반대', '원룸에서 키우다가 들켰다'는 말이 줄을 이었다. 

예능 프로그램에서 강아지가 연예인의 액세서리가 아니듯, 집에서 키우는 강아지는 인형이나 가구, 인테리어 소품이 아니다. 살아 움직이며 소통하는 생명체다. 키우기 전에 한 번 더 생각하고, 고민해야 한다. 

 


   

  

D3 히트맵 활용 - lpga scores

play with data

LPGA SCORES


미국 여자 프로골프투어(LPGA) 경기를 지켜보는 골프 팬들은 "요즘 들어 유독 선수들의 언더파(Under Par) 비율이 는 것 같다"고들 합니다. 지난 2014년 에비앙 챔피언십에서는 처음 LPGA 메이저 대회에 출격한 김효주 선수가 1라운드 10언더파(71타 경기이기 때문에 61타로 기록)를 쳐 남녀 메이저 사상 최저타 기록을 세우기도 했습니다. 몇몇 난이도 높은 메이저 대회를 제외하면 컷을 통과한 선수 가운데 오버파를 기록하는 경우가 드물 정돕니다. 이번 과제에서는 실제로 라운드당 언더파 비율이 늘었는지 살펴보기로 했습니다. 


대표적인 선수 13명의 데이터만 우선적으로 추출해 살펴봤습니다. 먼저 2007년~2014년 사이 미국여자프로골프투어(LPGA)에서 뛴 선수 13명을 골랐습니다. 2007년 top10에 드는 비율이 15% 이상인 선수 중 2014년에도 경기에 나서고 있는 선수 10명을 우선 채택했습니다. 또 2007년에는 성적이 좋지 않았지만(혹은 데뷔 이전이지만) 2014년 top10 수치가 상승한 박인비, 미쉘 위, 스테이시 루이스의 스코어도 추가했습니다. 데이터는 http://www.lpga.com 에 나와있는 선수들의 기록 가운데 "Underpar per round(average, %)" 부문 데이터를 추출했습니다.



상위권 선수들을 중심으로 뽑다보니 전반적으로 색채가 짙게 나타납니다. 특히 박인비 선수와 스테이시 루이스 선수, 수잔 페테르센 선수는 언더파 비율이 점차 오르는 것을 확인할 수 있습니다. 반면 크리스티커 선수와 카리웹 선수는 꾸준한 성적을 보여주고 있군요. 일본의 미야자토 아이 선수와 한국의 김인경 선수의 기록은 다소 굴곡이 있다고 봐야할 듯 합니다. 2011년을 전후로 슬럼프를 겪었던 미쉘 위 선수는 다시 전성기때만큼의 기량을 찾아가는 모습이네요. 

 
선수마다 차이는 있지만, 2007년과 2013년만 놓고 봐도 색채 자체가 확연히 다른 것을 볼 수 있습니다. 단지 선수들의 실력이 늘었기 때문일까요, 아니면 코스가 모두에게 익숙해진 걸까요? 더 좋은 장비, 더 나은 훈련 환경 덕분은 아닐까요?



##해당 그래픽은 자바스크립트 D3를 활용해 제작됐습니다. 티스토리에선 연동이 안 되네요. 흠. 방법 혹시 아시는 분? 

R놀이 - 워드클라우드로 몸풀기

play with data

일년 전 요맘때만 해도 "R을 써야 데이터 어쩌고들이 가능하다"는 말을 귀에 못이 박히도록 들었습니다. 당시엔 바빠서 못했지만. 

그래도 일단 설치는 해뒀더랬습니다. http://www.r-project-org 로 들어가 CRAN 에서 한국어 버전을 자신의 운영체제에 맞게 다운받으면 됩니다. 저는 맥순이니까 OS 버전으로 받았지요. 

이후 책도 사두었습니다. 훗날 벌어진 일입니다만, 우리 연구실 사람들은 제가 이 책을 산 걸 보고 "역시 뭘좀 안다"며 감탄하더군요. (사실 새 책 그 상태 그대로인데 말입...) 암튼 얼핏 봐도 정말 제가 원하는 걸 다 알려줄 것 같은 목차와 글자들이 눈에 들어왔습니다. 이제부터 꼼꼼하게 보려고요. 



그렇게 R에 대한 모든 것을 묵혀둔 지 근 반 년이 지났지요. 그간 파이썬과 자바스크립트, 각종 통계와 수학에 몰두하느라 R 자체를 잊고 살았더랬습니다. 서론이 긴데, 결론적으로 오늘은 폭설과 강추위로 인해 세베리아(이 블로그에서 자주 등장할 말입니다. 세종+시베리아의 합성어지요...)에 고립된 기념으로, 또 노트북도 연구실에 있고, 또 위의 저 책도 연구실에 있는데다가, 또 마침 문재인 더민주 대표가 신년기자회견도 한 기념으로다가! 제 맥을 가지고 다룰 수 있는 간단한 워드 클라우드 작성 및 몇 가지 분석을 해보려고 합니다. (후앙) 책도 없고 하니 인터넷 이곳 저곳의 힘을 빌렸지요. 

일단 워드클라우드를 만들려면 한국어 텍스트를 쪼개야겠지요. 그런데 말입니다. 한국어 자체를 분석하기는 참 까다롭습니다. 하지만 어디선가(전희원님께서 개발하셨다고 합니다 http://konlpy.org/ko/v0.4.0/references ) 감사하게도 한국어 자연어 처리가 가능한 KoNLP를 마련해주신 덕에 이렇게 분석이 쉬워졌습니다. 아 정말 감사드립니다. 이외에도 꼬꼬마, KoNLPy 등 각종 프로그램에서 돌아가는 한국어 형태소 분석기가 있지요. 


아, 이게 왜 필요하느냐면 말입니다. (간단 설명)

글 하나를 큰 부분에서부터 좁혀 들어가봅시다. 큰 글 하나 -> 여러개의 문장 -> 문장을 구성하는 요소들이 있을테고, 이 요소 안에서도 각각의 조각들은 제 역할들을 가지고 있답니다. 이를테면, '사과를' 이라는 요소가 있다면, '사과+를' 이 되는 것이지요. 사과는 아시다시피 명사, 를은 목적어를 받쳐주는 조사지요. 요 쪼그만 조각들을 형태소라고 합니다. 전 불문과를 나온 관계로 이걸 morpheme으로 배웠지요. (영어 단어로도 같아요!) 

그런데 이놈의 형태소 분석이 말입니다. 영어는 쉽고 한국어는 어렵습니다. 왜냐면, 영어를 보시면 다들 띄어쓰기로 잘 분리가 돼있죠. 이를테면, you are such a good girl. 이라는 문장이 있을 때 각각의 morpheme들이 제 할 일들을 잘 하고 있구나, 하는 걸 알 수 있습니다. 그런데, 한국어는 보시다시피 글자들이 사각형 형태로 모두 뭉쳐져있지요. ㄱㅏㄴㅏㅊㅗㅋㅗㄹㅔㅅ 이런 식으로 쓰지 않는다는 겁니다. 방금 쓴 '겁니다' 같은 것은 '것+입니다' 인데 의존명사인 것에 ㅂ을 붙여버리는 경우도 있죠. 

대개의 경우 이런 한계를 하나의 엄청나게 큰 말뭉치(나중에 언어분석에서 보게 되겠지만, 브라운코퍼스(browncorpus)같은 걸 일컫습니다)와 비교해 얼마만큼의 확률로 "이건 명사일거야, 이건 동사일걸?"이라며 판단해 풀어나간답니다. 영어에선 위에 말한 코퍼스들이 저런 역할을 하고, 한국어에도 세종코퍼스와 같은 사전들이 있지요. 

그나마 형태소 분석이나 가능한 편입니다. 통사론(문장의 구조에서 접근하는 방식, syntax)으로 한국어를 분석하긴 쉽지 않습니다. 따라서 이 모든 어려움을 극복하고 한국어 자연어 처리 형태소 분석기를 만들어주신 분들께 감사드릴 따름이지요. 물론 더더더 나아져야겠지만 말입니다. (학계가 SCI논문에만 집착하면 한국어의 분석은 날로 요원해질 것입니다 ㅠㅠ) 요즘은 Semantic 즉 의미론적인 부분에서의 연구가 많이 이어지고 있지요. 이런 관련 연구 얘긴 다음에 차차 하기로. 


말이 길어지니 일단 R을 켜서 Console 이라는 곳에 요 명령어들을 쳐서 패키지들(기능꾸러미!)을 설치토록 합니다. 

> install.packages("KoNLP")    

> install.packages("wordcloud")

> install.packages("RcolorBrewer") 

첫번째는 아시다시피 "글은 이렇게 쪼개고, 이녀석은 명사고, 이녀석은 동사야!" 라고 알려줄 KoNLP 꾸러미, 두번째는 워드클라우드를 만들어주는 패키지, 세번째는 R 프로그램에서 앞으로도 누차 쓰일 색채 팔레트입니다. 참고로 KoNLP를 깔 때 Java를 깔라는 말이 나올 수도 있습니다. 그럴땐 주저없이 깔면 됩니다.

이 친구들을 깔았다면, 모두 불러야겠지요. 

> library(KoNLP)

> library(wordcloud)    여기까지만 해도 아래 RColorBrewer은 자동으로 불러집니다.

> library(RColorBrewer)

위에서만 " "를 써줄 뿐 여기선 안 써도 된답니다. 


참.

미리 대통령 연설문 등 몇 가지를 txt 파일로 저장해둡니다. 맥에서 어떻게 txt 저장을 하느냐는 분들도 많은데요(왜냐면, 텍스트입력기라는 기본 프로그램은 확장자가 rtf거든요) 저는 sublime text 2 ( http://www.sublimetext.com/ )라는 프로그램을 쓰고 있는지라, 거기에 붙여넣고 그냥 txt로 저장했답니다. 여러 코딩용 프로그램 써봤지만, 전 이게 가장 편하더라고요. (파이썬 쓸 땐 종종 ipython notebook도 쓰고, xcode 프로그램도 쓸 때가 있습니다마는) 무엇보다 폰트 색깔이 예뻐용(...)


이렇게 저장해둔 txt 파일을 불러와야죠. 저는 걍 홈에다가 갖다 박아놨으므로(안 좋은 습관이라지만...) 홈에서 모두 불러옵니다. 


> f <- file("/Users/Home/park.txt", blocking=F)

> txtLines <- readLines(f)

f라는 이름으로 파일을 불러온 뒤에, 이 f를 계속 부려먹습니다. 요 f를 라인 바이 라인으로 읽어들이거라! 그럼 그것은 txtlines라고 명명하겠다! 라고 선언을 하지요. *(r에선 <- 이런 화살표를 참 많이 씁니다.)


워드 클라우드 특성상 워드 즉 단어들을 다루지요. 아무래도 명사형을 모조리 모아야할 듯 합니다. 


> nouns <- sapply(txtLines, extractNoun, USE.NAMES = F)

f를 좀 정제한 txtLines에서 Noun을 extract하라는 것이지요. 그리고 Names를 쓰는 것은 False 값을 줍니다. 

어떻게 돌아가고 있는지 궁금하면,

> nouns         를 쳐보면 텍스트에서의 명사들만 쭈루룩 정렬됩니다. 이 nouns만 다시 추려서 새 파일로 만들어볼게요. 


> undata=unlist(nouns)

중복된 애들을 빼고 각각 몇 개씩 있는지 한 번 볼까요 

> wordcount <- table(undata)

> length(wordcount)

이걸 내림차순으로 하면

> sort(wordcount, decreasing = T)

오름차순으로 하고 싶다면 decreasing=F 로 하면 됩니다. 


일단 전 여기까지 모두 4개의 파일을 각각 풀어 모아두었죠. 다 어디 쓸 데가 있어서(...)



워드클라우드를 만듭니다. 그 전에 아까 그 Rcolorbrewer 기억나시나요. 

무슨 색이 있을까 궁금하니까, 일단 모든 brewer 색을 보겠습니다.

> display.brewer.all()


아아 예쁜 색이 무척 많아요! 전 이 가운데 음 어떤 팔레트를 쓸까 고민하다가, Pastel1을 골랐답니다.

> pal <- brewer.pal(9, "Pastel1")

앞에 있는 숫자 9는 내가 쓸만큼의 색깔을 뜻해요. 저는 제가 쓸 팔레트에 들어있는 색상의 색깔 모두를 쓸거라 9를 써뒀지요. > pal   이라고 치면 [1] "#FBB4AE" "#B3CDE3" "#CCEBC5" "#DECBE4" "#FED9A6" "#FFFFCC" "#E5D8BD" "#FDDAEC" "#F2F2F2"    이렇게 제가 쓸 색채들이 쭉 나열된답니다. 


색채와 관련해서도 하고 싶은 말이 많은데. 음, 일단 컴퓨터상 색채는 RGB를 중심으로 하고, 또 16진법으로도 표현할 수 있지요. 관련해선 추후 포스팅을 또 하기로.... (한 뒤에 아래에 링크 걸어야겠네요. 호홋)


그리고 드디어, 대망의, 워드클라우드를 만들어봅니다!!!

근데 전 개인적으로 '것', '등'이라는 글자가 너무 많이 나오는 게 싫습니다. (그분은 정말 '것'이라는 의존 명사를 참 많이 쓰시더군요) 따라서 모든 단어는 2자 이상일 수 있도록 함수를 하나 설정해보겠습니다. 이를테면 이런 식이지요. 

> data= Filter(function(x){nchar(x)>=2}, undata)

> wordcount1 <- table(data)

이렇게 해야 두 글자 이상인 단어만 모인 워드카운트 뭉치가 생성됩니다.


> wordcloud(names(wordcount1), freq = wordcount1, scale=c(7,1), rot.per=0.25, min.freq=1, random.order=F, random.color=T, colors=pal)

설명하자면, wordcount 수만큼 frequency(빈도)를 확인해라, 그리고 scale(폰트의 크기)은 최고 7픽셀에서, 제일 작은건 1픽셀까지만. rotation되는 단어의 빈도는 0.25정도로 하고, 등장하는 단어의 가장 작은 빈도 수는 1로, 빈도가 가장 큰 단어를 중앙에 두도록 하기 위해 random order는 False 값을 줍니다. 컬러는 맘대로 해도 좋으니 True 값을, 대신 그 컬러 팔레트는 위에 정한 pal 로 쓰렴!   이렇게 해석이 되는 겁니다. 


아 그런데 이게 무슨 일입니까. 


흐린 건 둘째 치더라도 한글이 즌혀 나오지 않습니다. ('ㅅ')ㅗ

이럴땐 언어 코드가 맞지 않는 경우가 대부분이라 하더이다. 따라서 저는 다시 해결 방법을 찾아봅니다. 제 컴은 맥이니 알아서 UTF-8으로 잘 설정이 돼있고, R Studio 프로그램에서 Tools-GlobalOptions-Default Text encoding:도 utf-8으로 돼있습니다. 찾아보니 이건 Plot을 extract 할 때 pdf의 encoding이 UTF-8으로 돼 있어야 한다는 군요. 이리보고 저리봐도 잘 풀리지 않고 있답니다. ㅠ 아마 어떤 컴퓨터에선가는 다 잘 될 듯.

몸풀기용 워드클라우드 치고 꽤 오랜 시간 매달렸더니 힘이 드네요. 곧 다시 살펴보도록 하지요. 답 아시는 분은 아래 댓글 좀 달아주세요. 흑. 


아무튼, 연구실 윈도기반 컴퓨터를 써서 다시 만든 결과는 다음과 같네요. (너무 흐려서 pal=set1으로 다시 설정했어요)

그 분(1월 13일 신년 기자회견)은 '우리' '국민' '경제' '일자리' 요런 단어를 많이 언급했군요. 

내친김에 다른 당대표들것도 좀 추려볼까요. 

일단 김무성 새누리당 대표(1월 18일 신년기자회견)는 개혁과 국민, 국회 등에 대한 얘길 많이 했네요.

얼핏 보면 앞 워드 클라우드와 다소 비슷한 느낌이 없지 않은 듯한 그런 느낌적인 느낌.... 요건 잠시 뒤 다른 포스팅에서 세부적으로 풀어가겠습니당.

더불어민주당 문재인 대표(1월 19일 신년 기자회견)는 국민과 경제, 우리, 박근혜 등의 단어를 많이 언급했습니다. 경제 보다는 정치라는 단어가 더 많이 보이고요.

얼핏 보면 뭔가 대통령에 대해 참 많은 이야기를 한 듯 합니다.

그렇다면, (이건 신년기자회견문은 아니지만) 국민의당 인재영입위원장의 지난해 12월 27일 신당창당 기자회견문을 볼까요?

국민, 대한, 사람 등도 많지만 특히 새정치를 하겠다고 나온만큼 정치를 많이 언급했군요.

자, 여기서 더 나아간 분석은 곧 업로드됩니다.