Jupyter notebook이 자동으로 브라우저를 열어주지 못할 때 대처법

 

bash command가 작동하는 상황(mac os terminal, git bash, etc)에서

크롬브라우저가 깔려있을 때

 

$ export BROWSER="Chrome";jupyter notebook

 

하면 자동으로 크롬 브라우저가 열린다.

 

이후에는

 

$ jupyter notebook

 

만 쳐도 크롬으로 열린다.

[OpenCV] 설치하기-1(Visual Studio 2017 설치)

 

 

OpenCV는 C++에서도 파이썬Python에서도 사용할 수 있지만(기본적으로 두개밖에 사용 안해봄) 사실 파이썬에서 사용하는 것은 C++로 작성된 패키지를 래핑Wrapping해서 사용하는 것이기 때문에, 기본적으로 C++로 진행하겠습니다.

 

C++을 사용하기 위해서 Visual Studio를 깔아야하는데, OpenCV가 VS2017 버전으로 만들어져서, 최신버전은 2019이지만 Visual Studio 2017을 설치해보겠습니다.

 

1) https://visualstudio.microsoft.com/ko/vs/older-downloads/에 접속

 

2) 아래쪽의 2017을 누른 뒤 새로 나타나는 파란색 버튼을 클릭하여 다운로드 받는다. (이 과정에서는 로그인이 필요하다.)

 

3) 눌렀을 때 "죄송합니다. 다운로드 항목을 찾을 수 없습니다.(Sorry, we couldn't find any downloads for you.)"라는 메시지가 나오면 Visual Studio Dev Essentials에 가입되지 않은 상태라 다운로드를 받을 수 없는 상태이다.

 

    이 경우에는 빨간색 쳐진 링크를 누른 뒤

 

    빨간색으로 표시된 파란 버튼을 클릭하면 확인하는 팝업이 하나 뜨게 되고, 거기서 확인(confirm)을 누르면 가입이 된다.

    가입 된 상태에서 다시 위의 주소로 들어가서 2017 다운로드를 누르면 이번에는 제대로 다운로드 페이지로 들어가진다.

 

4) 그러면 아래와 같이 여러 다운로드 항목이 있을 텐데, 여기서 Visual Studio Community 2017 / Korean / EXE를 선택하고 옆에 다운로드를 눌러준다.

5) 이제 다운을 받고 실행을 시키면 설치를 진행한다. 여기서 꼭 설치 중간에 어떤어떤 프로젝트들을 할 것인지 물어보는 창에서(C++로 개발할건지, 안드로이드 개발할건지, Python개발할 건지 등등..) 꼭 "C++를 사용한 데스크톱 개발"항목을 선택하고 진행하여야 한다.

 

6) VS2017이 설치되었다!

 

 

 

Reference: OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝

'Software > OpenCV' 카테고리의 다른 글

[OpenCV] OpenCV 설치-3(Visual Studio와 연동)  (0) 2019.09.05
[OpenCV] 설치하기-2(OpenCV 설치)  (0) 2019.09.04

[R/R studio] 가설검정, 이상치, 결측치, PSM, 확률분포

 

통계적 추론(가설검정)

통계적 추론: 통계적 추론은 추정(표본집단->모집단, sample->population, 점추정&구간추정)과 가설검정으로 나눌 수 있다.

 

여기서 추정(estimation)은 위에서 약술한 바와 같이 표본을 이용하여 모집단의 어떤 미지의 값을 추측하는 과정을 추정이라고 한다.

가설검정(testing hypothesis)은 칼 포퍼라는 영국/오스트라의 철학자의 "과학은 반증가능성, 반박가능성, 시험가능성을 가져야 한다."는 반증주의에서 출발한다.

여기서 반증가능성이란 검증하려는 가설이 실험이나 관찰에 의해서 반증될 수 있는 가능성을 뜻한다.

그리고 이 가설검정 또한 표본을 이용하여 모집단에 대한 어떤 주장 또는 가설의 옳고 그름 혹은 채택(Accept) 기각(reject)을 결정하는 과정을 말한다.

 

여기서 "통계적으로 유의하다"라는 뜻은 "확률적으로 단순한 우연에 의한 결과가 아니다"라는 의미를 가질 수 있다는 뜻이다.

(전체 변동 중 에러 대비 이펙트가 얼마나 큰가)

 

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

1. 가설검정(귀무가설(null hypothesis, 평상시 알고있던 사실, =로 연결되는 명제, 아무런 변화나 효과가 없는 가설)과 대립가설(alternative hypothesis, 알고자 하는 사실, =/=(not equal)로 연결되는 명제, 차이가 있음을 나타내는 가설, 주장하고자 하는 가설)을 결정)

2. 검정통계량 산출(실제 데이터를 가지고 계산해낸 결과, 이 검정통계량으로 유의확률이 계산된다.)

3. 검정 유의수준 결정(유의수준(alpha): 연구자가 정하는 허용한계, 전체 실험 결과 중 몇번의 오차까지를 허용할 지)

4. 검정 결과 해석(유의확률(p-value)이 유의수준(기각역)을 넘지 못하면 대립가설을 채택하지 않는다(귀무가설을 기각하지 않는다), 아니면 대립가설을 채택(귀무가설을 기각))

 

기본적으로 가설검정은 귀무가설이 참이라는 가정을 깔고 진행하게 된다.

 

보통 통계학에서 statistical~ 이 붙으면 sample에 대해서 진행하는 것이라고 생각할 수 있다.

 

귀무가설에 대하여 채택/기각 및 참/거짓을 표로 나타내면 아래와 같다.

  귀무가설 채택 귀무가설 기각
귀무가설 참 O 잘못된 결론 (1종 오류, alpha)
귀무가설 거짓 잘못된 결론 (2종 오류, beta) O

여기서 1종오류는 사실 없는데(귀무가설 참) 있다고(귀무가설 기각) 하는 오류이고, 2종오류는 사실 있는데(귀무가설 거짓) 없다고(귀무가설 채택) 하는 오류이다.

여기서 1종오류와 2종오류 둘 중 어떤 것이 더 문제일까?

효과가 없는데 있다고 하는 것은 사기행위와 같으니 1종 오류가 더 문제가 크다. 말그대로 1종오류를 범하게되면 통계적으로 사기를 치게 되는 것이다!

그리고 대자연에서 우가우가 하던 시절 호랑이가 있는데 없다고 판단하는 오류를 범했던(2종 오류) 사람들은 전부 잡아먹혀서 2종 오류를 범하는 사람은 거의 없다는 썰도 있다. (믿거나 말거나)

 

그리고 여기서 1종 오류를 범할 확률의 최대 허용 한계를 유의수준이라고 한다.

 

즉, 유의수준(alpha)을 정했을 때, 이 유의수준보다 유의확률(p-value)이 적게 나와야 1종 오류가 발생할 확률이 유의수준보다 떨어지고, 비로소 실험자는 이것을 바탕으로 귀무가설을 기각하고 대립가설을 채택할 수 있게 된다.

 

여기서 유의확률을 제대로 이해하여야 하는데, 유의확률은 "대립가설이 주장하는 바가 맞는 정도"가 아니라 정확하게 "귀무가설이 옳지만, 귀무가설을 기각하고 주장한 대립가설이 1종 오류를 범할 확률이 5% 미만이다."라는 뜻으로 "해당 데이터는 유의미한 데이터이다."라는 뜻이다.

 

그리고 추가적으로 정말 특수한 경우가 아니면 양측검정을 하게 되며, 이 경우 각 단측에 대해서는 유의수준이 반으로 줄어들게 된다.

 

이상치/결측값 처리

사실 데이터 분석에 있어서 대부분의 시간과 에너지는 데이터를 수집하고 전처리하는데 사용하게 된다. 그리고 이 과정에서 필요한 부분이 EDA를 통해 데이터의 이상치(outlier)를 발견하고, 결측치를 확인하여 처리하는 것이다.

 

이상치(outlier)

이상치란 데이터의 전체적인 패턴에서 동떨어진 관측 값을 말한다. 즉, 아주 작은 값이나 아주 큰 값을 말하는데, 보통 y값에 대하여 다른 자료들과 동떨어진 데이터를 이상치(outlier)라고 말한다.

 

영향점((high) leverage point)

영향점이란 이상치와 비슷하게 전체적인 패턴에서 동떨어진 관측 값을 말하지만, 이상치와는 다르게 x축으로 극단적인 값을 가지는 것을 영향점이라고 따로 말한다.

 

그리고 두 수치를 전부 합쳐 influential observations라고 부른다.

 

보통 이상치와 같은 경우 box plot이나, scatter plot을 통해 시각적으로 확인하는 것이 가장 빠르고 확실하다. 혹은 domain knowledge로 말도 안되는 수치들을 확인 가능하다.

특히 단변수 박스 플롯의 경우 이상치를 제대로 파악할 수 없기 때문에 이변수 산점도로 확인해보는 것이 필요하다.

 

이상치는 연구자의 실수(데이터 기록 오류, 단위 오류, 실험 오류, 역코딩)일 때가 많지만, 자연적으로 발생하는 black swan일 수도 있기 때문에 무조건적으로 배제하면 안되고, 사실 숙고가 많이 필요하다.

 

이 이상치는 세가지로 구분이 가능한데, 첫번째는 의도적인 이상치(흡연에 대하여 10대를 대상으로 조사하였을 때), 두번째는 표본 이상치(표본을 잘못 뽑은 경우), 세번째는 자연 이상치(전체 사회인 연봉에 대하여 임원급을 넣는 경우) 등이 있다.

 

 

이제 이상치와 결측값을 어떻게 처리할까에 대한 이슈가 남았다.

여기서는 일단 가장 간단하게 삭제를 할 수 있다. 그러나 이 방법은 데이터 로스를 가져올 수 있다.

두번째로는 대치(imputation)라는 방법이 가능하다.

대치하는 방법으로는 전체 평균을 입력하는 방법, 혹은 통계적으로 해당 변수에 대한 예측 모델을 만들어서 예측(conditional imputation)이 가능하다.

또 다른 방법으로는, 상/하한을 결정한뒤 상/하한을 넘는 데이터에 대해서는 상/하한으로 맞춰주는 방법이 있다.

대치하는 경우 완전히 값이 random한 값을 대치할 수도 있지만, 보통 대부분의 경우 데이터마다 어떤 패턴을 가지고 있을 수 있기 때문에, EDA의 중요성이 강조된다.

이런 패턴이 있는 데이터의 경우 LOCF라 불리는 Last Observation Carried Forward방식, NOCB라 불리는 Next Observation Carried Backward방식, Moving Average방식 등이 있다.

 

결측값은 r studio에서

mice패키지의 md.pattern()함수

상관관계 파악가능한 cor()

VIM패키지의 VIM::aggr()함수

Amelia패키지의 missmap()함수 등으로 빠르게 확인이 가능하다.

 

그리고 이렇게 메꾼 결측치는, 두 세가지 정도의 다른 방법으로 결측치를 메꾼 뒤, sensitivity analysis를 통해 결과값이 일관성이 있다는 것을 보여주어, 대치방법에 민감하지 않다는 것을 보여준다.

 

삭제는 데이터의 손실을 가져오고, 대치는 틀린 값이 들어갈 수 있기에 연구방향에 따라 잘 선택하여야 한다.

 

 

Propensity Score Matching

경향 점수 매칭이라는 한국어 번역 그대로, 두가지 이질적인 데이터 셋에 대하여 경향성이 비슷한 두가지 데이터 셋으로 만들어 주는 것이다.

더 정확히는 공변량(covariate)들의 수준을 맞추어 통제한 후, 특정 독립변수가 종속변수에 미치는 영향의 정도를 제대로 파악할 수 있도록 하는 것이다.

이 경우가 왜 필요하나면, 전향적인 코호트(Cohort) 연구에서는 비슷한 집단을 구성하여 연구가 가능하지만, case-control과 같은 후향적 연구에서는 case가 control에 비해 수가 적어지기 때문에, 비슷한 집단을 만들어 주어야 할 필요가 있기 때문이다.

여기서는 보통 로지스틱 회귀분석을 통하여 대상 case에 해당하는 환자와 가장 비슷한 점수를 나타내는 control 환자를 매칭시킨다.

1:1의 경우가 확실하지만, 그럴 경우 loss되는 환자 데이터가 많아 보통 case하나 당 1~5의 컨트롤을 가져가는 경우가 많다.

MatchIt, optmatch 패키지를 통한 matchit(구분변수~맞춰줄 변수, 방법, data, ratio)함수로 구현이 가능하다.

요새는 IPW(inverse probability weighting)라는 방법으로 control환자 정보의 loss없이 확률의 역수를 각 환자에게 곱해주어 정보를 구하는 방법도 만들어졌다.

 

 

확률분포

확률 분포에 대해서는 추후에 더 자세히 다루는 포스팅이 있으면 링크로 추가.

정규분포는 평균과 분산이라는 2개의 모수를 가지는데, 여기서 평균은 location parameter, 분산은 shape parameter라고 불린다.

베르누이 분포는 이항분포이다.

포아송(poisson) 분포는 '건수(count)'에 대한 분포이지만, 가정사항이 빡세서 잘 활용되지는 않는다. 특히 이 가정사항 중 평균과 분산이 같아야 한다는 굉장히 빡센 조건이 들어가있다. 그래서 negative binomial distribution과 같은 대체 분포를 이용한다.

 

 

데이터 합치기

r에서는 단순 데이터 concat을 지원하는 -bind 함수와, 직접적으로 join을 실행하는 merge 함수가 있다.

같은 갯수의 column을 가지는 데이터를 위아래로 붙이는 함수는 rbind(row-bind)함수로

반대의 경우 좌우로 붙이는 함수는 cbind(column-bind)함수로 구현할 수 있다.

 

참고로 row는 행, column은 열이다.

 

그리고 merge함수의 경우 inner, left, right, full join을 각각 코드로 짜보자면 아래와 같다.

merge(df1, df2, by="기준컬럼", all=FALSE)

merge(df1, df2, by="기준컬럼", all.x=TRUE)

merge(df1, df2, by="기준컬럼", all.y=TRUE)

merge(df1, df2, by="기준컬럼", all=TRUE)

'Software > R' 카테고리의 다른 글

[R/R studio] 기본문법  (0) 2019.08.04

[파이썬(Python)] 기본문법

 

기본적으로 개행시 특수문자가 필요하지 않다.

블록구분은 콜론(:)과 인덴테이션(tab)으로 한다.

if문에서 괄호를 작성하지 않는다.

for문은 이터러블 객체에 in 명령어를 사용하여 사용한다.

한 줄에 여러 명령어를 동시에 사용할 때는 세미콜론(;)으로 연결한다.

주석은 #

논리 합, 논리 곱, NOT 연산은 각각 and, or, not 키워드를 사용한다.(&&, ||, ! 사용 안됨)

=> 판다스(pandas) 패키지에서 매직 인덱싱 할때는 & | ! 사용

[R/R studio] 기본문법

 

기본적으로 여러 언어를 동시다발적으로 사용하다보니, 언어마다 문법의 세부 사항이 달라서 고생하고는 한다.

(한번 써서 에러나거나 기타 등등 이후에 또 고치고 등등...)


그래서 이번에 각 문법별로 정리한 것을 만들어보기로 하였다.

당연히 한번에 다 기억이 나지는 않을테니 언어를 쓸 때마다 하나씩 정리해보기로 하였다.

 

기본적으로 R은 세미콜론(;)을 써서 행 구분하지 않는다.

한줄에 여러 명령어 작성은 세미콜론(;)으로 연결시킨다.

패키지를 불러오는 명령어는 library()

'Software > R' 카테고리의 다른 글

[R/R studio] 가설검정, 이상치, 결측치, PSM, 확률분포  (0) 2019.08.06

[엑셀/Excel] 단축키 모음

단축키 의미
Alt+w+v+g 그리드선 보이기/숨기기

[카운트다운 타이머] 올해는 얼마나 남았을까?

 

문득 올해는 과연 얼마나 남았을까 궁금할 때가 있다.

개발 자체는 몇 년 전에 했었지만, 이번에 블로그에 다시 올려본다.

남은 초와 시간, 그리고 %로 올해가 얼마나 남았는지 확인해보자.

참고로 이 포스팅을 올렸을때는 이미 2019년은 50%도 남지 않았다...

 

 

과거 이X루스 시절에 유행했던 무지개 링크를 단순 CSS로 변경하여 보았습니다.

 

그 당시에는 javascript를 사용하여 작성한 뒤 관련 파일을 블로그에 올려야만 했던 걸로 기억하는데, 정말 간단하게 CSS 만 간단하게 수정 및 추가하여 무지개링크를 직접 구현할 수 있습니다.

 

아래 예시는 티스토리에서 적용하는 예시이지만, 아주 간단하게 css만 바꿔주는 작업이므로 어떤 블로그에서도 쉽게 사용하실 수 있을 것이라 생각합니다.

 

1) 먼저 티스토리에서 '관리'에 들어갑니다.

2) 왼쪽 아래 '꾸미기' 에서 '스킨편집'을 눌러줍니다.

3) 새 탭 혹은 창이 열리며 '스킨편집' 모드가 시작됩니다. 오른쪽에서 'html 편집'을 눌러주세요.

4) 바뀐 화면에서 오른쪽 상단에 'CSS'를 눌러주시고, a 태그가 있는 곳을 찾아주세요. ctrl+f로 a를 누르면 수많은 a 중 상단에 있습니다.

5) 찾게되면

 a { color: #000; text-decoration: none; }
 a:hover { color: #07a; }

이렇게 나와있을 것입니다.

6) a:hover에 주석처리를 해주시고(//a:hover { color: #07a; })

7) a:hover { animation: rainbow 5s infinite linear; } 와 같이 고쳐주신 뒤

8) 아래 내용을 a:hover 아래에 붙여넣어 줍니다.
@keyframes rainbow {
    0%   {color: red; }
    10%   {color: orange; }
    23%  {color: yellow; }
    36%  {color: yellowgreen; }
    49%  {color: green; }
    62%   {color: blue; }
    74%  {color: indigo; }
    86%   {color: purple; }
    100% {color: red; }
}

9) 주황색으로 불이 들어온 오른쪽 위의 '적용' 버튼을 눌러주시고, 블로그에 그냥 접속해보시면 무지개 링크가 걸린 모습을 보실 수 있습니다.

 

위에서 5s 는 애니메이션이 적용될 '초'이므로 좀 더 링크에서 색이 변하는 시간을 바꾸고 싶으신 분은 초를 늘리거나 줄여서 적용하시면 됩니다.

 

색 변화를 바꾸고 싶으신 분들은 keyframes 안에서 %가 전체 애니메이션 길이 중 비율이고, 안에 color가 글자 색이니 이 부분을 바꾸시거나 키프레임을 추가하시거나 줄이셔도 됩니다.

일반적으로 div에서 padding 속성을 적용하면 우리가 정의한 width, height 박스 크기보다 크게 확장이 되는 것을 보실 수 있습니다.

 

이는 div의 기본 box-sizing 속성이 content-box로 설정이 되어 있어서 그렇습니다.

 

즉, content영역의 width와 height만 우리가 정해준 크기이고 전체 박스의 크기는 width, height 더하기 padding 더하기 border 사이즈 인 것이죠.

 

이것을 box-sizing: border-box;로 설정해주시면 콘텐트, 패딩, 보더를 포함한 전체 박스의 width와 height를 정의해 주게 되므로, 패딩 적용시에도 박스가 확대되지 않는 것을 보실 수 있습니다.

+ Recent posts