Quantcast
Channel: 의지있는 황제펭귄님의 이글루입니다
Viewing all 204 articles
Browse latest View live

배열=배열+배열

$
0
0
지난 번에 배열을 다룬 적이 있는데(어쩌다보니 배열 성애자가 된 느낌!), 배열의 차원을 줄이거나 배열의 일부를 떼어 내는 걸 ([참고]배열 슬라이싱#1, 배열 슬라이싱#2, 배열 슬라이싱#3, 뱁새가 황새 따라하다 가랑이 찢어지다)다루었다. 그런데 다시 합치는 짓을 하고 싶었다. 단순히 합치는 걸 하라면 Array()함수를 사용하면 될 듯하다.
    Dim s As Worksheet
Dim arr1(), arr2

Set s = Sheet1

arr1 = s.Range("A1:A15").Value
arr1 = WorksheetFunction.Transpose(arr1)

arr2 = s.[B1:B15]
arr2 = WorksheetFunction.Transpose(arr2)

Dim arr3

arr3 = Array(arr1, arr2)
arr3 = WorksheetFunction.Transpose(arr3)
1차원 배열 두 개를 Array()로 합치고 다시 방향을 바꿔 버리면(Transpose) 만족스럽게도 1차원 배열이 생긴다. 이건 AA건전지를 병렬로 연결한 모양새이다.

그런데 1차원 배열을 나란히 세워 두는 것 말고 길게 AA건전지 두 개를 직렬로 연결하듯이 하려면? 완벽한 방법은 아니지만 다음과 같은 방법이 있다.
arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",")

Join()함수로 배열의 각 항목으로 연결하고([참고]VBA 배열에 대한 몇 가지 (3)) 다시 Split()함수로 합치는 것이다. 단점은 Split(), Join()함수가 문자열 함수라서 결과값을 문자로 돌려준다는 점이다. 에이, 다시 숫자로 변환하면 되지 뭐~

매크로 시트를 참조해야 합니다.

$
0
0
보통때와 마찬가지로 프로시저 만들고 워크시트에 버튼 추가하고 앞서 만든 매크로를 연결하려고 하니 '매크로 시트를 참조해야 합니다' 라는 에러가 난다.
'흠~ 처음보는 에러인데, 이건 뭐지...'

구글 검색을 해보니 한글검색결과에는 이런 내용이 딱 하나 나오는데, 그닥 도움이 되지는 않는다. 시트를 참조한다는 말에서 힌트를 얻기는 했는 데, 프로시저 이름과 워크시트의 이름이 같아서 생기는 오류이다. 둘중 한 넘이 개명을 해야 하는데, 프로시저의 이름을 바꾸어서 해결하면 된다.

0에 가장 가까운 숫자를 찾아내는 방법

R을 위한 검색엔진?

$
0
0
프로그래밍을 하다가 막히는 경우 사둔 책 대신 구글 검색을 해서 해결하는 경우가 다반사이다.  
R과 관련된 구글의 검색결과를 정리하여 제공해주는 사이트가 있다. rseek.org는 R을 위한 검색엔진은 아니지만 R을 다루는 분이라면 쏠쏠한 사이트인듯하다.




두 개의 실수 비교

$
0
0
두 개의 실수가 거의 같은 지 비교하는 방법. 그냥 = 쓰면 되는 건 아니죠.



[홍보]비트코인 알고리즘 트레이딩 시스템 구축하기

$
0
0

요즘 가장 뜨거운 이슈가 가상화폐입니다. 오늘 뉴스에는 가상화폐 투자로 인한 피해자들 인터뷰 등이 나오더군요. 정부에서 전방위로 가상화폐를 압박하는 모양새입니다. 사실 투기와 투자의 차이점은 기초자산의 유무입니다. 복권, 경마 등과 주식, 선물을 잘 생각해보시면 되죠.

가상화폐가 한 두 나라가 막는다고 사라질 것 같지는 않습니다. 기존 화폐와 가상화폐가 양립하는 때가 오지 않을 까 싶습니다. 가상화폐의 현재 문제점은 결제수단으로 아직 부족하다는 점인데, 24/7으로 거래된다는 점에서는 외환시장과 비슷합니다. 비트코인 다음은 알고리즘 트레이딩 시스템 구축하기 세미나 소개입니다.


    비트코인 알고리즘 트레이딩 시스템 구축하기
  • 기간: 2017년 12월 23일 ~ 12월 24일, 2일간 총 12시간

  • 일정: 토요일,일요일 오후 1시 ~ 오후 7시 (6시간씩 총 12시간)

  • 준비물: 개인 노트북(Windows OS, Mac OS)

  • 장소: 위키아카데미 제1강의실

  • 수강인원: 20명

  • 수강료: 48만원,조기등록할인 40만원(12월 18일까지)

  • [URL]위키아카데미


Python tips

$
0
0
1) 두 개의 사전을 합치기(파이썬3.5이상)
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = {**x, **y}
>>> z
{'c': 4, 'a': 1, 'b': 3}
# 파이썬2에서는 다음과 같이 한다.
>>> z = dict(x, **y)
>>> z
{'a': 1, 'c': 4, 'b': 3}

2) 한번에 여러 개의 조건 검사하기
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
if 1 in (x, y, z):
print('passed')

# 다음은 불린(boolean)인지 아닌지만 따지는 경우이다.
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')

파이썬 흉내내는 VBA의 팁질

$
0
0
바로 아래 포스팅에서 파이썬으로 여러 개의 조건을 검사하는 축약코드를 보였는데, VBA도 이를 흉내내는 것이 가능하다. 하지만 'MS 이넘들아~ 내가 이렇게 추접스럽게 따라해야 겠냐~, 너거 오피스에 VBA 말고 파이썬 넣어주면 안되겠냐~' 라는 투정을 해본다.

VBA : 어때? 이 정도면 훌륭하지 않냐? ㅋㅋㅋ
(이를 지켜보던)
Python: ('지랄을 한다~') ㅎㅎ 잘 하는 데...짝짝짝
    Dim x As Long, y As Long, z As Long

x = 0
y = 1
z = 0

#1
Select Case True
Case x: Debug.Print "Passed at x"
Case y: Debug.Print "Passed at y"
Case z: Debug.Print "Passed at z"
End Select

#1-1
Select Case True
Case x, y, z: Debug.Print "Passed"
End Select

#2
If x Or y Or z Then Debug.Print "Passed"

#3
Debug.Print IIf(x Or y Or x, "Passed", "Not Passed")

#4
Debug.Print Switch(x, "Passed at x", y, "Passed at y", z, "Passed at z")

뭐? python을 엑셀에서 사용할 수 있다고?

$
0
0
낡은 vba를 python으로 바꿔야 한다는  생각이 저만의 것은 아닌 가 봅니다. 많은 사람들이 이걸 원하고 있는 데, 마이크로소프트 엑셀유저 포럼에서도 오래 전부터  vba가 아닌 R이나 python 등 다른 프로그래밍 언어도 지원해달라는 요청이 많았다고 합니다.

그런데 12월 14일 엑셀팀의 선임 프로그램매니저가 이런 요청에 답하며 설문조사를 올렸습니다. 저를 포함한 많은 사람들이 마이크로소프트가 이런 요구를 알고 있었으며 슬슬 기계학습과 딥러닝을 위해 본격적으로 파이썬을 MS오피스 호스팅언어로의 채택을 고려하려는 신호가 아닌가 하는 예상을 하고 있습니다.

관심있으신 분들은 아래의 설문조사에 참여하시면 됩니다. 이제 엑셀에서 파이썬으로 기계학습이나 딥러닝을 할 수 있을 지도 모르겠습니다.  vba를 버리진 않겠지만 python을 동시에 호스팅언어로 채택하는 날을 기다려 보겠습니다.

근데 이 포스팅의 카테고리를 '파이썬'으로 해야 하나, 'vba'로 해야 하나 고민이네요.

잘 가거라 vba야. 그동안 수고했다 ㅎㅎ


[설문조사 링크]:https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR7tUuWqOwSJFpBE5ZLhdkgtUMkhZWlkxRjhDRklXSjNTVkNSWkE2WlNQMS4u


[출처 쓰레드]:https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/10549005-python-as-an-excel-scripting-language





[책소개]딥러닝 부트캠프 with 케라스 - GPU 실습 환경 준비부터 이미지 분류, 물체 검출, 강화 학습까지

$
0
0
저와 절친이신 분이 최근에 책을 한 권 번역하고 드디어 출간을 앞에 두고 있어 소개합니다. 최근 IT도서분야에서 기계학습과 딥러닝의 바람이 불어 관련 책이 홍수처럼 쏟아져 나오고 있는 데, 얼마 전에 나온 제 책과 마찬가지로 이번 책, 딥러닝 부트캠프 with 케라스도 그런 붐속에 태어난 책입니다.

일본에 대한 별 관심이 없어 일본어를 해볼까 하는 생각조차 못했는데, 전해 들은 바에 따르면 일본서적의 특징은 지식의 깊이는 조금 부족해도 특유의 꼼꼼한 기록하는 습관덕에 내용이 잘 정리되어 있다고 하네요. 암튼 이번 책은 번역보다는 실습을 돌리느라 더 공을 들였다고 합니다.


책은 아직 정식출간전이지만 그 내용은 알라딘, 예스24 또는 길벗 홈페이지에서 볼 수 있답니다.

[URL 알라딘] 딥러닝 부트캠프 with 케라스
[URL 예스24] 딥러닝 부트캠프 with 케라스

참고로 제가 번역한 책 좀 잘 부탁드립니다. 굽신굽신~프로그래머를 위한 베이지안 with 파이썬

[자랑질]프로그래머를 위한 베이지안 with 파이썬

$
0
0
제가 번역한 책(프로그래머를 위한 베이지안 with 파이썬)을 앞서 홍보한 바가 있는 데, 오늘 출판사에 연락하니 책의 판매가 순조로운 듯합니다. 제가 직접 쓴 책은 이미 절판되어 뭔가 다시 써야 한다는 생각을 가지고 있는 데, 번역한 책이 그렇다니 제가 쓴 책만큼이나 반갑더군요. 번역료외 보람이라는 게 남는군요(이거 역시 홍보질이지만 먹고 살려니, 이해해주세요)





tag :

자바스크립트로 엑셀 함수를...

$
0
0
아직 개발중인데 MS에서 자바스크립트로 엑셀 워크시크함수를 만들 수 있도록 한답니다.

자세한 건 일단 아래의 URL을 하시길 바랍니다. MS가 파이썬 도입등  엑셀을 시작으로 오피스에 대단한 변화를 주려나 봅니다.
[URL]Custom function in Excel


엑셀로 데이터사이언스를 공부해볼까 싶어 벌이는 삽질

$
0
0
예전에 R 을 공부하면서 신박하다고 감탄한 기능중 하나는 미리 준비된 데이터셋이 있다는 점이다. 데이터분석을 위한 배려가 있는 환경이다. 새해부터 해보고 싶은 일이 데이터사이언스를 공부해보는 것인데, R이나 Python, Spark 등등 좋은 도구가 많지만 많은 전문가들이 빼놓지 않고 언급하는 도구가 엑셀이다.

기름없이 차가 안굴러가듯이 일단 데이터셋을 모으는 게 일인 듯 싶어(책도 준비하고) R의 데이터셋을 다운받을 곳을 찾아보니 , https://vincentarelbundock.github.io/Rdatasets/datasets.html 에서 CSV파일이나 DOC파일로 제공하고 있다.
흠 이걸 다운받아 써봐야지...R 책에서 자주 보이는 iris 등을 몇 개 다운 받고 보니, 쓸데없이 전부 다운받고 싶은 욕심이 든다. 그런데 제공하는 데이터셋이 한 두개가 아니다. 나중에 세어보니 1,174개이다.

엑셀로 공부하기로 했으니 필요한 데이터셋을 엑셀로 다운받아 보기로 했다. 일단 datasets.html 파일을 엑셀에서 열었다. [열기]대화상자에서 url을 복사해서 [파일이름]에 붙여 넣고 [열기]버튼을 클릭하면, html 파일이 워크시트안으로 들어오게 된다.


[F]컬럼은 csv파일을 다운받을 수 있는 하이퍼링크가 들어 있다. 이 컬럼의 각 셀을 돌아다니면서 하이퍼링크를 추출하여 다운로드하면 된다. 다운로드는 인터넷익스플로러(ie) 개체를 이용하는 방법도 있지만 윈도우 API를 직접 사용하는 방법을 사용하였다.
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

위의 URLDownloadToFile()함수에서 2번째 매개변수에는 url을, 3번째 매개변수에는 저장할 경로&파일이름을 던져주면 된다. 정상적으로 다운로드하면 0을 돌려준다. 다음은 이런 작업을 해주는 프로시저이다.
Sub DownloadCSV()
    Dim s As Worksheet
    Dim rng As Range
    Dim url As String
    Dim local_file_name As String
    Dim i As Long

    Set s = Sheet1
   
    i = 0
    For Each rng In s.Range(s.Range("F2"), s.Range("F2").End(xlDown))
        i = i + 1
        If GetQueueStatus(QS_ALL_EVENTS) <> 0 Then DoEvents

        url = rng.Hyperlinks.Item(1).Address
        local_file_name = ThisWorkbook.Path & "\" & Right(url, Len(url) - InStrRev(url, "/"))
        Debug.Print i, "Trying " & local_file_name

        If Len(url) <> 0 And Len(Dir(local_file_name)) = 0 Then
            If URLDownloadToFile(0, url, local_file_name, 0, 0) = 0 Then
                Debug.Print i, "Saving " & local_file_name
            End If
        End If
    Next
End Sub
그런데 시간이 많이 걸린다. 똥차라서 느리지만 잘 굴러가길 바라는 마음에서 추가로 원활한 작업을 위해 윈도우 큐를 검사하는 API(GetQueueStatus)를 하나 추가하였다. 다음은 GetQueueStatus()함수와 그에 부속된 상수들이다.
Declare PtrSafe Function GetQueueStatus Lib "user32" (ByVal fuFlags As Long) As Long
Public Const QS_MOUSEBUTTON = &H4
Public Const QS_MOUSEMOVE = &H2
Public Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Public Const QS_KEY = &H1
Public Const QS_INPUT = (QS_MOUSE Or QS_KEY)
Public Const QS_POSTMESSAGE = &H8
Public Const QS_SENDMESSAGE = &H40
Public Const QS_TIMER = &H10
Public Const QS_HOTKEY = &H80
Public Const QS_PAINT = &H20
Public Const QS_ALL_EVENTS = (QS_SENDMESSAGE Or QS_PAINT Or _
    QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON Or QS_MOUSEMOVE Or _
    QS_HOTKEY Or QS_KEY)

페어트레이딩에 대한 짧은 글

$
0
0
절대수익을 얻는 방법중 하나는 한 개의 자산을 매수하고 동시에 또 다른 하나의 자산을 매도하는 방법이 있다. 이를 Relative trading 또는 Pairs trading이라고 한다. 그러나 아무거나 사고 파는 것은 아니다. 매수/매도할 자산을 선택해야 하는 숙제가 남아 있다.

펀더멘탈 분석을 통해 저평가/성장가능성 높은 넘은 매수하고, 반대로 고평가/성장한계에 부닺친 넘은 매도하는 방법
통계적 분석으로 두 주식간의 괴리도가 벌어지거나 수렴하는 성질-평균회귀를 이용하는 방법

통계적 분석으로 지수보다 성과가 높은 포트폴리오를 매수하고 , 지수선물을 매도하거나 반대로 성과가 낮은 포트폴리오를 매도하고 지수선물을 매수하는 절대수익을 추구할 수 있다.

그러나 현실적으로 포트폴리오를 매도(공매도)하는 것이 쉽지 않다. 포트폴리오내 주식들을 일일이 원하는 수량만큼 빌리는 것도 수월하지 않고, 빌리는 비용을 지불해야 한다.

공격적으로 운용한다면 지수선물 대신 두 개의 포트폴리오를 매수/매도할 수도 있다.

1. 통계적 분석 방법
2. 회귀분석을 이용한 방법
3. 공적분 분석을 이용한 방법

1) 회귀분석을 이용한 방법
일반적인 회귀분석은 독립변수와 종속변수간의 관계를 식으로 풀어 미래를 예측하려는 알고리즘이다. 그러나 매수/매도하는 두 개의 종목은 어느 한 쪽이 독립변수이고 다른 한 쪽이 종속변수인 관계는 아니다. 직교회귀를 이용한 방법은 독립변수와 종속변수를 번갈아 바꿔 회귀분석을 실시한 후 기준선을 구하여 실제 값과의 직교거리의 괴리도를 이용하여 매매한다.


2) 공적분 분석을 이용한 방법
시계열을 이용한 분석으로 통계적 수치가 시간의 흐름에도 불구하고 일정하도록 하여(Stationary Process, 시불변) 분석한다. Non-Stationary Process 를 보이는 데이터를 변수들의 조합으로 Stationary Process로 바꾸는데, 이렇게 조합되는 변수들은 서로 Co-integrated되었다고 한다. 공적분 검정을 통해 시불변과정으로 바꿔 시계열분석을 한다.

흔히 co-integration에 대해 설명하는 예가 산책하는 주인과 강아지이다. 둘은 같은 방향으로 이동하지만 강아지는 주인 곁을 멀리 떠나지 않으면서 주변을 무계획적으로 돌아 다닌다. 따라서 강아지는 주인의 위치 정보를 제공하고 주인은 강아지의 위치를 알려주게 된다. 이때 주인과 강아지는 co-integration 되었다고 한다.


3) 분석시 고려할 사항
  • 분석대상 : 동조화 현상이 좋은 종목과 지수
  • 분석기간의 설정
  • 적용기간의 설정
  • 괴리도 설정 : 가령 추정치와 실제값의 잔차가 1.65*SD 이상 벌어지면 시작, 1.0*SD 이내로 돌아오면 포지션 청산
  • 수익률 계산방법
전체 데이터중 80%를 분석기간으로, 나머지 20%를 적용기간으로 분리한 뒤 모델링은 분석기간의 데이터만 가지고 수행하고, 모델의 성능은 적용기간로 평가하면 모델의 성능을 가장 적절히 평가할 수 있다. 전체 데이터를 모델링과 성능평가에 사용하면 데이터에 내재되어 있는 실제적 특징외에 데이터에 우연한 노이즈까지 반영한 모델을 만들게 될 위험이 있다. 과적합된 모델을 사용하게 되면 예측력이 떨어진다.

워크시트 선택 영역을 재빨리 움직이는 방법


베이즈통계로 짝사랑하는 상대방의 마음을 확인하는 법

$
0
0


사람 마음, 특히 내가 짝사랑하는 이성의 마음을 알고 싶은 것은 인지상정이죠. 스마트폰 앱중에는 짝사랑하는 상대방의 마음을 알려주는 앱이 있더군요. 그런데, 무슨 원리인지는 모르지만 앱이 자동으로 카톡 상대방에게 '~니가 너무 좋아' 하는 고백을 보내는 바람에 쪽팔리는 사태가 벌어진 리뷰가 재미있네요.


요즘 보고 있는 '세상에서 가장 쉬운 베이즈통계학 입문'이라는 책에는 초콜릿을 주는 직장동료가 나를 좋아하는 지, 아니면 그냥 주는 건지를 베이즈확률로 계산하는 예가 나옵니다.

문제설정
당신이 남성이라고 가정하자. 특정여성 동료가 자신에게 호감을 가지고 있는 지 알고 싶은 상황이다. 그런 와중에 당신은 밸런타인데이에 그녀로부터 초콜릿을 받았다. 이때 그녀가 당신을 진지하게 생각하고 있을 확률이 얼마라고 추정해야 할까?

여기에선 객관적인 자료(여자 마음에 대한 추측)가 없어 '이유불충분의 원리'를 적용하여 진심/논외로 나눠 각각 0.5의 확률을 부여하는 걸로 시작합니다.
'진심'은 그녀가 나에 대한 호감을 가진 것, '논외'는 그녀가 나를 그냥 직장동료정도로만 생각하는 것이죠.

그리고 조건부확률을 구해야 하는데, 이것은 설문조사 자료를 바탕으로 정하는 데, 통계적으로 평균 그녀들은 관심있는 상대에게 42.5% 확률로, 논외인 상대에게 22%의 확률로 초콜릿을 준다고 합니다.

사전확률과 조건부확률로 아래의 도표3-3과 같이 4가지의 세계(책에 따른 용어)로 나뉩니다.

그런데 운 좋게도 동료여성으로부터 초콜릿을 받았다고 합니다. 그래서 주지 않는다는 세계는 소거되고 남은 것은 "진심&준다"와 "논외&준다"가 남았습니다. 두 확률의 비율은 0.2:0.1 인데 모든 확률은 합쳐서 1.0 이어야 하는 정규화 규칙으로 이를 다시 계산하면

이 결과로부터 초콜릿을 준 그녀의 마음이 진심일 확률은 2/3 = 66%가 된다고 합니다. 처음에 50%라는 사전확률이 동료여성의 초콜릿을 준 행동을 관찰하게 됨으로써 약 66% 사후확률로 바뀌었습니다. 짝사랑만 하지 말고 확인해보시길 바랍니다. ㅎㅎ
이제 저도 짝사랑하는 그녀의 마음을 확인해볼까 합니다. 그런데 현실적으로 여자친구는 유니콘 같은 상상속의 동물 아닌가요?

아나콘다에서 파이썬 개발환경 수정

$
0
0
개발과정중에 아나콘다가 여러 모로 편리한 점이 있는데, 늘 명령이나 자주 사용하지 않는 명령을 정리해보려고 한다.
1. 설치된 파이썬과 라이브러리 버전(기본버전은 버전앞에 *가 붙음)
conda search python


2. 가상환경 설치 및 파이썬 버전 설정-가령 py35라는 가상환경을 만들고 사용할 파이썬 버전을 3.5.3.으로 한다면
conda create -n py35 python=3.5.3 anaconda

3. 가상환경 사용
activate py35(윈도우즈의 경우)
source activate py35(리눅스의 경우)

4. 가상환경 종료
deactivate py35(윈도우즈의 경우)
source activate py35(리눅스의 경우)

5. 기본 파이썬 버전 지정
conda install python=3.5.3

가상개발환경을 주피터 노트북에서 사용하기

$
0
0

윈도우에서 아나콘다를 가지고 가상개발환경을 만들었는데, 콘솔이 아닌 주피터 노트북에서 사용하고 싶었다. 그러나 가상개발환경을 만들어 준다고 해도 편리하게 주피터 노트북에서 가상개발환경을 사용하도록 만들어 주지는 못하는 듯하다. 주피터노트북은 가상개발환경과 무관하게 아나콘다의 전역적인 개발환경을 염두에 두고 작동을 하도록 만든 듯하다.

구체적인 방법은 다음과 같다.
1. 아나콘다 프롬프트를 연 후 가상개발환경으로 들어간다.
activate py35


2. ipykernel을 설치한다
(py35) $ pip install ipykernel


3. C:\Users\사용자이름\Anaconda3\share\jupyter\kernels 밑에 가상개발환경을 위한 커널폴더를 만들고 kernel.json 파일을 생성한다.

기본적으로 python3 폴더가 있고 그안에 kernel.json파일이 있다. kernel.json파일에는 주피터 노트북에서 기본으로 사용할 수 있는 Python3 노트북의 설정이 여기 있는데, 그 내용은 다음과 같다.
{
"argv": [
"C:\\Users\\사용자이름\\Anaconda3\\python.exe",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3",
"language": "python"
}

우리가 만든 가상개발환경도 python3와 같이 똑같이 만들어 주는 것이 핵심이다. 가상개발환경을 위한 노트북용 폴더(폴더이름이 가상개발환경의 이름과 일치하지 않아도 된다)를 하나 만들고 kernel.json 파일을 추가해준다.

4. kernel.json 편집
kernel.json의 세 번째 행은 파이썬 실행파일이 있는 경로와 파일명이다. 보통 가상개발환경은 C:\Users\사용자이름\Anaconda3\envs 아래에 만들어 진다. 그리고 가상개발환경 폴더에 python.exe가 있다. 그리고 "display_name" 에는 주피터 노트북 이름을 적어준다, 이름은 가상개발환경의 그것과 달라도 된다.
{
"argv": [
"C:\\Users\\사용자이름\\Anaconda3\\envs\\py35\\python.exe",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Zipline",
"language": "python"
}


5. zipline이라는 커널이 새로 생긴 걸 볼 수 있다

윈도에서 PyMC3 설치

$
0
0
지난 번에 우분투에서 PyMC를 설치하는 걸 포스팅한 적이 있는 데, 우분투나 맥이야 컴파일러가 아예 포함되어 있는 등 개발이 편한 점이 있지만 윈도우는 그렇치 않아 PyMC3 설치가 까다로운 듯하다. 처음에 파이썬3.6하에서 PyMC3를 설치하였는데, 거기에 필요한 theano가 파이썬 3.6을 아직 지원하지 않아 결국은 실패.

그래서 재수하여 파이썬3.5 가상개발환경을 만들고 PyMC3를 설치하여 보았다. 결론은 주관적으로 80~90% 성공(아직 샘플을 하나만 돌려서 나중에 뭔 에러가 날지는 모르겠지만) 다음은 설치한 내역인데, 참고 삼아 올려본다.

정리하면 :
1. conda create -n bayes python=3.5.3 anaconda
2. activate bayes
3. conda install -c conda-forge pymc3
4. conda install numpy scipy mkl-service libpython m2w64-toolchain

Welcome to Anaconda

(C:\Users\JIMSJOO\Anaconda3) C:\Users\JIMSJOO>conda create -n bayes python=3.5.3 anaconda
Fetching package metadata .............
Solving package specifications: .

Package plan for installation in environment C:\Users\JIMSJOO\Anaconda3\envs\bayes:

The following NEW packages will be INSTALLED:

anaconda: custom-py35h64770cb_0
certifi: 2017.11.5-py35h456c6ae_0
pip: 9.0.1-py35h691316f_4
python: 3.5.3-3
setuptools: 36.5.0-py35h21a22e4_0
vc: 14-h2379b0c_2
vs2015_runtime: 14.0.25123-hd4c4e62_2
wheel: 0.30.0-py35h38a90bc_1
wincertstore: 0.2-py35hfebbdb8_0

Proceed ([y]/n)? y

#
# To activate this environment, use:
# > activate bayes
#
# To deactivate an active environment, use:
# > deactivate
#
# * for power-users using bash, you must source
#


(C:\Users\JIMSJOO\Anaconda3) C:\Users\JIMSJOO>activate bayes
Welcome to Anaconda

(bayes) C:\Users\JIMSJOO>conda install -c conda-forge pymc3
Fetching package metadata ...............
Solving package specifications: .

Package plan for installation in environment C:\Users\JIMSJOO\Anaconda3\envs\bayes:

The following NEW packages will be INSTALLED:

backports: 1.0-py35_1 conda-forge
backports.functools_lru_cache: 1.4-py35_1 conda-forge
ca-certificates: 2017.11.5-0 conda-forge
cycler: 0.10.0-py35_0 conda-forge
freetype: 2.8.1-vc14_0 conda-forge [vc14]
h5py: 2.7.1-py35_2 conda-forge
hdf5: 1.10.1-vc14_1 conda-forge [vc14]
icc_rt: 2017.0.4-h97af966_0
icu: 58.2-vc14_0 conda-forge [vc14]
intel-openmp: 2018.0.0-hd92c6cd_8
joblib: 0.11-py35_0 conda-forge
jpeg: 9b-vc14_2 conda-forge [vc14]
libgpuarray: 0.7.5-vc14_0 conda-forge [vc14]
libpng: 1.6.34-vc14_0 conda-forge [vc14]
mako: 1.0.7-py35_0 conda-forge
markupsafe: 1.0-py35_0 conda-forge
matplotlib: 2.1.1-py35_2 conda-forge
mkl: 2018.0.1-h2108138_4
numpy: 1.14.0-py35h4a99626_0
openssl: 1.0.2n-vc14_0 conda-forge [vc14]
pandas: 0.22.0-py35_0 conda-forge
patsy: 0.5.0-py35_0 conda-forge
pygpu: 0.7.5-py35_0 conda-forge
pymc3: 3.2-py35_0 conda-forge
pyparsing: 2.2.0-py35_0 conda-forge
pyqt: 5.6.0-py35_4 conda-forge
python-dateutil: 2.6.1-py35_0 conda-forge
pytz: 2017.3-py_2 conda-forge
qt: 5.6.2-vc14_1 conda-forge [vc14]
scipy: 1.0.0-py35h75710e8_0
sip: 4.18-py35_1 conda-forge
six: 1.11.0-py35_1 conda-forge
theano: 1.0.1-py35_1 conda-forge
tornado: 4.5.3-py35_0 conda-forge
tqdm: 4.19.5-py_0 conda-forge
zlib: 1.2.11-vc14_0 conda-forge [vc14]

Proceed ([y]/n)? y

ca-certificate 100% |###############################| Time: 0:00:02 76.97 kB/s
backports-1.0- 100% |###############################| Time: 0:00:00 293.55 kB/s
joblib-0.11-py 100% |###############################| Time: 0:00:01 115.96 kB/s
markupsafe-1.0 100% |###############################| Time: 0:00:00 109.96 kB/s
numpy-1.14.0-p 100% |###############################| Time: 0:00:00 8.68 MB/s
pyparsing-2.2. 100% |###############################| Time: 0:00:00 100.65 kB/s
pytz-2017.3-py 100% |###############################| Time: 0:00:01 111.23 kB/s
sip-4.18-py35_ 100% |###############################| Time: 0:00:02 242.40 kB/s
six-1.11.0-py3 100% |###############################| Time: 0:00:00 1.39 MB/s
tornado-4.5.3- 100% |###############################| Time: 0:00:02 234.72 kB/s
cycler-0.10.0- 100% |###############################| Time: 0:00:00 0.00 B/s
h5py-2.7.1-py3 100% |###############################| Time: 0:00:03 210.72 kB/s
mako-1.0.7-py3 100% |###############################| Time: 0:00:00 186.76 kB/s
pyqt-5.6.0-py3 100% |###############################| Time: 0:00:05 875.71 kB/s
python-dateuti 100% |###############################| Time: 0:00:03 76.87 kB/s
backports.func 100% |###############################| Time: 0:00:00 612.81 kB/s
pandas-0.22.0- 100% |###############################| Time: 0:00:08 1.17 MB/s
patsy-0.5.0-py 100% |###############################| Time: 0:00:03 88.86 kB/s
pygpu-0.7.5-py 100% |###############################| Time: 0:00:02 260.30 kB/s
matplotlib-2.1 100% |###############################| Time: 0:00:06 1.13 MB/s
theano-1.0.1-p 100% |###############################| Time: 0:00:06 622.71 kB/s
pymc3-3.2-py35 100% |###############################| Time: 0:00:04 275.41 kB/s

(bayes) C:\Users\JIMSJOO>python
Python 3.5.3 |Anaconda custom (64-bit)| (default, May 15 2017, 10:43:23) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymc3 as pm
WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`
C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\theano\configdefaults.py:560: UserWarning: DeprecationWarning: there is no c++ compiler.This is deprecated and with Theano 0.11 a c++ compiler will be mandatory
warnings.warn("DeprecationWarning: there is no c++ compiler."
WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.
WARNING (theano.configdefaults): install mkl with `conda install mkl-service`: No module named 'mkl'
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.

C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
>>> exit()

(bayes) C:\Users\JIMSJOO>conda install numpy scipy mkl-service libpython m2w64-toolchain
Fetching package metadata .............
Solving package specifications: .

Package plan for installation in environment C:\Users\JIMSJOO\Anaconda3\envs\bayes:

The following NEW packages will be INSTALLED:

libpython: 2.1-py35_0
m2w64-binutils: 2.25.1-5
m2w64-bzip2: 1.0.6-6
m2w64-crt-git: 5.0.0.4636.2595836-2
m2w64-gcc: 5.3.0-6
m2w64-gcc-ada: 5.3.0-6
m2w64-gcc-fortran: 5.3.0-6
m2w64-gcc-libgfortran: 5.3.0-6
m2w64-gcc-libs: 5.3.0-7
m2w64-gcc-libs-core: 5.3.0-7
m2w64-gcc-objc: 5.3.0-6
m2w64-gmp: 6.1.0-2
m2w64-headers-git: 5.0.0.4636.c0ad18a-2
m2w64-isl: 0.16.1-2
m2w64-libiconv: 1.14-6
m2w64-libmangle-git: 5.0.0.4509.2e5a9a2-2
m2w64-libwinpthread-git: 5.0.0.4634.697f757-2
m2w64-make: 4.1.2351.a80a8b8-2
m2w64-mpc: 1.0.3-3
m2w64-mpfr: 3.1.4-4
m2w64-pkg-config: 0.29.1-2
m2w64-toolchain: 5.3.0-7
m2w64-tools-git: 5.0.0.4592.90b8472-2
m2w64-windows-default-manifest: 6.4-3
m2w64-winpthreads-git: 5.0.0.4634.697f757-2
m2w64-zlib: 1.2.8-10
mkl-service: 1.1.2-py35h051acba_4
msys2-conda-epoch: 20160418-1

Proceed ([y]/n)? y

libpython-2.1- 100% |###############################| Time: 0:00:04 9.69 MB/s
mkl-service-1. 100% |###############################| Time: 0:00:00 846.01 kB/s

(bayes) C:\Users\JIMSJOO>python
Python 3.5.3 |Anaconda custom (64-bit)| (default, May 15 2017, 10:43:23) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymc3 as pm
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
>>> model=pm.Model()
>>> with model:
... mu1=pm.Normal("mu1",mu=0,sd=1,shape=10)
...
>>> with model:
... step=pm.NUTS()
... trace=pm.sample(2000,tune=1000,init=None,step=step,njobs=2)
...

C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\pymc3\model.py:384: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
if not np.issubdtype(var.dtype, float):
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
23%|##################3 | 704/3000 [00:01<00:05, 446.05it/s]WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
35%|########################### | 1054/3000 [00:02<00:03, 492.33it/s]C:\Users\JIMSJOO\Anaconda3\envs\bayes\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
100%|#############################################################################| 3000/3000 [00:05<00:00, 576.51it/s]
>>>

세상에서 가장 쉬운 베이즈 통계학 입문

$
0
0
지난 연말부터 이번 달 중순까지 책을 한 권 읽고 나름대로 정리하는 시간을 가져 보았다. 한 권을 읽고 정리하고 보니 뿌듯한 느낌이 들었다. 그래서 결심한 것이 2018년 올 한해에는 책을 대충 읽지 말고 끝까지 읽고 정리를 해볼까 한다. 그래서 읽고 정리한 책이 "세상에서 가장 쉬운 베이즈 통계학 입문"이다. 통계학도 잘 모르는 상황에서 베이즈 통계학을 공부하겠다고 몇 권의 책을 보고 좌절했다. 어찌 초반에만 쉬운 지...뒤로 갈 수록 @.@

결론부터 말하자면 베이즈 통계학을 처음 입문하고자 하는 분은 꼭 한번 읽어보시길 바이다. 소개한 바와 같이 책은 복잡한 수식없이 단순 계산만 갖고 진행한다. 그리고 이 책의 장점중 하나는 확률의 개념을 면적으로 보고 조건부 확률과 관측 정보를 곱하는 방식으로 확률을 설명하고 있다. 책은 1부와 2부로 나눠져 있는데, 1부는 재미있는 산수공부처럼 생각하고 읽어 나갈 수 있다. 그러나 2부는 약간 미간을 구겨가며 집중을 하면서 읽어야 한다 (책의 중간 중간에 오타/오류가 있는 데, 번역출판과정에서 생긴 듯하다)

저자는 일본 데이쿄 대학교 경제학부에 재직중인 고지마 히로유키교수이다. 사실 이 분의 책을 한 권 더 가지고 있었다. "세상에서 가장 쉬운 통계학 입문"이 그것인데, 공교롭게도 책을 사다보니 같은 저자였다. 이 책은 통계지식이 그냥 부족한 게 아니라 절대 부족한 사람들을 위해 쓴 책인데, 이 책을 먼저 있어도 된다.
Viewing all 204 articles
Browse latest View live