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.

Files changed (112) hide show
  1. AeroViz/__init__.py +4 -4
  2. AeroViz/config/DEFAULT_DATA.csv +1417 -0
  3. AeroViz/config/DEFAULT_PNSD_DATA.csv +1417 -0
  4. AeroViz/dataProcess/Chemistry/__init__.py +38 -38
  5. AeroViz/dataProcess/Chemistry/_calculate.py +15 -15
  6. AeroViz/dataProcess/Chemistry/_isoropia.py +69 -68
  7. AeroViz/dataProcess/Chemistry/_mass_volume.py +158 -158
  8. AeroViz/dataProcess/Chemistry/_ocec.py +109 -109
  9. AeroViz/dataProcess/Chemistry/_partition.py +19 -18
  10. AeroViz/dataProcess/Chemistry/_teom.py +8 -11
  11. AeroViz/dataProcess/Optical/_IMPROVE.py +40 -39
  12. AeroViz/dataProcess/Optical/__init__.py +35 -35
  13. AeroViz/dataProcess/Optical/_absorption.py +35 -35
  14. AeroViz/dataProcess/Optical/_extinction.py +25 -24
  15. AeroViz/dataProcess/Optical/_mie.py +5 -6
  16. AeroViz/dataProcess/Optical/_mie_sd.py +89 -90
  17. AeroViz/dataProcess/Optical/_scattering.py +16 -16
  18. AeroViz/dataProcess/SizeDistr/__init__.py +37 -37
  19. AeroViz/dataProcess/SizeDistr/__merge.py +159 -158
  20. AeroViz/dataProcess/SizeDistr/_merge.py +155 -154
  21. AeroViz/dataProcess/SizeDistr/_merge_v1.py +162 -161
  22. AeroViz/dataProcess/SizeDistr/_merge_v2.py +153 -152
  23. AeroViz/dataProcess/SizeDistr/_merge_v3.py +326 -326
  24. AeroViz/dataProcess/SizeDistr/_merge_v4.py +272 -274
  25. AeroViz/dataProcess/SizeDistr/_size_distr.py +51 -51
  26. AeroViz/dataProcess/VOC/__init__.py +7 -7
  27. AeroViz/dataProcess/VOC/_potential_par.py +53 -55
  28. AeroViz/dataProcess/VOC/voc_par.json +464 -0
  29. AeroViz/dataProcess/__init__.py +4 -4
  30. AeroViz/dataProcess/core/__init__.py +59 -58
  31. AeroViz/plot/__init__.py +6 -1
  32. AeroViz/plot/bar.py +126 -0
  33. AeroViz/plot/box.py +68 -0
  34. AeroViz/plot/distribution/distribution.py +421 -427
  35. AeroViz/plot/meteorology/meteorology.py +240 -292
  36. AeroViz/plot/optical/__init__.py +0 -1
  37. AeroViz/plot/optical/optical.py +230 -230
  38. AeroViz/plot/pie.py +198 -0
  39. AeroViz/plot/regression.py +210 -0
  40. AeroViz/plot/scatter.py +99 -0
  41. AeroViz/plot/templates/__init__.py +0 -3
  42. AeroViz/plot/templates/contour.py +25 -25
  43. AeroViz/plot/templates/corr_matrix.py +86 -93
  44. AeroViz/plot/templates/diurnal_pattern.py +24 -24
  45. AeroViz/plot/templates/koschmieder.py +106 -106
  46. AeroViz/plot/templates/metal_heatmap.py +34 -34
  47. AeroViz/plot/timeseries/timeseries.py +53 -60
  48. AeroViz/plot/utils/__init__.py +2 -1
  49. AeroViz/plot/utils/_color.py +57 -57
  50. AeroViz/plot/utils/_unit.py +48 -48
  51. AeroViz/plot/utils/fRH.json +390 -0
  52. AeroViz/plot/utils/plt_utils.py +92 -0
  53. AeroViz/plot/utils/sklearn_utils.py +49 -0
  54. AeroViz/plot/utils/units.json +84 -0
  55. AeroViz/plot/violin.py +79 -0
  56. AeroViz/process/__init__.py +15 -15
  57. AeroViz/process/core/DataProc.py +9 -9
  58. AeroViz/process/core/SizeDist.py +81 -81
  59. AeroViz/process/method/PyMieScatt_update.py +488 -488
  60. AeroViz/process/method/mie_theory.py +231 -229
  61. AeroViz/process/method/prop.py +40 -40
  62. AeroViz/process/script/AbstractDistCalc.py +103 -103
  63. AeroViz/process/script/Chemical.py +166 -166
  64. AeroViz/process/script/IMPACT.py +40 -40
  65. AeroViz/process/script/IMPROVE.py +152 -152
  66. AeroViz/process/script/Others.py +45 -45
  67. AeroViz/process/script/PSD.py +26 -26
  68. AeroViz/process/script/PSD_dry.py +69 -70
  69. AeroViz/process/script/retrieve_RI.py +50 -51
  70. AeroViz/rawDataReader/__init__.py +57 -57
  71. AeroViz/rawDataReader/core/__init__.py +328 -326
  72. AeroViz/rawDataReader/script/AE33.py +18 -18
  73. AeroViz/rawDataReader/script/AE43.py +20 -20
  74. AeroViz/rawDataReader/script/APS_3321.py +30 -30
  75. AeroViz/rawDataReader/script/Aurora.py +23 -23
  76. AeroViz/rawDataReader/script/BC1054.py +40 -40
  77. AeroViz/rawDataReader/script/EPA_vertical.py +9 -9
  78. AeroViz/rawDataReader/script/GRIMM.py +21 -21
  79. AeroViz/rawDataReader/script/IGAC_TH.py +67 -67
  80. AeroViz/rawDataReader/script/IGAC_ZM.py +59 -59
  81. AeroViz/rawDataReader/script/MA350.py +39 -39
  82. AeroViz/rawDataReader/script/NEPH.py +74 -74
  83. AeroViz/rawDataReader/script/OCEC_LCRES.py +21 -21
  84. AeroViz/rawDataReader/script/OCEC_RES.py +16 -16
  85. AeroViz/rawDataReader/script/SMPS_TH.py +25 -25
  86. AeroViz/rawDataReader/script/SMPS_aim11.py +32 -32
  87. AeroViz/rawDataReader/script/SMPS_genr.py +31 -31
  88. AeroViz/rawDataReader/script/TEOM.py +28 -28
  89. AeroViz/rawDataReader/script/Table.py +12 -12
  90. AeroViz/rawDataReader/script/VOC_TH.py +16 -16
  91. AeroViz/rawDataReader/script/VOC_ZM.py +28 -28
  92. AeroViz/rawDataReader/script/__init__.py +20 -20
  93. AeroViz/rawDataReader/utils/config.py +161 -161
  94. AeroViz/tools/database.py +65 -65
  95. AeroViz/tools/dataclassifier.py +106 -106
  96. AeroViz/tools/dataprinter.py +51 -51
  97. AeroViz/tools/datareader.py +38 -38
  98. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/METADATA +5 -4
  99. AeroViz-0.1.3b0.dist-info/RECORD +110 -0
  100. AeroViz/config/__init__.py +0 -0
  101. AeroViz/plot/improve/__init__.py +0 -1
  102. AeroViz/plot/improve/improve.py +0 -240
  103. AeroViz/plot/optical/aethalometer.py +0 -77
  104. AeroViz/plot/templates/event_evolution.py +0 -65
  105. AeroViz/plot/templates/regression.py +0 -256
  106. AeroViz/plot/templates/scatter.py +0 -130
  107. AeroViz/plot/templates/templates.py +0 -398
  108. AeroViz/plot/utils/_decorator.py +0 -74
  109. AeroViz-0.1.2.dist-info/RECORD +0 -106
  110. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/LICENSE +0 -0
  111. {AeroViz-0.1.2.dist-info → AeroViz-0.1.3b0.dist-info}/WHEEL +0 -0
  112. {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
- nam = 'SMPS_genr'
7
+ nam = 'SMPS_genr'
8
8
 
9
- def _raw_reader(self, _file):
10
- with open(_file, 'r', encoding='utf-8', errors='ignore') as f:
9
+ def _raw_reader(self, _file):
10
+ with open(_file, 'r', encoding='utf-8', errors='ignore') as f:
11
11
 
12
- skiprows = 0
13
- for _line in f:
12
+ skiprows = 0
13
+ for _line in f:
14
14
 
15
- if _line.split('\t')[0] == 'Sample #':
16
- f.seek(0)
17
- break
15
+ if _line.split('\t')[0] == 'Sample #':
16
+ f.seek(0)
17
+ break
18
18
 
19
- skiprows += 1
19
+ skiprows += 1
20
20
 
21
- _df = read_table(f, skiprows=skiprows)
22
- _tm_idx = to_datetime(_df['Date'] + _df['Start Time'], format='%m/%d/%y%X', errors='coerce')
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
- ## index
25
- _df = _df.set_index(_tm_idx).loc[_tm_idx.dropna()]
24
+ ## index
25
+ _df = _df.set_index(_tm_idx).loc[_tm_idx.dropna()]
26
26
 
27
- ## keys
28
- _key = to_numeric(_df.keys(), errors='coerce')
29
- _df.columns = _key
30
- _df = _df.loc[:, ~_key.isna()]
27
+ ## keys
28
+ _key = to_numeric(_df.keys(), errors='coerce')
29
+ _df.columns = _key
30
+ _df = _df.loc[:, ~_key.isna()]
31
31
 
32
- return _df.apply(to_numeric, errors='coerce')
32
+ return _df.apply(to_numeric, errors='coerce')
33
33
 
34
- ## QC data
35
- def _QC(self, _df):
36
- import numpy as n
34
+ ## QC data
35
+ def _QC(self, _df):
36
+ import numpy as n
37
37
 
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)
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
- ## remove total conc. lower than 2000
44
- _df = _df.mask(_df['total'] < 2000)
43
+ ## remove total conc. lower than 2000
44
+ _df = _df.mask(_df['total'] < 2000)
45
45
 
46
- ## remove the bin over 400 nm which num. conc. larger than 4000
47
- _df_remv_ky = _df.keys()[:-2][_df.keys()[:-2] >= 400.]
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
- _df[_df_remv_ky] = _df[_df_remv_ky].copy().mask(_df[_df_remv_ky] > 4000.)
49
+ _df[_df_remv_ky] = _df[_df_remv_ky].copy().mask(_df[_df_remv_ky] > 4000.)
50
50
 
51
- return _df[_df.keys()[:-1]]
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
- nam = 'TEOM'
7
+ nam = 'TEOM'
8
8
 
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)
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
- _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', })
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
- _time_replace = {'十一月': '11', '十二月': '12', '一月': '01', '二月': '02', '三月': '03', '四月': '04',
20
- '五月': '05', '六月': '06', '七月': '07', '八月': '08', '九月': '09', '十月': '10'}
19
+ _time_replace = {'十一月': '11', '十二月': '12', '一月': '01', '二月': '02', '三月': '03', '四月': '04',
20
+ '五月': '05', '六月': '06', '七月': '07', '八月': '08', '九月': '09', '十月': '10'}
21
21
 
22
- _tm_idx = _df.time
23
- for _ori, _rpl in _time_replace.items():
24
- _tm_idx = _tm_idx.str.replace(_ori, _rpl)
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
- _df = _df.set_index(to_datetime(_tm_idx, errors='coerce', format='%d - %m - %Y %X'))
26
+ _df = _df.set_index(to_datetime(_tm_idx, errors='coerce', format='%d - %m - %Y %X'))
27
27
 
28
- _df = _df.where(_df['status'] < 1e-7)
28
+ _df = _df.where(_df['status'] < 1e-7)
29
29
 
30
- return _df[['PM_NV', 'PM_Total', 'noise', ]]
30
+ return _df[['PM_NV', 'PM_Total', 'noise', ]]
31
31
 
32
- ## QC data
33
- def _QC(self, _df):
32
+ ## QC data
33
+ def _QC(self, _df):
34
34
 
35
- _df_idx = _df.index.copy()
35
+ _df_idx = _df.index.copy()
36
36
 
37
- ## remove negative value
38
- _df = _df.where(_df.noise < 0.01)[['PM_NV', 'PM_Total']].mask((_df < 0).copy())
37
+ ## remove negative value
38
+ _df = _df.where(_df.noise < 0.01)[['PM_NV', 'PM_Total']].mask((_df < 0).copy())
39
39
 
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)
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
- return _df.reindex(_df_idx)
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
- nam = 'Table'
10
+ nam = 'Table'
11
11
 
12
- def _raw_reader(self, _file):
13
- self.meta['freq'] = self._oth_set.get('data_freq') or self.meta['freq']
12
+ def _raw_reader(self, _file):
13
+ self.meta['freq'] = self._oth_set.get('data_freq') or self.meta['freq']
14
14
 
15
- with (_file).open('r', encoding='utf-8-sig', errors='ignore') as f:
16
- _df = read_csv(f, low_memory=False, index_col=0)
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
- _df.index = to_datetime(_df.index, errors='coerce', format=self._oth_set.get('date_format') or 'mixed')
19
- _df.index.name = 'time'
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
- _df.columns = _df.keys().str.strip(' ')
21
+ _df.columns = _df.keys().str.strip(' ')
22
22
 
23
- _df = _df.loc[_df.index.dropna()].copy()
23
+ _df = _df.loc[_df.index.dropna()].copy()
24
24
 
25
- return _df.loc[~_df.index.duplicated()]
25
+ return _df.loc[~_df.index.duplicated()]
26
26
 
27
- def _QC(self, _df):
28
- return _df
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
- nam = 'VOC_TH'
10
+ nam = 'VOC_TH'
11
11
 
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']
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
- 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.'])
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
- _df.columns = _df.keys().str.strip(' ')
24
- _df.index.name = 'time'
23
+ _df.columns = _df.keys().str.strip(' ')
24
+ _df.index.name = 'time'
25
25
 
26
- _df = _df[_keys].loc[_df.index.dropna()]
27
- return _df.loc[~_df.index.duplicated()]
26
+ _df = _df[_keys].loc[_df.index.dropna()]
27
+ return _df.loc[~_df.index.duplicated()]
28
28
 
29
- def _QC(self, _df):
30
- return _df
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
- 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
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
- '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'
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
  ]