[KT AIVLE 3기] Python - Numpy & Pandas
분석할 수 있는 데이터
분석할 수 있는 데이터는 두 가지로 나뉜다 -> 수치형 / 범주형
범주형 데이터
질적 데이터(정성적 데이터) -> 수학 연산이 가능하지 않은 범주로 나뉘어지는 데이터
명목형 데이터와 순서형 데이터로 나눌 수 있다.
- 명목형 데이터: 성별 등 (남성과 여성을 수학적으로 연산할 수 없다.)
- 순서형 데이터: 연령대 등 (10대와 20대를 더한다고 해서 30대가 되진 않는다.)
수치형 데이터
양적 데이터(정량적 데이터) -> 수학 연산이 가능한 데이터
이산형 데이터와 연속형 데이터로 나눌 수 있다.
- 이산형 데이터: 연속적이지 않은 데이터, 책의 페이지 수 등
- 연속형 데이터: 연속적인 데이터, 키, 온도 등
주의해야 할 점
범주와 수치로 나누긴 했지만, 질적 데이터가 모두 비 수치형 데이터는 아니다. ex) 우편번호는 수치형 데이터지만 수학 연산이 불가
Numpy (넘파이)
데이터 분석 시 사용하는 라이브러리
import numpy as np # numpy를 불러오고, 이하 코드에서는 numpy 대신 np로 사용하겠다
배열(Array)
Axis, Rank, Shape
Axis: 배열의 각 축(axis 0, axis 1 ...)
Rank: 축의 개수(차원) -> 2개면 2차원, 3개면 3차원 ...
Shape: 축의 길이 -> 2x3 배열의 경우 Shape는 (2, 3)
넘파이로 배열을 만들어보자.
# 1차원 배열
a = np.array([1, 2, 3])
print(a) # [1, 2, 3]
print(type(a)) # <class 'numpy.ndarray'> //type은 a의 데이터 타입을 반환함
print(a.ndim) # 1 // ndim은 차원을 반환하는 메소드
print(a.shape) # (3, ) // shape는 모양을 반환하는 메소드
print(a.dtype) # int32 // dtype은 a의 데이터의 타입(형식)을 반환하는 메소드
print(a[1]) # 2 // 리스트처럼 사용 가능
# 2차원 배열
b = np.array([[1, 2.5, 3],
[4, 5, 6.2]])
print(b.shape) # (2, 3)
print(b.dtype) # float64 //소수가 원소기 때문에 int가 아니라 float이 됨
- 자료형 변환
리스트, 튜플은 직접 배열로 변환이 가능하지만
문자열, 딕셔너리, 집합은 다른 자료형으로 변환한 후 배열로 변환이 가능하다.
- 3차원 배열
a = np.array([[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]]])
print(a.shape) # (2, 3, 3) -> 3x3 2차원 배열이 2개!
# Axis 0 (0번째 축의 의미) -> 분석 단위
- Reshape
기존 배열을 새로운 형태로 다시 구성 = reshape
배열 요소가 사라지지 않는 형태면 자유롭게 변환할 수 있다. (ex. 3 x 8 -> 4 x 6 -> 6 x 4 -> 1 x 24 ...)
# -1의 의미
3 x 8 배열에서 reshape(4, -1) -> 4행으로 된 배열로 변환하되, 열은 너가 알아서 계산해 라는 의미
- 배열 생성용 여러 함수들
np.zeros() # 0으로 채워진 배열
np.ones() # 1로 채워진 배열
np.full() # 특정 값으로 채워진 배열
np.eye() # 단위행렬 배열 생성
np.random.random() # 임의의 값으로 채운 배열 생성
# 사용 예시
np.zeros((2, 3)) # 2 x 3의 0으로 채워진 배열
np.full((3, 3), 2) # 3 x 3 의 2로 채워진 배열
np.eye(4) # 4 x 4의 단위행렬
np.random.random((2, 2)) # 2 x 2의 임의의 값으로 채워진 배열
- 배열 인덱싱 & 슬라이싱
리스트와 유사하다.
arr1[0][1] # 2
arr1[0, 1] # 2
arr1[행 인덱스] # 특정 행 전체
arr1[:, 열 인덱스] # 특정 열 전체
arr1[행 인덱스 리스트, 열 인덱스]
arr1[행 인덱스 리스트, 열 인덱스 리스트]
# .. 등등 다양하게 사용 가능
# 조건문으로도 배열을 인덱싱 할 수 있다. (ex. height >= 150)
- 배열 사칙연산
np.add
np.substract
np.multiply
np.divide
np.power # 제곱
np.sqrt # 제곱근
# 행렬 곱 연산은 행렬 배웠던 것이랑 똑같이 수행됨
- 전치행렬(Transpose)
[1 2
3 4]
의 2 x 2 행렬이 있으면, 1, 4 를 축으로 하고 2와 3을 교체한다. 즉,
[1 3
2 4]
가 된다.
간단히 .T를 통해 얻을 수 있다.
Transpose는 나중 되면 정말 자주 나오거나 사용해야 하기 때문에 꼭 기억해두자!
- 배열 내 집계 함수
np.sum() # 합
np.mean() # 평균
np.std() # 표준편차
# 예시
np.sum(a)
np.sum(a, axis = 0) # axis = 0 방향에 대한 합
- 조건에 따라 다른 값을 지정하는 where
np.where(조건문, 참일 때 값, 거짓일 때 값)
a = np.array([1,3,2,4])
np.where(a>2, 1, 0) # a>2 참일 때 1 거짓일 때 0 을 출력하는 배열
>>> 0 1 0 1
- 가장 큰 or 작은 값의 인덱스를 반환해주는 argmax / argmin
np.argmax(array(필수), axis = ? (선택))
판다스 (Pandas)
데이터 분석 시 사용하는 라이브러리 - 데이터프레임을 다룰 때 쓰는
데이터프레임 (Dataframe)
데이터 분석에서 사용하는 데이터 구조를 의미
관계형 데이터베이스의 테이블 / 엑셀 시트 같은 형태 => 2차원 구조
행: 분석 단위 / 열: 정보(변수)
- 시리즈 (Series)
하나의 정보(열)에 대한 데이터 집합
- csv 파일에서 데이터 읽어오기
import pandas as pd
path = '경로'
data = pd.read_csv(path)
- 데이터프레임 정보 확인
head, tail, shape, columns, dtypes, info, describe
head(num): 상위 num개 만틈의 앞쪽 데이터 확인, default = 5
tail(num): 뒤쪽 데이터 확인, default = 5
shape: 데이터프레임 모양 확인 -> (row, col)
columns: 열 이름 확인
dtypes: 열 자료형 확인
info(): 인덱스, 열, 값 개수, 데이터 형식 정보 등 확인
describe(): 기초 통계 정보 확인
- 데이터 정렬
sort_index(ascending = True): 인덱스를 기준으로 정렬, ascending = 오름차순(default)
sort_values(by= '열이름', ascending = True):
특정 열을 기준으로 정렬
- 고유 값 확인
unique():
고유 값 확인
value_counts(dropna = True(선택)):
고유 값과 그 개수 확인, dropna = True거나 생략할 시 NaN(결측치) 제외
- 데이터프레임 조회
1) 시리즈로 조회 (1차원)
df['열이름'] or df.열이름
2) 데이터프레임으로 조회 (2차원)
df[['열이름']] -----> 열 이름을 리스트로 입력하여 넣어준 것
3) 조건으로 조회: .loc[행 조건, 열 이름]
행 조건: 조건문 형태 ---> 조건문에 해당하는 데이터만 조회열 이름: 생략 가능, 1개 시 시리즈 2개 이상 시 데이터프레임 출력
# 여러 조건을 만족하는 행 조회
df.loc[(df['열이름1'] > 150) & (df['열이름2'] == 24)] # 열이름1 150 이상이랑 열이름2가 24인 행만 조회됨
# 모든 행 가져오기도 가능
df.loc[:, ['열이름', ...]]
# 관련 메소드
isin([값1, 값2, ...]):
값1 or 값2 or ... 인 데이터만 조회
between(값1, 값2):
값1~값2 범위의 데이터만 조회
- 집계 함수
sum(), mean(), max(), min(), count() -> 뭘 의미하는지는 알겠지?
# groupby()
df.groupby('집계기준변수', as_index=? )['집계대상변수'].집계함수
집계기준변수: 범주형 변수 (ex. 월 별, 지역 별 등)
집계대상변수: 집계함수로 집계할 변수 또는 리스트 (ex. 매출액)
as_index = ? -> True: 집계기준변수를 인덱스로 사용 / False: 열로 사용
i) agg()
groupby(~).agg(['집계함수', '열이름':'집계함수', ...]) -> 여러 집계를 한 번에 수행 가능
집계를 많이 사용해보면서 익숙해지자!
'AIVLE' 카테고리의 다른 글
[KT AIVLE 3기] 단변량분석 (0) | 2023.02.09 |
---|---|
[KT AIVLE 3기] 데이터 시각화 (0) | 2023.02.09 |
[KT AIVLE 3기] 시계열 데이터 처리 (0) | 2023.02.09 |
[KT AIVLE 3기] 데이터 처리 - day 1 (0) | 2023.02.08 |
[KT AIVLE 3기] Github vscode와 연동하기 (0) | 2023.02.02 |