교차표 만들기 판다스의 메쏘드중 하나인 crosstab을 이용해 교차표를 생성합니다. 주로 범주형 변수에 쓰이는데 시각적으로 표현하기 쉽게 만드는 점에서 은근 쓰이는 곳이 많습니다. crosstab() 사용방법 사용방법은 아주 간단합니다. 교차표를 만들 두개의 범주형 변수를 가져오면 그만입니다. # 예제 데이터 프레임 생성 data = {'A': ['one', 'one', 'two', 'three'] * 3, 'B': ['A', 'B', 'C'] * 4, 'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 'D': [1, 2, 2, 2, 1, 1, 3, 3, 3,1,2,3]} df = pd.DataFrame(data) # crosstab 생성 cross_tab ..
데이터프레임 표를 웹에 나타내기 데이터프레임은 데이터를 표 형식으로 표시하고 저장하는 데 매우 유용한 판다스(Pandas) 라이브러리의 핵심 데이터 구조입니다. 이것을 그대로 HTML에 옮기고자 합니다. 즉, 데이터프레임을 HTML로 변환하면 데이터를 웹 페이지에 표시하거나 공유할 때 편리하게 사용할 수 있을겁니다. 이번 포스팅에서는 데이터프레임 표를 HTML에 변환하는 방법을 소개합니다. 판다스 데이터프레임 생성 먼저, 데이터프레임을 생성하고 데이터를 채워봅시다. 예시로 사용할 간단한 데이터프레임을 만들어보겠습니다. import pandas as pd data = {'이름': ['Alice', 'Bob', 'Charlie'], '나이': [25, 30, 35]} df = pd.DataFrame(data..
판다스로 Json 불러오기 Json(JavaScript Object Notation) 은 Javascript 객체 문법을 따르는 문자 기반의 데이터이입니다. 네트워크를 통해 전송할 때 유용한 면이 많기 때문에 다양한 곳에서 쉽게 볼 수 있는 포맷입니다. 데이터를 크롤링하거나 다른 외부에서 가져올 때 Json 객체로 변환되어서 가져오는 경우가 많은데 파이썬에서 json 모듈을 이용해 json 파일을 열 수도 있지만 보기 불편합니다. 가독성을 위해 판다스에서 Json파일을 저장, 불러올 수 있습니다. pd.read_json() 함수를 사용하여 JSON 파일이나 문자열을 데이터프레임으로 변환할 수 있습니다. 아래는 JSON 데이터를 판다스 데이터프레임으로 불러오는 예시 코드입니다: JSON 파일을 데이터프레임..
엑셀 파일 빠르게 읽어보자 빅데이터를 다루다보면 엑셀 파일 불러올 수 밖에 없는데 데이터 자체가 크다보니 불러오는 시간이 많이 소요됩니다. 이걸 여러번 불러온다면 곤욕이 따로 없겠죠? 이전 포스팅에서 xlsx에서 csv로 변환하는 방법을 다뤘었는데 csv로 변환하고 읽는 속도가 약 70배 빨라지는 것을 알 수 있었습니다. 이번 포스팅에서는 본격적으로 불러오는 속도를 극대화하는 방법에 대해 소개할까 합니다. DASK 모듈 이용하기 방법은 생각보다 간단합니다. 데이터를 불러올 때 병렬처리를 한다면 보다 빠르게 불러올 수 있게 됩니다. 그런데 이걸 코드로 만들어내면 귀찮아지니 다 만들어진 모듈을 사용해서 간편하게 불러올 수 있을 거라 생각합니다. DASK라는 모듈을 쓸 건데요. 이 모듈은 파이썬에서 분산 병렬..
xlsx -> csv의 필요성 파이썬에서 xlsx로 작업을 하면 제약사항이 많아집니다. 가장 큰 제약은 느린 불러오기입니다. xlsx를 불러오는 것부터가 곤욕입니다. 그 이후에 판다스에서의 작업은 사실 xlsx 파일과는 무관하기 때문에 상관은 없습니다. 하지만, 계속해서 xlsx를 불러와야 하는 상황이라면 얘기가 달라집니다. 훨씬 빠른 불러오기가 가능한 csv로 변환합니다. 변환을 office를 이용하면 손쉬운데 실제로 해보면 오류도 많고 드럽게 안됩니다. 또한 office는 csv를 했다해도 office에서 원하는 방향으로 만들어지기 때문에 제약이 들어갑니다. 그래서 파이썬 내에서 xlsx를 가져와 csv로 바꿔보겠습니다. xlsx 파일 csv로 변환하기 프로세스는 간단합니다. 판다스로 xlsx 불러오..
시트만 다른데 매번 다시 불러야하나? 판다스에서 엑셀시트를 불러오는 방법으로 보통 read_excel(sheet_name = '시트이름')을 쓰게 되는데 이러면 시트를 부를 때마다 excel을 부르고서 sheet_name을 다르게 해서 엑셀파일 자체를 다시 읽게 됩니다. 즉, 시간소비가 많다는 것이죠. (이런 시간낭비...) 그래서 엑셀 파일을 객체로 만드는 방법을 알아냈습니다. 판다스 내에 엑셀 파일을 객체로 불러와서 시트만 불러내는 방식을 사용할 수 있더라고요. 이 방식을 사용하면 엑셀파일은 불러와있는 상태에서 시트만 선택적으로 꺼내쓰는 방식으로 바뀝니다. 시간도 절약하고 시트관리가 좀 더 용이해집니다. 엑셀 파일 객체로 불러오기(ExcelFile) 판다스에 ExcelFile이라는 메쏘드가 있습니다...
pct_change의 업그레이드 판입니다. 특정 기간동안의 증가율을 계산하고 싶거나 수치가 필요할 때 rolling apply이 유용합니다. pct_change는 바로 위아래의 값만 퍼센트(백분율)로 나와서 내 맘대로 못하는 단점이 있는데 상황이 여러가지가 있고 백분율이 아닌 수치로 바꿀려면 다시 계산을 해야하는 번거로움이 있습니다. 그리고 위 아래의 증가율만 따지기 때문에 며칠 후의 것들의 증가율을 하려고 한다면 필터를 적용한 후 pct_change를 써야하는 번거로움이 있는데요. 이런 불편함을 확실히 없앨 수 있는 방법으로 rolling apply를 써보는 게 어떨까 싶습니다. 일단 apply는 lambda 기법으로 간단한 함수를 만드는 방법이므로 당연히 커스텀마이징이 가능합니다.다시말하면, 퍼센트나..
데이터 프레임의 데이터를 많이 다루는데 범주를 만들어야 하는 경우가 있습니다. 범주를 나누는 방법을 알려드립니다. 데이터 랜덤으로 만든 int와 float를 각각 컬럼으로 하고 데이터프레임을 예제로 하겠습니다. import pandas as pd import numpy as np import random df = pd.DataFrame({'int':random.sample(range(100),30),'float':np.random.randn(30)}) df 1. 동일길이로 나누기 데이터를 동일길이로 나눌려면 pd.cut()을 사용합니다. pd.cut()은 시리즈를 input값으로 해야합니다. 파라미터는 다음과 같습니다. pandas.cut(x, bins, right=True, labels=None, re..
시리즈(Series)를 데이터프레임(DataFrame)으로 바꾸는 방법입니다. 시리즈의 차원은 1차원이고 데이터프레임은 2차원입니다. 서로 차원이 다르기 때문에 사용방법이 약간 다릅니다. 보통 데이터프레임에 익숙하기 때문에 때로는 시리즈를 데이터프레임으로 바꾸는 게 편할 때가 있습니다. 시리즈 데이터프레임으로 바꾸기 보통 groupby를 통해 톻계값을 출력하게 되면 시리즈로 바뀝니다. 값이 하나로 되면 시리즈로 바뀌게 됩니다. 이를 데이터프레임으로 바꿀 수 있습니다. 예를 보면 다음과 같습니다. import pandas as pd df = pd.DataFrame({'A':[1,30,70],'B':[2,30,80],'C':[3,40,90]}) df = df.T display(df) 통계값을 구하면 시리즈로..
데이터프레임 중복행 제거하는 방법입니다. 이전 포스팅에서 컬럼이 같은 경우에서 중복데이터 병합하기 포스팅을 작성했었는데요. 그 내용 중에서 중복행 제거하는 방법을 언급했었습니다. 그렇지만 데이터 병합에 초점으로 쓴 글이라서 생략된 것이 꽤 있었습니다. 이번 포스팅에서는 drop_duplicates 그 자체에 초점을 맞출까 합니다. 중복행 제거하기 중복행을 제거하려면 drop_duplicates() 밖에 쓸 게 없습니다. 파라미터는 다음과 같습니다. 함수 실행 후 Return은 중복행 제거 후 데이터프레임으로 나타납니다. DataFrame.drop_duplicates(subset=None, *, keep='first', inplace=False, ignore_index=False) subset : colu..
데이터프레임 내에서 순위 구하는 방법입니다. 순위도 어찌보면 데이터 정렬을 하는 것입니다. 다만, 데이터를 순위로 변환하고 동점처리를 어떻게 할것인가에 따라 정렬이 달라집니다. 파라미터는 다음과 같습니다. df.rank(axis=0,method='average',ascending=True,..) axis : 0(defualt)는 행, 1은 열을 기준으로 함 method : 동점처리 기준, 방법은 average(defualt), min, max, first, dense 으로 5가지가 있음. ascending : True(default) 오름차순을 반영해 순위(가장 작은 값이 1위), False 내림차순을 반영해 순위(가장 큰 값이 1위) 동점 처리 순위를 하다보면 동점이 나오는 경우 어떻게 할지 정해야 합..
cheatsheet란 컨닝지라고 하는데 컨닝하는데 쓸 정도로 자주 사용하는 명령이나 기능을 쉽게 잘 정리한 인포그래픽을 말합니다. 일종의 요약본입니다. 코드는 특히나 자꾸 까먹습니다. 코드는 각각의 규칙들이 존재하고 그에 맞춰 써야하는데 양이 많기도 해서 다 외우기가 너무 어렵습니다. 그래서 cheatsheet를 만들어 한눈에 익히는데 도움을 주고자 만든 것들이 종종 있습니다. 판다스 cheatsheet 라고 코드를 한번에 요약해 놓은 인포그래픽이 나와서 공유하려고 합니다. 물론 판다스를 쓰는 기본적인 방법이나 경험들이 있어야 이해를 할 수 있을 것 같긴 합니다. 응용력을 가지고 있어야 하고 cheatsheet 말 그대로 문법을 정리만 해놓은 것입니다. 모든 문제가 해결되는 만능이 아님을 강조하고 또 강..
데이터 프레임을 리스트로 변환하는 방법입니다. 데이터 프레임도 굳이 리스트로 바꾸는 이유는 머신러닝이나 딮러닝을 할 때 리스트로 input 값을 넣어야 할 때가 있습니다. 근데 데이터 전처리는 판다스가 훨씬 효과적이기 때문에 전처리 후 리스트 형태로 바꾸어 input값으로 쓸 수 있습니다. 데이터프레임에서 column별로 가져오면 되지 않느냐?라고 반문할 수도 있지만 머신러닝이나 딮러닝 처리중 계산 때문에 불가할 수 있고 여러 클래스인경우 벡터화해서 계산하는 것이 훨씬 빠르기 때문에 ndarray로 바꾸는 게 용이합니다. 데이터프레임에서 리스트와 numpy 배열로 변환하는 방법을 알려드리겠습니다. 데이터는 머신러닝 연습용으로 많이 쓰는 꽃 분석 데이터인 iris로 하겠습니다. import pandas a..
pandas로만 box plot, area plot, scatter plot을 그려보겠습니다. 이전 포스팅에서는 막대그래프류인 bar,hist,density에 대해 그려보았었는데 이번 포스팅에서는 pandas로 그릴 수 있는 나머지 그래프에 대해 살펴보겠습니다. box plot box plot은 사분위범위를 기준으로 이상치가 어디에 있는지 한눈에 볼 수 있는 그래프입니다. import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,5)) df.boxplot(return_type='axes') 여러 컬럼이 있는 penguins이라는 데이터를 가져와 boxplot을 만들어보겠습니다. import seaborn as sns pengu..
matplotlib에서 특징이 있는 그래프를 그리곤 했었는데 pandas만으로도 여러가지 그래프를 그릴 수 있습니다. 이번 포스팅에서 다룰 그래프는 막대 그래프 종류만으로 구성해보았습니다. bar, histogram, density 세가지에 대해서 다루어 보겠습니다. bar plot 시리즈(Series) -0.5~0.5 사이의 랜덤한 숫자 10개를 bar plot으로 그려보겠습니다. plot 파라미터로 kind='bar' 를 입력합니다. np.random.seed(222) s = pd.Series(np.random.rand(10)-0.5) s.plot(kind='bar') 판다스에서 하는 것이기 때문에 시리즈나 데이터프레임만 가능합니다. numpy나 리스트는 matplotlib로 할 수 있습니다. 데이터..