본문 바로가기
공부기록/데이터사이언스

Pandas와 Numpy실습 feat 데싸노트 북

by tankwoong 2024. 3. 24.
반응형

Pandas와 Numpy의 차이 

Pandas와 Numpy는 데이터 분석에 가장 많이 쓰이는 라이브러리이다. 판다스는 사람에게 친화적이지만, 메모리가 상대적으로 무겁고, 느리며, 데이터 프레임과 시리즈를 자료구조로 사용한다. 반면 넘파이는 기계에게 친화적이고, 메모리가 상대적으로 적게 들며, 배열을 자료구조로 이용하고 빠른 수치계산에 쓰인다. 판다스에서는 인덱스와 칼럼명이 있지만 배열에는 인덱스와 칼럼명이 없다.

판다스는 하나 이상의 자료형을 원소로 가질 수 없고, 넘파이는 같은 자료형만 원소로 가질 수 있다. 

판다스는 SQL같은 테이블 형식의 작업을 하며, 2차원 이하의 배열의 데이터에 사용되지만, 넘파이는 행렬 및 벡터 연산 기반에 사용되며 3차원 이상의 배열도 가능하다. 

판다스는 SQL, 엑셀파일, CSV파일을 데이터 베이스에서 읽어드리거나, 데이터베이스에 올릴 수 있는 반면, Numpy는 npy, npz와 같은 확장자 혹은 텍스트 파일로 입출력을 한다.

Pandas 실습 

데이터 프레임 직접 만들기

import pandas as pd
sample_dic={'name':['John','Ann','Kevin'],'age':[23,22,21]}
pd.DataFrame(sample_dic)

직접 데이터 프레임을 만들어 줄 수 있다.

리스트 형태도 데이터 프레임으로 만들 수 있고, columns와 index도 지정해 줄 수 있다. 

인덱싱 하기 

다른 csv를 불러오겠다.

sample_df.loc[['a','b','c']]

loc은 행의 이름을 기준으로 정렬이 된다.

sample_df.loc['a':'c']

따라서 인덱싱을 여러 개를 출력할 때는 이름을 기준으로 설정을 해주어야 한다.

반면 iloc은 행의 순서를 기준으로 인덱싱 한다.

sample_df.iloc[0:2]

그리고 iloc은 인덱싱의 끝열은 포함하지 않는다.

칼럼은 drop을 통해 제거할 수 있고, axis=1을 설정해 주면 열을 기준으로 삭제된다. 아무것도 적어주지 않거나 axis=0으로 설정하면 행을 기준으로 제거된다.

reset_index를 통해서 index를 초기화해줄 수 있는데 drop=True를 해주면 초기화된 인덱스 열을 삭제하고 보여준다.

set_index를 통해서 특정열을 지정하면 그 열을 기준으로 정렬되는 것도 확인할 수 있다.

Pandas의 계산

판다스에서는 합, 평균, 표준편차 등을 각 열(변수)마다 계산할 수 있다. 이외에도 평균 mean(), 개수 count(), 중윗값 median(), 분산 var(), 표준편차 std()를 통해 확인할 수 있다.

동시에 여러개를 보려면 aggregate함수를 사용하면 된다.

groupby를 통해 그룹별로 계산할 수 있다. 

변수 내 고유값 출력하기

unique, nunique, value_counts를 통해 변수 내 고윳값을 확인할 수 있다.

데이터프레임 합치기 

데이터프레임을 합칠 때는 merge(), join(), concat()함수를 사용하는데 merge함수는 특정 칼럼을 기준으로, join은 인덱스를 기준으로, concat은 기본적으로 행을 기준으로 합치지만 axis=1을 사용하면 열 기준으로 합칠 수 있고, 내부. 외부 조인만 가능하다. 

left_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/left.csv'
right_url = 'https://media.githubusercontent.com/media/musthave-ML10/data_source/main/right.csv'

left=pd.read_csv(left_url)
right=pd.read_csv(right_url)
left.merge(right, how='outer')
left.merge(right, how='left')
left.merge(right, how='right')

merge함수를 통해 결합할 수 있고, how값을 통해 결합방법을 지정해 줄 수 있다.

join함수는 index를 기반으로 하기 때문에 같은 값이 있으면 join이 안된다 그럴 경우 같은 칼럼을 제거하고 join해야한다.

left.drop('key', axis=1).join(right.drop('key', axis=1))
left = left.set_index('key')
right=right.set_index('key')

같은 열이름을 인덱스로 지정해 주고, 조인하는 방법도 있다.

left.join(right, how='inner')

join도 how를 통해 지정해 줄 수 있다.

concat은 기본적으로 행을 기준으로 결합하지만, axis=1을 통해 열을 기준으로 결합할 수도 있다.

넘파이 실습

random함수 이용하기

np.random.randint(11)
np.random.randint(50,71)
np.random.randint(50,71,5)

random함수를 통해 각 숫자 미만 값을 랜덤으로 불러올 수도 있고, 범위를 지정해 줄 수도, 개수를 지정해 줄 수 도 있다.

np.random.choice(['red','green','white','black','blue'],size=3,replace=False)

random.choice함수를 통해 원하는 크기를 랜덤으로 뽑을 수 있고, replace설정을 통해 중복값을 방지할 수 있다.

기타 함수

np.arange(1,11)

arange함수를 통해 1부터 10까지 출력할 수 있다.

np.arange(1,11,2)

간격도 지정해 줄 수 있다.

np.linspace(1,10,4)

linspace함수를 통해 간격도 지정해 줄 수 있다.

array([ 1.,  4.,  7., 10.])
반응형