[SK쉴더스 루키즈 24기] 기초통계(2) 데이터 분석과 상관관계

아굥·2024년 12월 21일
1

SK Shieldus Rookies

목록 보기
6/32

데이터 분석(1) 기초 분석

1. 데이터 탐색적 분석(EDA)

데이터 분석 과정에서 데이터를 이해하고 통찰을 얻기 위한 초기 분석 단계

1) 주요 목적

  • 데이터의 기본 특성 이해: 데이터를 시각적으로 관찰하고 수치로 유약하여 데이터 분포, 이상치, 결측치 등을 확인
  • 데이터 정리: 결측 값이나 이상치를 처리하고 데이터를 분석 가능한 상태로 준비
  • 가설 수립 및 데이터 기반 의사 결정: 데이터를 관찰하여 분석 방향과 가설을 수립
  • 문제 발견: 분석 중 문제가 될 수 있는 요소를 확인

2) 주요 단계

① 데이터의 기본 특성 이해: 불러오기 및 기본 정보 확인(데이터셋 크기, 데이터 유형 등)

import pandas as pd

df = pd.read_csv('data.csv')

print(df.head())						# 상위 데이터 5행 확인
print(df.info())						# 데이터 타입과 결측치 확인
print(df.describe())					# 수치형 데이터의 요약 통계량

② 결측 값과 이상치 확인

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

df = pd.read_csv('data.csv')

print(df.isnull().sum())				# 결측값 확인

sns.boxplot(x=df['column_name'])		# 이상치 시각화
plt.show()
  • 처리 방법: 삭제, 대체(평균값, 중앙값 또는 특정 값으로)

③ 데이터 분포 확인: 데이터가 정규 분포를 따르는지 확인

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.csv')

df['column_name'].hist(bins=30)
plt.show()

④ 변수 간 관계 탐색: 두 변수 사이 상관관계를 확인하거나 그룹별 통계량을 계산
⑤ 시각화: 데이터를 직관적으로 이해할 수 있게 도와줌

EDA의 결과물

  • 데이터셋의 구조와 특성에 대한 이해
  • 이상치와 결측치 처리계획
  • 데이터 분포와 변수 간 관계에 대한 통찰
  • 분석 방향성 설정 및 가설 정립

2. 기초 통계량 계산

1) 주요 기초 통계량

① 중심 경향성: 데이터의 대표 값을 나타냄

  • 평균값(Mean): 데이터의 합을 데이터 개수로 나눈 값
  • 중앙값(Median): 데이터를 크기 순으로 정렬했을 때 가운데 위치한 값
  • 최빈값(Mode): 데이터에서 가장 자주 나타나는 값

② 산포도: 데이터가 얼마나 흩어져 있는지 측정

  • 분산(Variance): 데이터가 평균으로부터 얼마나 떨어져있는지 나타내는 값
  • 표준편차(Standard Deviation): 분산의 제곱근, 데이터의 흩어짐 정도를 나타냄
  • 범위(Range): 데이터의 최대값과 최소값의 차이

③ 데이터 분포 특성: 데이터 분포의 모양과 특성을 이해

  • 왜도(Skewness, 기울기): 데이터 분포가 비대칭인지 나타냄
    ㄴ> 양수면 오른쪽으로 꼬리가 긴 분포, 음수면 왼쪽으로 꼬리가 긴 분포
  • 첨도(Kurtosis): 분포의 뾰족한 정도를 나타냄
    ㄴ> 양수면 분포가 뾰족하고, 음수면 분포가 평평함

2) Python을 활용한 통계량 계산

① 데이터 준비

pip install scipy

② 주요 통계량 계산

import pandas as pd

data = {
	'scores': [85, 90, 78, 92, 88, 76, 95, 89, 77, 85]
}

df = pd.DataFrame(data)

mean = df['scores].mean()							# 평균
median = df['scores].median()						# 중앙값
mode = df['scores].mode()[0]						# 최빈값
variance = df['scores].var()						# 분산
std_dev = df['scores].std()							# 표준편차
range_value = df['scores].max() - df['scores].min()	# 범위

③ 데이터 분포 특성 계산

import pandas as pd
from scipy.stats import skew, kurtosis

skewness = skew(df['scores'])						# 왜도
kurt = kurtosis(df['scores'])						# 첨도

3. 데이터의 기본 구조 파악

1) 데이터의 기본 구조

① 데이터셋의 크기: 몇개의 행(row)과 열(column)로 구성되어 있는지 확인
② 데이터 타입: 각 열의 데이터 유형을 이해 -> 유형은 분석 방법에 영향을 미침

  • 수치형 데이터: 정수형, 부동소수점
  • 범주형 데이터: 특정 그룹이나 클래스
  • 문자형 데이터: 텍스트 데이터
  • 날짜/시간 데이터: 시간 기반 데이터

③ 변수의 이름과 의미: 데이터셋에 포함된 변수(컬럼)의 이름과 그 의미를 파악
④ 결측값: 데이터셋에 비어 있는 값이 있는지 확인
ㄴ> 분석 결과에 영향을 미칠 수 있으므로 반드시 처리해야 함
⑤ 데이터 분포: 변수의 분포를 파악하여 데이터가 어떻게 구성되어 있는지 이해
⑥ 중복값: 동일한 행이 여러 번 반복되는지 확인

2) 기본 구조 파악하는 방법

import pandas as pd

data = {
	'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
    'Age': [25, 30, None, 35, 29],
    'Salary': [50000, 60000, 75000, 80000, None],
    'Department': ['HR', 'IT', 'Finance', 'IT', 'HR']
}

# ① 데이터 준비
df = pd.DataFrame(data)

# ② 데이터셋의 크기 확인
print(df.shape())

# ③ 데이터 타입 및 결측값 확인
print(df.info())

# ④ 통계적 요약
print(df.describe())

# ⑤ 결측값 확인
print(df.isnull().sum())

# ⑥ 데이터 타입 확인
print(df.dtypes)

# ⑦ 중복값 확인
print(df.describe().sum())

3) 구조 파악 후 할 수 있는 일

  • 분석 전략 설정: 각 변수 타입에 따라 분석 방법을 설정
  • 데이터 전처리: 결측값 처리나 데이터 타입 변환
  • 데이터 시각화: 변수 간 관계를 시각적으로 탐색

데이터 분석(2) 그룹화와 집계

1. 그룹별 집계와 피벗 테이블 생성

1) 그룹별 집계

데이터를 특정 기준으로 묶은 후(그룹화) 각 그룹에 대해 다양한 연산 수행

  • 대량의 데이터를 요약하고 패턴 파악 시 사용
import pandas as pd

data = {
	'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
	'Department': ['HR', 'IT', 'HR', 'IT', 'Finance'],
	'Salary': [50000, 60000, 55000, 70000, 65000]
}

df = pd.DataFrame(data)
grouped = df.groupby('Department')['Salary'].mean()

2) 피벗 테이블

데이터를 행(row)과 열(col)로 재구성하여 원하는 방식으로 요약하는 테이블

  • 여러 집계 연산을 한 번에 수행할 수 있어 유연성이 뛰어남
  • 다차원 데이터를 요약하거나 여러 기준에서 분석 시 사용
import pandas as pd

data = {
	'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
	'Department': ['HR', 'IT', 'HR', 'IT', 'Finance'],
	'Salary': [50000, 60000, 55000, 70000, 65000]
}

df = pd.DataFrame(data)

pivot_table = pd.pivot_table(df, values='Salary', index='Department', aggfunc='mean')

2. 데이터 간 비교 분석

두 개 이상의 데이터 집합을 비교하여 차이점, 유사점, 상관관계 등을 분석하는 작업

  • 데이터의 경향이나 패턴을 파악하고 의사결정을 돕는데 사용

중요성

  • 경향 파악: 데이터 간 변화를 이해하면 미래를 예측하거나 문제 해결할 수 있음
  • 효율적인 의사 결정: 데이터를 비교하면 어떤 선택이 더 효과적인지 판단
  • 실생활 적용: 다양한 분야에서 활용 가능

비교 분석 방법

① 기술 통계 비교: 각 데이터셋의 기본 통계를 계산(평균값, 최대값, 중간값 등)하여 비교

import pandas as pd

data1 = {'sales': [100, 200, 150, 300]}
data2 = {'sales': [120, 220, 180, 260]}

df1 = pd.DataFrame(data1, columns=['sales'])
df2 = pd.DataFrame(data1, columns=['sales'])

print(df1.describe())
print(df2.describe())

② 시각화 비교: 데이터를 그래프로 표현하여 직관적으로 비교

import pandas as pd
import matplotlib.pyplot as plt

x = ['Q1', 'Q2', 'Q3', 'Q4']
y1 = [100, 200, 150, 300]
y2 = [120, 220, 180, 260]

plt.plot(x, y1, label='Dataset 1', marker='o')
plt.plot(x, y2, label='Dataset 2', marker='o')
plt.title('Quarterly Sales Comparison')
plt.xlabel('Quarter')
plt.ylabel('Sales')
plt.legend()
plt.show()

③ 상관 관계 분석: 두 데이터셋이 서로 어떤 관계를 갖고 있는지 분석

  • 범위는 -1 ~ 1까지: 1이면 양의 상관 관계, 0이면 관계 없음, -1이면 음의 상관 관계
import numpy as np

dataset1 = [100, 200, 150, 300]
dataset2 = [120, 220, 180, 260]

difference = [b - a for a, b in zip(dataset1, dataset2)]

④ 차이 분석: 두 데이터 집합 간 차이를 계산하여 변화량 분석

import numpy as np

dataset1 = [100, 200, 150, 300]
dataset2 = [120, 220, 180, 260]

correlation = np.corrcoef(dataset1, dataset2)[0, 1]

⑤ 피벗 테이블을 사용한 비교: 여러 기준에서 데이터 비교 시 유용

import pandas as pd

data = {
	'Region': ['East', 'East', 'West', 'West', 'East'],
	'Year': [2021, 2022, 2021, 2022, 2021],
	'Sales': [500, 700, 200, 300, 600]
}

df = pd.DataFrame(data)

pivot = pd.pivot_table(df, values='Sales', index='Region', columns='Year', aggfunc='sum')

상관관계와 회귀 분석 개요

1. 상관계수와 상관행렬

1) 상관계수

두 변수 간의 선형 관계의 강도와 방향을 나타내는 값

값의 범위

  • -1: 두 변수는 완벽한 음의 상관 관계 (하나가 증가 -> 다른 것은 감소)
  • 0: 두 변수는 상관 관계가 없음 (관계 없거나 비선형적)
  • 1: 두 변수는 완벽한 양의 상관 관계 (하나가 증가 -> 다른 것도 증가)

2) 상관행렬

여러 변수 간의 상관계수를 표 형태로 보여줌


2. 단순 회귀 분석 개념

하나의 독립 변수(x)와 종속 변수(y) 사이의 관계를 모델링하여, x를 이용해 y를 예측하는 방법

  • 데이터가 선형적 관계를 갖고 있을 때 유용
  • 결과는 1차 방정식으로 표현 -> 𝑌 = 𝑎𝑋 + 𝑏
    ㄴ> a: 기울기 (독립 변수가 1 증가 시, 종속 변수는 얼마나 증가하는지)
    ㄴ> b: 절편 (독립 변수가 0 일 때 종속 변수의 예상 값)

회귀 분석의 주요 개념

  • 잔차: 실제 값과 회귀선(예측 값) 간의 차이
  • 최소제곱법: 잔차의 제곱합이 최소가 되도록 회귀선을 찾는 방법
    ㄴ> 최소일 때 가장 적합한 선형 방정식을 얻을 수 있음
  • R² 값(결정 계수): 회귀 모델이 데이터를 얼마나 잘 설명하는지
    ㄴ> 값의 범위는 0~1이며, 1에 가까울수록 데이터를 잘 설명함
  • 시각적 이해: 데이터를 산점도로 표현하고 그 위에 회귀선을 추가

3. 변수 간 관계 분석

두 변수나 여러 변수 간의 상관성이나 영향력을 이해하고, 한 변수가 다른 변수에 어떤 영향을 미치는지 분석하는 과정

관계

  • 상관 관계: 두 변수 간의 변화가 함꼐 나타나는 경우 (서로 연관성 있음)
  • 인과 관계: 한 변수의 변화가 다른 변수에 직접적인 영향을 미치는 경우

1) 상관 관계와 인과 관계의 차이

  • 상관 관계는 인과 관계가 아닐 수 있음
    ㄴ> 상관 관계는 단지 두 변수 간에 규칙적으로 변하는 패턴이 있음을 나타냄

2) 관계 분석 도구

  • 상관 계수: 두 변수 간의 관계를 수치화 하여 -1 ~ 1사이 값으로 표현함
  • 산점도: 두 변수의 데이터를 시각화 하여 관계를 직관적으로 이해
  • 회귀 분석: 두 변수 간 관계를 선형 방정식으로 나타내어 한 변수를 기반으로 다른 변수를 예측
profile
열심히 살아보아요

0개의 댓글