Как я могу вычислить средний процент увеличения населения в этом списке из года в год? - PullRequest
0 голосов
/ 09 марта 2020

MIDYEAR_POPULATION = [(1971, 21962032), (1972, 22218463), (1973, 22491777), (1974, 22807969), (1975, 23143275), (1976, 23449808), (1977, 23725843), (1978 , 23963203), (1979, 24201544), (1980, 24515667), (1981, 24819915), (1982, 25116942), (1983, 25366451), (1984, 25607053), (1985, 25842116), (1986, 26100278). ) (1987, 26446601), (1988, 26791747), (1989, 27276781), (1990, 27691138), (1991, 28037420), (1992, 28371264), (1993, 28684764), (1994, 29000663), (1995, 29302311), (1996, 29610218), (1997, 29905948), (1998, 30155173), (1999, 30401286), (2000, 30685730), (2001, 31020596), (2002, 31358418), (2003 , 31641630), (2004, 31938004), (2005, 32242364), (2006, 32570505), (2007, 32887928), (2008, 33245773), (2009, 33628571), (2010, 34005274), (2011, 34342780) ), (2012, 34750545), (2013, 35152370), (2014, 35535348), (2015, 35832513), (2016, 36264604), (2017, 36708083), (2018, 37057765), (2019, 37589262)]

def average_percentage_increase(pop_stats):

В этой функции я хочу найти процентную разницу от каждого год к году, а затем вернуть среднее процентное изменение.

Ответы [ 3 ]

1 голос
/ 09 марта 2020

Итерация по каждому

from statistics import mean

MIDYEAR_POPULATION = [(1971, 21962032), (1972, 22218463), (1973, 22491777), (1974, 22807969), (1975, 23143275), (1976, 23449808), (1977, 23725843), (1978, 23963203), (1979, 24201544), (1980, 24515667), (1981, 24819915), (1982, 25116942), (1983, 25366451), (1984, 25607053), (1985, 25842116), (1986, 26100278), (1987, 26446601), (1988, 26791747), (1989, 27276781), (1990, 27691138), (1991, 28037420), (1992, 28371264), (1993, 28684764), (1994, 29000663), (1995, 29302311), (1996, 29610218), (1997, 29905948), (1998, 30155173), (1999, 30401286), (2000, 30685730), (2001, 31020596), (2002, 31358418), (2003, 31641630), (2004, 31938004), (2005, 32242364), (2006, 32570505), (2007, 32887928), (2008, 33245773), (2009, 33628571), (2010, 34005274), (2011, 34342780), (2012, 34750545), (2013, 35152370), (2014, 35535348), (2015, 35832513), (2016, 36264604), (2017, 36708083), (2018, 37057765), (2019, 37589262)]
diff = [
    (f'{prev_year}-{next_year}', next_year_population*100/prev_year_population)
    for (prev_year, prev_year_population), (next_year, next_year_population) in zip(MIDYEAR_POPULATION[0:-1], MIDYEAR_POPULATION[1::]) 
]

print(diff)
>>> [('1971-1972', 101.16761053804129), ('1972-1973', 101.23012109343478), ... ('2018-2019', 101.43423922084885)]

avg = mean(value for y,value in diff)
print(avg)
>>> 101.12606694880344
0 голосов
/ 09 марта 2020

Ваша функция будет выглядеть примерно так:

MIDYEAR_POPULATION = [(1971, 21962032), (1972, 22218463), (1973, 22491777), (1974, 22807969), (1975, 23143275), (1976, 23449808), (1977, 23725843), (1978, 23963203), (1979, 24201544), (1980, 24515667), (1981, 24819915), (1982, 25116942), (1983, 25366451), (1984, 25607053), (1985, 25842116), (1986, 26100278), (1987, 26446601), (1988, 26791747), (1989, 27276781), (1990, 27691138), (1991, 28037420), (1992, 28371264), (1993, 28684764), (1994, 29000663), (1995, 29302311), (1996, 29610218), (1997, 29905948), (1998, 30155173), (1999, 30401286), (2000, 30685730), (2001, 31020596), (2002, 31358418), (2003, 31641630), (2004, 31938004), (2005, 32242364), (2006, 32570505), (2007, 32887928), (2008, 33245773), (2009, 33628571), (2010, 34005274), (2011, 34342780), (2012, 34750545), (2013, 35152370), (2014, 35535348), (2015, 35832513), (2016, 36264604), (2017, 36708083), (2018, 37057765), (2019, 37589262)]


def average_percentage_increase(pop_stats):
    all_differences = list()
    for i, year in enumerate(pop_stats):
        if i > 0:
            difference_in_percentage = year[1] / pop_stats[i - 1][1]
            all_differences.append(difference_in_percentage)

    return sum(all_differences) / len(all_differences)

factor = average_percentage_increase(MIDYEAR_POPULATION)
percentage = (factor - 1) * 100
percentage_rounded = round(percentage, 2)
print(factor)
print(percentage)
print(percentage_rounded)

Где с вашими данными я получу следующие результаты:

factor: 1.0112606694880342
percentage: 1.126066948803417
percentage_rounded: 1.13

Надеюсь, это поможет, и для будущих вопросов, пожалуйста, покажите, что вы уже пробовали, и какой будет ожидаемый ответ, чтобы люди, которые пытаются вам помочь, могли подтвердить свой ответ.

0 голосов
/ 09 марта 2020

Вот способ, которым вы можете сделать это:

percentageIncreases = []
result = 0
for x in range(1, len(MIDYEAR_POPULATION)):
    year, pop = MIDYEAR_POPULATION[x]
    lastYear, lastPop = MIDYEAR_POPULATION[x - 1]
    percentageIncreases.append(pop / lastPop * 100)

result = sum(percentageIncreases) / len(percentageIncreases)

Или, используя понимание списка:

percentageIncreases = [MIDYEAR_POPULATION[x][1] / MIDYEAR_POPULATION[x - 1][1] * 100 for x in range(1, len(MIDYEAR_POPULATION))]
result = sum(percentageIncreases) / len(percentageIncreases)

ПРИМЕЧАНИЕ: Если вы хотите, вы можно добавить функцию round в конец, чтобы десятичные разряды были не такими длинными.

Пример:

result = round(sum(percentageIncreases) / len(percentageIncreases), 2) # Rounds result to two decimal places

ПРИМЕЧАНИЕ 2: Если хотите, Вы также можете использовать функцию mean из statistics, чтобы сделать код немного меньше:

from statistics import mean
result = mean([MIDYEAR_POPULATION[x][1] / MIDYEAR_POPULATION[x - 1][1] * 100 for x in range(1, len(MIDYEAR_POPULATION))])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...