728x90
반응형
빅데이터 분석 기사 실기 준비하면서 정리한 내용
공부한 내용 정리하는데 참고용, 시험 전날, 시험 보러 가는 길, 시험 시작 전 확인하면 좋을 것 같다.
공부할 때에는 눈으로 하지 말고, 머리로 외운다 생각하지 말고, 실제로 문제를 풀어보며 키보드를 치는 손가락으로 외운다고 생각하며 공부하는 게 좋다.
( help, dir 사용 방법 익히는 것은 필수 )
패키지
############
# 데이터 프레임
import pandas as pd
############
# 수학 계산
import numpy as np
############
# 전처리 (x_train, x_test 다 해야 함)
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import MinMaxScaler
############
# dataset 나누기
from sklearn.model_selection import train_test_split
############
# 모델 학습
from sklearn.ensemble import RandomForestClassifier # 분류
from sklearn.ensemble import RandomForestRegressor # 예측
### 선형 회귀
from sklearn.linear_model import LinearRegression
### 의사 결정 나무
from sklearn.tree import DecisionTreeClassifier
### SVM
from sklearn.svm import SVC
### K-NN
from sklearn.neighbors import KNeighborClassifier
### ANN
from sklearn.neural_network import MLPClassifier
############
# 모델 성능
from sklearn.metrics import confusion_matrix, f1_score, accuracy_score, mean_squared_error
############
# 통계 검정
from scipy.stats import shapiro, levene,
ttest_1samp, ttest_rel, ttest_ind,
f_oneway,
chisquare, chi2_contingency
작업형 1
dt = pd.read_csv('.csv', encoding='euc-kr')
# 컬럼 정보
df.info()
# 분포 정보
df.describe()
# 인덱스초기화
df.reset_index(drop=True)
# 중복 행 선택
df[['컬럼명','컬럼명']]
# 분위수
df['컬럼명'].quantile(0.25) # 1분위수(0.25) 2분위수(0.5) 3분위수(0.75)
## IQR
IQR = df['컬럼명'].quantile(0.75) - df['컬럼명'].quantile(0.25)
# 날짜 처리 ***
pd.to_datetime(df['컬럼명']).dt.year # 년도
import datetime
datetime.date(year, month, day) # 새 날짜 데이터 만들기
# 결측값 확인
df.isnull().sum()
# 결측치 행 제거
df.dropna()
# 중복행 제거
df['컬럼명'].drop_duplicates()
# 중복행 제거 : 변화하지 않은 데이터 구하기
# 중복행 -> 데이터여러개 -> 변화 있음
df['컬럼명'] - df['컬럼명'].drop_duplicates()
# 문자열 처리 관련해서는 .str 붙이기
df['컬럼명'].str.contains(str1)
df['컬럼명'].str.replace(' ', '')
df['컬럼명'].str.lower()
# 그룹
df.groupby(['컬럼명1','컬럼명2'])['그룹기준 컬럼명'].mean() # 그룹기준 컬럼명의 평균으로 그룹
# 정렬 ***
df['컬럼명'].sort_values(ascending=False)
# 데이터 개수
df['컬럼명'].value_counts()
# 데이터 타입 변경
df['컬럼명'].astype('int')
# 람다 사용
df['컬럼명'].map(lambda x : 1 if x in ['M','m'] else 0)
# 연령대 나누기
df['나이'] // 10 * 10 # // 두개 임
# 제곱
df['키'] ** 2
# 값 바꾸기 *****
df.loc[df['컬럼명'] >= 조건, '컬럼명'] = 값
# 컬럼 지우기
x_train = x_train.drop(columns=['컬럼명1', '컬럼명2']) # 컬럼1, 컬럼2 지움
# 결측값 대치
x_train['컬럼명'] = x_train['컬럼명'].fillna(x_train['컬럼명'].mean()) # 결측값 평균 대치
# x_train['컬럼명'].median() 중앙값
# x_train['컬럼명'].std() 표준편차
# 직전값 대치 x_train['컬럼명'].fillna(method='ffill')
# 다음값 대치 x_train['컬럼명'].fillna(method='bfill')
# 평균에서 1.5 표준편차
std1 = mean + (df['컬럼명'].std() * 1.5)
std2 = mean - (df['컬럼명'].std() * 1.5)
# OR 조건
df[(df['컬럼명'] >= std1) | (df['컬럼명'] <= std2)]['컬럼명'].sum()
# 70% 데이터 학습 데이터로 만들기
df.iloc[:int(len(df)*0.7), :]
# 테이블 두개 합치기
pd.concat([df1, df2],join='outer').fillna(0)
pd.merge(df1, df2,on='key column',how='outer') # key column 기준으로 합집합으로 merge
# 상관계수
df.corr()
# 이동평균
df[['컬럼명1','컬럼명2']].rolling(7).mean() # 7일 간격
# 1차 차분
df['컬럼명'].diff()
# 리스트 값이 포함되는가?
lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]
df.loc[df['컬럼명'].isin(lst)]
작업형 2
dt = pd.read_csv('.csv', encoding='euc-kr')
############
# 전처리 (x_train, x_test 다 해야 함)
x_train = x_train.drop(columns=['컬럼명1', '컬럼명2']) # 컬럼1, 컬럼2 지움
x_train['컬럼명'] = x_train['컬럼명'].fillna(x_train['컬럼명'].mean()) # 결측값 평균 대치
# x_train['컬럼명'].median() 중앙값
# x_train['컬럼명'].std() 표준편차
# 범주형 데이터가 범주타입이 아닐때 범주 타입으로 바꾸기
df['Class'].astype('category')
# 범주형 있을 때
x_train = pd.get_dummies(x_train['컬럼명'])
from sklearn.preprocessing import LabelEncoder
x_train['컬럼명'] = LabelEncoder().fit_transform(x_train['컬럼명']) # 범주-> 숫자로
# 값 클 때
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_train['컬럼명'] = scaler.fit_transform(x_train['컬럼명'])
# reshape error나면
x_train['컬럼명'] = scaler.fit_transform(np.array(x_train['컬럼명']).reshape(-1, 1))
# column 이름 동일하게 맞추기
columns = list(set(df_data.columns).intersection(df_test.columns)) # intersection. set의 교집합
############
# dataset 나누기
from sklearn.model_selection import train_test_split
x_train, x_valid, y_train, y_valid = train_test_split(df_data2, df_label, test_size = 0.25)
############
# 모델 학습
from sklearn.ensemble import RandomForestClassifier # 분류
from sklearn.ensemble import RandomForestRegressor # 예측
model = RandomForestClassifier(n_estimators = 300, max_depth = 10)
model.fit(x_train, y_train)
############
# 모델 성능
from sklearn.metrics import confusion_matrix, f1_score, accuracy_score, mean_squared_error
cm = confusion_matrix(y_valid, pred, labels=[1,0]) # 정답, 예측, 라벨
print(accuracy_score(y_valid, pred))
print(f1_score(y_valid, pred))
print(mean_squared_error(y_valid, pred, squared=False)) # squared=False하면 RMSE이 된다.
############
# 모델 평가
# 예측값 구하라
pred = model.predict(x_test)
df = pd.DataFrame(pred)
# 확률값 구하라
pred = model.predict_proba(x_test)
df = pd.DataFrame(pred) # pd.DataFrame({"ID":df2["ID"],...})
# 확률값 순서 (라벨 순서)
print("Class Labels:", model.classes_)
df = df.iloc[:, 0] # df= df.iloc[:, 1]
############
# 파일 저장
result = pd.DataFrame({'id':x_test['id'], 'pred':df})
result.to_csv('000000.csv', index = False)
# 만약 x_test['id'] 안되면 x_test.index
# 1부터 index 지정 : x_test['id'] = range(1, len(result) + 1)
작업형 3
import pandas as pd
from scipy.stats import shapiro, levene,
ttest_1samp, ttest_rel, ttest_ind,
f_oneway,
chisquare, chi2_contingency
# from scipy.stats
# t-test를 하라
# shapiro, pvalue 작으면 wilcoxon, pvalue 크면 ttest_1samp,
# after, befor있으면 ttest_rel (쌍체표본)
# levene, pvalue 작으면 equal_var을 False, pvalue 크면 ttest_ind,
# f-test를 하라
# f_oneway
# chi제곱을 하라
# chisquare, pd.crosstab으로 만든 테이블로 chi2_contingency
######################
### t-test
#alternative
# - two-sided
# - less
# - greater
# 일표본
정규성 = shapiro(df['컬럼'])
# 정규성 : 우리는 정규분포를 따르지 않기를 원함
# 정규성 pvalue > 유의수준(mu) (shaprio pvalue가 좀 크다)
ttest_1samp(samp, mu, alternative='')
# 정규성 pvalue < 유의수준(mu) (shaprio pvalue가 작다)
wilcoxon(samp - mu, alternative='')
# 대응표본 (after, before) ->쌍체표본 t검정
ttest_rel(samp1, samp2, alternative)
ttest_rel(after, before, alternative)
# 독립표본 (아예 상관 없는 두개의 독립 변수)
등분산성 = levene(samp1, samp2)
# 등분산성 : 우리는 등분산성을 따르지 않기를 원함
# 등분산성 pvalue > 유의수준 (levene pvalue가 크다)
ttest_ind(samp1, samp2, alternative)
# 등분산성 pvalue < 유의수준 (levene pvalue가 작다)
ttest_ind(samp1, samp2, alternative, equal_var='False')
######################
### anova
f_oneway(samp1, samp2)
######################
###chisquare
# 기댓값 비율로 준다면,
관찰= [1, 2, 3, 4, 5]
기대 = sum(관찰) * np.array([0.2, 0.2, 0.2, 0.2, 0.2])
#적합
chisquare(관찰, 기대)
#독립/동질
table = pd.crosstab(a, b)
chi2_contingency(table)
###################
### 회귀 계수 구하기
from sklearn.linear_model
# 수치
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x,y)
print("회귀 계수:", model.coef_)
print("절편:", model.intercept_)
print("오즈비:", np.exp(model.coef_[0][0]))
# 범주
from sklearn.linear_model import LogisticRegression
y = LabelEncoder().fit_transform(y) # 범주-> 숫자로
model = LogisticRegression(max_iter=1000)
###################
### 기타
from scipy.stats import poisson
poisson.pmf(5,3) # 하루 평균 3명이 잡지를 구매할 떄 하루에 정확히 5명의 고객이 잡지를 구매할 확률
1-poisson.cdf(1,3) # 하루에 적어도 3명이 잡지를 구매할 확률
728x90
반응형
'🥇 certification logbook' 카테고리의 다른 글
[Coursera/IBM] IBM AI Engineering PC 및 Machine Learning with Python 코스 소개 (0) | 2025.04.30 |
---|---|
[ADsP] 군집분석 (0) | 2023.06.18 |
[python 통계분석] 교차분석(카이제곱 검정) (0) | 2023.06.18 |
[python 통계분석] t-test 검정 (0) | 2023.06.18 |
[python 데이터 전처리] 데이터 스케일링 (data scaling) (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 07_Merge , Concat (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 06_Pivot (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 05_Time_Series (0) | 2023.06.13 |