def write(): data = funcs.get_data() data['Swim'].fillna(0.0, inplace=True) data['Bike'].fillna(0, inplace=True) data['Run'].fillna(0, inplace=True) data['T1'].fillna(0, inplace=True) data['T2'].fillna(0, inplace=True) data = funcs.removeNotFinished(data) data = funcs.convertTimes(data) data['Country Name'] = data['Country'].apply(funcs.getCountryName) udisp.title_awesome('Melhor natação') d = data[data.SwimN == data.SwimN.min()] st.table(removeAddicionalColumns(d)) udisp.title_awesome('Melhor T1') d = data[data.T1N == data.T1N.min()] st.table(removeAddicionalColumns(d)) udisp.title_awesome('Melhor bike') d = data[data.BikeN == data.BikeN.min()] st.table(removeAddicionalColumns(d)) udisp.title_awesome('Melhor T2') d = data[data.T2N == data.T2N.min()] st.table(removeAddicionalColumns(d)) udisp.title_awesome('Melhor corrida') d = data[data.RunN == data.RunN.min()] st.table(removeAddicionalColumns(d))
def write(): data = funcs.get_data() data['Country Name'] = data['Country'].apply(funcs.getCountryName) athletes = data['Name'].unique() option = st.sidebar.selectbox('Buscar atleta pelo nome:', sorted(athletes)) atleta = data.loc[data['Name'] == option] atleta = atleta.drop(['Country'], axis=1) st.table(atleta.assign(hack='').set_index('hack')) atleta = funcs.convertTimes(atleta) source = pd.DataFrame({ 'Atividade': ['Swim', 'T1', 'Bike', 'T2', 'Run'], 'TimeN': [ getValueUniq(atleta, 'SwimN'), getValueUniq(atleta, 'T1N'), getValueUniq(atleta, 'BikeN'), getValueUniq(atleta, 'T2N'), getValueUniq(atleta, 'RunN') ], 'Tempo': [ getValueUniq(atleta, 'Swim'), getValueUniq(atleta, 'T1'), getValueUniq(atleta, 'Bike'), getValueUniq(atleta, 'T2'), getValueUniq(atleta, 'Run') ], 'Ordem': [1, 2, 3, 4, 5] }) if getValueUniq(atleta, 'Overall Rank') != 'DNF': st.altair_chart( alt.Chart(source).transform_joinaggregate( TotalTime='sum(TimeN)', ).transform_calculate( PercentOfTotal="datum.TimeN / datum.TotalTime").mark_bar(). encode(x=alt.X('PercentOfTotal:Q', axis=alt.Axis(format='.0%'), title='Porcentagem do total'), y=alt.Y('Atividade:N', sort=alt.EncodingSortField(field="Ordem", order='ascending')), tooltip=['Tempo']).properties(height=450, width=700))
def write(): data = funcs.get_data() data = funcs.convertTimes(data) data = funcs.removeNotFinished(data) data['Country Name'] = data['Country'].apply(funcs.getCountryName) createPlot(data, 'Swim', 'green') createPlot(data, 'T1', 'red') createPlot(data, 'Bike', 'yellow') createPlot(data, 'T2', 'black') createPlot(data, 'Run', 'pink')
def write(): data = funcs.get_data() data = funcs.convertTimes(data) data['Country Name'] = data['Country'].apply(funcs.getCountryName) data = funcs.removeNotFinished(data) ## ## Gráfico ## athletes = data['Name'].unique() option1 = st.sidebar.selectbox('Buscar atleta pelo nome:', sorted(athletes) ) atleta1 = data.loc[data['Name'] == option1].drop(['Country'], axis=1) option2 = st.sidebar.selectbox('Segundo atleta:', sorted(athletes) ) atleta2 = data.loc[data['Name'] == option2].drop(['Country'], axis=1) df = pd.DataFrame([ {'val':'1', 'Order':1, 'name': funcs.getValueUniq(atleta1, 'Name'), 'Tempo': funcs.getValueUniq(atleta1, 'Swim'), 'TempoN': funcs.getValueUniq(atleta1, 'SwimN'), 'Atividade':'Swim'}, {'val':'2', 'Order':1, 'name': funcs.getValueUniq(atleta2, 'Name'), 'Tempo': funcs.getValueUniq(atleta2, 'Swim'), 'TempoN': funcs.getValueUniq(atleta2, 'SwimN'), 'Atividade':'Swim'}, {'val':'1', 'Order':2, 'name': funcs.getValueUniq(atleta1, 'Name'), 'Tempo': funcs.getValueUniq(atleta1, 'T1'), 'TempoN': funcs.getValueUniq(atleta1, 'T1N'), 'Atividade':'T1'}, {'val':'2', 'Order':2, 'name': funcs.getValueUniq(atleta2, 'Name'), 'Tempo': funcs.getValueUniq(atleta2, 'T1'), 'TempoN': funcs.getValueUniq(atleta2, 'T1N'), 'Atividade':'T1'}, {'val':'1', 'Order':3, 'name': funcs.getValueUniq(atleta1, 'Name'), 'Tempo': funcs.getValueUniq(atleta1, 'Bike'), 'TempoN': funcs.getValueUniq(atleta1, 'BikeN'), 'Atividade':'Bike'}, {'val':'2', 'Order':3, 'name': funcs.getValueUniq(atleta2, 'Name'), 'Tempo': funcs.getValueUniq(atleta2, 'Bike'), 'TempoN': funcs.getValueUniq(atleta2, 'BikeN'), 'Atividade':'Bike'}, {'val':'1', 'Order':4, 'name': funcs.getValueUniq(atleta1, 'Name'), 'Tempo': funcs.getValueUniq(atleta1, 'T2'), 'TempoN': funcs.getValueUniq(atleta1, 'T2N'), 'Atividade':'T2'}, {'val':'2', 'Order':4, 'name': funcs.getValueUniq(atleta2, 'Name'), 'Tempo': funcs.getValueUniq(atleta2, 'T2'), 'TempoN': funcs.getValueUniq(atleta2, 'T2N'), 'Atividade':'T2'}, {'val':'1', 'Order':5, 'name': funcs.getValueUniq(atleta1, 'Name'), 'Tempo': funcs.getValueUniq(atleta1, 'Run'), 'TempoN': funcs.getValueUniq(atleta1, 'RunN'), 'Atividade':'Run'}, {'val':'2', 'Order':5, 'name': funcs.getValueUniq(atleta2, 'Name'), 'Tempo': funcs.getValueUniq(atleta2, 'Run'), 'TempoN': funcs.getValueUniq(atleta2, 'RunN'), 'Atividade':'Run'} ]) base = alt.Chart(df).properties( width=400 ) color_scale = alt.Scale(domain=[option1, option2], range=['#1f77b4', '#1f77b4']) left = base.transform_filter( alt.datum.val == '1' ).encode( y=alt.Y('Atividade:N', axis=None, sort=alt.EncodingSortField(field="Order", order='ascending')), x=alt.X('sum(TempoN):Q', title='Tempo', sort=alt.SortOrder('descending')), color=alt.Color('name:N', scale=color_scale, legend=None), tooltip=['Tempo:N'], order=alt.Order( 'Order', sort='ascending' ) ).mark_bar().properties(title=option1) middle = base.encode( y=alt.Y('Atividade:N', axis=None, sort=alt.EncodingSortField(field="Order", order='ascending')), text=alt.Text('Atividade:N'), order=alt.Order( 'Order', sort='ascending' ) ).mark_text().properties(width=40) right = base.transform_filter( alt.datum.val == '2' ).encode( y=alt.Y('Atividade:N', axis=None, sort=alt.EncodingSortField(field="Order", order='ascending')), x=alt.X('sum(TempoN):Q', title='Tempo'), color=alt.Color('name:N', scale=color_scale, legend=None), tooltip=['Tempo:N'] ).mark_bar().properties(title=option2) st.altair_chart( alt.concat(left, middle, right, spacing=5) ) ## ## Tabela ## df1 = pd.DataFrame([ {'Atividade':'Swim', 'Tempo': funcs.getValueUniq(atleta1, 'Swim')}, {'Atividade':'T1', 'Tempo': funcs.getValueUniq(atleta1, 'T1')}, {'Atividade':'Bike', 'Tempo': funcs.getValueUniq(atleta1, 'Bike')}, {'Atividade':'T2', 'Tempo': funcs.getValueUniq(atleta1, 'T2')}, {'Atividade':'Run', 'Tempo': funcs.getValueUniq(atleta1, 'Run')}, {'Atividade':'Total', 'Tempo': funcs.getValueUniq(atleta1, 'Overall')} ]) df2 = pd.DataFrame([ {'Atividade':'Swim', 'Tempo': funcs.getValueUniq(atleta2, 'Swim')}, {'Atividade':'T1', 'Tempo': funcs.getValueUniq(atleta2, 'T1')}, {'Atividade':'Bike', 'Tempo': funcs.getValueUniq(atleta2, 'Bike')}, {'Atividade':'T2', 'Tempo': funcs.getValueUniq(atleta2, 'T2')}, {'Atividade':'Run', 'Tempo': funcs.getValueUniq(atleta2, 'Run')}, {'Atividade':'Total', 'Tempo': funcs.getValueUniq(atleta2, 'Overall')} ]) with Grid("1 1", color="#000000", background_color="#FFFFFF") as grid: grid.cell("a", 1, 2, 1, 2).dataframe( df1.set_index('Atividade', inplace=False) ) grid.cell("b", 2, 3, 1, 2).dataframe( df2.set_index('Atividade', inplace=False) ) # st.write(funcs.secondsToTime( funcs.getValueUniq(atleta2, 'RunN') ))
def write(): data = funcs.get_data() data = funcs.convertTimes(data) ## ## Tabela ## total = data.shape[0] df = pd.DataFrame({ 'Athletes': [total], # 'Swim Finish': [ showPorcent( 100 * ( (total - data[data['Swim'].isnull()].shape[0] ) / total) ) ], 'Swim Finish': [(total - data[data['Swim'].isnull()].shape[0])], 'Swim DNS/DNF': [ funcs.showPercent(100 * (data['Swim'].isnull() & (data['Overall Rank'].eq('DNS') | data['Overall Rank'].eq('DNF'))).mean()) ], # 'Bike Finish': [ showPorcent( 100 * ( (total - data[data['Bike'].isnull()].shape[0] ) / total) ) ], 'Bike Finish': [(total - data[data['Bike'].isnull()].shape[0])], 'Bike DNF': [ showPorcent(100 * (data['Bike'].isnull() & (data['Overall Rank'].eq('DNS') | data['Overall Rank'].eq('DNF'))).mean()) ], # 'Run Finish': [ showPorcent( 100 * ( (total - data[data['Run'].isnull()].shape[0] ) / total) ) ], 'Run Finish': [(total - data[data['Run'].isnull()].shape[0])], 'Run DNF': [ showPorcent( 100 * (data['Run'].isnull() & data['Overall Rank'].eq('DNF')).mean()) ], 'Overall DNS/DNF': [ showPorcent(100 * (data['Overall Rank'].eq('DNS') | data['Overall Rank'].eq('DNF')).mean()) ], }) df = df.assign(hack='').set_index('hack') st.table(df) ## ## Gráficos ## data = data.drop([ 'Overall', 'Run', 'Bike', 'Swim', 'T1', 'T2', 'Division Rank', 'Gender Rank' ], axis=1).sort_values(['Division'], ascending=[1]) data['Atletas'] = 1 prepareBlock(data, 'DQ') prepareBlock(data, 'DNS') prepareBlock(data, 'DNF')
import pandas as pd import numpy as np import altair as alt import streamlit as st import utils.display as udisp import utils.functions as funcs data = funcs.get_data() data = funcs.convertTimes(data) data = funcs.removeNotFinished(data) data['Country Name'] = data['Country'].apply(funcs.getCountryName) data.astype({'BikeN': int}) def calculeMedianFromCat(cat, n): df = data[data['Division'] == cat].head(n) aux = { 'Name': cat, 'SwimN': int(df['SwimN'].median()), 'T1N': int(df['T1N'].median()), 'BikeN': int(df['BikeN'].median()), 'T2N': int(df['T2N'].median()), 'RunN': int(df['RunN'].median()), } aux['Swim'] = funcs.secondsToTime(aux['SwimN']) aux['T1'] = funcs.secondsToTime(aux['T1N']) aux['Bike'] = funcs.secondsToTime(aux['BikeN']) aux['T2'] = funcs.secondsToTime(aux['T2N'])