데이터분석
-
배열 3차원 이상 곱셈데이터분석 2019. 10. 16. 20:55
데이터 프레임워크를 사용하다보면 곱셈시 배열 차원(shape)이 매번 헷깔린다. 그래서 정리를 해보았다. 01. 2차원 곱셈 일단 기본 numpy 행렬곱으로 shape 특성을 이해해본다. 아래 예시에서 확인할 수 있듯이, 2차원의 행렬에서 shape은 (행, 열)을 의미한다. 이 상태에서는 크게 어려울 것이 없다. import numpy as np a = np.array([[1, 0], [0, 1], [1, 1]]) print(a.shape) # (3, 2) b = np.array([[4, 1], [2, 2]]) print(b.shape) # (2, 2) np.matmul(a, b) #array([[4, 1], # [2, 2], # [6, 3]]) 02. 3차원 이상 곱셈 여기서부터 매번 헷깔리기 시작한..
-
sklearn, numpy를 활용한 데이터 차원축소데이터분석 2019. 10. 15. 19:13
가용 변수가 너무 많은 경우 데이터분석 패키지들을 이용해 데이터 차원축소를 진행합니다. 데이터 차원축소는 두 가지 방법이 있습니다. 먼저 변수선택을 통해 차원을 축소할 수 있고, 또 다른 방법은 더 작은 차원으로 특성들을 이동하는 것입니다. 01. PCA (주성분분석) n차원의 데이터 공간에서 가장 분산이 큰 방향의 k차원으로 이동(mapping)합니다(단, n>k). 분산이 큰 방향은 데이터 scale에 민감하므로, PCA를 적용하기 전 표준화 작업이 선행돼야 합니다. PCA의 pseudo code는 아래와 같습니다. 원본 데이터를 표준화합니다. 표준화 또는 정규화된 데이터의 공분산 행렬을 생성합니다. 공분산 행렬에서 고유 벡터(eigenvector)와 고윳값(eigenvalue)을 계산합니다. 고윳값..
-
sklearn, pandas, numpy를 활용한 데이터 전처리데이터분석 2019. 10. 14. 20:01
sklearn, pandas, numpy를 활용하여 데이터 전처리를 진행합니다. 01. 누락값 대체 사이킷런의 SimpleImputer 클래스를 활용하면 누락값을 간편하게 처리할 수 있습니다. 한 번 학습된 Imputer는 새로운 데이터 셋에 대해서도 동일하게 처리를 해주어 편리합니다. train set 기준의 평균, 중간값 또는 최빈값으로 새로운 데이터의 null값을 채웁니다. import numpy as np from sklearn.impute import SimpleImputer # 각 열에서의 최빈값으로 null을 대체 # 대체 전략은 mean, median, most_frequent 가 가능함 ipt = SimpleImputer(missing_values=np.nan, strategy='most..
-
sklearn basic 01데이터분석 2019. 10. 10. 20:25
sklearn의 기초 사용법에 대해 학습합니다. 01. 데이터 나누기 from sklearn.model_selection import train_test_split # Train / Validation Split을 손쉽게 수행 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=1, stratify=y ) # 결과 확인 print(np.bincount(y)) print(np.bincount(y_train)) print(np.bincount(y_test)) 02. 단위 표준화 (Scaling) # scaler를 생성하고, 학습데이터로 학습 from sklearn.preprocessing import St..
-
pandas groupby 활용하기데이터분석 2019. 10. 10. 20:18
데이터분석시, 특정 조건의 group별 연산이 매우 빈번하게 발생합니다. Pandas DataFrame에서 해당 작업들을 처리하는 방식을 알아봅니다. 01. groupby basic 기본적인 데이터 집계 방법을 살펴봅니다. # DataFrameGroupBy object 생성 grouped = mydf.groupby('mycolumn') # DataFrameGroupBy object는 Iterable for name, group in grouped: print(name) display(group) # 각 그룹별 head 확인도 가능 grouped.head(3).head(5) # 집계 방법1 -> {열:연산} dict를 입력 mydf.groupby('mycolumn').agg({..
-
pandas 테이블 양식 수정하기데이터분석 2019. 10. 10. 20:13
Pandas DataFrame의 layout을 원하는 형태로 바꾸는 방법에 대해 살펴봅니다. 01. stack & melt & pivot 수평 열 이름을 수직의 관측치로 만들어줍니다. # 모든 열의 이름을 Index로 변환 mydf.stack() # stack 함수를 원복 mydf.unstack # id_vars: 유지, value_vars:전치 *즁요한사실: 기존Index는 삭제됨 mydf.melt(id_vars=['col1'], value_vars=['col2', 'col3'], var_name='n1', value_name='n2') # melt 함수를 원복 mydf.pivot(index=['col1'], columns=['n1'], values='n2') 02. wide_to_long 동일한 용어..
-
pandas basic 03데이터분석 2019. 10. 10. 20:11
01. Subsetting 전체 테이블 중 일부 테이블을 선택하는 방법을 알아봅니다. # Select a column with slicer mydf['col1'] # iloc / loc indexer mydf[5] mydf[[10, 20]] mydf.loc[index, column_names] mydf.iloc[index_nums, column_nums] mydf.loc[st_row:ed_row, st_col:ed_col] # iat / at indexer mydf.iat[row_num, col_num] mydf.at[row, col] # Select rows mydf[mydf[col1] == value] 02. Boolean Indexing 불린 인덱싱에 대해 알아봅니다. # A Bool..
-
pandas basic 02데이터분석 2019. 10. 10. 20:08
01. Column Selection there are a few ways to select columns in a DataFrame. # select by indexing mydf[[col1, col2, col3]] # select by dtype mydf.select_dtypes(include=['int']) # select by filter mydf.filter(like='flag') mydf.filter(regex='\d') mydf.filter(like='pre_') # ex1) select columns having NaN null_cols = (mydf.select_dtypes(['object']).isnull().sum..