TIL_24.07.17_데이터 전처리 1
일단 먼저,
데이터 전처리와 시각화를 배우기 전에,
'무엇을 위해 ~ 이런 형태의 데이터가 필요하다' 라는 것을
먼저 정의할 필요가 있다.
▶데이터 전처리
- 내가 원하는 데이터를 보기 위해 하는 모든 활동 = 데이터 전처리
● how?
- 데이터를 통해 무엇을 확인할 것인지?
- 어떤 의사결정을 위해 필요한지?
- 데이터를 통해 무엇을 얻고자 하는지, 그 목적을 달성하기 위해
데이터 전처리가 필요하다.
▶ pandas
- 데이터를 조작하고 쉽게 분석할 수 있게 도와주는 라이브러리
- 대용량 데이터 처리가 가능 : pandas는 데이터를 메모리에 로드하고,
다양한 연산에 대한 빠른 처리가 가능, 대용량 데이터를 처리하는 데
최적화
- 데이터 조작 기능 : 데이터 정렬, 필터링, 집계, 결측값 처리 등 데이터를
쉽게 가공할 수 있음.
- 데이터 시각화 기능 제공 : Matplotlib, Seaborn,...
- 데이터를 구조화하여 분석할 수 있음 : DataFrame이라는 자료형을 제공하여
데이터를 표 형태로 나타어 분석이 가능함
●pandas에서 사용되는 대표적인 데이터 오브젝트
- DataFrame = 표 형태
- index : 각 아이템을 특정할 수 있는 고유의 값
- columns : 하나의 속성을 가진 데이터 집합
- Series = 하나의 속성을 가진 데이터 집합 ( = DataFrame 표에서 열 1줄이
라고 생각하면 쉽다.)
● pandas 불러오기
import pandas as pd
● 엑셀/csv 데이터 불러오기
pd.read_excel(',/파일명.xlsx') # './' --> 현재 내가 있는 위치라는 의미
pd.read_csv(',/파일명.csv')
● 엑셀/csv 데이터 저장하기
df = 데이터프레임 # 저장하고 싶은 데이터
df.to_csv('./newfile.csv', index = False)
● Index - 사용자가 직접 설정한 인덱스로 변경예시
import pandas as pd
# 사용자가 직접 인덱스를 설정한 데이터 프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3'])
# 인덱스 변경(대체)
df.index = ['new_idx1', 'new_idx2', 'new_idx3']
print(df)
- 인덱스 활용하기(set_index)
○ set_index() : 특정 컬럼에 들어있는 값을 인덱스로 활용
data = df.set_index('컬럼명')
data.head()
# 불러올때 인덱스 지정하기
pd.read_csv('./data/file.csv' , index_col = '컬럼정보')
pd.read_csv('./data/file.csv' , index_col = 0) # 0부터 시작
● 데이터프레임.index : 인덱스를 확인하기
#인덱스 확인하기
data.index
#리스트 형태를 활용해서 인덱스를 새로 입력할 수 있습니다.
data.index = ['1번', '2번', '3번']
data
● reset_index() : 현재 인덱스를 0부터 시작하는 정수로 변경하기
# reset_index() 의 기본 값은 drop = False 를 가지고 있습니다.
data.reset_index()
# 현재 인덱스를 컬럼으로 변경할 수 있습니다.
# reset_index(drop = True) 명령어를 활용하면,
# 현재 인덱스 값을 컬럼으로 변경하지 않고 인덱스를 초기화할 수 있습니다
data.reset_index(drop = True)
● 해당 컬럼 값 찾기
# 데이터 프레임을 생성했다고 가정하고
df['이름'] # 이름 컬럼 출력
df['나이'] # 나이 컬럼 출력
df['성별'] # 성별 컬럼 출력
● 컬럼명 변경하기/데이터프레임.column
pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])
#컬럼 확인하기
data.column
#리스트 형태를 활용해서 컬럼명을 새롭게 입력
data.column = ['축구', '농구', '배구','야구']
data
# 1개 이상의 컬럼명 변경
df = df.rename(columns={'나이': 'age', '성별':'남/여'})
df
▶데이터 확인
● .head() : 데이터를 N개 행까지 보여줌
data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌
● .info() : 데이터의 정보를 파악 (인덱스, 컬럼명, 컬럼의 데이터 개수, 데이터 타입)
data.info()
# null 값을 확인할때도 활용
● .describe() : 데이터의 기초통계량을 확인(개수, 평균, 표준편차, 사분위, 중앙값)
**숫자값에 대해서만 기초통계량 확인 가능
● 데이터를 불러온 다음 꼭 확인해야 하는 것
○ 데이터의 결측치(null)가 있는지?
- 결측치 제거하는 방법
#결측치 확인
df.isnull()
#boolean 형태로 null 값 확인(null 값은 True로 표시된다.)
df.isna()
#위 코드로 null 값의 column을 확인하고
#아래 코드로 다시 확인하면 자세하게 결측치 값 정보 확인
df[df['B'].isna()]
#이렇게 하면 결측치가 몇 개 있는지도 알 수 있다.
df.isnull().sum()
#결측치 제거 : dropna()
df.dropna()
○ 중복데이터 확인 - 중복 데이터 제거
# 중복 데이터 확인
df.duplicate(subset = ['컬럼1', '컬럼2', '컬럼3'])
# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])
○ 데이터 이상치 확인/처리 - 이상치 처리하는 방법
# IQR (Interquartile Range) 방법 찾아보기
# 참고 : https://www.scribbr.com/statistics/interquartile-range/
# IQR 계산
Q1 = df['컬럼1'].quantile(0.25)
Q3 = df['컬럼1'].quantile(0.75)
IQR = Q3 - Q1
# 이상치 기준 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 이상치 제거
df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)]
○ 데이터 타입이 알맞게 들어가 있는지 확인
# 데이터 타입 변경을 원한다면 !
df['column_name'].astype(int)
df['column_name'].astype(float)
df['column_name'].astype(str)
df['column_name'].astype(bool)
df['column_name'].astype('category')
df['column_name'].astype('datetime64[ns]')
df['column_name'].astype(complex)
df['column_name'].astype(object)