Postal Codes Dataset for Côte d'Ivoire, CI

264
Updated:
Files:1
Size:634 kB
Rows:12,076
Formats:csv
License:CC-BY-4.0

Postal Codes Dataset for Côte d'Ivoire, CI including name of the city, town, or place, various administrative divisions and alternative city names.

Part of a Data Solution

  • Postal Codes Solution

    Every worldwide postal-code dataset in one bundle — the ultimate global reference for precise postal codes.

    Explore →

API Access

Access dataset files directly from scripts, code, or AI agents.

Browse dataset files
Dataset Files

Each file has a stable URL (r-link) that you can use directly in scripts, apps, or AI agents. These URLs are permanent and safe to hardcode.

/logistics/postal-codes-ci/
https://datahub.io/logistics/postal-codes-ci/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-ci/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-ci/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-ci/_r/-/README.md
https://datahub.io/logistics/postal-codes-ci/_r/-/datapackage.yaml
Key Files

Start with these files — they give you everything you need to understand and access the dataset.

datapackage.yaml— metadata & schema
https://datahub.io/logistics/postal-codes-ci/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-ci/_r/-/README.md
Typical Usage
  1. 1. Fetch datapackage.yaml to inspect schema and resources
  2. 2. Download data resources listed in datapackage.yaml
  3. 3. Read README.md for full context

Data Files

Explore with AI

postal-codes-ci


About this dataset

Côte d'Ivoire (CI): migration notes

Internal record of the P6 migration from the old scripts to the producer: the discrepancies found, their causes, and who decided what. This is a dated record, so the numbers are as of the migration and not kept current. It is not shipped.

  • Issue: pc-28e.8.6
  • Commit: see git log -- datasets/ci (P6 ci commit)
  • Parity verdict: format-only (gate: pass), against the live public CSV
  • Producer: custom, refresh disabled, postal_code_required: false

Sources

InputURLNotes
GeoNames gazetteer dumphttps://download.geonames.org/export/dump/CI.zipMember CI.txt; filtered to feature class P
GeoNames admin1 referencehttps://download.geonames.org/export/dump/admin1CodesASCII.txtASCII district name column, keyed CI.<admin1>
  • Both are the files the old build_postal_codes_product.py read from its local sources/ snapshot (CI_dump.txt, geonames_admin1CodesASCII.txt).
  • Both are stable "latest" URLs; nothing versioned to resolve. ci.inputs.json records bytes and sha256 per run.
  • GeoNames has no postal export for CI (export/zip/CI.zip is a 404); Côte d'Ivoire has no postal code system.

Parity against the live public CSV (2026-10-05)

Rows: 12,076 live and 12,076 fresh, none only on one side, 0 changed cells, 0 cell classes. Same row order. The only difference is line endings: live is CRLF (old builder's csv.DictWriter default), fresh is LF. With \r stripped from live, the files are byte-identical.

No discrepancies to trace.

Decisions

DecisionByBasis
Accept the CRLF→LF differenceStanding rule (format-only parity pre-approved)0 changed cells, equal rows
pipeline.postal_code_required: falsePlan (SST plan: needed by the no-postcode free datasets)build.py otherwise rejects the always-empty postal_code
latitude/longitude → numberStanding rule (real types, as in ad)All values numeric in the produced CSV
accuracy stays string, described as not populatedAgentAlways empty: the gazetteer dump has no postal-style accuracy grade, so the GeoNames-accuracy description doesn't apply
primaryKey: [place_name, admin_name1, latitude, longitude]Agent, from the old builder's PKChecked unique on the produced CSV; the producer checks it too
Old minimum-populated-places assert droppedBrief (no row-count asserts)Structural checks (14 districts, PK unique, known district names) kept
Remove the row count from README and descriptor descriptionStanding doc ruleRephrased as "populated places across all 14 districts"

Transforms carried over

From build_postal_codes_product.py (2026-09-04):

  • Feature class P only.
  • admin1 code → admin1CodesASCII ASCII name → ISO 3166-2:CI via the 14-entry name crosswalk (verified against Wikipedia's ISO_3166-2:CI, 2026-09-04); display name drops GeoNames' " District" suffix. An unmapped district name is a ProducerError.
  • Places with an admin1 code missing from the reference table ("00"/blank) keep empty admin_name1/admin_code1.
  • All other non-coordinate columns empty; sort by (admin_code1, place_name), ties in dump order.
  • Asserts → ProducerError: every dump row is CI, no literal "nan", PK unique, all 14 districts present.

Not ported

  • The old builder's generated datapackage.json/README.md/ATTRIBUTION.txt/zip (build.py and the descriptor own these now), and publish_r2.py.

Open questions

  • None for parity. .licensing-notes.md still quotes a dated row count; left for the pc-hfz sweep.