Data Handling - 이론
Data 구조
Pandas
- Pandas : 데이터를 수집하고 정리하는데 최적화된 도구
- numpy 기반으로 작성된 라이브러리
import pandas as pd
Series & Dataframe
- Series : 1차원 배열 구조로 index와 values로 구성
- Dataframe : spreadsheet 형식의 자료구조로 index, columns, values 형태로 구성
데이터 읽기 및 저장
함수 | 설명 |
read_csv | 쉼표로 구분된 데이터를 읽어올 때 사용 |
read_table | 테이블 형태의 데이터로 저장되어 있는 파일을 불러 올 때 사용 |
read_excel | 엑셀 형식의 데이터를 읽어옴 |
read_html | 웹 문서 내의 데이터를 읽어옴 |
특정 컬럼만 불러오기
데이터 내용 확인하기
- 미리보기 : head() / tail()
요약정보 확인하기
- 데이터프레임 객체.shape
- 데이터프레임 객체.dtypes
- 데이터프레임 객체.info()
- 데이터프레임 객체.describe() : include='all' 옵션을 추가하면 문자열 데이터에 대한 unique, top, freq에 대한 정보가 추가됨
데이터 개수 확인하기
- 열 데이터 개수 : 데이터프레임 객체.count()
- 열 데이터의 고유값 개수 : 데이터프레임 객체['열이름'].value_counts()
groupby
- 집단, 그룹별로 데이터를 집계하여 특성 확인
- 같은 값을 그룹으로 묶어 통계함수에 따른 집계 결과를 얻기 위함
- as_index : 새로 인덱스를 생성할 것인지 여부를 결정
dataframe_object.groupby(그룹대상, as_index=False).통계함수
함수 | 설명 |
count | NAN이 아닌 값들의 갯수를 계산 |
sum | NAN이 아닌 값들의 합을 계산 |
mean | NAN이 아닌 값들의 평균을 계산 |
median | NAN이 아닌 값들의 중앙값을 반환 |
str, var, min, max | 표준편차, 분산, 최소값, 최대값 반환 |
prod | NAN이 아닌 값들의 전체 곱을 계산 |
데이터 선택하기
- slice / loc / iloc / 조건 적용
slice
- DataFrame 특정 열 또는 행의 데이터를 선택 및 추출옴
- 대괄호나 ':'를 이용함
- 행을 가져올 때 ':'를 사용하면 마지막 지정 부분 이전까지를 가져옴
loc
- 열과 행 조건을 모두 제공해야 하는 경우에 사용
- 지정한 부분까지 가져옴
iloc
- 열과 행 조건을 모두 제공해야 하는 경우에 사용또
- label의 이름이 아닌 index를 이용함 => 위치를 이용해 선택
조건을 이용한 선택
- 대괄호 안에 조건을 입력
- 데이터프레임 객체.query(조건) / 데이터프레임 객체[데이터프레임 객체[열이름] 조건]
데이터를 생성하여 선택하기
- 난수 생성 : np.random.rand
- 랜덤값 고정 : np.random.seed()
Filter와 Mask
- Filter
- 이름을 이용한 컬럼 선택 : 데이터 특정 컬럼을 선택하거나 특정 문자를 포함하는 컬럼 선택 및 데이터 추출
# items : 직접 입력한 컬럼 선택
# like : 입력 값을 포함한 컬럼 선택
# regex : 정규 표현식으로 입력 값을 포함한 컬럼 선택
# axis : 적용 대상 축
pd.DataFrame.filter(items=None, like=None, regex=None, axis=None)
- Mask
- 조건에 해당하는 데이터 행을 mask 처리하기
# cond : mask 적용 조건
# other : 적용 조건에 해당할 때 처리
# inplace : 데이터 변환 후 처리
pd.DataFrame.mask(cond, other=nan, inplace=False, axis=None, level=None)
데이터 결합
- 기준 열을 사용하지 않고 단순 데이터를 연결함
- 위 아래로 데이터의 행 추가함
- 기존의 데이터가 가진 index를 사용하므로 데이터를 결합하면 index 값이 중복될 수 있음
- A.append(B) / concat(A, B)
append
Arguments | 기능 |
other | 추가로 결합할 데이터 |
ignore_index | 기존 데이터의 index 무시 여부 False : 결과 데이터에 기존의 index를 유지 True : 결과 데이터에 새롭게 index를 부여함 |
verify_integrity | ValueError 생성 여부(False) False : index가 중복일 경우 ValueError를 나타내지 않음 True : index가 중복일 경우 ValueError를 나타냄 |
sort | 결과 데이터를 정렬 |
concat
Arguments | 기능 |
objs | 결합 데이터(Series, Dataframe) |
axis | 결합할 방향(0) 0 : 위 아래로 합침 1 : 좌 우로 합침 |
join | 결합 방법('outer') 'outer' : 합집합 'inner' : 교집합 |
join_axes | axis=1일 경우 특정 dataframe의 index를 그대로 사용 |
ignore_index | 기존의 인덱스 유지(False) False : 기존의 index 유지 True : 기존의 index 무시 |
levels | 시퀀스 목록 |
verify_integrity | True일 경우 index 중복 확인 |
copy | 연결한 데이터를 복사 False : 기존 데이터를 덮어씌움 |
Merge & Join
- DataFrame 공통 열 또는 인덱스를 기준으로 두 DataFrame을 합치는 것
- 기준을 key라고 함
# left, right :merge 데이터 대상
# how : merge 방법(left, right, inner, outer)
# join : merge 기준 key 변수
pd.merge(left, right, how, join, on, ..)
# other : join 대상 데이터
# on : joiin의 기준이 되는 key 변수
# how : join의 종류(left, right, inner, outer)
# sort : join 후 DataFrame을 join key 기준으로 정렬
pd.DataFrame(other, on, how ..)
데이터 변환
- T, pivot, melt,
T
- Transpose : 데이터의 중심 대각선 기준으로 행과 열을 변환
df.T
df.transpose()
pivot
- 데이터 컬럼에서 key컬럼(index, column)을 지정하여 값을 변형(종->행)
- 행과 열에 해당하는 데이터가 존재하지 않으면 해당 칸에 NaN으로 채워짐환
# index : pivot 데이터의 index에 해당하는 컬럼 지정 => 지정하지 않으면 기존 index 사용
# columns : pivot 데이터의 column에 해당하는 컬럼 지정
# values : pivot 데이터의 value에 해당하는 컬럼 지용 => 지정하지 않으면 나머지 열 전체
pd.DataFrame.pivot(index=None, columns=None, values=None)
melt
- pivot의 반대 => 지정한 index에 따라 각 value를 보여주기(행-> 종)
- ID로 지정한 컬럼을 제외한 나머지 칼럼의 자료를 위에서 아래로 쌓는 변환
# id_vars : 식별 기준 컬럼 지정
# values_vars : pivot 해제할 컬럼 지정
# var_name : 변수명의 컬럼 이름을 지정(variable)
# value_name : 값의 컬럼 이름을 지정
# col_level : 열의 index가 다중일 경우 melt를 실행할 수준을 지정
pd.melt(df, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
Stack & Unstack
- stack : 컬럼의 index(열의 이름)를 행의 여러 label 중 가장 왼쪽의 label로 un-pivot(melt)해서 변환
# level : 열의 index가 여러 개인 경우, stack할 index의 범위를 지정(default : 마지막열의 index)
# dropna : 누락값 제거
pd.DataFrame.stack(level=-1, dropna=True)
- unstack : stack의 반대, 행의 여러 label 중 가장 왼쪽의 label을 컬럼의 index로 변환
# level : 행의 index가 여러 개일 경우, unstack할 index의 범위를 지정
# fill_value : NaN인 값을 특정 값으로 치환
pd.DataFrame.unstack(level=-1, fill_value=None)
Crosstab
- 지정된 컬럼의 값별 빈도를 요약하여 도수 분포표, 교차표를 생성
- 범주형 변수의 빈도 현황 파악에 자주 사용
- 행/열의 합 도는 구성 비율 계산 가능
# index : 요약 테이블의 행으로 사용될 컬럼 지정
# columns : 요약 테이블의 열로 사용될 컬럼 지정
# rownames : 요약 테이블 행 명칭
# colnames : 요약 테이블 열 명칭 부여
# margins : 행/열 margin(합계 빈도) 추가 여부 지정
# margins_name : 행/열 margin 명칭 부여
# dropna : 값이 NaN인 셀 제외 여부 지정
# normalize :정규화 비율 산출
pd.crosstab(index, columns, rownames, colnames, margins ..)
정렬하기
- 행 인덱스 기준 정렬 : 데이터프레임 객체.sort_index()
- 열 기준 정렬 : 데이터프레임 객체.sort_values(by)
중복 확인
- duplicated() / drop_duplicates()
데이터 Handling - 실습
서울시 인구 및 cctv 현황
- 서울시 인구 데이터
- 컬럼명 변경 : rename(inplace=True)
- 서울시 CCTV 데이터
- 두번째 행을 column으로
- cctv 증가율
- 고령자/외국인
- 구별 데이터 공백 제거
list(map(lambda x: 함수, 적용할 list))
- 필요 데이터만 추출
이론 : p_value(유의 확률)이 0.05보다 크면 귀무가설 선택, 0.05보다 작으면 대립가설 선택
실질 업무 : 0.051이면 귀무가설 선택?? => X
'Big Data' 카테고리의 다른 글
예측 모델 - Linear Regression/Decision Tree/Random Forest/Gradient Boosting (1) | 2022.05.23 |
---|---|
탐색적 분석 - 통계 분석 (0) | 2022.05.20 |
Big Data 분석 - 탐색적 분석(시각화) (0) | 2022.05.19 |
Big Data 분석 - 분석 계획 (0) | 2022.05.19 |
Big Data 분석 - Data 수집 및 정제 (0) | 2022.05.19 |