Culture shock is usually the result of a series of small changes in someone’s environment that eventually create stress. When I lived in Wales, it wasn’t the fact that it was rainy all the time, or that the accents were different, or even that they drove on the opposite side of the road. My final straw was that I kept running into people with their shopping carts at the store because they also instinctively push their carts to the other side.
We recently moved to North Dayton, and my biggest shock is how windy it is. And nobody believes me. Everyone says it’s just spring, or that it’s not any more windy than Cincinnati. Eventually, I was having a picnic at a park with my family and our friends, and a bunch of stuff blew off the table, and I had my breakdown moment. Now I just want to show that I’m justified, with a quick data experiment that you can duplicate within 5 minutes and an API access.
Methodology
- Import data from NOAA
- Break down the Dayton Weather Reports versus the Cincinnati Weather reports
- Sort by weekly ranges, to control for seasonality of average wind-speeds
- Plot and compare
Data Notes
This project is pretty simple – and would make a great code-along project, so I’ll review the code here.
First, import pandas (the best Python tool for data analysis, in my opinion), as well as a plotting tool. I’m using Matplotlib, but you could also use a bunch of other plotting tools (Seaborn, etc.)
import pandas as pdimport matplotlib.pyplot as plt
Second, import your data after finding station data on the NOAA website. After you download the daily data set from the website as a CSV, upload it to the same folder where your project lives. Then, create a new DataFrame (DF).
df = pd.read_csv('wind_speeds.csv')df
Add a helper column to your data set for a week number. There are a couple more ways you could do this (month, days, etc.) I chose weekly because I feel like that’s probably the sweet spot for looking at seasonal swings without a super messy chart.
df["DATE"] = pd.to_datetime(df["DATE"])df["Week"] = df["DATE"].dt.isocalendar().week
Then I used the Data Frame to create two “children” Data Frames, one for Dayton, and one for Cincinnati.
dayton_df = df[df['NAME'] == 'DAYTON INTERNATIONAL AIRPORT, OH US']cincinnati_df = df[df['NAME'] == 'CINCINNATI MUNICIPAL AIRPORT LUNKEN FIELD, OH US']
Then, I grouped by week number to control for any weird swings. I pulled in data from 2021 to the present, so I have a five-year data set to control for any wild swings.
dayton_grouped = dayton_df.groupby('Week')['AWND'].mean().reset_index()dayton_grouped.rename(columns={'AWND': 'Dayton_Average_Wind'}, inplace=True)cincinnati_grouped = cincinnati_df.groupby('Week')['AWND'].mean().reset_index()cincinnati_grouped.rename(columns={'AWND': 'Cincinnati_Average_Wind'}, inplace=True)
Finally, I merged them back together, to create a new grouped data-set.
combined_df = pd.merge(dayton_grouped, cincinnati_grouped, on='Week')combined_df
Then, I created a plot, with the following formatting.
plt.figure(figsize=(12, 6))plt.plot(combined_df['Week'], combined_df['Dayton_Average_Wind'], label='Dayton Average Wind Speed', marker='o')plt.plot(combined_df['Week'], combined_df['Cincinnati_Average_Wind'], label='Cincinnati Average Wind Speed', marker='o')plt.title('Average Weekly Wind Speeds in Dayton and Cincinnati (2021-2026)')plt.xlabel('Week of the Year')plt.ylabel('Average Wind Speed (AWND)')plt.legend()plt.grid()
Results
Regardless of the season, Dayton is significantly more windy than Cincinnati. AND IT’S NOTICABLE. Believe me or not, you can tell a difference, and it does matter.

Stay Curious!
Sources
Climate Data Online (CDO) – The National Climatic Data Center’s (NCDC) Climate Data Online (CDO) provides free access to NCDC’s archive of historical weather and climate data in addition to station history information. | National Climatic Data Center (NCDC). n.d. Retrieved April 16, 2026. https://www.ncei.noaa.gov/cdo-web/.

Leave a Reply