numpy와 pandas
numpy
- C를 기반으로 작성된 라이브러리
- 과학적 계산을 위한 핵심 라이브러리
- 다차원 배열 객체와 이들의 계산을 위한 다양한 도구 제공
- 배열(ndarray) : 다차원 배열 객체
- np에서의 각 위치의 자료는 모두 같은 자료형이어야 한다.
- np.array(컬렉션)을 통해 생성할 수 있다.
- .dtype을 통해 각 데이터의 자료형을 알 수 있다.
- (dtpye = 자료형)으로 자료형을 지정할 수 있다.
배열과 리스트 차이
- 모든 원소가 같은 자료형이다.
- 원소의 개수를 바꿀 수 없다.
- 파이썬은 자체적으로 배열 자료형을 제공하지 않기 때문에 numpy를 통해서만 사용할 수 있다.
- C로 구현되었기 때문에 파이썬 반복문에 비해 월등히 속도가 빠르다.
- 간단한 코드로도 복잡한 선형 대수 연산을 수행할 수 있다.
- numpy배열은 다차원으로 구성될 수 있고 .shape를 통해 몇 차원인지, 각 차원은 몇 개의 원소로 구성되어 있는지 알 수 있다.
특수 행렬 생성
- np.zeros() : 각각 0으로 채워진 배열 생성
- np.ones() : 각각 1로 채워진 배열 생성
- np.eye() 또는 np.diag() : 대각행렬을 생성
- np.empty() : 크기만 지정해두고 요소는 초기화되지 않은 배열 생성. 각각의 요소는 가비지 값이 채워져 있음
인덱싱과 슬라이싱
- 슬라이싱을 할 경우 복제가 되지 않음. 이는 그 배열의 주소값만을 가져오기 떄문.
- copy()를 통해 복사해야함
유용한 함수와 메소드
- flatten() : 다차원 배열을 1차원으로 펼친다.
- transpose() : 행과 열을 변환
- np.reshape() : 다차원 배열의 shape을 바꾼다.
- np.random.random() : 난수를 발생시킨다.
- hstack : 수평으로 배열을 붙혀 만든다.
- vstack : 수직으로 배열을 붙혀 만든다
a = np.array([1,2,3,4,5])
b = a[[1,3,5]]
a[[0,2],[1,3]]
a[(a == 1) or (a == 2)]
import numpy as np
b = np.array([1,2,3,4])
c = np.array([[1,2],
[3,4]])
print(np.prod(b))
print(np.prod(c, axis=0))
print(np.prod(c, axis=1))
print(np.sum(b))
print(np.sum(b, keepdims=True))
print(np.sum(c, axis=0))
print(np.sum(c, axis=1))
import numpy as np
arr = np.array([[10, 20, 30, 40], [50, 60, 70, 80]])
print(arr, arr.shape, arr.dtype, len(arr), len(arr[0]))
import numpy as np
a1 = np.ones((2,3))
print(a1)
a2 = np.zeros((2, 2))
print(a2)
print(np.hstack([a1, a2]))
a3 = np.zeros((3,3))
print(a3)
a4 = np.vstack([a1, a3])
print(a4)
print(a1)
pandas
- numpy 기반으로 개발된 데이터 분석도구
- pandas.Series는 1차원 데이터를 다루는데 효과적
- pandas.DataFrame은 2차우너 데이터를 다루는데 유용
- .values 속성을 이용해 데이터만 numpy array형식으로 접근 가능하다.
- Column의 이름은 .columns를 통해 얻을 수 있고
- Row의 이름은 .index를 통해 얻을 수 있다.
- Column의 이름은 .columns를 통해 얻을 수 있고
- Row의 이름은 .index를 통해 얻을 수 있다.
dataframe에 함수 적용
- df.apply(함수, [axis = 0]) : axis가 0일 경우 칼럼 단위로 함수 수행 axis가 1일 경우 row 단위
- df.applymap(함수) : 각각 요소별로 함수 적용
- isnull() : NaN이나 None인 경우 True, 그 외엔 False
- notnull() : isnall의 반대
- dropna() : Nan이나 None을 소유한 행을 제외
- fillna() :Nan이나 None을 특정 수로 채울 수 있음
- groupby("칼럼이름").agg(함수) : 컴럼이름이 같은 것들끼리 함수를 적용
from pandas import DataFrame, Series
import numpy as np
data = {"2015": [990432,3448737,2890451,2466052],
"2010": [9631482, 3393191, 2632035, 2431774],
"2005": [9762546, 3512547, 2517680, 2456016],
"2000": [9853972, 3655437, 2466338, 2473990],
"지역": ["수도권","경상권","수도권","경상권"],
"2010-2015증가율":[0.0283,0.0163,0.0982,0.0141]
}
index = ["서울","부산","인천","대구"]
df = DataFrame(data, index=index,columns=column)
print(df)
print(df.index)
import pandas as pd
f1 = lambda x:x.sum()
items = {'apple':{'count':10,'price':1500},
'banana': {'count':5, 'price': 15000},
'melon': { 'count':7,'price': 1000},
'kiwi': {'count':20,'price': 500},
'mango': {'count':30,'price': 1500},
'orange': { 'count':4,'price': 700}}
data1 = pd.DataFrame(items).T
print(data1)
print(data1.apply(f1))
print(data1.apply(f1, axis=1))