2016년 1월 30일 토요일

블로거 활동 6개월

작년 7월 부터 본격적으로 블로거 활동을 시작했다.
데이터를 다루는 경험들을 정리하기 시작 했고,
구글 애널리틱스 연동 4인방을 통한 컨텐츠의 생산과 소비 할동 분석에 학습의 의미를 두었다.

6개월이 지난 시점에 잊고 있던 애드센스 승인이 났고 흐뭇한 마음에 소회를 남긴다.

블로거는
망각 되었을 지식을 담아두는 도서관이 되었고, 급하게 경험을 찾는 은행이 되었다.
기술을 재해석하는 기쁨을 누렸고, 자신을 되돌아 보는 일기장이 되었다.
손에 쥔 수첩처럼 함께 하고, 친구처럼 늘 곁에 있다.

글은 어떻게 써야 하나 고민하던 아이는 기록을 남기는 일에 부족함을 다할 뿐이다.

블로거는 미래의 자신을 이해시키는 방법이다.


* 구글 애널리틱스 연동 4인방
애드센스, 에드워즈, 유튜브, 블로거


애드센스 승인 후 변경된 페이지

2016년 1월 28일 목요일

협업적 여과 방법

전자상거래 추천 자주 사용되고 있는 협업적 여과 방법을 이해하고, 관련한 주요 알고리즘을 알아 본다.

협업적 여과 방법

(Collaborative Filtering, CP)
사용자로 부터 얻은 기호 정보에 따라 관심사를 자동적으로 예측하게 해주는 방법이다.
널리 애용되는 방식이며 데이터가 풍부할 수록 정확한 예측에 유리하다.

사용자 기반의 유사 기호 군집 나누기
인구통계학적인 접근
 - 연령대, 성별, 지역 …
고객 세분화 기법
 - RFM (Recency, Frequency, Monetary)

아이탬 기반의 연관 상품 찾기
연관 규칙
 - 하나의 트랜잭션 내에서 동시 발생되는 항목간의 연관성을 발견한다.
순차 패턴
 - 트랜잭션 간에 순차 관계 연관성을 발견한다.

상품 추천 예시
 - 같은 연령대가 자주 구매하는 상품 목록을 제공한다.
 - 선택한 상품과 같이 자주 구매하는 상품 목록을 제공한다.
 - 같은 연령대가 선택한 상품과 같이 자주 구매하는 상품 목록을 제공한다.

* 선택 요소
차원 별로 추천 항목을 관리하고, 구매자가 여과해서 볼 것인가?
판매자가 위치에 가장 적합한 항목을 구매자에게 노출할 것인가?

관련 알고리즘

RFM (Recency, Frequency, Monetary)
수익에 기여하는 주요 영향인자인 RFM(최근, 빈도, 금액)에 가중치를 둬서 고객을 세분화하는 기법이다.

연관 규칙 (Association Rule)
하나의 트랜잭션 내에서 동시 발생되는 항목간의 연관성을 발견한다.
{a,b}, {a,b,c,d},{d}

순차 패턴 (Sequential Pattern)
트랜잭션 간에 순차 관계를 통해 향후 구매될 상품을 예측한다.
{a,b,c} -> {b,d} -> {a,c,e}

연관 규칙을 찾기 위한 Apriori 알고리즘 
데이터 처리 시에 방대한 자료 구조 비용을 해소 하고자, 바톰/업 방식으로 빈번하지 않은 부분 집합을 제거해가는 방식이다. 포인트는 집합의 빈도는 집합의 부분 집합의 빈도보다 많을 수 없다는 사실에서 시작한다.

빈번하지 않다는 것은 지지도가 낮은 것을 의미하는데, 공식을 통해서 알아보자.
순차 패턴에서 방향성을 표현한다고 할때 지지도와 신뢰도이다.

A -> B

지지도(support)
A와 B를 동시에 포함하는 트랜잭션 수 / 전체 트랜잭션 수

신뢰도(confidence)
A와 B를 동시에 포함하는 트랜잭션 수 / A를 포함하는 트랜잭션 수
= 지지도 (A and B) / 지지도 A

지지도와 신뢰도를 충족하는 목록을 추출하는 것이 목적이다.


커버사진
출저: 아마존 상품 추천 화면

전자상거래에서 상품 추천 방법들

본문은 영감을 얻을 수 있는 다양한 추천 방법들을 정리한다.

협업적 여과 (Collaborative Filtering) 추천
사용자로 부터 얻은 기호 정보에 따라 관심사를 자동적으로 예측하게 해주는 방법이다.

관점에 따라 다음 두 가지로 나뉜다.

사용자 기반
사용자의 유사도를 기반으로 선호 아이템을 추천하는 기법이다.
예) 비슷한 성향을 가진 A 그룹에 속해 있는 사람에게 A 그룹에서 선호하는 아이템을 추천한다.

아이템 기반
아이템의 유사도를 기반으로 연관 아이템을 추천하는 기법이다.
예) A 아이템 구매 고객에게 같이 팔리는 빈도가 높은 아이템을 추천한다.


아이템 계층 기반 추천
아이템의 계층 구조를 기반으로 하는 추천이다.
예) 필름 카메라를 샀다면, 필름이 필요할 것이다.


소셜 기반 추천
소셜 관계를 기반으로 한다.
예) 구작가 계정을 팔로우 하고 있다면, 베니 로고 제품을 선호할 것이다.


속성 기반 추천 
아이템 중요 속성과 연관성을 기반으로 하는 추천이다.
예) A 영화 좋아하는 사람에게 같은 장르나 배우의 영화를 추천한다.


차원 축소 추천
아이템의 공통 분모를 기반으로 하는 추천이다.
예) 사자를 좋아한다면, 육식 동물인 호랑이도 좋아할 것이다.

모델 기반 추천
복합적인 차원 모델을 기반으로 한다.

2016년 1월 27일 수요일

구글 애널리틱스 활용하기 - vs 마케팅

구글 애널리틱스(약칭 GA)의 활용도를 크게 두 가지로 나눠 본다.

vs 사이트
사이트의 구조 및 상품 노출을 개선하고 GA 리포트를 확인하는 사이클이다.

vs 마케팅
GA 리포트를 활용해서 마케팅에 활용하는 사이클이다.

본문은 후자(vs 마케팅)에 활용하는 사이클에 대한 한 가지 방법을 다룬다.

요약하자면, 수집된 데이터에서 의미 있는 군집을 정의하고, 리마케팅에 활용하는 방법이다. 절차는 다음과 같다.

1. 분석
다양한 차원 기능를 활용해 의미 있는 행동 패턴을 가진 집단을 찾는다.

2. 정의
유용한 집단을 세그먼트 (in 리포트)단위로 정의 한다.

3. 활용
세그먼트들을 통해서 리마케팅 잠재고객 (in 관리/속성)군을 만들고 에드워즈에서 타겟팅 용도로 활용한다.


References

리마케팅 잠재고객
1개 이상의 타겟팅 광고에 대한 타겟 사용자의 집합을 나타내는 쿠키 또는 모바일 광고 ID의 목록이다.
* 현재 User ID 보기에서 지원되지 않는다.

리마케팅 잠재고객 맞춤 조합
장바구니 담기 -> 구매 절차가 있다고 할때,
잠바구니에 담기만 하고 구매를 안한 잠재 고객을 정의 할때는 맞춤 조합으로 다음과 같이 정의 할 수 있다.
맞춤 조합 #1 = 장바구니 담은 잠재고객 + 구매한 잠재고객 제외

(비동적) 리마케팅
측정기준 및 측정항목 기반으로 잠재 고객을 정의 한다.

동적 리마케팅
카테고리별로 필요한 세부적인 사용자 측정기준 및 측정항목 기반으로 잠재 고객을 정의한다.

잠재고객
같은 성향을 가지는 방문 고객들의 집합이다.


커버 사진

2016년 1월 26일 화요일

이베스트 투자 증권 API 연동 방법

자동 주식 매매를 위한 이베스트투자증권 API 연동 방법을 요약한다.

1. 이베스트 계좌 개설 (오프라인)
근처 은행에서 통장에 연계 계좌를 개설한다.

2. 이베스트 계좌를 등록 (온라인)
인터넷으로 이베스트 계좌 및 (증권용) 공인 인증서를 등록한다.

3. API 사용 등록 (온라인)
홈피에서 API 사용에 동의한다.

4. Xing API 설치 및 사용
Xing API를 설치한 폴더에 reg.bat 파일을 “관리자 권한”으로 수행한다.
DevCenter를 실행하고, reg 파일을 모두 다운로드 한다.

5. 파이썬 설치
아나콘다(anaconda)를 통해서 python3.x 32bit 버전 설치

6. DLL, COM 객체 모델을 이용한 API 호출
DLL은 빠른 대신에 Only C/C++을 지원한다.
COM은 조금 느리지만 다양한 언어를 지원한다.
파이썬은 pywin32 라이브러리를 사용한다.

7. 테스트 환경
Xing API 설치 시에 같이 설치된 Xing ACE를 통해서 모의 테스트를 할 수 있다.



* (윈도우가 답답한) 맥 유저를 위한 팁

1. 관리자 권한으로 주피터 노트북을 연다.
2. 윈도우 방화벽에 인바운드(python) 허용한다.
3. 맥에서 주피터 노트북에 접속한다.


References

COM (Component Object Model)
마이크로소프트가 개발한 소프트웨어 구성 요소들의 응용 프로그램 이진 인터페이스이다.

본문 참고 사이트
https://wikidocs.net/1582


커버사진
출처 : 이베스트 홈페이지



2016년 1월 20일 수요일

자바 사용 시 궁금한 내용 메모하기

본문은 자바 프로그래밍 언어를 접하면서 궁금한 내용들을 정리한다.

자바 로컬 환경 구성하기

1. 통합 도구 설치
    1. 통합 개발툴 이클립스 설치
2. 웹 어플리케이션 서버 환경 구성
    1. 톰켓 설치
        1. 바이너리 다운로드
        2. bin/*.sh 실행권한 주기
    2. 이클립스 서버 환경에 톰켓 위치 등록
        1. 프로젝트 구동시에 호출됨
3. 프로젝트 생성하기
    1. 빌드 도구를 통한 자동 관리
    2. 빌드 설정은 매우 난해함
4. 프로젝트 구동하기
    1. 서버(톰켓) 설정에 프로젝트 지정
    2. 서버 구동
5. 브라우저에서 접속
    1. 기본 8080

자바 구문 이해하기

Extends
구문 : A extends B
A는 B 객체를 확장 표현한다.

접근 제어자 (modifier)
(default) 동일 패키지 클래스
public 모든 클래스
protected 동일 패키지 클래스 + 하위 클래스
private 클래스 내

super
생성자는 상속 안되는 이유로 사용한다.
부모 클래스 생성자를 호출한다.

final
최종 상속 객체 선언한다.
클래스나 매소드의 재정의(Overriding)를 막는다.
초기화 이후에 변수의 변경을 막는다.

Implements
구문 : A implements B
A는 B 인터페이스들의 수행 로직을 표현한다.

이클립스 유용한 단축키 (for Mac)

본문 사용 라이브러리 등록하기
 - 시프트 + 커맨드 + O
소스코드 정리 하기
 - 시프트 + 커맨드 + F
클래스 찾아 다니기
 - 커맨드 + 마우스 클릭
 - 앞/뒤 : 알트 + 커맨드 + 좌/우 키
컨텐츠 이름 완성 돕기
 - 알트 + 스페이스 (추가 설정)
리소스 검색
 - 시프트 + 커맨드 + R


커버 사진


2016년 1월 19일 화요일

가설 검정을 위한 scipy 라이브러리 모음

통계적 추론의 가설 검정을 위해 사용한 scipy 라이브러리를 정리한다.

scipy는 과학 기술 컴퓨팅을 다루는 과학자, 분석가, 엔지니어링이 사용하는 오픈소스 파이썬 라이브러리 이다. matplotlib, SymPy, Pandas와 같이 NumPy를 기반으로 사용된다.

T 검정

scipy.stats.ttest_1samp 
Calculates the T-test for the mean of ONE group of scores.

scipy.stats.ttest_ind
Calculates the T-test for the means of TWO INDEPENDENT samples of scores.
This is a two-sided test for the null hypothesis that 2 independent samples have identical average (expected) values. This test assumes that the populations have identical variances by default.

scipy.stats.ttest_rel
Calculates the T-test on TWO RELATED samples of scores, a and b.
This is a two-sided test for the null hypothesis that 2 related or repeated samples have identical average (expected) values.


정규성 검정

scipy.stats.kstest
Perform the Kolmogorov-Smirnov test for goodness of fit.
D(max distance)

scipy.stats.shapiro
Perform the Shapiro-Wilk test for normality.
The Shapiro-Wilk test tests the null hypothesis that the data was drawn from a normal distribution.


등분산 검정 (equal variances)

scipy.stats.levene
Perform Levene test for equal variances.
The Levene test tests the null hypothesis that all input samples are from populations with equal variances. Levene’s test is an alternative to Bartlett’s test bartlett in the case where there are significant deviations from normality.

scipy.stats.bartlett
Perform Bartlett’s test for equal variances
Bartlett’s test tests the null hypothesis that all input samples are from populations with equal variances. For samples from significantly non-normal populations, Levene’s test levene is more robust.


신뢰 구간 (confidence interval)

scipy.stats.bayes_mvs(<데이터>, alpha=<신뢰도>)

기초 통계 용어 정리

본문은 통계 관련 용어를 메모합니다.

가설 검정
모집단으로부터 추출한 표본을 사용하여 검토하는 통계적인 추론이다.
통계적인 유의성을 검정하는 것으로 유의성 검증 이라고도 한다.

가설의 두 가지
귀무가설 H0
비교하는 값과 차이가 없다는 것을 기본 개념으로 하는 가설이다.
대립가설 H1 (연구가설)
주장하는 가설로 차이가 있다는 것을 기본 개념으로 하는 가설이다.
직접 수행하기 불가능하여 귀무가설의 기각을 통해 받아들여 지는 반증을 거친다.

오류
제1종 오류(a error)
귀무가설 H0가 옳은데도 불구하고 H0를 기각하게 되는 오류이다.
제2동 오류(b error)
귀무가설 H0가 옳지 않은데도 불구하고 H0를 채택하는 오류이다.

기각역(critical region)
귀무가설 전제하에 구한 검정통계량의 분포에서 확율이 유의수준인 부분이다.

임계치(critical value)
주어진 유의수준에 따라 귀무가설의 기각 여부를 결정하는 기준점이다.

검정통계량
가설 검정을 위해서 사용하는 통계량을 말한다. 표본ㅌ

유의성
모집단에 대한 가설이 가지는 통계적인 의미이다.

유의수준 (Significance Level)
귀무가설이 사실임에도 기각하는 오류를 범할 확률이다.
유의수준 = 1 - 신뢰도

유의확률 (p-value)
영가설이 맞다고 가정할 때 얻은 결과 보다 극단적인 결과가 실제로 관측될 확률이다.
보통 0.05%의 유의 확률을 사용한다.

편차 (deviation)
평균과 관측값의 차이

분산 (variance)
편차의 제곱의 평균

표준편차 (standard deviation)
분산의 양의 제곱근

표준정규분포 (standard normal distribution)
평균은 0이고 표준편차가 1인 정규분포

정규분포 (normal distribution or 가우시안 분포: Gaussian distribution)
통계학에서 연속 확률 분포 중의 하나다.

T-Test
단일표본 T검정
독립표본 T검정
대응표본 T검정

Z-Test
모집단의 분산을 알고 있는 경우 사용

산포도(degree of scattering)
자료의 흩어진 정도 분산, 범위, 사분위수범위 등이 해당한다.

범위(range)
자료의 가장 큰값과 가장 작은값 간의 차이, 외부 특이점(Outlier)에 대한 처리가 필요하다.

사분위수(quartiles)
측정값을 정렬해서 4등분으로 나눈 것을 말한다.

모집단(population)
정보를 얻고자 하는 관심 대상의 전체 집합이다.

모수 (Parameter)
모집단의 특성을 기술하는 특정한 값을 말한다.

신뢰 구간 (confidence interval)
모수가 어느 범위 안에 있는지를 확률적으로 보여주는 방법이다.

정규성 검정
표본수 > 30 : 중심극한정리에 의해 정규성을 가지는 것으로 가정할 수 있음
30 > 표본수 > 10 : 정규성 검정 필요
10 > 표본수 : 정규성을 인정 받을 수 없음으로 비모수적인 통계 방법 사용

정규성 검정 방법
Kolmogorov-Smirnov test : 샘플의 수가 2000개 이상일때,
Sapiro-Wilks test : 샘플의 수가 4 - 2000개 이하일때,

모수적 방법 (Parametric)
표본 평균 검증
T 검정, Z 검정
표본 분산 검정
F 검증, 카이제곱 검정

비모수적 방법(Non-parametric)
정규분포가 아니거나 표본의 수가 적을때 사용
부호 검정 (Sign test)
관측치들 간에 크다 작다 혹은 같다라는 주장이 사실인지 검정
윌콕슨 부호 순위 검정
부호뿐만 아니라 관측치 간의 차이의 크기, 순위까지 고려하여 검정
크루스칼-왈리스 검정
3개 이상 집단의 중앙값 차이를 검정

외도 (Skewness)
크다 : 오른쪽 롱꼬리

첨도 (kurtosis)
크다 : 위로 솟다.

검정 통계량 (or 표본 통계량)
모집단 전체 조사가 힘든 경우 검정하기 위한 표본을 통계한다.

확률 분포
정규 분포, T 분포, 카이제곱 분포, F 분포
확률 분포 그래프의 X 좌표를 구한다.

확률 분포 (probability distribution)
확률 변수가 특정한 값을 가질 확률을 나태내는 함수를 의미한다.

이산 확률분포 (distribute of discrete random variable)
이산 확률 변수가 가지는 확률분포를 의미한다.

** 이산 확률 변수 (discrete random variable)

연속 확률분포 (continuous probability distribution)
확률 밀도 함수를 이용해 분포를 표현할 수 있는 경우를 의미한다.

** 연속 확률 변수 (continuous random variable)

확률 밀도 함수 (probability density function, PDF)
확률 변수의 분포를 나타내는 함수이다.

확률 질량 함수 (probability mass function, PMF)
이산 확률 변수에 의한 확률 분포 함수를 의미한다.

누적 분포 함수 (cumulative distribution function, CDF)
확률 변수가 특정 값보다 작거나 같은 확률을 나타낸다.

이항 분포 (binormial distribution)
연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 이산 확률 분포이다.

확률 변수 (random variable)
어떤 시행의 결과로 나타나는 각각의 실수값이다.

다항식 (polynomial)
1개 이상의 항으로 이루어진 식을 말한다.

다항식의 차수 (degree of polymormial)
각 항의 각 문자의 자수를 합친 것 중 가장 큰 값을 해당 다항식의 차수라 한다.
예) x^2 * y^3 은 5차수

X차 방정식
최고차 항의 차수가 X인 다항 방정식을 뜻한다.

방정식 (equation)
특정한 문자의 값에 따라 참/거짓이 결정되는 등식이다.
이때, 방정식을 참이 되게 하는 특정 문자의 값을 해(근)이라 한다.

실수
유리수 / 정수 (음, 양, 0) , 정수가 아닌 유리수 (유한 소수, 순한 소수)
무리수 / 순한하지 않는 소수

이산 수학 (Discrete mathematics)
이산적인 수학 구조에 대해 연구하는 학문으로, 연속되지 않은 공간을 다룬다.


커버사진
참조 : https://www.coursera.org/course/introstats

T-Test 검정 실습

본문은 먼저 작성한 T 검정 방법을 통한 실습 내용을 다룬다.

먼저 샘플 데이터를 생성한다.

100명의 학생 (남학생 40, 여학생 60)의 성적 표본을 만들었다.

데이터 샘플 4개이다.
genderscore1score2
12M79.10212278.820603
31M81.70105178.597056
52F80.87003682.106735
28M80.09334081.895030

상세 보기 내용이다.
score1score2
count100.000000100.000000
mean79.48151580.947656
std2.0918501.954426
min73.46330376.973637
25%78.07064379.708372
50%79.72120280.781994
75%80.68171882.232054
max86.46994986.001438

다음은 가설을 세우고 검정하는 과정이다.

과목(score2)에서 남학생(M)과 여학생(F) 점수 분포에 차이가 있을 것으로 추론을 하였고,
다음과 같은 가설을 세웠다.

  • 귀무가설 H0: 남학생 점수 = 여학생 점수
  • 대립가설 H1: 남학생 점수 != 여학생 점수

유의 수준은 0.05로 정했다.

이해를 돕기 위해 플롯을 통해서 데이터를 시각화 해 보았다.

두개의 독립된 표본을 가짐으로 독립표본 T 검정 방법을 통해 결과를 추출한다.
Ttest_indResult(statistic=-4.8233119946622285, pvalue=5.1783040057372635e-06)

p-value < 0.05 (유의 수준) 임으로 귀무가설은 기각되고, 대립가설을 받아 들인다.
남학생과 여학생 점수에는 유의한 차이가 있는 것으로 볼 수 있다.


참고 - 검정 테스트 코드들

# 단일표본 T 검정
stats.ttest_1samp(<독립표본 1>, 80)
>>Ttest_1sampResult(statistic=0.38968001242188899, pvalue=0.6976102219750262)

# 독립표본 T 검정
stats.ttest_ind(<독립표본 1>, <독립표본 2>)
>>Ttest_indResult(statistic=-4.8233119946622285, pvalue=5.1783040057372635e-06)

# 대응표본 T 검정
stats.ttest_rel(<대응표본 1>, <대응표본 2>)
>>Ttest_relResult(statistic=-2.7629453241484772, pvalue=0.0068304073158760937)

# 대응표본을 단일표본 T 검정으로 푸는 방법
stats.ttest_1samp(<대응표본 1> - <대응표본 2>, 0)
>>Ttest_relResult(statistic=-2.7629453241484772, pvalue=0.0068304073158760937)

# 히스토그램과 정규 분포 그래프 그리는 방법
ax = figure(figsize=(6,3)).add_subplot(111)
test = sort(M)
fit = stats.norm.pdf(test, np.mean(test), np.std(test))
ax.plot(test,fit)
ax.hist(test,normed=True,bins=20)

# 표본 만들기 (mean, standard deviation, count)
stats.norm.rvs(loc=<평균>,scale=<표준편차>,size=<건수>)


T-Test 검정 방법

추론을 통해 가설을 세웠다면, 검정을 통해서 유의성을 확인하게 된다.
본문은 여러 방법 중에 하나인 T 검정을 사용하는 방법을 다룬다.

표본 종류별 T 검증

단일표본 T 검정
독립표본 T 검정
대응표본 T 검정
정의
표본과 모집단의 평균차이 분석
독립된 두 표본의 평균 차이 분석
짝을 이룬 데이터의 평균 변화의 분석
가정
정규성, 등분산성
정규성, 등분산성
정규성
귀무가설 (H0)
H0: μA=μ
H0: μA=μ
H0: μA=μ
대립가설 (H1)
H1: μB≠μ
H1: μB≠μ
H1: μB≠μ
비모수
X
Mann-Whitney 검정
Wilcoxon 순위합 부호 검정
파이썬 라이브러리
scipy.stats.ttest_1samp
scipy.stats.ttest_ind
scipy.stats.mannwhitneyu

scipy.stats.ttest_rel
scipy.stats.wilcoxon

표본 수에 따른 정규성 확인
표본수 > 30 : 중심극한정리에 의해 정규성을 가지는 것으로 가정할 수 있다.
30 > 표본수 > 10 : 정규성 검정이 필요하다.
10 > 표본수 : 정규성을 인정 받을 수 없음으로 비모수적인 통계 방법 사용한다.

정규성 검정 방법
Kolmogorov-Smirnov test
Sapiro-Wilks test

등분산성 검증 방법
Levene test
Bartlett’s test

통계적 추론에 대해서

본문은 통계적 추론에 대한 카테고리를 다룬다.

통계적 추론 (statistical inference)이란,
모집단에 대한 미지의 양상을 알기 위해 통계학을 이용하는 과정을 지칭한다.

추론은 추정과 가설 검정로 나눌 수 있다.

추정 (estimation)은,
표본을 통해 모집단의 특성의 추측하는 과정이다.

가설 검정 (testing hypothesis)은,
표본이 가지고 있는 정보를 이용해 가설을 검정하는 과정이다.

추정은 점 추정과 구간 추정으로 나눌 수 있다.

점 추정 (Point Estimation)은,
모수를 하나의 수치로 추정하는 것이다.

구간 추정 (Interval Estimation)은,
모수가 속하는 구간을 말하며, 추정치와 신뢰도를 함께 표현할 수 있다.

가설 검증은 다음과 같은 절차를 가진다.

1. 가설 설정 (귀무가설과 대립가설)
2. 검정 유의수준의 결정
3. 검정통계량 선정 및 임계치 결정
4. 검정 및 해석



커버 그림
출처 : http://howmed.net/community-medicine/tests-of-statistical-significance/


2016년 1월 16일 토요일

대신증권 API 연동 방법

자동 주식 매매를 위한 대신증권 API 연동 방법을 요약한다.

1. 대신증권 계좌 개설 (오프라인)
근처 은행에서 통장에 연계 계좌를 개설한다.

2. 대신증권 계좌를 등록 (온라인)
인터넷으로 대신증권 계좌 등록 및 (증권용) 공인 인증서를 발급 받는다.

3. CYBOS 5 설치

4. CYBOS Plus 로그인 및 사용 동의
CYBOS Plus를 통해서 로그인 한다.
주문 오프젝트 사용 동의를 한다.

5. 파이썬 설치
아나콘다(anaconda)를 통해서 python3.x 32bit 버전 설치

6. COM 객체 모델을 이용한 API 호출
관리자 권한으로 pywin32 라이브러리를 호출한다.

import win32com.client
cy = win32com.client.Dispatch("CpUtil.CpCybos")
print ( cy.IsConnect )

1이 나오면 준비가 완료 되었다.


* (윈도우가 답답한) 맥 유저를 위한 팁

1. 관리자 권한으로 주피터 노트북을 연다.
2. 윈도우 방화벽에 인바운드(python) 허용한다.
3. 맥에서 주피터 노트북에 접속한다.


References

COM (Component Object Model)
마이크로소프트가 개발한 소프트웨어 구성 요소들의 응용 프로그램 이진 인터페이스이다.

본문 참고 사이트
https://wikidocs.net/2870

웹 API 가이드
http://cybosplus.github.io

샘플 코드 로그
전체 종목 코드 추출 하기
import win32com.client
cursor = win32com.client.Dispatch("CpUtil.CpStockCode")
MAX = curosr.GetCount()
code_map = []
for i in range(MAX):
    code_map.append((cursor.GetData(0,i),
                     cursor.GetData(1,i),
                     cursor.GetData(2,i)))
df = pd.DataFrame(code_map,columns=['code','name','full_code'])
df = df[ df['code'].apply(lambda i: i[0] == 'A') ]
df.to_sql(name='item_names',con=conn,index=True,if_exists='replace')

종목에 대한 분단위 기간 데이터 추출 하기
def insert_item(code,start_date,end_date):
    cursor = win32com.client.Dispatch("CpSysDib.StockChart")
    cursor.SetInputValue(0, code)  # 코드 이름으로 종목 선택
    cursor.SetInputValue(1, ord("1")) # 기간 단위로 받기
    cursor.SetInputValue(2, end_date)  # 날짜 이하
    cursor.SetInputValue(3, start_date)  # 날짜 이상
    cursor.SetInputValue(5, (0, 1, 2, 8)) # 날짜, 시간, 시가, 거래량
    cursor.SetInputValue(6, ord("m"))  # 분단위 추출

    cursor.BlockRequest()   # 서버에 데이터 요청

    _rows = cursor.GetHeaderValue(3)  # 데이터 갯수
    _cols = cursor.GetHeaderValue(1)  # 추출 필드 갯수 setInputValue(5,x) 항목

    _df = pd.DataFrame()
    # GetDataValue
    for i in range(_rows):
        _rec = [];
        for j in range(_cols):
            rec.append(cursor.GetDataValue(j, i))
        _df = _df.append([_rec])
    _df.columns = ('date','time','price','volume')
    _df.to_sql(name="item_"+code,con=conn,index=False,if_exists='append')


커버사진
출처 : 대신증권 홈페이지

2016년 1월 15일 금요일

Kivy 개발 퀵가이드

Kivy로 어플리케이션을 만드는 퀵가이드를 작성한다.

1. 코딩

kivy 라이브러리를 이용한 코딩을 한다.
코딩의 결과는 Kivy $(pwd)/<filename>.py 를 통해서 확인한다.

2. 빌드 및 배포

buildozer는 쉽게 패키지를 배포해 주는 도구이다.
ios로의 배포는 아직 구현되지 않았다.
순서는 spec 파일을 생성하고, 원하는 내용을 수정하고, 빌드한다.

소스가 있는 폴더에서 다음을 수행한다.
메인 코드는 main.py를 사용한다.

안드로이드의 경우,
buildozer init
buildozer android debug deploy run

맥OS의 경우,
buildozer init
buildozer osx debug

* debug 단계까지 하면, 패키지 파일이 생성된다.
* 안드로이드 apk, 맥OS dmg를  자동으로 만들어 준다.

APK (Android application PacKage)
: 안드로이드 운영 시스템에 사용되는 패키지 파일 포멧 형태이다.
DMG (Apple Disk Image)
: 맥OS에 사용되는 디스크 포맷이다. 마운트 해서 사용한다.


References

Kivy 원문 가이드
https://kivy.org/docs/

2016년 1월 11일 월요일

파이썬 포멧 메소드

문자(String)을 조작하는 “% operator(조작자)” 와 format method(메소드)를 다룬다.
본문은 영문 가이드 문서의 이해를 높이기 위한 예제를 소개한다.

% 조작자를 사용한 예제이다.

class hero:
    first = '귀도'
    middle = '반'
    last = '로썸'

# 순서대로 상수를 넘겨 준다.
print("%s %s %s"  % (hero.first, hero.middle, hero.last))

format 메소드를 사용한 예제이다.

# % 조작자 처럼 입력 순서대로 처리
print("{} {} {}".format(hero.first,hero.middle,hero.last))
# 입력 순서의 구분자(integer)를 사용
print("{0} {2} {1}".format(hero.first,hero.last,hero.middle))
# 매칭한 구분자(name)를 사용
print("{first} {middle} {last}".format(first=hero.first,last=hero.last,middle=hero.middle))
# 클래스 오브젝트를 사용
print("{me.first} {me.middle} {me.last}".format(me=hero))

1, 2번의 모든 결과는 “귀도 반 로썸”으로 동일하다.
포맷 사용하면 편의성 뿐만 아니라 좀 더 복잡하고 다양한 로직을 구현할 수 있다.

format 메소드의 강력한 응용 예제이다.

class tclass:
    def __format__(self, arg):
        if arg == 'upper':
            return 'METHOD: FORMAT'
        return 'method: format'
    
    def __str__(self):
        return 'method: str'
    
    def __repr__(self):
        return 'method: repr'

c = tclass()

# 이름 구분자를 통한 처리, 특정 메소드 호출 및 포멧 인자값 활용
print('{name!r}\n{name!s}\n{name}\n{name:upper}'.format(name=c))
OUTPUT>>
method: repr
method: str
method: format
METHOD: FORMAT

# integer 형태의 구분자 처리 및 날짜 내부 포멧 메소드 활용
print(‘{0:%Y-%m-%d %H:%M:%S}\n{0:%Y}'.format(datetime.now()))
OUTPUT>>
2016-01-09 16:17:58
2016

아이가 말을 하면서 즐거움을 느끼듯이, 파이썬은 즐겁다.

References

파이썬 문자 매뉴얼
https://docs.python.org/3.5/library/string.html#grammar-token-conversion


커버 사진

자바 기반의 웹 프레임워크 구현

자바 기반의 웹 프레임워크 구현을 위한 기반 요소를 다룬다.

1. MVC 아키텍처 패턴
2. 자바 프로젝트 빌드 도구
3. 스프링 프레임워크

모델-뷰-컨트롤러(Model–View–Controller, MVC)

소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.

referenced photo by : http://slides.com/antonkril/cqs-cqrs-mvc-http#/


프로젝트 빌드 도구

메이븐(Maven)
pom.xml에 정의된 표준 디렉토리 구조에 따라 빌드된다.

엔트(Ant)
형식적인 규칙에 억메이지 않고 명세한 절차에 따라 빌드된다.

그래들(Gradle)
메이븐의 장황한 XML을 그루비(Grooby) 구문을 통해 쉽게 접근 할 수 있다.
이외에, 기존의 빌드의 장점을 취하였다.

스프링 프레임워크

자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크이다. 동적인 웹 사이트 개발을 위한 다양한 서비스를 제공한다. 전자정부 표준프레임워크의 기반 기술로 쓰인다.

다음은 스프링 프레임워크의 주요 기능 요소들이다.

IoC (Inversion of Control)
Dependency Lookup과 Dependency Injection을 포함하는 계념이다.
DL의 경우 Bean을 Lookup하기 위한 컨테이너에서 제공하는 API와 의존 관계가 발생한다. 의존 관계를 줄이기 위해서는 DI를 사용한다.

DI (Dependency Injection)
클래스 사이의 의존 관계를 컨테이너 외부의 Bean 설정을 통해서 해소한다.
예시)
의존 관계 A -> B에 가상의 인터페이스를 추가한다.
: A -> IB(인터페이스 정의) -> B
Bean 설정 파일에 의존 관계(IB -> B)를 명세한다.
Bean 설정 명세는 XML, @ (어노테이션) 두 가지 방법으로 가능하다.

AOP (Aspect-Oriented Programming)
트랜잭션, 로깅, 보안등의 핵심적인 비즈니스 로직과 관련이 없으나, 여러 모듈에서 공통적으로 사용되는 기능들을 분리하는 프로그램 패러다임이다.

POJO(Plain Old Java Object)
객체 타입의 부분 속성 변경에서 오는 복잡성을 제거하고, 단지 객체의 표면에 메타데이터를 덧 붙이는 역활을 통해 유연하고 효율적인 프로그래밍을 수행 할 수 있도록 한다.

프레임워크
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게, 일련의 협업화된 형태로 클래스를 제공하는 것이다. - 랄프 존슨(Ralph Johnson)

References

POJO에 대해서
http://changsuk.me/?p=1800

2016년 1월 9일 토요일

들쑥날쑥한 데이터 히스토그램 그리기

본문은 80만개가 넘는 들쭉날쭉 데이터에 도수 분포를 그릴때 만나는 문제와 대처방안을 다룬다.

먼저 80만개의 데이터를 플롯 했다.


평균(mean) : 176.8 , 중앙값(Median) 28 이다.

다음은 히스토그램이다.


도수 분포가 편중되어 성질을 파악하기 어렵다.
3분위 값이 114임을 감안할때 큰 값들을 가차 없이 눌러야 적절한 플롯이 나온다.

로그를 이용해서 튀는 값들을 눌러 보았다.


측정 값들이 크지 않아서 로그의 밑수(base number)를 1.1 정도로 잡았다.

그리고 히스토그램이다.


20 ~ 50 사이의 빈도가 높다.
측정 치로 볼때, 6 ~ 117의 사이의 값이다.



참고

판다스 사용 코드 모음
# 평균 값
stone.mean()
# 분위 값
stone.quantile([.25,.5,.75])
# ggplot 스타일의 플롯
with plt.style.context(('ggplot')):
    stone.plot()
# 히스토그램 bins 지정
stone.hist(bins=30)
# 로그 적용
cristal = stone.applymap(lambda i: math.log(i,1.1))
# ggplot 스타일에 y 라벨 추가
with plt.style.context(('ggplot')):
    ax = cristal.plot()
    ax.set_ylabel('log')
# 거듭제곱를 통한 측정치 구간
"%d ~ %d" % (pow(1.1,20),pow(1.1,50))

히스토그램 (  histogram )
도수분포를 정보 그림으로 나타내는 한 가지 방법이다.

도수분포
범주(계급)을 나누고 각 범주에 속하는 측정치의 수를 도수라 한다.
도수의 흩어짐 정도를 분포라 하고, 표나 그림(도)를 통해서 표현한다.

2016년 1월 8일 금요일

네이버 뉴스 관심도 보기

뉴스에 피드백(댓글)은 사람들의 능동적인 관심을 볼 수 있다.
본글은 연도별 네이버에 대한 관심과 섹션(분야) 비중을 다루었다.

1. 연도별 네이버 관심도

뉴스 댓글수수집 기사수
2004235145963
20051768871582
2006395449972764
2007590529673747
2008641619669141
2009107011974783
2010109192175476
2011141264275527
2012985043776212
20132254274476045
20142811589376015
20152504893276461

수집된 기사 수 차이는 전체적인 동향을 보는데 있어 무난한 것으로 간주한다.
뉴스 댓글은 2009년에 아웃링크 방식으로 변경된 이후 3년간 외면 받다가,
뉴스스탠드 서비스로 개편 되면서 다시 살아 났다.

2. 연도별 섹션 관심 비중

경제과학문화사회세계스포츠정치
20041422632974699910189
200525833462955155588340740
200642453032569841277312888866237750878837
20076036754841087194881828405118797601081644
2008931364464746565613227938151380801661284
200986563108356119497291722769520387029
201012328211278279906266858890640420029
20111584531878231290303467981328790457659
20128130791164445859010300712164638603360396
20132236418205910324868257215832177936806765198
20143247132239835027918689824143228008107574319
20153520920152747522072308617260236726806808779

사회, 정치는 항상 뜨거운 감자다.
이외에 과학, 문화와 반대로 경제 쪽에 관심이 높아지고 있다.
아쉽게도 스포츠 섹션은 댓글 수에 대한 파싱(parsing)에 실패했다.


표지 사진