서울 코엑스에서 진행된 파이콘 한국 2018에서 8월 19일에 발표한 내용입니다.
데이터 전처리와 Feature Engineering에 대해 다룹니다.
[파이콘 한국 2018 프로그램 | 땀내를 줄이는 Data와 Feature 다루기](https://www.pycon.kr/2018/program/47)
이 발표내용은 8월 17일 금요일에 진행되었던 다음 2개의 튜토리얼을 바탕으로 작성되었습니다.
* [공공데이터로 파이썬 데이터 분석 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/6)
* [청와대 국민청원 데이터로 파이썬 자연어처리 입문하기(3시간) — 파이콘 한국 2018](https://www.pycon.kr/2018/program/tutorial/7)
7. 응답 수
Cleaning the data 20
Cleaning 20
Dirty data 16
Data Cleaning 14
dirty data 10
Data cleaning 10
Size 9
Missing data 8
Incomplete data 8
cleaning 8
Lack of documentation 7
data quality 6
Kaggle Servey 2017PersonalProjectsChallenge
10. Import
이 발표자료 안에 있는 코드는 대부분
다음의 라이브러리로 작성되었습니다.
import pandas as pd
import numpy as np
import sklearn
import plotnine
11. plotnine
발표자료 안에 있는 그래프는 대부분
파이썬에서 R의 ggplot 문법을 사용할 수 있는
plotnine으로 작성되었습니다.
이미치 출처 : https://www.kaggle.com/residentmario/grammar-of-graphics-with-plotnine-optional
43. 1) MCAR
완전무작위 결측 발생, Missing completely at random
2) MAR
임의적 결측 발생, Missing at random
3) NI
무시할 수 없는 결측 발생, Non-ignorable
예. 설문이라면 응답하고 싶지 않은 데이터에 대한 의도적 결측치
결측치 종류
44. 1) 완전제거법(List-wise deletion)
•가장 보편적으로 사용되는 방법
•결측율이 높을 때 정보의 손실
•각 변수의 분산을 증가하게 하는 비효율적인 방법
2) 단일대체방법(Single Imputation)
•다양성을 반영하지 못함
•관측된 자료에 의존하는 문제
•구간을 나누어 구간별 평균/중앙값/최빈값을 구해서 대체
3) 다중대체방법 (Multiple Imputation)
•결측이 완전 무작위로 발생한다는 가정
•대체가 가능한 값들의 분포로 부터 추출된 값으로 대체한 완전한 데이터세트를 만들어 대체
결측치 처리 방법
49. • 평균값
• 중앙값
• 최빈값
• 확률분포 활용
• 내외부 데이터 활용
통계적 접근으로 대체하기
50. 무작위로 누락된 수치형 데이터
•평균값
아웃라이어 데이터로 편향이 발생할 수 있음
다른 유사한 데이터의 평균값을 구해서 채워준다.
dataset['Age'].fillna(dataset['Age'].mean(), inplace = True)
51. 무작위로 누락된 수치형 데이터
•중앙값
숫자이지만 카테고리 형태를 가질 때
이상치(Outlier Value)가 있을 때
데이터가 짝수개일 때 없는 데이터가 생길 수 있는 문제
예) 월급의 평균값을 사용하면 이상치로 중앙값보다 높은 값이 채워질 수 있음
dataset['Age'].fillna(dataset['Age'].median(), inplace = True)
52. 무작위로 누락된 수치형 데이터
•최빈값
무작위로 누락된 범주형 데이터
dataset['Age'].fillna(dataset['Age'].mode()[0], inplace = True)
62. 1. Brainstorming or Testing features;
2. Deciding what features to create;
3. Creating features;
4. Checking how the features work with your model;
5. Improving your features if needed;
6. Go back to brainstorming/creating more features until the
work is done.
출처 : https://en.wikipedia.org/wiki/Feature_engineering
The process of feature engineering
72. •가장 간단하지만 효과적이라 널리쓰이는 방법
•장, 문단, 문장, 서식과 같은 입력 텍스트의 구조를 제외하고
각 단어가 이 말뭉치에 얼마나 많이 나타나는지만 헤아림
•구조와 상관없이 단어의 출현횟수만 세기 때문에 텍스트를
담는 가방(bag)으로 생각할 수 있음
BOW(bag of words)
73. BOW(bag of words)
•BOW는 단어의 순서가 완전히 무시 된다는 단점
•예를 들어 의미가 완전히 반대인 두 문장을 보자
•it's bad, not good at all.
•it's good, not bad at all.
•위 두 문장은 의미가 전혀 반대지만 완전히 동일하게 반환
•이를 보완하기 위해 n-gram을 사용하는 데
• BOW는 하나의 토큰을 사용하지만
• n-gram은 n개의 토큰을 사용
74. (1) 파이콘에 버스를 타고 갔다.
(2) 파이콘에서 발표를 했다.
(3) 파이콘에서 자원봉사를 했다.토큰화
[
"파이콘에", "파이콘에서", "버스를", "발표를", "자원봉사를", "타고", "갔다", "했다"
]
벡터화
(1) [1, 0, 1, 0, 0, 1, 1, 0]
(2) [0, 1, 0, 1, 0, 0, 0, 1]
(3) [0, 1, 0, 0, 1, 0, 0, 1]
BOW(bag of words)
75. uni-gram
[
"파이콘에",
"버스를"
“타고",
"갔다",
]
n-gram파이콘에 버스를 타고 갔다.
bi-gram
[
"파이콘에 버스를",
"버스를 타고",
"타고 갔다"
]
tri-gram
[
"파이콘에 버스를 타고",
"버스를 타고 갔다"
]
bi-gram(1,2)
[
"파이콘에",
"버스를",
"타고갔다",
"파이콘에 버스를",
"버스를 타고",
"타고 갔다"
]
tri-gram(2,3)
[
"파이콘에 버스를",
"버스를 타고",
"타고 갔다”,
"파이콘에 버스를 타고",
"버스를 타고 갔다"
]
79. TF-IDFTerm frequency Inverse document frequency
TF(단어 빈도, term frequency)는
특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 값
이 값이 높을수록 문서에서 중요하다고 생각할 수 있지만
단어 자체가 문서군 내에서 자주 사용되는 경우,
이것은 그 단어가 흔하게 등장한다는 것을 의미
이것을 DF(문서 빈도, document frequency)라고 하며,
이 값의 역수를 IDF(역문서 빈도, inverse document frequency)라고함
TF-IDF는 TF와 IDF를 곱한 값
80. TF-IDFTerm frequency Inverse document frequency
예를 들어 청와대 국민청원 데이터에서
초등 돌봄 교실이라는 단어는 특정 청원에서는 자주 등장하지만 전체
청원에서는 자주 등장하지 않음
이럴 때 해당 문서에서 초등 돌봄 교실이라는 단어는 중요한 역할을 하
기 때문에 다른 단어보다 가중치를 높게 설정
반면, 안녕하세요. 청원합니다. 등의 단어는 매우 자주 등장하기 때문에
가중치를 낮게 설정
85. 이상치 Outlier Data 다루기
•Error Data와는 다름
•데이터 혹은 샘플에서 동떨어진 값으로 모델에 편향을 줄 수 있음
•정상치와 이상치의 기준을 어느 지점으로 할 것인지에 대한 모호함
•도메인마다 이상치의 기준에 대한 정도가 다름
예) 의료 데이터는 이상치가 중요할 수도 있음
예) 국민청원 데이터로 투표수를 예측한다고 할 때 특정 사회적 이슈에 따라 이상치가 발생
93. •일변량 비선형 변환
•대부분의 모델은 각 특성이 정규분포
와 비슷할 때 좋은 성능
•오차가 정규분포를 따른 다는 가정하
에 정규분포로 만들어 주는 과정이 필
요해서 로그변환
•로그함수의 값을 복원할 때는 지수함
수를 사용 np.exp(log_feature)
•정수형 특성에 주로 사용
•정수 Label Data에도 적용해 볼 수
있음
Univariate transformation
107. top -o cpu
내 장비의 자원이 충분히 활용되고 있는지 확인
내 장비는 제대로 일하고 있을까?
108. 자원을 최대한 사용하도록 일 시키기
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
출처 : https://docs.python.org/3.6/library/multiprocessing.html?module-multiprocessing
116. 청와대 국민청원 자연어 처리와 분석
https://github.com/corazzon/petitionWrangling
공공데이터 분석
https://github.com/corazzon/OpenDataWrangling
캐글 경진대회
https://github.com/corazzon/KaggleStruggle
발표에 사용된 노트북