AeroViz 0.1.2__py3-none-any.whl → 0.1.3b0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of AeroViz might be problematic. Click here for more details.
- AeroViz/__init__.py +4 -4
- AeroViz/config/DEFAULT_DATA.csv +1417 -0
- AeroViz/config/DEFAULT_PNSD_DATA.csv +1417 -0
- AeroViz/dataProcess/Chemistry/__init__.py +38 -38
- AeroViz/dataProcess/Chemistry/_calculate.py +15 -15
- AeroViz/dataProcess/Chemistry/_isoropia.py +69 -68
- AeroViz/dataProcess/Chemistry/_mass_volume.py +158 -158
- AeroViz/dataProcess/Chemistry/_ocec.py +109 -109
- AeroViz/dataProcess/Chemistry/_partition.py +19 -18
- AeroViz/dataProcess/Chemistry/_teom.py +8 -11
- AeroViz/dataProcess/Optical/_IMPROVE.py +40 -39
- AeroViz/dataProcess/Optical/__init__.py +35 -35
- AeroViz/dataProcess/Optical/_absorption.py +35 -35
- AeroViz/dataProcess/Optical/_extinction.py +25 -24
- AeroViz/dataProcess/Optical/_mie.py +5 -6
- AeroViz/dataProcess/Optical/_mie_sd.py +89 -90
- AeroViz/dataProcess/Optical/_scattering.py +16 -16
- AeroViz/dataProcess/SizeDistr/__init__.py +37 -37
- AeroViz/dataProcess/SizeDistr/__merge.py +159 -158
- AeroViz/dataProcess/SizeDistr/_merge.py +155 -154
- AeroViz/dataProcess/SizeDistr/_merge_v1.py +162 -161
- AeroViz/dataProcess/SizeDistr/_merge_v2.py +153 -152
- AeroViz/dataProcess/SizeDistr/_merge_v3.py +326 -326
- AeroViz/dataProcess/SizeDistr/_merge_v4.py +272 -274
- AeroViz/dataProcess/SizeDistr/_size_distr.py +51 -51
- AeroViz/dataProcess/VOC/__init__.py +7 -7
- AeroViz/dataProcess/VOC/_potential_par.py +53 -55
- AeroViz/dataProcess/VOC/voc_par.json +464 -0
- AeroViz/dataProcess/__init__.py +4 -4
- AeroViz/dataProcess/core/__init__.py +59 -58
- AeroViz/plot/__init__.py +6 -1
- AeroViz/plot/bar.py +126 -0
- AeroViz/plot/box.py +68 -0
- AeroViz/plot/distribution/distribution.py +421 -427
- AeroViz/plot/meteorology/meteorology.py +240 -292
- AeroViz/plot/optical/__init__.py +0 -1
- AeroViz/plot/optical/optical.py +230 -230
- AeroViz/plot/pie.py +198 -0
- AeroViz/plot/regression.py +210 -0
- AeroViz/plot/scatter.py +99 -0
- AeroViz/plot/templates/__init__.py +0 -3
- AeroViz/plot/templates/contour.py +25 -25
- AeroViz/plot/templates/corr_matrix.py +86 -93
- AeroViz/plot/templates/diurnal_pattern.py +24 -24
- AeroViz/plot/templates/koschmieder.py +106 -106
- AeroViz/plot/templates/metal_heatmap.py +34 -34
- AeroViz/plot/timeseries/timeseries.py +53 -60
- AeroViz/plot/utils/__init__.py +2 -1
- AeroViz/plot/utils/_color.py +57 -57
- AeroViz/plot/utils/_unit.py +48 -48
- AeroViz/plot/utils/fRH.json +390 -0
- AeroViz/plot/utils/plt_utils.py +92 -0
- AeroViz/plot/utils/sklearn_utils.py +49 -0
- AeroViz/plot/utils/units.json +84 -0
- AeroViz/plot/violin.py +79 -0
- AeroViz/process/__init__.py +15 -15
- AeroViz/process/core/DataProc.py +9 -9
- AeroViz/process/core/SizeDist.py +81 -81
- AeroViz/process/method/PyMieScatt_update.py +488 -488
- AeroViz/process/method/mie_theory.py +231 -229
- AeroViz/process/method/prop.py +40 -40
- AeroViz/process/script/AbstractDistCalc.py +103 -103
- AeroViz/process/script/Chemical.py +166 -166
- AeroViz/process/script/IMPACT.py +40 -40
- AeroViz/process/script/IMPROVE.py +152 -152
- AeroViz/process/script/Others.py +45 -45
- AeroViz/process/script/PSD.py +26 -26
- AeroViz/process/script/PSD_dry.py +69 -70
- AeroViz/process/script/retrieve_RI.py +50 -51
- AeroViz/rawDataReader/__init__.py +57 -57
- AeroViz/rawDataReader/core/__init__.py +328 -326
- AeroViz/rawDataReader/script/AE33.py +18 -18
- AeroViz/rawDataReader/script/AE43.py +20 -20
- AeroViz/rawDataReader/script/APS_3321.py +30 -30
- AeroViz/rawDataReader/script/Aurora.py +23 -23
- AeroViz/rawDataReader/script/BC1054.py +40 -40
- AeroViz/rawDataReader/script/EPA_vertical.py +9 -9
- AeroViz/rawDataReader/script/GRIMM.py +21 -21
- AeroViz/rawDataReader/script/IGAC_TH.py +67 -67
- AeroViz/rawDataReader/script/IGAC_ZM.py +59 -59
- AeroViz/rawDataReader/script/MA350.py +39 -39
- AeroViz/rawDataReader/script/NEPH.py +74 -74
- AeroViz/rawDataReader/script/OCEC_LCRES.py +21 -21
- AeroViz/rawDataReader/script/OCEC_RES.py +16 -16
- AeroViz/rawDataReader/script/SMPS_TH.py +25 -25
- AeroViz/rawDataReader/script/SMPS_aim11.py +32 -32
- AeroViz/rawDataReader/script/SMPS_genr.py +31 -31
- AeroViz/rawDataReader/script/TEOM.py +28 -28
- AeroViz/rawDataReader/script/Table.py +12 -12
- AeroViz/rawDataReader/script/VOC_TH.py +16 -16
- AeroViz/rawDataReader/script/VOC_ZM.py +28 -28
- AeroViz/rawDataReader/script/__init__.py +20 -20
- AeroViz/rawDataReader/utils/config.py +161 -161
- AeroViz/tools/database.py +65 -65
- AeroViz/tools/dataclassifier.py +106 -106
- AeroViz/tools/dataprinter.py +51 -51
- AeroViz/tools/datareader.py +38 -38
- {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/METADATA +5 -4
- AeroViz-0.1.3b0.dist-info/RECORD +110 -0
- AeroViz/config/__init__.py +0 -0
- AeroViz/plot/improve/__init__.py +0 -1
- AeroViz/plot/improve/improve.py +0 -240
- AeroViz/plot/optical/aethalometer.py +0 -77
- AeroViz/plot/templates/event_evolution.py +0 -65
- AeroViz/plot/templates/regression.py +0 -256
- AeroViz/plot/templates/scatter.py +0 -130
- AeroViz/plot/templates/templates.py +0 -398
- AeroViz/plot/utils/_decorator.py +0 -74
- AeroViz-0.1.2.dist-info/RECORD +0 -106
- {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/LICENSE +0 -0
- {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/WHEEL +0 -0
- {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/top_level.txt +0 -0
|
@@ -4,48 +4,48 @@ from AeroViz.rawDataReader.core import AbstractReader
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class Reader(AbstractReader):
|
|
7
|
-
|
|
7
|
+
nam = 'SMPS_genr'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
def _raw_reader(self, _file):
|
|
10
|
+
with open(_file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
skiprows = 0
|
|
13
|
+
for _line in f:
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if _line.split('\t')[0] == 'Sample #':
|
|
16
|
+
f.seek(0)
|
|
17
|
+
break
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
skiprows += 1
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
_df = read_table(f, skiprows=skiprows)
|
|
22
|
+
_tm_idx = to_datetime(_df['Date'] + _df['Start Time'], format='%m/%d/%y%X', errors='coerce')
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
## index
|
|
25
|
+
_df = _df.set_index(_tm_idx).loc[_tm_idx.dropna()]
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
## keys
|
|
28
|
+
_key = to_numeric(_df.keys(), errors='coerce')
|
|
29
|
+
_df.columns = _key
|
|
30
|
+
_df = _df.loc[:, ~_key.isna()]
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
return _df.apply(to_numeric, errors='coerce')
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
## QC data
|
|
35
|
+
def _QC(self, _df):
|
|
36
|
+
import numpy as n
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
## mask out the data size lower than 7
|
|
39
|
+
_df['total'] = _df.sum(axis=1, min_count=1) * (n.diff(n.log(_df.keys().to_numpy(float)))).mean()
|
|
40
|
+
_df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
|
|
41
|
+
_df = _df.mask(_df_size < 7)
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
## remove total conc. lower than 2000
|
|
44
|
+
_df = _df.mask(_df['total'] < 2000)
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
## remove the bin over 400 nm which num. conc. larger than 4000
|
|
47
|
+
_df_remv_ky = _df.keys()[:-2][_df.keys()[:-2] >= 400.]
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
_df[_df_remv_ky] = _df[_df_remv_ky].copy().mask(_df[_df_remv_ky] > 4000.)
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
return _df[_df.keys()[:-1]]
|
|
@@ -4,43 +4,43 @@ from AeroViz.rawDataReader.core import AbstractReader
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class Reader(AbstractReader):
|
|
7
|
-
|
|
7
|
+
nam = 'TEOM'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
def _raw_reader(self, _file):
|
|
10
|
+
with open(_file, 'r', encoding='utf-8', errors='ignore') as f:
|
|
11
|
+
_df = read_csv(f, skiprows=3, index_col=False)
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
_df = _df.rename(columns={'Time Stamp': 'time',
|
|
14
|
+
'System status': 'status',
|
|
15
|
+
'PM-2.5 base MC': 'PM_NV',
|
|
16
|
+
'PM-2.5 MC': 'PM_Total',
|
|
17
|
+
'PM-2.5 TEOM noise': 'noise', })
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
_time_replace = {'十一月': '11', '十二月': '12', '一月': '01', '二月': '02', '三月': '03', '四月': '04',
|
|
20
|
+
'五月': '05', '六月': '06', '七月': '07', '八月': '08', '九月': '09', '十月': '10'}
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
_tm_idx = _df.time
|
|
23
|
+
for _ori, _rpl in _time_replace.items():
|
|
24
|
+
_tm_idx = _tm_idx.str.replace(_ori, _rpl)
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
_df = _df.set_index(to_datetime(_tm_idx, errors='coerce', format='%d - %m - %Y %X'))
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
_df = _df.where(_df['status'] < 1e-7)
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
return _df[['PM_NV', 'PM_Total', 'noise', ]]
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
## QC data
|
|
33
|
+
def _QC(self, _df):
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
_df_idx = _df.index.copy()
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
## remove negative value
|
|
38
|
+
_df = _df.where(_df.noise < 0.01)[['PM_NV', 'PM_Total']].mask((_df < 0).copy())
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
## QC data in 1 hr
|
|
41
|
+
## remove data where size < 8 in 1-hr
|
|
42
|
+
for _key in ['PM_Total', 'PM_NV']:
|
|
43
|
+
_size = _df[_key].dropna().resample('1h').size().reindex(_df_idx).ffill().copy()
|
|
44
|
+
_df[_key] = _df[_key].mask(_size < 8)
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
return _df.reindex(_df_idx)
|
|
@@ -7,22 +7,22 @@ from AeroViz.rawDataReader.core import AbstractReader
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class Reader(AbstractReader):
|
|
10
|
-
|
|
10
|
+
nam = 'Table'
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
def _raw_reader(self, _file):
|
|
13
|
+
self.meta['freq'] = self._oth_set.get('data_freq') or self.meta['freq']
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
with (_file).open('r', encoding='utf-8-sig', errors='ignore') as f:
|
|
16
|
+
_df = read_csv(f, low_memory=False, index_col=0)
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
_df.index = to_datetime(_df.index, errors='coerce', format=self._oth_set.get('date_format') or 'mixed')
|
|
19
|
+
_df.index.name = 'time'
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
_df.columns = _df.keys().str.strip(' ')
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
_df = _df.loc[_df.index.dropna()].copy()
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
return _df.loc[~_df.index.duplicated()]
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
def _QC(self, _df):
|
|
28
|
+
return _df
|
|
@@ -7,24 +7,24 @@ from AeroViz.rawDataReader.core import AbstractReader
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class Reader(AbstractReader):
|
|
10
|
-
|
|
10
|
+
nam = 'VOC_TH'
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
def _raw_reader(self, _file):
|
|
13
|
+
_keys = ['Isopentane', 'Hexane', '2-Methylhexane', '3-Methylhexane', '2-Methylheptane', '3-Methylheptane',
|
|
14
|
+
'Propene', '1.3-Butadiene', 'Isoprene', '1-Octene',
|
|
15
|
+
'Benzene', 'Toluene', 'Ethylbenzene', 'm.p-Xylene', 'o-Xylene', 'Iso-Propylbenzene', 'Styrene',
|
|
16
|
+
'n-Propylbenzene', '3.4-Ethyltoluene', '1.3.5-TMB', '2-Ethyltoluene', '1.2.4-TMB', '1.2.3-TMB',
|
|
17
|
+
'Acetaldehyde', 'Ethanol', 'Acetone', 'IPA', 'Ethyl Acetate', 'Butyl Acetate',
|
|
18
|
+
'VCM', 'TCE', 'PCE', '1.4-DCB', '1.2-DCB']
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
with (_file).open('r', encoding='utf-8-sig', errors='ignore') as f:
|
|
21
|
+
_df = read_csv(f, parse_dates=[0], index_col=[0], na_values=['-', 'N.D.'])
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
_df.columns = _df.keys().str.strip(' ')
|
|
24
|
+
_df.index.name = 'time'
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
_df = _df[_keys].loc[_df.index.dropna()]
|
|
27
|
+
return _df.loc[~_df.index.duplicated()]
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
def _QC(self, _df):
|
|
30
|
+
return _df
|
|
@@ -7,31 +7,31 @@ from AeroViz.rawDataReader.core import AbstractReader
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class Reader(AbstractReader):
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
10
|
+
nam = 'VOC_ZM'
|
|
11
|
+
|
|
12
|
+
def _raw_reader(self, _file):
|
|
13
|
+
_keys = ['Ethane', 'Propane', 'Isobutane', 'n-Butane', 'Cyclopentane', 'Isopentane',
|
|
14
|
+
'n-Pentane', '2,2-Dimethylbutane', '2,3-Dimethylbutane', '2-Methylpentane',
|
|
15
|
+
'3-Methylpentane', 'n-Hexane', 'Methylcyclopentane', '2,4-Dimethylpentane',
|
|
16
|
+
'Cyclohexane', '2-Methylhexane', '2-Methylhexane', '3-Methylheptane',
|
|
17
|
+
'2,2,4-Trimethylpentane', 'n-Heptane', 'Methylcyclohexane',
|
|
18
|
+
'2,3,4-Trimethylpentane', '2-Methylheptane', '3-Methylhexane', 'n-Octane',
|
|
19
|
+
'n-Nonane', 'n-Decane', 'n-Undecane', 'Ethylene', 'Propylene', 't-2-Butene',
|
|
20
|
+
'1-Butene', 'cis-2-Butene', 't-2-Pentene', '1-Pentene', 'cis-2-Pentene',
|
|
21
|
+
'isoprene', 'Acetylene', 'Benzene', 'Toluene', 'Ethylbenzene', 'm,p-Xylene',
|
|
22
|
+
'Styrene', 'o-Xylene', 'Isopropylbenzene', 'n-Propylbenzene', 'm-Ethyltoluene',
|
|
23
|
+
'p-Ethyltoluene', '1,3,5-Trimethylbenzene', 'o-Ethyltoluene',
|
|
24
|
+
'1,2,4-Trimethylbenzene', '1,2,3-Trimethylbenzene', 'm-Diethylbenzene',
|
|
25
|
+
'p-Diethylbenzene']
|
|
26
|
+
|
|
27
|
+
with (_file).open('r', encoding='utf-8-sig', errors='ignore') as f:
|
|
28
|
+
_df = read_csv(f, parse_dates=[0], index_col=[0], na_values=['-'])
|
|
29
|
+
|
|
30
|
+
_df.columns = _df.keys().str.strip(' ')
|
|
31
|
+
_df.index.name = 'time'
|
|
32
|
+
|
|
33
|
+
_df = _df[_keys].loc[_df.index.dropna()]
|
|
34
|
+
return _df.loc[~_df.index.duplicated()]
|
|
35
|
+
|
|
36
|
+
def _QC(self, _df):
|
|
37
|
+
return _df
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
__all__ = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
'NEPH',
|
|
3
|
+
'Aurora',
|
|
4
|
+
'Table',
|
|
5
|
+
'EPA_vertical',
|
|
6
|
+
'APS_3321',
|
|
7
|
+
'SMPS_TH',
|
|
8
|
+
'AE33',
|
|
9
|
+
'AE43',
|
|
10
|
+
'BC1054',
|
|
11
|
+
'MA350',
|
|
12
|
+
'TEOM',
|
|
13
|
+
'OCEC_RES',
|
|
14
|
+
'OCEC_LCRES',
|
|
15
|
+
'IGAC_TH',
|
|
16
|
+
'IGAC_ZM',
|
|
17
|
+
'VOC_TH',
|
|
18
|
+
'VOC_ZM',
|
|
19
|
+
'SMPS_genr',
|
|
20
|
+
'SMPS_aim11',
|
|
21
|
+
'GRIMM'
|
|
22
22
|
]
|