데이터 분석을 위한 흐름을 살펴보면
Business Understanding - 가설 수립 -> Data Understanding 데이터 이해 -> 데이터준비 -> 모델링 순으로 이루어진다.
가설 수립 절차
해결해야 할 문제를 정의하고 (y)
그 문제를 설명하기 위한 요인(x)을 찾는거다
그러면 x -> y 가 되는데 이게 가설이다
데이터 분석 도구
EDA, CDA 두개가 있다.
▪ EDA (Exploratory Data Analysis)
• 개별 데이터의 분포, 가설이 맞는지 파악
• NA, 이상치 파악
▪ CDA (Confirmatory Data Analysis)
• - 탐색으로 파악하기 애매한 정보는 통계적 분석 도구(가설 검정) 사용
데이터 준비
준비할 데이터는 모든 셀에 값이 있어야 하고,(null값 안됨)
이 값은 숫자 여야하고,
범위를 일치 시켜야 한다.
이렇게 준비하려면
▪ 결측치 조치 ▪ 가변수화 ▪ 스케일링 ▪ 데이터 분할
을 수행할 수 있다.
모델링
모델링은 데이터로 패턴을 찾는걸 말하고
오차를 최소화 하는 패턴을 말한다.
결과는 수학식으로 표현된 모델이다.
--> 알고리즘과 학습 데이터가 필요하다.
평가
모델링이 끝나면
▪ 모델에 대한 데이터 분석 목표와 비즈니스 목표달성에 대한 평가
▪ 모델과 데이터에서 추출한 패턴이 진정한 규칙성을 갖고 있는지, 단지 특정 예제 데이터에서만 볼 수 있는 특이한 성질은 아닌지 확인
▪ 비즈니스 목표에 부합되는지 보장
하는 평가로 하고, 개발후 배포하는 작업을 한다.
숫자형 변수 시각화
1. 히스토그램 (bins 값이 많아질수록 구간당 갯수가 많아져 세분화 된다.)
plt.hist(titanic.Fare, bins = 5, edgecolor = 'gray')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()
sns.histplot(x='Age', data = titanic, bins= 8)
plt.show()
sns. 을 이용하려면 seaborn 을 임포트 해주면 된다.
import seaborn as sns
밀도함수 그래프 (kde plot)
- 히스토그램의 단점
- 구간(bin)의 너비를 어떻게 잡는지에 따라 전혀 다른 모양이 될 수 있음
- 밀도함수 그래프
- 막대의 너비를 가정하지 않고 모든 점에서 데이터의 밀도를 추정하는 커널 밀도 추정(Kernel Density Estimation)방식을 사용하여 이러한 단점을 해결.
- 밀도함수 그래프 아래 면적은 1
sns.kdeplot(titanic['Fare'])
# sns.kdeplot(x='Fare', data = titanic)
plt.show()
boxplot - null값이 있으면 안그려진다.--
- seaborn 패키지 함수들은 NaN을 알아서 빼줍니다.
sns.boxplot(x = titanic['Age'])
plt.grid()
plt.show()
plt.boxplot(temp['Age'], vert = False) # vert = False 없으면 세로로 그려짐
plt.grid()
plt.show()
범주형 변수 시각화
bar chart
- seaborn의 countplot
- plt.bar() 를 이용하려면 먼저 집계한 후 결과를 가지고 그래프를 그려야 합니다.
- countplot은 집계 + bar plot을 한꺼번에 해결해줍니다!
# sns.countplot(x=titanic['Pclass'])
sns.countplot(x='Pclass', data=titanic)
# sns.countplot(y='Pclass', data=titanic)
plt.grid()
plt.show()
pie chart
- 범주별 비율 비교할 때 파이차트 사용.
- 역시 먼저 집계를 해야 합니다.
- plt.pie( 값, labels=범주이름, autopct = ‘%.2f%%’)
- autopct = ‘%.2f%%’ : 그래프에 표시할 값 비율 값에 대한 설정입니다.
- .2f% : 소수점 두 자리 퍼센트로 표기 한다는 의미.
- autopct = ‘%.2f%%’ : 그래프에 표시할 값 비율 값에 대한 설정입니다.
temp = titanic['Pclass'].value_counts()
plt.pie(temp.values, labels = temp.index, autopct = '%.2f%%')
plt.show()
상관분석
연속형- 연속형 간의 시각화 -- 산점도 그리기
- 문법
- plt.scatter( x축 값, y축 값 )
- plt.scatter( ‘x변수’, ‘y변수’, data = dataframe이름)
- seaborn 함수가 더 편하다
sns.scatterplot(x='Temp', y='Ozone', data = air)
plt.show()
한꺼번에 시각화 -- pairplot
데이터프레임의 모든 숫자형 변수들에 대한 산점도를 그려주지만, 시간이 만이 걸린다.
가운데 막대그래프 기준으로 나뉘고 x와 y 축 값만 바뀐 값이다.
sns.pairplot(air, kind='reg' )
plt.show()
산점도와 각각의 히스토그램을 함께 보여주는 jointplot
sns.jointplot(x='Temp', y='Ozone', data = air)
plt.show()
--> 개인적으로 직관성 좋지 않음
수치화 상관분석
- 상관계수 𝑟
- 공분산을 표준화 한 값
- -1 ~ 1 사이의 값
- -1, 1에 가까울 수록 강한 상관관계를 나타냄.
- 경험에 의한 대략의 기준(절대적인 기준이 절대 아닙니다.)
- 강한 : 0.5 < |𝑟| ≤ 1
- 중간 : 0.2 < |𝑟| ≤ 0.5
- 약한 : 0.1 < |𝑟| ≤ 0.2
- (거의)없음 : |𝑟| ≤ 0.1
import scipy.stats as spst #p-value값을 알기위해 임포트 해야함
# 상관계수와 p-value
spst.pearsonr(air['Temp'], air['Ozone']) #Temp와 Ozone의 p-value를 알려줌
이 코드의 결과는 튜플로 나오는데
- 튜플의 첫 번째 값 : 상관계수를 뜻합니다.
- 두번째 값 : p-value
- 귀무가설 : 상관 관계가 없다.(상관계수가 0이다.)
- 대립가설 : 상관 관계가 있다.(상관계수가 0이 아니다.)
- 주의 사항 : 값에 NaN이 있으면 계산되지 않습니다. 반드시 .notnull()로 제외하고 수행해야 합니다.
데이터프레임속 값들간 상관계수 한꺼번에 구하기
# 데이터프레임으로 부터 수치형 데이터에 대한 상관계수 구하기
air.corr()
#air는 데이터프레임 이름