공부/자격증

[빅데이터 분석기사] 시험들어가기 직전 보기위한 코드 및 정리

Moonie' 2024. 11. 23. 23:52
반응형

작업 1유형

1. help

-  라이브리의 설명을 보기위해 사용

import sklearn
print(help(sklearn))

 

 

import statsmodels.api as sm

# `help()` 출력 상위 100줄만 표시
help_output = help(sm.OLS)  # sm.OLS의 도움말 가져오기
help_lines = str(help_output).splitlines()  # 출력 내용을 줄 단위로 분리
print("\n".join(help_lines[:1]))  # 상위 100줄 출력

 

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=1Accuracy
  • 즉, 테스트 데이터에서 모델이 잘못 예측한 비율을 나타냅니다.

 

9..ppf

**"Percent-Point Function"**의 약자로, 확률분포에서 **누적분포함수(CDF)**의 역함수를 계산하는 데 사용됩니다.

lowe = round(mean - t_value * std/ np.sqrt(n),3)

반응형