AIVLE School DX 3기

[에이블스쿨 4주차] 데이터 분석2

김보통김보름 2023. 2. 22. 02:41
728x90
반응형

 

🤔DX 컨설턴트가 가져야 할 질문

❓ 왜 이렇게 되는 거지?
❓ 가설이 진짜인가?

🔄복습

Business Understanding Data Understanding Data Preparation
⭐무엇이 문제인가⭐

1. 문제정의

2. 분석목표
3. 가설(x➡y)
1. 원본 식별
2. 하나의 DataFrame
3. 분석 EDA & CDA

x : feature
y : target, label


행 : 분석단위
1. 모든 셀은 값이 있어야한다.
=> NaN조치(삭제, 채우기)
2. 값은 숫자여야 한다.
3. (옵션) 숫자의 범위 일치
대립가설 분석단위는 2차원만 있지 않다 NaN 삭제
삭제해도 표본에 무의미할 때

행 삭제 : NaN이 적을 때
열 삭제 : NaN이 많을 때

'가설이 진짜인가?' 판단하기 위한 도구

  1. 단변량 분석 : 개별 변수의 분포
  2. 이번량 분석 1 : feature(x)target(y) 간의 관계(x → y 가설 확인)
  3. 이변량 분석 2 : feature들 간의 관계(x1, x2,...)

 


1. 숫자로 요약하기: 정보의 대푯값 → 기초 통계량

  • 평균(mean)
  • 중앙값(median)
  • 최빈수(mode)
  • 사분위수(Quantile)

2. 구간을 나누고 빈도수 계산 → 도수분포표(frequency table)


▪ 평균(mean)
   - 산술 평균
   - (기하 평균, ⭐조화 평균)

 중위수(median)
   - 데이터의 순서상 가운데 위치한 값

 최빈값(mode)

   - 데이터 중에서 가장 빈번한 값

 

 

평균

# 넘파이 함수 이용하기
np.mean(df['coulmns'])

# 판다스의 mean 메소드 이용하기
df['coulmns'].mean()

함수와 메서드 차이 : 2023.02.25 - [Python] - 함수와 메서드의 차이점

 

⭐평균의 함정

평균은 집단을 대표하지 못한다.


중위수

# 넘파이 함수 이용하기
np.median(df['coulmns'])

# 판다스의 median 메소드 이용하기
df['coulmns'].median()

 

descibe() 데이터 프레임의 숫자형 변수들에 대해서 기초 통계량 표시
descibe().T()  전치행렬
describe(include='all') 전체 변수들 기초통계량 조회

최빈값

# 판다스의 메소드 이용하기
df['coulmns'].mode()

 

Histogram

😢단점
bin(구간)의 너비(개수)를 어떻게 잡는지에 따라 전혀 다른 모양이 될 수 있음
# matplotlib 코드
plt.hist(df['columns'], bins = 30, edgecolor = 'c') #bins 등분
plt.xlabel('columns')
plt.ylabel('~~')
plt.show()

# seborn 코드
sns.hisplot( x = 'columns', data = DataFrame, bins = 30)
plt.show()

해석 1 : 표를 보고 유출할 수 있는 내용

해석 2 : 도메인 지식을 이용해 표를 보고 유출해 내는 내용

 

 

# Histogram 여러개 그리기

# for루프
b = [8, 16, 32, 64]
plt.figure(figsize=(15, 10))
for i, v in enumerate(b) :
	plt.subplot(2, 2, i+1)
sns.histplot(x = 'Age', data = titanic, bins = v)
plt.title(f'bins = {v}')
plt.show()

enumerate : 2023.02.26 - [Python] - [Python] enumerate

 


KDE Plot (커널 밀도 추청 그래프)

Histogram 그래프의 단점을 보완
막대의 너비를 가정하지 않고, 모든 점에서 데이터의 밀도를 추정

사용법 : sns.kdeplot(변수명)

# seaborn
sns.kdeplot(DataFrame['colums'])
plt.show()
# histogram과 kde plot 동시에 그리기

sns.histplot( x = 'columns', data =dataFrame, kde = True)
plt.show()

 


Boxplot

💥주의
NaN이 있으면 그래프가 그려지지 않음.

IQR : Q3 - Q1(1사분위 ~ 3사분위)
Lower fence : [min] vs [Q1 - 1.5 * IQR], 둘 중 큰 값
Upper fence : [max] vs [Q3 + 1.5 * IQR], 둘 중 작은 값

plt.boxplot(시리즈)
plt.grid()
plt.show()
# 가로로 그리기

plt.boxplot(시리즈, vert = False)
plt.grid()
plt.show()

3σ 이상이면 이상치
1.5 x IQR ≒ 3σ

가변수화 : 모델링을 위해 범주를 숫자로 바꿔주는 것


3️⃣범주형 변수 숫자로 요약하기

▪ 범주별 빈도수
   - 시리즈.value_counts()
▪ 범주별 비율
   - 범주별 빈도수를 전체 데이터 수(행 수)로 나누기
   - Df.shape : 데이터프레임의 행, 열, 수를 반환

   - 이 중 첫 번째 값[0]

범주별 빈도수

DataFrame['columns'].value_counts()

범주별 비율

DataFrame['columns'].value_counts() / DataFrame.shape[0]

✅요약


💙요약

  기초통계량 그래프
숫자 min, max,
mean, std,
사분위수
histogram
kde plot
box plot
범주 범주별 빈도수
범주별 비율
bar
sns.countplot
728x90