Skip to content

Commit 329d340

Browse files
committed
fix: revert _parse_datetimes
1 parent 55150bc commit 329d340

File tree

4 files changed

+25
-28
lines changed

4 files changed

+25
-28
lines changed

sir_complainsalot/delphi_sir_complainsalot/check_source.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,8 @@ def check_source(data_source, meta, params, grace, logger): # pylint: disable=t
9393

9494
if response["result"] == 1:
9595
latest_data = pd.DataFrame.from_dict(response["epidata"])
96-
time_type = latest_data["time_type"].value[0]
97-
latest_data = _parse_datetimes(latest_data, "time_value", time_type)
98-
latest_data = _parse_datetimes(latest_data, "issue", time_type)
96+
latest_data["time_value"] = _parse_datetimes(latest_data, "time_value")
97+
latest_data["issue"] = _parse_datetimes(latest_data, "issue")
9998
latest_data.drop("direction", axis=1, inplace=True)
10099

101100
unique_dates = list(latest_data["time_value"].dt.date.unique())

sir_complainsalot/delphi_sir_complainsalot/date_utils.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@ def _date_to_api_string(d: datetime, time_type: str = "day") -> str:
1111
return Week.fromdate(d).cdcformat()
1212
raise ValueError(f"Unknown time_type: {time_type}")
1313

14-
def _parse_datetimes(df: pd.DataFrame, col: str, time_type: str, date_format: str = "%Y%m%d") -> pd.DataFrame:
14+
def _parse_datetimes(df: pd.DataFrame, col: str, date_format: str = "%Y%m%d") -> pd.Series:
1515
"""Convert a DataFrame date or epiweek column into datetimes.
1616
1717
Assumes the column is string type. Dates are assumed to be in the YYYYMMDD
1818
format by default. Weeks are assumed to be in the epiweek CDC format YYYYWW
1919
format and return the date of the first day of the week.
2020
"""
21-
if time_type == "day":
22-
df[col] = pd.to_datetime(df[col], format=date_format)
23-
return df
24-
if time_type == "week":
25-
df[col] = df[col].apply(lambda x: Week(int(x[:4]), int(x[-2:])).startdate())
26-
df[col] = pd.to_datetime(df[col])
27-
return df
28-
raise ValueError(f"Unknown time_type: {time_type}")
21+
df[col] = df[col].astype("str")
22+
def parse_row(row):
23+
if row["time_type"] == "day":
24+
return pd.to_datetime(row[col], format=date_format)
25+
if row["time_type"] == "week":
26+
return pd.to_datetime(Week(int(row[col][:4]), int(row[col][-2:])).startdate())
27+
return row[col]
28+
return df.apply(parse_row, axis=1)

sir_complainsalot/delphi_sir_complainsalot/run.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def run_module():
3131
params = read_params()
3232
Epidata.auth = ("epidata", params["api_credentials"])
3333
meta = pd.DataFrame.from_dict(Epidata.covidcast_meta().get("epidata", dict()))
34-
meta["max_time"] = meta.apply(lambda x: _parse_datetimes(x.max_time, x.time_type), axis=1)
34+
meta["max_time"] = _parse_datetimes(meta, "max_time")
3535
slack_notifier = None
3636
if "channel" in params and "slack_token" in params:
3737
slack_notifier = SlackNotifier(params["channel"], params["slack_token"])

testing_utils/delphi_utils/check_covidcast_port.py

+13-15
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,21 @@
2323
os.mkdir(f"{CURRENT_DIR}/covidcast_result")
2424

2525

26-
def _parse_datetimes(df: pd.DataFrame, col: str, time_type: str, date_format: str = "%Y%m%d") -> pd.DataFrame:
26+
def _parse_datetimes(df: pd.DataFrame, col: str, date_format: str = "%Y%m%d") -> pd.Series:
2727
"""Convert a DataFrame date or epiweek column into datetimes.
2828
2929
Assumes the column is string type. Dates are assumed to be in the YYYYMMDD
3030
format by default. Weeks are assumed to be in the epiweek CDC format YYYYWW
3131
format and return the date of the first day of the week.
3232
"""
33-
if time_type == "day":
34-
df[col] = pd.to_datetime(df[col], format=date_format)
35-
return df
36-
if time_type == "week":
37-
df[col] = df[col].apply(lambda x: Week(int(x[:4]), int(x[-2:])).startdate())
38-
df[col] = pd.to_datetime(df[col])
39-
return df
40-
raise ValueError(f"Unknown time_type: {time_type}")
41-
33+
df[col] = df[col].astype("str")
34+
def parse_row(row):
35+
if row["time_type"] == "day":
36+
return pd.to_datetime(row[col], format=date_format)
37+
if row["time_type"] == "week":
38+
return pd.to_datetime(Week(int(row[col][:4]), int(row[col][-2:])).startdate())
39+
return row[col]
40+
return df.apply(parse_row, axis=1)
4241

4342

4443
def ported_metadata() -> Union[pd.DataFrame, None]:
@@ -56,9 +55,8 @@ def ported_metadata() -> Union[pd.DataFrame, None]:
5655
raise RuntimeError("Error when fetching metadata from the API", response["message"])
5756

5857
df = pd.DataFrame.from_dict(response["epidata"])
59-
time_type = df["time_type"].values[0]
60-
df = _parse_datetimes(df, "time_value", time_type)
61-
df = _parse_datetimes(df, "issue", time_type)
58+
df["min_time"] = _parse_datetimes(df, "min_time")
59+
df["max_time"] = _parse_datetimes(df, "max_time")
6260
df["last_update"] = pd.to_datetime(df["last_update"], unit="s")
6361
return df
6462

@@ -139,8 +137,8 @@ def ported_signal(
139137
api_df = pd.DataFrame.from_dict(response["epidata"])
140138
if not api_df.empty:
141139
time_type = api_df["time_type"].values[0]
142-
api_df = _parse_datetimes(api_df, "time_value", time_type)
143-
api_df = _parse_datetimes(api_df, "issue", time_type)
140+
api_df["time_value"] = _parse_datetimes(api_df, "time_value")
141+
api_df["issue"] = _parse_datetimes(api_df, "issue")
144142
api_df.drop("direction", axis=1, inplace=True)
145143
api_df["data_source"] = data_source
146144
api_df["signal"] = signal

0 commit comments

Comments
 (0)