판다스 내에서 함수처리 하는 방법입니다. 파이썬으로 할 수 있지만 판다스 메쏘드로 간단한 함수를 정의할 수 있다는 게 큰 장점이고 메모리 절약도 할 수 있습니다. map, apply, applymap 세가지 메쏘드를 알아볼까 합니다. map map 은 수학시간에 배운 합성함수와 같습니다. 인덱스가 잘 맞춰져 있다면 값 전환을 할 수가 있습니다. x, y를 다음과 같이 정의하겠습니다. import pandas as pd x = pd.Series({'one':1,'two':2,'three':3}) y = pd.Series({1:'triangle',2:'square',3:'circle'}) map을 이용해 x에서 y로 값 전환을 합니다. x.map(y) mapd을 반대로 하면 NaN로 나옵니다. y.map(x..
가끔 파이썬에서 SQL 데이터를 작업해야하거나 작업한 데이터를 SQL에 다시 저장해야하는 일이 생깁니다. 파이썬으로 SQL 데이터를 가져오기 위해서 sqlite3을 쓰지만 메모리형식으로 저장되기 때문에 휘발성이 강합니다. 메모리 절약을 위해 sqlite3에서 필요한 데이터만 가져오는 것도 좋지만 지속적으로 저장되어야 하는 경우도 있습니다. 이럴 때 판다스로 SQL을 불러오면 작업에 필요한 내용이 정의가 되기 때문에 작업을 용이하게 할 수 있습니다. 데이터프레임 SQL 데이터로 저장하기 데이터프레임을 SQL데이터(sqlite or db)로 저장을 해보겠습니다. 저장할 데이터는 애플과 마이크로소프트의 가격 데이터입니다. 먼저 저장할 sqlite 파일에 연결을 합니다. import sqlite3 import ..
데이터 분석을 할 때 특정한 값만 변경하고 싶을 때가 있습니다. 그런 경우 replace를 이용해 값을 변경할 수 있습니다. replace는 값에 초점을 맞췄기 때문에 한글이나 word에 있는 찾아바꾸기 기능과 동일합니다. Seires와 DataFrame 모두 적용 가능합니다. Series에서의 replace 적용 간단한 Series를 만들어 살펴보겠습니다 import pandas as pd s = pd.Series([0,1,2,3,4,5]) 1개값 변경 사실 Series에서 값을 변경하려면 해당 값을 지정해주면 끝입니다. s[0] = 3 s 간단하게 값이 변경되서 굳이 replace를 쓸 이유가 없긴 합니다만 위의 방식처럼 지정을 해버리면 확정이 되어서 이전 데이터로 돌아갈수가 없습니다. 하지만, re..
MySQL이나 오라클 제품으로 데이터 관리를 할 수 있는데 규모가 큰 데이터처리에 적합한 제품이라서 설치도 복잡하고 서버처리와 user 설정 때문에 가볍게 프로그램을 사용하기에는 무리가 있습니다. 파이썬 자동매매나 간단한 데이터 처리를 원하시는 분들은 가볍게 데이터 관리를 하고 싶기 때문에 위 제품은 적합하지 않습니다. 가볍게 sql을 쓰고 싶은 분들을 위해서 DB browser for sqlite를 소개합니다. DB browser for sqlite는 프로그램 이름대로 sqlite로 작성된 db, sqlite,db3, sqlite3 파일을 보기 위한 프로그램이고 간단한 sql 작업도 할 수 있습니다. 파이썬의 sqlite3이나 판다스로 db,sqlite 파일을 만든다면 DB browser for sql..
이번 포스팅은 판다스로 CSV 파일 저장, 불러오는 방법입니다. CSV(comma-separated values)는 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일로 이루어져 있습니다. 데이터를 간편하게 저장하기에 용이해서 데이터 전처리 작업을 하게 되면 한번쯤은 다루게 되는 파일형식입니다. CSV 저장하기 데이터프레임 작업을 마치고 CSV로 저장하는 방법입니다. 아래 코드처럼 경로에 파일이름 만들어서 저장합니다. 예를 들어, apple 이라는 파일이름을 지정하고 싶다면 '경로/apple.csv' 를 경로에 넣으시면 됩니다. 기존에 있던 파일이름이 있다면 덮어쓰기가 되니 주의하셔야 합니다. 데이터프레임의 index 설정이 안되어 있으면 숫자로 인덱스가 붙여진 것을 볼 수 있습니다. 이 상태에서 ..
인덱스를 이용한 값 찾는 방법입니다. loc와 iloc에 대한 포스팅을 했었습니다. loc와 iloc는 인덱스에 따른 모든 컬럼의 값을 가져오는데에 초점이 맞춰져 있었는데 at,iat은 정확한 위치의 값을 요청하는 메쏘드입니다. 영어에서도 at은 꼭 집는다는 의미를 담고 있어서 그 부분을 강조한 메쏘드가 아닌가 싶습니다. 아무튼 loc와 iloc가 보다 포괄적인 개념이라면 at,iat는 명확한 개념이라고 볼 수 있습니다. loc와 iloc에서도 at,iat 기능을 그대로 쓸 수 있기 때문에 더 명확한 코드작성을 위해서 at,iat을 쓰는 것이라 생각할 수 있습니다. df.at[index,column] 지정한 인덱스를 이용해 원하는 위치값을 가져올 수 있습니다. 국내 ETF의 하나인 KODEX 200의 데..
구글 애드센스에 계좌 등록을 하려면 영문 은행 이름과 은행식별코드(BIC)를 알아야 합니다. 그런데 어디서 알아야 할지 난감합니다. 영문이름을 평소에 쓰는 것도 아니고 은행식별코드도 일상적인 것이 아니라서 여러모로 알아내기가 어려운데 이걸 검색할 수 있는 곳이 있습니다. 바로 스위프트 닷컴에서 가능한데요. SWIFT는 국제 은행 간 통신 협회의 약어로 해외에 돈이 오갈때 빠르게 서로를 인증해주는 곳이어서 외화송금이 가능한 국내은행의 정보가 등록되어 있습니다. 스위프트 홈페이지에서 등록된 은행정보를 찾아보면 됩니다. 식별코드 검색방법 먼저, 스위프트 닷컴에 들어갑니다. https://www.swift.com/ Homepage | SWIFT - The global provider of secure finan..
Series에서 인덱스로 값 찾는 방법입니다. 인덱스로 값 찾는 방법에는 두가지 방법이 있습니다. loc : 지정한 인덱스로 값 찾기 iloc : 고유 인덱스로 값 찾기 인덱스 가져오기 loc 지정한 인덱스대로 값을 찾는 방법입니다. import pandas as pd s = pd.Series([2,4,6,8,10],index=[10,20,30,40,50]) 값 하나만 가져온다면 숫자나 str 로 나타납니다. s.loc[10] 값을 두개 이상 가져온다면 series로 나타납니다. 타입이 series로 나타나기 때문에 코딩작업시 값이 하나만 나오는지 두개가 나오는지 확인이 필요합니다. 1번째와 3번째 값을 가져오겠습니다. 리스트를 넣어주어야 합니다. s.loc[[10,30]] 범위로 가져오고 싶다면 슬라이..
데이터프레임을 하다가 나타나는 오류입니다. 딕셔너리로 데이터프레임을 만들 때 value 값이 스칼라 값이라서 생기는 문제입니다. 인덱스를 따로 설정해주거나 스칼라 값을 리스트에 넣으면 해결됩니다. 에러발생 다음과 같이 데이터프레임을 만들면 에러가 발생합니다. pd.DataFrame({'col1':1,'col2':2}) 해결방안1 첫번째 해결방안은 value 값을 리스트로 바꿔서 입력합니다. pd.DataFrame({'col1':[1],'col2':[2]}) 해결방안2 두번째 해결방안은 index를 설정합니다. 인덱스는 아무거나 설정하면 됩니다. pd.DataFrame({'col1':1,'col2':2},index=[0]) 인덱스를 변경해도 됩니다. pd.DataFrame({'col1':1,'col2':2..
넘파이로 만든 ndarray를 합치는 방법입니다. 이전 포스팅에서 설명했던 append와는 약간 다릅니다. append는 ndarray가 아닌 숫자나 리스트도 추가할 수 있었다면 np.concatente는 ndarray만을 합칩니다. 파라미터는 다음과 같습니다. np.concatenate(($a_1$,$a_2$,...), axis=0, out=None, dtype=None, casting = "same_kind") $a_1$,$a_2$,... : ndarray이며 반드시 같은 shape여야 합니다. axis : 축을 의미하고 0~2까지 가능하고 디폴트는 0입니다. out : ndarray이며 연결된 배열의 최종 모양을 보여줍니다. 반드시 합쳤을때의 모양과 일치해야합니다. dtype : 타입을 보여주는데 ..
numpy 에서 배열 분할하는 방법에 대해서 알아보겠습니다. 기본적으로 np.split(array, indices or section, axis=0) 으로 분할합니다. 행렬이 3차원이상이면 수직(vertical), 수평(horizontal), 깊이(depth)로 구성되어 있는데 np.split에서는 수직(행),수평(열)만 가능하기에 깊이로 분할이 불가능합니다. 그렇기 때문에 각각에 대해 다른 대체 메쏘드가 존재합니다. axis=0 일때는 np.vsplit() 으로 axis=1 일때는 np.hsplit()으로 axis=2 일때는 np.dsplit() 으로 가능합니다. 또한, np.split는 같은 크기로의 분할만 가능합니다. 예를 들어, (4,4) 행렬이라면 같은 크기로 나눌 수 있는 1,2,4에서만 가능..
빈 데이터프레임 만드는 방법입니다. 기본적으로는 필수성분인 index와 column을 추가해주면 됩니다. import pandas as pd df = pd.DataFrame(index=range(0,원하는갯수), columns = {'column1','column2',...}) index, column 없이 빈 데이터프레임 만든다면.. index와 column을 안 쓰고도 생성할 수 있습니다. empty_df = pd.DataFrame() index와 column이 없는 상태가 되면 다른 데이터프레임을 합칠때 주의를 기울여야 합니다. 간단하게 다른 데이터프레임과 합치려면 append나 concat을 이용하면 합칠 수 있습니다. join, merge는 안 됩니다. df = pd.DataFrame({'col..
VirtualBox를 이용한 리눅스(우분트) 설치방법입니다. VirtualBox는 가상머신프로그램으로 컴퓨터 환경을 가상으로 만들 수 있습니다. 멀티 OS로써 리눅스를 써도 되지만 제 생각엔 가상머신 프로그램으로 하면 관리도 편하고 여러개의 리눅스 환경을 만들 수 있어서 편한것 같습니다. VirtualBox 설치 다음 링크로 가면 설치파일을 받을 수 있습니다. https://www.virtualbox.org/wiki/Downloads Downloads – Oracle VM VirtualBox Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By download..
일차식으로 이루어진 선형회귀에 대한 내용입니다. 선형회귀는 간단한 상관관계에 대해 사용할 수 있습니다. 예를 들면, 키와 몸무게의 관계나 공부량과 성적의 관계와 같이 상관되는 특성이 단순한 경우입니다. 그래프로는 증가함수를 보여주거나 감소함수를 보여주는 경우를 의미합니다. 회귀는 과학실험을 통해 팩터를 찾고 공식을 만들어가던 것과 같이 주어진 데이터를 해석해 적당한 그래프 모양을 수학식으로써 표현해나가는 과정이라고 볼 수 있는데 그 중에서 선형 회귀는 일차식으로 이루어진 식으로 결정짓는 것을 말합니다. 이전 포스팅(회귀)는 일반화된 경우였고 기저를 정하는 것부터 시작했다면 선형회귀는 기저가 {1,x} 로만 이루어진 식으로 볼 수 있습니다. 변수(특성)의 개수가 여러개로 나타날 수 있는데 이건 스스로 판단..
데이터 작업을 하다보면 다른 행과 계산할 경우 shift를 이용해 해결할 수 있습니다. for문으로 인덱스를 일일히 돌리지 않아도 되고 필요에 따라 컬럼을 추가해서 눈으로 확인해도 되지만 다른 행과 계산하려고 일일히 컬럼을 추가하는 번거로움을 줄일 수 있습니다. shift() period에 넣은 값만큼 행이 밀립니다. 행전체를 아래로 내리고 싶다면 양의정수를 넣고 위로 올리고 싶다면 음의 정수를 넣습니다. 특정 컬럼을 넣고 싶다면 특정 컬럼만 shift를 진행합니다. 확인을 위해 새로운 컬럼을 만들어 Open 값을 아래로 내린 값을 넣겠습니다. df df['Open_shift'] = df['Open'].shift(1) Open_shift라는 컬럼에 Open 값이 하나씩 내려왔습니다. 바로 전 행과의 계산..