import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from lightgbm import LGBMClassifier
import warnings
import random
warnings.filterwarnings("ignore")
# 파일 불러오기
def dataframe_from_csv(target):
return pd.read_csv(target).rename(columns=lambda x:x.strip())
def dataframe_from_csvs(targets):
return pd.concat([dataframe_from_csv(x) for x in targets])
train_files = sorted([x for x in Path('/content/data/train/').glob('*.csv')])
val_files = sorted([x for x in Path('/content/data/val/').glob('*.csv')])
train = dataframe_from_csvs(train_files)
val = dataframe_from_csvs(val_files)
test = pd.read_csv('/content/data/test.csv')
print(f'train: {len(train)}')
print(f'validation: {len(val)}')
print(f'test: {len(test)}')
train = train.drop(['site', 'sid'], axis=1)
val = val.drop(['site', 'sid'], axis=1)
test = test.drop(['site', 'sid'], axis=1)
train['leaktype'].replace(['out','in','noise','other','normal'], [0,1,2,3,4], inplace=True)
val['leaktype'].replace(['out','in','noise','other','normal'], [0,1,2,3,4], inplace=True)
test['leaktype']=""
# train을 target과 feature로 나눠줍니다.
train_x=train.drop(['leaktype'], axis=1)
train_y=train['leaktype']
val_x=val.drop(['leaktype'], axis=1)
val_y=val['leaktype']
test_x=test.drop(['leaktype'], axis=1)
test_y=test['leaktype']
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import f1_score
df_clf = DecisionTreeClassifier(random_state=2022)
# 학습
df_clf.fit(train_x, train_y)
# val 추론
val_pred = df_clf.predict(val_x)
print("Validation F1 score: ", f1_score(val_y, val_pred, average='macro'))
# test 추론
test_pred = df_clf.predict(test_x)
# 제출파일 생성
submission = pd.read_csv('/content/data/sample_submission.csv')
submission['leaktype']=test_pred
submission.to_csv('/content/data/submission1.csv', index=False)