Executando verificação de segurança...
4

Interface interativa para manipulação e visualização de dados utilizando Python


Introdução

Neste texto abordaremos o uso das bibliotecas Streamlit, Pandas e Plotly.express no desenvolvimento de uma interface interativa para manipulação e visualização de dados. Exploraremos o código e suas principais funções, como a importação de bibliotecas, a função load_data() para carregar e manipular dados de um arquivo CSV, a função filter_data_by_month() para filtrar dados com base em um mês selecionado, e a função main() que configura a interface e gera gráficos interativos. Além disso, apresentaremos o código completo e um breve guia de formatação em Markdown.

Caso tenha interesse em baixar o código completo junto com todos os demais arquivos usados para o mesmo, o link do projeto no Github se encontrará ao final da postagem!


Importações de Bibliotecas

Começamos importando as bibliotecas necessárias para o projeto. O código importa o 'streamlit' como 'st', o 'pandas' como 'pd' e 'plotly.express' como 'px'. Essas bibliotecas são essenciais para a criação da interface (Streamlit), manipulação de dados (Pandas) e visualizações interativas (Plotly).

import streamlit as st
import pandas as pd
import plotly.express as px

Função load_data()

A próxima parte do código define a função load_data(). Essa função carrega os dados de um arquivo CSV 'supermarket_sales.csv', realiza algumas operações de manipulação de dados e retorna o DataFrame resultante.

def load_data():
    # Carrega os dados do arquivo CSV
    df = pd.read_csv("supermarket_sales.csv", sep=";", decimal=",")
    df["Date"] = pd.to_datetime(df["Date"])
    df = df.sort_values("Date")
    return df

Função filter_data_by_month(df, selected_month)

Aqui temos a função filter_data_by_month() que recebe um DataFrame e um mês selecionado como entrada. Ela filtra os dados com base no mês escolhido e retorna o DataFrame filtrado.

Funções de Geração de Gráficos

As próximas funções são responsáveis por gerar diferentes tipos de gráficos com base nos dados filtrados. Temos funções para gerar gráficos de barras de faturamento por dia, faturamento por tipo de produto, faturamento por filial, faturamento por tipo de pagamento e avaliação das filiais.

Função main()

A função main() é a parte principal do código. Ela configura a página com layout "wide", carrega os dados, cria uma nova coluna "Month" com base na data, extrai os meses únicos, permite a seleção de um mês através de um seletor na barra lateral, filtra os dados com base no mês selecionado e, por fim, exibe os gráficos interativos de faturamento e avaliações das filiais.

def main():
    st.set_page_config(layout="wide")
    
    df = load_data()
    
    df["Month"] = df["Date"].apply(lambda x: str(x.year) + "-" + str(x.month))
    unique_months = df["Month"].unique()
    
    selected_month = st.sidebar.selectbox("Selecione um Mês", unique_months)
    
    df_filtered = filter_data_by_month(df, selected_month)
    
    col1, col2 = st.columns(2)
    col3, col4, col5 = st.columns(3)
    
    col1.plotly_chart(generate_revenue_by_day_chart(df_filtered))
    col2.plotly_chart(generate_revenue_by_product_chart(df_filtered))
    col3.plotly_chart(generate_revenue_by_branch_chart(df_filtered))
    col4.plotly_chart(generate_revenue_by_payment_type_chart(df_filtered), use_container_width=True)
    col5.plotly_chart(generate_branch_ratings_chart(df_filtered), use_container_width=True)

if __name__ == "__main__":
    main()

Código Completo

import streamlit as st
import pandas as pd
import plotly.express as px

# ... (código das funções load_data(), filter_data_by_month(), e outras funções de geração de gráficos)

def main():
    st.set_page_config(layout="wide")
    
    df = load_data()
    
    df["Month"] = df["Date"].apply(lambda x: str(x.year) + "-" + str(x.month))
    unique_months = df["Month"].unique()
    
    selected_month = st.sidebar.selectbox("Selecione um Mês", unique_months)
    
    df_filtered = filter_data_by_month(df, selected_month)
    
    col1, col2 = st.columns(2)
    col3, col4, col5 = st.columns(3)
    
    col1.plotly_chart(generate_revenue_by_day_chart(df_filtered))
    col2.plotly_chart(generate_revenue_by_product_chart(df_filtered))
    col3.plotly_chart(generate_revenue_by_branch_chart(df_filtered))
    col4.plotly_chart(generate_revenue_by_payment_type_chart(df_filtered), use_container_width=True)
    col5.plotly_chart(generate_branch_ratings_chart(df_filtered), use_container_width=True)

if __name__ == "__main__":
    main()

Espero que essa explicação tenha sido útil e esclarecedora! Você pode encontrar o código já completo no meu Github, que se encontrará disponível abaixo. Lá, você consegue além de ver o código inteiro, baixar o arquivo csv para testar o código, ou seguir o tutorial para fazê-lo você mesmo. Espero que seja de algum modo, útil!

Carregando publicação patrocinada...
1

As últimas versões do Plotly já suportam uso da biblioteca Polars no lugar da Pandas. Creio que teria um ganho de performance para uma quantidade maior de dados.