diff --git a/2016_1HR.csv b/2016_1HR.csv
index 402efc6e8fad876df01ca04b088a32654de8d2f4..29f45c883e2a30329aaceba504a3e49918be2ec8 100644
--- a/2016_1HR.csv
+++ b/2016_1HR.csv
@@ -1,3 +1,4 @@
+sp_name,sample_datetime,time_basis_id,value
 Alphington,01-01-16 0:00,1HR_AV,22.79999924
 Alphington,01-01-16 1:00,1HR_AV,26.39999962
 Alphington,01-01-16 2:00,1HR_AV,22.60000038
diff --git a/2016_AV_READING.csv b/2016_AV_READING.csv
new file mode 100644
index 0000000000000000000000000000000000000000..36eb0a4586259a16d77617a394d59891afbd2b04
--- /dev/null
+++ b/2016_AV_READING.csv
@@ -0,0 +1,9 @@
+sp_name,value
+Alphington,14.423692019423688
+Brooklyn,20.259909177105143
+Dandenong,15.554988189340063
+Footscray,15.077387055742498
+Geelong South,17.114088090521765
+Mooroolbark,13.03298071988639
+Richmond,16.088718474207894
+Traralgon,13.789331489934671
diff --git a/2016_MAX_1HR_READING.csv b/2016_MAX_1HR_READING.csv
new file mode 100644
index 0000000000000000000000000000000000000000..95d35b43d7f7e27b69c95a030db502782f4d798c
--- /dev/null
+++ b/2016_MAX_1HR_READING.csv
@@ -0,0 +1,9 @@
+sp_name,value
+Alphington,310.5
+Brooklyn,292.8999939
+Dandenong,189.8999939
+Footscray,180.5
+Geelong South,919.0999756
+Mooroolbark,304.1000061
+Richmond,336.2000122
+Traralgon,120.0999985
diff --git a/2016_MAX_24HR_READING.csv b/2016_MAX_24HR_READING.csv
new file mode 100644
index 0000000000000000000000000000000000000000..dbd0bb82c6d47406329b13bdeaa0333a0e6326ef
--- /dev/null
+++ b/2016_MAX_24HR_READING.csv
@@ -0,0 +1,9 @@
+sp_name,value
+Alphington,37.87500011879167
+Brooklyn,82.41250022125
+Dandenong,40.941667120000005
+Footscray,42.65833330041665
+Geelong South,68.35000076016667
+Mooroolbark,44.6833333975
+Richmond,35.79583295166666
+Traralgon,49.191666285416666
diff --git a/ovi.py b/ovi.py
new file mode 100644
index 0000000000000000000000000000000000000000..84d2632a0b644cde1e603015fbfcf8bc4826fa03
--- /dev/null
+++ b/ovi.py
@@ -0,0 +1,28 @@
+import pandas as pandas
+
+air_quality_readings = pandas.read_csv("2016_1HR.csv", dtype="str", low_memory=False)
+def time_to_iso8601(old):
+    #01-01-16 0:00 to 2016-01-01T00:00
+    parts = old.split(" ")
+    old_date = parts[0]
+    new_date = "20" + old_date[6:8] + "-" + old_date[3:5] + "-" + old_date[0:2]
+    old_time = parts[1]
+    time = new_date + "T" + old_time.zfill(5)
+    return time
+
+air_quality_readings["sample_datetime"] = air_quality_readings["sample_datetime"].apply(time_to_iso8601)
+air_quality_readings = air_quality_readings.drop("time_basis_id", axis=1)
+
+air_quality_readings = air_quality_readings.sort_values(['sp_name', 'sample_datetime'])
+air_quality_readings['sample_datetime'] = pandas.to_datetime(air_quality_readings['sample_datetime'], format = "%Y-%m-%dT%H:%M")
+air_quality_readings['value'] = air_quality_readings['value'].astype(float)
+air_quality_readings = air_quality_readings.set_index(["sample_datetime"])
+max_readings = air_quality_readings.groupby(['sp_name']).max()
+
+max_readings.to_csv(path_or_buf = "2016_MAX_1HR_READING.csv")
+
+max_24HR = air_quality_readings.groupby(["sp_name"]).resample("D").mean().groupby(["sp_name"]).max()
+max_24HR.to_csv(path_or_buf = "2016_MAX_24HR_READING.csv")
+
+average = air_quality_readings.groupby(["sp_name"]).mean()
+average.to_csv(path_or_buf = "2016_AV_READING.csv")
\ No newline at end of file