주식 차트를 분석하기 위해 이동평균이 필요할 때가 있습니다. 그렇지만 보통 주식데이터는 주가와 거래량만을 가져오기 때문에 이동평균선을 직접 구해야 합니다. 만약 5일 이동평균선을 구하려고 한다면 5일씩 잘라서 계산을 해야하는데 엑셀로 직접할 수도 있지만 번거롭습니다. Pandas 를 이용하면 이동평균선을 쉽게 구할 수 있습니다. Rolling()이라는 메쏘드를 쓰면 되는데요. Rolling()을 이용하여 10일 이동평균선을 구해보도록 하겠습니다. 삼성전자 가격 데이터입니다. 이것을 df로 하고 구해보겠습니다. 먼저 10일 이동평균선을 구하기 위해서 10일치의 종가의 평균을 구해야 하니 10개를 잡고 그것의 평균을 구합니다. 10개를 잡기 위해서 rolling을 씁니다. window 파라미터에 내가 잡을 ..
for 반복문에서 많이 쓰는 range와 enumerate 를 살펴보겠습니다. 아주 간단합니다. Range range는 범위설정을 해주는 역할을 해줍니다. range(시작,종료,step) 형태로 쓸 수 있습니다. 리스트 슬라이싱과 비슷합니다. 시작과 step은 생략가능하고 생략해서 쓰면 다음과 같이 출력됩니다. >>> range(5) range(0,5) 알아서 시작,종료를 설정해 주기 때문에 처음부터 시작(0으로 시작)하면 시작을 굳이 안 쓰셔도 됩니다. step은 슬라이싱과 같은 방식입니다. range를 가지고 리스트를 만들어 보겠습니다. >>> list(range(5,21,3)) [5,8,11,14,17,20] 보시다시피 5에서 21까지의 숫자를 3칸씩 띄어서 출력하게 했습니다. for 문을 통해서 ..
파이썬으로 엑셀 파일을 불러올 때 경로를 찾아서 불러와야 합니다. 경로야 물론 금방 찾을 수 있지만 엑셀 파일 100개를 불러오려면 파일이름을 일일히 써야하는데 노동이 되버리니 폴더 안에 파일 이름을 가져와서 for문을 돌리면 제가 일일히 파일이름을 쓰지 않아도 됩니다. 파일 이름 리스트로 가져오기 폴더 안에 파일 이름을 가져와보겠습니다. 굉장히 간단합니다. os.listdir 을 쓰면 나옵니다. listdir은 폴더 안에 파일이름을 list화 한다는 명령어입니다. import os file_list = os.listdir('경로') file_list file_list를 부르면 다음과 같이 확장자까지 다 나옵니다. 확장자 없애기 같은 확장자가 같이 있다면 인덱스 슬라이스로 간단히 할 수 있지만 확장자가 ..
기본폴더를 바꿔야 할 때 반영구적으로 하는 방법과 임시적으로 여는 방법이 있습니다. 반영구적인 방법 애초에 설정을 바꾸는 방법인데요. 아주 간단합니다. 윈도우 시작에서 Jupyter를 찾습니다. 그러면 탐색기로 이동이 되고 jupyter 바로가기들이 있을겁니다. 기본폴더를 바꾸고자 하는 jupyter의 속성으로 갑니다. 속성에 가면 '%USERPROFILE%/' 을 보실 수 있는데 여기에 원하는 경로를 입력합니다. 저는 \를 /로 바꿔서 했는데 저만 그러는지는 모르겠지만 \로 입력하면 실행이 안 되서 혹시 실행이 안 되면 참고하세요~ 아무튼 이렇게 하면 기본폴더가 변경됩니다. 임시방법 일시적으로 폴더를 바꿔서 시작해야하는 경우가 있습니다. 그럴 때는 cmd에서 가고자하는 폴더로 이동한다음에 jupyter..
jupyter에서 출력을 하려고 실행을 했더니 'IOPub data rate exceeded' 라 하면서 뒤에 주저리주저리 뭐가 붙는 경우가 있습니다. 출력 데이터 rate 초과시 발생하는 오류인데 Juptyer의 환경설정에서 고칠 수 있습니다. 'NotebookApp.iopub_data_rate_limit = 1000000' 으로 써져있는 곳을 바꾸면 되는데 복잡합니다. 임시방법 먼저 임시적인 방법을 알려드리겠습니다. 쥬피터 노트북 터미널을 켜서 jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10 을 입력합니다. 그러면 jupyter가 새로 켜지고 다시 실행을 시키면 잘 되는 것을 볼 수 있습니다. 환경설정 변경 환경설정 자체를 건드려 보겠습니다...
파이썬에서 os를 이용해 컴퓨터를 종료할 수 있습니다. import os os.system("shutdown -l") # 로그아웃 os.system('shutdown -s -t 시간') #컴퓨터 끄기 재시작을 하고 싶다면 다음과 같이 합니다. os.system('shutdown -r -t 시간') 시간란에 특정 시간을 넣어주면 코드를 실행하고 특정 시간이 지나면 명령대로 컴퓨터를 종료하게 됩니다. 즉시 종료를 하고 싶다면 시간란에 0을 넣으시면 됩니다. 실행중인 응용프로그램 때문에 종료가 안 되는 경우가 있는데 그런 경우에는 응용프로그램을 강제 종료하고 시스템을 종료할 수 있습니다. os.system('shutdown -s -f') 밤에 코딩 돌려놓고 컴퓨터를 자동으로 끄고 싶을때 아주 유용합니다~!
딕셔너리를 정렬해야할 때가 있습니다. 특히나 딕셔너리는 {Key : Value} 로 되어있어서 Key정렬로 할 것인지 Value 정렬로 할 것인지 상황에 따라 달라집니다. 이번 포스팅에서는 각 기준에 따라 정렬하는 방법을 소개하겠습니다. 이 방법은 딕셔너리로 예쁘게 나오는 방법이 아닙니다. 리스트로 반환됩니다. 코딩 중에 정렬을 해서 뽑아내서 뭘 하기 위해 하는 중간과정이라 보시면 될 것 같습니다. Key를 이용한 정렬 Value를 이용한 정렬 Key를 이용한 정렬 Key로 정렬하는 방법은 간단합니다. 리스트에서 하던 방식대로 하면 됩니다. sorded 함수를 사용합니다. >>> data_dict = {} >>> data_dict['A'] = 0 >>> data_dict['B'] = 4 >>> data_..
matplotlib 에서 한글로 출력이 안 되는 경우가 있는데 이건 matplotlib에서 제공하는 기본폰트가 한글 font를 가지고 있지 않아서 그렇습니다. 그래서 title 부분을 한글로 해서 출력했더니 네모로만 표시되어 있습니다. 이런 경우 font를 변경해주어야 합니다. 다음과 같이 변경합니다. 저는 나눔고딕(NanumGothic) 폰트를 설정했습니다. >>> import matplotlib.pyplot as plt >>> plt.rc('font',family='NanumGothic') >>> print(plt.rcParams['font.family']) ['NanumGothic'] 이렇게 했는데 설정이 안되거나 'Font family [] not found' 에러가 뜨면 다음과 같이 합니다. 먼..
일반적으로 수익률을 구하면 다음과 같이 구합니다. (매도가격-매수가격)/매수가격 이렇게 구하는 수익률을 판다스를 이용하면 편하게 구할 수 있습니다. 바로 pct_change() 메쏘드를 쓰면 되는데요. 예를 위해 삼성전자의 종가 데이터를 가져와서 해보겠습니다. 일별 수익률 df['Daily_rtn'] = df['Close'].pct_change() Daily_rtn 으로 새로운 column 을 만들었습니다. Daily_rtn에 일별 수익률이 나오는 걸 볼 수 있습니다. N일 수익률 특정 N일에 대한 수익률을 구하고 싶다면 pct_change(periods=N)을 입력하면 됩니다. N = 3으로 놓겠습니다. df['N=3'] = df['Close'].pct_change(periods=3) N=3 이므로, ..
파이썬으로 파일을 불러오려면 파일경로를 입력해야 하는데요. 표기방법 몇가지를 소개할까 합니다. 뭐가 압도적으로 좋다고 얘기하기는 어렵지만 선호도에 따라서 입력하는 방식이 다들 다르니 모두 알아두면 좋을 것 같습니다. 현 포스팅에서는 os 사용방법은 쓰지 않겠습니다. 폴더 경로를 입력할 때 어떻게 써야하는지만 설명하겠습니다. 먼저 알아두어야 하는것은 현재폴더에서 당장 파일을 불러올 때 일일히 파일경로를 찾아서 쓸 필요가 없습니다. 현재 폴더에서 파일을 가져온다며 './' 입력해서 자신의 현재폴더에서 파일을 찾아옵니다. '../' 이면 현재경로에서 한단계 이전으로 갑니다. df = pd.read_csv('./s&p500.csv') 두번째로는 다른 폴더에서 파일을 가져와야 하는 경우입니다. 꼭 알아두어야 하는..
코딩을 해서 어떤 데이터를 리스트나 딕셔너리를 만들었을 때 그것을 따로 저장하지 않고 나중에 다시 작업을 하면 컴퓨터가 코딩작업을 다시 하게 되어서 기다리는 시간이 생기게 됩니다 시간을 아끼고 작업을 원활하게 하기 위해서 그리고 결과를 보존하려면 모든 객체를 저장할 수 있는 pickle을 이용하면 됩니다. 저장하기 예로 pickle를 이용해 딕셔너리를 저장해보겠습니다. >>> import pickle >>> data_dict = {} >>> data_dict['A'] = [0,1,2] >>> data_dict['B'] = [3,4,5] >>> data_dict['C'] = [6,7,8] >>> data_dict {'A': [0, 1, 2], 'B': [3, 4, 5], 'C': [6, 7, 8]} # S..
파이썬에 있는 패키지를 삭제할 때 conda로 설치한 패키지면 conda로 삭제하고 pip으로 설치한 패키지면 pip으로 삭제합니다. conda remove -n [environment] [package_name] pip uninstall [package_name] cmd에서 위와 같이 입력하면 패키지 하나씩 제거할 수 있습니다. 모두 제거하고 싶다면 아래와 같이 합니다. conda clean pip freeze > name.txt #현재 설치된 패키지 목록 파일화 pip uninstall -r name.txt #메모장 안에 써있는 목록들을 모두 지우기 conda 는 clean으로 간단하게 제거할 수 있지만 pip 은 목록 리스트에 따라서 제거 할 수 있기 때문에 목록을 만들고 그 목록들의 패키지를 모두..
파이썬 버전 확인 cmd에서 파이썬 버전 확인 방법입니다. python --version 다음과 같이 파이썬 버전을 확인할 수 있습니다. 모듈 버전 확인 모듈은 list를 뽑아보면 현재 깔려있는 모듈과 버전이 모두 나옵니다. pip list 업데이트 항목 보기 업데이트가 필요한 항목을 봅니다. pip list --outdated 최신 버전 항목 보기 이미 최신버전인 항목을 보려면 다음을 입력합니다. pip list --uptodate
판다스를 사용하다보면 내가 원하는만큼만 잘라서 다시 DataFrame을 만들어서 데이터 분석을 하고 싶을 때가 있습니다. 저는 특히 시간데이터를 많이 다루다 보니 인덱스 슬라이싱을 해야하는 경우가 많이 생기는 것 같습니다. 그럴 때마다 항상 bool을 이용한 방식으로 인덱스 나누기를 했는데 인덱스가 여러개거나 논리가 많아지면 괄호 하나 따라서 해석이 잘못 되기도 하고 헷갈리기도 합니다. 그러면 자연스럽게 오류가 발생하고 오류를 해결하느라 애를 많이 먹고 시간은 시간대로 흘러갔습니다. 이런 불편함을 감수하던 차에 우연히 새로운 방법을 알게 되서 까먹으면 다시 보려고 포스팅으로 남깁니다. Bool 로 인덱스 나누기 저의 예전 방법은 and, or을 이용한 방식이었는데 CJ제일제당의 과거 주가 데이터로 보여드..
두개 이상의 DataFrame을 합치는 방법에 대해 알아보겠습니다. 판다스에서는 합치는 메소드로 merge(), join(), concat() 등이 있는데 이번 포스팅에서는 merge()에 대해서만 살펴보겠습니다. DataFrame 두개를 먼저 임의로 만들겠습니다. import pandas as pd data1 = {'No':[1001,1002,1003,1005,1006], 'Name':['David','Terry','Tim','John','Max'], 'Department':['Management','Engineer','Engineer','Secretary','Delivery'], 'Entered Date':['2010-01-03','2000-05-20','2007-07-07','2019-03-13',..