Add 'sharing_wp.py'

master
Dan Howe 5 years ago
parent 47056f7861
commit 28eb278120

@ -0,0 +1,161 @@
import json
import numpy as np
import dash
import dash_table
import pandas as pd
import plotly.graph_objs as go
import dash_table
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
app = dash.Dash(__name__)
app.layout = html.Div([
html.Div(dcc.Graph(id='graph')),
html.Div(id='div-table'),
html.Div(id='datatable-row-ids-container'),
html.Div([
html.Button('Load', id='button'),
html.Div(id='storage', style={'display': 'none'})
])
])
# app.css.append_css('style.css')
@app.callback(
[Output('storage', 'children'),
Output('div-table', 'children')],
[Input('button', 'n_clicks')],
)
def load_data(n_clicks):
csv_name = 'test_20_WP.csv'
# Check instrument type
inst_type = 'WP'
if inst_type == 'WP':
df = pd.read_csv(csv_name, index_col=0, header=5, skiprows=[6])
# Rename columns based on probe locations
suffixes = ['P1', 'P2', 'P3', 'incident', 'reflected']
col_names = list(df.columns)
for i, col in enumerate(col_names[:-4]):
if ('.' not in col) and (col_names[i + 4] == col + '.4'):
for j, suffix in enumerate(suffixes):
col_names[i + j] = '{}-{}'.format(col, suffix)
df.columns = col_names
else:
df = pd.read_csv(csv_name, index_col=0, header=3, skiprows=[4])
# Zero time series based on first 5s
df -= df[:5].mean()
df = df[:100]
# Round floats
df = df.round(2)
variables = {
'location': '',
'H_sig': 'o',
'H_1%': 'x',
'H_max': '',
'Hm0': '',
'Tp': '',
'Tp1': '',
}
stats = df.describe().T
s1 = stats.index.to_series()
s1.name = 'Name'
stats = pd.concat([s1, stats], axis=1)
datatable = dash_table.DataTable(
id='datatable-row-ids',
# columns=[{
# 'name': [val, key],
# 'id': key
# } for key, val in variables.items()],
columns=[{
'name': x,
'id': x
} for x in stats.columns],
data=stats.to_dict('records'),
editable=False,
sort_action='native',
sort_mode='multi',
row_selectable='multi',
row_deletable=False,
selected_rows=np.arange(stats.shape[0]),
style_as_list_view=True,
style_cell={
'minWidth': '100px',
'width': '100px',
'maxWidth': '100px',
},
)
return df.to_json(orient='table'), [datatable]
@app.callback(
Output('graph', 'figure'),
[Input('storage', 'children')],
)
def update_graph(json_data):
if json_data is None:
return {'data': []}
df = pd.read_json(json_data, orient='table')
ts = []
for col in df.columns:
trace = go.Scatter(x=df.index, y=df[col], name=col, opacity=0.8)
ts.append(trace)
layout = {'title': 'basename', 'xaxis': {'rangeslider': {}}}
timeseries = {'data': ts, 'layout': layout}
return timeseries
# @app.callback(Output('datatable-row-ids-container', 'children'), [
# Input('datatable-row-ids', 'derived_virtual_row_ids'),
# Input('datatable-row-ids', 'selected_row_ids'),
# Input('datatable-row-ids', 'active_cell')
# ])
# def update_graphs(row_ids, selected_row_ids, active_cell):
# # When the table is first rendered, `derived_virtual_data` and
# # `derived_virtual_selected_rows` will be `None`. This is due to an
# # idiosyncracy in Dash (unsupplied properties are always None and Dash
# # calls the dependent callbacks when the component is first rendered).
# # So, if `rows` is `None`, then the component was just rendered
# # and its value will be the same as the component's dataframe.
# # Instead of setting `None` in here, you could also set
# # `derived_virtual_data=df.to_rows('dict')` when you initialize
# # the component.
# selected_id_set = set(selected_row_ids or [])
#
# if selected_id_set:
# dff = df.loc[selected_id_set]
# else:
# dff = df
#
# spec = []
# for i, row in dff.iterrows():
# x = np.arange(10)
# y = x * row['H_sig']
#
# trace = go.Scatter(x=x, y=y, name=i)
# spec.append(trace)
#
# energy = dict(data=spec)
#
# graph = dcc.Graph(id='time-series', figure=energy)
#
# return graph
if __name__ == '__main__':
app.run_server(debug=True)
Loading…
Cancel
Save