The data in this section is derived from surveys answered by website visitors, structured similarly to established scientific and governmental surveys. Individual responses are assigned a numerical value between -2 (indicating a strongly negative perception) and +2 (indicating a strongly positive perception).
To maintain data accuracy, we employ spam filtering algorithms that exclude inputs from users exhibiting suspicious behavior.
Survey results are then scaled from 0 to 100 for easier interpretation and comparison.
Our current index, updated continuously, is compiled from data within the past 5 years. We carefully select cities for inclusion in the index based on a minimum number of contributors to ensure statistical significance. Additionally, our semiannual index is calculated twice a year by incorporating the latest data into the historical view.
or the pollution section, most of our data is based on user perceptions (opinions) from visitors to this website. However, we also incorporate relevant data from the World Health Organization and other institutions when we find it useful. Please refer to our Terms of use or more details.
Pollution Index The Pollution Index estimates perceived overall pollution levels in cities worldwide, based on surveys regarding:
Pollution Exp Scale applies an exponential function to emphasize differences between cities &mdash& showing very high values for highly polluted cities and very low values for cities with minimal pollution.
The formulas used to calculate these indices are subject to change and are based on complex empirical models. The current calculation, implemented in Java, is as follows:
public void calculateIndex() { //assumes air_quality and other entries from user are in the range [-2, 2], where -2 means perceived as very low, and +2 means very high //PollutionDbEntry.IS_POLLUTION_AIR_QUALITY and similar are constant variables which are either -1 and 1; i.e. IS_POLLUTION_AIR_QUALITY = -1.0 //These constant variables in PollutionDbEntry class are 1 for values which represent pollutions and -1 for values which represent opposite (purity, cleanliness) index = new PollutionIndex(); double overall = 0.0; overall += 7 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_AIR_QUALITY * air_quality); overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_DRINKING_WATER_QUALITY_ACCESSIBILITY * drinking_water_quality_accessibility); overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_WATER_POLLUTION * water_pollution); overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_GARBAGE_DISPOSAL_SATISFACTION * garbage_disposal_satisfaction); overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_CLEAN_AND_TIDY * clean_and_tidy); overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_NOISE_AND_LIGHT_POLLUTION * noise_and_light_pollution); overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_GREEN_AND_PARKS_QUALITY * green_and_parks_quality); overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_COMFORTABLE_TO_SPEND_TIME * comfortable_to_spend_time); double overallExpScale = 0.0; overallExpScale += 7 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_AIR_QUALITY * air_quality); overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_DRINKING_WATER_QUALITY_ACCESSIBILITY * drinking_water_quality_accessibility); overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_WATER_POLLUTION * water_pollution); overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_GARBAGE_DISPOSAL_SATISFACTION * garbage_disposal_satisfaction); overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_CLEAN_AND_TIDY * clean_and_tidy); overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_NOISE_AND_LIGHT_POLLUTION * noise_and_light_pollution); overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_GREEN_AND_PARKS_QUALITY * green_and_parks_quality); overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_COMFORTABLE_TO_SPEND_TIME * comfortable_to_spend_time); index.main = overall / 14.5; //max 17 index.expScale = calcScaleStandardIndexFromSum(overallExpScale, 12); } protected double getIndexPartPreCalc(double internalValue) { return (internalValue + 2) * 25; } protected double getIndexPartPreCalcExpScaleStandard(double internalValue) { return getIndexPartPreCalcExpScale(internalValue, Math.E); } protected double getIndexPartPreCalcExpScale(double internalValue, double exp) { return Math.pow((internalValue + 2) * 25, exp); } protected double calcScaleStandardIndexFromSum(double scaleSum, int elems) { return Math.pow(scaleSum / elems, 1 / (Math.E * 8.8 / 10)); }