[빅데이터 분석기사] 시험들어가기 직전 보기위한 코드 및 정리
작업 1유형
1. help
- 라이브리의 설명을 보기위해 사용
import sklearn
print(help(sklearn))
2. dir
파이썬에서 객체, 모듈, 패키지의 **속성(attribute)**과 **메서드(method)**를 나열해주는 함수
import sklearn
print(dir(sklearn))
['_BUILT_WITH_MESON', '__SKLEARN_SETUP__', '__all__', '__builtins__', '__cached__', '__check_build', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_built_with_meson', '_config', '_distributor_init', 'base', 'clone', 'config_context', 'exceptions', 'externals', 'get_config', 'logger', 'logging', 'os', 'random', 'set_config', 'setup_module', 'show_versions', 'sklearn', 'sys', 'utils']
3. NaN을 제외한 제일 많은 열 확인 방법
df.count().idxmax()
count()는 각 열(column)별로 결측값(Null 또는 NaN)이 아닌 데이터의 개수를 반환합니다.
idxmax()는 시리즈에서 가장 큰 값의 인덱스(열 이름)를 반환합니다.
4. 표준화(모표준편차 ddof = 0 )
(df[sub] - df[sub].mean()) / df[sub].std(ddof=0)
5. 표준화점수
from scipy.stats import zscore
result = zscore(df[sub].dropna()).max()
df[sub].dropna()는 열 sub에서 **결측값(NaN)**을 제거합니다.
zscore는 scipy.stats 모듈의 함수로, 입력 데이터에 대해 **표준화된 z-점수(z-score)**를 계산합니다.
6. 상관계수
df.corr()
- df.corr()는 데이터프레임의 열 간 상관계수를 계산합니다.
- 기본값은 피어슨 상관계수이며, 다른 방법도 지원합니다.
7. IQR (Interquartile Range)
데이터의 분포를 설명하는 중앙값 기반 통계량으로, 데이터의 중간 50%가 포함된 범위
데이터의 **세 번째 사분위수(Q3)**와 **첫 번째 사분위수(Q1)**의 차이
ex) var_6 컬럼의 1,3사분위수 각각 IQR의 1.5배 벗어난 이상치의 숫자를 구하라
q1 = df['var_6'].quantile(0.25)
q3 = df['var_6'].quantile(0.75)
iqr = q3-q1
min_ = q1 - 1.5 * iqr
max_ = q3 - 1.5 * iqr
r = df[(df['var_6'] < min_ ) | (df['var_6']>max_)].shape[0]
8. pd.to_datetime()
Datetime 객체로 변환합니다. 예: 20240124와 000845 → 2024-01-24 00:08:45.
9. df.str.zfill(숫자)
시간 값을 항상 '숫자'자리로 채웁니다. 예: "845" → "000845", "1205" → "001205".
10 .dt.total_seconds()
시간을 초 단위로 변환합니다.
- 예: 00:05:45 → 345 (345초).
11. .reset_index()
데이터프레임의 인덱스를 리셋(초기화)하는 기능을 제공. 이를 통해 기존의 인덱스를 열로 변환하거나 새로운 순차적인 정수 인덱스를 생성할 수 있음
12.map()
객체의 각 요소에 대해 함수를 적용하거나, 매핑 규칙을 정의하여 값을 변환할 때 사용
def category(x):
if x >=25:
return 'a'
elif x >=23:
return 'b'
elif x >= 18.5:
return 'c'
else:
return 'd'
df['bmi'] = df[df.columns[2]] / (df[df.columns[1]] /100)**2
df['bmi_category'] = df['bmi'].map(category)
result = df[df.bmi_category.isin(['a','d'])].shape[0]
print(result)
작업 2유형
1. 데이터를 학습용(train)과 테스트용(test)으로 나누는 함수.
from sklearn.model_selection import train_test_split
# 데이터를 학습용(train)과 테스트용(test)으로 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- 데이터가 80% 학습용, 20% 테스트용으로 나뉨.
- random_state는 결과를 재현 가능하게 만듭니다.
2. 모델의 예측값과 실제값 간의 평균 제곱 오차(MSE)를 계산하는 함수.
from sklearn.metrics import mean_squared_error
# 평균 제곱 오차 계산
mse = mean_squared_error(y_true, y_pred)
평가지표 RMSE 계산
rr = RandomForestRegressor(random_state =1)
rr.fit(x_train,y_train)
pred = rr.predict(x_test)
print('test rmse', np.sqrt(mean_squared_error(y_test,pred)))
3. 랜덤 포레스트(Random Forest) 알고리즘을 사용하는 회기 모델
from sklearn.ensemble import RandomForestRegressor
# 랜덤 포레스트 모델 초기화 및 학습
model = RandomForestRegressor(random_state=42)
model.fit(X, y)
# 새로운 데이터 예측
X_new = [[2, 3], [6, 7]]
predictions = model.predict(X_new)
4. 범주형 데이터를 숫자로 변환하는 레이블 인코더 클래스.
from sklearn.preprocessing import LabelEncoder
# LabelEncoder 객체 생성
label_encoder = LabelEncoder()
# 데이터를 숫자로 인코딩
encoded = label_encoder.fit_transform(categories)
# 숫자를 다시 원래 데이터로 변환
decoded = label_encoder.inverse_transform(encoded)
5.pd.get_dummies(df)
범주형 데이터를 원-핫 인코딩(One-Hot Encoding) 방식으로 변환. 이 함수는 범주형 데이터의 각 고유값을 별도의 열(column)로 변환하고, 해당 값이 있으면 1, 없으면 0을 표시합니다.
- 열 이름으로 범주 값 포함:
- 변환된 열 이름은 원래 열 이름 + 고유값 형태로 생성됩니다.
- 예: 열 이름이 Color이고 값이 ['Red', 'Blue']라면 결과 열 이름은 Color_Red, Color_Blue.
- 결측값 처리:
- 결측값(NaN)은 자동으로 무시되고, 모든 새 열에 0으로 표시됩니다.
import pandas as pd
# 데이터 준비
pre_x = pd.DataFrame({
'Color': ['Red', 'Blue', 'Green', 'Red']
})
# 원-핫 인코딩 수행
encoded_x = pd.get_dummies(pre_x)
print(encoded_x)
Color_Blue Color_Green Color_Red
0 0 0 1
1 1 0 0
2 0 1 0
3 0 0 1
6.df.to_csv('00000000.csv',index=Fasle)
데이터프레임을 csv 로 저장
작업 3유형
1. 선형관계 가장 큰 변수 찾아 상관계수를 구하여라
r = df.corr()['Target'].sort_values()[-2]
- df.corr()로 상관계수 행렬 계산.
- ['Target']로 Target과 다른 변수들의 상관계수를 추출.
- sort_values()로 상관계수를 오름차순 정렬.
- [-2]로 자기 자신 제외, 가장 높은 상관계수 추출.
2. 다중선형회귀분석
ex) Target 변수를 종속변수로 하여 다중선형회귀모델링을 진행했을 때 v2 컬럼의 회귀 계수는?
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 다중선형회귀분석
X = df.drop('Target', axis=1)
X = sm.add_constant(X) # 상수항 추가
y = df['Target']
model = sm.OLS(y, X).fit()
print(model.params['v2'])
- sm.add_constant(X):
- statsmodels는 기본적으로 상수항(intercept)을 포함하지 않으므로, 이를 수동으로 추가해야 합니다.
- add_constant는 입력 데이터프레임 X에 상수항 열을 추가하여 회귀 모델의 절편(β0\beta_0)을 학습할 수 있도록 합니다.
- sm.OLS(y, X):
- OLS(Ordinary Least Squares, 최소자승법): 선형회귀 알고리즘으로, 잔차(residual)의 제곱합을 최소화하는 방식으로 회귀 계수를 추정합니다.
- y: 종속 변수.
- X: 독립 변수(상수항 포함).
- .fit():
- 모델을 학습(fit)하여 회귀 계수(β0,β1,…βn\beta_0, \beta_1, \dots \beta_n)를 추정.
- model.params:
- 학습된 회귀 모델의 회귀 계수와 절편을 포함하는 시리즈(Series) 형태의 객체.
- 각 독립 변수의 이름과 해당 계수가 키-값 쌍으로 저장됩니다.
- model.params['v2']:
- 독립 변수 v2의 회귀 계수를 반환합니다.
- 이 값은 β_v2, 즉 v2가 종속 변수 Target에 미치는 영향을 나타냅니다.
3. 회귀 계수들이 가지는 p값들 중 최대 값은?
r = model.pvalues.max()
print(r)
model.pvalues.max()는 OLS 모델 결과에서 가장 큰 p-값을 반환합니다.
4. 로지스틱회귀분석
ex) train 데이터로 target을 종속변수로 로지스틱 회귀를 진행할 때 age 컬럼의 오즈비를 구하여라
import pandas as pd
import numpy as np
import statsmodels.api as sm
train = df.iloc[:210].reset_index(drop=True)
test = df.iloc[210:].reset_index(drop=True)
# 종속변수와 독립변수 설정
X = train.drop('target', axis=1)
y = train['target']
# 로지스틱 회귀모형 적합
model = sm.Logit(y, X).fit()
# age의 weight 오즈비 계산
odds_ratios = np.exp(model.params['age'])
odds_ratios
- sm.Logit(y, X):
- statsmodels의 로지스틱 회귀(Logistic Regression) 모델 클래스.
- .fit():
- 모델을 학습(fit)하여 회귀 계수(β\beta)를 추정.
.fit():
- 모델을 학습(fit)하여 회귀 계수(β)를 추정.
5. 오즈비 분석
오즈비 정의:
- 로지스틱 회귀에서, 특정 독립 변수의 **오즈비(Odds Ratio)**는 해당 변수가 종속 변수에 미치는 상대적 영향을 나타냄.
- 수식 : Odds Ratio=exp(β)
- exp(β_age): age가 1 단위 증가할 때, 종속 변수(target)이 1일 오즈의 변화 비율을 나타냄.
오즈비 해석:
- exp(βage)>1: age가 증가하면 종속 변수가 1일 확률이 증가.
- exp(βage)<1: age가 증가하면 종속 변수가 1일 확률이 감소.
- exp(βage)=1: age는 종속 변수에 영향을 미치지 않음.
ex) odds_ratios = 1.05127
- age가 1 단위 증가할 때, target이 1일 오즈는 약 5.1% 증가.
6. 잔차 이탈도 (residual deviance)
관측값과 예측값 간의 차이를 나타내며, 모델이 데이터를 얼마나 잘 설명하는지를 나타냅니다.
ex) train으로 로지스틱 회귀 진행했을 경우 잔차 이탈도 (residual deviance)를 계산하라
# 로지스틱 회귀모형 적합 (GLM 사용) -> 이항분포시 로지스틱회귀
model2 = sm.GLM(y, X, family=sm.families.Binomial()).fit()
# 잔차 이탈도(residual deviance) 계산
residual_deviance = model2.deviance
print(residual_deviance)
sm.GLM:
- **일반화 선형 모델(Generalized Linear Model)**을 구현하는 statsmodels 클래스.
- family=sm.families.Binomial()은 종속 변수가 **이항분포(Binomial distribution)**를 따르며, 로지스틱 회귀를 수행하도록 지정.
7. 로짓 우도값
로지스틱 회귀(Logistic Regression) 모델에서 사용되는 통계량으로, 모델이 관찰된 데이터를 얼마나 잘 설명하는지를 나타내는 척도입니다. 이는 모델의 예측 확률과 실제 데이터 간의 일치 정도를 측정합니다.
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 1. 데이터 준비
X, y = make_classification(n_samples=100, n_features=5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 2. 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 3. 예측 확률 계산
y_pred_prob = model.predict_proba(X_test)[:, 1] # 클래스 1의 확률
# 4. 로짓 우도값 계산
log_likelihood = np.sum(y_test * np.log(y_pred_prob) + (1 - y_test) * np.log(1 - y_pred_prob))
print("Log-Likelihood:", log_likelihood)
8. 오류율 계산
pred = (model.predict(test.drop(columns=['target'])) >0.5).astype('int')
from sklearn.metrics import accuracy_score
error_rate = 1- accuracy_score(test['target'],pred)
1 - accuracy_score(...):
- 오류율(error rate)을 계산합니다. 오류율은 모델이 틀린 예측의 비율로 정의됩니다:
- Error Rate=1−Accuracy
- 즉, 테스트 데이터에서 모델이 잘못 예측한 비율을 나타냅니다.
9..ppf
**"Percent-Point Function"**의 약자로, 확률분포에서 **누적분포함수(CDF)**의 역함수를 계산하는 데 사용됩니다.
lowe = round(mean - t_value * std/ np.sqrt(n),3)