IT정보

뒤로가기

[데이터분석] 파이썬으로 데이터 분석하기

5점
2021-12-09 21:02:03 추천 0

파이썬으로 데이터 분석하기



1. 데이터 분석이란?


데이터 분석이란 수집한 데이터를 정리하여 과학적 방법으로 유의미한 결과를 도출하는 것입니다. 이때 수집한 데이터는 전처리, 요약, 분석 모형에 적용의 과정을 거치게 됩니다.


▼데이터 분석 절차

데이터 분석은 1)데이터 전처리 → 2)탐색적 자료 분석 → 3)데이터 조작 → 4)모델링 → 5)분석 → 6) 모형평가 절차를 거칩니다.


데이터 전처리: 수집된 자료를 분석에 용이한 형태로 바꿔줍니다. 주로 sklearn을 사용합니다.

탐색적 분석: 전처리된 자료의 통계량 등을 구하여 데이터를 요약합니다. 주로 Scipy를 사용합니다.

데이터 조작: pandas의 행/열 값을 처리하는 기능을 통해 모델링에 용이하도록 데이터를 조작해줍니다.

모델링: Scikit-learn에는 시중에 알려진 대부분의 모형들이 제공되므로 적절한 모델을 선택하여 적용합니다.


모델을 돌려서 나온 결과를 분석하고 모형에 대한 평가를 내려서 부족한 부분이 있다면 다시 시행합니다.



▼분석 패키지

Pandas: 파이썬을 활용한 주요 데이터 분석 패키지입니다. 판다스는 DataFrame등의 자료 구조를 제공함으로써 효과적인 데이터 분석이 가능합니다. 

Scipy: 파이썬으로 다양한 계산을 지원해주는 패키지 입니다. 확률과 통계를 비롯하여 회귀분석, 최적화 등의 계산이 가능하기 때문에 유용하게 사용됩니다.

Scikit-learn(Sklearn): 파이썬을 활용한 데이터 분석 지원 패키지 입니다. 회귀분석이 가능한 모형을 제공합니다.



2. 데이터 전처리: 파티셔닝


데이터 파티셔닝이란 모형을 구축하고 성능을 평가하기 위해서 주어진 데이터를 훈련 데이터와 테스트 데이터로 나누는 것을 말합니다. 이때 파티셔닝에 사용되는 데이터는 랜덤하게 선택되며 서로 중복되지 않습니다.


훈련 데이터는 모형을 구축하는데 사용되는 데이터이며 테스트 데이터는 훈련 데이터로 구축된 모형의 성능을 평가하는데 사용되는 데이터 입니다. 주어진 데이터에서 훈련 데이터가 먼저 선택되고 남은 데이터가 테스트 데이터가 됩니다.


위의 복잡한 파티셔닝 과정이 Scikit-learn의 train_test_split함수로 해결이 됩니다. 


from sklearn import model_selection

train, test = model_selection.train_test_split(df, test_size=0.2) #df은 DateFrame이며 test_size는 0~1값 사용함. train은 훈련데이터이며 test는 테스트데이터



3. 데이터 전처리: 정규화


데이터 정규화는 모델링을 하면서 모든 데이터가 동일한 크기로 학습에 반영되도록 해주기 위해 값을 변환하는 과정입니다. 예를 들어 A그룹은 그 단위가 억단위 이고 B그룹은 단위가 원 단위라면 A그룹과 B그룹의 데이터를 사용한 모델링은 그 결과가 엉망이 됩니다. 그래서 두 그룹의 데이터의 크기를 동일한 상태로 만들어줄 필요가 있습니다. 이를 위해 주로 min-max, standardization이 사용됩니다.


min-max는 정규화 대상의 각 값에서 전체 값의 최솟값을 빼준 뒤 그 값을 최댓값과 최솟값의 차이로 나눠주는 방식으로 값을 변환합니다. min-max를 사용하면 결과는 항상 0~1사이의 값이 나옵니다.

standardization은 Z-score라고도 하며 정규화 대상의 각 값에서 평균을 빼준 뒤 그 값을 표준편차로 나누는 방식으로 값을 변환 합니다. standardization을 사용하면 그 결과는 -의 값에서 +값까지 모두 가능합니다.


위의 복잡한 정규화 과정을 Sklearn의 preprocessing모듈을 사용하여 해결이 됩니다. min-max를 사용하고 싶으면 MinMaxScaler()함수를 쓰고 standardization을 사용하고 싶으면 StandardScaler()함수를 쓰면 됩니다.



▼min-max정규화 사용

from sklearn.preprocessing import MinMaxScaler

scaler1 = MinMaxScaler()

scalerd1 = scaler1.fit_transform(df) #df는 DataFrame



▼standardization정규화 사용

from sklearn.preprocessing import StandardScaler

scaler2 = standardScaler()

scaled2 = scaler2.fit_transform(df) #df는 DataFrame



4. 데이터 요약: 평균


데이터들을 대표하는 것은 여러가지가 있을 수 있습니다. 그 중에서 중앙값과 평균을 대표로 많이 사용합니다. 이러한 통계량은 numpy또는 scipy를 통해서 간단히 구할 수 있습니다. 


특히 Scipy는 Trim하여 평균을 구하는 기능이 있기 때문에 scipy의 tmean()을 사용하는 것이 편리합니다. describe()를 쓰면 다양한 통계량들이 나오므로 이 역시 사용하면 편리합니다.



5. 데이터 요약: 분산


분산은 자료가 평균으로부터 얼마나 퍼져 있는지를 나타내는 대표적 수치입니다. 산포도에 속하는 통계량으로서 평균과 각 값의 평균으로부터의 차이를 제곱한 뒤 그 값들의 평균을 구합니다. 만약 제곱을 해주지 않고 평균을 구하려고 하면 그 합이 0이 되어 구할 수 없게 되기 때문입니다.


표준편차는 분산의 제곱근입니다. 




6. 데이터 요약: 공분산


공부산이란 두 변수의 상관 정도를 나타내주는 값입니다. 공분산을 알면 두 변수의 관계를 알 수 있습니다. 만약 공부산이 양수가 나오면 양의 상관관계가 있는 것이고 음수이면 음의 상관관계를 나타냅니다. 0이면 관계가 없음을 말합니다.



▼공분산 계산

X와 Y두 변수가 있다고 하고 각 변수마다 데이터가 2개씩 있다고 할 때, {(X1-X의 평균)*(Y1-Y평균)+(X2-X의 평균)*(Y2-Y평균)}/2 로 평균을 구하는 것입니다.



▼Scipy사용


Scipy에서 cov() 함수를 사용하면 공분산을 쉽게 구할 수 있습니다.




7. 데이터 요약: 상관관계


상관관계는 두 변수의 상관관계의 정도가 -1 에서 1 사이의 값으로 나타난 것입니다. 공분산을 표준편차로 나누어서 구해줍니다. 상관관계를 구하는 이유는 한쪽 변수의 데이터들이 그 크기가 매우 큰 것들일 경우 결과 판단에 문제가 발생할 수 있기 때문입니다.



▼ Scipy사용


사이파이 패키지의 stats.pearsonr()를 사용하여 구할 수 있습니다. 피어슨상관관계 함수를 사용하면 상관관계 값뿐만 아니라 P-value도 같이 구할 수 있습니다. 



비밀번호 입력후 수정 혹은 삭제해주세요.


댓글목록

등록된 댓글이 없습니다.
댓글 수정 댓글 수정
0/500 byte
댓글쓰기 댓글쓰기

영문 대소문자/숫자/특수문자 중 2가지 이상 조합, 10자~16자

0/500 byte
평점

위에 보이는 문자를 공백없이 입력하세요. (대소문자구분)

에게만 댓글 작성 권한이 있습니다.