iOS 12 단축어 앱 만들기 #마트쉬는날

iOS12에 ‘단축어’라는 재밌는 기능이 하나 생겼다. 사실 기존에 있었던 기능(?)이지만, 아마 iOS업데이트를 통해 siri와 연동이 추가된거 같다.

쉽게 말해 모바일 혹은 원격 PC(?)를 통해 실행가능한 특정 행동을 매크로(?) 처럼 실행 할 수 있도록 해주는  기능이다. 사실 iOS는 사용자의 커스텀이 상당히 제한적인 운영체제인데, 이 앱을 통해 여러가지 재밌는 시도를 해볼 수 있는 환경이 구현되었다.

그래서 연습문제(?)로 만들어본게 동네 #마트_쉬는_날 을 체크해주는 단축어.

방법은 간단하다. 이마트 휴점일 안내 페이지 에서 동네 이마트 지점의 쉬는날 일정을 읽어오는 방식.

자세한 구현 로직은 아래와 같다.

  1. 이마트 쉬는날 공지 페이지로 이동한다.
  2. 해당 URL에서 콘텐츠를 가져온다.
  3. 콘텐츠 중에 텍스트만 읽는다.
  4. 정규표현식을 사용하여 엔터 등을 사용한 한줄 띄기 등의 양식은 삭제 (ex, /n)
  5. 역시 정규표현식을 사용하여 동네 이마트 지점 정보만 찾는다.
  6. 해당 텍스트를 siri가 읽게한다.

실제 siri를 활용한 구현 영상은 아래와 같다.

개인적으로 이번 기능은 여러가지 관점에서 의미가 있었다.

일단, 특정 언어로 코딩을 하지 않아도 누구나 간단한 매크로를 만들어 볼 수 있다. 아이들이 접근 가능한 ‘스크래치’와 유사한 부분이 있다.  물론, 자바스크립트 등으로 코딩을 할줄 알면 더 다양한 시도가 가능할 걸로 보이긴 한다. 사실 코딩을 하다보면 가장 짜증나거나 시간이 오래걸리는 부분 중 하나가 환경을 설정하고, 문법을 이해하는 부분인데, 여긴 확실히 그런 부분에 대한 장벽이 낮아 비교적 바로바로 실행해 볼 수 있다.

둘째, siri와의 연동이 흥미롭게 다가왔다. 사실 개인적으론 음성으로 명령을 내리는 부분이 영 익숙해지지 않았는데, 이번 기회를 통해 이런 환경이 더 쉽게 익숙해질 수도 있겠다는 생각이 들었다. 실제로 음성으로 명령을 내리면, 더 쉽게(!) 구동 된다.

다른 기능으로 무엇을 만들지 아직은 선뜻 떠오르진 않지만, 확실히 생활의 편의성이 더 높아질 수 있을 거 같다. 그리고 siri를 쓰니 뭔가 더 스마트해진 기분이다(…)

가계부 슬랙앱 만들기(1)

간만에 블로깅 ㅜ.ㅠ 드디어 간만에 무언가 만들었다는 이야기다.

나는 주로 신용카드를 사용하여 소비를 하는편이다. 사용 중 한 가지 아쉬웠던 점은 매번 카드값이 나오기 직전이 되어야  한 달에 얼마나 썼는지 감이 온다는 사실이었다.

물론 문자로 매번 결제할 때마다 얼마를 썼는지와 누적 금액이 찍히긴 하지만 내가 어느 정도 속도로 쓰고 있는지 감이 잘 없었다.

예를들어 내가 카드 정산 후 10일쯤 지난 상황에서 30만원을 썼다면 지난달에 비해 빨리 쓰고 있는건가? 그럼 이번달 카드값는 90만원 정도 나오는건가? 그보다 10일쯤 지난상황이란 사실을 계산하려면 11일 기준으로 +10일을 한 후 21일이라는 사실부터 깨달아야 했다 (…)

이런 불편함을 개선하고자 간단한(?) 시각화 작업을 시도해 보았다.

요는 매일 매일 쓰는 카드값을 누적하여 최근 몇달의 트랜드를 그래프로 그리면 대략적으로 현재 소비 트랜드에 대한 감을 잡기 훨씬 쉽겠다라는 생각을 했다. 아래 그림처럼 말이다.

그런데 이를 매일매일 내가 그리고 있을 수는 없으니 자동화 하는 작업이 필요했다.

일단 간단히 떠오른 생각은 내 문자를 읽어오는 방법. 사용하는 폰이 아이폰이다보니 쉽지않다 -,- 통신사 쪽도 확인해 보았지만 최소한 내 지식으로는 접근이 어려웠다.

결국 내 카드값 사용 문자를 하루에 한번 메일로 보내고, 하루에 한번씩 해당 메일을 읽어오는 방법을 사용했다.

사실 이전에 카드값 문자를 매일 자동으로 포워딩 하는법을 찾아보았는데 아이폰이다보니 방법을 찾을 수가 없었다 (…) 현재로선 아래 그림처럼 하루에 한번 자기 전에 문자를 내 메일로 보내는 방식을 사용하고 있다 (…) #수동

그러면 다음날 아침 AWS에 올려놓은 R이 스케쥴링을 통해 메일로 전달 받은 값을 가져 오는 방식이다. 메일은 gmail을 사용하고 있고, gmail API는 gmailr라는 패키지를 사용하고 있다.

여튼 최대한 자동화 하기 위해 여러가지 방법을 찾아보고 있다. 현대카드를 사용 중인데 이후 찾아보니 매일 내 카드 사용 금액을 메일로 받아볼 수 있는 서비스가 있다. 문제는 매일 날아오는게  암호가 걸린 html파일이라는 점 (…)

결국 방법은 AWS내에 rselenium을 사용, 브라우저를 띄워 직접 내가 암호를 입력하는 방식을 따라하게 하는 방법을 시도해야 할 걸로 보인다. (이쯤되면 배보다 배꼽이 더 크지 않나…? 난 그냥 얼마 썼는지만 알면 된다고 orz) 방법들은 구글링을 해놨는데 실제로 잘 될지는 (…) 여튼 이번 연휴에는 이 내용을 알아볼 예정.

사실 처음에는 수집된 데이터로 내 소비 성향을 여러 관점에서 분석/ 예측해보는 부분까지 목표를 삼았았는데 (…) 데이터의 수집 자체에서 시간을 엄청 허비하고 있다 ㅋㅋㅋㅋ ㅠ

덕분에 잊고 있던 데이터 수집 자체의 어려움을 몸소 느끼는 중 ㅜㅜ

‘오늘의 추억 슬랙앱’ (a.k.a ‘n년전 나의 트윗’) – 업데이트 노트 (2018.05.06)

작년 이맘때 즘, ‘오늘의 추억 슬랙앱’ (a.k.a ‘n년전 나의 트윗)을 만들고 1년여 동안 잘 쓰고 있었다. 핵심 기능은 단순히 내가 쓴 n년전 오늘의 트윗을 슬랙으로 매일매일 아침마다 보내주는 슬랙앱이다. 이번 연휴를 통해 해당 슬랙봇을 다소 업데이트 하였다.

http://khg423.dothome.co.kr/index.php/2017/06/04/%EB%82%98%EC%9D%98-%EC%B2%AB-%EC%8A%AC%EB%9E%99%EC%95%B1-%EC%98%A4%EB%8A%98%EC%9D%98-%EC%B6%94%EC%96%B5-%ED%8A%B8%EC%9C%97-ver/

업데이트한 기능은 2가지. 기존의 트윗 전달에서 아래 처럼 두가지 그림이 아침마다 더 날라 온다.

1) n년전 오늘의 트윗 갯수를 카운트한 막대 그래프.
– 매년의 하루치 데이터라, 트랜드를 보기는 어렵지만, 적어도 이날에는 오히려 초기보다 최근에 트위터를 더 열심히 사용하나 보다 -.-; (해가 갈 수록 트잉여!)

2) n년전 오늘의 트윗에 대한 감정점수를 시각화한  box-plot
– 다행인지 그럭저럭 점수가 나쁘지만은 않다.

1번 기능은 단순한 카운트 그래프이고, 2번 기능은 예전에 댓글 감정분석을 위해 사용했던, 구글의 API를 사용했다.

http://khg423.dothome.co.kr/index.php/2017/11/10/%EC%96%B8%EC%A0%9C-%EC%97%B4%EB%B0%9B%EB%82%98-%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD-vs-%EB%AA%A8%EB%A1%9C%EC%BD%94-a%EB%A7%A4%EC%B9%98-%ED%8F%89%EA%B0%80%EC%A0%84/

이 업데이트를 한 이유는 1회성이 아닌, ‘서비스’ 로서의 데이터 분석을 시도해 보고 싶었기 때문. 기존 처럼 단순히 트윗 데이터가 날아오는것도 일기장을 보는 기분이라 재밌긴 하지만, 이왕 날아온 데이터들로 새로운 정보를 꾸준히 만들어 보고 싶었다.

감정 분석의 경우, 구글 API를 사용하기 때문에 특별한 분석 로직을 스스로 만들고 적용한건 아니다. 이 기능들이 서비스로 의미가 있을지 (적어도 나에게) 궁금했기 때문에 시도해 보았다. 여튼 구현 자체보다는 이런 데이터들이 주는 경험이 궁금했다.

며칠돌려보니 재밌는 결과가 나오기도 하였는데, 아래는 매년 5월 초 연휴 올렸던 트윗의 감정점수. 전반적으로 점수가 높다. 역시 (적어도 나에게) 연휴는 중요하다(!)

계속 돌려보면서 이 기능들은 유지할지 아니면, 다른 기능으로 대체 할지 고민해볼 예정.

덧1) 해당 슬랙앱 구현을 위한 코드는 여기서 확인해 볼 수 있다.

덧2) 간만에 블로그 포스팅이었다 ㅠ.ㅜ 이직과 야근등으로 블로그할 정신이 없었는데, 연휴에 간신히 포스팅 하나 했다. 다시 월 1회 블로깅 페이스를 찾을 수 있을지 (…)

블로그 글 코호트(cohort) 분석하기 w/ GA & R

​개인적으로 온라인 웹 로그 분석과 관련된 직업을 가지고 있다. 하지만 생각해보니 한번도 관련 컨텐츠를 블로깅한적이 없다(!). 그래서 기획해 본 컨텐츠.

일단 이 주제에 관해 대략 2~3가지의 컨텐츠를 생각 중이다. 결과 혹은 상황에 따라 더 늘어날수도 줄어들수도 있을거 같다.

분석에서 사용하는 도구는 Google Analytics와 R.  GA는 일반적으로 많이 쓰는 로그 웹 분석 툴이고, 기본적으로 사이트에 필요한 요소에 대한 스크립트를 심으면 사이트에 대한 로그를 분석을 해준다. 그리고 해당 서비스에 로그인해서 살펴보면 분석 사이트에 대한 많은 로그 통계들을 기본적으로 혹은 커스텀 하여 살펴볼 수 있다.

그럼 왜 R을 분석에 사용하였는가? 일단 첫번째 이유는 GA의 API를 사용하기 편리하기 때문이다. RGoogleAnalytics 패키지를 사용하면 쉽게 쿼리를 던지고 데이터를 받아올 수 있다. R패키지와 관계없이 해당 API에 관한 자세한 설명은 이 문서를 참고하면 좋다. 일단 해당 패키지는 GA API V3를 지원하기 때문에 해당 버전에 대한 문서를 링크했다. 참고로 현재 API는 V4까지 나왔다. 그리고 두번째 이유는 R이 내가 가장 익숙한 언어 이기 때문이다 (…)

그럼 왜 GA 통계 API를 쓸까? 위에서 언급하였듯이 대부분의 통계는 기본 인터페이스 상에서 잘 제공해 주고 있다. 경험상 API의 활용은 대략적으로 크게 2가지 목적이 있다.

1. 기본 제공 하지 않는 리포트를 만들기 위해 (커스텀)

2. 특정 지표에 대한 기계적 모니터링과 분석

이 중 이 포스팅은 1번 사례에 초점을 맞추고자 한다. 2번에 대해서는  언젠가 정리해볼 날이 있지 않을까?

누구나 공감하겠지만, 블로그 사이트는 컨텐츠가 메인이다. 일반 커머스 사이트처럼 물건이나 서비스를 판매하지 않는다.

컨텐츠라는건 기본적으로 발행 되었을때 반응이 가장 높고, 점차 감소하는 특성을 가진다. 만약 GA에서 기본적으로 제공하는 방식인 특정 기간만으로 통계를 살펴본다면 해당 컨텐츠가 언제 발행되었는가에 따른 효과는 확인할 수 없다. 예를 들어, 특정 컨텐츠A가 발행된지 시간이 지나고 다른 컨텐츠B가 막 발행된 시점으로 통계를 살펴보면 결국 B의 성과가 더 좋게 보일 확률이 높을 것이다.

GA에서 제공하는 리포트 형식중에 컨텐츠의 발행과 기간의 흐름에 따른 해당 컨텐츠를 코호트 분석할 수 있는 통계는 없다. 기본적으로 특정 기간내 페이지 뷰와 같은 통계만 제공한다.

사실, 몇가지 커스텀 변수들을 사용하면, 어찌어찌 해당 리포트를 만들 수 는 있다. 방법은 Lunametrics 문서 에서 확인할 수 있다. 하지만 일단 이미 커스텀 변수들을 심었어야 했고, 그런 추가적인 수고를 투입할정도로  이 블로그가 방문이 많은것도 아니기 때문에 -.- 그냥 있는 데이터로 분석을 시도 하였다.

GA API를 잘 활용하면, 해당 리포트를 만들어 낼 수 있다. 그리고 결국 데이터를 다시 구성한다는 컨셉은 마찬가지

일단 간단히 이 사이트의 트래픽을 소개하도록 하자. 분석 기간은 2017년 1년 간 데이터만 살펴보았다. 대략 아래와 같다.

전체 페이지뷰(PV): 3,188

전체 세션: 1,852

전체 사용자: 1,444

월간 트래픽 추이는 아래와 같다. 다행히도 조금씩이나마 늘어 나고 있다. 8월에 잠깐 급격히 상승했던건 챗봇과 관련된 포스팅 덕분

Show me red! – feat. 서울 시립 미술관 데이터를 사용한 챗봇 만들기

트래픽 소스를 보면, 대부분이 구글을 통한 organic search 유입이다. 대략 60% 정도. 그리고 소셜미디어를 통한 유입은 15% 가량.

워드프레스는 URL에 컨텐츠 제목이 쓰여 있기 때문에 간단히 문자열 처리로 17년도 컨텐츠 리스트를 뽑아봤다. 17년에 올린 컨텐츠는 총 18개. 해당 컨텐츠의 PV는 736건으로 비중은 23%정도 이다. 사실 특정 글이 아닌 메인 페이지에서 스크롤 다운으로도 글을 읽을 수 있는 구조라 이렇게 읽혀진 컨텐츠는 통계를 확인할 수 없다. 실제 메인페이지의 17년 PV 비중은 전체 12% 가량. 결과적으로 17년 컨텐츠를 통한 PV가 전체 절반정도 된다고 생각해 볼 수 있다.

주차별 계산은 *(발행일+6일) x n주차 식으로 계산하였다. 발행일은 해당 컨텐츠가 처음 PV가 발생한 날로 지정하였다. 예를들어 2017/1/5에 발행한 글의 1주차는 1/5~1/11까지가 1주차 통계이고, 2017/8/1에 발행한 글의 1주차는 8/1~8/7이다. 참고로 URL에 표기된 날짜는 컨텐츠를 마지막으로 수정한 작성한 날이지 공개한 날은 아니다.

전체 컨텐츠의 발행후 주차별 PV 빈도는 이러하다. 최대 20주차까지 살펴보았는데, 앞서 이야기 하였듯이 1주차가 가장 높고 점차적으로 감소하는 트랜드이다. PV에 log()를 취한건 1주차가 혼자 압도적으로 높기 때문.

이 중 PV가 가장 많은 5개 컨텐츠의 주차별 PV를 살펴 보았다. 의외로 전체 트랜드와는 다소 다른 성격의 컨텐츠들이 보인다. 2017/08/07에 올린 컨텐츠와 2017/09/17에 올린 컨텐츠.

1위는 위에 링크한 챗봇 관련 블로그글이었고, 2위부터는 아래와 같다.

2017/08/07 스파이더맨-홈커밍 vs. 어매이징 스파이더맨 – 영화평 비교

2017/04/20 발 잘 쓰는 골키퍼의 등장 – EPL

2017/09/17 AWS & R을 사용해서 트윗봇 만들기

2017/10/05 SeMA 이미지 데이터로 그림그리기

이 중 스파이더맨 영화평 비교나, 트윗봇 만들기 글은 초반에 그다지 안보여지는 컨텐츠였는데, 나중에는 유입이 증가했다. 구글의 검색 알고리즘 덕인지도.

이 결과를 보면 발행된지 오래 되었다고 컨텐츠의 생명이 무작정 끝났다고 평가하긴 어렵다. 즉, 상황에 따라 예전 컨텐츠를 업데이트하거나, 예전 컨텐츠의 추가 주제를 발전시켜보는 방식에 대해 고민해 볼 만 하다.

분석에 사용한 코드는 추후에 업데이트 예정.

트윗으로 2017 돌아보기

작년 트윗으로 ‘2016 돌아보기’에 이어 올해도 ‘2017 돌아보기’를 해보았다.

트윗으로 2016 돌아보기

이유는 작년과 마찬가지로 주로 나의 감상을 남기는 매체가 트위터기 때문이다. 그리고 올해의 트윗 돌아보기는 16/17년 비교를 시도해 보았다.

일단 트윗수를 살펴보자. 17년은 16년보다 더 트잉여였다 (…) 대략 44%정도 더?

2016년 1,327 트윗

2017년 1,917 트윗

얼마나 꾸준히 트잉여 였을까? 월별로도 살펴보았다. 1년 내내 트잉여 였다 (…) 12월을 빼고는 매달 2017년 트윗이 많았다.

이번에는 시간대 별로 살펴보았다. 아래 결과는 조금 재밌었는데, 출근시간과 퇴근시간 그리고 저녁시간대의 트윗이 상당히 증가한걸 알 수 있다. 그러니까 트잉여가 된건 나의 여유 시간을 트위터에 상당 부분 사용했기 때문인 걸로 보인다.

2017년에 많이 쓴 트윗 명사들은 뭘까? 지난번 분석처럼 KoNLP 패키지를 사용해 명사를 뽑아서 워드크라우드를 그려보았다. 출/퇴근, 런닝, 영화, 지하철, 축구, 시즌, 넷플릭스 등 나의 관심사가 비교적 잘 드러나는 단어 들이다 -.-;

16년과 많이 달라진 결과일까? 일단 16/17년도의 자주 쓰인 명사 Top 10을 뽑아보았다. ‘주말’, ‘영화’, ‘런닝’, ‘서울’ 등 일관된 관심사는 두 해 모두 꾸준히 많이 등장하였다. 차이가 좀 있다면 ‘데이터’가 2017년에는 자주 쓰는 단어는 아니었던 모양. 실제로 40% 정도 덜 사용하였다. (참고로 전체 트윗은 44% 증가)

그럼 두 해동안 차별적으로 많이 쓴 단어는 무엇일까? 예전에 영화평으로 비슷한 분석을 한적이 있다.

스파이더맨-홈커밍 vs. 어매이징 스파이더맨 – 영화평 비교

여기에도 동일한 분석을 사용해 보았다. 결과를 보면 17년도에는 일단, 스타를 열심히 했나 보다 (…) 그리고 국대 경기를 더 많이 보았다. ‘년전’,’시절’과 같은 단어는 아마도 과거를 더 많이 회상 했기 때문인듯? 울산은 아마도 크리그 이야기 인거 같고, 퇴근에 대한 이야기는 왜 더 많은지 (…) 퇴근을 16년도에 비해 비교적 제때 해서 그런가? 반면, ‘공부’, ‘코드’, ‘구현’등은 16년에 더 많이 쓴 단어. 17년도에는 별로 공부를 안했나 보다 (하지만 17년도에 코딩이 있으니 괜찮지 않을까…?)

종합해 보면, 영화, 런닝, 축구등에 대한 관심은 계속 꾸준했고, 17년은 과거를 좀 더 회상 했고, 스타를 재미나게 했던, 반면 공부는 별로 못한 (…) 한해 정도로 정리가 될까? 공부좀 해야겠다 -.-;

추가로 과거에 대한 회상은 아마도 아래에 링크한 ‘나만의 서비스 만들기’라는 토이 프로젝트의 영향이 아닐까 싶다. 이걸로 아침마다 n년전 나의 트윗을 꾸준히 보고 있는데, 과거의 내 생각들을 보는게 재밌다. 그리고 내가 만든 무언가가 내 생활에 영향을 미친다는것도 흥미로운 경험.

나의 첫 슬랙앱 – 오늘의 추억 트윗 Ver.

 

크리스마스 눈사람 만들기 w/ R & Plotly

크리스마스를 기념하여 3D 눈사람을 만들었다.

작년 크리스마스엔 트리를 만들었었는데, 어쩌다보니 크리스마스 기념으로 R을 사용해 무언가 만드는게 연례행사가 되었다 -,-;

크리스마스 트리 만들기 w/ R & Plotly

일단 눈,코는 그냥 점으로 찍었다. 이건 그냥 평범.

눈사람이 트리와 달랐던 점은 원을 그려야 했다는거. 그리고 원을 그리는데 삼각함수는 유용한 도구 이다.

첫번째로 그린원은 눈사람의 웃는 입모양, 간단히 반원을 그리면 된다. 그리고 sin(x)을 이용하면 간단히 반원을 그릴 수 있다. 참고로 위에서 x는 -pi<=x<=0 범위의 값.

반원의 크기나 위치등은 간단히 곱하기로 조절하면 된다. 아래 그림은 sin(x)에 각각 곱하기 1,2,3을 한 경우

얼굴이 완성되었다. (간단)

이제 눈사람의 핵심인 구 2개를 그려야 한다. 구를 그리는 방향은 여러가지가 있겠지만, 일단 내가 사용한 방법은 적당한 난수가 3D 구 모양으로 찍히는 방법을 택했다.

참고한 방법은 SO의 Plot points on a sphere in R 와 Wolfram MathWorld의 Sphere Point Picking 라는 아티클을 살펴보았다. 결과적으로 아래의 식을 따르면 된다.

n <- 10000
theta <- runif(n,0,2*pi)
u <- runif(n,-1,1)
x <- sqrt(1-u^2)*cos(theta)
y <- sqrt(1-u^2)*sin(theta)
z <- u

구의 크기나 위치는 위의 결과값에  적당히 값을 곱하거나 더해서 조정.

위에서 사용한 식을 적당히 조정하고, plotly를 이용해서 색도 넣고 점의 크기등 도 조절해서 결국 눈사람을 만들었다 (…)

메리 크리스마스! 🙂

이곳에 가면  3D 눈사람을 인터렉티브하게 돌려볼 수 있다.  이 작업에 코드한 코드는 여기에서

 

언제 열받나? – 대한민국 vs 모로코 A매치 평가전 댓글 감정 분석

구글에서 재밌는 도구가 나왔다. 한국어 문장의 감정을 분석해 주는 API. 예를들어 아래와 같은 문장을 보내주면 감정 점수 -0.9점을 돌려준다. (참고로 점수의 범위는 -1~1까지)

“수비 너무 심하다 진짜”

해당 API에 대한 자세한 설명은 관련 문서나 소설 분석 관련 블로그 포스팅에서 확인할 수 있다. 이번 포스팅에 많은 영향을 준 글.

축구관련 댓글은 예전 포스팅을 통해 주요 단어 혹은 그 양에 대해서 살펴본적이 있다.

K리그 최종전 라이브 댓글 분석-서울 VS. 전북, Part 1

K리그 최종전 라이브 댓글 분석-서울 VS. 전북, Part 2

하지만 감정 분석까지는 해보지 못했는데, 이번 구글 API덕에 새롭게 시도해 볼 수 있었다.

굳이 A매치 경기 댓글을 선택한 이유는, 아무래도 스포츠 경기를 보다보면 열받기 때문에 감정이 잘 나타나지 않을까 싶어서 (…)

이미 알고 있듯이 이 경기는 한국이 1:3으로 패배했다. 초반부터 상당히 밀린 경기였다. 전반 시작하자 마자 2골, 후반시작하자 마자 1골을 실점했다. 이후 1골을 손흥민이 PK로 넣었다.

댓글은 네이버 응원 한마디의 글을 클롤링 했으며, 경기 시간의 댓글만 살펴보았다 (한국 시간 기준 10월11일 오후 10시30분~ 10월 12일 오전 00시 30분). 대부분이 한국 국대에 대한 글로보이기 때문에 팀은 굳이 구분해서 수집하지 않았다. 전체 댓글은 약 5만여건

전체 댓글의 양은 아래와 같다. 초반 실점때 댓글이 가장 급증. 후반 초기에 또 실점 했을 때(…) 증가. 그리고 1골 넣었을 때 다시 약간 올라가고 경기 끝날때 다시 올라간다. 결국 골 넣을때 사람들의 반응이 주로 폭발.

감정분석 API는 쿼터가 있기 때문에 전체 댓글을 던지지는 않고, 1,000개 정도만 랜덤 샘플링 해서 던졌다. 전체 점수별 빈도를 보면, 아래와 같다. 중간정도의 값이 상당히 많다. 물론 진 경기 때문에 전반적으로 감정 점수가 낮은쪽이 많다. 평균값은 약 -0.137.

몇가지만 대표적으로 살펴보면, 나쁜 혹은 욕이 포함된 댓글은 말그래도 나쁜 점수를 받았다 (…) 의외로 그럴듯한 결과. 높은 점수를 받았던 경우는 ‘조롱’섞인 표현은 그냥 문자그대로 점수를 돌려주기 때문에 오히려 좋은 점수를 받기도 했다.  참고로 문장에 ‘모로코’가 들어간 경우는 분석에서 제외했다. (아마도 모로코를 칭찬하며 한국 국대를 조롱하는 글 (…))

[table id=13 /]

해당 문장에 대한 평가만 리턴해 주기 때문에 전반적으로 맥락 정보는 별로 고려되지 않는 느낌. 그렇다고 전반적인 평가가 잘못 이해되는 수준까진 아닌듯하다.

댓글 등록 시간을 기준으로 시간별 감정 점수의 변화를 살펴보고자 했다. 그냥 point로 찍으면, 사실상 패턴을 살펴보기가 매우 어려워서, 이동평균을 사용하였다. (a댓글의 전후 50개 댓글을 기준으로 평균 값을 얻음)

일단, 전반적으로 점수는 마이너스(-)에서 머물고 있다(…). 댓글이 가장 많았던 시점인 초반에 점수가 쭉 떨어지는걸 확인할 수 있다. 다소 회복 되다가 다시 나빠지는 패턴을 반복한다. 그러다가 골을 넣었을때 다소 회복되는걸 확인할 수 있다. 그러나 점수가 +가 되진 않는다 (…). 그리고 다시 점수가 전반적으로 하강.

새로운 결과 보다는 예상과 어느정도 맞는 결과이다. 실점할때 욕먹고, 이미 실점한 이후에 득점을 해도 회복은 가능하지만 그다지 반전은 일어나지 않았다.

이 결과를 보면서 구글 API 감정 분석도 그럭저럭 나쁘지 않은 도구로서 사용될 수 있지 않을까?라는 생각이 들었다. 그리고 조롱하는걸 오히려 정반대로 평가해도 대세에 큰 영향을 미치지는 않는것 같다. (아니면, 그냥 욕이 많을 걸 수도…)

결국 댓글이 많은 시점에 전반적인 감정의 방향도 같이 바뀐셈인데. 이건 스포츠 경기이기 때문에 당연한 결과로 보인다. 하지만, 분석하는 문장의 도메인이 바뀐다면, 이런 패턴이 다르게 나올 수도 있지 않을까 싶다.

분석에 활용한 코드는 여기.

다소 늦은 서울시립미술관(SeMA) 데이터 둘러보기

서울시립미술관(SeMA)  데이터를 사용해서 이것저것 만들어 보긴 했는데, 생각해보니 데이터가 어떻게 생겼는지 구체적으로 살펴본 적이 없다 (…)

사실 미술에 관해서는 미술관에 종종가는 취미만 있는 정도이라, 어떤게 새로운 사실인가?까지는 모른다. 그냥 데이터를 이리저리 살펴보는 재미로 봐주시길.

1. 작품의 종류

작품종류를 살펴보면, 대부분이 ‘회화’이다. 다음은 ‘사진’, 그리고 ‘한국화’, ‘드로잉&판화’등이 수집되어 있다. 역시 미술관의 중심은 회화. 그리고 의외로 사진이 많다는 점도 인상적이었다.

2. 수집 시기 &  작품종류

전체 작품의 수집시기는 2000년대에 많은 작품이 수집되었고, 2010년대 들어서 다소 감소후 일정한 수준을 유지하고 있다.

수집 시기와 작품의 종류를 살펴보면, 좀 더 재미있는 결과가 나온다. 1) 최근으로 갈수록 보다 다양한 작품종류를 수집하는걸 확인할 수 있다. 2) 회화, 한국화는 최근 다소 감소하였으나, 뉴미디어, 설치, 조각등은 전반적으로 상승 중. 3) 2000년대 이후 사진 수집이 폭발적으로 증가하였다. 즉, 회화가 미술 수집의 중심이긴 하지만, 그 다양성이 확대 되고, 특히 사진이 급격하게 떠오른걸 확인할 수 있다. 대세는 이제 사진인가(?)

 

3. 제작시기 & 수집시기 & 작품종류

수집된 작품의 제작시기를 살펴보면 제작시기 역시 비교적 최근 작품이 주로 수집되고 있는걸 확인할 수 있다. 참고로 제작시기 데이터는 전체 데이터를 사용하지 않고, 정확하게 제작년도가 표기된 자료만 사용하였다. 연도 미상이나 제작년도가 특정 년도가 아닌 범위로 표기되면 제외하였다.

흥미로운건 작품 종류별 제작 & 수집시기의 분포인데, ‘사진’은 2000년대 들어서 수집되기 시작했지만, 제작 자체는 그보다 오래된 경우가  상대적으로 많다.  ‘회화’나 ‘한국화’도 유사한 형태가 보이긴 하지만, 작품의 제작시기와 유사하게 수집이 안되고 있지는 않았다.

즉, 사진은 서울 시립미술관에서 수집 작품으로서 고려되고, 실제로 수집이 실행되는데 작품의 제작시기에 비해 꽤나 시간이 걸린셈.

5. 제작 재료

이 자료에서 개인적으로 재밌는 부분 중 하나는 제작에 사용된 재료들도 같이 표기되어 있다는 점이다. 그리고 재료는 작품을 설명하는 중요한 요소이기도 하다. 데이터를 살펴보다보면 다른 종류의 작품이지만, 동일한 재료를 사용하기도 한다. 그래서 이부분을 네트워크 관점에서 살펴보기로 하였다.

예를들어, ‘공예’나 ‘뉴미디어’ 등에도 캔버스가 재료로 사용되기도 한다. 주재환 (2008), 미끼는 무얼 매달아야 할까? 라는 ‘뉴미디어’ 작품은 ‘캔버스에 유채, 쥐덫’을 사용했다.  정필순 (1990) 심향 – 7 이라는 ‘공예’작품은 ‘캔버스에 아크릴릭,실크실’을 사용했다.

일단 데이터를 약간 정제했다.  예를들어 ‘캔버스에 유화’는 ‘캔버스’와 ‘유화’로 나누고, ‘oil on canvas’ 은 ‘oil’과 ‘canvas’로 나누었다.  제일 많이 사용된 재료는 캔버스, 유채, 종이 등 아무래도 작품자체가 회화가 많아서 그렇다. 사실 캔버스와 canvas는 의미적으로 한/영의 차이일 뿐 인거 같지만, 굳이 하나는 영어로 쓴 의미를 잘 모르겠어서 일단은 그대로 영문은 영문대로 한글은 한글대로 분석에 사용하였다.

전체 도구들 중에 5번 이상 사용된 도구들만 가지고 네트워크를 그렸다(약 상위 12%). 네트워크의 기준은 예를들어 한작품에 캔버스와 유화가 같이 쓰이고 다른 작품에서 캔버스와 연필이 쓰이면 각각의 재료들이 연결되는 식이다. 그리고 연결되는 건수가 많으면 해당 링크도 굵게 표기되었다.

작품 종류별로 그룹을 지었는데, 특정 재료가 여러 작품 종류에서 사용되는경우, 가장 많은 작품수에 해당하는 경우로 표기했다. 예를들어 캔버스는 대부분 회화에서 사용되기 때문에 ‘회화’그룹으로 넣었다. 참고로 아래 네트워크는 인터렉티브 차트이다. 확대/축소하거나 화면, 노드등을 움직여 볼 수 있다.

//khg423.dothome.co.kr/wp-content/uploads/2017/10/tools_web.html

일반적으로 가장 많이 다른 재료와 연결되어 있는건, ‘캔버스’, ‘종이’, ‘나무’, ‘아크릴릭’ 등 이유는 역시 ‘회화’가 가장 많기도 하고, ‘회화’의 경우 대부분 해당 재료 이외는 잘 쓰지 않는것 같기도 하다.

다른 여러 재료들과 연결 역할을 하는건, ‘나무’, ‘혼합매체’, ‘혼합재료’ 등의 재료이다. 이유까지는 모르겠지만, 여러 작품 종류에 사용하기 무난하기 때문인듯

이를 제작 시기별로도 한번 살퍼보았다. 비교 대상은 1980년대와 2010년대 제작. 작품수는 각각 780개와 819개로 큰 차이가 없지만, 수집 작품이 회화중심에서 사진, 뉴미디어, 조각, 설치등 다양해 지면서, 재료는 2010년대가 훨씬 풍부하고 연결도 많이 되어 있는걸 확인할 수 있다.

1980년대
//khg423.dothome.co.kr/wp-content/uploads/2017/10/tools_web_80.html

2010년대
//khg423.dothome.co.kr/wp-content/uploads/2017/10/tools_web_10.html

어떤 결론을 내리기 보다는 가지고 놀고 있는(?) 자료에 대한 탐색적 분석을 시도해 보았다. 대략적으로 확인할 수 있는건 아래와 같다.

1. 사진이  의외로 뒤늦게 수집 목록에 올랐다는 점. 그리고 지금은 꽤나 주류가 되어 가고 있다는점이 흥미로웠다. 어찌보면 사람들이 접하기 쉬운 작품종류이기도 하다. 다들 주머니에 스마트폰이라는 사진기 하나정도 들고다니니

2. 회화중심에서 벗어나면서 사용되는 재료간의 연결도 확장되고 다양해 지는걸 볼 수 있다. 물론 회화에는 보다 디테일한 다양한 재료들이 쓰이고 있고, 이 지점들이 상세하게 표현되어 있지 않기 때문에 생기는 일일 수도 있다.

분석에 사용한 코드는 여기

SeMA 이미지 데이터로 그림그리기

데이터로 새로운 결과물을 만들 수 없을까?

사실 서울시립미술관(SeMA) 데이터를 활용한 ‘트윗봇‘이나 ‘챗봇‘ 모두 기존에 있는 데이터를 재배열하는 작업에 가까웠다. 그래서 뭔가 새로운걸 만들어내는 작업을 해보고 싶었다.

아래 사진은 실제 미술관에 소장중인 작품목록에 있는 작품이다. 한성필 (2011)의 ‘서울시립미술관’

그리고 아래 2 작품은 기존의 다른 작품의 스타일을 적용한 그림이다. 첫번째 스타일은 유인수(2007), ‘일상적 이미지’를 위의 작품에 적용한 그림이다.

두번째 스타일은 고흐(1889)의 ‘별이 빛나는 밤’의 스타일을 위의 작품에 적용한 그림이다.

기존의 작품과 묘하게 잘 어울리기도 하고 스타일이 그럭저럭 잘 적용된 흥미로운 결과물이었다.

이 작업에 사용한 코드는 Neural-Style 딥러닝 코드이다. 파이썬 기반이며, 따로 코드를 수정하는 작업은 하지 않았고, 있는 그대로 활용하였다.

맥북에어의  CPU로 작업하니 작업이 너무 오래 걸려서(…) 실제 구현 환경은 윈도우 환경인 데스크탑의 지포스 GPU를 사용. 이미지 하나에 2분정도 걸렸다. 안타깝게도 GPU의 메모리 부족으로 그림 크기를 크게 만들지는 못했다 ㅠ

구체적인 구현 환경은 텐서플로-GPU 버전과, CUDA 8.1 , cuDNN6.0 for CUDA 8.0을 사용하였다. 적용방법은 관련 블로그 글들을 참고 하였다.

처음 생각은 트윗봇에 올리고 있는 미술작품들을 랜덤하게 선택해서 한 작품의 스타일을 다른 작품에 적용한 결과를 올리는 기능을 추가하려 했는데, 몇가지 작업 해본결과. 결과가 생각보다 별로였다 ㅜㅠ

여기에는 몇가지 이유가 있는것으로 보인다. 첫째는 ‘스타일’을 적용하기 적합한 그림을 구분하는게 쉽지 않았다. 예를들어 사진과 사진은 한쪽의 스타일을 다른 한쪽에 적용하기 적합하지 않았다. 심지어 회화 작품이라고 해서 모든게 다 적합하지도 않았다. 두번째는 데이터 자체가 잘 정제되어 있지 않기 때문에 생기는 문제로 보인다. 이미지의 화질이 매우 좋지 않다거나, 작품만 스캔하듯이 데이터화 시킨게 아니라 액자등 온갖 배경들이 포함되어 있는 경우가 많았다 (…) 좋은 데이터를 입력(input)하지 않으니, 좋은 결과(output)를 기대하기 힘들었다는 이야기 (…)

그리고 마지막으로 이건 재미삼아 진행해본, 영상의 프레임을 나눠서 피카소 그림의 스타일을 먹인후 다시 영상으로 만든 작업물. 어째 아티스트의 스타일보단 왠 화질구지스러운 결과물이 나왔다 (…)

워드프레스닷컴으로 이처럼 사이트 디자인
시작하기