DOI: 10.5281/zenodo.3478594
title: Speed profiles of freeways in California (I5-S and I210-E)

description: Speed profiles of freeways in California (I5-S and I210-E). Original data is retrieved from PeMS. Each YEAR_FREEWAY.csv file contains Timestamp and Speed data. freeway_meta.csv file contains meta information for each detector: freeway number, direction, detector ID, absolute milepost, and x y coordinates. <pre><code class="language-markdown"># Freeway speed data description ### Data loading example (single freeway: I5-S 2012) ```python %%time import pandas as pd # Date time parser mydateparser = lambda x: pd.datetime.strptime(x, "%m/%d/%Y %H:%M:%S") # Freeway data loading (This part should be changed to a proper URL in zenodo.org) data = pd.read_csv("dataset/2012_I5S.csv", parse_dates=["Timestamp"], date_parser=mydateparser).pivot(index="Timestamp",columns='Station_ID', values='Speed') # Meta data loading meta = pd.read_csv("dataset/freeway_meta.csv").set_index(['Fwy','Dir']) ``` CPU times: user 50.5 s, sys: 911 ms, total: 51.4 s Wall time: 50.9 s ### Speed data and meta data ```python data.head() ``` &lt;div&gt; &lt;style scoped&gt; .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } &lt;/style&gt; &lt;table border="1" class="dataframe"&gt; &lt;thead&gt; &lt;tr style="text-align: right;"&gt; &lt;th&gt;Station_ID&lt;/th&gt; &lt;th&gt;1&lt;/th&gt; &lt;th&gt;2&lt;/th&gt; &lt;th&gt;3&lt;/th&gt; &lt;th&gt;4&lt;/th&gt; &lt;th&gt;5&lt;/th&gt; &lt;th&gt;6&lt;/th&gt; &lt;th&gt;7&lt;/th&gt; &lt;th&gt;8&lt;/th&gt; &lt;th&gt;9&lt;/th&gt; &lt;th&gt;10&lt;/th&gt; &lt;th&gt;...&lt;/th&gt; &lt;th&gt;80&lt;/th&gt; &lt;th&gt;81&lt;/th&gt; &lt;th&gt;82&lt;/th&gt; &lt;th&gt;83&lt;/th&gt; &lt;th&gt;84&lt;/th&gt; &lt;th&gt;85&lt;/th&gt; &lt;th&gt;86&lt;/th&gt; &lt;th&gt;87&lt;/th&gt; &lt;th&gt;88&lt;/th&gt; &lt;th&gt;89&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Timestamp&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;2012-01-01 06:00:00&lt;/td&gt; &lt;td&gt;70.0&lt;/td&gt; &lt;td&gt;69.8&lt;/td&gt; &lt;td&gt;70.1&lt;/td&gt; &lt;td&gt;69.6&lt;/td&gt; &lt;td&gt;69.9&lt;/td&gt; &lt;td&gt;70.8&lt;/td&gt; &lt;td&gt;70.1&lt;/td&gt; &lt;td&gt;69.3&lt;/td&gt; &lt;td&gt;69.2&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;...&lt;/td&gt; &lt;td&gt;72.1&lt;/td&gt; &lt;td&gt;67.6&lt;/td&gt; &lt;td&gt;71.0&lt;/td&gt; &lt;td&gt;66.8&lt;/td&gt; &lt;td&gt;65.9&lt;/td&gt; &lt;td&gt;58.2&lt;/td&gt; &lt;td&gt;67.1&lt;/td&gt; &lt;td&gt;63.8&lt;/td&gt; &lt;td&gt;67.1&lt;/td&gt; &lt;td&gt;71.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2012-01-01 06:05:00&lt;/td&gt; &lt;td&gt;69.2&lt;/td&gt; &lt;td&gt;69.8&lt;/td&gt; &lt;td&gt;69.8&lt;/td&gt; &lt;td&gt;69.4&lt;/td&gt; &lt;td&gt;69.5&lt;/td&gt; &lt;td&gt;69.5&lt;/td&gt; &lt;td&gt;68.3&lt;/td&gt; &lt;td&gt;67.5&lt;/td&gt; &lt;td&gt;67.4&lt;/td&gt; &lt;td&gt;67.2&lt;/td&gt; &lt;td&gt;...&lt;/td&gt; &lt;td&gt;71.5&lt;/td&gt; &lt;td&gt;66.1&lt;/td&gt; &lt;td&gt;69.5&lt;/td&gt; &lt;td&gt;67.4&lt;/td&gt; &lt;td&gt;68.3&lt;/td&gt; &lt;td&gt;59.0&lt;/td&gt; &lt;td&gt;66.9&lt;/td&gt; &lt;td&gt;60.8&lt;/td&gt; &lt;td&gt;66.6&lt;/td&gt; &lt;td&gt;65.7&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2012-01-01 06:10:00&lt;/td&gt; &lt;td&gt;69.2&lt;/td&gt; &lt;td&gt;69.0&lt;/td&gt; &lt;td&gt;68.6&lt;/td&gt; &lt;td&gt;68.7&lt;/td&gt; &lt;td&gt;68.6&lt;/td&gt; &lt;td&gt;68.9&lt;/td&gt; &lt;td&gt;61.7&lt;/td&gt; &lt;td&gt;68.3&lt;/td&gt; &lt;td&gt;67.4&lt;/td&gt; &lt;td&gt;67.7&lt;/td&gt; &lt;td&gt;...&lt;/td&gt; &lt;td&gt;71.1&lt;/td&gt; &lt;td&gt;65.2&lt;/td&gt; &lt;td&gt;71.2&lt;/td&gt; &lt;td&gt;66.5&lt;/td&gt; &lt;td&gt;65.4&lt;/td&gt; &lt;td&gt;59.6&lt;/td&gt; &lt;td&gt;66.3&lt;/td&gt; &lt;td&gt;58.4&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;65.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2012-01-01 06:15:00&lt;/td&gt; &lt;td&gt;69.9&lt;/td&gt; &lt;td&gt;69.6&lt;/td&gt; &lt;td&gt;69.7&lt;/td&gt; &lt;td&gt;69.2&lt;/td&gt; &lt;td&gt;69.0&lt;/td&gt; &lt;td&gt;69.1&lt;/td&gt; &lt;td&gt;65.3&lt;/td&gt; &lt;td&gt;67.6&lt;/td&gt; &lt;td&gt;67.1&lt;/td&gt; &lt;td&gt;66.8&lt;/td&gt; &lt;td&gt;...&lt;/td&gt; &lt;td&gt;69.9&lt;/td&gt; &lt;td&gt;67.1&lt;/td&gt; &lt;td&gt;69.3&lt;/td&gt; &lt;td&gt;66.9&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;60.6&lt;/td&gt; &lt;td&gt;66.0&lt;/td&gt; &lt;td&gt;55.5&lt;/td&gt; &lt;td&gt;67.1&lt;/td&gt; &lt;td&gt;69.7&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2012-01-01 06:20:00&lt;/td&gt; &lt;td&gt;68.7&lt;/td&gt; &lt;td&gt;68.4&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;67.9&lt;/td&gt; &lt;td&gt;68.3&lt;/td&gt; &lt;td&gt;69.3&lt;/td&gt; &lt;td&gt;67.0&lt;/td&gt; &lt;td&gt;68.4&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;68.2&lt;/td&gt; &lt;td&gt;...&lt;/td&gt; &lt;td&gt;70.9&lt;/td&gt; &lt;td&gt;67.2&lt;/td&gt; &lt;td&gt;69.9&lt;/td&gt; &lt;td&gt;65.6&lt;/td&gt; &lt;td&gt;66.7&lt;/td&gt; &lt;td&gt;62.8&lt;/td&gt; &lt;td&gt;66.2&lt;/td&gt; &lt;td&gt;62.6&lt;/td&gt; &lt;td&gt;67.2&lt;/td&gt; &lt;td&gt;67.5&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;5 rows × 89 columns&lt;/p&gt; &lt;/div&gt; ```python meta.head() ``` &lt;div&gt; &lt;style scoped&gt; .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } &lt;/style&gt; &lt;table border="1" class="dataframe"&gt; &lt;thead&gt; &lt;tr style="text-align: right;"&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;ID&lt;/th&gt; &lt;th&gt;Abs_mp&lt;/th&gt; &lt;th&gt;Latitude&lt;/th&gt; &lt;th&gt;Longitude&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;Fwy&lt;/th&gt; &lt;th&gt;Dir&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;th&gt;&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td rowspan="5" valign="top"&gt;5&lt;/td&gt; &lt;td&gt;S&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;0.058&lt;/td&gt; &lt;td&gt;32.542731&lt;/td&gt; &lt;td&gt;-117.030501&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;S&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;0.146&lt;/td&gt; &lt;td&gt;32.543587&lt;/td&gt; &lt;td&gt;-117.031769&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;S&lt;/td&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;1.291&lt;/td&gt; &lt;td&gt;32.552409&lt;/td&gt; &lt;td&gt;-117.048120&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;S&lt;/td&gt; &lt;td&gt;4&lt;/td&gt; &lt;td&gt;2.222&lt;/td&gt; &lt;td&gt;32.558422&lt;/td&gt; &lt;td&gt;-117.062360&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;S&lt;/td&gt; &lt;td&gt;5&lt;/td&gt; &lt;td&gt;2.559&lt;/td&gt; &lt;td&gt;32.561106&lt;/td&gt; &lt;td&gt;-117.067228&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; ### Choose a day ```python # Sampling (2012-01-13) myday = "2012-01-13" # Filter the data by the day myday_speed_data = data.loc[myday] ``` ### A speed profile ```python from matplotlib import pyplot as plt import matplotlib.dates as mdates # Axis value setting mp = meta[meta.ID.isin(data.columns)].Abs_mp hour = myday_speed_data.index # Draw the day fig, ax = plt.subplots() heatmap = ax.pcolormesh(hour,mp,myday_speed_data.T, cmap=plt.cm.RdYlGn, vmin=0, vmax=80, alpha=1) plt.colorbar(heatmap, ax=ax) # Appearance setting ax.xaxis.set_major_formatter(mdates.DateFormatter("%H")) plt.title(pd.Timestamp(myday).strftime("%Y-%m-%d [%a]")) plt.xlabel("hour") plt.ylabel("milepost") plt.show() ``` ![png](output_9_0.png) </code></pre>