import numpy as np
# Import the linear regression class
from sklearn.linear_model import LogisticRegression
# Sklearn also has a helper that makes it easy to do cross-validation
from sklearn.cross_validation import KFold

import pandas

# We can use the pandas library in Python to read in the CSV file
# This creates a pandas dataframe and assigns it to the titanic variable
titanic = pandas.read_csv("../input/train.csv")
titanic_test = pandas.read_csv("../input/test.csv")


titanic["Age"]=titanic["Age"].fillna(titanic["Age"].median())
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1
titanic["Embarked"] = titanic["Embarked"].fillna('S')
titanic.loc[titanic["Embarked"] == 'S',"Embarked"] = 0
titanic.loc[titanic["Embarked"] == 'C',"Embarked"] = 1
titanic.loc[titanic["Embarked"] == 'Q',"Embarked"] = 2


titanic_test["Age"] = titanic_test["Age"].fillna(titanic["Age"].median())
titanic_test.loc[titanic_test["Sex"] == "male","Sex"] = 0
titanic_test.loc[titanic_test["Sex"] == "female","Sex"] = 1
titanic_test["Embarked"] = titanic_test["Embarked"].fillna('S')
titanic_test["Fare"] = titanic_test["Fare"].fillna(titanic_test["Fare"].median())
titanic_test.loc[titanic_test["Embarked"] == 'S',"Embarked"] = 0
titanic_test.loc[titanic_test["Embarked"] == 'C',"Embarked"] = 1
titanic_test.loc[titanic_test["Embarked"] == 'Q',"Embarked"] = 2


#print(titanic_test[predictors])

# The columns we'll use to predict the target
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]

# Initialize our algorithm class
alg = LogisticRegression(random_state=1)
# Generate cross-validation folds for the titanic data set
# It returns the row indices corresponding to train and test
# We set random_state to ensure we get the same splits every time we run this

predictions = []
# Training the algorithm using the predictors and target
alg.fit(titanic[predictors], titanic["Survived"])
# We can now make predictions on the test fold


predictions = alg.predict(titanic_test[predictors])

# The predictions are in three separate NumPy arrays  
# Concatenate them into a single array 
# We concatenate them on axis 0, because they only have one axis
#predictions = np.concatenate(test_predictions, axis=0)

# Map predictions to outcomes (the only possible outcomes are 1 and 0)
predictions[predictions > .5] = 1
predictions[predictions <=.5] = 0

#print(predictions)

#titanic_test = predictions
titanic_test = pandas.read_csv("../input/test.csv")
titanic_test.insert(len(titanic_test.columns),"Survived", predictions.astype(int))
#print(predictions.astype(int))

submission = pandas.DataFrame({
        "PassengerId": titanic_test["PassengerId"],
        "Survived": predictions
    })
    
print(submission)

submission.to_csv("output.csv", sep='\t', encoding='utf-8')