-
SK쉴더스 루키즈AI 7,8,9일차 - 데이터 전처리, EDA정보 보안 2025. 6. 18. 17:29
from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder, OneHotEncoder
StandardScaler
평균을 0, 표준편차를 1로 바꿔줌
즉, 데이터들을 정규화해서 "표준 정규분포"처럼 만들어줌[100, 120, 130] → [ -1.2, 0.0, 1.2 ] (대략)
MinMaxScaler
데이터를 0~1 사이로 비율 맞춰줌
예: 최소값 → 0, 최대값 → 1[100, 120, 130] → [0.0, 0.67, 1.0]
LabelEncoder
문자(카테고리)를 숫자로 바꿔줌
클래스 이름을 **0, 1, 2...**처럼 번호로 바꿈["dog", "cat", "cat", "bird"] → [2, 1, 1, 0]
OneHotEncoder
문자를 "0/1 벡터"로 바꿔줌
머신러닝 모델에 적합한 형태로 만들기 위함["cat", "dog", "bird"] →
[[1, 0, 0], # cat
[0, 1, 0], # dog
[0, 0, 1]] # bird평균 : 다 더해서 전체 갯수로 나눔
최빈값 : 가장 많이 등장
중앙값: 정렬 후 중앙
pandas에서 다음으로 구할 수 있다.
데이터 분산성 : 데이터가 평균을 기준으로 얼마나 퍼져있는 지
분산, 표준편차, 사분위수
분산 : 값이 클수록 데이터가 퍼져있음
각 데이터값에서 평균을 뺀 후(편차) 음수 제거를 위해 제곱한 후 이 값의 평균을 계산
표준편차 : 분산은 편차를 제곱한 다음 평균을 계산했기에 이의 제곱근을 구한 게 표준편차
분산과 달리 데이터와 동일한 단위를 사용하므로 해석하기 쉽다.
사분위수 : 데이터를 네 개의 구간으로 나누는 값
statistics 라이브러리로 이들을 사용할 수 있다.
대표적인 데이터 분포에는 3가지가 있다.
정규분포, 왜도, 첨도
정규분포는 데이터가 평균을 중심으로 대칭되어있다.
평균 중앙값 최빈값이 동일하고
데이터의 68%는 평균 +-1 표준편차 내에있고
95%가 평균 +-2 표준편차 내에있다.
왜도는 데이터의 비대칭성을 측정하는 값이다.
왜도가 +면 데이터가 오른쪽으로 꼬리가 길게 늘어나고 -면 그 반대다.
왜도가 +면 평균>중앙값>최빈값이고 -면 그반대다.
첨도는 분포의 꼭대기가 얼마나 뾰족한지 아니면 평평한지를 측정하는 값이다.
첨도가 클수록 (첨도>3) 뾰족하다. 중앙에 몰려있다. 극단치가 가끔 존재한다.
첨도가 낮을수록 (첨도<3) 평평하다. 고르게 퍼져있다.
데이터 분석을 할 때 여러 데이터셋을 합쳐야 할 때가 많은데, merge와 concat은 둘 다 데이터를 합치는
기능을 하지만 기준에 따라서 사용방식이 다르다고 한다.
merge는 기준열을 기반으로 데이터를 합친다 (sql의 join)
반대로 concat은 단순히 데이터를 이어붙인다.
데이터 분포 확인 방법도 2가지가 있다.
EDA : 데이터 탐색적 분석
데이터셋의 구조와 특성 탐색
데이터를 시각적으로 관찰하고 수치로 요약하고 데이터 분포, 이상치, 결측치 등을 확인
결측값은 평균값으로 대체, 삭제, 또는 예측값으로 대체
변수 간 관계를 시각적으로 탐색
나이, 성별, 연수입, 소비점수라는 4개의 열을 가지고 있는 파일을 분석하는 시간을 가졌다.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("Mall_Customers.csv")
df.columns = ['CustomerID', 'Gender', 'Age', 'AnnualIncome', 'SpendingScore']
df['Gender_Num'] = df['Gender'].map({'Male': 0, 'Female': 1})
print("기초 통계:\n", df.describe())
corr = df[['Gender_Num', 'Age', 'AnnualIncome', 'SpendingScore']].corr()
print("\n상관계수:\n", corr)
plt.figure(figsize=(6, 4))
sns.heatmap(corr, annot=True, cmap='coolwarm', fmt=".2f")
plt.title("Correlation Matrix")
plt.tight_layout()
plt.show()
나이와 소비점수는 음의 상관관계를 보여주고 있다.
sns.countplot(data=df, x='Gender')
plt.title("Gender Distribution")
plt.show()
sns.histplot(data=df, x='Age', bins=10, kde=True)
plt.title("Age Distribution")
plt.show()
sns.scatterplot(data=df, x='AnnualIncome', y='SpendingScore', hue='Gender')
plt.title("Income - Spending Score")
plt.show()
연수입이 50k$ 근처인 사람들은 소비점수가 50점 근처에 모여있다.
중산층은 소비를 비슷비슷하게 하는 경향이 있는걸까?
sns.scatterplot(data=df, x='Age', y='SpendingScore', hue='Gender')
plt.title("Age - Spending Score")
plt.show()
40세를 기점으로 소비점수가 60점 이상을 넘지 않는 경향을 보인다.
나이가 차면 사치를 멀리하고 경제관념이 잡히는 걸까?'정보 보안' 카테고리의 다른 글
SK쉴더스 루키즈AI 12,13일차 - 딥러닝,colab (0) 2025.06.24 SK쉴더스 루키즈AI 10, 11일차 - 머신러닝 (0) 2025.06.20 게임개발 19일차 (Unity Learn 9일차) (1) 2025.06.15 SK쉴더스 루키즈 6일차 - 파이썬 모듈, numpy (0) 2025.06.13 SK쉴더스 루키즈 5일차 - 파이썬 클래스 (0) 2025.06.12