카테고리 없음

데이터 분석 하기

yumin630 2024. 9. 27. 02:16

 

 

 

 

 

 

 

데이터 분석을 위한 흐름을 살펴보면

 

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% : 소수점 두 자리 퍼센트로 표기 한다는 의미.

 

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를 알려줌

이 코드의 결과는 튜플로 나오는데

  1. 튜플의 첫 번째 값 : 상관계수를 뜻합니다.
  2. 두번째 값 : p-value
    • 귀무가설 : 상관 관계가 없다.(상관계수가 0이다.)
    • 대립가설 : 상관 관계가 있다.(상관계수가 0이 아니다.)
  3. 주의 사항 : 값에 NaN이 있으면 계산되지 않습니다. 반드시 .notnull()로 제외하고 수행해야 합니다.

 

데이터프레임속 값들간 상관계수 한꺼번에 구하기

 

# 데이터프레임으로 부터 수치형 데이터에 대한 상관계수 구하기
air.corr()
#air는 데이터프레임 이름