본문 바로가기
Big Data

Big Data 분석 - Data Handling

by jun_code 2022. 5. 18.

​​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