{"id":319006,"name":"ccvi-data","description":"Establish a scientifically informed tool that enables policymakers and researchers to assess and map current global risks to human security arising from climate and conflict hazards, their intersections and the potential for harmful interactions.","url":"https://github.com/ccew-unibw/ccvi-data","last_synced_at":"2026-06-14T11:30:28.171Z","repository":{"id":295588074,"uuid":"988912138","full_name":"ccew-unibw/ccvi-data","owner":"ccew-unibw","description":"Data Generation for the Climate-Conflict-Vulnerability Index (CCVI)","archived":false,"fork":false,"pushed_at":"2026-05-20T16:12:52.000Z","size":49693,"stargazers_count":20,"open_issues_count":4,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-06-01T05:05:06.030Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://climate-conflict.org","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ccew-unibw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T09:08:30.000Z","updated_at":"2026-05-20T16:13:44.000Z","dependencies_parsed_at":"2025-06-27T03:38:14.792Z","dependency_job_id":"e18d0849-7708-4a9e-a55c-e1d68621b532","html_url":"https://github.com/ccew-unibw/ccvi-data","commit_stats":null,"previous_names":["ccew-unibw/ccvi-data"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ccew-unibw/ccvi-data","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ccew-unibw","download_url":"https://codeload.github.com/ccew-unibw/ccvi-data/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34098952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"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":"ccew-unibw","name":"Center for Crisis Early Warning","uuid":"212884315","kind":"organization","description":"Projects developed at the Center for Crisis Early Warning @ UniBw M","email":"kompzkfe@unibw.de","website":"https://www.unibw.de/ciss-en/ccew","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/212884315?v=4","repositories_count":1,"last_synced_at":"2025-05-23T11:07:46.104Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ccew-unibw","funding_links":[],"total_stars":0,"followers":0,"following":0,"created_at":"2025-05-23T11:07:46.127Z","updated_at":"2025-05-23T11:07:46.127Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ccew-unibw","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ccew-unibw/repositories"},"packages":[],"commits":{"id":10401692,"full_name":"ccew-unibw/ccvi-data","default_branch":"main","total_commits":190,"total_committers":4,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":47.5,"dds":0.07894736842105265,"past_year_total_commits":190,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":47.5,"past_year_dds":0.07894736842105265,"last_synced_at":"2026-05-16T23:16:22.056Z","last_synced_commit":"8e8d8078007f1329ac60b80158b2f5fe4fa63647","created_at":"2025-06-20T00:20:58.548Z","updated_at":"2026-05-16T23:16:22.026Z","committers":[{"name":"DaMitti","email":"da.mitti@posteo.de","login":"DaMitti","count":175},{"name":"stefanosedano","email":"email4stefanoferri@gmail.com","login":"stefanosedano","count":10},{"name":"Moritz Stefaner","email":"moritz@stefaner.eu","login":"MoritzStefaner","count":3},{"name":"Daniel Mittermaier","email":"daniel.mittermaier@unibw.de","login":"MittermaierUniBW","count":2}],"past_year_committers":[{"name":"DaMitti","email":"da.mitti@posteo.de","login":"DaMitti","count":175},{"name":"stefanosedano","email":"email4stefanoferri@gmail.com","login":"stefanosedano","count":10},{"name":"Moritz Stefaner","email":"moritz@stefaner.eu","login":"MoritzStefaner","count":3},{"name":"Daniel Mittermaier","email":"daniel.mittermaier@unibw.de","login":"MittermaierUniBW","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-05T00:00:10.712Z","repositories_count":6253761,"commits_count":883875400,"contributors_count":35040679,"owners_count":1162861,"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":"ccew-unibw/ccvi-data","html_url":"https://github.com/ccew-unibw/ccvi-data","last_synced_at":"2026-05-17T22:02:32.804Z","status":"error","issues_count":12,"pull_requests_count":40,"avg_time_to_close_issue":6374638.5,"avg_time_to_close_pull_request":694955.2121212122,"issues_closed_count":8,"pull_requests_closed_count":33,"pull_request_authors_count":4,"issue_authors_count":1,"avg_comments_per_issue":0.5833333333333334,"avg_comments_per_pull_request":0.525,"merged_pull_requests_count":32,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":12,"past_year_pull_requests_count":40,"past_year_avg_time_to_close_issue":6374638.5,"past_year_avg_time_to_close_pull_request":694955.2121212122,"past_year_issues_closed_count":8,"past_year_pull_requests_closed_count":33,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.5833333333333334,"past_year_avg_comments_per_pull_request":0.525,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":32,"created_at":"2025-06-20T00:20:59.759Z","updated_at":"2026-05-17T22:02:32.804Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ccew-unibw%2Fccvi-data/issues","issue_labels_count":{"data update":4,"bug":4,"enhancement":3,"nice to have":3,"question":1},"pull_request_labels_count":{},"issue_author_associations_count":{"COLLABORATOR":12},"pull_request_author_associations_count":{"COLLABORATOR":37,"CONTRIBUTOR":3},"issue_authors":{"DaMitti":12},"pull_request_authors":{"DaMitti":24,"stefanosedano":11,"MittermaierUniBW":3,"MoritzStefaner":2},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-05T00:00:10.689Z","repositories_count":14756072,"issues_count":33367737,"pull_requests_count":110001149,"authors_count":11292696,"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":{"bug":4,"data update":4,"enhancement":2,"nice to have":2,"question":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"COLLABORATOR":10},"past_year_pull_request_author_associations_count":{"COLLABORATOR":34,"CONTRIBUTOR":3},"past_year_issue_authors":{"DaMitti":10},"past_year_pull_request_authors":{"DaMitti":23,"stefanosedano":11,"MittermaierUniBW":3},"maintainers":[{"login":"DaMitti","count":36,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DaMitti"},{"login":"stefanosedano","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/stefanosedano"},{"login":"MoritzStefaner","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MoritzStefaner"}],"active_maintainers":[{"login":"DaMitti","count":33,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/DaMitti"},{"login":"stefanosedano","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/stefanosedano"}]},"events":{"total":{"DeleteEvent":13,"PullRequestEvent":20,"ForkEvent":2,"IssuesEvent":7,"WatchEvent":10,"IssueCommentEvent":5,"PublicEvent":1,"PushEvent":58,"PullRequestReviewCommentEvent":1,"PullRequestReviewEvent":10,"CreateEvent":15},"last_year":{"DeleteEvent":13,"PullRequestEvent":18,"ForkEvent":2,"IssuesEvent":6,"WatchEvent":7,"IssueCommentEvent":5,"PushEvent":54,"PullRequestReviewCommentEvent":1,"PullRequestReviewEvent":10,"CreateEvent":13}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2025-05-26T11:22:15.353Z","updated_at":"2025-05-26T11:22:15.353Z","repository_link":"https://github.com/ccew-unibw/ccvi-data/blob/main/pyproject.toml","dependencies":[{"id":23308856079,"package_name":"cartopy","ecosystem":"pypi","requirements":"\u003e=0.24.1","direct":true,"kind":"runtime","optional":false},{"id":23308856080,"package_name":"cdsapi","ecosystem":"pypi","requirements":"\u003e=0.7.6","direct":true,"kind":"runtime","optional":false},{"id":23308856081,"package_name":"clean-text","ecosystem":"pypi","requirements":"\u003e=0.6.0","direct":true,"kind":"runtime","optional":false},{"id":23308856241,"package_name":"concentrationmetrics","ecosystem":"pypi","requirements":"\u003e=0.6.0","direct":true,"kind":"runtime","optional":false},{"id":23308856409,"package_name":"country-converter","ecosystem":"pypi","requirements":"\u003e=1.3","direct":true,"kind":"runtime","optional":false},{"id":23308856659,"package_name":"dask","ecosystem":"pypi","requirements":"\u003e=2025.5.0","direct":true,"kind":"runtime","optional":false},{"id":23308856662,"package_name":"dotenv","ecosystem":"pypi","requirements":"\u003e=0.9.9","direct":true,"kind":"runtime","optional":false},{"id":23308856664,"package_name":"duckdb","ecosystem":"pypi","requirements":"\u003e=1.2.2","direct":true,"kind":"runtime","optional":false},{"id":23308856667,"package_name":"earthengine-api","ecosystem":"pypi","requirements":"\u003e=1.5.15","direct":true,"kind":"runtime","optional":false},{"id":23308856669,"package_name":"geopandas","ecosystem":"pypi","requirements":"\u003e=1.0.1","direct":true,"kind":"runtime","optional":false},{"id":23308856671,"package_name":"h5netcdf","ecosystem":"pypi","requirements":"\u003e=1.6.1","direct":true,"kind":"runtime","optional":false},{"id":23308856674,"package_name":"joblib","ecosystem":"pypi","requirements":"\u003e=1.4.2","direct":true,"kind":"runtime","optional":false},{"id":23308856677,"package_name":"jupyter","ecosystem":"pypi","requirements":"\u003e=1.1.1","direct":true,"kind":"runtime","optional":false},{"id":23308856680,"package_name":"netcdf4","ecosystem":"pypi","requirements":"\u003e=1.7.2","direct":true,"kind":"runtime","optional":false},{"id":23308856683,"package_name":"numpy","ecosystem":"pypi","requirements":"\u003e=2.2.4","direct":true,"kind":"runtime","optional":false},{"id":23308856685,"package_name":"openpyxl","ecosystem":"pypi","requirements":"\u003e=3.1.5","direct":true,"kind":"runtime","optional":false},{"id":23308856688,"package_name":"pandas","ecosystem":"pypi","requirements":"\u003e=2.2.3","direct":true,"kind":"runtime","optional":false},{"id":23308856691,"package_name":"panel-imputer","ecosystem":"pypi","requirements":"\u003e=0.7.0","direct":true,"kind":"runtime","optional":false},{"id":23308857023,"package_name":"pendulum","ecosystem":"pypi","requirements":"\u003e=3.0.0","direct":true,"kind":"runtime","optional":false},{"id":23308857024,"package_name":"pyarrow","ecosystem":"pypi","requirements":"\u003e=19.0.1","direct":true,"kind":"runtime","optional":false},{"id":23308857025,"package_name":"pyeto","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":23308857867,"package_name":"pyproj","ecosystem":"pypi","requirements":"\u003e=3.7.1","direct":true,"kind":"runtime","optional":false},{"id":23308857868,"package_name":"pyreadr","ecosystem":"pypi","requirements":"\u003e=0.5.3","direct":true,"kind":"runtime","optional":false},{"id":23308858747,"package_name":"python-dotenv","ecosystem":"pypi","requirements":"\u003e=1.1.0","direct":true,"kind":"runtime","optional":false},{"id":23308858748,"package_name":"pyyaml","ecosystem":"pypi","requirements":"\u003e=6.0.2","direct":true,"kind":"runtime","optional":false},{"id":23308858749,"package_name":"rich","ecosystem":"pypi","requirements":"\u003e=14.0.0","direct":true,"kind":"runtime","optional":false},{"id":23308858750,"package_name":"rioxarray","ecosystem":"pypi","requirements":"\u003e=0.19.0","direct":true,"kind":"runtime","optional":false},{"id":23308861342,"package_name":"rpy2","ecosystem":"pypi","requirements":"==3.5.9","direct":true,"kind":"runtime","optional":false},{"id":23308861343,"package_name":"schedule","ecosystem":"pypi","requirements":"\u003e=1.2.2","direct":true,"kind":"runtime","optional":false},{"id":23308861344,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"\u003e=1.6.1","direct":true,"kind":"runtime","optional":false},{"id":23308861345,"package_name":"scipy","ecosystem":"pypi","requirements":"\u003e=1.15.2","direct":true,"kind":"runtime","optional":false},{"id":23308861346,"package_name":"shapely","ecosystem":"pypi","requirements":"\u003e=2.1.0","direct":true,"kind":"runtime","optional":false},{"id":23308861347,"package_name":"swifter","ecosystem":"pypi","requirements":"\u003e=1.4.0","direct":true,"kind":"runtime","optional":false},{"id":23308862490,"package_name":"tqdm","ecosystem":"pypi","requirements":"\u003e=4.67.1","direct":true,"kind":"runtime","optional":false},{"id":23308862491,"package_name":"tropycal","ecosystem":"pypi","requirements":"\u003e=1.3","direct":true,"kind":"runtime","optional":false},{"id":23308862942,"package_name":"typer","ecosystem":"pypi","requirements":"\u003e=0.15.4","direct":true,"kind":"runtime","optional":false},{"id":23308862943,"package_name":"wbgapi","ecosystem":"pypi","requirements":"\u003e=1.0.12","direct":true,"kind":"runtime","optional":false},{"id":23308864451,"package_name":"xarray","ecosystem":"pypi","requirements":"\u003e=2025.3.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"uv.lock","sha":null,"kind":"lockfile","created_at":"2025-05-26T11:22:26.690Z","updated_at":"2025-05-26T11:22:26.690Z","repository_link":"https://github.com/ccew-unibw/ccvi-data/blob/main/uv.lock","dependencies":[{"id":23308864498,"package_name":"affine","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":23308864499,"package_name":"anyio","ecosystem":"pypi","requirements":"4.9.0","direct":false,"kind":"runtime","optional":false},{"id":23308864500,"package_name":"appnope","ecosystem":"pypi","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":23308864501,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"23.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308864502,"package_name":"argon2-cffi-bindings","ecosystem":"pypi","requirements":"21.2.0","direct":false,"kind":"runtime","optional":false},{"id":23308864503,"package_name":"arrow","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":23308864504,"package_name":"asttokens","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308864505,"package_name":"async-lru","ecosystem":"pypi","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":23308864506,"package_name":"attrs","ecosystem":"pypi","requirements":"25.3.0","direct":false,"kind":"runtime","optional":false},{"id":23308864507,"package_name":"babel","ecosystem":"pypi","requirements":"2.17.0","direct":false,"kind":"runtime","optional":false},{"id":23308864508,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.13.4","direct":false,"kind":"runtime","optional":false},{"id":23308864509,"package_name":"bleach","ecosystem":"pypi","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":23308864510,"package_name":"cachetools","ecosystem":"pypi","requirements":"5.5.2","direct":false,"kind":"runtime","optional":false},{"id":23308864511,"package_name":"cartopy","ecosystem":"pypi","requirements":"0.24.1","direct":false,"kind":"runtime","optional":false},{"id":23308864512,"package_name":"ccvi-data","ecosystem":"pypi","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308865740,"package_name":"cdsapi","ecosystem":"pypi","requirements":"0.7.6","direct":false,"kind":"runtime","optional":false},{"id":23308865741,"package_name":"certifi","ecosystem":"pypi","requirements":"2025.1.31","direct":false,"kind":"runtime","optional":false},{"id":23308865742,"package_name":"cffi","ecosystem":"pypi","requirements":"1.17.1","direct":false,"kind":"runtime","optional":false},{"id":23308865743,"package_name":"cftime","ecosystem":"pypi","requirements":"1.6.4.post1","direct":false,"kind":"runtime","optional":false},{"id":23308865744,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":23308865745,"package_name":"clean-text","ecosystem":"pypi","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":23308865746,"package_name":"click","ecosystem":"pypi","requirements":"8.1.8","direct":false,"kind":"runtime","optional":false},{"id":23308865747,"package_name":"click-plugins","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308865748,"package_name":"cligj","ecosystem":"pypi","requirements":"0.7.2","direct":false,"kind":"runtime","optional":false},{"id":23308865749,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308865750,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":23308865751,"package_name":"comm","ecosystem":"pypi","requirements":"0.2.2","direct":false,"kind":"runtime","optional":false},{"id":23308865752,"package_name":"concentrationmetrics","ecosystem":"pypi","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":23308865753,"package_name":"contourpy","ecosystem":"pypi","requirements":"1.3.2","direct":false,"kind":"runtime","optional":false},{"id":23308865754,"package_name":"country-converter","ecosystem":"pypi","requirements":"1.3","direct":false,"kind":"runtime","optional":false},{"id":23308865755,"package_name":"cycler","ecosystem":"pypi","requirements":"0.12.1","direct":false,"kind":"runtime","optional":false},{"id":23308865756,"package_name":"dask","ecosystem":"pypi","requirements":"2025.5.0","direct":false,"kind":"runtime","optional":false},{"id":23308865757,"package_name":"debugpy","ecosystem":"pypi","requirements":"1.8.14","direct":false,"kind":"runtime","optional":false},{"id":23308865758,"package_name":"decorator","ecosystem":"pypi","requirements":"5.2.1","direct":false,"kind":"runtime","optional":false},{"id":23308865759,"package_name":"defusedxml","ecosystem":"pypi","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":23308865760,"package_name":"dotenv","ecosystem":"pypi","requirements":"0.9.9","direct":false,"kind":"runtime","optional":false},{"id":23308865761,"package_name":"duckdb","ecosystem":"pypi","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":23308865762,"package_name":"earthengine-api","ecosystem":"pypi","requirements":"1.5.15","direct":false,"kind":"runtime","optional":false},{"id":23308865763,"package_name":"ecmwf-datastores-client","ecosystem":"pypi","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869385,"package_name":"emoji","ecosystem":"pypi","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":23308869390,"package_name":"et-xmlfile","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869395,"package_name":"executing","ecosystem":"pypi","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":23308869398,"package_name":"fastjsonschema","ecosystem":"pypi","requirements":"2.21.1","direct":false,"kind":"runtime","optional":false},{"id":23308869401,"package_name":"fonttools","ecosystem":"pypi","requirements":"4.58.0","direct":false,"kind":"runtime","optional":false},{"id":23308869405,"package_name":"fqdn","ecosystem":"pypi","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":23308869408,"package_name":"fsspec","ecosystem":"pypi","requirements":"2025.3.2","direct":false,"kind":"runtime","optional":false},{"id":23308869412,"package_name":"ftfy","ecosystem":"pypi","requirements":"6.3.1","direct":false,"kind":"runtime","optional":false},{"id":23308869415,"package_name":"geopandas","ecosystem":"pypi","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":23308869419,"package_name":"google-api-core","ecosystem":"pypi","requirements":"2.24.2","direct":false,"kind":"runtime","optional":false},{"id":23308869424,"package_name":"google-api-python-client","ecosystem":"pypi","requirements":"2.169.0","direct":false,"kind":"runtime","optional":false},{"id":23308869427,"package_name":"google-auth","ecosystem":"pypi","requirements":"2.40.1","direct":false,"kind":"runtime","optional":false},{"id":23308869430,"package_name":"google-auth-httplib2","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":23308869434,"package_name":"google-cloud-core","ecosystem":"pypi","requirements":"2.4.3","direct":false,"kind":"runtime","optional":false},{"id":23308869438,"package_name":"google-cloud-storage","ecosystem":"pypi","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869442,"package_name":"google-crc32c","ecosystem":"pypi","requirements":"1.7.1","direct":false,"kind":"runtime","optional":false},{"id":23308869447,"package_name":"google-resumable-media","ecosystem":"pypi","requirements":"2.7.2","direct":false,"kind":"runtime","optional":false},{"id":23308869450,"package_name":"googleapis-common-protos","ecosystem":"pypi","requirements":"1.70.0","direct":false,"kind":"runtime","optional":false},{"id":23308869453,"package_name":"h11","ecosystem":"pypi","requirements":"0.16.0","direct":false,"kind":"runtime","optional":false},{"id":23308869456,"package_name":"h5netcdf","ecosystem":"pypi","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":23308869460,"package_name":"h5py","ecosystem":"pypi","requirements":"3.13.0","direct":false,"kind":"runtime","optional":false},{"id":23308869464,"package_name":"httpcore","ecosystem":"pypi","requirements":"1.0.9","direct":false,"kind":"runtime","optional":false},{"id":23308869468,"package_name":"httplib2","ecosystem":"pypi","requirements":"0.22.0","direct":false,"kind":"runtime","optional":false},{"id":23308869471,"package_name":"httpx","ecosystem":"pypi","requirements":"0.28.1","direct":false,"kind":"runtime","optional":false},{"id":23308869473,"package_name":"idna","ecosystem":"pypi","requirements":"3.10","direct":false,"kind":"runtime","optional":false},{"id":23308869476,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869478,"package_name":"ipykernel","ecosystem":"pypi","requirements":"6.29.5","direct":false,"kind":"runtime","optional":false},{"id":23308869481,"package_name":"ipython","ecosystem":"pypi","requirements":"9.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869484,"package_name":"ipython-pygments-lexers","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308869487,"package_name":"ipywidgets","ecosystem":"pypi","requirements":"8.1.6","direct":false,"kind":"runtime","optional":false},{"id":23308869491,"package_name":"isoduration","ecosystem":"pypi","requirements":"20.11.0","direct":false,"kind":"runtime","optional":false},{"id":23308869495,"package_name":"jedi","ecosystem":"pypi","requirements":"0.19.2","direct":false,"kind":"runtime","optional":false},{"id":23308869498,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"runtime","optional":false},{"id":23308869502,"package_name":"joblib","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":23308869505,"package_name":"json5","ecosystem":"pypi","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":23308869509,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869513,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.23.0","direct":false,"kind":"runtime","optional":false},{"id":23308869516,"package_name":"jsonschema-specifications","ecosystem":"pypi","requirements":"2025.4.1","direct":false,"kind":"runtime","optional":false},{"id":23308869519,"package_name":"jupyter","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308869522,"package_name":"jupyter-client","ecosystem":"pypi","requirements":"8.6.3","direct":false,"kind":"runtime","optional":false},{"id":23308869526,"package_name":"jupyter-console","ecosystem":"pypi","requirements":"6.6.3","direct":false,"kind":"runtime","optional":false},{"id":23308869529,"package_name":"jupyter-core","ecosystem":"pypi","requirements":"5.7.2","direct":false,"kind":"runtime","optional":false},{"id":23308869533,"package_name":"jupyter-events","ecosystem":"pypi","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":23308869535,"package_name":"jupyter-lsp","ecosystem":"pypi","requirements":"2.2.5","direct":false,"kind":"runtime","optional":false},{"id":23308869538,"package_name":"jupyter-server","ecosystem":"pypi","requirements":"2.15.0","direct":false,"kind":"runtime","optional":false},{"id":23308869541,"package_name":"jupyter-server-terminals","ecosystem":"pypi","requirements":"0.5.3","direct":false,"kind":"runtime","optional":false},{"id":23308869546,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"4.4.1","direct":false,"kind":"runtime","optional":false},{"id":23308869550,"package_name":"jupyterlab-pygments","ecosystem":"pypi","requirements":"0.3.0","direct":false,"kind":"runtime","optional":false},{"id":23308869554,"package_name":"jupyterlab-server","ecosystem":"pypi","requirements":"2.27.3","direct":false,"kind":"runtime","optional":false},{"id":23308869558,"package_name":"jupyterlab-widgets","ecosystem":"pypi","requirements":"3.0.14","direct":false,"kind":"runtime","optional":false},{"id":23308869563,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"1.4.8","direct":false,"kind":"runtime","optional":false},{"id":23308869566,"package_name":"locket","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869570,"package_name":"markdown-it-py","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869574,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.2","direct":false,"kind":"runtime","optional":false},{"id":23308869578,"package_name":"matplotlib","ecosystem":"pypi","requirements":"3.10.3","direct":false,"kind":"runtime","optional":false},{"id":23308869581,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"0.1.7","direct":false,"kind":"runtime","optional":false},{"id":23308869585,"package_name":"mdurl","ecosystem":"pypi","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":23308869589,"package_name":"mistune","ecosystem":"pypi","requirements":"3.1.3","direct":false,"kind":"runtime","optional":false},{"id":23308869592,"package_name":"multiurl","ecosystem":"pypi","requirements":"0.3.5","direct":false,"kind":"runtime","optional":false},{"id":23308869597,"package_name":"nbclient","ecosystem":"pypi","requirements":"0.10.2","direct":false,"kind":"runtime","optional":false},{"id":23308869599,"package_name":"nbconvert","ecosystem":"pypi","requirements":"7.16.6","direct":false,"kind":"runtime","optional":false},{"id":23308869602,"package_name":"nbformat","ecosystem":"pypi","requirements":"5.10.4","direct":false,"kind":"runtime","optional":false},{"id":23308869605,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":23308869609,"package_name":"netcdf4","ecosystem":"pypi","requirements":"1.7.2","direct":false,"kind":"runtime","optional":false},{"id":23308869613,"package_name":"networkx","ecosystem":"pypi","requirements":"3.4.2","direct":false,"kind":"runtime","optional":false},{"id":23308869616,"package_name":"notebook","ecosystem":"pypi","requirements":"7.4.1","direct":false,"kind":"runtime","optional":false},{"id":23308869618,"package_name":"notebook-shim","ecosystem":"pypi","requirements":"0.2.4","direct":false,"kind":"runtime","optional":false},{"id":23308869622,"package_name":"numpy","ecosystem":"pypi","requirements":"2.2.4","direct":false,"kind":"runtime","optional":false},{"id":23308869624,"package_name":"openpyxl","ecosystem":"pypi","requirements":"3.1.5","direct":false,"kind":"runtime","optional":false},{"id":23308869626,"package_name":"overrides","ecosystem":"pypi","requirements":"7.7.0","direct":false,"kind":"runtime","optional":false},{"id":23308869629,"package_name":"packaging","ecosystem":"pypi","requirements":"24.2","direct":false,"kind":"runtime","optional":false},{"id":23308869631,"package_name":"pandas","ecosystem":"pypi","requirements":"2.2.3","direct":false,"kind":"runtime","optional":false},{"id":23308869633,"package_name":"pandocfilters","ecosystem":"pypi","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":23308869635,"package_name":"panel-imputer","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"runtime","optional":false},{"id":23308869637,"package_name":"parso","ecosystem":"pypi","requirements":"0.8.4","direct":false,"kind":"runtime","optional":false},{"id":23308869639,"package_name":"partd","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":23308869641,"package_name":"pendulum","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869644,"package_name":"pexpect","ecosystem":"pypi","requirements":"4.9.0","direct":false,"kind":"runtime","optional":false},{"id":23308869646,"package_name":"pillow","ecosystem":"pypi","requirements":"11.2.1","direct":false,"kind":"runtime","optional":false},{"id":23308869648,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.3.7","direct":false,"kind":"runtime","optional":false},{"id":23308869652,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":23308869654,"package_name":"prometheus-client","ecosystem":"pypi","requirements":"0.21.1","direct":false,"kind":"runtime","optional":false},{"id":23308869657,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"3.0.51","direct":false,"kind":"runtime","optional":false},{"id":23308869660,"package_name":"proto-plus","ecosystem":"pypi","requirements":"1.26.1","direct":false,"kind":"runtime","optional":false},{"id":23308869662,"package_name":"protobuf","ecosystem":"pypi","requirements":"6.31.0","direct":false,"kind":"runtime","optional":false},{"id":23308869665,"package_name":"psutil","ecosystem":"pypi","requirements":"7.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869667,"package_name":"ptyprocess","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"runtime","optional":false},{"id":23308869669,"package_name":"pure-eval","ecosystem":"pypi","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":23308869672,"package_name":"pyarrow","ecosystem":"pypi","requirements":"19.0.1","direct":false,"kind":"runtime","optional":false},{"id":23308869674,"package_name":"pyasn1","ecosystem":"pypi","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":23308869676,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"0.4.2","direct":false,"kind":"runtime","optional":false},{"id":23308869679,"package_name":"pycparser","ecosystem":"pypi","requirements":"2.22","direct":false,"kind":"runtime","optional":false},{"id":23308869681,"package_name":"pyeto","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":23308869683,"package_name":"pygments","ecosystem":"pypi","requirements":"2.19.1","direct":false,"kind":"runtime","optional":false},{"id":23308869686,"package_name":"pyogrio","ecosystem":"pypi","requirements":"0.10.0","direct":false,"kind":"runtime","optional":false},{"id":23308869688,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.2.3","direct":false,"kind":"runtime","optional":false},{"id":23308869691,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":23308869692,"package_name":"pyreadr","ecosystem":"pypi","requirements":"0.5.3","direct":false,"kind":"runtime","optional":false},{"id":23308869695,"package_name":"pyshp","ecosystem":"pypi","requirements":"2.3.1","direct":false,"kind":"runtime","optional":false},{"id":23308869697,"package_name":"pytest","ecosystem":"pypi","requirements":"8.3.5","direct":false,"kind":"runtime","optional":false},{"id":23308869699,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":23308869702,"package_name":"python-dotenv","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869704,"package_name":"python-json-logger","ecosystem":"pypi","requirements":"3.3.0","direct":false,"kind":"runtime","optional":false},{"id":23308869707,"package_name":"pytz","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"runtime","optional":false},{"id":23308869710,"package_name":"pywin32","ecosystem":"pypi","requirements":"310","direct":false,"kind":"runtime","optional":false},{"id":23308869712,"package_name":"pywinpty","ecosystem":"pypi","requirements":"2.0.15","direct":false,"kind":"runtime","optional":false},{"id":23308869715,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":23308869717,"package_name":"pyzmq","ecosystem":"pypi","requirements":"26.4.0","direct":false,"kind":"runtime","optional":false},{"id":23308869719,"package_name":"rasterio","ecosystem":"pypi","requirements":"1.4.3","direct":false,"kind":"runtime","optional":false},{"id":23308869721,"package_name":"referencing","ecosystem":"pypi","requirements":"0.36.2","direct":false,"kind":"runtime","optional":false},{"id":23308869724,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.3","direct":false,"kind":"runtime","optional":false},{"id":23308869726,"package_name":"rfc3339-validator","ecosystem":"pypi","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":23308869728,"package_name":"rfc3986-validator","ecosystem":"pypi","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308869731,"package_name":"rich","ecosystem":"pypi","requirements":"14.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869733,"package_name":"rioxarray","ecosystem":"pypi","requirements":"0.19.0","direct":false,"kind":"runtime","optional":false},{"id":23308869735,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.24.0","direct":false,"kind":"runtime","optional":false},{"id":23308869737,"package_name":"rpy2","ecosystem":"pypi","requirements":"3.5.9","direct":false,"kind":"runtime","optional":false},{"id":23308869739,"package_name":"rsa","ecosystem":"pypi","requirements":"4.9.1","direct":false,"kind":"runtime","optional":false},{"id":23308869741,"package_name":"schedule","ecosystem":"pypi","requirements":"1.2.2","direct":false,"kind":"runtime","optional":false},{"id":23308869743,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":23308869746,"package_name":"scipy","ecosystem":"pypi","requirements":"1.15.2","direct":false,"kind":"runtime","optional":false},{"id":23308869748,"package_name":"send2trash","ecosystem":"pypi","requirements":"1.8.3","direct":false,"kind":"runtime","optional":false},{"id":23308869751,"package_name":"setuptools","ecosystem":"pypi","requirements":"79.0.1","direct":false,"kind":"runtime","optional":false},{"id":23308869753,"package_name":"shapely","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":23308869755,"package_name":"shellingham","ecosystem":"pypi","requirements":"1.5.4","direct":false,"kind":"runtime","optional":false},{"id":23308869757,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":23308869760,"package_name":"sniffio","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":23308869762,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.7","direct":false,"kind":"runtime","optional":false},{"id":23308869764,"package_name":"stack-data","ecosystem":"pypi","requirements":"0.6.3","direct":false,"kind":"runtime","optional":false},{"id":23308869767,"package_name":"swifter","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":23308869769,"package_name":"tabulate","ecosystem":"pypi","requirements":"0.9.0","direct":false,"kind":"runtime","optional":false},{"id":23308869771,"package_name":"terminado","ecosystem":"pypi","requirements":"0.18.1","direct":false,"kind":"runtime","optional":false},{"id":23308869774,"package_name":"threadpoolctl","ecosystem":"pypi","requirements":"3.6.0","direct":false,"kind":"runtime","optional":false},{"id":23308869776,"package_name":"time-machine","ecosystem":"pypi","requirements":"2.16.0","direct":false,"kind":"runtime","optional":false},{"id":23308869778,"package_name":"tinycss2","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":23308869781,"package_name":"toolz","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":23308869783,"package_name":"tornado","ecosystem":"pypi","requirements":"6.4.2","direct":false,"kind":"runtime","optional":false},{"id":23308869786,"package_name":"tqdm","ecosystem":"pypi","requirements":"4.67.1","direct":false,"kind":"runtime","optional":false},{"id":23308869788,"package_name":"traitlets","ecosystem":"pypi","requirements":"5.14.3","direct":false,"kind":"runtime","optional":false},{"id":23308869791,"package_name":"tropycal","ecosystem":"pypi","requirements":"1.3","direct":false,"kind":"runtime","optional":false},{"id":23308869793,"package_name":"typer","ecosystem":"pypi","requirements":"0.15.4","direct":false,"kind":"runtime","optional":false},{"id":23308869795,"package_name":"types-python-dateutil","ecosystem":"pypi","requirements":"2.9.0.20241206","direct":false,"kind":"runtime","optional":false},{"id":23308869797,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.13.2","direct":false,"kind":"runtime","optional":false},{"id":23308869800,"package_name":"tzdata","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"runtime","optional":false},{"id":23308869802,"package_name":"tzlocal","ecosystem":"pypi","requirements":"5.3.1","direct":false,"kind":"runtime","optional":false},{"id":23308869804,"package_name":"uri-template","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":23308869807,"package_name":"uritemplate","ecosystem":"pypi","requirements":"4.1.1","direct":false,"kind":"runtime","optional":false},{"id":23308869809,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":23308869811,"package_name":"wbgapi","ecosystem":"pypi","requirements":"1.0.12","direct":false,"kind":"runtime","optional":false},{"id":23308869813,"package_name":"wcwidth","ecosystem":"pypi","requirements":"0.2.13","direct":false,"kind":"runtime","optional":false},{"id":23308869816,"package_name":"webcolors","ecosystem":"pypi","requirements":"24.11.1","direct":false,"kind":"runtime","optional":false},{"id":23308869818,"package_name":"webencodings","ecosystem":"pypi","requirements":"0.5.1","direct":false,"kind":"runtime","optional":false},{"id":23308869821,"package_name":"websocket-client","ecosystem":"pypi","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":23308869825,"package_name":"widgetsnbextension","ecosystem":"pypi","requirements":"4.0.14","direct":false,"kind":"runtime","optional":false},{"id":23308869828,"package_name":"xarray","ecosystem":"pypi","requirements":"2025.3.1","direct":false,"kind":"runtime","optional":false}]}],"score":4.564348191467836,"created_at":"2025-06-20T00:20:41.840Z","updated_at":"2026-06-14T11:30:28.175Z","avatar_url":"https://github.com/ccew-unibw.png","language":"Jupyter Notebook","category":"Climate Change","sub_category":"Climate Data Processing and Analysis","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# ccvi-data: Data processing for the Climate—Conflict—Vulnerability Index (CCVI)\n\nThe Climate Conflict Vulnerability Index (CCVI) is the result of a joint research project between the [Center for Crisis Early Warning (CCEW)](https://www.unibw.de/ciss-en/ccew) at [University of the Bundeswehr Munich](https://www.unibw.de/home-en), the [FutureLab \"Security, Ethnic Conflicts and Migration\"](https://www.pik-potsdam.de/en/institute/futurelabs-science-units/security-ethnic-conflicts-and-migration) at the [Potsdam Institute for Climate Impact Research (PIK)](https://www.pik-potsdam.de/en), and the [German Federal Foreign Office](https://www.auswaertiges-amt.de/en). \n\nThe goal of the project is to establish a scientifically informed tool that enables policymakers and researchers to assess and map current global risks to human security arising from climate and conflict hazards, their intersections and the potential for harmful interactions. Additionally, the CCVI reveals how vulnerabilities can amplify the impacts of climate and conflict hazards, increasing risks to human security.\n\nThe data and documentation of our conceptual and technical approach are available at [https://climate-conflict.org](https://climate-conflict.org/www/index/methodology). \n\nThe data is updated quarterly and gridded to 0.5 degrees (ca. 55km by 55km at the equator).\n\n## Table of Contents\n* [Overview](#overview)\n* [Setup](#setup)\n* [Configuration](#configuration)\n* [Framework \u0026 Architecture](#framework--architecture)\n* [Contributions](#contributions)\n* [License \u0026 Disclaimer](#license)\n\n## Overview\n\nThe repository is broadly structured along the pillars of the CCVI, with corresponding `climate`, `conflict` and `vulnerability` folders containing respective indicators. Additionally, the `base` folder contains base classes providing the implementation structure and classes for each dataset used, while the `utils` folder contains functionality shared across indicators and dimensions. The main `ccvi.py` script initializes all components and orchestrates running the CCVI data pipeline. Available configuration can be set in the `config.yaml`.\n\nTo run the CCVI data pipeline, use `uv run ccvi.py` after the [setup](#setup).\n\n## Setup\n\nThe project can be setup and run on a single workstation.\n\n### Technical Requirements\n\n* Compute: CPU only. Some parallelization, though good single-core performance is a plus.\n* Memory: \u003c 128GB\n* Storage: \u003c 2TB\n\n### Data Requirements\n\nAll data used in the CCVI is publically available. The project depends both on locally downloaded input data and data accessed via APIs, downloaded automatically as part of the data pipeline.\n\n**Locally required input files** need to be downloaded into the input subfolder of the storage directory defined in the [config](#configuration). See the comments in the .yaml for which files are currently required and where to download them.\n\n**Data downloaded via APIs**, but also local input data, may require registering with the data providers. API keys and other required secrets are read from a `.env` file, which must be setup according to the `.env.template`.\n\n### Environment\n\n**Python**\n\nThe project was developed and tested on python3.12.\n\n**Python Dependencies:**\n\nThis project uses [`uv`](https://github.com/astral-sh/uv) for Python package, version and virtual environment management. uv needs to be installed before it can be used to setup the environment.\n\nTo setup the virtual environment, use:\n\n```bash\nuv sync\n```\n\nafter cloning the repository. This should install required packages and the python version.\n\nAdditional packages can be installed similar to pip with:\n\n```bash\nuv add \u003cpackage-name\u003e\n```\n\nFor more information see the [official `uv` documentation](https://docs.astral.sh/uv/).\n\nThe repository is formated via [ruff](https://github.com/astral-sh/ruff).\n\n## Configuration\n\nThe `config.yaml` is the central configuration file for the data pipeline and the index. For a full description of the settings, see the file itself.\n\nThe following configurations are available\n\n*   **`global`**: Settings applicable everywhere. Includes regeneration config, enabling the forced regeneration of processing steps despite cached versions.\n    ```yaml\n    global:\n      # Start year for data processing and indicator generation. \n      start_year: 2015\n      # Path under which the input/processing/output storage folders are contained/will be created.\n      storage_path: data\n      # IDs added to regenerate force regeneration of indicator calculation preprocessing or data \n      # loading even if current versions are in storage. Aggregate scores are always regenerated.\n      regenerate:\n        indicator:\n          - pillar_dimension_id\n        preprocessing:\n          - data_key\n        data:\n          - data_key\n    ```\n    **`data`**: Maps data source keys to their filenames *relative* to the `input/` directory.\n    ```yaml\n    data:\n      vdem: V-Dem-CY-Full+Others-v14.rds\n      countries: geoBoundariesCGAZ_ADM0.gpkg\n      land_mask: ne_50m_land.zip\n      # ... other data sources\n    ```\n*   **`indicators`**: Nested dictionary structure (`pillar \u003e dimension \u003e id`) containing parameters specific to each indicator, defined by each class individially.\n    ```yaml\n    indicators:\n      CON: # Pillar\n        level: # Dimension\n          intensity: # Indicator ID\n            # Specific parameters for CON_level_intensity\n            normalization_quantile: 0.99\n            # ...\n    ```\n*   **`aggregation`**: Nested dictionary structure (`pillar \u003e dimension`) containing parameters for risk scores, pillar, and dimension aggregations. \n    ```yaml\n    aggregation:\n      CON: # Pillar\n        level: # Dimension\n          method: mean # standard methods are mean, gmean or pmean\n          weights: None # None (equal), or weight for all components as composite_id: weight pairs\n          normalize: True # whether to re-normalize to 0-1 after aggreation step\n          # ...\n      RISK: # Risk scores\n        CCVI:\n          method: mean\n          weights: None\n          normalize: True\n          # ...\n    ```\n\n\n## Framework \u0026 Architecture\n\nThe project framework was designed with modularity in mind. Individual indicator and data sources can easily be modified and replaces without affecting the whole project.\n\nThe architecture follows the composite index logic of the CCVI. Base classes were designed to handle the core functionality and provide a unique interface for `Datasets`, `Indicators`, and our two main aggregation levels `Dimensions` and Pillars. Additionally, shared `ConfigParser`, `StorageManager` and `GlobalBasegrid` classes provide the framework for the geospatial resultion, to read config, and to cache processing steps and store results.\n\n### Data structure\n\nAll CCVI scores are stored as `.parquet` files from pandas DataFrames with a `('pgid', 'year', 'quarter')` MultiIndex, where `pgid` stands for PRIO-GRID id, an unique identifier for each grid cell.\n\n### Datasets\n*`base.objects.Dataset`*\n\nThe `Dataset` class provides the basic framework to add datasets to the CCVI. Datasets are responsible for encapsulating all logic related to accessing, downloading, and performing initial preprocessing of specific external data sources. Each Dataset subclass, is tailored to a particular source and needs to implement at minimum a `load_data()` method and set their `data_key` class attribute. The `local` attribute distinguishes between local file sources and API-based sources, with required local files defined by the corresponding data_key(s) in the config. Each dataset is initialized with the shared `ConfigParser` instance and sets up its own `StorageManager` instance. Caching preprocessing steps is handled in a subfolder within the processing/ directory, named after its data_key, which is created based on the `needs_storage` attribute. Dataset classes often include further methods for more specific data processing.\n\n### Indicators\n*`base.objects.Indicator`*\n\nThe `Indicator` class provides a framework for the processing steps each indicator needs to implement and orchestrates them. Each Indicator subclass creates one or more Dataset instances, loads and the data and applies specific calculations to transform this data into 0-1 score. Each Indicator is initialized with pillar, dim, and id identifiers, along with shared `ConfigParser` and `GlobalBaseGrid` instances and sets up its own `StorageManager`. Caching preprocessing steps is handled in a subfolder within the processing/ directory, named after their `composite_id` attribute, depending on the `requires_processing_storage` attribute. Finished indicator scores and any raw values are stored as .parquet files in the output/ directory, named after the `composite_id`. An internal generated flag, checked at initialization via `StorageManager.check_component_generated()`, determines if an up-to-date version of the indicator's output already exists in storage. \n\nThe core workflow is defined by a series of abstract methods which subclasses implement:\n\n* `load_data()`\n* `preprocess_data()`\n* `create_indicator()`\n* `normalize()`\n\nAn optional add_raw_value() method can also be overridden. The workflow, (re-)generation checks and storage are orchestrated in the `run()` method.\n\n### Dimensions and Pillars\n*`base.objects.AggregatScore`, `base.objects.Dimension`, `base.objects.Pillar`, `ccvi.CCVI`*\n\nThe `Dimension` and `Pillar` classes represent the aggregation levels within the CCVI structure, with the top-level `CCVI` class performing the final risk score aggregations. Dimension classes aggregate multiple Indicator scores, while Pillar classes aggregate Dimension scores. The common logic for these aggregations is provided by the `AggregateScore` base class, which is inherited by the Dimension, Pillar, and CCVI classes. \n\nAggregate score classes are initialized with a list of their constituent objects (e.g., a list of Indicator instances for a Dimension) and the shared ConfigParser. They retrieve their specific aggregation parameters from the config and create their own StorageManager, using their composite_id (e.g., CON_level) as output filename. Aggregate scores are always recalculated in the data pipeline unless the same instance is run twice.\n\nSimilar to indicators, the `run()` method orchestrates the aggregation process: it \n* validates the input components and checks if they have been generated, \n* runs any missing components,\n* loads the data from these components via `load_components()`,\n* calculates aggreate scores via `aggregate()`.\n* saves the final aggregated score as `.parquet` file to the output/ folder.\n\nAn optional `add_exposure()` method modifies the data before aggregation to the dimension level depending on the `has_exposure` flag, which can be accessed by using the `base.shared.ExposureDimension` subclass instead of the regular `Dimension` class.\n\nThe `CCVI` top-level class does not store its own scores directly, but creates a DataFrame with **all** CCVI components and stores it in a versioned subfolder in the 'YYYY-Q#' (e.g. '2025-Q1') subfolder. It also creates and stores data recency metadata, denoting when the underlying datasources for each indicator were last updated.\n\n### Utilities\n*`base.objects.ConfigParser`, `base.objects.StorageManager`, `base.objects.GlobalBaseGrid`*\n\nThe framework relies on three core utility classes for its fundamental operations:\n\n* The `ConfigParser` loads and validates the `config.yaml` file and provides structured access to global (including regeneration), data source, indicator, and aggregation configurations. \n* The `StorageManager` handles the output folder structure, all indicator score I/O and some caching. This class creates and manages the standard `input/`, `processing/`, and `output/` directories including component-specific subfolders within `processing/`. It offers methods to save and load pandas DataFrames (as Parquet files), build file paths, and check for file existence or up-to-date generation of component outputs. It also manages the `composite_id` of the indicator and aggregate scores.\n* The `GlobalBaseGrid` defines and manages the standard 0.5°x0.5° geospatial grid for the index. It handles the creation (preprocessing country boundaries, filtering water areas, and matching grid cells to countries) and loading of the grid, providing the spatial resolution for all gridded indicators. The generation workflow is orchestrated in the `run()` method.\n\n## Contributions\n\nWe welcome bug reports through issues. While the version found on on \u003chttps://climate-conflict.org\u003e is developed internally, with this repository we want to enable anyone to extend and adapt the CCVI to their needs and requirements, and create their own custom versions.\n\n## License\n\nThis project is licensed under the GNU General Public License v3.0.  \nSee the [LICENSE](LICENSE) file for details.\n\n## Disclaimer\n\nThe project is funded by the German Federal Foreign Office. The views and opinions expressed in this projects, such as country assignments and boundaries, are those of the author(s) and do not necessarily reflect the official policy or position of any agency of the German government.\n\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/319006","html_url":"https://ost.ecosyste.ms/projects/319006"}