Read this first
- Hindi, Urdu and Hindustani cannot be compared across provinces here. The United Provinces, Bihar and Orissa, and several other volumes printed one figure for “Hindustani” (or “Hindi”, “Urdu”) without dividing it into Western Hindi, Eastern Hindi and Bihari. The all-India volume made that division afterwards, at province level only. At district level the map therefore shows Hindustani as printed as its own entry, and offers a composite, Hindustani + Western Hindi + Eastern Hindi + Bihari, which is the only Hindi-area figure that means the same thing everywhere.
- A map unit is often larger than one 1931 district. Districts have been split and merged many times since 1931, and princely states were scattered in enclaves. Where the history of a present-day district runs back to more than one 1931 unit, all of them are joined into one map unit and their figures added. Nothing is apportioned by area or estimated. Click a unit to see which 1931 areas and which present-day districts it contains.
- Outside present-day India the grouping was made by hand. Pakistan, Bangladesh and Myanmar are not in the district lineage database. Each 1931 district in Pakistan and Bangladesh was matched to the present-day districts carved out of it. Burma is drawn on its own 1931 district boundaries.
- Not every volume could be read in full. Two volumes have damaged or illegible pages: Gwalior State and part of the Central India Agency. Their totals fall short of the all-India volume, and the units affected are flagged. Delhi and Coorg have no district tables, so their province figures from Vol. I are used.
- All the cautions on the province map apply here too: mother tongue was what the enumerator wrote down, and the language classification is the census’s own.
How it was made
The figures come from Table XV (“Language”), Part I, in 24 provincial and state volumes of the 1931 Census of India. People read them from the page scans by eye, without OCR, and checked the arithmetic of each page. The full method, with every rule and exception, is in docs/regional.md. In outline:
1. Making the volumes comparable
- One figure per language per area. Each volume prints its own mix of language rows, group totals and sub-totals. Only the finest rows (“leaves”) are kept, so nothing is counted twice. Group totals are used only as a check.
- Residuals. When a printed group total is larger than the languages listed under it, the difference is kept as a separate entry for that group and marked Σ. This happens where a volume prints a group total but names only some of its members, or where a member is illegible.
- Names matched to the all-India classification. Each leaf is matched to an entry of Vol. I’s classification by its printed name. If that fails, it is matched through the groups printed above it, and then through a list of spelling variants (for example Punjabi to Panjabi, Khandeshi to Khandesi). The alias list is part of the code. About 4.3 million people could not be placed, almost all of them returned in Burma under the single heading “Indian languages”. They are counted as “Not matched”.
- Checks. For 547 of the 613 areas that print a population, the leaves add up to it exactly. Most of the rest are a few persons out. The large gaps have known causes: illegible cells, damaged pages, and two misprints (Hazara, Nalgonda). Each volume’s total matches Vol. I to within 0.01%, except the Central India Agency (0.5% short, illegible cells) and Gwalior (53% short, pages missing from the only scan).
2. From 1931 districts to present-day districts
- District lineage. The India State and District Evolution Database, 1872–2025 (Jolad, Kalra and Singh, doi:10.7910/DVN/D1AGUR, CC BY 4.0) records how each district was split, merged or renamed between censuses. Its links from 1931 to 1941, 1951 and each later census through to 2024 were joined into one graph. A handful of names shared by different districts (Bilaspur, Raigarh, Bijapur, Partabgarh, Patna, and others) are told apart by state. One link missing from the source was added: Udaipur (Dharamjaigarh) State, which merged into Raigarh district.
- Matching the tables. Each area printed in a provincial table (a district, a state, an agency) was linked to its 1931 node in the lineage, by name within its province, or through a hand-made crosswalk for states grouped differently in the tables.
- Present-day shapes. Each present-day district polygon from geoBoundaries India ADM2 was linked to its latest node in the lineage.
- Map units. Any 1931 area and present-day district connected through the lineage end up in one group. Each group is drawn as the union of its present-day districts, and its figures are the sum of its 1931 areas. Because units are built this way, a unit’s figures always describe the whole of the area drawn, and nothing has to be divided.
- Pakistan, Bangladesh, Jammu and Kashmir, Burma. These were assigned by hand: each 1931 district to the present-day districts made from it (geoBoundaries Pakistan and Bangladesh ADM2), while Burma is drawn on its 1931 districts and states, taken from the administrative layer of the Japanese Empire map. Rangoon Town and Insein are drawn with Hanthawaddy, and the Northern and Southern Shan States as one unit. Nadia, Malda, Dinajpur and Sylhet, divided in 1947, include both their Indian and Bangladeshi parts. The Jammu and Kashmir grouping follows the 1931 districts and wazarats. It does not use the lineage, which treats the whole state as one unit.
- Not drawn. Aden has no shape on this map. The tribal areas of the North-West Frontier were not enumerated, and neither were the unadministered tracts of Burma (Hukawng Valley, the Triangle, the Wa States): these show grey, and their cards say why. The Portuguese and French possessions were outside the census. The Laccadives were counted with Malabar and South Kanara and cannot be separated from them.
Every printed figure, in both parts of the table and with its scan, can be searched in the District tables. Downloads: regional_table15.csv (every figure used, with its classification match and map unit), data/districts.js, and the rule tables in docs/. Code: the scripts in tools/regional/.