Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

철솜_STUDY

데이터 분석가가 반드시 알아야 할 모든 것_CH.10_(1) 본문

Self-Taught/Data Analysis

데이터 분석가가 반드시 알아야 할 모든 것_CH.10_(1)

CC_flavor.철근 2024. 9. 29. 14:33

Ch.10 _ 데이터 탐색과 시각화

 

EDA와 데이터 시각화는 구별해서 생각해야 한다.

데이터 시각화의 목적은 분석 결과를 client에게 효과적으로 전달하기 위한 것이다.

 

여러 가지 시각화 방법이 있고 대표적으로 다음과 같은 종류가 있다.

시간 시각화 / 비교 시각화 / 분포 시각화 / 관계 시각화 / 공간 시각화

 

1. 탐색적 데이터 분석

Explotratory Data Analysis = EDA

 

EDA는 가공하지 않은 raw 데이터를 있는 그대로 탐색하고 분석하는 것이다. 

아무런 가공을 하지 않았기 때문에 극단적인 해석을 피해야 하고 기초 통계 지식을 활용해 어떤 내용을 살펴봐야 할 지 대략적으로 판단하는 단계라고 볼 수 있을 것이다.

 

EDA의 목적

  • 데이터의 형태와 척도가 분석에 알맞게 돼있는지
  • 데이터의 평균, 분산, 분포, 패턴 등의 확인을 통해 데이터 특성 파악
  • 데이터의 결측값이나 이상치 파악 및 보완
  • 변수 간의 관계성 파악
  • 분석 목적과 방향성 점검 및 보정

 

#엑셀을 활용한 EDA

엑셀을 통해 데이터를 직접 살펴볼 경우, 데이터셋의 전체적인 구조나 각 변수 간의 대략적인 관계를 파악할 수 있다.

그 후 Pivot 테이블을 생성해 데이터를 다시 살펴볼 수 있다.

 

엑셀을 누구에게나 익숙한 툴이기 때문에 현직에서도 많이 사용하지만, 본격적인 데이터 탐색이라고 보기에는 무리가 있다.

 

 

#탐색적 데이터 분석 실습

import seaborn as sns                   #시각화 패키지
import matplotlib.pyplot as plt         #시각화 패키지
import pandas as pd


sns.set(color_codes=True)
%matplotlib inline

df.info()
df['meal'].value_counts()


numeric_df = df.select_dtypes(include=['float64', 'int64'])

df.describe()
numeric_df.skew()
numeric_df.kurtosis()

 

info() 함수는 데이터에 대한 전반적인 정보를 나타낸다.

데이터를 구성하는 행과 열의 크기, 각 칼럼을 구성하는 값의 자료형, 결측치 여부를 알려준다.

특정한 칼럼의 정보를 보고 싶어 value_counts()를 이용해 'meal' 칼럼의 구성을 확인했다.

 

describe() 함수는 기술통계적 측정을 위한 정보를 제공한다. 평균, 표준편차, 최대, 최소값 등을 한 번에 보여준다.

그러나 각 column이 어떤 자료인지를 반드시 염두에 둔 채 describe 속 정보를 해석해야 한다.

 

skew() 함수와 kurtosis() 는 각 칼럼의 왜도와 첨도를 해석한다. 

*왜도 _ 얼마나 중심에서 멀리 떨어진 분포를 가졌는가

*첨도 _ 얼마나 뾰족한 분포를 가졌는가

 

**책과 다르게 skew( ), kurtosis( )를 적용할 때 데이터 속 문자열 데이터가 문제가 된다.

그래서 select_dtypes(include=[ ])라는 함수를 이용해 필터링을 적용하고 두 함수를 적용해줬다.

 

 

sns.distplot(df['lead_time'])

변수 'lead_time' : 예약 날짜로부터 투숙 날짜까지의 일수 차이 

ex) 0 : 당일 체크인으로 확인 가능 -> 시스템 상 기록이 남지 않은 데이터를 0으로 처리한 것인지 확인할 필요 있음 

 

* distplot(대상 dataFrame) _  * 정보 더 정리하기

 

 

sns.violinplot(x='hotel', y='lead_time', data=df, inner=None, color='.8')
sns.stripplot(x='hotel', y='lead_time', data=df, size=1)

 

 

*violinplot(x='', y='', data = 대상 df, inner=, color = ...)

*stripplot()

 

2. 공분산과 상관성 분석

변수 간의 관계를 파악하는 단계로 설명할 수 있다. 이 때 X와 Y의 관계뿐 아니라 X와 X의 관계 또한 살펴봐야 한다. X와 X의 관계는 다중공선성을 유발할 수 있기 때문에 살펴볼 필요성이 있다.

 

공분산과 상관계수는 각 변수의 변동이 얼마나 닮았는지를 표현하지만,계산 방식에서 차이점이 있다.

 

#공분산 _ 서로 공유하는 분산을 의미한다. 

 

Cov(X1, X2) = Sum{(X1의 편차)*(X2의 편차)}/(n-1)

 

#상관계수 

공분산은 한계가 있다. 각 X 변수의 척도 기준이 그대로 반영돼 숫자값으로 나타나기 때문에이 숫자값이 해당 변수 간의 진짜 상관 관계를 나타낸다고 믿기 힘들다.그래서 나온 것이 피어슨 상관계수이다.

 

피어슨 상관계수는 공분산을 X1과 X2의 변동 정도로 나눠준 것이다.

 

P(X1, X2) = Cov(X1, X2)/루트(Var(X1)*Var(X2))

 

일반적으로 피어슨 상관계수가 0.7 이상일 때 상관관계가 높다고 판단하며, 0.4 이상이면 어느 정도 상관관계가 있다고 판단한다.

 

상관계수는 두 변수의 선형적 관계만을 측정할 수 있다. 그러므로 두 변수가 선형적이지 않고, 곡선과 같은 관계성을 갖는다면, 해당 관계성은 상관계수를 통해 나타낼 수 없다.그러므로 산점도 그래프와 같은 시각적인 방법을 함께 이용해 변수 간의 관계성을 판단해야 한다.

 

 

#R^2 = 결정계수 = 상관계수^2총 변동 중에서 회귀선에 의해 설명되는 변동이 차지하는 비율

 

3. 실습

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.read_csv("C:\\Users\\rud92\\Downloads\\coefficients_all.csv\\coefficients_all.csv")
df.head()


sns.set(font_scale=1.1)            #폰트 크기 설정
sns.set_style('ticks')             #축 눈금 설정
sns.pairplot(df, diag_kind='kde')    #diag_kind = 'kde' >> 상관계수가 1이면 분포로 표시하기
plt.show()

 

 

2024.09.29 - [Self-Taught] - Python 문법 정리 _ ongoing~