pandas
-
pandas DataFrame join merge concat 연산 속도 비교데이터분석 2021. 7. 30. 01:00
0. Intro pandas DataFrame을 join해야하는 경우는 매우매우 빈번하다. 그래서 join 방법들을 모두 정리해볼까 한다. # 준비한 데이터는 다음과 같음 print(raw.shape) # (9142946, 21) print(address.shape) # (1396049, 11) 1. 단일 column 기준 join 한 개의 column을 기준으로 join하는 방법들과 성능은 다음과 같음 결론: join 할 때 index를 바로 지정하지 말자;; # pd.merge 사용 %%timeit merge_on = pd.merge(raw, address, how='left', left_on='CI', right_on='CI') # 42.1 s ± 178 ms per loop (mean ± std...
-
python으로 구현한 간이 단변량분석 fineclassing신용평가 2019. 10. 18. 20:45
신용평가 등의 데이터 분석 시, fineclassing 단변량 분석을 진행한다. fineclassing을 통해 개별 항목의 분포를 확인하고, target과의 관계를 빠르게 살펴볼 수 있기 때문이다. 최근 분석에서 활용한 간이 fineclassing 코드는 다음과 같다. 급하게 만들어서 깔끔하지는 않지만 충분히 실무에서도 쓸 수 있을 것이다. Args: df: 분석데이터 col: 컬럼명 tgt: target 컬럼명, 해당 컬럼은 0/1 binary 형식이어야 함 nbins: 숫자형 변수의 구간수, 숫자만큼 percentile을 계산해서 컬럼 분포를 확인 Return: 요약 결과 DataFrame을 반환 사용 코드: from pandas.api.types import is_string_dtype import..
-
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..
-
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..