diff --git a/sensor/energy_info.py b/sensor/energy_info.py index e993f4c3..e69de29b 100644 --- a/sensor/energy_info.py +++ b/sensor/energy_info.py @@ -1,31 +0,0 @@ -from house_info import HouseInfo -from datetime import datetime, date - -class EnergyData(HouseInfo): - - ENERGY_PER_BULB = 0.2 - ENERGY_BITS = 0x0F0 - - def _get_energy(self, rec): - rec = int(rec, 16) - rec = rec & self.ENERGY_BITS - rec = rec >> 4 - return rec - - def _convert_data(self, data): - recs = [] - for rec in data: - recs.append(self._get_energy(rec)) - return recs - - def get_data_by_area(self, rec_area=0): - recs = super().get_data_by_area("energy_usage", rec_area) - return self._convert_data(recs) - - def get_data_by_date(self, rec_date=date.today()): - recs = super().get_data_by_date("energy_usage", rec_date) - return self._convert_data(recs) - - def calculate_energy_usage(self, data): - total_energy = sum([field * self.ENERGY_PER_BULB for field in data]) - return total_energy diff --git a/sensor/house_info.py b/sensor/house_info.py index 0002d78b..7c516635 100644 --- a/sensor/house_info.py +++ b/sensor/house_info.py @@ -1,25 +1,22 @@ -from datetime import date, datetime - -class HouseInfo: +from datetime import date +class HouseInfo(object): def __init__(self, data): self.data = data def get_data_by_area(self, field, rec_area=0): field_data = [] for record in self.data: - if rec_area != 0: - if int(record['area']) == rec_area: - field_data.append(record[field]) - else: + if rec_area == 0: + field_data.append(record[field]) + elif rec_area == int(record['area']): field_data.append(record[field]) return field_data def get_data_by_date(self, field, rec_date=date.today()): field_data = [] + for record in self.data: - #if record['date'] == rec_date.strftime("%m/%d/%y"): - if rec_date.strftime("%m/%d/%y") == record['date'] : + if rec_date.strftime("%m/%d/%y") == record['date']: field_data.append(record[field]) - - return field_data + return field_data \ No newline at end of file diff --git a/sensor/humidity_info.py b/sensor/humidity_info.py index 8b552c58..f17ef309 100644 --- a/sensor/humidity_info.py +++ b/sensor/humidity_info.py @@ -1,18 +1,20 @@ from house_info import HouseInfo -from datetime import date, datetime +from datetime import date -class HumidityData(HouseInfo): +class HumidityData(HouseInfo): def _convert_data(self, data): recs = [] for rec in data: + # Convert string of integers into actual integers based 10 recs.append(float(rec) * 100) return recs - + def get_data_by_area(self, rec_area=0): recs = super().get_data_by_area("humidity", rec_area) return self._convert_data(recs) + def get_data_by_date(self, rec_date=date.today()): recs = super().get_data_by_date("humidity", rec_date) - return self._convert_data(recs) + return self._convert_data(recs) \ No newline at end of file diff --git a/sensor/load_data.py b/sensor/load_data.py index 31b231c9..aa02f61e 100644 --- a/sensor/load_data.py +++ b/sensor/load_data.py @@ -1,26 +1,20 @@ -import os, glob, csv +import os +import glob +import csv -''' -1. Create one `for` loop that loops through `sensor_files` using `sensor_file` as the iterator variable. - -1. In the body of this loop use a `with` statement to `open` the `sensor_file` and set the alias to `data_file`. - -1. In the `with` body, set a variable called `data_reader` equal to `csv.DictReader()`. Pass in the current `data_file` as the first argument, and set the `delimiter=','` as the second argument. The `data_reader` will contain a list of dictionaries with the sensor data. - -1. Create a second `for` loop to `data_file` to get access to each record. Use `row` as your iterator variable. - -1. Inside the body of the second `for` loop, append each `row` record to the `sensor_data` list created on `Task 2` - -Finally, your function should return `sensor_data` list containing a list of dictionaries. -''' def load_sensor_data(): sensor_data = [] - sensor_files = glob.glob(os.path.join(os.getcwd(), "datasets", "*.csv")) + sensor_files = glob.glob(os.path.join(os.getcwd(), 'datasets', '*.csv')) + + # Loop over list of files for sensor_file in sensor_files: - with open(sensor_file) as data_file: + with open(sensor_file ) as data_file: + # Create a csv.DictReader data_reader = csv.DictReader(data_file, delimiter=',') + # Loop over each row dictionary for row in data_reader: + # Create a list of dictionaries sensor_data.append(row) - return sensor_data + return sensor_data \ No newline at end of file diff --git a/sensor/particle_count_info.py b/sensor/particle_count_info.py index 8ee911d2..3fc13268 100644 --- a/sensor/particle_count_info.py +++ b/sensor/particle_count_info.py @@ -1,29 +1,32 @@ from house_info import HouseInfo -from datetime import date, datetime +from datetime import date -class ParticleData(HouseInfo): +class ParticleData(HouseInfo): def _convert_data(self, data): recs = [] for rec in data: + # Convert string of integers into actual integers based 10 recs.append(float(rec)) return recs - + def get_data_by_area(self, rec_area=0): recs = super().get_data_by_area("particulate", rec_area) return self._convert_data(recs) - + def get_data_by_date(self, rec_date=date.today()): recs = super().get_data_by_date("particulate", rec_date) return self._convert_data(recs) def get_data_concentrations(self, data): - particulate = { 'good':0, 'moderate':0, 'bad':0} + particulate = {"good": 0, "moderate": 0, "bad": 0} for rec in data: + # Select particulate concentration if rec <= 50.0: - particulate['good'] += 1 - elif rec <= 100.0: - particulate['moderate'] += 1 + particulate["good"] += 1 + elif rec > 50.0 and rec <= 100: + particulate["moderate"] += 1 else: - particulate['bad'] += 1 - return particulate + particulate["bad"] += 1 + + return particulate \ No newline at end of file diff --git a/sensor/sensor_app.py b/sensor/sensor_app.py index 3441204a..cd88f6de 100644 --- a/sensor/sensor_app.py +++ b/sensor/sensor_app.py @@ -1,73 +1,67 @@ +# Runner script for all modules +from load_data import load_sensor_data from house_info import HouseInfo -from load_data import load_sensor_data from datetime import datetime, date from temperature_info import TemperatureData from humidity_info import HumidityData from statistics import mean from particle_count_info import ParticleData -from energy_info import EnergyData - -# don't remove +############################## +# Do not remove these two lines +# They are needed to validate your unittest data = [] print("Sensor Data App") +############################## +# Module 1 code here: data = load_sensor_data() -#data = [] -#print(f'Loaded records: [{data}]') -print('Loaded records: {0}'.format(len(data))) - +print("Loaded records: {}".format(len(data))) +# Module 2 code here: house_info = HouseInfo(data) +test_area = 1 +recs = house_info.get_data_by_area("id", rec_area=test_area) +print("\nHouse sensor records for area {} = {}".format(test_area, len(recs))) -recs = house_info.get_data_by_area('id', rec_area=1) -print('House sensor records for area 1 = {0}'.format(len(recs))) -#rec_date = datetime.strptime("5/9/2020" , "%m/%d/%Y") -#record_date = datetime.strptime("5/9/20" , "%m/%d/%y") -test_date = datetime.strptime("5/9/20" , "%m/%d/%y") -#recs = house_info.get_data_by_date("id", rec_date) -#recs = house_info.get_data_by_date("id", record_date) +test_date = datetime.strptime("5/9/20", "%m/%d/%y") recs = house_info.get_data_by_date("id", rec_date=test_date) -print('House sensor records for 2020-05-09 = {0}'.format(len(recs))) +print("House sensor records for date {} = {}".format(test_date.strftime("%m/%d/%y"), len(recs))) +# Module 3 code here: temperature_data = TemperatureData(data) -recs = temperature_data.get_data_by_area(rec_area=1) -print("\nHouse Temperature sensor records for area 1 = {}".format(len(recs))) +recs = temperature_data.get_data_by_area(rec_area=test_area) +print("\nHouse Temperature sensor records for area {} = {}".format(test_area, len(recs))) print("\tMaximum: {0}, Minimum: {1} temperatures".format(max(recs), min(recs))) recs = temperature_data.get_data_by_date(rec_date=test_date) -print("\nHouse Temperature sensor records for area 1 = {}".format(len(recs))) +print("\nHouse Temperature sensor records for date: {} = {}".format( + test_date.strftime("%m/%d/%y"), len(recs))) print("\tMaximum: {0}, Minimum: {1} temperatures".format(max(recs), min(recs))) +# Module 4 code here: humidity_data = HumidityData(data) -recs = humidity_data.get_data_by_area(rec_area=1) -print("\nHouse Humidity sensor records for area 1 = {}".format(len(recs))) +recs = humidity_data.get_data_by_area(rec_area=test_area) +print("\nHouse Humidity sensor records for area {} = {}".format(test_area, len(recs))) print("\tAverage: {} humidity".format(mean(recs))) recs = humidity_data.get_data_by_date(rec_date=test_date) -print("House Humidity sensor records for date: {} = {}".format( test_date.strftime("%m/%d/%y"), len(recs))) -print("\tAverrage: {} humdity".format(mean(recs))) +print("House Humidity sensor records for date: {} = {}".format( + test_date.strftime("%m/%d/%y"), len(recs))) +print("\tAverrage: {} humidity".format(mean(recs))) +# Module 4B particle_data = ParticleData(data) -recs = particle_data.get_data_by_area(rec_area=1) -print("\nHouse Particle sensor records for area 1 = {}".format(len(recs))) +recs = particle_data.get_data_by_area(rec_area=test_area) +print("\nHouse Particle sensor records for area {} = {}".format(test_area, len(recs))) concentrations = particle_data.get_data_concentrations(data=recs) print("\tGood Air Quality Recs: {}".format(concentrations["good"])) print("\tModerate Air Quality Recs: {}".format(concentrations["moderate"])) print("\tBad Air Quality Recs: {}".format(concentrations["bad"])) recs = particle_data.get_data_by_date(rec_date=test_date) -print("\nHouse Particle sensor records for date: {} = {}".format( test_date.strftime("%m/%d/%y"), len(recs))) -concentrations = particle_data.get_data_concentrations(data=recs) +print("\nHouse Particle sensor records for date: {} = {}".format( + test_date.strftime("%m/%d/%y"), len(recs))) +concentrations = particle_data.get_data_concentrations(data = recs) print("\tGood Air Quality Recs: {}".format(concentrations["good"])) print("\tModerate Air Quality Recs: {}".format(concentrations["moderate"])) print("\tBad Air Quality Recs: {}".format(concentrations["bad"])) - -energy_data = EnergyData(data) -recs = energy_data.get_data_by_area(rec_area=1) -print("\nHouse Energy sensor records for area 1 = {}".format(len(recs))) -total_energy = energy_data.calculate_energy_usage(data=recs) -print("\tEnergy Usage: {:2.2} Watts".format(total_energy)) - -recs = energy_data.get_data_by_date(rec_date=test_date) -print("House Energy sensor records for date: {} = {}".format( test_date.strftime("%m/%d/%y"), len(recs))) -total_energy = energy_data.calculate_energy_usage(data=recs) -print("\tEnergy Usage: {:2.2} Watts".format(total_energy)) +# Module 5 code here: \ No newline at end of file diff --git a/sensor/temperature_info.py b/sensor/temperature_info.py index 051a9b10..7703b09c 100644 --- a/sensor/temperature_info.py +++ b/sensor/temperature_info.py @@ -1,20 +1,18 @@ - from house_info import HouseInfo -from datetime import datetime, date +from datetime import date class TemperatureData(HouseInfo): - def _convert_data(self, data): recs = [] for rec in data: - # recs.append(int(rec, base=10)) - recs.append(int(rec, 10)) + # Convert string of integers into integers based 10 + recs.append(int(rec, base=10)) return recs - + def get_data_by_area(self, rec_area=0): recs = super().get_data_by_area("temperature", rec_area) return self._convert_data(recs) def get_data_by_date(self, rec_date=date.today()): recs = super().get_data_by_date("temperature", rec_date) - return self._convert_data(recs) + return self._convert_data(recs) \ No newline at end of file