1. 이론
1) 코드 내 이론
a) 구간변수 필터링(범주형은 필터링 할게 없었음)
def interval_variables(self):
df = self.df
# 결측값 필터링
cols1 = ['AGEP', 'BDSP', 'CONP', 'ELEP', 'GASP', 'HINCP', 'NRC', 'RMSP', 'VALP'] # 구간변수 처리 시작
print(df[cols1].describe())
print(df[cols1].skew())
print(df[cols1].kurtosis())
print (df['CONP'].value_counts(normalize=True))
df.drop('CONP', axis=1, inplace=True) # 결측값 99.6% => 50% 이상-> 필터링
print(df.shape)
# 이상값 필터링
c1 = df['ELEP'] <= 500
c2 = df['GASP'] <= 311
c3 = df['HINCP'] <= 320000
df = df[c1 & c2 & c3] # 최대값이 상한값을 초과한 것들 -> 필터링
cols2 = ['AGEP', 'BDSP', 'ELEP', 'GASP', 'HINCP', 'NRC', 'RMSP', 'VALP'] # 필터링에서 'CONP' 빠짐
print(df[cols2].describe())
print(df['VALP_B1'].value_counts(normalize=True)) #com31
# 시각화, t검정 건너뜀
print(df.isna().any()[lambda x:x]) # 범주형 5개만 결측값이 나옴
cols3 = ['COW', 'FPARC', 'LANX', 'SCH', 'SCHL']
df[cols3] = df[cols3].fillna(0).astype(np.int64)
print(df[cols3].isnull().mean()) # 범주값들을 전부 0으로 대체
print(df.shape)
print(df.columns)
self.non_valp_df = df.drop(['VALP'], axis=1) # 연속형 타깃변수 잠시 제거
b) 데이터 분할(파티션)
def partition(self):
# 타깃변수, 입력변수 각각 다른 데이터프레임에 저장하기
self.norminal_variables()
df = self.non_valp_df
data = df.drop(["VALP_B1"], axis=1)
target = df['VALP_B1']
# print(data.shape)
# print(target.shape)
# 50:50 데이터 분할
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.5, random_state=42)
print("x_train shape:", x_train.shape)
print("x_test shape:", x_test.shape)
print("y_train shape:", y_train.shape)
print("y_test shape:", y_test.shape)
df.to_csv("./save/oklahoma.csv")
2) 용어
**
oulier(이상값)
귀무가설 = return이 null이 되는
통계에서 tbody ⇒ population
타깃변수클래스 = 그냥 변수에 대응하는 값
클래스가 묶은 거 = 도메인
로지스틱 회귀 ⇒ 로지스틱 = 클래스가 2개, 회귀 = 클래스를 1개로 만듦(총합, 평균..)
but 로지스틱 회귀는 분류모델
**
3) 놓친거
label에는 클래스 ..?
2. 코드
<ml패키지>
oklahoma
import pandas as pd
from scipy import stats
from sklearn.model_selection import train_test_split
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
okl_MENUS = ["종료", #0
"데이터구조파악",#1
"변수한글화",#2
"연속형변수편집",#3
"범주형변수편집",#4
"샘플링",#5
"학습",#6
"예측"]#7
oklahoma_meta = {
'ACCESS' : 'ACCESS',
'ACR' : 'ACR',
'AGEP' : '나이',
'BATH' : 'BATH',
'BDSP' : '침실수',
'BLD' : 'BLD',
'CONP' : 'CONP',
'COW' : 'COW',
'ELEP' : '월전기료',
'FESRP' : 'FESRP',
'FKITP' : 'FKITP',
'FPARC' : 'FPARC',
'FSCHP' : 'FSCHP',
'FTAXP' : 'FTAXP',
'GASP' : '월가스비',
'HHL' : 'HHL',
'HHT' : 'HHT',
'HINCP' : '가계소득',
'ANX' : 'ANX',
'MAR' : 'MAR',
'MV' : 'MV',
'NRC' : '자녀수',
'R18' : 'R18',
'R65' : 'R65',
'RAC1P' : 'RAC1P',
'RMSP' : '방수',
'RWAT' : 'RWAT',
'SCH' : 'SCH',
'SCHL' : 'SCHL',
'SEX' : 'SEX',
'VALP' : '주택가격',
'VALP_B1' : '지하주택가격'
}
okl_menu = {
"1" : lambda t: t.spec(),
"2" : lambda t: t.rename_meta(),
"3" : lambda t: t.interval_variables(),
"4" : lambda t: t.categorical_variables(),
"5" : lambda t: t.sampling(),
"6" : lambda t: print(" ** No Function ** "),
"7" : lambda t: print(" ** No Function ** "),
"8" : lambda t: print(" ** No Function ** "),
}
class Oklahoma:
pd.options.display.float_format = '{:.3f}'.format
def __init__(self):
self.df = pd.read_csv("data/comb32.csv")
self.non_valp_df = None
def spec(self):
df = self.df
# print(" --- 1.Shape ---")
# print(self.df.shape)
# print(" --- 2.Features ---")
# print(self.df.columns)
# print(" --- 3.Info ---")
# print(self.df.info())
# print(" --- 4.Case Top1 ---")
# print(self.df.head(1))
# print(" --- 5.Case Bottom1 ---")
def type_sep(self):
print(self.df[['AGEP', 'BDSP', 'CONP', 'ELEP', 'GASP', 'HINCP', 'NRC', 'RMSP', 'VALP']].dtypes)
def interval_variables(self):
df = self.df
cols1 = ['AGEP', 'BDSP', 'CONP', 'ELEP', 'GASP', 'HINCP', 'NRC', 'RMSP', 'VALP'] # 구간변수 처리 시작
# print(df[cols1].describe())
# print(df[cols1].skew())
# print(df[cols1].kurtosis())
# print(df['CONP'].value_counts(normalize=True))
df.drop('CONP', axis=1, inplace=True) # 구간변수 필터링
# print(df.shape)
c1 = df['ELEP'] <= 500
c2 = df['GASP'] <= 311
c3 = df['HINCP'] <= 320000
df = df[c1 & c2 & c3]
cols2 = ['AGEP', 'BDSP', 'ELEP', 'GASP', 'HINCP', 'NRC', 'RMSP', 'VALP'] # 필터링에서 'CONP' 빠짐
# print(df[cols2].describe())
# print(df['VALP_B1'].value_counts(normalize=True)) #com31
# group= df['AGEP'].groupby(df['VALP_B1'])
# print(group.mean())
# group2 = df['ELEP'].groupby(df['VALP_B1'])
# print(group2.mean())
# group3 = df['GASP'].groupby(df['VALP_B1'])
# print(group3.mean())
# group4 = df['HINCP'].groupby(df['VALP_B1'])
# print(group4.mean())
# 귀무가설 판별
# print(df.isna().any()[lambda x:x])
self.non_valp_df = df.drop(['VALP'], axis=1)
def norminal_variables(self):
self.interval_variables()
df = self.non_valp_df
# print(df['MAR'].value_counts(dropna=False)) # 범주형 변수(=결혼여부)의 데이터분석
self.non_valp_df = df
def partition(self):
self.norminal_variables()
df = self.non_valp_df
data = df.drop(["VALP_B1"], axis=1)
target = df['VALP_B1']
# print(data.shape)
# print(target.shape)
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.5, random_state=42)
print("x_train shape:", x_train.shape)
print("x_test shape:", x_test.shape)
print("y_train shape:", y_train.shape)
print("y_test shape:", y_test.shape)
df.to_csv("./save/oklahoma.csv")
if __name__ == '__main__':
Oklahoma().partition()
3. 하루마무리
휴대폰 보면 뇌가 멈추는 듯.
'비트캠프(AI아카데미) > TIL&WIL' 카테고리의 다른 글
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.17.(DAY-24) TIL (2) | 2022.11.18 |
|---|---|
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.16.(DAY-23) TIL (0) | 2022.11.17 |
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.14.(DAY-21) TIL (0) | 2022.11.15 |
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.11.(DAY-20) TIL (1) | 2022.11.12 |
| [비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 9 10(DAY-18 19) TIL (0) | 2022.11.11 |
댓글