import pandas as pd
import csv
import numpy as np
import random
from sklearn.ensemble import RandomForestClassifier
import os
import time

t0 = time.time()

def read_train(file_name="../input/train.csv", limit=784):
    X = []
    y = []
    rows_to_include = random.sample(range(784), limit)
    i = 0
    with open(file_name,'rt') as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        # Skip header
        next(reader)
        # row = 'label pixel0 pixel1 pixel2 pixel3 ... pixel783'
        # label in [0...9]
        for row in reader:
            if i in rows_to_include:
                r = [int(elem) for elem in row]
                y.append(r[0])
                X.append(np.array(r[1:len(r)]))

            i = i + 1
    return X,y

def read_test(file_name="../input/test.csv", limit=784):
    X = []
    rows_to_include = random.sample(range(784), limit)
    i = 0
    with open(file_name,'rt') as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        # Skip header
        next(reader)
        # row = 'label pixel0 pixel1 pixel2 pixel3 ... pixel783'
        # label in [0...9]
        for row in reader:
            if i in rows_to_include:
                r = [int(elem) for elem in row]
                X.append(r)
                
            i = i + 1
    return X

x_train,y_train = read_train()
test = read_test()

rf = RandomForestClassifier(n_estimators = 50)
rf.fit(x_train, y_train)
prediction = rf.predict(test)

pd.DataFrame({"ImageId": range(1,len(prediction)+1), "Label": prediction}).to_csv('submit.csv', index=False, header=True)

t1 = time.time()

total = t1-t0

print(total)