def process_csv(csv):
    """
        Normalize and select usefull columns
        ** return (Tuple (numpy array, numpy array, numpy array)) **
            *train_features.shape : (n, 5)
            *train_targets.shape : (n)
            *test_features.shape : (n, 5)
            With n the numbers of rows
    """
    # Replace None value by 0
    csv = csv.fillna('Age', 0).fillna('Fare', 0)
    # Translate sex values with binary value (0 or 1)
    csv["sex"] = csv["Sex"].apply(lambda v : 1 if v == "male" else 0)
    # Normalize the age columns
    csv["age_normalize"] = (csv["Age"] - csv["Age"].mean()) /csv["Age"].std()
    # Normalize the faire columns
    csv["fare"] = (csv["Fare"] - csv["Fare"].mean()) /csv["Fare"].std()


    # We select the Survived columns and export it as a numpy array
    train_targets = csv[csv["type"] == "train"].select_columns(['Survived']).to_numpy()

    # We do the same for the features. For training features and for testing features
    train_features = csv[csv["type"] == "train"].select_columns(['sex', 'age_normalize', 'fare', 'SibSp', 'Parch']).to_numpy()
    test_features = csv[csv["type"] == "test"].select_columns(['sex', 'age_normalize', 'fare', 'SibSp', 'Parch']).to_numpy()

    return train_features, train_targets[:], test_features