{"id":162818,"name":"UNICEF AI4D Relative Wealth Project","description":"Aims to develop open datasets and machine learning models for poverty mapping estimation across nine countries in Southeast Asia.","url":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping","last_synced_at":"2026-04-22T22:02:48.614Z","repository":{"id":63579043,"uuid":"564579511","full_name":"thinkingmachines/unicef-ai4d-poverty-mapping","owner":"thinkingmachines","description":"UNICEF AI4D Relative Wealth Mapping Project  - datasets, models, and scripts for building relative wealth estimation models across Southeast Asia (SEA)","archived":false,"fork":false,"pushed_at":"2024-05-20T06:41:48.000Z","size":158220,"stargazers_count":24,"open_issues_count":18,"forks_count":8,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-22T04:43:08.916Z","etag":null,"topics":["geospatial-analysis","machine-learning","social-impact"],"latest_commit_sha":null,"homepage":"https://thinkingmachines.github.io/unicef-ai4d-poverty-mapping","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thinkingmachines.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-11T02:29:23.000Z","updated_at":"2025-05-21T16:23:47.000Z","dependencies_parsed_at":"2023-12-31T00:13:18.171Z","dependency_job_id":"99f6d515-b537-4e9b-8496-8f52e6770702","html_url":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping","commit_stats":{"total_commits":342,"total_committers":10,"mean_commits":34.2,"dds":"0.49122807017543857","last_synced_commit":"d18617c976a1cce89af5c318dfca1d7b67c6511e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thinkingmachines/unicef-ai4d-poverty-mapping","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thinkingmachines","download_url":"https://codeload.github.com/thinkingmachines/unicef-ai4d-poverty-mapping/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280912705,"owners_count":26412492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"thinkingmachines","name":"Thinking Machines Data Science","uuid":"18002528","kind":"organization","description":"Thinking Machines is a leading-edge data technology consultancy that transforms organizations by building enterprise AI and cloud data platforms.","email":"hello@thinkingmachin.es","website":"https://thinkingmachin.es","location":null,"twitter":"thinkdatasci","company":null,"icon_url":"https://avatars.githubusercontent.com/u/18002528?v=4","repositories_count":63,"last_synced_at":"2024-04-24T06:44:12.247Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/thinkingmachines","funding_links":[],"total_stars":640,"followers":82,"following":0,"created_at":"2022-11-14T06:17:55.045Z","updated_at":"2024-04-24T06:44:19.586Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thinkingmachines","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thinkingmachines/repositories"},"packages":[],"commits":{"id":1460891,"full_name":"thinkingmachines/unicef-ai4d-poverty-mapping","default_branch":"main","total_commits":349,"total_committers":8,"total_bot_commits":1,"total_bot_committers":1,"mean_commits":43.625,"dds":0.4756446991404012,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2025-10-23T00:09:18.867Z","last_synced_commit":"8addd4633c7b9fdc17e672a6763dee3535ea0d5d","created_at":"2023-12-31T00:10:05.816Z","updated_at":"2025-10-23T00:09:10.533Z","committers":[{"name":"Butch Landingin","email":"butch@thinkingmachin.es","login":"butchtm","count":183},{"name":"tm_jc_nacpil","email":"jcnacpil@thinkingmachin.es","login":"tm-jc-nacpil","count":69},{"name":"alron","email":"alron@thinkingmachin.es","login":"alronlam","count":46},{"name":"Jace Peralta","email":"jcp@thinkingmachin.es","login":"tm-jace-peralta","count":39},{"name":"tm-danna-ang","email":"danna@thinkingmachin.es","login":"tm-danna-ang","count":7},{"name":"LevyMedinaII","email":"79825579+levymedina","login":"levymedina","count":2},{"name":"Ardie Orden","email":"ardieorden@gmail.com","login":"ardieorden","count":2},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-26T00:00:38.633Z","repositories_count":6088098,"commits_count":922374706,"contributors_count":35991456,"owners_count":1109173,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"thinkingmachines/unicef-ai4d-poverty-mapping","html_url":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping","last_synced_at":"2025-09-24T23:24:41.701Z","status":"error","issues_count":60,"pull_requests_count":42,"avg_time_to_close_issue":2551313.152173913,"avg_time_to_close_pull_request":291740.38095238095,"issues_closed_count":46,"pull_requests_closed_count":42,"pull_request_authors_count":7,"issue_authors_count":7,"avg_comments_per_issue":0.3333333333333333,"avg_comments_per_pull_request":1.9047619047619049,"merged_pull_requests_count":35,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-12-31T00:10:27.338Z","updated_at":"2025-09-24T23:24:41.701Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinkingmachines%2Funicef-ai4d-poverty-mapping/issues","issue_labels_count":{"enhancement":1},"pull_request_labels_count":{},"issue_author_associations_count":{"COLLABORATOR":54,"NONE":4,"CONTRIBUTOR":2},"pull_request_author_associations_count":{"CONTRIBUTOR":34,"COLLABORATOR":7,"NONE":1},"issue_authors":{"tm-kah-alforja":54,"tm-jc-nacpil":1,"AnthonyMockler":1,"CEduardoSQUTEC":1,"GIS243":1,"joshuacortez":1,"tm-jace-peralta":1},"pull_request_authors":{"tm-jc-nacpil":14,"tm-jace-peralta":14,"butchtm":5,"alronlam":4,"tm-danna-ang":2,"ardieorden":2,"ghost":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-10-22T00:00:24.539Z","repositories_count":11127570,"issues_count":34639965,"pull_requests_count":112470081,"authors_count":11040417,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"tm-kah-alforja","count":54,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tm-kah-alforja"},{"login":"butchtm","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/butchtm"},{"login":"tm-danna-ang","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tm-danna-ang"}],"active_maintainers":[]},"events":{"total":{"WatchEvent":5,"ForkEvent":1},"last_year":{"WatchEvent":5,"ForkEvent":1}},"keywords":["geospatial-analysis","machine-learning","social-impact"],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.in","sha":null,"kind":"manifest","created_at":"2022-11-21T19:05:38.390Z","updated_at":"2022-11-21T19:05:38.390Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/requirements.in","dependencies":[{"id":6731975670,"package_name":"black","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975671,"package_name":"earthengine-api","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975672,"package_name":"gdal","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975673,"package_name":"geopandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975674,"package_name":"geowrangler","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975675,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975676,"package_name":"loguru","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975677,"package_name":"numpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975678,"package_name":"pandas","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975679,"package_name":"pre-commit","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975680,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975681,"package_name":"rasterio","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6731975682,"package_name":"rasterstats","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"lockfile","created_at":"2022-11-21T19:05:38.401Z","updated_at":"2022-11-21T19:05:38.401Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/requirements.txt","dependencies":[{"id":6731975683,"package_name":"affine","ecosystem":"pypi","requirements":"==2.3.1","direct":false,"kind":"runtime","optional":false},{"id":6731975684,"package_name":"anyio","ecosystem":"pypi","requirements":"==3.6.2","direct":false,"kind":"runtime","optional":false},{"id":6731975685,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"==21.3.0","direct":false,"kind":"runtime","optional":false},{"id":6731975686,"package_name":"argon2-cffi-bindings","ecosystem":"pypi","requirements":"==21.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975687,"package_name":"asttokens","ecosystem":"pypi","requirements":"==2.1.0","direct":false,"kind":"runtime","optional":false},{"id":6731975688,"package_name":"attrs","ecosystem":"pypi","requirements":"==22.1.0","direct":false,"kind":"runtime","optional":false},{"id":6731975689,"package_name":"babel","ecosystem":"pypi","requirements":"==2.11.0","direct":false,"kind":"runtime","optional":false},{"id":6731975690,"package_name":"backcall","ecosystem":"pypi","requirements":"==0.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975691,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.11.1","direct":false,"kind":"runtime","optional":false},{"id":6731975692,"package_name":"black","ecosystem":"pypi","requirements":"==22.10.0","direct":false,"kind":"runtime","optional":false},{"id":6731975693,"package_name":"bleach","ecosystem":"pypi","requirements":"==5.0.1","direct":false,"kind":"runtime","optional":false},{"id":6731975694,"package_name":"cachetools","ecosystem":"pypi","requirements":"==5.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975695,"package_name":"certifi","ecosystem":"pypi","requirements":"==2022.9.24","direct":false,"kind":"runtime","optional":false},{"id":6731975696,"package_name":"cffi","ecosystem":"pypi","requirements":"==1.15.1","direct":false,"kind":"runtime","optional":false},{"id":6731975697,"package_name":"cfgv","ecosystem":"pypi","requirements":"==3.3.1","direct":false,"kind":"runtime","optional":false},{"id":6731975698,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==2.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975699,"package_name":"click","ecosystem":"pypi","requirements":"==8.1.3","direct":false,"kind":"runtime","optional":false},{"id":6731975700,"package_name":"click-plugins","ecosystem":"pypi","requirements":"==1.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975701,"package_name":"cligj","ecosystem":"pypi","requirements":"==0.7.2","direct":false,"kind":"runtime","optional":false},{"id":6731975702,"package_name":"debugpy","ecosystem":"pypi","requirements":"==1.6.3","direct":false,"kind":"runtime","optional":false},{"id":6731975703,"package_name":"decorator","ecosystem":"pypi","requirements":"==5.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975704,"package_name":"defusedxml","ecosystem":"pypi","requirements":"==0.7.1","direct":false,"kind":"runtime","optional":false},{"id":6731975705,"package_name":"distlib","ecosystem":"pypi","requirements":"==0.3.6","direct":false,"kind":"runtime","optional":false},{"id":6731975706,"package_name":"earthengine-api","ecosystem":"pypi","requirements":"==0.1.332","direct":false,"kind":"runtime","optional":false},{"id":6731975707,"package_name":"entrypoints","ecosystem":"pypi","requirements":"==0.4","direct":false,"kind":"runtime","optional":false},{"id":6731975708,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"==1.0.4","direct":false,"kind":"runtime","optional":false},{"id":6731975709,"package_name":"executing","ecosystem":"pypi","requirements":"==1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975710,"package_name":"fastcore","ecosystem":"pypi","requirements":"==1.5.27","direct":false,"kind":"runtime","optional":false},{"id":6731975711,"package_name":"fastjsonschema","ecosystem":"pypi","requirements":"==2.16.2","direct":false,"kind":"runtime","optional":false},{"id":6731975712,"package_name":"filelock","ecosystem":"pypi","requirements":"==3.8.0","direct":false,"kind":"runtime","optional":false},{"id":6731975713,"package_name":"fiona","ecosystem":"pypi","requirements":"==1.8.22","direct":false,"kind":"runtime","optional":false},{"id":6731975714,"package_name":"future","ecosystem":"pypi","requirements":"==0.18.2","direct":false,"kind":"runtime","optional":false},{"id":6731975715,"package_name":"gdal","ecosystem":"pypi","requirements":"==3.6.0.1","direct":false,"kind":"runtime","optional":false},{"id":6731975716,"package_name":"geopandas","ecosystem":"pypi","requirements":"==0.10.2","direct":false,"kind":"runtime","optional":false},{"id":6731975717,"package_name":"geowrangler","ecosystem":"pypi","requirements":"==0.1.0","direct":false,"kind":"runtime","optional":false},{"id":6731975718,"package_name":"google-api-core","ecosystem":"pypi","requirements":"==2.10.2","direct":false,"kind":"runtime","optional":false},{"id":6731975719,"package_name":"google-api-python-client","ecosystem":"pypi","requirements":"==2.66.0","direct":false,"kind":"runtime","optional":false},{"id":6731975720,"package_name":"google-auth","ecosystem":"pypi","requirements":"==2.14.1","direct":false,"kind":"runtime","optional":false},{"id":6731975721,"package_name":"google-auth-httplib2","ecosystem":"pypi","requirements":"==0.1.0","direct":false,"kind":"runtime","optional":false},{"id":6731975722,"package_name":"google-cloud-core","ecosystem":"pypi","requirements":"==2.3.2","direct":false,"kind":"runtime","optional":false},{"id":6731975723,"package_name":"google-cloud-storage","ecosystem":"pypi","requirements":"==2.6.0","direct":false,"kind":"runtime","optional":false},{"id":6731975724,"package_name":"google-crc32c","ecosystem":"pypi","requirements":"==1.5.0","direct":false,"kind":"runtime","optional":false},{"id":6731975725,"package_name":"google-resumable-media","ecosystem":"pypi","requirements":"==2.4.0","direct":false,"kind":"runtime","optional":false},{"id":6731975726,"package_name":"googleapis-common-protos","ecosystem":"pypi","requirements":"==1.57.0","direct":false,"kind":"runtime","optional":false},{"id":6731975727,"package_name":"h3","ecosystem":"pypi","requirements":"==3.7.4","direct":false,"kind":"runtime","optional":false},{"id":6731975728,"package_name":"httplib2","ecosystem":"pypi","requirements":"==0.21.0","direct":false,"kind":"runtime","optional":false},{"id":6731975729,"package_name":"identify","ecosystem":"pypi","requirements":"==2.5.9","direct":false,"kind":"runtime","optional":false},{"id":6731975730,"package_name":"idna","ecosystem":"pypi","requirements":"==3.4","direct":false,"kind":"runtime","optional":false},{"id":6731975731,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"==5.0.0","direct":false,"kind":"runtime","optional":false},{"id":6731975732,"package_name":"iniconfig","ecosystem":"pypi","requirements":"==1.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975733,"package_name":"ipykernel","ecosystem":"pypi","requirements":"==6.17.1","direct":false,"kind":"runtime","optional":false},{"id":6731975734,"package_name":"ipython","ecosystem":"pypi","requirements":"==8.6.0","direct":false,"kind":"runtime","optional":false},{"id":6731975735,"package_name":"ipython-genutils","ecosystem":"pypi","requirements":"==0.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975736,"package_name":"jedi","ecosystem":"pypi","requirements":"==0.18.1","direct":false,"kind":"runtime","optional":false},{"id":6731975737,"package_name":"jinja2","ecosystem":"pypi","requirements":"==3.1.2","direct":false,"kind":"runtime","optional":false},{"id":6731975738,"package_name":"joblib","ecosystem":"pypi","requirements":"==1.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975739,"package_name":"json5","ecosystem":"pypi","requirements":"==0.9.10","direct":false,"kind":"runtime","optional":false},{"id":6731975740,"package_name":"jsonschema","ecosystem":"pypi","requirements":"==4.17.0","direct":false,"kind":"runtime","optional":false},{"id":6731975741,"package_name":"jupyter-client","ecosystem":"pypi","requirements":"==7.4.7","direct":false,"kind":"runtime","optional":false},{"id":6731975742,"package_name":"jupyter-core","ecosystem":"pypi","requirements":"==5.0.0","direct":false,"kind":"runtime","optional":false},{"id":6731975743,"package_name":"jupyter-server","ecosystem":"pypi","requirements":"==1.23.2","direct":false,"kind":"runtime","optional":false},{"id":6731975744,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"==3.5.0","direct":false,"kind":"runtime","optional":false},{"id":6731975745,"package_name":"jupyterlab-pygments","ecosystem":"pypi","requirements":"==0.2.2","direct":false,"kind":"runtime","optional":false},{"id":6731975746,"package_name":"jupyterlab-server","ecosystem":"pypi","requirements":"==2.16.3","direct":false,"kind":"runtime","optional":false},{"id":6731975747,"package_name":"loguru","ecosystem":"pypi","requirements":"==0.6.0","direct":false,"kind":"runtime","optional":false},{"id":6731975748,"package_name":"markupsafe","ecosystem":"pypi","requirements":"==2.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975749,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"==0.1.6","direct":false,"kind":"runtime","optional":false},{"id":6731975750,"package_name":"mistune","ecosystem":"pypi","requirements":"==2.0.4","direct":false,"kind":"runtime","optional":false},{"id":6731975751,"package_name":"morecantile","ecosystem":"pypi","requirements":"==3.2.1","direct":false,"kind":"runtime","optional":false},{"id":6731975752,"package_name":"munch","ecosystem":"pypi","requirements":"==2.5.0","direct":false,"kind":"runtime","optional":false},{"id":6731975753,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"==0.4.3","direct":false,"kind":"runtime","optional":false},{"id":6731975754,"package_name":"nbclassic","ecosystem":"pypi","requirements":"==0.4.8","direct":false,"kind":"runtime","optional":false},{"id":6731975755,"package_name":"nbclient","ecosystem":"pypi","requirements":"==0.7.0","direct":false,"kind":"runtime","optional":false},{"id":6731975756,"package_name":"nbconvert","ecosystem":"pypi","requirements":"==7.2.5","direct":false,"kind":"runtime","optional":false},{"id":6731975757,"package_name":"nbformat","ecosystem":"pypi","requirements":"==5.7.0","direct":false,"kind":"runtime","optional":false},{"id":6731975758,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"==1.5.6","direct":false,"kind":"runtime","optional":false},{"id":6731975759,"package_name":"nodeenv","ecosystem":"pypi","requirements":"==1.7.0","direct":false,"kind":"runtime","optional":false},{"id":6731975760,"package_name":"notebook","ecosystem":"pypi","requirements":"==6.5.2","direct":false,"kind":"runtime","optional":false},{"id":6731975761,"package_name":"notebook-shim","ecosystem":"pypi","requirements":"==0.2.2","direct":false,"kind":"runtime","optional":false},{"id":6731975762,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.23.5","direct":false,"kind":"runtime","optional":false},{"id":6731975763,"package_name":"packaging","ecosystem":"pypi","requirements":"==21.3","direct":false,"kind":"runtime","optional":false},{"id":6731975764,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.5.1","direct":false,"kind":"runtime","optional":false},{"id":6731975765,"package_name":"pandocfilters","ecosystem":"pypi","requirements":"==1.5.0","direct":false,"kind":"runtime","optional":false},{"id":6731975766,"package_name":"parso","ecosystem":"pypi","requirements":"==0.8.3","direct":false,"kind":"runtime","optional":false},{"id":6731975767,"package_name":"pathspec","ecosystem":"pypi","requirements":"==0.10.2","direct":false,"kind":"runtime","optional":false},{"id":6731975768,"package_name":"pexpect","ecosystem":"pypi","requirements":"==4.8.0","direct":false,"kind":"runtime","optional":false},{"id":6731975769,"package_name":"pickleshare","ecosystem":"pypi","requirements":"==0.7.5","direct":false,"kind":"runtime","optional":false},{"id":6731975770,"package_name":"platformdirs","ecosystem":"pypi","requirements":"==2.5.4","direct":false,"kind":"runtime","optional":false},{"id":6731975771,"package_name":"pluggy","ecosystem":"pypi","requirements":"==1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6731975772,"package_name":"pre-commit","ecosystem":"pypi","requirements":"==2.20.0","direct":false,"kind":"runtime","optional":false},{"id":6731975773,"package_name":"prometheus-client","ecosystem":"pypi","requirements":"==0.15.0","direct":false,"kind":"runtime","optional":false},{"id":6731975774,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"==3.0.32","direct":false,"kind":"runtime","optional":false},{"id":6731975775,"package_name":"protobuf","ecosystem":"pypi","requirements":"==4.21.9","direct":false,"kind":"runtime","optional":false},{"id":6731975776,"package_name":"psutil","ecosystem":"pypi","requirements":"==5.9.4","direct":false,"kind":"runtime","optional":false},{"id":6731975777,"package_name":"ptyprocess","ecosystem":"pypi","requirements":"==0.7.0","direct":false,"kind":"runtime","optional":false},{"id":6731975778,"package_name":"pure-eval","ecosystem":"pypi","requirements":"==0.2.2","direct":false,"kind":"runtime","optional":false},{"id":6731975779,"package_name":"pyasn1","ecosystem":"pypi","requirements":"==0.4.8","direct":false,"kind":"runtime","optional":false},{"id":6731975780,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"==0.2.8","direct":false,"kind":"runtime","optional":false},{"id":6731975781,"package_name":"pycparser","ecosystem":"pypi","requirements":"==2.21","direct":false,"kind":"runtime","optional":false},{"id":6731975782,"package_name":"pydantic","ecosystem":"pypi","requirements":"==1.10.2","direct":false,"kind":"runtime","optional":false},{"id":6731975783,"package_name":"pygeos","ecosystem":"pypi","requirements":"==0.12.0","direct":false,"kind":"runtime","optional":false},{"id":6731975784,"package_name":"pygments","ecosystem":"pypi","requirements":"==2.13.0","direct":false,"kind":"runtime","optional":false},{"id":6731975785,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.0.9","direct":false,"kind":"runtime","optional":false},{"id":6731975786,"package_name":"pyproj","ecosystem":"pypi","requirements":"==3.4.0","direct":false,"kind":"runtime","optional":false},{"id":6731975787,"package_name":"pyrsistent","ecosystem":"pypi","requirements":"==0.19.2","direct":false,"kind":"runtime","optional":false},{"id":6731975788,"package_name":"pytest","ecosystem":"pypi","requirements":"==7.2.0","direct":false,"kind":"runtime","optional":false},{"id":6731975789,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.2","direct":false,"kind":"runtime","optional":false},{"id":6731975790,"package_name":"pytz","ecosystem":"pypi","requirements":"==2022.6","direct":false,"kind":"runtime","optional":false},{"id":6731975791,"package_name":"pyyaml","ecosystem":"pypi","requirements":"==6.0","direct":false,"kind":"runtime","optional":false},{"id":6731975792,"package_name":"pyzmq","ecosystem":"pypi","requirements":"==24.0.1","direct":false,"kind":"runtime","optional":false},{"id":6731975793,"package_name":"rasterio","ecosystem":"pypi","requirements":"==1.3.4","direct":false,"kind":"runtime","optional":false},{"id":6731975794,"package_name":"rasterstats","ecosystem":"pypi","requirements":"==0.17.0","direct":false,"kind":"runtime","optional":false},{"id":6731975795,"package_name":"requests","ecosystem":"pypi","requirements":"==2.28.1","direct":false,"kind":"runtime","optional":false},{"id":6731975796,"package_name":"rsa","ecosystem":"pypi","requirements":"==4.9","direct":false,"kind":"runtime","optional":false},{"id":6731975797,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"==1.1.3","direct":false,"kind":"runtime","optional":false},{"id":6731975798,"package_name":"scipy","ecosystem":"pypi","requirements":"==1.9.3","direct":false,"kind":"runtime","optional":false},{"id":6731975799,"package_name":"send2trash","ecosystem":"pypi","requirements":"==1.8.0","direct":false,"kind":"runtime","optional":false},{"id":6731975800,"package_name":"shapely","ecosystem":"pypi","requirements":"==1.8.5.post1","direct":false,"kind":"runtime","optional":false},{"id":6731975801,"package_name":"simplejson","ecosystem":"pypi","requirements":"==3.18.0","direct":false,"kind":"runtime","optional":false},{"id":6731975802,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":false,"kind":"runtime","optional":false},{"id":6731975803,"package_name":"sniffio","ecosystem":"pypi","requirements":"==1.3.0","direct":false,"kind":"runtime","optional":false},{"id":6731975804,"package_name":"snuggs","ecosystem":"pypi","requirements":"==1.4.7","direct":false,"kind":"runtime","optional":false},{"id":6731975805,"package_name":"soupsieve","ecosystem":"pypi","requirements":"==2.3.2.post1","direct":false,"kind":"runtime","optional":false},{"id":6731975806,"package_name":"stack-data","ecosystem":"pypi","requirements":"==0.6.1","direct":false,"kind":"runtime","optional":false},{"id":6731975807,"package_name":"terminado","ecosystem":"pypi","requirements":"==0.17.0","direct":false,"kind":"runtime","optional":false},{"id":6731975808,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"==3.1.0","direct":false,"kind":"runtime","optional":false},{"id":6731975809,"package_name":"tinycss2","ecosystem":"pypi","requirements":"==1.2.1","direct":false,"kind":"runtime","optional":false},{"id":6731975810,"package_name":"toml","ecosystem":"pypi","requirements":"==0.10.2","direct":false,"kind":"runtime","optional":false},{"id":6731975811,"package_name":"tomli","ecosystem":"pypi","requirements":"==2.0.1","direct":false,"kind":"runtime","optional":false},{"id":6731975812,"package_name":"tornado","ecosystem":"pypi","requirements":"==6.2","direct":false,"kind":"runtime","optional":false},{"id":6731975813,"package_name":"traitlets","ecosystem":"pypi","requirements":"==5.5.0","direct":false,"kind":"runtime","optional":false},{"id":6731975814,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"==4.4.0","direct":false,"kind":"runtime","optional":false},{"id":6731975815,"package_name":"uritemplate","ecosystem":"pypi","requirements":"==4.1.1","direct":false,"kind":"runtime","optional":false},{"id":6731975816,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.12","direct":false,"kind":"runtime","optional":false},{"id":6731975817,"package_name":"virtualenv","ecosystem":"pypi","requirements":"==20.16.7","direct":false,"kind":"runtime","optional":false},{"id":6731975818,"package_name":"wcwidth","ecosystem":"pypi","requirements":"==0.2.5","direct":false,"kind":"runtime","optional":false},{"id":6731975819,"package_name":"webencodings","ecosystem":"pypi","requirements":"==0.5.1","direct":false,"kind":"runtime","optional":false},{"id":6731975820,"package_name":"websocket-client","ecosystem":"pypi","requirements":"==1.4.2","direct":false,"kind":"runtime","optional":false},{"id":6731975821,"package_name":"zipp","ecosystem":"pypi","requirements":"==3.10.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-12-31T00:13:13.989Z","updated_at":"2023-12-31T00:13:13.989Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/Dockerfile","dependencies":[{"id":15357032531,"package_name":"python","ecosystem":"docker","requirements":"3.9.16","direct":true,"kind":"build","optional":false}]},{"ecosystem":"pypi","filepath":"environment.yml","sha":null,"kind":"manifest","created_at":"2023-12-31T00:13:14.361Z","updated_at":"2023-12-31T00:13:14.361Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/environment.yml","dependencies":[]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-12-31T00:13:14.707Z","updated_at":"2023-12-31T00:13:14.707Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/pyproject.toml","dependencies":[]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-12-31T00:13:14.730Z","updated_at":"2023-12-31T00:13:14.730Z","repository_link":"https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/blob/main/setup.py","dependencies":[]}],"score":5.817111159963204,"created_at":"2023-12-31T00:04:46.029Z","updated_at":"2026-04-22T22:02:48.621Z","avatar_url":"https://github.com/thinkingmachines.png","language":"Jupyter Notebook","category":"Sustainable Development","sub_category":"Population and Poverty","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"\u003cdiv align=\"center\"\u003e\n\n# UNICEF AI4D Relative Wealth Project\n\n\u003c/div\u003e\n\n\u003ca href=\"https://www.python.org/\"\u003e\u003cimg alt=\"Python\" src=\"https://img.shields.io/badge/-Python 3.9-blue?style=for-the-badge\u0026logo=python\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003ca href=\"https://black.readthedocs.io/en/stable/\"\u003e\u003cimg alt=\"Code style: black\" src=\"https://img.shields.io/badge/code%20style-black-black.svg?style=for-the-badge\u0026labelColor=gray\"\u003e\u003c/a\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\n# 📜 Description\n\nThe UNICEF AI4D Relative Wealth Project aims to develop open datasets and machine learning (ML) models for poverty mapping estimation across nine countries in Southeast Asia (SEA).\n\nWe also aim to open source all the scripts, experiments and other artifacts used for developing these datasets and models in order to allow others to replicate our work as well as to collaborate and extend our work for their own use cases.\n\nThis project is part of [Thinking Machines's overall push for open science through the AI4D (AI for Development) Research Bank](https://stories.thinkingmachin.es/unicef-ai4d-research-bank/) which aims to accelerate the development and adoption of effective machine learning (ML) models for \ndevelopment across Southeast Asia.\n\nDocumentation geared towards our methodology and experiments can be found [here](https://thinkingmachines.github.io/unicef-ai4d-poverty-mapping).\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n# 💻 Replicating model training and rollout for a country\n\nOur final trained models and their use to produce nationwide estimates can replicated through our notebooks, assuming you've followed the `Data` and `Local Development` setup below.\n\n\n* For countries with available DHS training data (Cambodia, Myanmar, Philippines, and Timor-Leste), please refer to the notebooks here:  https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/tree/main/notebooks/2023-02-21-single-country-rollouts\n\n* For the other countries without DHS training data (Indonesia, Laos, Malaysia, Thailand, and Vietnam), please refer to the notebooks here: https://github.com/thinkingmachines/unicef-ai4d-poverty-mapping/tree/main/notebooks/2023-02-21-cross-country-rollouts\n\n\nAll the output files (models, datasets, intermediate files) can all be downloaded from [here](https://drive.google.com/drive/u/0/folders/1QX0xJc6MHxY7dzIsVMDm5TH0F-NwXhBW). \n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n# 📚 Data Setup\n\n## DHS Data\n\nDue to the sensitive nature of the data and the DHS program terms of use, we cannot provide the raw DHS data used in our experiments. \n\nYou will have to request for access to raw data yourself on the [DHS website](https://dhsprogram.com/data/new-user-registration.cfm). \n\nGenerally, for all the experiment notebooks in this repo, they assume that the **DHS Stata and Shape** zip files contents are unzipped to its own folder under `data/dhs/\u003ciso-country-code\u003e/` where the `\u003ciso-country-code\u003e` is the two-letter ISO country code.\n\nFor example, from the data for the Philippines will have this directory structure:\n```\ndata/\n    dhs/\n        ph/\n            PHGE81FL/\n                DHS_README.txt\n                GPS_Displacement_README.txt\n                PHGE81FL.cpg\n                PHGE81FL.dbf\n                PHGE81FL.prj\n                PHGE81FL.sbn\n                PHGE81FL.sbx\n                PHGE81FL.shp\n                PHGE81FL.shp.xml\n                PHGE81FL.shx\n            PHHR82DT/\n                PHHR82FL.DCT\n                PHHR82FL.DO\n                PHHR82FL.DTA\n                PHHR82FL.FRQ\n                PHHR82FL.FRW\n                PHHR82FL.MAP\n```\n\n*If you create your own notebook, of course you are free to modify these conventions for filepaths yourself. But out-of-the-box, this is what our notebooks assume.*\n\u003cbr/\u003e\n\u003cbr/\u003e\n## Night Lights from EOG\n\nThe only other data access requirement is for the EOG Nightlights Data which requires [registering for an account](https://eogdata.mines.edu/products/register). The notebooks require the use of these credentials (user name and password) to download the nightlights data automatically.\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n## General Dataset Notes\nAll the other datasets used in this project are publically available and the notebooks provide the code necessary to automatically download and cache the data.\n\nDue to the size of the datasets, please make sure you have enough disk space (minimum 40GB-50GB) to accommodate all the data used in building the models.\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n# ⚙️ Local Setup for Development\n\nThis repo assumes the use of miniconda for simplicity in installing GDAL.\n\n\n## Requirements\n\n1. Python 3.9\n2. make\n3. miniconda\n\n\n## 🐍 One-time Set-up\nRun this the very first time you are setting-up the project on a machine to set-up a local Python environment for this project.\n\n1. Install [miniconda](https://docs.conda.io/en/latest/miniconda.html) for your environment if you don't have it yet.\n```bash\nwget \"https://repo.anaconda.com/miniconda/Miniconda3-latest-$(uname)-$(uname -m).sh\"\nbash Miniconda3-latest-$(uname)-$(uname -m).sh\n```\n\n2. Create a local conda env and activate it. This will create a conda env folder in your project directory.\n```\nmake conda-env\nconda activate ./env\n```\n\n3. Run the one-time set-up make command.\n```\nmake setup\n```\n\n4. To test if the setup was successful, run the tests. You should get a message that all the tests passed.\n```\nmake test\n```\n\nAt this point, you should be ready to run all the existing notebooks on your local.\n\n\n## 📦 Dependencies\n\nOver the course of development, you will likely introduce new library dependencies. This repo uses [pip-tools](https://github.com/jazzband/pip-tools) to manage the python dependencies.\n\nThere are two main files involved:\n* `requirements.in` - contains high level requirements; this is what we should edit when adding/removing libraries\n* `requirements.txt` - contains exact list of python libraries (including depdenencies of the main libraries) your environment needs to follow to run the repo code; compiled from `requirements.in`\n\n\nWhen you add new python libs, please do the ff:\n\n1. Add the library to the `requirements.in` file. You may optionally pin the version if you need a particular version of the library.\n\n2. Run `make requirements` to compile a new version of the `requirements.txt` file and update your python env.\n\n3. Commit both the `requirements.in` and `requirements.txt` files so other devs can get the updated list of project requirements.\n\n\u003e Note: When you are the one updating your python env to follow library changes from other devs (reflected through an updated `requirements.txt` file), simply run `pip-sync requirements.txt`\n\n\n## 📜Documentation \n\nWe are using [Quarto](https://quarto.org/) to maintain the Unicef AI4D Relative Wealth [documentation site.](https://thinkingmachines.github.io/unicef-ai4d-poverty-mapping/) \n\nHere are some quick tips to running quarto/updating the doc site, assuming you're on Linux.\n\nFor other platforms, please refer to [Quarto's website](https://quarto.org/docs/get-started/).\n\n\n* Download: \n```\nwget https://github.com/quarto-dev/quarto-cli/releases/download/v1.2.247/quarto-1.2.247-linux-amd64.deb\n```\n\n* Install:\n```\nsudo dpkg -i quarto-1.2.247-linux-amd64.deb\n```\n\n* Preview the site locally (view in [http://localhost:4444](http://localhost:4444)) :\n```\nquarto preview --port 4444 --no-browser\n```\n\n* Update the site (must have maintainer role):\n```\nquarto publish gh-pages --no-browser\n```\n* **Pro-tip** : If you are using VS Code as your code editor, install the [Quarto extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) to make editing/previewing the doc site a lot smoother.\n\n\n## ☸️Running in Docker \n\nWe have created a [docker image](https://github.com/butchtm/unicef-ai4d-poverty-mapping/pkgs/container/povmap-jupyter) (`ghcr.io/butchtm/povmap-jupyter`) of the poverty mapping repo for those who want to view the notebooks or rollout the models for new countries and new data (e.g. new nightlights and ookla years)\n\nTo run these docker images please copy and paste the following scripts to run on your linux, mac or windows (wsl) terminals:\n\n* **View Jupyter notebooks (Read-only)** This will run a jupyter notebook environment containing the poverty mapping notebooks at http://localhost:8888/lab/tree/notebooks\n\n```bash\ncurl -s https://raw.githubusercontent.com/thinkingmachines/unicef-ai4d-poverty-mapping/main/localscripts/run-povmap-jupyter-notebook.sh \u003e run-povmap-jupyter-notebook.sh \u0026\u0026 \\\nchmod +x run-povmap-jupyter-notebook.sh \u0026\u0026 \\\n./run-povmap-jupyter-notebook.sh\n```\n* **Country-wide rollout** This will run an interactive dialog that will rollout the poverty mapping models for different countries\nand different time periods\n\n```bash\ncurl -s https://raw.githubusercontent.com/thinkingmachines/unicef-ai4d-poverty-mapping/main/localscripts/run-povmap-rollout.sh \u003e run-povmap-rollout.sh \u0026\u0026 \\\nchmod +x run-povmap-rollout.sh \u0026\u0026 \\\n./run-povmap-rollout.sh\n```\n\n* **Copy rollout to local directory** This will copy the contents of the rollout notebooks and rollout data into your current directory (after running a new rollout) to `rollout-data` and `rollout-output-notebooks`\n\n```bash\ncurl -s https://raw.githubusercontent.com/thinkingmachines/unicef-ai4d-poverty-mapping/main/localscripts/copy-rollout-to-local.sh \u003e copy-rollout-to-local.sh \u0026\u0026 \\\nchmod +x copy-rollout-to-local.sh \u0026\u0026 \\\n./copy-rollout-to-local.sh\n```\n\n\u003e Note: These commands assume that `curl` is installed and will download the scripts, change their permissions to executable as well as run them. After the initial download, you can just rerun the scripts which would would have been downloaded to your current directory.\n\n\u003e Note: The scripts create and use a docker volume named `povmap-data` which contains the outputs as well as caches the data used for generating the features from public datasets\n\n\u003e Note: Rolling out the notebooks requires downloading EOG nightlights data so a user id and password are required as detailed in the previous section above.\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["geopandas"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/162818","html_url":"https://ost.ecosyste.ms/projects/162818"}