Now you can request additional data and/or customized columns!

Try It Now!

Major cities of the world

core

Files Size Format Created Updated License Source
2 829kB csv zip 11 months ago 2 months ago Geonames
List of major cities in the world Data The data is extracted from geonames, a very exhaustive list of worldwide toponyms. This datapackage only list cities above 15,000 inhabitants. Each city is associated with its country and subcountry to reduce the number of ambiguities. Subcountry can be the read more
Download Developers

Data Files

Download files in this dataset

File Description Size Last changed Download
world-cities 875kB csv (875kB) , json (2MB)
world-cities_zip Compressed versions of dataset. Includes normalized CSV and JSON data with original data and datapackage.json. 792kB zip (792kB)

world-cities  

You can customize this data to meet your requirements - Get Started

This is a preview version. There might be more data in the original version.

Field information

Field Name Order Type (Format) Description
name 1 string English name of the city
country 2 string Common name of the country, in english
subcountry 3 string Name of the major administrative area
geonameid 4 integer id from geonames

Similar Datasets

Country list

core


CSV,JSON


View ›

Continent codes

core


CSV,JSON


View ›

Airport codes

core


CSV,JSON


View ›

Language codes

core


CSV,JSON


View ›

Integrate this dataset into your favourite tool

Use our data-cli tool designed for data wranglers:

data get https://datahub.io/core/world-cities
data info core/world-cities
tree core/world-cities
# Get a list of dataset's resources
curl -L -s https://datahub.io/core/world-cities/datapackage.json | grep path

# Get resources

curl -L https://datahub.io/core/world-cities/r/0.csv

curl -L https://datahub.io/core/world-cities/r/1.zip

If you are using R here's how to get the data you want quickly loaded:

install.packages("jsonlite", repos="https://cran.rstudio.com/")
library("jsonlite")

json_file <- 'https://datahub.io/core/world-cities/datapackage.json'
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

# get list of all resources:
print(json_data$resources$name)

# print all tabular data(if exists any)
for(i in 1:length(json_data$resources$datahub$type)){
  if(json_data$resources$datahub$type[i]=='derived/csv'){
    path_to_file = json_data$resources$path[i]
    data <- read.csv(url(path_to_file))
    print(data)
  }
}

Note: You might need to run the script with root permissions if you are running on Linux machine

Install the Frictionless Data data package library and the pandas itself:

pip install datapackage
pip install pandas

Now you can use the datapackage in the Pandas:

import datapackage
import pandas as pd

data_url = 'https://datahub.io/core/world-cities/datapackage.json'

# to load Data Package into storage
package = datapackage.Package(data_url)

# to load only tabular data
resources = package.resources
for resource in resources:
    if resource.tabular:
        data = pd.read_csv(resource.descriptor['path'])
        print (data)

For Python, first install the `datapackage` library (all the datasets on DataHub are Data Packages):

pip install datapackage

To get Data Package into your Python environment, run following code:

from datapackage import Package

package = Package('https://datahub.io/core/world-cities/datapackage.json')

# print list of all resources:
print(package.resource_names)

# print processed tabular data (if exists any)
for resource in package.resources:
    if resource.descriptor['datahub']['type'] == 'derived/csv':
        print(resource.read())

If you are using JavaScript, please, follow instructions below:

Install data.js module using npm:

  $ npm install data.js

Once the package is installed, use the following code snippet:

const {Dataset} = require('data.js')

const path = 'https://datahub.io/core/world-cities/datapackage.json'

// We're using self-invoking function here as we want to use async-await syntax:
;(async () => {
  const dataset = await Dataset.load(path)
  // get list of all resources:
  for (const id in dataset.resources) {
    console.log(dataset.resources[id]._descriptor.name)
  }
  // get all tabular data(if exists any)
  for (const id in dataset.resources) {
    if (dataset.resources[id]._descriptor.format === "csv") {
      const file = dataset.resources[id]
      // Get a raw stream
      const stream = await file.stream()
      // entire file as a buffer (be careful with large files!)
      const buffer = await file.buffer
      // print data
      stream.pipe(process.stdout)
    }
  }
})()

Read me

List of major cities in the world

Data

The data is extracted from geonames, a very exhaustive list of worldwide toponyms.

This datapackage only list cities above 15,000 inhabitants. Each city is associated with its country and subcountry to reduce the number of ambiguities. Subcountry can be the name of a state (eg in United Kingdom or the United States of America) or the major administrative section (eg ‘‘region’’ in France’’). See admin1 field on geonames website for further info about subcountry.

Notice that :

  • some cities like Vatican city or Singapore are a whole state so they don’t belong to any subcountry. Therefore subcountry is N/A.
  • There is no guaranty that a city has a unique name in a country and subcountry (At the time of writing, there are about 60 ambiguities). But for each city, the source data primary key geonameid is provided.

Preparation

You can run the script yourself to update the data and publish them to github : see scripts README

License

All data is licensed under the Creative Common Attribution License as is the original data from geonames. This means you have to credit geonames when using the data. And while no credit is formally required a link back or credit to Lexman and the Open Knowledge Foundation is much appreciated.

All source code is licensed under the MIT licence.


Keywords and keyphrases: world cities, list of cities in the world, countries and cities, major cities, major cities of the world, country ISO 3166-1 codes, geonames, worldwide toponyms.
Datapackage.json

Request Customized Data


Notifications of data updates and schema changes

Warranty / guaranteed updates

Workflow integration (e.g. Python packages, NPM packages)

Customized data (e.g. you need different or additional data)

Or suggest your own feature from the link below