Pandas를 수업에서 써보긴 했는데, 너~무 많은 기능을 한번에 배웠다.
모두 다 정확하게 외울 필요는 없겠지만 이런 것들이 있다 정도는 익혀야 될 것 같다.
여러번씩 읽어보고, 타이핑도 해보면 금방 익힐 수 있을 것 같다.
conda create -n venv python=3.8 # 가상환경생성
activate venv # 가상환경실행
conda install pandas # pandas 설치
import pandas as pd # 라이브러리 호출
#csv 타입 데이터 로드, separate는 빈공간으로 지정하고, Column은 없음
df_data = pd.read_csv("data_url", sep='\s+', header=None)
df_data.head(n) # 처음 m 줄 출력 (default : 5)
df_data.columns = ["ID", "NAME", "AGE"] # 데이터 Column 입력
list_data = [1, 2, 3, 4, 5]
list_name = ['a', 'b', 'c', 'd', 'e']
example_obj = Series(data=list_data, index=list_name)
# index 값(모든 자료형 가능)을 갖는 data를 ndarray에 저장한다.
# dict type을 data에 넣어도 된다. 각 .index, .values로 접근
>>> dict_data = {'a':1, 'b':2, 'c':3}
>>> indexes = ['a', 'b', 'c', 'd', 'e']
>>> series_obj = Series(dict_data, index=indexes)
>>> series_obj
a 1.0
b 2.0
c 3.0
d NaN
e NaN
dtype: float64
df = DataFrame(raw_data, columns =['age', 'city']) # column 선택
# 없는 column을 선택할 시, 새로운 column을 추가하며, data는 NaN으로 채운다.
df.age # == df['age'] / series를 추출한다.
df.loc[1] # index location, 인덱스의 이름
df['age'].iloc[1:] # index position, 인덱스의 번호
df.debt = df.age > 40 # 새로운 데이터를 boolean으로 할당 (다른 자료형도 가능)
df.T # transpose
df.to_csv() # csv로 변환
del df['debt'] # 메모리 주소 삭제
df.drop('debt', axis=1) # drop이 된 dataframe만 반환 (df는 안 바뀜)
df.drop(1, inplace=True) # index를 삭제시킨다.
df.reset_index()를 해주면 기존의 0부터 인덱싱이 가능하다.
df.reset_index(drop=True)는 기존의 index를 없앤다.
df.reset_index(inplaece=True)는 df 자체를 변화시킬 수 있다.
>>> s1 = Series(np.arange(10))
>>> s1.map(lambda x: x**2).head(5) # map, lambda
0 0
1 1
2 4
3 9
4 16
dtype: int64
>>> z = {1:'A', 2:'B', 3:'C'}
>>> s1.map(z).head(5)
0 NaN # dict type으로 데이터가 교체된다.
1 A # 없는 값은 NaN 상태로 만든다.
2 B
3 C
4 NaN
dtype: obejct
>>> s2 = Series(np.arange(10, 20))
>>> s1.map(s2).head(5)
0 10 # 같은 위치의 데이터를 s2로 전환한다.
1 11
2 12
3 13
4 14
dtype: int64
>>> df.sex.unique()
array(['male', 'female'], dtype=object)
>>> df['sex_code'] = df.sex.map({'male':0, 'female':1}) # 이런식으로도 사용 가능하다.
>>> df.sex.replace({"male":0, "female":1}) # 데이터를 변환시켜준다.
>>> df.sex.replace(['male', 'female'], [0, 1]) # 상단 문법과 같다.
f = lambda x : x.max() - x.min()
df_info.apply(f)
# 각 column 별로 결과값을 반환한다.
def f(x):
return Series([x.min(), x.max()], index=['min', 'max'])
df.apply(f)
df.corr() # 모든 column간 값의 상관계수
df.col.corr(df.col2) # column 2개의 상관계수
df.col.cov(df.col2) # column 2개의 공분산
df.corrwith(df.col) # 전체 column과 특정 column의 상관계수
어렵단 말 밖에 할 수가 없다.
갑자기 너무 어렵고 전문적인 이론들이 쏟아져 나왔다.
대충 느낌만 이해하고 핵심적인 것들을 하나도 이해하지 못했다.
def softmax(vec):
denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True)) # max는 오버플로우 방지
numerator = np.sum(denumerator, axis=-1, keepdims=True)
val = denumerator / numerator
return val
def one_hot(val, dim):
return [np.eye(dim)[_] for _ in val]
def one_hot_encodig(vec):
vec_dim = vec.shape[1]
vec_argmax = np.argmax(vec, axis=-1)
return one_hot(vec_argmax, vec_dim)
5/5 Solve
Q) ReLU(x) = max(0,x) 일 때, ReLU(-3.14) 의 값을 구하시오 (정수값으로 입력).
A) max(0, -3.14) = 0
Q) tanh`(x) = d tanh(x) / dx 일 때, tanh`(0)의 값을 구하시오 (정수값으로 입력)
A) tanh`(x) = (1 + tanh(x))(1 - tanh(x)). tanh(0) = 0. -> 1
Q) 다음 보기 중 역전파 (backpropagation) 알고리즘의 기반이 되는 것을 고르시오.
✔️연쇄 법칙 (chain rule)
대수의 법칙 (law of large numbers)
파레토 법칙 (Pareto principle)
Q) 다음 보기 중 신경망에서 활성함수가 필요한 가장 적절한 이유를 고르시오.
✔️비선형 근사를 하기 위해서.
계산복잡도를 줄이기 위해서.
수치 오차를 줄이기 위해서.
Q) z와 k가 다음과 같이 주어질 때, ∂z / ∂x의 값으로 올바른 것을 고르시오.
z = (k + 3)³
k = (x + y)²
✔️1. 6((x + y)² + 3)²(x + y)
2. 3((x + y)² + 3)²(x + y)
3. 6((x + y)²)²(x + y)
∂z / ∂x = (∂z / ∂k) * (∂k / ∂x) 이다.
(∂z / ∂k) = 3(k + 2)² = 3((x + y)² + 2)
(∂k / ∂x) = 2(x + y)
-> ∂z / ∂x = 6((x + y)² + 2)(x + y)