LSMS_Library 0.2.6__py3-none-any.whl → 0.2.9.dev0__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.
Files changed (31) hide show
  1. lsms_library/__init__.py +1 -2
  2. lsms_library/countries/.dvc/.gitignore +3 -0
  3. lsms_library/countries/.dvc/config +13 -0
  4. lsms_library/countries/.dvc/plots/confusion.json +30 -0
  5. lsms_library/countries/.dvc/plots/default.json +29 -0
  6. lsms_library/countries/.dvc/plots/scatter.json +27 -0
  7. lsms_library/countries/.dvc/plots/smooth.json +39 -0
  8. lsms_library/countries/.dvc/s3_config +2 -0
  9. lsms_library/countries/.dvc/s3_reader_creds.gpg +0 -0
  10. lsms_library/countries/Uganda/2005-06/_/data_info.yml +1 -1
  11. lsms_library/countries/Uganda/2005-06/_/household_characteristics.py +1 -6
  12. lsms_library/countries/Uganda/2009-10/_/household_characteristics.py +1 -6
  13. lsms_library/countries/Uganda/2010-11/_/household_characteristics.py +1 -6
  14. lsms_library/countries/Uganda/2011-12/_/household_characteristics.py +1 -6
  15. lsms_library/countries/Uganda/2013-14/_/household_characteristics.py +1 -6
  16. lsms_library/countries/Uganda/2015-16/_/household_characteristics.py +1 -6
  17. lsms_library/countries/Uganda/2018-19/_/household_characteristics.py +1 -7
  18. lsms_library/countries/Uganda/2019-20/_/household_characteristics.py +1 -5
  19. lsms_library/countries/Uganda/_/Makefile +2 -2
  20. lsms_library/countries/Uganda/_/data_scheme.yml +3 -0
  21. lsms_library/countries/Uganda/_/household_characteristics.py +2 -4
  22. lsms_library/country.py +56 -51
  23. lsms_library/dvc_permissions.py +68 -0
  24. lsms_library/local_tools.py +3 -3
  25. {lsms_library-0.2.6.dist-info → lsms_library-0.2.9.dev0.dist-info}/METADATA +1 -1
  26. {lsms_library-0.2.6.dist-info → lsms_library-0.2.9.dev0.dist-info}/RECORD +28 -22
  27. {lsms_library-0.2.6.dist-info → lsms_library-0.2.9.dev0.dist-info}/WHEEL +1 -1
  28. lsms_library/countries/Malawi/_/spelling.yml +0 -4
  29. lsms_library/countries/Togo/2018/_/food_items.json +0 -1
  30. lsms_library/countries/Uganda/_/compare_unit_labels.py +0 -9
  31. {lsms_library-0.2.6.dist-info → lsms_library-0.2.9.dev0.dist-info}/LICENSE.txt +0 -0
lsms_library/__init__.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from . import country
2
2
  from . country import Country, Wave
3
3
  from . import local_tools as tools
4
- #from . import countries
5
- #from .countries import GhanaLSS
6
4
  from .categorical_mapping import ai_agent
7
5
  from . import transformations
6
+ from .dvc_permissions import authenticate
@@ -0,0 +1,3 @@
1
+ /config.local
2
+ /tmp
3
+ /cache
@@ -0,0 +1,13 @@
1
+ [core]
2
+ remote = ligonresearch_s3
3
+ autostage = true
4
+ [cache]
5
+ type = reflink
6
+ ['remote "ligonresearch"']
7
+ url = gdrive://1oVOdo2-oeM_LYBSe1lKSr-pm08syczdu/LSMS
8
+ gdrive_use_service_account = true
9
+ gdrive_service_account_json_file_path = gdrive_creds.json
10
+ ['remote "ligonresearch_s3"']
11
+ url = s3://dvcbucket0/LSMS
12
+ credentialpath = s3_creds
13
+ configpath = s3_config
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
3
+ "data": {
4
+ "values": "<DVC_METRIC_DATA>"
5
+ },
6
+ "title": "<DVC_METRIC_TITLE>",
7
+ "mark": "rect",
8
+ "encoding": {
9
+ "x": {
10
+ "field": "<DVC_METRIC_X>",
11
+ "type": "nominal",
12
+ "sort": "ascending",
13
+ "title": "<DVC_METRIC_X_LABEL>"
14
+ },
15
+ "y": {
16
+ "field": "<DVC_METRIC_Y>",
17
+ "type": "nominal",
18
+ "sort": "ascending",
19
+ "title": "<DVC_METRIC_Y_LABEL>"
20
+ },
21
+ "color": {
22
+ "aggregate": "count",
23
+ "type": "quantitative"
24
+ },
25
+ "facet": {
26
+ "field": "rev",
27
+ "type": "nominal"
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
3
+ "data": {
4
+ "values": "<DVC_METRIC_DATA>"
5
+ },
6
+ "title": "<DVC_METRIC_TITLE>",
7
+ "mark": {
8
+ "type": "line"
9
+ },
10
+ "encoding": {
11
+ "x": {
12
+ "field": "<DVC_METRIC_X>",
13
+ "type": "quantitative",
14
+ "title": "<DVC_METRIC_X_LABEL>"
15
+ },
16
+ "y": {
17
+ "field": "<DVC_METRIC_Y>",
18
+ "type": "quantitative",
19
+ "title": "<DVC_METRIC_Y_LABEL>",
20
+ "scale": {
21
+ "zero": false
22
+ }
23
+ },
24
+ "color": {
25
+ "field": "rev",
26
+ "type": "nominal"
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
3
+ "data": {
4
+ "values": "<DVC_METRIC_DATA>"
5
+ },
6
+ "title": "<DVC_METRIC_TITLE>",
7
+ "mark": "point",
8
+ "encoding": {
9
+ "x": {
10
+ "field": "<DVC_METRIC_X>",
11
+ "type": "quantitative",
12
+ "title": "<DVC_METRIC_X_LABEL>"
13
+ },
14
+ "y": {
15
+ "field": "<DVC_METRIC_Y>",
16
+ "type": "quantitative",
17
+ "title": "<DVC_METRIC_Y_LABEL>",
18
+ "scale": {
19
+ "zero": false
20
+ }
21
+ },
22
+ "color": {
23
+ "field": "rev",
24
+ "type": "nominal"
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
3
+ "data": {
4
+ "values": "<DVC_METRIC_DATA>"
5
+ },
6
+ "title": "<DVC_METRIC_TITLE>",
7
+ "mark": {
8
+ "type": "line"
9
+ },
10
+ "encoding": {
11
+ "x": {
12
+ "field": "<DVC_METRIC_X>",
13
+ "type": "quantitative",
14
+ "title": "<DVC_METRIC_X_LABEL>"
15
+ },
16
+ "y": {
17
+ "field": "<DVC_METRIC_Y>",
18
+ "type": "quantitative",
19
+ "title": "<DVC_METRIC_Y_LABEL>",
20
+ "scale": {
21
+ "zero": false
22
+ }
23
+ },
24
+ "color": {
25
+ "field": "rev",
26
+ "type": "nominal"
27
+ }
28
+ },
29
+ "transform": [
30
+ {
31
+ "loess": "<DVC_METRIC_Y>",
32
+ "on": "<DVC_METRIC_X>",
33
+ "groupby": [
34
+ "rev"
35
+ ],
36
+ "bandwidth": 0.3
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,2 @@
1
+ [default]
2
+ region=us-west-1
@@ -29,6 +29,6 @@ cluster_features:
29
29
  District: h1aq1
30
30
  Rural:
31
31
  - urban
32
- - #Value mapping dictionary
32
+ - # Value mapping dictionary
33
33
  urban: Urban
34
34
  0: Rural
@@ -1,12 +1,7 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
-
5
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
6
3
  import numpy as np
7
4
  import sys
8
- sys.path.append('../../_/')
9
- from uganda import age_sex_composition
10
5
 
11
6
  myvars = dict(fn='../Data/GSEC2.dta',
12
7
  HHID='HHID',
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
4
 
10
5
  myvars = dict(fn='../Data/GSEC2.dta',
11
6
  HHID='HHID',
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
4
 
10
5
  myvars = dict(fn='../Data/GSEC2.dta',
11
6
  HHID='HHID',
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
4
 
10
5
  myvars = dict(fn='../Data/GSEC2.dta',
11
6
  HHID='HHID',
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
4
 
10
5
  myvars = dict(fn='../Data/GSEC2.dta',
11
6
  HHID='HHID',
@@ -1,11 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
4
 
10
5
  myvars = dict(fn='../Data/gsec2.dta',
11
6
  HHID='hhid',
@@ -1,12 +1,6 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
6
- import pandas as pd
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
7
3
  import numpy as np
8
- from uganda import age_sex_composition
9
- import dvc.api
10
4
 
11
5
  myvars = dict(fn='../Data/GSEC2.dta',
12
6
  HHID='hhid',
@@ -1,11 +1,7 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
-
4
- import sys
5
- sys.path.append('../../_/')
2
+ from lsms_library.local_tools import to_parquet, age_sex_composition
6
3
  import pandas as pd
7
4
  import numpy as np
8
- from uganda import age_sex_composition
9
5
 
10
6
  myvars = dict(fn='../Data/HH/gsec2.dta',
11
7
  HHID='hhid',
@@ -28,7 +28,7 @@ interview_date_parquet := $(interview_date:.py=.parquet)
28
28
  enterprise_income = $(shell find $(rounds) -name enterprise_income.py)
29
29
  enterprise_income_parquet := $(enterprise_income:.py=.parquet)
30
30
 
31
- ../var/enterprise_income.parquet: enterprise_income.py $(enterprise_income_parquet)
31
+ ../var/enterprise_income.parquet: enterprise_income.py $(enterprise_income_parquet) ../var/other_features.parquet
32
32
  python enterprise_income.py
33
33
 
34
34
  assets = $(shell find $(rounds) -name assets.py)
@@ -40,7 +40,7 @@ assets_parquet := $(assets:.py=.parquet)
40
40
  earnings = $(shell find $(rounds) -name earnings.py)
41
41
  earnings_parquet := $(earnings:.py=.parquet)
42
42
 
43
- ../var/earnings.parquet: earnings.py $(earnings_parquet)
43
+ ../var/earnings.parquet: earnings.py $(earnings_parquet) ../var/other_features.parquet
44
44
  python earnings.py
45
45
 
46
46
  shocks = $(shell find $(rounds) -name shocks.py)
@@ -21,3 +21,6 @@ Data Scheme:
21
21
  food_expenditures: # USE_MAKEFILE
22
22
  food_prices:
23
23
  panel_ids:
24
+ income:
25
+ enterprise_income:
26
+ other_features:
@@ -1,13 +1,11 @@
1
1
  #!/usr/bin/env python
2
- from lsms_library.local_tools import to_parquet
3
- from lsms_library.local_tools import get_dataframe
4
2
  """
5
3
  Concatenate data on other household features across rounds.
6
4
  """
7
-
5
+ import json
8
6
  import pandas as pd
7
+ from lsms_library.local_tools import to_parquet, get_dataframe
9
8
  from uganda import Waves, id_walk
10
- import json
11
9
 
12
10
  x = {}
13
11
 
lsms_library/country.py CHANGED
@@ -16,6 +16,7 @@ warnings.filterwarnings('ignore', category=FutureWarning)
16
16
  warnings.filterwarnings('ignore', category=UnicodeWarning)
17
17
  import subprocess
18
18
  import json
19
+ from sys import stderr
19
20
 
20
21
  class Wave:
21
22
  def __init__(self, year, wave_folder, country: 'Country'):
@@ -42,9 +43,8 @@ class Wave:
42
43
 
43
44
  @property
44
45
  def file_path(self):
45
- var = files("lsms_library") / "countries" / self.folder
46
- return var
47
-
46
+ return files("lsms_library") / "countries" / self.folder
47
+
48
48
  @property
49
49
  def resources(self):
50
50
  """Load the data_info.yml that describes table structure, merges, etc."""
@@ -196,35 +196,37 @@ class Wave:
196
196
  warnings.warn(f"Data scheme does not contain {request} for {self.name}")
197
197
  return pd.DataFrame()
198
198
  data_info = self.resources.get(request, None)
199
- if data_info:
200
- def check_adding_t(df):
201
- index_list = df.index.names
202
- if 't' not in index_list:
203
- if 't' not in df.columns:
204
- df['t'] = self.year
205
- final_index = ['t'] + index_list
206
- df = df.reset_index().set_index(final_index)
207
- return df
208
- def get_data(data_info_dic, mapping_info):
209
- convert_cat = (data_info_dic.get('converted_categoricals') is None)
210
- df_edit_function = mapping_info.pop('df_edit')
211
- dfs = []
212
- for file, mappings in mapping_info.items():
213
- df = df_data_grabber(f'lsms_library/countries/{self.folder}/Data/{file}', mappings['idxvars'], **mappings['myvars'], convert_categoricals=convert_cat)
214
- df = check_adding_t(df)
215
- # Oddity with large number for missing code
216
- na = df.select_dtypes(exclude=['object', 'datetime64[ns]']).max().max()
217
- if na>1e99:
218
- warnings.warn(f"Large number used for missing? Replacing {na} with NaN.")
219
- df = df.replace(na,np.nan)
220
- dfs.append(df)
221
- df = pd.concat(dfs, axis=0, sort=False)
222
199
 
223
- if df_edit_function:
224
- df = df_edit_function(df)
225
-
226
- return df
227
-
200
+ def check_adding_t(df):
201
+ index_list = df.index.names
202
+ if 't' not in index_list:
203
+ if 't' not in df.columns:
204
+ df['t'] = self.year
205
+ final_index = ['t'] + index_list
206
+ df = df.reset_index().set_index(final_index)
207
+ return df
208
+
209
+ def get_data(data_info_dic, mapping_info):
210
+ convert_cat = (data_info_dic.get('converted_categoricals') is None)
211
+ df_edit_function = mapping_info.pop('df_edit')
212
+ dfs = []
213
+ for file, mappings in mapping_info.items():
214
+ df = df_data_grabber(f'./{self.folder}/Data/{file}', mappings['idxvars'], **mappings['myvars'], convert_categoricals=convert_cat)
215
+ df = check_adding_t(df)
216
+ # Oddity with large number for missing code
217
+ na = df.select_dtypes(exclude=['object', 'datetime64[ns]']).max().max()
218
+ if na>1e99:
219
+ warnings.warn(f"Large number used for missing? Replacing {na} with NaN.")
220
+ df = df.replace(na,np.nan)
221
+ dfs.append(df)
222
+ df = pd.concat(dfs, axis=0, sort=False)
223
+
224
+ if df_edit_function:
225
+ df = df_edit_function(df)
226
+
227
+ return df
228
+
229
+ if data_info:
228
230
  # Vertical Merge dfs
229
231
  if data_info.get('dfs'):
230
232
  merge_dfs = []
@@ -249,8 +251,9 @@ class Wave:
249
251
  df = get_data(data_info, mapping_details)
250
252
 
251
253
  else:
252
- # The reason why not just simply run the python file is some data's python files have dependencies.
253
- print(f"Attempting to generate using Makefile...", flush=True)
254
+ # The reason why not just simply run the python file is some
255
+ # python files have dependencies.
256
+ print(f"Attempting to generate using Makefile...", flush=True,file=stderr)
254
257
  #cluster features in the old makefile is called 'other_features'
255
258
  # if request =='cluster_features': request = 'other_features'
256
259
  parquet_fn = self.file_path/"_"/ f"{request}.parquet"
@@ -262,11 +265,11 @@ class Wave:
262
265
 
263
266
  cwd_path = self.file_path.parent / "_"
264
267
  relative_parquet_path = parquet_fn.relative_to(cwd_path.parent) # Convert to relative path
265
- subprocess.run(["make", '../' + str(relative_parquet_path)], cwd=cwd_path, check=True)
266
- print(f"Makefile executed successfully for {self.name}. Rechecking for parquet file...")
268
+ subprocess.run(["make", "-s", '../' + str(relative_parquet_path)], cwd=cwd_path, check=True)
269
+ print(f"Makefile executed successfully for {self.name}. Rechecking for parquet file...",file=stderr)
267
270
 
268
271
  if not parquet_fn.exists():
269
- print(f"Parquet file {parquet_fn} still missing after running Makefile.")
272
+ print(f"Parquet file {parquet_fn} still missing after running Makefile.",file=stderr)
270
273
  return pd.DataFrame()
271
274
 
272
275
  df = pd.read_parquet(parquet_fn)
@@ -327,13 +330,13 @@ class Country:
327
330
  # 'nonfood_expenditures.parquet', 'enterprise_income.parquet', 'assets.parquet',
328
331
  # 'earnings.parquet', 'housing.parquet', 'income.parquet', 'fct.parquet', 'nutrition.parquet']
329
332
 
330
- def __init__(self,country_name, preload_panel_ids = True):
333
+ def __init__(self, country_name, preload_panel_ids=True, verbose=False):
331
334
  self.name = country_name
332
335
  self._panel_ids_cache = None
333
336
  self._updated_ids_cache = None
334
337
  self.wave_folder_map = {}
335
338
  if preload_panel_ids:
336
- print(f"Preloading panel_ids for {self.name}...")
339
+ print(f"Preloading panel_ids for {self.name}...",file=stderr)
337
340
  #ignore all the warnings
338
341
  with warnings.catch_warnings():
339
342
  warnings.simplefilter("ignore")
@@ -443,17 +446,19 @@ class Country:
443
446
  raise KeyError(f"{year} is not a valid wave for {self.name}")
444
447
 
445
448
 
446
- def _aggregate_wave_data(self,waves = None, method_name = None):
447
- """
448
- Aggregates data across multiple waves using a single dataset method.
449
- If the required `.parquet` file is missing, it requests `Makefile` to generate only that file.
449
+ def _aggregate_wave_data(self, waves=None, method_name=None):
450
+ """Aggregates data across multiple waves using a single dataset method.
451
+
452
+ If the required `.parquet` file is missing, it requests `Makefile` to
453
+ generate only that file.
450
454
  """
451
- if method_name not in self.data_scheme and method_name not in ['other_features', 'food_prices_quantities_and_expenditures', 'updated_ids']:
455
+ if method_name not in self.data_scheme+['other_features', 'food_prices_quantities_and_expenditures', 'updated_ids']:
452
456
  warnings.warn(f"Data scheme does not contain {method_name} for {self.name}")
453
457
  return pd.DataFrame()
454
458
 
455
459
  if waves is None:
456
460
  waves = self.waves
461
+
457
462
  def safe_concat_dataframe_dict(df_dict):
458
463
  # Get the target index name order from the first DataFrame
459
464
  reference_order = next(iter(df_dict.values())).index.names
@@ -478,11 +483,11 @@ class Country:
478
483
  warnings.warn(str(e))
479
484
  if results:
480
485
  #using safe_concat_dataframe_dict only if more than 2 not empty DataFrames
481
- non_empty_df = [df for df in results.values() if not df.empty]
482
- if len(non_empty_df) > 1:
483
- return safe_concat_dataframe_dict(results)
486
+ non_empty_df = {k:df for k,df in results.items() if not df.empty}
487
+ if len(non_empty_df) > 1: # Why not 2, per comment above?
488
+ return safe_concat_dataframe_dict(non_empty_df)
484
489
  else:
485
- return pd.concat(non_empty_df, axis=0, sort=False)
490
+ return pd.concat(non_empty_df.values(), axis=0, sort=False)
486
491
  raise KeyError(f"No data found for {method_name} in any wave of {self.name}.")
487
492
 
488
493
  def load_from_makefile(method_name):
@@ -504,11 +509,11 @@ class Country:
504
509
  relative_path = target_path.relative_to(cwd_path.parent)
505
510
  make_target = '../' + str(relative_path)
506
511
 
507
- subprocess.run(["make", make_target], cwd=cwd_path, check=True)
508
- print(f"Makefile executed successfully for {self.name}. Rechecking for {target_path.name}...")
512
+ subprocess.run(["make", "-s", make_target], cwd=cwd_path, check=True)
513
+ print(f"Makefile executed successfully for {self.name}. Rechecking for {target_path.name}...",file=stderr)
509
514
 
510
515
  if not target_path.exists():
511
- print(f"Data file {target_path} still missing after running Makefile.")
516
+ print(f"Data file {target_path} still missing after running Makefile.",file=stderr)
512
517
  return pd.DataFrame()
513
518
 
514
519
  if target_path.suffix == '.json':
@@ -546,7 +551,7 @@ class Country:
546
551
  self._panel_ids_cache = panel_ids_dic
547
552
  self._updated_ids_cache = updated_ids_dic
548
553
  else:
549
- print(f"Panel IDs not found in {self.name}.")
554
+ print(f"Panel IDs not found in {self.name}.",file=stderr)
550
555
  self._panel_ids_cache = None
551
556
  self._updated_ids_cache = None
552
557
 
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python3
2
+ import git
3
+ from pathlib import Path
4
+ import getpass
5
+ import pkgutil
6
+ import gnupg
7
+
8
+ def is_git_repo(path='.'):
9
+ """
10
+ Check if the specified path is a Git repository.
11
+
12
+ Parameters:
13
+ path (str): The path to check. Default is the current directory.
14
+
15
+ Returns:
16
+ bool: True if the path is a valid Git repository, False otherwise.
17
+ """
18
+ try:
19
+ _ = git.Repo(path).git_dir
20
+ return True
21
+ except git.exc.InvalidGitRepositoryError:
22
+ return False
23
+
24
+ def authenticate(gpg_key_file='s3_reader_creds.gpg'):
25
+ """
26
+ Decrypt the specified GPG file and store the decrypted credentials securely.
27
+
28
+ This function prompts the user for a passphrase to decrypt the provided GPG
29
+ file.
30
+
31
+ Parameters:
32
+ gpg_key_file (str): The name of the GPG file containing the encrypted credentials.
33
+ Default is 's3_reader_creds.gpg'.
34
+
35
+ Raises:
36
+ ValueError: If decryption fails due to an incorrect passphrase or other issues.
37
+ """
38
+ # Construct the path to the encrypted file relative to this function’s location
39
+ gpg_path = Path(__file__).resolve().parent / 'countries' / '.dvc'
40
+ encrypted_file = gpg_path / gpg_key_file
41
+
42
+ # Load the encrypted data
43
+ encrypted_data = encrypted_file.read_bytes()
44
+
45
+ # Initialize GPG
46
+ gpg = gnupg.GPG()
47
+
48
+ # Prompt the user for the passphrase securely
49
+ passphrase = getpass.getpass(prompt='Enter passphrase for decryption: ')
50
+
51
+ # Decrypt the data
52
+ decrypted_data = gpg.decrypt(encrypted_data, passphrase=passphrase)
53
+
54
+ if decrypted_data.ok:
55
+ # Write the decrypted data to a temporary file securely
56
+ creds_file = gpg_path / 's3_creds'
57
+
58
+ if creds_file.exists():
59
+ user_input = input(f"The file {creds_file} already exists. Overwrite? (yes/no): ").strip().lower()
60
+ if user_input not in ['yes', 'y']:
61
+ print("Operation aborted. Credentials were not written.")
62
+ return
63
+
64
+ with open(creds_file, 'w') as f:
65
+ f.write(str(decrypted_data))
66
+ print(f"Decryption successful; credentials written to {creds_file}")
67
+ else:
68
+ raise ValueError("Decryption failed: check the passphrase and try again")
@@ -696,11 +696,11 @@ def panel_ids(Waves):
696
696
  if isinstance(wave_info[1], list): #tanzania
697
697
  df = wave_info[2](df, wave_info[1])
698
698
  else:
699
- df[wave_info[1]] = df[wave_info[1]].apply(format_id)
700
- df[wave_info[2]] = df[wave_info[2]].apply(format_id)
699
+ df.loc[:,wave_info[1]] = df[wave_info[1]].apply(format_id)
700
+ df.loc[:,wave_info[2]] = df[wave_info[2]].apply(format_id)
701
701
  # If a transformation function is provided (tuple length 4), apply it to the old_id column
702
702
  if len(wave_info) == 4:
703
- df[wave_info[2]] = df[wave_info[2]].apply(wave_info[3])
703
+ df.loc[:,wave_info[2]] = df[wave_info[2]].apply(wave_info[3])
704
704
  df['t'] = wave_year
705
705
  df = df.rename(columns={wave_info[1]: 'i', wave_info[2]: 'previous_i'})
706
706
  df = df.set_index(['t', 'i'])[['previous_i']]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: LSMS_Library
3
- Version: 0.2.6
3
+ Version: 0.2.9.dev0
4
4
  Summary: Abstraction layer for Living Standards Measurement Survey data
5
5
  License: CC-BY-4.0
6
6
  Author: Ethan Ligon
@@ -1,10 +1,18 @@
1
1
  lsms_library/Makefile,sha256=5iTMKOlMuK29OtDrqIrjGztt-ivnIw0l8UWI8UR0alU,607
2
2
  lsms_library/README.org,sha256=Nm5shD0nZnG_CyFXrJRK78RQJ6bNbHKL3UyVf4tK0rI,810
3
- lsms_library/__init__.py,sha256=mi4Be3a3GgMlOp6aLZMiWMyucdVMsFp5eth_lkDuVY8,223
3
+ lsms_library/__init__.py,sha256=BXz5Xm1FW_0Ebo9NCa05QBhg4-LyntFUx1vI78ILn-E,207
4
4
  lsms_library/categorical_mapping/ai_agent.py,sha256=uN4DZmpeLyl3E03AS-50Acb4bjNhL5BByHIZwbxtwfw,6268
5
5
  lsms_library/categorical_mapping/categorical_mapping_helper.py,sha256=P6vHZf2vdXPmIr-FcidikaJZFtp025cRAMA2lBG_nMo,5310
6
6
  lsms_library/categorical_mapping/spelling.yml,sha256=c5n0WudZZ3DHzG9dhi6-jzfUt9f29op6jvHyYavPPCI,20
7
7
  lsms_library/contributing.org,sha256=KkW9ioEh6snUP5sEbSl42nhjfc-pr2rcd0F4NAd7tkU,7564
8
+ lsms_library/countries/.dvc/.gitignore,sha256=zaP8GkzpZZyxmBi7Bl7ujFJxeVSE9J8xTKA1e02uxu8,26
9
+ lsms_library/countries/.dvc/config,sha256=oWXrcncknTjZRLXS0XcHmaJB0FX6DZNgkRdgY6dOVqc,388
10
+ lsms_library/countries/.dvc/plots/confusion.json,sha256=jUW3NJJZlg4e-CFa4s8hEEvqnsWpLVGt_3cgBwt9iqE,740
11
+ lsms_library/countries/.dvc/plots/default.json,sha256=beLplVC3KKggxiinNrnAS74ghDY4ZgWU0lGiFVuzfzU,677
12
+ lsms_library/countries/.dvc/plots/scatter.json,sha256=FH0wazql-iIxd8eYZlQdwRtC9vR7wqe-lZw2lDtAYXg,654
13
+ lsms_library/countries/.dvc/plots/smooth.json,sha256=iAPend4RhPDoss8CkcbWBsyi92p4g_22A6gBQHxe8R4,889
14
+ lsms_library/countries/.dvc/s3_config,sha256=1qRklwYbm44Pq66ym8JL_2xaIKpmLN4BG14bru8lRXI,27
15
+ lsms_library/countries/.dvc/s3_reader_creds.gpg,sha256=GinaLcABIAWwiUIPXV5UACUOCKsqIi4b4GZFSyRXubg,187
8
16
  lsms_library/countries/Afghanistan/2016-17/Data/Core household.dta.dvc,sha256=V3mHw_cBEqnugIWNKaO0JuInEfogtWBbr7qneySOsCw,88
9
17
  lsms_library/countries/Afghanistan/2016-17/Data/Core individual.dta.dvc,sha256=U3uCKcKyNEwd_qucQS7LWaj4KZRtnKDGD2tGfcn02Sk,91
10
18
  lsms_library/countries/Afghanistan/2016-17/Data/H_01.dta.dvc,sha256=A5iLTGccuRUsgfFfIjArEjMZpZaR1hxAlGEoSNJX05w,78
@@ -5556,7 +5564,6 @@ lsms_library/countries/Malawi/_/food_prices_quantities_and_expenditures.py,sha25
5556
5564
  lsms_library/countries/Malawi/_/household_characteristics.py,sha256=pFfhK5OV4O5wlywaQV_UmIXaxrOotS8GGd9Mw-_9jNQ,669
5557
5565
  lsms_library/countries/Malawi/_/malawi.py,sha256=cjbPBzYkkcMTtfpmvNtUxQExcP55nvNnZCrXv0ESl3M,3521
5558
5566
  lsms_library/countries/Malawi/_/other_features.py,sha256=j68JHI6yG1KU-vWOdvwYGBVLpSXaaL6aalrnypkWLwE,431
5559
- lsms_library/countries/Malawi/_/spelling.yml,sha256=uPapxsnStSziaiCcWQ7Ydw_em1VzltSPGScPs_X5sQk,82
5560
5567
  lsms_library/countries/Malawi/var/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5561
5568
  lsms_library/countries/Mali/2014-15/Data/EACIACT_p1.dta.dvc,sha256=FIL_MF3qFQXY8gOrs09T4CLb2kSDNQZVFPqbzhSFrng,85
5562
5569
  lsms_library/countries/Mali/2014-15/Data/EACIALI_p1.dta.dvc,sha256=aqCk7r7ccWmOjXemzm3PYhVtZoVDy4kdP1MDMNxyS9M,86
@@ -9394,7 +9401,6 @@ lsms_library/countries/Togo/2018/Documentation/tgo_ehcvm1_qnr_community_excel_va
9394
9401
  lsms_library/countries/Togo/2018/Documentation/tgo_ehcvm1_qnr_household_excel_vague1.xls.dvc,sha256=sFEfHv5PKy_iC4ez3VKXRFKktNUKOGN6bgJMQcWuLNs,123
9395
9402
  lsms_library/countries/Togo/2018/Documentation/tgo_ehcvm1_qnr_household_excel_vague2.xls.dvc,sha256=25-mX1XN7sybAeSNwtVICjwRRDA_SIi6r3MvgSTQBew,124
9396
9403
  lsms_library/countries/Togo/2018/_/food_expenditures.py,sha256=SeBh5psVUOxLNkTZh_xj7XJwxOcKsvm9Ufp6JPDHM54,2862
9397
- lsms_library/countries/Togo/2018/_/food_items.json,sha256=Gi3oWPpAus3esYpsyKDaTf8BdbUMNpfDRnrxo5uLx9E,17158
9398
9404
  lsms_library/countries/Togo/2018/_/household_characteristics.py,sha256=dbB0-3rOBtc_Z2iwKf0UoGZhvfBWKr85z9fk0whZuEc,1419
9399
9405
  lsms_library/countries/Togo/2018/_/nonfood_expenditures.py,sha256=5oKZ0lORZ2byCZ-BaUgehCicx1tdaabAOdK6dOmglis,1435
9400
9406
  lsms_library/countries/Togo/2018/_/notes.org,sha256=TLbHUKht2eRuxQWbDTkmOmLWVS3yM-UusmL_ee1Hhqo,92274
@@ -9481,12 +9487,12 @@ lsms_library/countries/Uganda/2005-06/Documentation/UNHS.2005-06.CommQuest_final
9481
9487
  lsms_library/countries/Uganda/2005-06/Documentation/UNHS.2005-06.Household.Questionnaire.FINAL.pdf.dvc,sha256=NuESUFEsMG10Gm0poidecd3lTFVwh4-2j22ayosZtkY,129
9482
9488
  lsms_library/countries/Uganda/2005-06/Documentation/UNHS.2005-06.Interviewer.Manual.FINAL.pdf.dvc,sha256=6urVSwN3_57SkfWcieq6NzlTbbVm9gxt0WHg5ywuXXs,123
9483
9489
  lsms_library/countries/Uganda/2005-06/_/assets.py,sha256=Lh9BVYNv4DRRgjC6h1S2HK_JMmjLzn8LQYaUpv8yH9w,417
9484
- lsms_library/countries/Uganda/2005-06/_/data_info.yml,sha256=nku4Yk-5CxHpq7WcPb5LmZOeC4KNAbk22NHIXFCduFw,848
9490
+ lsms_library/countries/Uganda/2005-06/_/data_info.yml,sha256=y_k8aZuoQFBn-FVIg6fySwzIAHkpJGi8MeuBMZyFGQk,849
9485
9491
  lsms_library/countries/Uganda/2005-06/_/earnings.py,sha256=HVM6pmh6_KuKVN_Cl9MQQ2GhbZxpWsztSoXw9jlE5oE,559
9486
9492
  lsms_library/countries/Uganda/2005-06/_/education_expenses.py,sha256=HaBLCZfr8RRlfj9rDEvPg51KOK6uxii8D7M4Lk_LbuU,1466
9487
9493
  lsms_library/countries/Uganda/2005-06/_/enterprise_income.py,sha256=dwJvipFBT9O7rjTAqZNfjSTCNp8aKeqEWLGeonzSmfc,932
9488
9494
  lsms_library/countries/Uganda/2005-06/_/food_acquired.py,sha256=nRCLTQpMhAYWIn5Cnk1iyDWlbCBpv5O6qkFr_k9g4Is,1298
9489
- lsms_library/countries/Uganda/2005-06/_/household_characteristics.py,sha256=OcGeZCE3-95qas6wCUs2R9-k88Ie7gIjRjCE4RbpAiA,522
9495
+ lsms_library/countries/Uganda/2005-06/_/household_characteristics.py,sha256=bEuqkL3dbJ_fFWvL8Henqkq-FptLv93y2uJcSC0ywzQ,454
9490
9496
  lsms_library/countries/Uganda/2005-06/_/housing.py,sha256=v5zSV9dgy_Npn-lDZKbN0FnlR83F_WtuOopVbF_qA48,757
9491
9497
  lsms_library/countries/Uganda/2005-06/_/interview_date.py,sha256=xHuabMzWPr2TR0Cwd8XFEyo6tTfd3e838WEBSQ3jolw,709
9492
9498
  lsms_library/countries/Uganda/2005-06/_/nonfood_expenditures.py,sha256=QvrsvAIaSiQK2IcLEO7a7ED5YuBVoPQ6obzahpE0oWA,450
@@ -9595,7 +9601,7 @@ lsms_library/countries/Uganda/2009-10/_/earnings.py,sha256=TLwilh2zE0WrrE8_GDKZY
9595
9601
  lsms_library/countries/Uganda/2009-10/_/education_expenses.py,sha256=HleH_Tp4gl-ksmGEX7ZCFbhy101RzsXxu1YmaA_N7AQ,1716
9596
9602
  lsms_library/countries/Uganda/2009-10/_/enterprise_income.py,sha256=5pDXZ4HrppxoDx-18Kte8UPyicCmK1w9beTB50aluUo,937
9597
9603
  lsms_library/countries/Uganda/2009-10/_/food_acquired.py,sha256=B1rGVfoQ0FGM8OTY-3howYeQbJAaC2RrdFL3EZafQU4,1337
9598
- lsms_library/countries/Uganda/2009-10/_/household_characteristics.py,sha256=uYjsQJVKVbWIFGQNUE6ihnxYkKCWkUymzqO3AWzU-0o,503
9604
+ lsms_library/countries/Uganda/2009-10/_/household_characteristics.py,sha256=bOsTlvbUINWd5cz0F6x4JGFVmDf5XCQQx7haHOo9lyY,425
9599
9605
  lsms_library/countries/Uganda/2009-10/_/housing.py,sha256=AG6KD0kmwCAN452iCdIry4A0FxaTrHlh4zhl0asRqTM,772
9600
9606
  lsms_library/countries/Uganda/2009-10/_/interview_date.py,sha256=kgzbaMhlkTONqoioA3DpiS6cKyoQyV2s_y3o-6MLXA0,694
9601
9607
  lsms_library/countries/Uganda/2009-10/_/nonfood_expenditures.py,sha256=42otdfhT7uRoH04U8IELf5huldhdqzGNFbrfd8JOzjQ,448
@@ -9717,7 +9723,7 @@ lsms_library/countries/Uganda/2010-11/_/earnings.py,sha256=TLwilh2zE0WrrE8_GDKZY
9717
9723
  lsms_library/countries/Uganda/2010-11/_/education_expenses.py,sha256=HleH_Tp4gl-ksmGEX7ZCFbhy101RzsXxu1YmaA_N7AQ,1716
9718
9724
  lsms_library/countries/Uganda/2010-11/_/enterprise_income.py,sha256=5pDXZ4HrppxoDx-18Kte8UPyicCmK1w9beTB50aluUo,937
9719
9725
  lsms_library/countries/Uganda/2010-11/_/food_acquired.py,sha256=36FXnXsRCfMkeWoApdO6P8wTKNToFdYaaCO0ilvvaYs,1311
9720
- lsms_library/countries/Uganda/2010-11/_/household_characteristics.py,sha256=uYjsQJVKVbWIFGQNUE6ihnxYkKCWkUymzqO3AWzU-0o,503
9726
+ lsms_library/countries/Uganda/2010-11/_/household_characteristics.py,sha256=bOsTlvbUINWd5cz0F6x4JGFVmDf5XCQQx7haHOo9lyY,425
9721
9727
  lsms_library/countries/Uganda/2010-11/_/housing.py,sha256=XdJpGxrC1j0SnOpPqmZxdCSkIU_5868b9pQfQIsomd4,771
9722
9728
  lsms_library/countries/Uganda/2010-11/_/interview_date.py,sha256=YikCb2DAVrC9JpCnoWnBew1dXdn4fP0kFpR2rLhRsvA,784
9723
9729
  lsms_library/countries/Uganda/2010-11/_/nonfood_expenditures.py,sha256=42otdfhT7uRoH04U8IELf5huldhdqzGNFbrfd8JOzjQ,448
@@ -9844,7 +9850,7 @@ lsms_library/countries/Uganda/2011-12/_/data_info.yml,sha256=eSaYacxLm9QvXR0s8Ut
9844
9850
  lsms_library/countries/Uganda/2011-12/_/earnings.py,sha256=TLwilh2zE0WrrE8_GDKZYNN6DwIHFcQH3VhHwwSRniY,583
9845
9851
  lsms_library/countries/Uganda/2011-12/_/enterprise_income.py,sha256=5pDXZ4HrppxoDx-18Kte8UPyicCmK1w9beTB50aluUo,937
9846
9852
  lsms_library/countries/Uganda/2011-12/_/food_acquired.py,sha256=4KYYY_vT4oAWdzS4byB3oR-optKSR7hBfnFq1RrDTNo,687
9847
- lsms_library/countries/Uganda/2011-12/_/household_characteristics.py,sha256=uYjsQJVKVbWIFGQNUE6ihnxYkKCWkUymzqO3AWzU-0o,503
9853
+ lsms_library/countries/Uganda/2011-12/_/household_characteristics.py,sha256=bOsTlvbUINWd5cz0F6x4JGFVmDf5XCQQx7haHOo9lyY,425
9848
9854
  lsms_library/countries/Uganda/2011-12/_/housing.py,sha256=QtnhLIYLJ6lM8qAwCZMajdQASktPa2Pla1lFsqQDcTw,774
9849
9855
  lsms_library/countries/Uganda/2011-12/_/interview_date.py,sha256=-h4UvOmZH2N2xapncDAt8ovWfI0m5ziy1jze5Ve-5VE,763
9850
9856
  lsms_library/countries/Uganda/2011-12/_/nonfood_expenditures.py,sha256=_soPiL1ZELsF7rz5Q5TUKc3yq0aMuTQOFkWB3eJdU9s,450
@@ -9979,7 +9985,7 @@ lsms_library/countries/Uganda/2013-14/_/earnings.py,sha256=DsLKK0pBuxGCkL2jfnC2X
9979
9985
  lsms_library/countries/Uganda/2013-14/_/education_expenses.py,sha256=8_IW2QLZ6274J2kBTUT7igyKveYaooMdGZ1NoeCUKzY,1869
9980
9986
  lsms_library/countries/Uganda/2013-14/_/enterprise_income.py,sha256=snR7wTULgwnOyqXC2agndhvi9w4V1F95pnF1w-p5o4k,937
9981
9987
  lsms_library/countries/Uganda/2013-14/_/food_acquired.py,sha256=4KYYY_vT4oAWdzS4byB3oR-optKSR7hBfnFq1RrDTNo,687
9982
- lsms_library/countries/Uganda/2013-14/_/household_characteristics.py,sha256=uYjsQJVKVbWIFGQNUE6ihnxYkKCWkUymzqO3AWzU-0o,503
9988
+ lsms_library/countries/Uganda/2013-14/_/household_characteristics.py,sha256=bOsTlvbUINWd5cz0F6x4JGFVmDf5XCQQx7haHOo9lyY,425
9983
9989
  lsms_library/countries/Uganda/2013-14/_/housing.py,sha256=MH7s15XOUzSdDhYXc423nLkHME13J0WNH3gPqAzP14k,771
9984
9990
  lsms_library/countries/Uganda/2013-14/_/interview_date.py,sha256=K7u50Xo0nV4QmLE2Dh3YBw2TZb7DXFC7-tjXKXU2kbw,494
9985
9991
  lsms_library/countries/Uganda/2013-14/_/nonfood_expenditures.py,sha256=xHPIY2kxjBKqt1lslhIKg4orYwVD0B16AG3DbAmxd9I,449
@@ -10116,7 +10122,7 @@ lsms_library/countries/Uganda/2015-16/_/earnings.py,sha256=_zIZ3_UUPSmdnCWbg-KJe
10116
10122
  lsms_library/countries/Uganda/2015-16/_/education_expenses.py,sha256=mjDvaMnKdWmiZ8dx3Xa_oLY7r01ynqZO68EGrvLog4k,1869
10117
10123
  lsms_library/countries/Uganda/2015-16/_/enterprise_income.py,sha256=Xx6CNSclieDQq-CdDNqnxEKr4ZLyfVWr0NpzzR1cLwo,939
10118
10124
  lsms_library/countries/Uganda/2015-16/_/food_acquired.py,sha256=QNYRUut4t5s_ApPQJ_iYNVqQMGjLVwMFTM3GrcqCb68,687
10119
- lsms_library/countries/Uganda/2015-16/_/household_characteristics.py,sha256=-m2JXqJYTo8iypmjmRJx8UHSZ6tC7uQXBpjnMrumYUA,515
10125
+ lsms_library/countries/Uganda/2015-16/_/household_characteristics.py,sha256=zwx8lLkrTcd80sgtUBpNbTgnYNnpVd4Uw1AAiL0NY4I,437
10120
10126
  lsms_library/countries/Uganda/2015-16/_/housing.py,sha256=7NnMsH_n9G2L3KwNeomAVaUNajIlSQiaYmlYKusEnT0,771
10121
10127
  lsms_library/countries/Uganda/2015-16/_/interview_date.py,sha256=0O-2c2jqI7j5C5ezgMpvDniJRVFHnNHUfoDaEgtsKXc,515
10122
10128
  lsms_library/countries/Uganda/2015-16/_/nonfood_expenditures.py,sha256=qgUeCa1Ms_d062zOrG6dpjh7qWVCE2pfSGtt8zKReZ4,737
@@ -10244,7 +10250,7 @@ lsms_library/countries/Uganda/2018-19/_/earnings.py,sha256=t4idlzC_vsViR8zhhHUsq
10244
10250
  lsms_library/countries/Uganda/2018-19/_/education_expenses.py,sha256=bxOdUd6YDqBY17VMFK-aKBgaJAtt3iknTXPfO9FEl9E,2182
10245
10251
  lsms_library/countries/Uganda/2018-19/_/enterprise_income.py,sha256=3UH9QufFefBD-DiP6nwyJvq3k8hWRXP0xRfYgJ4XEkA,939
10246
10252
  lsms_library/countries/Uganda/2018-19/_/food_acquired.py,sha256=xTKNV-iRI7SBZGqIy_0nOAmXLGwrdiGFilejXRq5BfI,875
10247
- lsms_library/countries/Uganda/2018-19/_/household_characteristics.py,sha256=CJRwktCvxY2JEN7YfC7_R235MBqkS89srEOfZlV0joQ,695
10253
+ lsms_library/countries/Uganda/2018-19/_/household_characteristics.py,sha256=E85-f6NyfpxSOlDxeiZyRRWLgGxDwDZHYuIzfKRZN8I,602
10248
10254
  lsms_library/countries/Uganda/2018-19/_/housing.py,sha256=7Mi8O8ZVrN5nEum2kGIMx8wd25lkrpWJf16dVC_zLoY,785
10249
10255
  lsms_library/countries/Uganda/2018-19/_/interview_date.py,sha256=-CLyemxm6Sn5I1lZdDm0qdZTKT9MPZCkI1bWCSaR6k4,511
10250
10256
  lsms_library/countries/Uganda/2018-19/_/nonfood_expenditures.py,sha256=7Xm4h1ryDJcFJ65BjXIIIzIRNkZPCCIa44Qsfp2ZLYk,446
@@ -10487,19 +10493,18 @@ lsms_library/countries/Uganda/2019-20/_/earnings.py,sha256=Iuj4_O_NC9n7kDFBnzwE5
10487
10493
  lsms_library/countries/Uganda/2019-20/_/education_expenses.py,sha256=P3NkW0lv-3dbFG2KBXpHqSZm69HR7IqFeO0zhxKxq_Y,2151
10488
10494
  lsms_library/countries/Uganda/2019-20/_/enterprise_income.py,sha256=_7ge9NbCdFoBYHr8OhelG3IrhbC2_-y82l1BDJBJWNQ,942
10489
10495
  lsms_library/countries/Uganda/2019-20/_/food_acquired.py,sha256=R6U1QwbNC-EXXh2cSK3wMPSPqWZL806Drpxu7WvIfDk,728
10490
- lsms_library/countries/Uganda/2019-20/_/household_characteristics.py,sha256=GOswkB9ZffRJDKiSrNl5PgQbd31vrYhuZPnATZbyyV8,518
10496
+ lsms_library/countries/Uganda/2019-20/_/household_characteristics.py,sha256=YclKYa9JBI6kiis3_897YClewg2eAQcmhmgLEx0APQ8,460
10491
10497
  lsms_library/countries/Uganda/2019-20/_/housing.py,sha256=K-5dXSuj8wNLqHD1cbGBPNw2NFBS_M_cAkXNewXGQHY,774
10492
10498
  lsms_library/countries/Uganda/2019-20/_/interview_date.py,sha256=iab1LDvhMALgaFZmR4Zz8FdQwS2dK2P0U0jAfLH9Oug,516
10493
10499
  lsms_library/countries/Uganda/2019-20/_/nonfood_expenditures.py,sha256=CRO6B7Fk0riuBjOCXuuhH3ThlN6cqGcmihv56PuA2vM,450
10494
10500
  lsms_library/countries/Uganda/2019-20/_/other_features.py,sha256=Tvevvw888c0NKnHB5EJ4AZko-XIzT6SbGLdkUvB6wT8,1012
10495
10501
  lsms_library/countries/Uganda/2019-20/_/plots.py,sha256=mbqRPKeK5Z-phCZy1zIxbsPXXZiFAvu7Dq-oMtsrPTM,880
10496
10502
  lsms_library/countries/Uganda/2019-20/_/shocks.py,sha256=L5nYYT82m_ACGGSaUtnpGmm7Bn7q-rdqDGvGEc0jcYA,2627
10497
- lsms_library/countries/Uganda/_/Makefile,sha256=dU7dNM7YXwjTspGlHvYx9a8UwrbxhiKznYAMPohKxeQ,3589
10503
+ lsms_library/countries/Uganda/_/Makefile,sha256=9fuxU6l7SCjkL7tPNBo58u0Y42H1RKkfE6XDrWUqf2E,3649
10498
10504
  lsms_library/countries/Uganda/_/assets.py,sha256=jfwV44k96WZ7bANodoZ8BAMO-baQy1FKuCDRKPoqFwA,665
10499
10505
  lsms_library/countries/Uganda/_/categorical_mapping.org,sha256=XD4QBTKwdIEjScBEElpQ0BijfscmbnXfLS8dLQtDpR0,11822
10500
- lsms_library/countries/Uganda/_/compare_unit_labels.py,sha256=_8R3C0EUAjUZtsutmWayGXjEJs7UzOrNfsD1d5TrR_E,276
10501
10506
  lsms_library/countries/Uganda/_/conversion_to_kgs.json,sha256=K7uEX1YERdMTgVCpZ_9Fol2xSbRd90Obf9WuPocJJ98,2650
10502
- lsms_library/countries/Uganda/_/data_scheme.yml,sha256=flcHZV_bpqw555_0ir6ijGQgU1ErDzaLbdtvTfcwJuw,401
10507
+ lsms_library/countries/Uganda/_/data_scheme.yml,sha256=98XKJaHdrPQj2xwfgkZ_P-uDPATWVByayFWuoj1jQnQ,450
10503
10508
  lsms_library/countries/Uganda/_/earnings.py,sha256=ela9bgSbY1S-vvOnQM48WV0XOjCl6d5FNlpqmzAlINo,814
10504
10509
  lsms_library/countries/Uganda/_/enterprise_income.py,sha256=MLx1mxjPym_r1KTNudDxRVY0t6Kezn4F4CwqJV1Li7M,851
10505
10510
  lsms_library/countries/Uganda/_/fct_addition.py,sha256=d_TEoxFQ4yjd6D1ghMOT507sCc8T7RvOqKjVKl-RGHM,2679
@@ -10508,7 +10513,7 @@ lsms_library/countries/Uganda/_/fct_uganda.csv,sha256=Gc1M3vwIeo2DVEoHsVxanBYyP6
10508
10513
  lsms_library/countries/Uganda/_/food_acquired.py,sha256=OqIpjJZV3DDwu8352FslIiwsz3-zBnrnmeCNCvG7RO0,1017
10509
10514
  lsms_library/countries/Uganda/_/food_items.org,sha256=utpfHLa6oDsF52dFWI7z3-PQyZPgxb2-7F2bILqW-24,16896
10510
10515
  lsms_library/countries/Uganda/_/food_prices_quantities_and_expenditures.py,sha256=ixtX8WlGlGUbKNCqtR8TPYEm6NhyapMxbw-g6_fwmyY,1493
10511
- lsms_library/countries/Uganda/_/household_characteristics.py,sha256=uKEDk6qP-mshQU0ppNaK9jy5pCZSrRcsHXNf9U8eVHQ,914
10516
+ lsms_library/countries/Uganda/_/household_characteristics.py,sha256=QyD2-Ma_m5VmVKhjlJ5zdNhsXaSA0MVXc2vcDN1Eg_A,877
10512
10517
  lsms_library/countries/Uganda/_/housing.py,sha256=YY9ofu9YTTyz29E4UbpQPB32m3KiQFkc9Qomq73BbNg,802
10513
10518
  lsms_library/countries/Uganda/_/income.py,sha256=1E0vimt_5Yyxf2KH7AyUYiUdwA8Hyeae_bzyaE0yq7w,584
10514
10519
  lsms_library/countries/Uganda/_/interview_date.py,sha256=gYgueLpNwuI8a2EOOpeOzKTtH3LAN7YkaKz5H7hDvxo,825
@@ -10533,13 +10538,14 @@ lsms_library/countries/Uganda/_/unitvalues.py,sha256=-pY-4OYLJQ-SrCv6xB1FRLevO7y
10533
10538
  lsms_library/countries/Uganda/_/updated_ids.json,sha256=pgkwK6gcYKufkWt0GS9G39WPF9w7_rxW_bIO-lSwJW4,462159
10534
10539
  lsms_library/countries/Uganda/var/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10535
10540
  lsms_library/countries/Uganda/var/README,sha256=pOIlG6aObxWzUedoWjt9Z5-FG28UXrtws6ktD6GhWn0,116
10536
- lsms_library/country.py,sha256=mQWujI2N79sO6zSL_ATMA9lST5eSEToI9U4U95oluHk,33844
10541
+ lsms_library/country.py,sha256=G7QksqvSWET378pxcOCQ8hQ2dflf9AAaSGSQ1nmHobE,33835
10537
10542
  lsms_library/data_info.yml,sha256=Y5GaP52AzJsIvXtioSJP4R63opZcqhjQFsGLjad-2U4,478
10538
10543
  lsms_library/demands.py,sha256=UCnUTjoE6FHt32XvRm4hZdIBryOj_YQU4im0-Wu9y7U,749
10544
+ lsms_library/dvc_permissions.py,sha256=Igs04aJAmHbTiKmitNGh4uMI3mFFctUEebF99IMX3VY,2226
10539
10545
  lsms_library/harmony.py,sha256=hEGLJUnWBXdyGeAAr7qgCFZ0Q-KsiqjBxHrtYbZ8Ngs,2742
10540
- lsms_library/local_tools.py,sha256=8DfMIOI0lJ7_NxfH65uYVIbHyAb8KrOJAKOhn2qNjKU,40716
10546
+ lsms_library/local_tools.py,sha256=UJvressIwYCBdmq8TJ3fHUowUKzlmiHjlGTTRY-S2Kk,40734
10541
10547
  lsms_library/transformations.py,sha256=uBSGfUAjWMrqSOmxdYYzi9csf8WvjaGCC7lzflJObtU,3661
10542
- lsms_library-0.2.6.dist-info/LICENSE.txt,sha256=qImFXcRJwxIHS80FE7uOx6FhmLY8apd4Y12aR54QU7w,282
10543
- lsms_library-0.2.6.dist-info/METADATA,sha256=Cnn_eFb2XMT64ar6AVoH7JuOuJ_uPSj8sxLXJCdpbQA,5214
10544
- lsms_library-0.2.6.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
10545
- lsms_library-0.2.6.dist-info/RECORD,,
10548
+ lsms_library-0.2.9.dev0.dist-info/LICENSE.txt,sha256=qImFXcRJwxIHS80FE7uOx6FhmLY8apd4Y12aR54QU7w,282
10549
+ lsms_library-0.2.9.dev0.dist-info/METADATA,sha256=1tt2IG9-RzVPRBr7V0eQSP6V-2NOtjWZlh_EBeBZ434,5219
10550
+ lsms_library-0.2.9.dev0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
10551
+ lsms_library-0.2.9.dev0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.1.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,4 +0,0 @@
1
-
2
- Maize Ufa:
3
- - Maize Ufa Mgaiwa (Normal F
4
- - Maize Ufa Refined (Fine Fl
@@ -1 +0,0 @@
1
- {"Riz local longs grains": "Riz local longs grains", "Riz local (Kovi\u00c3\u00a9)": "Riz local (Kovi\u00e9)", "Riz import\u00c3\u00a9 longs grains": "Riz import\u00e9 longs grains", "Riz import\u00c3\u00a9 bris\u00c3\u00a9": "Riz import\u00e9 bris\u00e9", "Ma\u00c3\u00afs en \u00c3\u00a9pis": "Ma\u00efs en \u00e9pis", "Ma\u00c3\u00afs en grains": "Ma\u00efs en grains", "Mil": "Mil", "Sorgho": "Sorgho", "Bl\u00c3\u00a9": "Bl\u00e9", "Fonio": "Fonio", "11": "Other Grains", "Farine de ma\u00c3\u00afs": "Farine de ma\u00efs", "Farine de mil": "Farine de mil", "Farine de bl\u00c3\u00a9 local ou import\u00c3\u00a9": "Farine de bl\u00e9 local ou import\u00e9", "15": "Other cereal flours", "P\u00c3\u00a2tes alimentaires": "P\u00e2tes alimentaires", "Pain moderne": "Pain moderne", "Pain traditionnel": "Pain traditionnel", "Croissants": "Croissants", "Biscuits": "Biscuits", "G\u00c3\u00a2teaux": "G\u00e2teaux", "Beignets, galettes": "Beignets, galettes", "Viande de b\u00c5\u0093uf": "Viande de b\u0153uf", "Viande de chameau": "Viande de chameau", "Viande de mouton": "Viande de mouton", "Viande de ch\u00c3\u00a8vre": "Viande de ch\u00e8vre", "Abats et tripes (foie, rognon, etc.)": "Abats et tripes (foie, rognon, etc.)", "Viande de porc": "Viande de porc", "Poulet sur pied": "Poulet sur pied", "Viande de poulet": "Viande de poulet", "Viande d'autres volailles domestiques": "Viande d'autres volailles domestiques", "Charcuterie (jambon, saucisson), conserves de viandes": "Charcuterie (jambon, saucisson), conserves de viandes", "Gibiers": "Gibiers", "Autres viandes n.d.a": "Autres viandes n.d.a", "Chinchard frais": "Chinchard frais", "Carpe fra\u00c3\u00aeche": "Carpe fraiche", "Dorade fraiche": "Dorade fraiche", "Maquereau frais": "Maquereau frais", "Chinchard fum\u00c3\u00a9": "Chinchard fum\u00e9", "Anchois fum\u00c3\u00a9": "Anchois fum\u00e9", "Poisson s\u00c3\u00a9ch\u00c3\u00a9": "Poisson s\u00e9ch\u00e9", "Crabes, crevettes et autres fruits de mer": "Crabes, crevettes et autres fruits de mer", "Conserves de poisson": "Conserves de poisson", "Lait frais": "Lait frais", "Lait caill\u00c3\u00a9, yaourt": "Lait caill\u00e9, yaourt", "Lait concentr\u00c3\u00a9 sucr\u00c3\u00a9": "Lait concentr\u00e9 sucr\u00e9", "Lait concentr\u00c3\u00a9 non-sucr\u00c3\u00a9": "Lait concentr\u00e9 non-sucr\u00e9", "Lait en poudre": "Lait en poudre", "Fromage local": "Fromage local", "Lait et farines pour b\u00c3\u00a9b\u00c3\u00a9": "Lait et farines pour b\u00e9b\u00e9", "Autres produits laitiers": "Autres produits laitiers", "Oeufs": "Oeufs", "Beurre": "Beurre", "Beurre de karit\u00c3\u00a9": "Beurre de karit\u00e9", "Huile de palme rouge": "Huile de palme rouge", "Huile d'arachide": "Huile d'arachide", "Huile de coton": "Huile de coton", "Huile de palme raffin\u00c3\u00a9e": "Huile de palme raffin\u00e9e", "Autres huiles n.d.a. (ma\u00c3\u00afs, soja, huile palmiste, etc.)": "Autres huiles n.d.a. (ma\u00efs, soja, huile palmiste, etc.)", "Mangue": "Mangue", "Ananas": "Ananas", "Orange": "Orange", "Banane douce": "Banane douce", "Citrons": "Citrons", "Autres agrumes": "Autres agrumes", "Avocats": "Avocats", "Past\u00c3\u00a8que, Melon": "Past\u00e8que, Melon", "Dattes": "Dattes", "Noix de coco": "Noix de coco", "Canne \u00c3\u00a0 sucre": "Canne \u00e0 sucre", "Autres fruits (pommes, raisin, etc.)": "Autres fruits (pommes, raisin, etc.)", "Salade (laitue)": "Salade (laitue)", "Choux": "Choux", "Carotte": "Carotte", "Haricot vert": "Haricot vert", "Concombre": "Concombre", "Aubergine, Courge/Courgette": "Aubergine, Courge/Courgette", "Poivron frais": "Poivron frais", "Tomate fra\u00c3\u00aeche": "Tomate fraiche", "Tomate s\u00c3\u00a9ch\u00c3\u00a9e": "Tomate s\u00e9ch\u00e9e", "Gombo frais": "Gombo frais", "Gombo sec": "Gombo sec", "Oignon frais": "Oignon frais", "Ail": "Ail", "Feuilles d'oseille (dakoumou, bissap/floer\u00c3\u00a8)": "Feuilles d'oseille (dakoumou, bissap/floer\u00e8)", "Feuilles de baobab": "Feuilles de baobab", "Gboma": "Gboma", "Ad\u00c3\u00a9m\u00c3\u00a8 (Feuilles crin-crin)": "Ad\u00e9m\u00e8 (Feuilles crin-crin)", "Moringa, feuilles de manioc, feuilles de taro et autres feuilles": "Moringa, feuilles de manioc, feuilles de taro et autres feuilles", "Autre l\u00c3\u00a9gumes frais n.d.a": "Autre l\u00e9gumes frais n.d.a", "Concentr\u00c3\u00a9 de tomate": "Concentr\u00e9 de tomate", "Petits pois": "Petits pois", "Petit pois secs": "Petit pois secs", "Autres l\u00c3\u00a9gumes secs n.d.a": "Autres l\u00e9gumes secs n.d.a", "Ni\u00c3\u00a9b\u00c3\u00a9/Haricots secs": "Ni\u00e9b\u00e9/Haricots secs", "Arachides fra\u00c3\u00aeches en coques": "Arachides fraiches en coques", "Arachides s\u00c3\u00a9ch\u00c3\u00a9es en coques": "Arachides s\u00e9ch\u00e9es en coques", "Arachides d\u00c3\u00a9cortiqu\u00c3\u00a9es ou pil\u00c3\u00a9es": "Arachides d\u00e9cortiqu\u00e9es ou pil\u00e9es", "Arachide grill\u00c3\u00a9e": "Arachide grill\u00e9e", "P\u00c3\u00a2te d'arachide": "P\u00e2te d'arachide", "S\u00c3\u00a9same": "S\u00e9same", "Noix de cajou": "Noix de cajou", "Noix de karit\u00c3\u00a9": "Noix de karit\u00e9", "Manioc": "Manioc", "Igname": "Igname", "Plantain": "Plantain", "Pomme de terre": "Pomme de terre", "Taro, macabo": "Taro, macabo", "Patate douce": "Patate douce", "Autres tubercules n.d.a": "Autres tubercules n.d.a", "Farines de manioc": "Farines de manioc", "Gari, tapioca": "Gari, tapioca", "Atti\u00c3\u00a9ke": "Atti\u00e9ke", "Sucre (poudre ou morceaux)": "Sucre (poudre ou morceaux)", "Miel": "Miel", "Chocolat \u00c3\u00a0 croquer, p\u00c3\u00a2te \u00c3\u00a0 tartiner": "Chocolat \u00e0 croquer, p\u00e2te \u00e0 tartiner", "Caramel, bonbons, confiseries, etc": "Caramel, bonbons, confiseries, etc", "Sel": "Sel", "Piment": "Piment", "Gingembre": "Gingembre", "Cube alimentaire (Maggi, Jumbo, )": "Cube alimentaire (Maggi, Jumbo, )", "Ar\u00c3\u00b4me (Maggi, Jumbo, etc.)": "Ar\u00f4me (Maggi, Jumbo, etc.)", "Afintin (Moutarde africaine)": "Afintin (Moutarde africaine)", "Mayonnaise": "Mayonnaise", "Vinaigre /moutarde": "Vinaigre /moutarde", "Autres condiments (poivre etc.)": "Autres condiments (poivre etc.)", "Noix de cola": "Noix de cola", "Autres produits alimentaires": "Autres produits alimentaires", "Caf\u00c3\u00a9": "Caf\u00e9", "Th\u00c3\u00a9": "Th\u00e9", "Chocolat en poudre": "Chocolat en poudre", "Autres tisanes et infusions n.d.a. (quinquelibat, citronelle, etc.)": "Autres tisanes et infusions n.d.a. (quinquelibat, citronelle, etc.)", "Jus de fruits (orange, bissap, gingembre, jus de cajou,etc.)": "Jus de fruits (orange, bissap, gingembre, jus de cajou,etc.)", "Eau min\u00c3\u00a9rale/ filtr\u00c3\u00a9e": "Eau min\u00e9rale/ filtr\u00e9e", "Boissons gazeuses (coca, etc.)": "Boissons gazeuses (coca, etc.)", "Jus en poudre": "Jus en poudre", "Bi\u00c3\u00a8res et vins traditionnels (dolo, vin de palme, vin de raphia, etc.)": "Bi\u00e8res et vins traditionnels (dolo, vin de palme, vin de raphia, etc.)", "Bi\u00c3\u00a8res industrielles": "Bi\u00e8res industrielles", "": "Missing", "201": "Cigarettes, Tabac", "202": "P\u00e9trole lampant", "203": "Charbon de bois/Charbon min\u00e9ral", "204": "Bois de chauffe achet\u00e9", "205": "Bois de chauffe ramass\u00e9 (estimer la valeur)", "206": "Bougies", "207": "Allumettes", "208": "Carburant pour v\u00e9hicule", "209": "Carburant pour motocyclette", "210": "Transport urbain en taxi", "211": "Transport urbain en bus", "212": "Transport urbain / rural en moto-taxi", "213": "Transport urbain en train", "214": "Transport urbain / rural par voie fluviale", "215": "Transport urbain / rural par traction animale", "216": "Journaux", "217": "Frais de mouture des c\u00e9r\u00e9ales", "301": "Whisky et autres liqueurs", "302": "Vins modernes", "303": "Gaz domestique", "304": "Carburant pour groupe electrog\u00e8ne \u00e0 usage domestique", "305": "Piles \u00e9lectriques,", "306": "Savon de m\u00e9nage, lessive en poudre, d\u00e9tergents (eau de javel, etc.)", "307": "Insecticide, tortillon anti-moustique", "308": "Salaire du personnel de maison (gardien, boy, chauffeur, cuisinier, etc.)", "309": "Frais de blanchiment des v\u00eatements, linge, etc. (Pressing)", "310": "Frais de ramassage des ordures m\u00e9nag\u00e8res", "311": "Lavage de v\u00e9hicules", "312": "Frais de parking", "313": "Frais de communication t\u00e9l\u00e9phonique dans une cabine / t\u00e9l\u00e9centre", "314": "Billet de lotterie nationale, billet de PMU", "315": "Revues, journal ou magazine mensuel etc.", "316": "Frais de coiffure homme et femme (salon, tressage, m\u00e8ches, coupe, etc.), manucure, p\u00e9dicure", "317": "Savon de toilette, Shampoing", "318": "P\u00e2te dentifrice", "319": "Papier toilette", "320": "Serviettes hygi\u00e9niques, couches jetables pour b\u00e9b\u00e9, etc.", "321": "Lait, lotion de toilette corporelle (glyc\u00e9rine, vaseline, etc.)", "322": "Autres produits de toilettes (rasoir, coton, cr\u00e8me / mousse \u00e0 raser, etc.)", "401": "Frais d'entretien et de r\u00e9paration de chaussures: cirage, ressemelage, etc.", "402": "Ampoules \u00e9lectriques pour le logement", "403": "Lubrifiants (huile moteur; huile de frein; liquide batterie (acide); graisses; autres lubrifiants n.d.a.)", "404": "Services de r\u00e9paration et d'entretien (vidange, graissage, etc.) de moyens de transport personnel (voitures, motos, bicyclette, etc.)", "405": "Transport inter-localit\u00e9 par voitures", "406": "Transport inter-locait\u00e9 \u00e0 traction animale", "407": "Transport interlocalit\u00e9 par eau (bateau, pirogue, pinasse)", "408": "Frais de timbre postaux, d'exp\u00e9dition de mandat, etc", "409": "Frais d'envoi de fax", "410": "Produits pour le jardinage (plantes et fleurs ornementales), pas pour l'agriculture", "411": "Aliments, frais d'entretien, frais de v\u00e9t\u00e9rinaire des animaux de compagnie (chiens, chats, etc.)", "412": "Droit d'entr\u00e9e (achat d'un ticket) \u00e0 des manifestations sportives.", "413": "Droit d'entr\u00e9e (achat d'un ticket) pour cin\u00e9ma, concert, pi\u00e8ce de th\u00e9\u00e2tre, mus\u00e9e, expositions, etc", "414": "Autres services r\u00e9cr\u00e9atifs: services de photographe (d\u00e9veloppement, tirage), photo d'identit\u00e9, etc.", "415": "Parfums", "416": "Brosse \u00e0 dents", "417": "Contraceptifs", "418": "Frais de photocopies de document", "501": "Tissus d'habillement: tissus pagne, tissu pagne du tisserand, tissu synth\u00e9tique, etc.", "502": "V\u00eatements femmes (15 ans et plus): robe, jupe, pantalon, ensemble, etc.", "503": "Sous-v\u00eatements femme (15 ans et plus): slip, jupon, tee shirt,soutien gorge, collant, etc.", "504": "V\u00eatements enfants (0-14 ans): layette pour b\u00e9b\u00e9, chemise, pantalon gar\u00e7on, robe fillette, slip enfant, blouses, etc. (Pas inclure les uniformes scolaires)", "505": "V\u00eatements hommes (15 ans et plus): chemise, pantalon, veste, ensemble, v\u00eatements de travail, etc.", "506": "Sous-v\u00eatements homme (15 ans et plus): slip, chaussettes, tee shirt et maillot de corps, etc.", "507": "Frais de confection et de r\u00e9paration de v\u00eatements homme: ensemble, pantalon, chemise, r\u00e9paration, location v\u00eatement, etc.", "508": "Frais de confection et de r\u00e9paration de v\u00eatements femme: robe, pantalon, jupe, ensemble, r\u00e9paration, location, etc.", "509": "Frais de confection et de r\u00e9paration de v\u00eatements enfants", "510": "Chaussures hommes", "511": "Chaussures femmes", "512": "Chaussures enfants", "601": "Mat\u00e9riel pour l'entretien et les petites r\u00e9parations du logement (remplacement d'une t\u00f4le, d'une vitre, d'une ampoule, etc.)", "602": "Main-d'oeuvre et services d'entretien et de r\u00e9paration courante du logement (vidange fosse septique,main d'\u0153uvre pour l'entretien du logement, etc.)", "603": "Mat\u00e9riaux de ma\u00e7onnerie pour la construction ou les grosses r\u00e9parations de logement: ciment, briques, fer \u00e0 b\u00e9ton, sable, gravier, parpaings, etc.", "604": "Autres mat\u00e9riaux pour la construction ou les grosses r\u00e9parations de logement: t\u00f4les, bois de charpente, planches, lattes, contre-plaqu\u00e9s, mat\u00e9riaux d'\u00e9lectricit\u00e9, mat\u00e9riaux de plomberie, mat\u00e9riaux de peinture, carreaux, tapis et rev\u00eatement du sol, etc.", "605": "Main-d'oeuvre pour la construction et les grosses r\u00e9paration de logement (ma\u00e7onnerie, toiture et charpente, \u00e9lectricit\u00e9, plomberie, menuiserie, peinture et rev\u00eatement du sol), etc.", "606": "Frais d'acquisition d'un terrain ou d'un logement", "607": "Frais d'\u00e9tudes et d'architecte", "608": "Frais d'abonnement au r\u00e9seau de distribution d'eau", "609": "Frais d'abonnement au r\u00e9seau de distribution d'\u00e9lectricit\u00e9", "610": "Frais de connexion au r\u00e9seau de distribution d'eau", "611": "Frais de connexion au r\u00e9seau de distribution d'\u00e9lectricit\u00e9", "612": "Meubles de salon et de salle \u00e0 manger (fauteuils, table, chaises, armoires, etc.)", "613": "Lit, matelas, armoire et autres meubles de chambre \u00e0 coucher", "614": "R\u00e9paration de meubles (fauteuils, chaises, lits, armoires, etc.)", "615": "Linge de maison et articles associ\u00e9s (serviettes de bain, drap, couverture, couvre-lit, oreillers, moustiquaire, nattes, tapis, rideaux, \u00e9ventail, etc.)", "616": "Appareils \u00e9lectro-m\u00e9nagers: frigo, climatiseurs, r\u00e9chaud, four, cuisini\u00e8re, lave-linge, chauffe-eau, fer \u00e0 repasser, etc.", "617": "R\u00e9paration d'appareils \u00e9lectro-m\u00e9nagers (fer \u00e0 repasser, frigo, cuisini\u00e8re, four, r\u00e9chaud, climatiseur, ventilateur, chauffe-eau, etc.)", "618": "Vaisselle: assiettes, couteau, fourchette, cuill\u00e8re, gobelets, verres, etc.", "619": "Ustensiles de cuisine: casserole, marmite, tamis local, r\u00e9paration d'ustensiles de cuisine, etc.", "620": "Autres ustensiles de m\u00e9nage: seau, bouilloire, biberon, poubelle, tasses, caf\u00e9ti\u00e8re non \u00e9lectrique, th\u00e9i\u00e8re, calebasse, louche, jarre, canari, mortier, pilon, etc.", "621": "Outillage de maison: outils de bricolage (marteau, tournevis, etc.); outil de jardinage (pelle, r\u00e2teau, brouette, etc.);", "622": "Lampes \u00e9lectriques, lampes temp\u00eates, torches", "623": "Achat d'une voiture pour usage personnel", "624": "Achat d'un motocycle (v\u00e9lo, moto) pour usage personnel", "625": "Pi\u00e8ces d\u00e9tach\u00e9es de moyens de transport individuel: pneu, batterie, bougie, carburateur, etc.", "626": "Frais d'assurance d'un moyen de transport individuel (auto, moto, etc.), assurance de voyage", "627": "Vignette automobile/ moto", "628": "Location d'un v\u00e9hicule pour usage personnel: voiture, moto/v\u00e9lo, etc.", "629": "Transport inter-urbain en train dans le pays et \u00e0 l'\u00e9tranger", "630": "Transport en avion dans le pays et \u00e0 l'\u00e9tranger", "631": "Frais de d\u00e9m\u00e9nagement", "632": "Frais de visa, taxes d'a\u00e9roport", "633": "Achat d'un t\u00e9l\u00e9phone portable", "634": "Appareils de musique et d'images: radio, radio-cassette, cha\u00eene de musique, TV, lecteur CD/DVD, MP3, MP4, cam\u00e9ra, camescope, etc.", "635": "Ordinateur, imprimante, tablette,machine \u00e0 \u00e9crire, etc.", "636": "R\u00e9paration d'appareils \u00e9lectroniques: radio, radio-cassettes, TV, camera, lecteur CD/DVD, ordinateur, etc.", "637": "Petit mat\u00e9riel \u00e9lectronique \u00e0 usage personnel: cassettes, CD/DVD, cl\u00e9 USB, encre pour imprimante, papier d'impression photos, pellicule photos, etc.", "638": "Articles de sport et de d\u00e9tente: ballon, jeu ludo, poids (p\u00e9tanque), jeu de carte, jouets pour enfants, jeux vid\u00e9o, petits instruments de musique, etc.", "639": "Livres non scolaires, bande dessin\u00e9e", "640": "Papier rame, enveloppes, articles de dessin (pinceaux, papier, peinture etc.), etc.", "641": "Frais de p\u00e9l\u00e9rinage", "642": "Formation professionnelle (en particulier directement aupr\u00e8s des ateliers, ma\u00eetres, etc.)", "643": "Frais de cours particuliers pour adultes (alphab\u00e9tisation) et personnes non scolaris\u00e9es", "644": "Services d'h\u00e9bergement: chambres d'h\u00f4tel, etc.", "645": "Montres, r\u00e9veils", "646": "Boucle d'oreilles, colliers, bracelets, bijoux, autres articles de bijouterie et joaillerie n.d.a.", "647": "Autres effets personnels: valise, sac de voyage, sac \u00e0 main, perruques, chapeau, lunettes solaires, parapluies, parasol, canne, porte-monnaie, portefeuille, articles pour fumeurs (cendrier etc.); articles pour b\u00e9b\u00e9 (poussette, si\u00e8ges), articles fun\u00e9raires, etc.", "648": "Frais d'assurance d'une maison ou tout autre bien qu'un moyen de transport", "649": "Taxes d'habitation (immeubles b\u00e2ties et non b\u00e2ties), taxes de voiries", "650": "Frais d'assurance vie", "651": "Frais d'assurance maladie", "652": "Frais de l\u00e9galisation (confection) de documents administratifs (actes d'Etat-civil, dipl\u00f4mes, etc.)", "653": "Autres services: annonce \u00e0 la radio, dans un journal/\u00e0 la t\u00e9l\u00e9vision, pompe fun\u00e8bre, etc."}
@@ -1,9 +0,0 @@
1
- from cfe.df_utils import df_to_orgtbl
2
- import pandas as pd
3
-
4
- d = {}
5
- for t in ['2005-06','2009-10','2010-11','2011-12','2013-14','2015-16','2018-19','2019-20']:
6
- d[t] = pd.read_csv('../'+t+'/_/unitlabels.csv',index_col=0).squeeze()
7
-
8
- d = pd.DataFrame(d)
9
- print(df_to_orgtbl(d))