Thanks for your question. The byRegion dataframe has 12 individual rows (one for each region / product pairing) with 36 columns (one column of sales info for every month). You can think of it as the time series graphs stacked one on top of the other.
Getting from row-based storage (i.e. a relational database) to the dataframe is a necessary step for a lot of statistical analyses or machine learning. You could do it in many many ways (for example a pivot table in SQL, or using something like dcast() or lapply() in R).
Hope that helps,