쥬피터를 켠 상태에서 컴퓨터를 꺼버려서 원본 파일에 손상이 일어났습니다. 제가 작업하려고 import 한 모든 라이브러리가 사라졌습니다. 쥬피터는 켜지지도 않고 '~~~ 손상된 파일이 복구되었습니다. ~~~' 는 형식의 오류창만 뜨고 있습니다. 일전에도 이런 적이 있어서 아나콘다를 다시 까는 불상사가 일어났었는데 또 다시 아나콘다를 깔아야한다니ㅜ 그 동안 설치한 라이브러리 목록을 백업해두지 않았는데 큰일났습니다. 해당 가상환경을 지우지 않고 해결하는 방법은 없을까 싶어 혹시나 하고 구글링을 해보니 저와 비슷한 처지였던 사람들이 있더군요. 다행히 해결방법이 있었습니다. 이 사이트에서 얻을 수 있었는데요. 사실 저와 똑같은 상황은 아닙니다. 해당 사이트는 Clobber 대상이 일정 라이브러리에서만 나왔는데 ..
이것저것 하다보니 글이 이리갔다 저리갔다 하고 있습니다만 그만큼 작업을 하면서 배우다보니 바삐 돌아가는 것 같습니다. 그래도 글이 다 모이면 순서를 갖출 수 있지 않을까 싶습니다. Qt 는 GUI 프로그래밍을 할 때 쓰는 라이브러리인데요. 보통 C에서 썼었던것같은데 이게 파이썬에서도 가능합니다. Pyqt5로 불리고 있는데 이게 Qt입니다. 큰 틀은 Qt라서 Qt를 안다면 금방 익히지 않을까 싶습니다. Pyqt5를 사용하면 tkinter나 wxpython과 다르게 직접 배치할 수 있는 프로그램(?)이 있습니다. Qt Designer라는 프로그램인데요. 이를 이용해 GUI 틀을 만들고 py파일로 바꿀 수 있습니다. 이번 포스팅에서는 Qt Designer를 이용해 GuI 틀을 만들고 py파일로 바꿔보겠습니다...
Numpy로 랜덤한 값을 기반으로 분포함수를 구현하는 방법입니다. 파이썬으로 하기 정말 간단한데 분포가 워낙 많이 있다보니깐 쓰는 함수만 쓰게 되긴 합니다만 복잡한 모델을 하다보면 평가방식을 달리 하거나 새로운 접근을 위해서 포스팅에 정리합니다. 구현 맛보기로 정규분포와 푸아송 분포를 구현해보겠습니다. 나머지 분포는 밑에 표로 남겨 놓겠습니다. poisson 분포의 람다값은 1로 하겠습니다. import numpy.random as npr #샘플 사이즈 sample_size = 500 #분포 rd1 = npr.standard_normal(sample_size) rd2 = npr.poisson(lam=1.0, size = sample_size) # 그리기 from pylab import plt, mpl p..
np.linalg을 이용해 행렬 계산을 해보겠습니다. 1. 행렬식(np.linalg.det(x))행렬식을 구하는 방법입니다. 보통 행렬식이 0이 아니면 역행렬이 존재하므로 확인용으로 하거나 지금은 파이썬으로 할 것이라 역행렬을 구할 때 행렬식을 구하고 계산해서 쓰진 않을 거지만 실제 수학계산에서는 행렬식을 반드시 사용해주어야 합니다. 예로 2x2 행렬을 해보겠습니다. 2x2 행렬식이면 $ \begin{vmatrix} a & b \\ c & d \end{vmatrix} $ = ad-bc 로 계산이 됩니다. 만약 $ \begin{pmatrix} 1 & 2 \\ 3 & 2 \end{pmatrix} $ 라면 행렬식은 -4가 나옵니다. import numpy as nparray = np.array([[1,2..
수치계산을 하다보면 반올림을 하거나 소수점 제한을 줘서 출력해야 하는데 numpy에서 그런 역할을 하는 메쏘드가 있습니다. np.set_printoptions라는 것인데요. 정밀화 과정을 하거나 표현을 쉽게 하기 위해서 값의 설정을 변경할 수 있습니다. 쥬피터로 작업을 하면 한번만 설정해놓으면 밑의 작업들 전체가 설정에 따르게 됩니다. np.set_printoptions의 많은 파라미터가 있지만 주요로 쓰는 파라미터만 포스팅하고 나머지는 가이드 사이트에서 확인하시기 바랍니다. 제가 쓸 파마리터는 precision, threshold, formatter 입니다. 소수점 반올림하기(precision) 소수점 반올림합시다. 이게 한번 설정하면 처음처럼 자연스레 돌릴수가 없어서 먼저 처음으로 돌아갈 곳을 알고 ..
판다스로 단순 이평선을 구할 때는 판다스 내에 rolling을 이용한 방식으로 구합니다. 그런데 커스텀하게 만든다면 결국 recursive 알고리즘을 쓰게 되어있습니다. 왜냐하면 주식데이터는 시간과 값으로 이루어져 있고 시간에 따른 변화를 분석하는 것이 보통 금융데이터 분석을 하는 목적이기 때문입니다. 결론적으로 Recursive를 써야하니 속도 개선이 필요합니다. 이번 포스팅에서는 판다스를 이용할 때의 속도 개선입니다. Exponentially weighted moving average(EWMA)라는 지수가중평균선을 만들어 분석하는 시간이 얼마나 드는지 확인해보겠습니다. 판다스로 EWMA를 바로 만들 수 있지만 임의로 만들어서 해보겠습니다. EWMA EWMA에 대한 자세한 설명은 나중에 기회가 되면 따..
Recursive algorithm의 경우에 대해 알아보겠습니다. 이전 포스팅에서 numba와 cython을 가지고 속도 개선을 했는데 Recursive algorithm은 통하지 않습니다. 그 이유와 개선 방법에 대해 설명하겠습니다. 참고로 현재 속도개선에 관한 포스팅은 python for finance라는 책을 참고해서 포스팅하고 있습니다. 그런데 책대로 해도 다 되는 건 아니라서 여기저기 참고하면서 블로그에 정리를 하고 있습니다. 이러면서 공부가 되는거겠죠? 아무튼 정리의 목적이 크니 알아두셨으면 합니다. Recursive algorithm 재귀라고 하는 방법입니다. 고등학교 수학시간에 수열에서 배운 점화식을 얘기합니다. 함수를 만들면 만든 함수를 이용해 다음 수를 계산하는 방법입니다. 예로 팩토리..
알고리즘을 구성했을 때 파이썬에서 속도 개선을 위한 시도입니다. 어느 알고리즘을 하느냐에 따라 속도 차이는 있을 수는 있습니다. 알고리즘 이론에서 배우는 복잡한 알고리즘 말고 간단한 알고리즘으로 이전 포스팅에서 얘기한 속도 개선방안 중 어느 것이 효율적인지 확인해보도록 하겠습니다. 알고리즘은 소수 찾는 방법을 만들건데 메르센소수나 페르마 소수 같은 수학 지식이 들어간 방법 말고 소수의 정의대로 알고리즘을 만들어서 시도를 하겠습니다. 소수는 1과 자기자신으로만 나누어지는 숫자를 의미합니다. 예로 2,3,5,7 이런 수가 있습니다. 숫자가 작으면 금방 소수인지를 알아낼 수 있지만 숫자가 커지면 굉장히 어려워집니다. 소수를 찾는 규칙이 따로 존재하면 규칙을 사용하면 되지만 현재로서는 그런 규칙은 부분적으로만 ..
Loop의 퍼포먼스 개선입니다. 순수 파이썬, numpy, numda와 cython으로 평균을 구하는 루프를 만들어 시간 비교를 해보겠습니다. 시간 측정을 위해서 %time 과 %timeit을 쓰려고 합니다. %time은 한 줄의 코드 실행시간을 측정할 때 사용할 수 있고 %timeit은 코드를 여러 번 시도를 한 후 시간 측정을 해서 오차범위를 알려줍니다. Python 파이썬의 내장함수로만 평균을 구해보겠습니다. %time은 코드 한 줄로 해야되니 평균을 구하는 함수를 만들어서 진행을 하겠습니다. import random def average_python(n): s = 0 for i in range(n): s += random.random() return s/n n= 1000000 %time avera..
파이썬은 간결하고 직관적으로 쓸 수 있는 장점이 있는 반면에 굉장히 느린 코드입니다. 루프나 알고리즘을 실행하면 다른 언어에 비해 시간이 오래걸립니다. 간단한 구조는 시간이 얼마 안 걸려서 큰 문제는 없겠지만 알고리즘이 복잡해지고 데이터 크기가 커지면 시간은 굉장히 중요한 요소가 됩니다. 답은 간단하게 속도가 빠른 C 나 C++을 쓰면 되지만 갑자기 C를 배워서 할 수 있는 실정이 안 된다면 파이썬 안에서 개선할 방안을 찾아야 합니다. 개선 방안으로는 다음과 같이 있습니다. Vectorization(벡터화) : 좌표값이나 행렬로 값을 모으는 것을 벡터화라고 합니다. 주로 수학이나 공학에서 쓰는 행렬개념과 비슷합니다. 벡터를 행렬표시로 변환해서 쓰면 행렬 계산으로 넘어가 계산을 하게 되는 건데 그런 학술적..
pip은 파이썬을 설치하면 내장되어 있기 때문에 따로 설치가 필요없지만 업그레이드를 하거나 재설치를 해야하는 경우 쓰는 방법입니다. 제가 소개하는 건 윈도우 버전이고 맥이나 리눅스는 그에 맞게 명령어를 써주면 됩니다. get-pip.py 파일 받기 cmd를 켠후 다음을 입력합니다. curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 그러면 현재 지정된 폴더에 get-pip.py이 생깁니다. pip 설치 pip을 설치하기 위해 다음을 씁니다. python get-pip.py 설치가 완료 되었습니다. no such file or dictory python get-pip.py를 했는데 no such file or dictory라며 안 되는 경우가 있습니다. 일반..
cmd에서 pip으로 설치를 할 때 Ignoring invalid distribution -ip 이라는 메세지가 뜹니다. 이건 ~으로 이루어진 폴더 때문인데 임시폴더를 만들어놨는데 아직 지우지 않았거나 이름이 잘못 배정되어 있는 경우에 저런 폴더가 나타납니다. 그래서 유효하지 않는 값을 무시하겠다고 메세지가 뜨는 겁니다. 작업을 진행하는데 아무 지장은 없지만 신경이 쓰인다면 해당 폴더에 가서 '~'로 시작하는 폴더를 지우면 됩니다. 해당 폴더를 가보았더니 ~ip 와 ~ip-20.1.1-py3.6.egg-info 라는 폴더가 있었습니다. 해당 폴더를 지우면 Ignoring invalid distribution -ip 라는 오류가 나오지 않게 됩니다.
FinanceDataReader라는 라이브러리가 있어서 소개겸 포스팅하려 합니다. 이 라이브러리를 쓰면 국내 주식, 미국 주식, 지수, 환율, 주요 암호화폐 가격 데이터를 가져올 수 있습니다. 제가 이 포스팅을 쓰는 이유는 자꾸 잊어버려서 코드를 저장하고자 쓰는 내용이라 원하는 내용이 없을 수도 있습니다. 그리고 라이브러리에서 코드를 바꿔버리거나 서비스를 중지하면 되지 않을 수 있으니 안 되시면 FinancedataReader 가이드 사이트나 Github에서 확인하시기 바랍니다. Install 다음 코드를 파이썬 prompt나 파워쉘에서 입력해 설치를 합니다. 쥬피터에서는 맨 앞에 느낌표(!)를 붙입니다. pip install finance-datareader 전체 종목 코드 가져오기 국내와 미국 주식 ..
Checkbutton의 세가지 모양에 대해 알아보겠습니다. GUI 창이 떴을 때의 Checkbutton 모습을 임의로 만들 수 있는데 다음과 같은 형태로 만들 수 있습니다. 목차 체크 불가능 버튼 체크 불가능 버튼을 만들려면 tk.Checkbutton의 파라미터에 state = disabled 를 추가합니다. 체크가 된 상태로 만들고 싶다면 select 메쏘드를 사용합니다. select를 넣으면 체크가 된 상태로 GUI 창이 뜹니다. deselect를 넣으면 체크가 안 된 상태로 창이 뜨게 됩니다. import tkinter as tk root = tk.Tk() check1 = tk.Checkbutton(root, text='Disabled',variable=tk.IntVar(),state= 'disab..
notna와 notnull을 이용하여 결측치가 아닌 값을 찾는 방법입니다. isin이나 isna로 하는 게 더 편하긴 하지만 쓰기 나름이라서 누군가는 필요할 수도 있으니 일단 포스팅을 하겠습니다. 예제로 데이터프레임을 하나 만들겠습니다. df = pd.DataFrame(dict(level=[1,2,3,4,5,np.nan],age=[12,13,18,20,np.nan,23])) df notna 와 notnull 의 기능 notna 와 notnull 은 isna와 반대로 결측치가 아닌 값을 찾아내는 기능을 가지고 있습니다. 그래서 bool로 출력이 되는데 결측치에는 False로 나오게 됩니다. df_notna = pd.notna(df) df_notna df_notnull = pd.notnull(df) df_n..