[데이터 분석] 데이터전처리 기초
* 데이터 전처리
데이터 전처리란, 데이터 분석을 위해 수집한 데이터를 분석에 적합한 형태로 가공하는 과정.
데이터 전처리를 통해 불필요한 데이터를 제거하고, 결측치나 이상치를 처리하여 데이터의 질을 향상시킬 수 있다.
* 데이터 분석 과정
1. 데이터 수집
2. 데이터 전처리
3. 데이터 가공(필요시 전처리)
4. 데이터 분석 탐색 / 시각화(필요시 전처리)
5. 필요시 모델 훈련(머신러닝 또는 딥러닝)
6. 웹서비스 또는 분석 보고서
일반적으로 책에서는 : 데이터 수집 -> 전처리 -> 분석 -> 시각화로 성명되고 있다.
하지만 분석과정은 회사에 따라 다르다.
* 데이터 수집 시 확인사항
- 날짜 확인 : 기준일로 사용 [년윌일시분 까지 있는 데이터가 좋다 최소한 년월까지]
- 범주형 데이터 확인 : 예로 남자 또는 여자와 같은 데이터
<판다스(pandas)>
- 행렬 데이터를 처리하기 위한 다양한 함수를 지원하는 라이브러리.
- 파일 읽기, 저장, 행렬데이터 처리, 기본 시각화 등 지원.
- 데이터 전처리 과정에서 주소 사용됨.
import pandas as pd
이 엑셀파일을 기준으로 예제로 알아보자.
1. Pandas 라이브러리를 사용하여 데이터 읽어 들이기
import pandas as pd
### 파일위치 지정
file_path = "./files/sample_1.xlsx"
### 파일 데이터 추출하기
sample_1 = pd.read_excel(file_path,
header=1,
skipfooter=2,
usecols="A:C")
- file_path: 파일 지정(위치 포함)
- header : 컬럼명으로 사용할 행의 위치(디폴트 : 0)
- skip footer: 행의 가장 밑에서부터 포함하지 않을 행의 개수(디폴트 : 0)
- usecols: 가지고 올 열의 범위 (A부터 C까지의 열 / 디폴트 : 데이터가 있는 모든 열)
### 데이터프레임 출력
sample_1
- 데이터의 행/열이 많은 경우 => 기본 상위 5개, 하위 5개를 추출해서 보여줌
- 데이터 행/열의 개수가 작으면 모두 보여줌
### head() : 상위 데이터 확인(기본 5개)
sample_1.head(1)
head()에서 소괄호 안에 아무런 값을 주지 않을 경우 5개 출력.
### tail() : 마지막 데이터 확인(기본 5개)
sample_1.tail(1)
head()와 마찬가지로 소괄호 안에 아무런 값을 주지 않을경우 5개 출력.
### 데이터프레임 정보 확인하기
sample_1.info()
- sample_1에 대한 type이 나온다. = Data Frame
- Data Frame 타입 : 행렬을 저장 관리하는 타입
- (**중요**) => info() 함수는 데이터의 결측치(nan, NuLL) 데이터
확인 가능
- RangeIndex : 전체 행(row)의 개수
- 전체 행의 개수와 각 컬럼의 개수(non-NuLL)가 안 맞으면 -> 결측 데이터가 존재한다는 의미
- 눈에 보이는 것 = 인덱스 값 / 실제번호는 따로 존재
- Dtype : 데이터 타입 문자 : objexct / 숫자 : int
### describe() : 기초통계 데이터 숫자값을 가지는 컬럼에 대해서만 통계를 내림
sample_1.describe()
- count : 데이터 행의 개수
- mean : 데이터 평균
- std : 표준편차
- min : 최솟값
- max : 최댓값
- 25%, 50%, 75% : 4분 위수 데이터 [50% : 중앙값]
- 4분위수 데이터를 이용해서 이상치 (이상한) 데이터를 확인한다.
2. 데이터조회하기
### 국적코드 데이터 조회하기
sample_1['국적코드']
sample_1[['국적코드']]
[ ]가 하나일 때와 [[ ]] 두 개일 때 차이점을 알아두어야 한다.
* 데이터 타입이 서로 다르다.
### 타입 확인하기
type(sample_1['국적코드'])
- Series : 튜플과 모양()이 같다. (사용법도 동일)
- {"국적코드" : (데이터, 테이터....)}
3. 기준년월 컬럼 추가하기
### 2019-11 값을 추가하기
sample_1["기준년월"] = '2019-11'
sample_1
4. 데이터 필터링하기
### 설별 중에 여성인 데이터만 추출하기
condition = sample_1["성별"] == "여성"
condition
* 결과가 True / False로 나온다. [불리언 형식]
sample_1[condition == True] # 디폴트 값은 True
위에서 False인 값만 반환.
1번. 객체 주소 전달방식
sample_2 = sample_1
sample_2
2번. copy() : 메모리 복제방식
sample_2 = sample_1.copy()
sample_2
1번과 2번 모두 결과는 같지만,
1번은 객체 주소전달방식으로 1번과 2번이 동일하다. (서로 영향을 주고받음)
반면, 2번은 신규로 메모리 주소를 받아온다. (서로 영향 안 받음)