지난번엔 R의 lapply, sapply, vapply를 살펴봤다. 이어서 다른 종류의 apply를 알아보도록 하자. apply lapply와 sapply는 모두 리스트를 입력으로 받아서 각 리스트에 함수를 적용한다고 했다. 만약 리스트가 아닌 행렬(matrix)을 입력으로 넣으면 어떻게 될까? rnorm()으로 평균 0, 표준편차가 1인 정규분포를 갖는 20x10 행렬을 만들었다. 그리고 lapply로 평균을 구해보니, 결과가 무려 200개의 리스트가 나온다. 즉, 행렬의 각각의 요소를 리스트의 개별 요소로 보고 처리한 것이다. 보통 행렬에서는 각각의 행이나 열에 대해 함수를 적용하는 것이 필요하다. 이런 경우에 apply를 사용하면 된다. apply 함수의 두번째 인자로 1을 넣으면 행(row)에 대..
모바일 웹을 하다보면 SNS 공유 버튼 기능이 필요할 때가 있다. 간단하게 카카오톡, 페이스북, 트위터 공유 기능을 자바스크립트로 구현하는 것을 정리해 보도록 한다. 카카오톡 링크 공유하기 카카오톡 공유하기를 위해서는 먼저 카카오톡에 개발자 계정 등록을 해야 하고, 개발한 사이트의 URL도 앱 생성후 등록해야만 한다. http://developers.kakao.com 에서 기존 카카오톡 계정으로 설정하면 된다. 내 어플리케이션으로 이동해서 신규 어플리케이션을 웹으로 만든 다음, "설정 > 일반"에서 Javascript 키 (빨간색으로 표시)를 사용해서 카카오톡 링크를 구현할 수 있다. 그리고 카카오톡으로 공유하기를 보내기 위해서는 반드시 플랫폼이 등록되어야 한다. 위와 같이 사이트 도메인을 추가하고 저장..
R에는 lapply, sapply, vapply, apply, tapply등 다양한 apply 함수들이 존재한다. 데이터 분석에서 "Split-Apply-Combine" 이라는 전략을 구현한 것이 바로 apply이다. 즉, 데이터셋을 나누어서 각 조각들을 만들고, 각각의 조각에 특정 함수를 적용하고, 결과를 합쳐서 제공한다는 것이다. lapply 먼저 lapply부터 살펴보자. lapply의 l은 리스트를 나타낸다. 즉, 입력으로 리스트를 받아서 결과로 리스트를 제공한다는 것이다. lapply를 테스트하기 위해 먼저 리스트를 만들어 보자. rnorm은 정규 분포를 따르는 수를 만드는 것으로, rnorm(10)은 기본값으로 평균 0, 표준편차 1인 정규분포를 갖는 10개의 수를 만든다. 리스트의 각 항목,..
미니서평 누군가를 설득하려는데 잘 안되고, 반대로 누군가에게 쉽게 설득당한다고 느껴질 때, 한 번 읽어봐야 할 책인 듯 하다. 로버트 치알디니는 다양한 상황에 대한 예시를 통해 왜 우리가 쉽게 설득을 당하는지를 설명해주고 있다. 가장 먼저 이야기하는 부분은 "누르면 작동한다"는 고정 행동 패턴이다. 실제로 한 회사에서도 뭔가 불필요한 작업들이 계속 될 때, "왜 이렇게 하지요?"하고 물어보면, 십중 팔구는 "원래부터 그랬어요"라는 답변이 돌아온다. 이것은 일관성의 원칙, 사회적 증거의 원칙, 권위의 원칙과도 일맥 상통하는 부분이다. 신속한 결정을 위해 고민하기 보다는 기존의 방법대로, 또는 다수의 행동을 따르려는 성향, 명령에 대한 맹목적인 복종에 해당한다고 볼 수도 있다. 로버트는 이런 설득의 원칙에 ..
존스 홉킨스 대학의 로저 펜(Roger, D. Peng) 교수의 R 프로그래밍 강좌의 프로그래밍 테스트를 한글로 옮겨본다. R 프로그래밍을 배우는 사람들은 한번씩 테스트 해보기 바란다. 데이터 본 예제에서 사용하는 데이터를 다음 링크에서 다운로드 한다. 문제 - 오염된 값 사이의 상관관계 계산하기 마지막으로 지정된 파일을 읽어서 오염된 값 sulfate와 nitrate의 상관관계를 계산하는 함수를 만들어 보자. 단, 각 파일(모니터링 아이디)별로 sulfate와 nitrate의 값이 모두 존재하는 경우의 수가 매개변수로 지정된 임계치(threshold)보다 큰 값만 대상으로 한다. 결과값으로 임계치(threshold) 조건을 만족하는 모니터링 아이디의 상관관계 값의 벡터를 리턴한다. 만약 모든 모니터링 ..
OpenCV를 활용한 이미지의 유사도 비교에서 먼저 피처 매칭을 살펴봤다. 오늘은 히스토그램 비교를 알아보도록 하자. 히스토그램은 매개변수에 따라 Correlation, Chi-square, Intersection, Bhattacharyya 각각의 결과값을 가질 수 있다. 그래서 중요한 부분이 각각의 결과값을 어떻게 해석하는 것이다. Correlation과 Intersection은 값이 클수록 유사한 것이고, Chi-square와 Bhattacharyya는 값이 작을수록 유사한 것으로 판단한다. Comparing Histogram 먼저 전체 소스를 살펴보면 다음과 같다. 마찬가지로 C로 구현되어 있는 Histogram 소스를 자바로 변환한 것이다. package kr.co.acronym; import j..
존스 홉킨스 대학의 로저 펜(Roger, D. Peng) 교수의 R 프로그래밍 강좌의 프로그래밍 테스트를 한글로 옮겨본다. R 프로그래밍을 배우는 사람들은 한번씩 테스트 해보기 바란다. 데이터 데이터는 다음 링크에서 다운로드 하면 된다. 문제 - 오염된 값을 모두 측정한 경우의 수 계산 지정된 디렉토리의 파일들을 읽어서, 각 파일 내에 "sulfate"와 "nitrait"값이 모두 측정된 경우의 수를 계산하는 함수를 작성한다. 함수의 결과값으로 반드시 데이터 프레임을 리턴하도록 한다. 첫번째 칼럼은 파일 이름, 즉 모니터링 아이디(ID) 값으로 하고, 두번째 칼럼은 오염된 값을 모두 측정한 수로 한다. 함수의 프로토타입은 다음과 같다. complete
OpenCV의 설치와 자바 프로그래밍 테스트를 살펴봤으니, 이제 이미지 유사도 비교를 해보도록 하자. OpenCV를 활용한 이미지의 유사도 비교는 히스토그램 비교, 템플릿 매칭, 피처 매칭의 세 가지 방법이 있다. 오늘은 이 중에서 피처 매칭(Feature Matching)을 알아보도록 하자. Feature Matching 먼저 전체 소스를 살펴보면 다음과 같다. 일반적으로 C로 구현되어 있는 Feature Matching 소스를 자바로 변환한 것이다. package kr.co.acronym; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.DMatch; import org.opencv.core.Mat; ..
존스 홉킨스 대학의 로저 펜(Roger, D. Peng) 교수의 R 프로그래밍 강좌의 프로그래밍 테스트를 한글로 옮겨본다. R 프로그래밍을 배우는 사람들은 한번씩 테스트 해보기 바란다. 데이터 본 예제에서 사용하는 데이터를 다음 링크에서 다운로드 한다. 압축을 풀면 332개의 CSV 파일이 specdata 폴더에 존재한다. 미국의 332개 지역의 공기 오염 상태를 모니터링하는 데이터로서, 각각의 파일에 모니터링 지역의 ID 값을 가지고 있고 그 ID 값으로 파일 이름을 사용하고 있다. 각 파일의 내부에 포함된 내용은 다음과 같다. Date: the date of the observation in YYYY-MM-DD format (year-month-day)sulfate: the level of sulfa..
일반적으로 DB에서 특정 단어가 포함된 레코드를 찾기 위해서 LIKE 를 주로 사용한다. 그러나 LIKE는 '%단어%'와 같이 사용할 때, 인덱스를 사용하지 않기 때문에 속도가 느려진다. 또한 LIKE를 여러 필드 (예를 들어, title과 keyword 등)에 동시에 적용하면서 여러 단어를 검색어로 전달하면 쿼리가 복잡해지기도 한다. > select * from board > where (title like '%학교%' or body like '%학교%') > and (title like '%취업%' or body like '%취업%'); 이를 대체하기 위해서 정규표현식을 적용할 수도 있다. 그러나 정규표현식도 마찬가지로 인덱스를 거치지 않고 풀 스캔(Full Scan)이 일어나기 때문에 느리다. > ..