Пример #1
0
    def make_df(self):
        if not all((self.geocolumn, self.location)):
            print("Not all information filled")
            print(f"Geocolumn : {self.geocolumn} - Location : {self.location}")
            return

        value_vars = self.kmapper[self.kind]
        df = self.pgcd.data_from_geocol(self.location,
                                        self.geocolumn,
                                        fill=True,
                                        as_datetime=True)
        df = df.set_index("Date")[value_vars]

        df.columns = [lutils.description(column) for column in df.columns]
        return df
Пример #2
0
    def set_data_source(self) :
        if not all((self.geocolumn, self.location, self.columns)) :
            print ("Not all information filled")
            print(f"Geocolumn : {self.geocolumn} - Location : {self.location} - Columns : {self.columns}")
            return

        df = self.pgcd.data_from_day(day=self.date, report=False, fill=True, geocolumn=self.geocolumn)
        df = df[df[self.geocolumn] == self.location]
        
        if df.empty : raise Exception(f"No result found with current pie configuration : {self.geocolumn, self.location, self.day}")
        if len(df) > 1 : raise Exception(f"Multiple results found with current pie configuration : {self.geocolumn, self.location, self.day}")

        dic = list(df[self.columns].T.to_dict().values())[0]
        dic = {lutils.description(column) : value for column, value in dic.items()}
        super().set_data_source(dic)
Пример #3
0
def construct(pgcd, controller=None) :
    df_column = "Confirmed"
    lastday = pgcd.lastday()
    firstday = pgcd.firstday()
    mapper = "Log"

    # Make carto
    title = 'Coronavirus map : Day ' + str(lastday)
    tooltips = lutils.tooltips()
    tools = [PanTool(), WheelZoomTool(), ResetTool()]
    carto = WMap(pgcd, lastday, df_column, title=title, mkind=mapper, tooltips=tooltips, aspect_ratio=2, sizing_mode="scale_both", tools=tools)

    # Make a slider object: slider  
    slider = DateSlider(title="Date", start=firstday, end=lastday, value=lastday, step=1, format="%Y-%d-%m", sizing_mode="stretch_width")
    carto.link_on_change("date", slider, postfun=convert_slider_date)

    # Make buttons
    lambda_callback_bleft = lambda : carto_shift_day(False, carto, slider)
    bleft = Button(label="Day -1", button_type="success", width=200)
    bleft.on_click(lambda_callback_bleft)

    lambda_callback_bright = lambda : carto_shift_day(True, carto, slider)
    bright = Button(label="Day +1", button_type="success", width=200)
    bright.on_click(lambda_callback_bright)

    # Select for carto 
    options = [df_column for df_column in lutils.columns_description() if df_column not in ["Date"]]
    scol = Select(title="", options=options, value=df_column, width=200)
    rdesc_column = lambda column : lutils.description(column, reverse=True)
    carto.link_on_change("field", scol, postfun=rdesc_column)

    smap = Select(title="", options=list(COLOR_MAPPER_NAME.values()), value=COLOR_MAPPER_NAME[mapper], width=200)
    rdesc_cmapper = lambda name : lutils.reverse_mapping(COLOR_MAPPER_NAME, name)
    carto.link_on_change("mkind", smap, postfun=rdesc_cmapper)

    if controller :
        fun = lambda : update(slider, carto)
        controller.add_receiver("update", fun)
        new_signal = lambda country : controller.emit_signal("select_country", country)
        carto.add_receiver("doubletap", new_signal)
    
    return column(
        carto.figure, slider, 
        row(bleft, bright, scol, smap, sizing_mode="stretch_width"), 
        sizing_mode="stretch_both")
Пример #4
0
def construct(pgcd, controller=None):
    lastday = pgcd.lastday()
    firstday = pgcd.firstday()

    default_column = "Confirmed"
    default_geocolumn = "Country"

    # Figure
    barplot = DynamicBarPlot(pgcd,
                             None,
                             "Confirmed",
                             lastday,
                             ndisplay=20,
                             aspect_ratio=4,
                             sizing_mode="scale_width")

    # Select day
    slider_date = DateSlider(title="Date",
                             start=firstday,
                             end=lastday,
                             value=lastday,
                             step=1,
                             format="%Y-%d-%m",
                             sizing_mode="stretch_width")
    barplot.link_on_change("date", slider_date, postfun=convert_slider_date)

    # nice but not really effective. Keep it here if needed later somewhere else
    #slider_date = DatePicker(sizing_mode="stretch_width", min_date=firstday, max_date=lastday, value=lastday)

    # Select geocolumn (country / continent)
    select_region = Select(title="Region",
                           options=["Continent", "Country"],
                           value="Error",
                           sizing_mode="stretch_width")
    barplot.link_on_change("geocolumn", select_region)

    # Select location
    columns = [
        df_column for df_column in lutils.columns_description()
        if df_column not in ("Date", )
    ]
    select_column = Select(title="Sort by",
                           options=columns,
                           value="Confirmed",
                           width=100)
    postfun = lambda column: lutils.description(column, reverse=True)
    barplot.link_on_change("column", select_column, postfun=postfun)

    # Slider
    slider_ndisplay = Slider(title='Number of elements',
                             start=2,
                             end=10,
                             step=1,
                             value=5,
                             sizing_mode="stretch_width")
    barplot.link_on_change("ndisplay", slider_ndisplay)
    select_region.on_change(
        "value", lambda attr, old, new: set_region(pgcd, slider_ndisplay, new))

    # Controller
    if controller:
        controller.add_receiver(
            "change_region", lambda region: barplot_new_region(
                barplot, slider_ndisplay, region))
        barplot.link_to_controller("date", controller, "bp_date")
        barplot.add_receiver(
            "doubletap",
            lambda location: controller.emit_signal("location", location))

    select_region.value = default_geocolumn

    return column(
        row(
            #select_date,
            select_region,
            select_column,
            sizing_mode="stretch_width"),
        slider_ndisplay,
        slider_date,
        barplot.figure,
        sizing_mode="stretch_both")
Пример #5
0
 def make_legend(self, * args, ** kwargs) :
     columns = [lutils.description(column) for column in self.columns]
     super().make_legend(columns=columns)
Пример #6
0
def construct(pgcd, controller=None):
    regions = ["Continent", "Country"]

    default_idx = 0
    default_reg = regions[default_idx]
    default_col = ["Date", "Confirmed"]
    default_type = ["Linear", "Linear"]

    lc_data = {
        "pgcd": pgcd,
        "region": default_reg,
        "xname": default_col[0],
        "yname": default_col[1],
        "xtype": default_type[0],
        "ytype": default_type[1],
        "selections": [],
        "df": None
    }

    lc = LayoutController(**lc_data)

    axtype1 = PAT.axis_type(title="Linear scale", x="datetime", y="linear")
    axtype2 = PAT.axis_type(title="Log scale",
                            x="datetime",
                            y="log",
                            kwargs={"replace_zero": np.nan})

    tooltips = MultiLinesPlotScatter.default_tooltips()
    tooltips["data_x"].description = "Date"
    tooltips["data_x"].format = "%F"
    kwargs_hovertool = {"formatters": {'$data_x': 'datetime'}}

    mlp = PAT(MultiLinesPlotScatter, (axtype1, axtype2),
              pgcd,
              gcol=default_reg,
              xcol=default_col[0],
              ycol=default_col[1],
              aspect_ratio=2,
              sizing_mode="scale_both",
              tools=["reset"],
              tooltips=tooltips,
              kwargs_hovertool=kwargs_hovertool)

    lc.cpn["mlp"] = mlp

    # Select for MLP
    options = [
        column for column in lutils.columns_description()
        if column not in ["Date"]
    ]
    ysc = Select(title="Y axis",
                 options=options,
                 value=default_col[1],
                 sizing_mode="stretch_width")

    rdesc_column = lambda column: lutils.description(column, reverse=True)
    lc.link_on_change("yname", ysc, postfun=rdesc_column)

    # DataTable
    formatter = {
        acol: {
            "formatter": aformat
        }
        for acol, aformat in lutils.dic_formatter().items()
    }
    dt = DataTable(width=100,
                   height=200,
                   selectable="checkbox",
                   columns_kwargs=formatter,
                   sizing_mode="stretch_width")

    lc.cpn["datatable"] = dt
    dt.add_receiver("selection", lc.change_selection)

    # Search input for datatable
    ti = TextInput(name="datatableinput",
                   placeholder="Search a country or region ...",
                   sizing_mode="stretch_width")
    dt.link_input(ti, "Location")

    # Region toggle
    funregion = lambda idx: regions[idx]
    rbg = RadioButtonGroup(labels=regions,
                           active=default_idx,
                           sizing_mode="stretch_width")
    lc.link_on_change("region", rbg, "active", postfun=funregion)

    # Buttons for DataTable
    button_auto = Button(label="Auto overlay",
                         button_type="success",
                         sizing_mode="stretch_width")
    #cbba = lambda : distplots_autooveraly(distplots, cdata)
    #button_auto.on_click(cbba)

    button_reset = Button(label="Reset",
                          button_type="warning",
                          sizing_mode="stretch_width")

    lc.update_dt()

    # Default : Asia, Europe and North America
    dt.source.selected.indices = [2, 3, 4]

    return column(
        mlp.figure,
        row(ysc, sizing_mode="stretch_width"),
        rbg,
        ti,
        dt.dt,
        #row(button_reset, button_auto, sizing_mode="stretch_both"),
        sizing_mode="stretch_both")