함수, 넘파이, 판다스
함수
함수를 정의하고 호출할 수 있다.
함수 정의할 때 명령어 -> def
예시)
def plus(v1, v2) :
result = 0
result = v1 + v2
return result
넘파이(Numeric Python)
C로 만들어진 파이썬의 고성능 과학 계산용 라이브러리
벡터나 행렬 같은 선형대수의 표현법을 코드로 처리
다차원의 연립방정식을 최적의 방법으로 풀기 위해서 개발
넘파이의 특징
반복문을 사용하지 않는다.
-연산할 때 병렬로 처리
텐서
넘파이에서 다루게 될 데이터의 형태는 array(행렬)
넘파이 배열 -> ndarray n개의 dimension(차원)을 가진 array
텐서(tensor) : 선형대수의 데이터 배열
0차원 -> 스칼라(scalar)
1차원 -> 벡터(vector) -> 리스트와 같다.
2차원 -> 행렬(matrix)
3차원 -> 3차원 텐서
n차원 -> n차원 텐서
np.array 함수 사용하여 배열 생성
import numpy as np
test_array = np.array([1, 4, 5, 8], float) #리스트를 numpy의 배열로 만듦.
파이썬 리스트와 넘파이 배열의 차이점 : 넘파이의 배열은 구조가 먼저 만들어지고 숫자는 나중에 들어간다.
계산하는 방식, 틀이 정해져 있기 때문에 빨리 계산할 수 있다.
넘파이 배열 객체 다루기
배열의 구조 다루기
reshape 함수로 배열의 구조를 변경하고 랭크를 조절할 수 있다.
x.reshape(-1,)
reshape을 할 때 주의 할 점은 원래 데이터의 갯수와 reshape 이후의 데이터 갯수가 맞아야 쓸 수 있다.
인덱싱
x = np.array([[1, 2, 3], [4, 5, 6]], int)
x[0][0] #1이 된다. 앞의 0은 행 번호, 뒤의 0은 열 번호를 의미.
슬라이싱
인덱스를 사용하여 리스트 일부를 잘라내어 반환
배열 생성 함수
arange # range 함수와 같이 차례대로 값을 생성
ones, zeros # ones : 1로만 구성된 넘파이 배열을 생성, zeros : 0으로만 구성된 넘파이 배열을 생성
넘파이 배열 연산
연산 함수
sum
함수를 랭크가 2 이상인 배열에 적용할 때 축으로 연산의 방향을 설정.
test_array.sum(axis=0) -> 세로 방향으로 더하기
test_array.sum(axis=1) -> 가로 방향으로 더하기
축의 방향은 헷갈리기 때문에 직접 더해서 결과값을 보고 검증해보자.
array는 계산이 매우 빠르지만 단점은 안에 들어가 있는 데이터의 형태가 모두 같아야 한다.
모든 데이터를 숫자로만 다루어야 하며, 문자형 취급 불가.
배열 간의 곱셈을 통해 요소별 연산과 벡터의 내적 연산도 가능.
브로드캐스팅 연산(broadcasting operations) :
하나의 행렬과 스칼라 값들 간의 연산이나 행렬과 벡터 간의 연산
-> 방송국의 전파가 퍼지듯이 뒤에 있는 스칼라 값이 모든 요소에 퍼지듯이 연산
비교 연산
비교 연산의 결과는 항상 불형(boolean type)을 가진 배열로 추출
예시)
import numpy as np
x = np.array([4, 3, 2, 6, 8, 5])
x > 3
# 결과 array([True, False, False, True, True, True])
all 함수 : 배열 내부의 모든 값이 참일 때는 True, 하나라도 참이 아닐 경우네는 False를 반환
any 함수 : 배열 내부의 값 중 하나라도 참일 때는 True, 모두 거짓일 경우 False를 반환
where 함수 : 배열이 불형으로 이루어졌을 때 참인 값들의 인덱스를 반환
true/False 대신 참/거짓인 경우의 값을 지정할 수 있음
예) np.where(x>5 , 10, 20) # x>5 라는 조건에 대해서 참일 경우 10, 거짓일 경우 20을 반환.
인덱스를 활용한 데이터 추출
불린 인덱스(boolean index) : 배열에 있는 값들을 반환할 특정 조건을 불린형의 배열에 넣어서 추출
판다스(Panel + Data)
데이터를 잘라오고 합산하고 집게하는 것을 판다스에서 할 수 있다.
판다스(pandas) : 파이썬의 데이터 분석 라이브러리
열 중심으로 데이터를 다룬다. 기본적으로 넘파이를 사용한다. 넘파이는 파이썬에서 배열을 다루는 최적의 라이브러리
데이터프레임(DataFrame) : 데이터 테이블 전체 객체
시리즈(Series) : 각 열 데이터를 다루는 객체
시리즈 객체는 객체의 이름을 변경할 수 있다.
열의 이름을 지정해주는 방식이며, 인덱스 이름도 추가로 지정이 가능하다.
예시)
example_obj.name = "number"
example_obj.index.name = "id"
데이터프레임 객체
데이터 테이블 전체를 지칭하는 객체
넘파이 배열의 특성을 그대로 가짐
데이터프레임의 생성
'read_확장자' 함수로 데이터 바로 로딩
.csv나 .xlsx 등 스프레드시트형 확장자 파일에서 데이터 로딩
예) df = pd.read_csv(data_url, sep='\s+', header = None)
.csv(comma separeated valuse) : 아스키코드로 이루어진 텍스트 파일, 텍스트 파일이기 때문에 용량이 작다.
딕셔너리 타입 데이터에서 키(key)는 열 이름, 값(value)에는 데이터를 리스트 형태로 넣어 각 열의 데이터로 만듦.
데이터 추출
열 이름을 사용한 데이터 추출
head와 tail 함수 : 처음 n개 행이나 마지막 n개 행 호출
df.head(5)
df.head(3).T
행 번호를 사용한 데이터 추출
인덱스 번호로 호출 - 기존의 리스트나 넘파이 배열(ndarray) 인덱싱과 동일
df[:3]
행과 열을 모두 사용한 데이터 추출
얼 이름과 행 번호를 함께 사용 #행은 이름으로 가져오지 않고 번호로 가져옴. 빅데이터의 경우 행은 매우 많기 때문.
df[["name", "street"]][:2]
loc 함수 : 인덱스 이름과 열 이름으로 데이터 추출
df.loc[[211829, 320563], ["name", "street"]]
lioc 함수 : 인덱스 번호로만 데이터 호출
df.iloc[:10, :3] #0~9번까지 행, 0~2번까지의 열을 가져온다.
그룹별 집계(groupby) : 데이터로부터 동일한 객체를 가진 데이터만 따로 뽑아 기술통계 데이터를 추출
예시) df.groupby("Team")["Points"].mean()
#"Team" -> 묶음의 기준의 되는 열, "Points" -> 적용받는 열, mean() -> 적용받는 연산
get_group 함수 : 해당 키 값을 기준으로 분할된 데이터 프레임 객체를 확인
예시) grouped.get_group("Riders")
# 그룹화된 상태에서 "Riders" 키 값에 해당하는 데이터만 가져와서 볼 수 있다.