파이썬을 이용한 탐색적 데이터 분석 (EDA) 실습 노트북
- 이 노트북은 탐색적 데이터 분석(EDA)의 기본 개념과 실습을 제공합니다.
- 기본적인 데이터 탐색 기법과 파이썬 라이브러리를 이용한 데이터 시각화 방법을 학습합니다.
- 학생들의 시험 성적 데이터를 사용하여 실제 데이터 분석 과정을 다룹니다.
소개
이 노트북은 탐색적 데이터 분석(EDA)의 기본 개념과 실습 문제를 제공합니다. EDA는 데이터를 이해하고 분석하는 첫 단계로, 데이터의 특성을 파악하고 패턴을 발견하는 과정입니다.
실습 노트북
Google Colab
학습 목표:
EDA의 목적과 중요성 이해하기
기본적인 데이터 탐색 기법 익히기
Python 라이브러리를 활용한 데이터 시각화 방법 배우기
1. 환경 설정 및 필요한 라이브러리 불러오기
먼저 필요한 Python 라이브러리들을 설치하고 불러오겠습니다.
# 필요한 라이브러리 설치 (Colab에서 실행 시)
!pip install pandas numpy matplotlib seaborn
# 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 그래프를 노트북 안에 표시하기 위한 설정
%matplotlib inline
각 라이브러리의 역할:
numpy: 수치 계산을 위한 라이브러리
pandas: 데이터 처리와 분석을 위한 라이브러리
matplotlib: 기본적인 그래프 그리기를 위한 라이브러리
seaborn: 통계적 그래프를 그리기 위한 라이브러리
2. 데이터 불러오기
이제 분석할 데이터를 불러오겠습니다. 이 예제에서는 학생들의 시험 성적 데이터를 사용합니다.
# CSV 파일에서 데이터 읽어오기
data = pd.read_csv('students.csv')
# 데이터 미리보기
print(data.head())
pd.read_csv()
함수는 CSV 파일을 읽어 pandas DataFrame으로 변환합니다.
head()
함수는 데이터의 처음 5행을 보여줍니다.
3. 기본적인 데이터 탐색
3.1 데이터 기본 정보 확인
# 데이터셋의 기본 정보 확인
print(data.info())
info()
함수는 데이터의 컬럼, 데이터 타입, 결측치 등 기본적인 정보를 제공합니다.
3.2 기술 통계량 확인
# 수치형 데이터의 기술 통계량 확인
print(data.describe())
describe()
함수는 수치형 데이터의 평균, 표준편차, 최소값, 최대값 등의 통계량을 보여줍니다.
3.3 결측치 확인 및 처리
# 결측치 확인
print(data.isnull().sum())
# 결측치 처리 (예: 평균값으로 대체)
data = data.fillna(data.mean())
isnull().sum()
은 각 컬럼의 결측치 개수를 보여줍니다.
fillna()
함수는 결측치를 지정한 값(여기서는 평균)으로 채웁니다.
4. 데이터 시각화
4.1 히스토그램
히스토그램은 데이터의 분포를 보여주는 그래프입니다.
# 수학 점수의 히스토그램
plt.figure(figsize=(10, 6))
plt.hist(data['math score'], bins=20)
plt.title('Distribution of Math Scores')
plt.xlabel('Score')
plt.ylabel('Frequency')
plt.show()
4.2 박스플롯
박스플롯은 데이터의 사분위수와 이상치를 보여주는 그래프입니다.
# 성별에 따른 수학 점수 박스플롯
plt.figure(figsize=(10, 6))
sns.boxplot(x='gender', y='math score', data=data)
plt.title('Math Scores by Gender')
plt.show()
4.3 산점도
산점도는 두 변수 간의 관계를 보여주는 그래프입니다.
# 수학 점수와 읽기 점수의 산점도
plt.figure(figsize=(10, 6))
plt.scatter(data['math score'], data['reading score'])
plt.title('Math Score vs Reading Score')
plt.xlabel('Math Score')
plt.ylabel('Reading Score')
plt.show()
5. 심화 분석
5.1 상관관계 분석
변수 간의 상관관계를 확인합니다.
# 상관관계 히트맵
plt.figure(figsize=(10, 8))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()
5.2 그룹별 분석
특정 기준으로 데이터를 그룹화하여 분석합니다.
# 성별에 따른 각 과목 평균 점수
gender_scores = data.groupby('gender')[['math score', 'reading score', 'writing score']].mean()
print(gender_scores)
6. 결론 및 인사이트 도출
지금까지의 분석을 바탕으로 다음과 같은 인사이트를 얻을 수 있습니다:
성별에 따른 점수 차이가 있는지
과목 간 상관관계가 어떤지
점수 분포가 정규 분포를 따르는지 등
추가적인 분석이나 의사 결정에 활용될 수 있습니다.
7. 추가 실습
다른 변수들의 분포도 확인해보세요.
부모의 교육 수준과 학생의 성적 간의 관계를 분석해보세요.
시각화 방법을 다양하게 적용해보세요 (예: 바이올린 플롯, 페어플롯 등).