diff --git a/dash_plot_generation/dash_plot_generator.py b/dash_plot_generation/dash_plot_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..668a3e0359df31533997facd2f88a29144b80930 --- /dev/null +++ b/dash_plot_generation/dash_plot_generator.py @@ -0,0 +1,104 @@ +import os + +import pandas +from dash import dash, dcc, html, ctx, callback +csv_path = os.path.normpath(os.getcwd() + os.sep + os.pardir + os.sep + "api_exploration") +split_csv_path = os.path.join(csv_path, "file_segments") + +df = None +APP = None +DASH_ASSETS_PATH = "dash_assets" +def initialize_data(): + global df + files = os.listdir(split_csv_path) + dataframe = None + for file in os.listdir(split_csv_path): + file_path = os.path.join(split_csv_path, file) + dataframe = pandas.concat([dataframe, pandas.read_csv(file_path)]) if dataframe is not None \ + else pandas.read_csv(file_path) + df = dataframe + + +def initialize_dash(host: str = "0.0.0.0", **kwargs): + """ + Runs the Dash server. + Args: + host: IP address of the server + kwargs: Variables which are passed down to APP.run function as named arguments. + Note: + The server IP is not actually 0.0.0.0; if the dash app is not accessible via this address, use the same port + number but replace the IP address with your local network IP instead. + """ + + global APP, df + + unique_developers = [dev for dev_list in df["developer"].fillna("Valve").unique() for dev in dev_list.split(",")] + unique_publishers = df["developer"].fillna("Valve").unique() + + # This is ok but the results are still unsatisfactory due to the game company names containing a comma + # unique_publishers = [publisher for publisher_list in df["developer"].fillna("Valve").unique() for publisher + # unique_developers = [dev for dev_list in df["developer"].fillna("Valve").unique() for dev in dev_list.split(",")] + + APP = dash.Dash( + name=__name__, + assets_folder=DASH_ASSETS_PATH, + external_stylesheets=['https://codepen.io/chriddyp/pen/bWLwgP.css'] + ) + APP.layout = html.Div(children=[ + html.Nav(className="nav nav-pills", children=[ + html.H6("STEAM-SAVVY", style={"margin-left": "30px", "width": "20%", "display": "inline-block"}), + html.A('About', className="nav-item nav-link btn", href='/apps/App1', + style={"margin-left": "300px"}), + html.A('Process paper', className="nav-item nav-link active btn", href='/apps/App2', + style={"margin-left": "150px"}) + ], + style={"background-color": "rgb(30,30,30)", "color": "rgb(255,255,255)"}), + + html.H6("TEXT"), + html.Div(className="row", children=[ + html.Div(children = [ + dcc.Tabs(id="tabs_main_plots1", value="tab1", children=[ + dcc.Tab(label="Genre performance", value="tab1"), + dcc.Tab(label="Game popularity", value="tab2"), + dcc.Tab(label="Company revenues", value="tab3"), + dcc.Tab(label="Market performance", value="tab4"), + ], + style={'width': '80%', 'display': 'inline-block', "outline": "2px dotted black"}), + ], style={'width': '48%', 'display': 'inline-block'}), + html.Div(children=[ + dcc.Tabs(id="tabs_main_plots2", value="tab3", children=[ + dcc.Tab(label="Developer infromation", value="Valve", children=[ + dcc.Dropdown(id="developer_dropdown", + options=[{"label": developer, "value": developer} for developer in unique_developers] + ) + ]), + dcc.Tab(label="Publisher information", value="tab4", children= [ + + dcc.Dropdown(id="publisher_dropdown", + options=[{"label": publisher, "value": publisher} for publisher in unique_publishers] + ), + ]) + + ], + style={'width': '48%', 'display': 'inline-block'}), + ], + style={'width': '48%', 'display': 'inline-block', "outline": "2px dotted black"}) + ], + style={'width': '100%'}), + ]) + APP.run(host=host, **kwargs) + print("The server has closed!") + + + + + +if __name__ == "__main__": + initialize_data() + initialize_dash() + +print(csv_path) + + + +