What was the average daily amount of precipitation in Bellingham in 2020?
def data_url(city_name):
base_url = "https://facultyweb.cs.wwu.edu/~wehrwes/courses/csci141_21s/fp/data/"
return base_url + city_name + ".csv"
import pandas as pd
ham = pd.read_csv(data_url("WA_Bellingham"), low_memory=False)
ham.info(verbose=True)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 11348 entries, 0 to 11347 Data columns (total 124 columns): # Column Dtype --- ------ ----- 0 STATION int64 1 DATE object 2 REPORT_TYPE object 3 SOURCE int64 4 AWND float64 5 BackupDirection float64 6 BackupDistance float64 7 BackupDistanceUnit float64 8 BackupElements float64 9 BackupElevation float64 10 BackupElevationUnit float64 11 BackupEquipment float64 12 BackupLatitude float64 13 BackupLongitude float64 14 BackupName float64 15 CDSD float64 16 CLDD float64 17 DSNW float64 18 DailyAverageDewPointTemperature float64 19 DailyAverageDryBulbTemperature object 20 DailyAverageRelativeHumidity float64 21 DailyAverageSeaLevelPressure float64 22 DailyAverageStationPressure float64 23 DailyAverageWetBulbTemperature float64 24 DailyAverageWindSpeed float64 25 DailyCoolingDegreeDays object 26 DailyDepartureFromNormalAverageTemperature object 27 DailyHeatingDegreeDays object 28 DailyMaximumDryBulbTemperature float64 29 DailyMinimumDryBulbTemperature object 30 DailyPeakWindDirection object 31 DailyPeakWindSpeed object 32 DailyPrecipitation object 33 DailySnowDepth float64 34 DailySnowfall float64 35 DailySustainedWindDirection float64 36 DailySustainedWindSpeed float64 37 DailyWeather object 38 HDSD float64 39 HTDD float64 40 HeavyFog float64 41 HourlyAltimeterSetting float64 42 HourlyDewPointTemperature object 43 HourlyDryBulbTemperature object 44 HourlyPrecipitation object 45 HourlyPresentWeatherType object 46 HourlyPressureChange float64 47 HourlyPressureTendency float64 48 HourlyRelativeHumidity float64 49 HourlySeaLevelPressure object 50 HourlySkyConditions object 51 HourlyStationPressure float64 52 HourlyVisibility object 53 HourlyWetBulbTemperature float64 54 HourlyWindDirection object 55 HourlyWindGustSpeed float64 56 HourlyWindSpeed float64 57 MonthlyAverageRH float64 58 MonthlyDaysWithGT001Precip float64 59 MonthlyDaysWithGT010Precip float64 60 MonthlyDaysWithGT32Temp float64 61 MonthlyDaysWithGT90Temp float64 62 MonthlyDaysWithLT0Temp float64 63 MonthlyDaysWithLT32Temp float64 64 MonthlyDepartureFromNormalAverageTemperature float64 65 MonthlyDepartureFromNormalCoolingDegreeDays float64 66 MonthlyDepartureFromNormalHeatingDegreeDays float64 67 MonthlyDepartureFromNormalMaximumTemperature float64 68 MonthlyDepartureFromNormalMinimumTemperature float64 69 MonthlyDepartureFromNormalPrecipitation float64 70 MonthlyDewpointTemperature float64 71 MonthlyGreatestPrecip float64 72 MonthlyGreatestPrecipDate float64 73 MonthlyGreatestSnowDepth float64 74 MonthlyGreatestSnowDepthDate float64 75 MonthlyGreatestSnowfall float64 76 MonthlyGreatestSnowfallDate float64 77 MonthlyMaxSeaLevelPressureValue float64 78 MonthlyMaxSeaLevelPressureValueDate float64 79 MonthlyMaxSeaLevelPressureValueTime float64 80 MonthlyMaximumTemperature float64 81 MonthlyMeanTemperature float64 82 MonthlyMinSeaLevelPressureValue float64 83 MonthlyMinSeaLevelPressureValueDate float64 84 MonthlyMinSeaLevelPressureValueTime float64 85 MonthlyMinimumTemperature float64 86 MonthlySeaLevelPressure float64 87 MonthlyStationPressure float64 88 MonthlyTotalLiquidPrecipitation float64 89 MonthlyTotalSnowfall float64 90 MonthlyWetBulb float64 91 NormalsCoolingDegreeDay float64 92 NormalsHeatingDegreeDay float64 93 REM object 94 REPORT_TYPE.1 object 95 SOURCE.1 int64 96 ShortDurationEndDate005 float64 97 ShortDurationEndDate010 float64 98 ShortDurationEndDate015 float64 99 ShortDurationEndDate020 float64 100 ShortDurationEndDate030 float64 101 ShortDurationEndDate045 float64 102 ShortDurationEndDate060 float64 103 ShortDurationEndDate080 float64 104 ShortDurationEndDate100 float64 105 ShortDurationEndDate120 float64 106 ShortDurationEndDate150 float64 107 ShortDurationEndDate180 float64 108 ShortDurationPrecipitationValue005 float64 109 ShortDurationPrecipitationValue010 float64 110 ShortDurationPrecipitationValue015 float64 111 ShortDurationPrecipitationValue020 float64 112 ShortDurationPrecipitationValue030 float64 113 ShortDurationPrecipitationValue045 float64 114 ShortDurationPrecipitationValue060 float64 115 ShortDurationPrecipitationValue080 float64 116 ShortDurationPrecipitationValue100 float64 117 ShortDurationPrecipitationValue120 float64 118 ShortDurationPrecipitationValue150 float64 119 ShortDurationPrecipitationValue180 float64 120 Sunrise float64 121 Sunset float64 122 TStorms float64 123 WindEquipmentChangeDate float64 dtypes: float64(100), int64(3), object(21) memory usage: 10.7+ MB
ham
STATION | DATE | REPORT_TYPE | SOURCE | AWND | BackupDirection | BackupDistance | BackupDistanceUnit | BackupElements | BackupElevation | ... | ShortDurationPrecipitationValue060 | ShortDurationPrecipitationValue080 | ShortDurationPrecipitationValue100 | ShortDurationPrecipitationValue120 | ShortDurationPrecipitationValue150 | ShortDurationPrecipitationValue180 | Sunrise | Sunset | TStorms | WindEquipmentChangeDate | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 72797624217 | 2020-01-01T00:14:00 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
1 | 72797624217 | 2020-01-01T00:24:00 | FM-16 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
2 | 72797624217 | 2020-01-01T00:53:00 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
3 | 72797624217 | 2020-01-01T01:53:00 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
4 | 72797624217 | 2020-01-01T02:53:00 | FM-15 | 7 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
11343 | 72797624217 | 2020-12-31T20:53:00 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11344 | 72797624217 | 2020-12-31T21:53:00 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11345 | 72797624217 | 2020-12-31T22:53:00 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11346 | 72797624217 | 2020-12-31T23:53:00 | FM-15 | 4 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
11347 | 72797624217 | 2020-12-31T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1624.0 | NaN | NaN |
11348 rows × 124 columns
ham["DailyPrecipitation"]
0 NaN 1 NaN 2 NaN 3 NaN 4 NaN ... 11343 NaN 11344 NaN 11345 NaN 11346 NaN 11347 0.40 Name: DailyPrecipitation, Length: 11348, dtype: object
Many rows have NaN, which means missing data. Let's filter out only rows wiht report type "SOD". We found that it's not actually "SOD"
, but "SOD "
, so we instead found all rows that contain the string "SOD"
in the REPORT_TYPE
column:
mask = ham["REPORT_TYPE"].str.contains("SOD")
# mask = ham["REPORT_TYPE"] == "SOD "
dailies = ham[mask]
dailies
STATION | DATE | REPORT_TYPE | SOURCE | AWND | BackupDirection | BackupDistance | BackupDistanceUnit | BackupElements | BackupElevation | ... | ShortDurationPrecipitationValue060 | ShortDurationPrecipitationValue080 | ShortDurationPrecipitationValue100 | ShortDurationPrecipitationValue120 | ShortDurationPrecipitationValue150 | ShortDurationPrecipitationValue180 | Sunrise | Sunset | TStorms | WindEquipmentChangeDate | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
27 | 72797624217 | 2020-01-01T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 804.0 | 1624.0 | NaN | NaN |
58 | 72797624217 | 2020-01-02T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1625.0 | NaN | NaN |
86 | 72797624217 | 2020-01-03T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1627.0 | NaN | NaN |
115 | 72797624217 | 2020-01-04T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1628.0 | NaN | NaN |
147 | 72797624217 | 2020-01-05T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1629.0 | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
11188 | 72797624217 | 2020-12-27T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1621.0 | NaN | NaN |
11236 | 72797624217 | 2020-12-28T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1621.0 | NaN | NaN |
11275 | 72797624217 | 2020-12-29T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1622.0 | NaN | NaN |
11304 | 72797624217 | 2020-12-30T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1623.0 | NaN | NaN |
11347 | 72797624217 | 2020-12-31T23:59:00 | SOD | 6 | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | 803.0 | 1624.0 | NaN | NaN |
366 rows × 124 columns
notraces = dailies["DailyPrecipitation"].str.replace("T", "0.0")
notraces = notraces.str.rstrip("s").astype(float)
notraces.mean()
0.11300546448087434
notraces.std() # standard deviation
0.2230393661983623
We can visualize the frequency of different values with the plot.hist
function. Check out the documentation for more on how to control the bin size, which can be important depending on your data.
precip_amts.plot.hist()
<AxesSubplot:ylabel='Frequency'>
Show a bunch of useful summary stats:
precip_amts.describe()
count 366.000000 mean 0.113005 std 0.223039 min 0.000000 25% 0.000000 50% 0.000000 75% 0.130000 max 1.820000 Name: DailyPrecipitation, dtype: float64