Ejemplo n.º 1
0
    def render_sector(s, sector_path, level):
        sector_emissions = s.sum(level=0).sort_values(ascending=False)
        for subsector_name, emissions in sector_emissions.iteritems():
            if not subsector_name:
                continue
            subsector_path = tuple([*sector_path, subsector_name])

            next_metadata = SECTORS
            for sp in subsector_path:
                metadata = next_metadata[sp]
                next_metadata = metadata.get('subsectors', {})

            if current_sector == subsector_path:
                active = True
            else:
                active = False

            page = get_page_for_emission_sector(*subsector_path)
            name = metadata.get('name_%s' % get_active_locale())
            if name is None:
                name = metadata['name']
            item = _make_nav_item(name, emissions, level, page, active=active)
            items.append(item)

            ss = s[subsector_name]
            if isinstance(ss, pd.Series):
                render_sector(ss, subsector_path, level + 1)
Ejemplo n.º 2
0
def render_page():
    cols = []
    edf = predict_emissions().dropna(axis=1, how='all')
    forecast = edf.pop('Forecast')
    graph = PredictionFigure(sector_name=None,
                             unit_name='kt',
                             title='Päästöt yhteensä',
                             smoothing=True,
                             fill=True,
                             stacked=True,
                             legend=True,
                             legend_x=0.8)
    for sector_name, sector_metadata in SECTORS.items():
        df = pd.DataFrame(edf[sector_name])
        df['Forecast'] = forecast

        fig = make_sector_fig(df, sector_name, sector_metadata)
        sector_page = get_page_for_emission_sector(sector_name, None)
        card = GraphCard(id='emissions-%s' % sector_name,
                         graph=dict(figure=fig),
                         link_to_page=sector_page)
        cols.append(dbc.Col(card.render(), md=6))

        # Add the summed sector to the all emissions graph
        df = df.drop(columns=['Forecast'])
        s = df.sum(axis=1)
        s.name = 'Emissions'
        df = pd.DataFrame(s)
        df['Forecast'] = forecast
        graph.add_series(df=df,
                         trace_name=sector_metadata['name'],
                         column_name='Emissions',
                         historical_color=sector_metadata['color'])

    target_year = get_variable('target_year')
    ref_year = get_variable('ghg_reductions_reference_year')
    perc_off = get_variable('ghg_reductions_percentage_in_target_year')

    last_hist_year = edf.loc[~forecast].index.max()
    last_hist = edf.loc[last_hist_year].sum()
    end_emissions = edf.loc[target_year].sum()
    ref_emissions = edf.loc[ref_year].sum()
    target_emissions = ref_emissions * (1 - perc_off / 100)

    target_year_emissions = edf.loc[target_year].sum()
    sticky = StickyBar(
        label='Päästövähennykset yhteensä',
        goal=last_hist - target_emissions,
        value=last_hist - end_emissions,
        unit='kt',
        below_goal_good=False,
    )

    card = GraphCard(id='emissions-total',
                     graph=dict(figure=graph.get_figure()))

    return html.Div(
        [dbc.Row(dbc.Col(card.render())),
         dbc.Row(cols),
         sticky.render()])
Ejemplo n.º 3
0
    def get_content(self):
        lang = get_active_locale()
        main_sector_name = self.emission_sector[0]
        main_sector_metadata = SECTORS[main_sector_name]

        cols = []

        edf = predict_emissions().dropna(axis=1, how='all')
        forecast = edf.pop('Forecast')
        edf = edf[main_sector_name]

        subsectors = main_sector_metadata['subsectors']
        colors = generate_color_scale(main_sector_metadata['color'],
                                      len(subsectors))

        graph = PredictionFigure(sector_name=main_sector_name,
                                 unit_name='kt',
                                 title=_('Total emissions'),
                                 smoothing=True,
                                 fill=True,
                                 stacked=True,
                                 legend=True,
                                 legend_x=0.8)

        for idx, (sector_name,
                  sector_metadata) in enumerate(subsectors.items()):
            df = pd.DataFrame(edf[sector_name])
            df['Forecast'] = forecast

            fig = self.make_sector_fig(df, sector_name, sector_metadata,
                                       colors[idx])
            sector_page = get_page_for_emission_sector(main_sector_name,
                                                       sector_name)
            card = GraphCard(id='emissions-%s-%s' %
                             (main_sector_name, sector_name),
                             graph=dict(figure=fig),
                             link_to_page=sector_page)
            cols.append(dbc.Col(card.render(), md=6))

            # Add the summed sector to the all emissions graph
            df = df.drop(columns=['Forecast'])
            s = df.sum(axis=1)
            s.name = 'Emissions'
            df = pd.DataFrame(s)
            df['Forecast'] = forecast
            graph.add_series(df=df,
                             trace_name=sector_metadata.get(
                                 'name_%s' % lang, sector_metadata['name']),
                             column_name='Emissions',
                             historical_color=colors[idx])

        self.total_emissions = edf.iloc[-1].sum()

        card = GraphCard(id='%s-emissions-total' % main_sector_name,
                         graph=dict(figure=graph.get_figure()))

        return html.Div([
            dbc.Row(dbc.Col(card.render())),
            dbc.Row(cols),
        ])
Ejemplo n.º 4
0
    def render(self, is_top_row: bool = True) -> dbc.Card:
        graph = Graph(self.id, self.graph, self.slider)
        classes = self.get_classes(is_top_row)

        graph_el = html.Div(graph.render(), className="slider-card__content")
        if self.link_to_page:
            if isinstance(self.link_to_page, tuple):
                from pages.routing import get_page_for_emission_sector
                page = get_page_for_emission_sector(*self.link_to_page)
            else:
                page = self.link_to_page
            graph_el = dcc.Link(children=graph_el, href=page.path)

        card = dbc.Card(
            dbc.CardBody(children=[
                graph_el,
                dbc.Row(id=self.id + '-description'),
                self.extra_content,
            ]),
            className=' '.join(classes),
        )
        return card
Ejemplo n.º 5
0
    def render(self, is_top_row: bool = True) -> dbc.Card:
        graph = Graph(self.id, self.graph, self.slider)
        classes = self.get_classes(is_top_row)

        graph_el = html.Div(graph.render(), className="slider-card__content")

        language = get_active_locale()
        title = self.title_i18n.get(language, self.title)
        if title:
            header_content = dbc.CardHeader(html.H4(title))
        else:
            header_content = None

        if self.link_to_page:
            if isinstance(self.link_to_page, tuple):
                from pages.routing import get_page_for_emission_sector
                page = get_page_for_emission_sector(*self.link_to_page)
            else:
                page = self.link_to_page
            link_el = dcc.Link(html.H5('[+]'),
                               href=page.path,
                               className="card-header__link")
            header_el = html.Div([link_el, header_content])
        else:
            header_el = header_content

        card = dbc.Card(
            [
                header_el,
                dbc.CardBody(children=[
                    graph_el,
                    dbc.Row(children=self.render_description(),
                            id=self.id + '-description'),
                    self.extra_content,
                ])
            ],
            className=' '.join(classes),
        )
        return card
Ejemplo n.º 6
0
                _('Emission reductions according to scenario') + ' %s–%s' %
                (self.last_historical_year, self.target_year)),
            self._render_emissions_bar()
        ],
                          md=6)

        emissions_summary = self._render_value_summary(
            self.scenario_emissions, self.target_emissions,
            _('Total net emissions'), _('kt/year'), True)
        emissions_summary = dbc.Col(emissions_summary, md=3)

        if self.value is not None:
            summary = self._render_value_summary(self.value, self.goal,
                                                 self.label, self.unit,
                                                 self.below_goal_good)
            summary = dbc.Col(summary, md=3)
        else:
            summary = dbc.Col(md=3)

        return dbc.Alert([dbc.Row([pötkylä, summary, emissions_summary])],
                         className="page-summary fixed-bottom")


if __name__ == '__main__':
    # from calc.geothermal import get_historical_production
    # get_historical_production()
    from pages.routing import get_page_for_emission_sector
    page = get_page_for_emission_sector('BuildingHeating', 'DistrictHeat')
    assert page is not None
    StickyBar(current_page=page).render()