# -- Code Cell --
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv('test.csv')

# -- Code Cell --
train.head()

# -- Code Cell --
train['Class'].value_counts()

# -- Code Cell --
train_cleaned = train.dropna()

# -- Code Cell --
train_cleaned.head()

# -- Code Cell --
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import f1_score
from sklearn.decomposition import PCA
from xgboost import XGBClassifier
pca = PCA(n_components=4).set_output(transform="pandas")

X = train_cleaned.drop(columns = 'Class')
X = pca.fit_transform(X)
cols = X.columns
y = train_cleaned['Class']
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=42, test_size=0.2)
scaler = StandardScaler()
X_train_sc = scaler.fit_transform(X_train)
X_test_sc = scaler.transform(X_test)
model = XGBClassifier(n_estimators=40,learning_rate=0.35,random_state=42)
model.fit(X_train_sc,y_train)
pred = model.predict(X_test_sc)
acc = f1_score(y_test, pred)
acc

# -- Code Cell --
dp = test['datapointID']

# -- Code Cell --
test = pca.transform(test)

# -- Code Cell --
X_sc = scaler.transform(X)
X_sc = pd.DataFrame(X_sc, columns=cols)
model.fit(X_sc,y)
cols_test = test.columns
test_sc = scaler.transform(test)
test_sc = pd.DataFrame(test_sc,columns=cols_test)
preds = model.predict(test_sc)

# -- Code Cell --
dp

# -- Code Cell --
rows = []
for idx, row in test.iterrows():
    rows.append({"subtaskID":1,'datapointID':1,"answer":0})
    rows.append({"subtaskID":2,'datapointID':dp[idx],'answer':preds[idx]})
pd.DataFrame(rows).to_csv('subs.csv',index= False)

# -- Code Cell --
