[BookReview]-데이터분석을 위한 판다스 기초 요약


개요

본 리뷰는 이지스퍼블리싱 출판사의 "Do it! 데이터분석을 위한 판다스 입문"을 읽고 얻은 지식에서 대용량데이터 처리에 유용한 메서드들을 정리한 글입니다.


데이터프레임 생성

 데이터프레임을 생성할 때는 주어지는 데이터가 대용량일 때, 내가 짠 코드가 제대로 안돌아가는지 활용할 때 쓰인다.

(데이터가 만개x만개 인경우 넘 느려지니까! 내가 한 5x5 데이터프레임으로 만들어서 테스트용으로 어디서 코드에러가 있는지 확인할 때 용이하다. )

먼저, 데이터프레임은 다양한 자료형으로 만들기가 가능함. ex. ndarray, dictionary, dataframe, series,list 등등

1 . 먼저 넘파이의 ndarray로 데이터 프레임 만들어보자.

np의 array는 리스트로 쉽게 만들 수 있다. 행렬의 1행 2열의 요소를 표현 할 때 ​​A[0][1]와 같이 표현하는 걸 배웠을 것이다.

마찬가지로, 큰 리스트K의 첫 번째 요소를 K[0]라고하고, 그 요소가 리스트일 때 요소리스트 안의 3번 째 요소를 K[0][2]라고 한다.

my_2darray = np.array([[1, 2, 3], [4, 5, 6]]) # 2*3 행렬
display(pd.DataFrame(my_2darray))

2 . 딕셔너리 자료형으로 데이터프레임을 만들어보자.

import pandas as pd
#딕셔너리 자료형으로 데이터프레임 생성하는 경우
dict={'A':[0,1,2,3].'B':[8,9,10,11],'C':[12,13,14,15]}
df=pd.DataFrame(dict,index=['Q1','Q2','Q3','Q4'])

데이터프레임 살펴보기

print(df.head()) #데이터프레임 가장 윗줄 5개 불러서 보여줌
print(df.tail())#데이터프레임 가장 아랫줄 5개를 불러서 보여줌.
print(df.shape) #데이터프레임의 행과 열을 알려줌
print(df.columns) #데이터프레임의 열이름들을 보여줌
print(df.dtypes) #데이터프레임의 각 열의 구성하는 값들의 자료형을 보여줌.

 오 df.dtypes는 첨알았따.

에러터졌을 때, df.dtypes로 혹시 자료형이 다른 컬럼이 들어갔는지 확인할 때 좋을 듯


데이터 추출하기 - 열추출

1 .데이터프레임 df에서 ‘country’라는 하나의 열을 뽑아 새로운 데이터프레임으로 만들기

country_df=df['country'] 대괄호 안에 컬럼명을 넣어줌.

2 . 데이터프레임 df에서 여러개의 열을 뽑아 새로우 데이터프레임 만들기

음. 컬럼명이 들어있는 리스트를 대괄호 안에 넣어줌. (리스트는 대괄호로 표현)

subset=df[['country','continent','year']]

 갑자기 든 궁금증..

Q. 만약 df에 내가 column 이름을 모를 때는?? 오케하지??

보통 column들이 종목명이고 2만개, 3만개 씩 될 텐디 아래 코드로 시험해보니, 한 열씩 추출 된다. len(df.colums) => 데이터프레임 열 갯수 카운팅

for i in range(len(df.columns)):
print(df.iloc[:,i])

데이터 추출하기 - 행추출

판다스 문법에서 loc은 인덱스를 기준으로 행 데이터를 추출하고, iloc을 행 번호를 기준으로 행데이터를 추출한다. 나는 주로 iloc을 쓰는데, loc으로도 익숙해질 필요가 있다.

loc이 기준으로 삼는 인덱스는 변할 스 있다. 각 데이터에 부여된 고정값이 인덱스라고 생각하면, 데이터를 삭제하거나 이동시, 인덱스도 같이 삭제되고 이동된다고 생각하면 된다.

반면, iloc은 그냥 C에서 쓰는 array의 인덱스(삭제나 이동시 위치에 따라 번호가 자동부여됨)라고 생각하면 편하다.

1 . loc으로 행데이터 추출

df=df.reset_index()#아까 index를 문자열로 정해주었으니, 그걸 먼저 해제해주자
#주의할 점! 나 계속 바꿔준 df를 할당을 안해줌.
print(df.loc[0]) #인덱스가 0인 행 한줄이 출력됨. 세로로 출력되니 당황 ㄴㄴ
  1. loc으로 마지막행 데이터 추출

 아까 데이터 살펴보기에서 df.shape이라는 속성을 배웠다. 얘는 행,열값 두개를 출력하는데, 첫 번째가 행 갯수, 두번째가 열 갯수임. 따라서, df.shape[0]이 행갯수. 인덱스는 0부터 시작이니, 마지막 인덱스는 전체 행 갯수 -1. 이 값을 인덱스 문법에 넣어줌.

df.shape[0] # 4행.행 갯수 출력해줌
last_row_index= df.shape[0] - 1
df.loc[last_row_index] 위 코드를 실행하면,

index Q4
A     3
B     11
C     15
Name:3, dtype:object 이런 결과값을 얻을 수 있다. Name에 인덱스값 3이 들어있는 걸 보니 핸 기준 출력시에는 인덱스를 Name으로 보여주고, 열 기준 출력시에는 column Name(ex, A,B,C)으로 보여주는 것 같다. (위에 열추출 코드를 실행하고 한번 비교해보시길!)

마지막행 데이터를 더 쉽게 추출하는 방법으로 tail을 이용하는 방법이 있다. tail은 마지막 5개의 행을 보여주는데, n=1이라는 인자를 넣으면 맨 밑의 행을 보여준다.

df.tail(n=1)

iloc의 경우는 인덱스가 아니라 자동부여된 순서값들을 사용한다.

df.iloc[-1]

3 . loc으로 원하는 인덱스 행들만 추출하기

 원하는 인덱스 값들을 담은 리.스.트를 데이터프레임 인덱스로 넣어줌.

주의!! 나는 리스트를 넣어주질 않고 그냥 정수 값을 넣는 실수를 계속 함

df.loc[0,3] #이 줄은 에러 터짐. 주의!! 리스트를 인자로 넣어줘야됌.
df.loc[[0,3]] # iloc도 마찬가지.

loc,iloc 속성 자유자재 사용하기

1 . 슬라이싱 구문

df.loc[:,['year','pop']] # loc속성은 열지정값에 정수 리스트를 넣으면 에러남.
df.iloc[:,[2,4,-1]] #반대로 iloc속성은 열 지정값에 문자열 리스트를 넣으면 에러남.
df.iloc[:,:3] #전체 행, 0,1,2열 출력하라는 구문. :3 은 range(3)이랑 똑같
df,iloc[:,1:3] # 전체 행, 1열, 2열 출력하라는 구문.

2 . range 구문  range구문을 응용해보자.

range에(0,6,2) 3개의 인자를 전달하면 0부터 5까지의 숫자중 2씩 건너뛴 값들만 반환해준다. 이 리스트를 df의 열지정값에 넣어주면, 0열,2열,4열만 반환해준다. 행지정값에 넣으면 마찬가지로 작동한다.

jump2=list(range(0,6,2)) # 0,2,4
df.iloc[:,jump2]
df.iloc[:,0:6:2] # range(0,6,2)랑 0:6:2랑 똑같

이렇게 내가 대용량데이터(주식 시계열 데이터)를 다루면서 이 책에서 유용했던 기초 꿀팁들을 요약해보았다.

데이터를 잘 슬라이싱하고 추출하는 것이 기본이라면, 이제 이 데이터를 사람이 보기 쉽게 시각화하는게 그 다음이다. 판다스 시각화 메서드에 대해서도 기초꿀팁을 요약해보겠다!








© 2020.08. by leega403

Powered by leega403