판다스만으로 그래프를 그리는 방법입니다. 보통 matplotlib나 pylab을 import 해서 그래프를 그리곤 했는데 pandas만으로도 그릴 수 있습니다. 왠만한건 다 되는 것 같습니다. 기본 그래프 그리기 데이터가 시리즈나 데이터프레임 모양이면 plot() 메쏘드를 이용해 그래프를 생성할 수 있습니다. 시리즈(Series) np.random.seed(222) random_num = pd.Series(np.random.randn(1096),index=pd.date_range('2020-01-01','2022-12-31')) random_walk = random_num.cumsum() random_walk.plot() 데이터프레임(DataFrame) 위에 비슷하게 하되 컬럼을 하나 더 추가해 데이터프..
판다스에는 구간 나누는 기능이 있습니다. 그래서 카테고리를 만들 때 굉장히 편합니다. 물론 파이썬 자체에서도 가능하지만 제 생각에는 판다스로 하는게 편리하고 한눈에 볼 수 있어서 좋은 것 같습니다. 구간의 길이를 같게 할 것인지 구간안의 갯수를 같게 할 것인지 정하는 방법에 따라 구간을 나눌 수 있는데 판다스에서는 이 두개를 모두 할 수 있습니다. 구간 (-1,1) 사이의 숫자를 가지고 구간 나누기를 해보겠습니다. import pandas as pd import numpy as np np.random.seed(122) normal = np.random.normal(size=10000) normal 같은 길이로 구간 나누기(pd.cut) pd.cut을 이용하면 같은 길이로 구간을 나눌 수 있습니다. 값이 ..
apply를 이용하면 그룹화한 데이터프레임에 lambda함수를 쓸 수 있었습니다. 그런데 람다함수로 부등식을 적용하게 되면 bool값으로 처리가 될 것이지만 True,False를 알려고 전처리를 하진 않습니다. 실제로 True,False를 반영하여 값이 걸러져 나와주어야 합니다. 그룹화된 데이터프레임을 True, False로 분류하였는데 이를 반영하려면 어떻게 해야할까요? 바로 filter() 를 쓰면 됩니다. 데이터프레임의 group화를 한 상태에서 그룹화된 데이터프레임마다 True와 False로 구분할 수 있는데 이를 데이터프레임에 반영해줍니다. 'Learning Pandas'의 예제를 가져오겠습니다. import pandas as pd import numpy as np df = pd.DataFram..
데이터프레임의 apply로 람다함수를 적용할 수 있다는 것을 이전 포스팅에서 다루어보았는데 transform 메쏘드로 groupby 처리를 한 그룹화된 데이터프레임에 apply 처리를 하겠습니다. 그룹화되지 않은 데이터프레임에서는 apply를 적용을 했지만 그룹화된 데이터프레임에서는 apply와는 다른 것들을 할 수 있습니다. 즉, apply 대체로써 쓰는 것이 아니라 transform 만의 영역이 있습니다. 그 이유는 람다함수의 대상으로 쓰는 x의 단위로 볼 수 있는데 apply의 x는 행이나 열을 가르키고 transform에서의 x는 그룹화된 데이터프레임을 가르킵니다. 행이나 열에서 할 수 있는게 있고 데이터프레임을 대상으로 할 수 있는 게 다르기 때문에transform 만으로 할 수 있는 기능들을 ..
파이썬에서는 판다스로 주로 데이터 전처리를 합니다. 판다스에서 데이터 전처리의 중요한 요소인 재구조화(reshaping) 방법에는 pivot과 stack, unstack이 있고 melt라는 것도 있습니다. 앞선 포스팅에서 pivot,stack, unstack을 다뤘었고 이번 포스팅에서는 자주 쓰이는 재구조화 방법인 melt에 대해 알아보겠습니다. melt은 한번에 보기 편하게 특정 컬럼을 기준으로 특정 값을 정렬한다는 보면 됩니다. id에 해당하는 value_var를 선정해 variable 컬럼에 나열하여 value를 보여주는 형식입니다. 말로 설명하기가 참 어려운데 그림을 참고해주시기 바랍니다. Melt melt는 다음과 같은 파라미터를 가집니다. pd.melt(frame, id_vars=None, v..
정규표현식을 이용한 데이터프레임에서의 특수문자 제거하는 방법입니다. 데이터프레임에 있는 내용에 특수문자와 섞여서 코딩작업을 하기가 어려울 때가 있습니다. 이럴 때 특수문자만 제거를 한다면 작업을 하기 아주 편해질 것입니다. 하지만 특수문자 제거하는 메쏘드는 따로 없기에 정규표현식을 이용해 특수문자를 찾고 제거하는 방식으로 해야합니다. 다행히도 replace는 정규표현식을 인식할 수 있는 파라미터가 있어서 코딩은 그리 복잡하지는 않습니다. 특수문자 제거하기 먼저 아래와 같이 데이터프레임을 보면 특수문자가 있습니다. 데이터프레임은 유튜브 코딩을 쳐서 나오는 처음 페이지의 제목을 크롤링했습니다. df 데이터프레임에 정규표현식을 써야 하기 때문에 해당 항목을 문자열로 바꿔줘야 합니다. 그러기 위해서 데이터프레임..
pivot과 비슷하게 Series, DataFrame을 기준점에 맞게 변경하는 stack, unstack 함수 사용 방법입니다. 보통 한 묶음으로 stack, unstack을 쓰는데 그 이유는 stack은 컬럼을 인덱스로 가져오는 것이고 unstack은 인덱스를 컬럼으로 보내는 역할을 하기 때문입니다. stack,unstack이 pivot와 다른 점이 있다면 특정 순서가 있는 인덱스에 대해서도 쓸 수 있습니다. 설명이 약간 어려운데 예로 직접 하면서 stack,unstack 방법을 살펴보겠습니다. Stack stack은 컬럼을 인덱스로 보내는 역할을 하는데 stack의 뜻을 보면 쌓아올린 서류더미와 같은데 이 의미와 맞추어 보면 판다스 설계자는 인덱스 추가를 쌓아올린다라고 생각하는 것 같습니다. 판다스에..
데이터프레임에서 행 추가하는 방법입니다. 이전에 컬럼(column) 추가에 대해서 포스팅은 해놨는데 row 추가는 하지 않았더라고요 ㅎㅎ 데이터프레임에 row 추가방법 두가지에 대해 포스팅을 하겠습니다. loc로 행 추가하기 append로 행 추가하기 loc로 행 추가하기 컬럼에서 했던 방법 그대로 loc에서도 적용됩니다. 판다스는 일관성이 있어서 비슷비슷합니다. import pandas as pd sample = [('Json','34','Developer')] df = pd.DataFrame(sample,columns=['Name','Age','Job']) df 다음과 같이 만든 데이터 프레임에 행 추가를 해보겠습니다. df.loc[1]=['Harry','25','Analyst'] df 컬럼에 맞게 ..
데이터는 하나씩 쌓이는 형식으로써 저장됩니다. 보통 csv나 엑셀 파일, 데이터베이스 형태로 저장이 되는데 쌓이는 형식이다 보니 종종 내가 원하는 방식으로 규격화되지 않거나 컬럼은 다르지만 값은 중복하는 데이터가 저장되기 마련입니다. 그런데 중복데이터가 눈으로 봐도 전체 데이터의 카테고리 역할을 하는 컬럼이라면 카테고리 역할을 잘 할 수 있게 재배치를 하고 싶은 욕구가 생깁니다. 이럴 때 기준점을 새로 만들어 배치하는 방법이 있습니다. 바로 pivot()입니다. pivot을 이용해 세련되게 데이터를 바꿀 수 있습니다. pivoting 데이터프레임을 구성하려면 index, column, values 세 개의 역할이 반드시 필요합니다. pivoting은 원래 구성된 데이터의 컬럼의 역할 정하기로 볼 수 있습..
판다스 내에서 함수처리 하는 방법입니다. 파이썬으로 할 수 있지만 판다스 메쏘드로 간단한 함수를 정의할 수 있다는 게 큰 장점이고 메모리 절약도 할 수 있습니다. 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..
이번 포스팅은 판다스로 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의 데..
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]] 범위로 가져오고 싶다면 슬라이..