GEP475GROUPINEEDANAP
This is just brain drain of the analysis process and is not detailed enough for exact units at the moment since I don't know all the units yet; we can clean it up, amend it, or scrap it later.
We ultimately want to find cfms per hour. How do we go about that? Breaking down what the question is asking us, we get cubic feet per minute per hour. Essentially though, in order to get a CFM number for a ventilation fan that is appropriate for a total circulation of the ETC air space in one hour, we would need to acquire only one variable:
total approximate volume of the ETC, all rooms included or no?
Because of the assumed steadiness of our real question of air changes per hour using CO2 escape rates, using one hour for an air change is fine... as the ETC's will probably be a little over an hour for one full air change.
Using x volume of the ETC in Cubic Feet, we multiply by 1 air change, and then divide by 60 minutes to get the ideal ETC CFM!
But wait, our question of study is to determine the ACTUAL CFMs through infiltration of the ETC using the CO2 decay rates, and so our analysis will stem from data we collect from NetAtmo to begin with.
Assuming we get a steady rate of decrease from the CO2 decay data, we can get a change, or difference, of CO2 per hour; per hour is gotten by taking the CO2 concentrations(ppm) in the hour interval after EMD forum. This will help in our conversion to CFH and CFM later on.
Assuming the CO2 is spread evenly throughout the volume of the ETC; we got a ratio of the peak CO2 per cubic foot of the ETC, this ratio will allow us to compare it, units wise, with the change of CO2 per hour we got above.
The amount of CO2 decrease per hour can then be divided by the ratio above to get the cubic feet per hour infiltration rate.
With our cubic feet per hour we can divide once more by 60 minutes to get our result of cubic feet per minute aka a true CFM infiltration rate; or we can just keep it at CFM per hour, whatever suits our needs.
An example problem of rudimentary coding for 2016 data is started in NetAtmo_2016.ipynb at the bottom.
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-2-42955059ad2c> in <module>()
6 data = pd.read_csv('NetAtmo_2016.csv',
7 index_col=1, # use column 1 as the dates to index the data
----> 8 parse_dates=True) # convert the date string into a date object
9 data[-5:]
/ext/anaconda3/lib/python3.5/site-packages/pandas/io/parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision)
707 skip_blank_lines=skip_blank_lines)
708
--> 709 return _read(filepath_or_buffer, kwds)
710
711 parser_f.__name__ = name
/ext/anaconda3/lib/python3.5/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds)
447
448 # Create the parser.
--> 449 parser = TextFileReader(filepath_or_buffer, **kwds)
450
451 if chunksize or iterator:
/ext/anaconda3/lib/python3.5/site-packages/pandas/io/parsers.py in __init__(self, f, engine, **kwds)
816 self.options['has_index_names'] = kwds['has_index_names']
817
--> 818 self._make_engine(self.engine)
819
820 def close(self):
/ext/anaconda3/lib/python3.5/site-packages/pandas/io/parsers.py in _make_engine(self, engine)
1047 def _make_engine(self, engine='c'):
1048 if engine == 'c':
-> 1049 self._engine = CParserWrapper(self.f, **self.options)
1050 else:
1051 if engine == 'python':
/ext/anaconda3/lib/python3.5/site-packages/pandas/io/parsers.py in __init__(self, src, **kwds)
1693 kwds['allow_leading_cols'] = self.index_col is not False
1694
-> 1695 self._reader = parsers.TextReader(src, **kwds)
1696
1697 # XXX
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()
pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()
FileNotFoundError: File b'NetAtmo_2016.csv' does not exist
Starting with the calculations of three samples of CO2 decay (by an hour's difference) after EMD forum to get an average CO2 decay per hour.
Below we will average the three decay differences of an hour.
Because I used the average of three sample CO2 decays, now we need to get the average of the peak CO2 in the ETC at the end of each EMD forum to be a representative peak CO2 that we can ratio with the volume of the ETC.
Using the average peak CO2 we just got with our estimated volume of the ETC, we can get a concentration of CO2 per cubic foot of volume at peak times immediately after EMD forum in the ETC.
Volume calculations and images are in the Jupyter Notebook file titled "Drawn volume calculations"
With the CO2 decay per hour and CO2 per cubic feet, we can then divide the two figures and get to an infiltration rate of cubic feet per hour!
According to this method of finding the CFH, the ETC has 4135 cubic feet of air changes per hour.
We can take the calculation further to get a CFM if we want by further dividing by 60 minutes
According to this method of finding the CFM, the ETC has ~69 cubic feet of air changes per hour.