Skip to content

Docs Módulo Dashboard

src.dashboard.app.Dashboard

Classe que implementa a aminação do Aeropêndulo.

Atributo

estrutura_db: Cria a estrutura do Dashboard.

Source code in src/dashboard/app.py
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
class Dashboard:
    """
    Classe que implementa a aminação do Aeropêndulo.

    Atributo:
        estrutura_db: Cria a estrutura do Dashboard.
    """
    def __init__(self, df) -> None:
        """
        Iniciador da classe.

        Args:
            df: DataFrame pandas com os dados para serem mostrados no Dashboard.
        Returns:
            Renorna um None.
        """
        self.df = df
        self.pg_title = "Pesquisa de Mercado - Tênis Esportivos no Mercado Livre"
        st.set_page_config(page_title=self.pg_title,
                           layout="wide",
                           initial_sidebar_state="collapsed")
        self.pages = ["Docs", "Portfólio", "LinkedIn", "GitHub"]
        self.styles = {
            "nav": {
                "background-color": "#44475a",
            },
            "div": {
                "max-width": "32rem",
            },
            "span": {
                "border-radius": "0.5rem",
                "color": "#EFEFEF",
                "margin": "0 0.125rem",
                "padding": "0.4375rem 0.625rem",
            },
            "active": {
                "background-color": "rgba(255, 255, 255, 0.25)",
            },
            "hover": {
                "background-color": "rgba(255, 255, 255, 0.35)",
            }
        }
        self.options = {
            "show_menu": False,
            "show_sidebar": False,
        }

        self.urls = {
            "Docs": "#",
            "GitHub": "https://github.com/Oseiasdfarias/ETL-Ecommerce-produtos",
            "LinkedIn": "https://www.linkedin.com/in/oseiasfarias/",
            "Portfólio": "https://oseiasfarias.info"}
        self.page = st_navbar(self.pages, styles=self.styles,
                        urls=self.urls, options=self.options)

        # Título da aplicação
        st.title('Pesquisa de Mercado - Tênis Esportivos no Mercado Livre')
        self.estrutura_db()


    def estrutura_db(self):
        """Método responável por implementar a estrutura do Dashboard."""
        # Melhorar o layout com colunas para KPIs
        st.subheader("KPIs Principais")
        col1, col2, col3 = st.columns(3)

        # KPI 1: Número total de itens
        total_items = self.df.shape[0]
        col1.metric(label="Número Total de Itens", value=total_items)

        # KPI 2: Número de marcas únicas
        unique_brands = self.df['brand'].nunique()
        col2.metric(label="Número de Marcas Únicas", value=unique_brands)

        # KPI 3: Preço médio novo (em reais)
        average_new_price = self.df['new_price'].mean()
        col3.metric(label="Preço Médio Novo (R$)", value=f"{average_new_price:.2f}")

        # Quais marcas são mais encontradas até a 10ª página
        st.subheader('Marcas mais encontradas até a 10ª página')
        col1, col2 = st.columns([4, 2])
        top_10_pages_brands = (self.df['brand']
                            .value_counts()
                            .sort_values(ascending=False)
                            .to_frame()
                            .reset_index())
        fig = px.bar(top_10_pages_brands, x='brand', y='count', text_auto='.2s')
        col1.plotly_chart(fig)
        col2.write(top_10_pages_brands)


        # Qual o preço médio por marca
        st.subheader('Preço médio por marca')
        col1, col2 = st.columns([4, 2])
        average_price_by_brand = (self.df.groupby('brand')
                                ['new_price']
                                .mean()
                                .sort_values(ascending=False)
                                .to_frame()
                                .reset_index())
        fig1 = px.bar(average_price_by_brand, x='brand',
                    y='new_price', text_auto='.2s')
        col1.plotly_chart(fig1)
        col2.write(average_price_by_brand)

        # Qual a satisfação por marca
        st.subheader('Satisfação por marca')
        col1, col2 = st.columns([4, 2])
        df_non_zero_reviews = self.df[self.df['reviews_rating_number'] > 0]
        satisfaction_by_brand = (df_non_zero_reviews
                                .groupby('brand')
                                ['reviews_rating_number']
                                .mean()
                                .sort_values(ascending=False)
                                .to_frame()
                                .reset_index())
        fig2 = px.bar(satisfaction_by_brand, x='brand',
                    y='reviews_rating_number', text_auto='.2s')
        col1.plotly_chart(fig2)
        col2.write(satisfaction_by_brand)

estrutura_db()

Método responável por implementar a estrutura do Dashboard.

Source code in src/dashboard/app.py
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
def estrutura_db(self):
    """Método responável por implementar a estrutura do Dashboard."""
    # Melhorar o layout com colunas para KPIs
    st.subheader("KPIs Principais")
    col1, col2, col3 = st.columns(3)

    # KPI 1: Número total de itens
    total_items = self.df.shape[0]
    col1.metric(label="Número Total de Itens", value=total_items)

    # KPI 2: Número de marcas únicas
    unique_brands = self.df['brand'].nunique()
    col2.metric(label="Número de Marcas Únicas", value=unique_brands)

    # KPI 3: Preço médio novo (em reais)
    average_new_price = self.df['new_price'].mean()
    col3.metric(label="Preço Médio Novo (R$)", value=f"{average_new_price:.2f}")

    # Quais marcas são mais encontradas até a 10ª página
    st.subheader('Marcas mais encontradas até a 10ª página')
    col1, col2 = st.columns([4, 2])
    top_10_pages_brands = (self.df['brand']
                        .value_counts()
                        .sort_values(ascending=False)
                        .to_frame()
                        .reset_index())
    fig = px.bar(top_10_pages_brands, x='brand', y='count', text_auto='.2s')
    col1.plotly_chart(fig)
    col2.write(top_10_pages_brands)


    # Qual o preço médio por marca
    st.subheader('Preço médio por marca')
    col1, col2 = st.columns([4, 2])
    average_price_by_brand = (self.df.groupby('brand')
                            ['new_price']
                            .mean()
                            .sort_values(ascending=False)
                            .to_frame()
                            .reset_index())
    fig1 = px.bar(average_price_by_brand, x='brand',
                y='new_price', text_auto='.2s')
    col1.plotly_chart(fig1)
    col2.write(average_price_by_brand)

    # Qual a satisfação por marca
    st.subheader('Satisfação por marca')
    col1, col2 = st.columns([4, 2])
    df_non_zero_reviews = self.df[self.df['reviews_rating_number'] > 0]
    satisfaction_by_brand = (df_non_zero_reviews
                            .groupby('brand')
                            ['reviews_rating_number']
                            .mean()
                            .sort_values(ascending=False)
                            .to_frame()
                            .reset_index())
    fig2 = px.bar(satisfaction_by_brand, x='brand',
                y='reviews_rating_number', text_auto='.2s')
    col1.plotly_chart(fig2)
    col2.write(satisfaction_by_brand)