Back to Article
#07-01: Summary stats
Download Notebook

#07-01: Summary stats

  • Using the WX19 data frame, compute which station has the maximum total incoming shortwave radiation.
  • Create a plot as similar as possible to the following plot.
In [1]:
import pandas as pd
import matplotlib.pyplot as plt
In [2]:
WX19 = pd.read_csv("../06_files/WX19.csv", sep=",", parse_dates=["datetime"])
WX19
datetime station_id ta iswr
0 2018-09-05 06:00:00 VIR075905 -2.03788 0.000
1 2018-09-05 17:00:00 VIR075905 11.10640 579.437
2 2018-09-06 17:00:00 VIR075905 14.04840 577.724
3 2018-09-07 17:00:00 VIR075905 13.94120 558.580
4 2018-09-08 17:00:00 VIR075905 9.57504 511.112
... ... ... ... ...
56877 2019-04-26 17:00:00 VIR088016 1.82977 614.784
56878 2019-04-27 17:00:00 VIR088016 -4.01148 324.892
56879 2019-04-28 17:00:00 VIR088016 -2.11787 517.290
56880 2019-04-29 17:00:00 VIR088016 -1.73154 700.392
56881 2019-04-30 17:00:00 VIR088016 -3.46323 338.852

56882 rows × 4 columns

In [3]:
iswr_tot = WX19[["iswr", "station_id"]].groupby("station_id").sum()
iswr_tot.index[iswr_tot.values.argmax()]
'VIR078109'
In [4]:
WX19_grouped_ta = WX19[["datetime", "ta"]].groupby("datetime")
ta_lower = WX19_grouped_ta.quantile(0.1)
ta_upper = WX19_grouped_ta.quantile(0.9)
ta_median = WX19_grouped_ta.median()

WX19_grouped_iswr = WX19[["datetime", "iswr"]].groupby("datetime")
iswr_lower = WX19_grouped_iswr.quantile(0.1)
iswr_upper = WX19_grouped_iswr.quantile(0.9)
iswr_median = WX19_grouped_iswr.median()
In [2]:
# # Loop example:
# ta_lower = np.full(WX19['datetime'].unique().shape, np.nan)
# ta_upper = np.full(WX19['datetime'].unique().shape, np.nan)
# ta_median = np.full(WX19['datetime'].unique().shape, np.nan)
# ta_dt = WX19['datetime'].unique()

# for i, dt in enumerate(ta_dt):
#     ta_lower[i] = WX19.loc[WX19['datetime'] == dt, 'ta'].quantile(0.1)
#     ta_upper[i] = WX19.loc[WX19['datetime'] == dt, 'ta'].quantile(0.9)
#     ta_median[i] = WX19.loc[WX19['datetime'] == dt, 'ta'].median()
In [5]:
fig, (ax1, ax2) = plt.subplots(figsize=(12, 5), nrows=2, sharex=True)

ax1.plot(ta_median, color="red")
ax1.fill_between(ta_lower.index, ta_lower["ta"], ta_upper["ta"], color="red", alpha=0.2)
ax1.legend(["Median air temperature", "Temperature envelope"])
ax1.set_ylabel("Temperature (deg C)")
ax1.grid(linestyle=":")

ax2.fill_between(iswr_lower.index, 0, iswr_upper["iswr"], color="green", alpha=0.15)
ax2.fill_between(iswr_lower.index, 0, iswr_median["iswr"], color="green", alpha=0.25)
ax2.fill_between(iswr_lower.index, 0, iswr_lower["iswr"], color="green", alpha=0.5)
ax2.legend(["90th quantile", "Median incoming shortwave", "10th quantile"], loc="upper center")
ax2.set_ylabel("Radiation (W/m2)")
ax2.grid(linestyle=":")
# fig.savefig('twopanel_pretty.png')