Module pipelines.rj_cor.meteorologia.radar.precipitacao.src.data.PredictedData

Classes

class PredictedData (predictions: ,
coordinates: ,
dataset: str,
model: str,
date: str,
time: str)
Expand source code
class PredictedData:
    def __init__(
        self,
        predictions: np.array,
        coordinates: np.array,
        dataset: str,
        model: str,
        date: str,
        time: str,
    ):
        self.predictions = predictions
        self.coordinates = coordinates
        self.dataset = dataset
        self.model = model
        self.date = date
        self.time = time

    @classmethod
    def load_hdf(cls, input_filepath: pathlib.Path):
        with h5py.File(input_filepath, "r") as f:
            return cls(
                np.array(f["predictions"]),
                np.array(f["coordinates"]),
                f.attrs["dataset"],
                f.attrs["model"],
                f.attrs["date"],
                f.attrs["time"],
            )

    def save_hdf(self, output_filepath: pathlib.Path):
        with h5py.File(output_filepath, "w") as f:
            f.create_dataset("predictions", data=self.predictions, compression="gzip")
            f.create_dataset("coordinates", data=self.coordinates, compression="gzip")
            f.attrs["dataset"] = self.dataset
            f.attrs["model"] = self.model
            f.attrs["date"] = self.date
            f.attrs["time"] = self.time

    def write_image(
        self,
        output_filepath: pathlib.Path = None,
        range_color: list = [0, 10],
        lower_bound: float = 0.4,
        colorscale: str = "YlGnBu",
        zoom: float = 6.3,
        opacity: float = 1.0,
        return_fig=False,
        map_center=MAP_CENTER,
        interactive=False,
    ):
        inds_to_keep = self.predictions >= lower_bound
        truncated_predictions = self.predictions[inds_to_keep]
        fig = go.Figure(
            go.Scattermapbox(
                lat=self.coordinates[:, 0][inds_to_keep],
                lon=self.coordinates[:, 1][inds_to_keep],
                mode="markers",
                marker={
                    "cmin": range_color[0],
                    "cmax": range_color[1],
                    "color": truncated_predictions,
                    "colorscale": colorscale,
                    "opacity": opacity,
                    "colorbar": dict(
                        title="Rain (mm in 15 min)",
                    ),
                },
                hovertemplate="Latitude: %{lat:.3f}<br>"
                + "Longitude: %{lon:.3f}<br>"
                + "Rain: %{marker.color:,}"
                + "<extra></extra>",
            )
        )
        if interactive:
            fig.update_layout(
                margin=dict(l=20, r=20, t=20, b=20), height=600, hovermode="x unified"
            )
        else:
            fig.update_layout(margin=dict(l=20, r=20, t=20, b=20), height=600)
        fig.update_mapboxes(center=map_center, zoom=zoom, style="stamen-terrain")

        if output_filepath is not None:
            if interactive:
                fig.write_html(output_filepath)
            else:
                fig.write_image(output_filepath)
        if return_fig:
            return fig

        raise Exception(
            "No path was passed to save. Pass 'return_fig=True' to return the fig object without saving."
        )

Static methods

def load_hdf(input_filepath: pathlib.Path)

Methods

def save_hdf(self, output_filepath: pathlib.Path)
Expand source code
def save_hdf(self, output_filepath: pathlib.Path):
    with h5py.File(output_filepath, "w") as f:
        f.create_dataset("predictions", data=self.predictions, compression="gzip")
        f.create_dataset("coordinates", data=self.coordinates, compression="gzip")
        f.attrs["dataset"] = self.dataset
        f.attrs["model"] = self.model
        f.attrs["date"] = self.date
        f.attrs["time"] = self.time
def write_image(self,
output_filepath: pathlib.Path = None,
range_color: list = [0, 10],
lower_bound: float = 0.4,
colorscale: str = 'YlGnBu',
zoom: float = 6.3,
opacity: float = 1.0,
return_fig=False,
map_center={'lat': -22.9932804107666, 'lon': -43.26795928955078},
interactive=False)
Expand source code
def write_image(
    self,
    output_filepath: pathlib.Path = None,
    range_color: list = [0, 10],
    lower_bound: float = 0.4,
    colorscale: str = "YlGnBu",
    zoom: float = 6.3,
    opacity: float = 1.0,
    return_fig=False,
    map_center=MAP_CENTER,
    interactive=False,
):
    inds_to_keep = self.predictions >= lower_bound
    truncated_predictions = self.predictions[inds_to_keep]
    fig = go.Figure(
        go.Scattermapbox(
            lat=self.coordinates[:, 0][inds_to_keep],
            lon=self.coordinates[:, 1][inds_to_keep],
            mode="markers",
            marker={
                "cmin": range_color[0],
                "cmax": range_color[1],
                "color": truncated_predictions,
                "colorscale": colorscale,
                "opacity": opacity,
                "colorbar": dict(
                    title="Rain (mm in 15 min)",
                ),
            },
            hovertemplate="Latitude: %{lat:.3f}<br>"
            + "Longitude: %{lon:.3f}<br>"
            + "Rain: %{marker.color:,}"
            + "<extra></extra>",
        )
    )
    if interactive:
        fig.update_layout(
            margin=dict(l=20, r=20, t=20, b=20), height=600, hovermode="x unified"
        )
    else:
        fig.update_layout(margin=dict(l=20, r=20, t=20, b=20), height=600)
    fig.update_mapboxes(center=map_center, zoom=zoom, style="stamen-terrain")

    if output_filepath is not None:
        if interactive:
            fig.write_html(output_filepath)
        else:
            fig.write_image(output_filepath)
    if return_fig:
        return fig

    raise Exception(
        "No path was passed to save. Pass 'return_fig=True' to return the fig object without saving."
    )