
# coding: utf-8

# In[3]:

import pandas as pd
import numpy as np
import math
import csv
from bokeh.plot_object import PlotObject
from bokeh.server.utils.plugins import object_page
from bokeh.server.app import bokeh_app
from bokeh.plotting import curdoc, cursession
from bokeh.crossfilter.models import CrossFilter
from bokeh.sampledata.autompg import autompg

# In[8]:

def open_csv(fileLoc):
    df= pd.DataFrame(pd.read_csv(fileLoc))
    return df

def drop_columns(to_drop,df):
    for column in to_drop:
        df.drop(column, axis=1, inplace=True)
    return df

def fill_na_columns(df,lista):
    for column in lista:
        df[column].fillna(lista[column],inplace=True)  
    return df

def convert_to_str(df,lista):
    for column in lista:
        df[column] = df[column].astype(str)       
    return df
    
def prepare_df():
    column_list=["Line","Rating","Sail_month","Sail_year","Best_rating","Worse_rating","Ship","Count"]         
    fileLoc='data/cruise_ratings.csv'
    df=open_csv(fileLoc)
    to_drop=["Unnamed: 0","Source","Count"]
    df=drop_columns(to_drop,df)
    fill_with={"Line":"N/A","Rating":3,"Sail_month":"N/A","Sail_year":"N/A","Best_rating":"N/A","Worse_rating":"N/A",
           "Ship":"N/A"}      
    df=fill_na_columns(df,fill_with)
    to_str=["Line","Best_rating","Worse_rating","Ship"]
    df=convert_to_str(df,to_str)  
    return df

@bokeh_app.route("/bokeh/crossfilter/")
@object_page("crossfilter")
def make_crossfilter():
    app = CrossFilter.create(df=data)
    return app

data=prepare_df()

