Original size 564x796

Анализ роста населения мира (1961–2022 гг.)

PROTECT STATUS: not protected

Вводная часть

В исследовании проводится анализ темпов роста населения, визуализация тенденций и прогнозирование будущих значений.

Я выбрала данные динамики роста населения за последние 50 лет. Мне эта тема показалась довольно актуальной с учетом современных тенденций замедления роста населения. В основном я использовала линейные и столбчатые диаграммы, так как мне показалось, что данную информацию лучше показать в виде некоторых значений идущих то вверх, то вниз, а не на круговых графиках например, так как ими легче показывать проценты. Ссылку на сайт, откуда я брала данные прикрепляю ниже

Этапы работы

1. Загрузка и обработка данных

import numpy as np import seaborn as sns import matplotlib.pyplot as plt import plotly.graph_objects as go import plotly.express as px from statsmodels.tsa.arima.model import ARIMA

df = pd.read_csv («The_World_Bank_Population_growth_(annual_).csv») df.fillna (df.mean (numeric_only=True), inplace=True) df_melted = df.melt (id_vars=[«country_name», «country_code»], var_name="Year», value_name="Population Growth (%)») df_melted[«Year»] = df_melted[«Year»].astype (int)

df_melted.head ()

Этот код делает следующее:

1. Импортирует библиотеки: Код начинает с импорта необходимых библиотек для работы с данными, визуализации и анализа временных рядов. 2. Загружает данные: Читает данные из CSV-файла с именем «The_World_Bank_Population_growth_(annual_).csv» и сохраняет их в DataFrame под названием df. Предполагается, что этот файл содержит данные о приросте населения по странам за разные годы. 3. Обрабатывает пропущенные значения 4. Преобразует данные из «широкого» формата в «длинный» 5. Преобразует данные в столбце «Year» в целочисленный тип данных. Это важно, так как изначально годы могли быть считаны как строки.

6. Выводит первые несколько строк преобразованного DataFrame В итоге, этот код выполняет предварительную обработку данных о приросте населения, подготавливая их для дальнейшего анализа и визуализации, например, для построения графиков изменения прироста населения во времени для разных стран.

Original size 710x252

2. Динамика роста населения

plt.figure (figsize=(12, 6)) sns.lineplot (data=df_melted.groupby («Year»)[«Population Growth (%)»].mean (), marker="o», linewidth=2.5) plt.title («Средний рост населения в мире (1961–2022 гг.)») plt.xlabel («Год») plt.ylabel («Средний рост населения (%)») plt.show ()

Этот код создает линейный график, показывающий, как менялся средний рост населения в мире с течением времени. Группировка данных по годам и вычисление среднего значения позволяет увидеть общую тенденцию роста населения, а не отдельные данные для каждой страны. Маркеры и толстая линия делают график более наглядным, а заголовок и подписи осей добавляют контекст.

Original size 1280x670

3. Тепловая карта роста населения (ТОП-10 стран)

top_countries = df_melted.groupby («country_name»)[«Population Growth (%)»].mean ().nlargest (10).index

plt.figure (figsize=(12, 6)) heatmap_data = df_melted[df_melted[«country_name»].isin (top_countries)].pivot (index="country_name», columns="Year», values="Population Growth (%)») sns.heatmap (heatmap_data, cmap="coolwarm», annot=False, linewidths=0.5) plt.title («Динамика роста населения в ТОП-10 странах») plt.xlabel («Год») plt.ylabel («Страна») plt.show ()

Этот код создает тепловую карту, которая наглядно показывает, как менялся рост населения в 10 странах с самым высоким средним ростом населения за исследуемый период. Цвета на тепловой карте показывают, насколько высоким или низким был рост населения в конкретной стране в конкретном году. Более теплые цвета (крас ные) соответствуют более высоким темпам роста, а более холодные цвета (синие) — более низким темпам роста.

Original size 1379x677

4. Средний рост населения по десятилетиям

df_melted[«Decade»] = (df_melted[«Year»] // 10) * 10 decade_growth = df_melted.groupby («Decade»)[«Population Growth (%)»].mean ().reset_index ()

plt.figure (figsize=(10, 5)) sns.barplot (data=decade_growth, x="Decade», y="Population Growth (%)», palette="coolwarm») plt.title («Средний рост населения по десятилетиям») plt.xlabel («Десятилетие») plt.ylabel («Средний рост населения (%)») plt.show ()

Этот код создает столбчатую диаграмму, которая наглядно показывает, как менялся средний рост населения в каждом десятилетии. Высота каждого столбца соответствует среднему росту населения в этом десятилетии. Цвета столбцов соответствуют цветовой схеме «coolwarm», где более теплые цвета соответствуют более высоким темпам роста, а более холодные — более низким.

Original size 1111x600

5. Прогнозирование роста населения с помощью ARIMA

world_growth = df_melted.groupby («Year»)[«Population Growth (%)»].mean ()

model = ARIMA (world_growth, order=(2,1,2)) model_fit = model.fit ()

Прогноз на ближайшие 10 лет

forecast = model_fit.forecast (steps=10)

plt.figure (figsize=(12, 6)) plt.plot (world_growth, label="Фактические данные») plt.plot (range (2023, 2033), forecast, label="Прогноз», linestyle="dashed», color='red') plt.title («Прогноз роста населения на 10 лет») plt.xlabel («Год») plt.ylabel («Рост населения (%)») plt.legend () plt.show ()

forecast

Этот код использует модель ARIMA для прогнозирования среднего роста населения в мире на следующие 10 лет (2023-2032).

Вот подробное объяснение:

1. world_growth = df_melted.groupby («Year»)[«Population Growth (%)»].mean ():  — df_melted.groupby («Year»): Группирует DataFrame df_melted по столбцу «Year».  — [«Population Growth (%)»]: Выбирает столбец «Population Growth (%)» для каждой группы лет.  — .mean (): Вычисляет среднее значение «Population Growth (%)» для каждого года.  — В результате world_growth становится pandas Series, где индексы — годы, а значения — средний рост населения в мире в этом году. Это и есть временной ряд, который мы будем прогнозировать.

2. model = ARIMA (world_growth, order=(2,1,2)):  — ARIMA (…): Создает объект модели ARIMA.  — world_growth: Временной ряд, который будет использоваться для обучения модели.  — order=(2,1,2): Определяет параметры модели ARIMA:  — p = 2: Порядок авторегрессии (AR). Использует два предыдущих значения временного ряда для прогнозирования текущего.  — d = 1: Порядок интегрирования (I). Указывает, что временной ряд должен быть дифференцирован один раз, чтобы стать стационарным. Дифференцирование означает вычисление разностей между последовательными значениями.  — q = 2: Порядок скользящего среднего (MA). Использует ошибки прогноза (разницы между фактическими и прогнозируемыми значениями) за два предыдущих периода для прогнозирования текущего значения.  — Выбор параметров (2, 1, 2) является здесь ключевым моментом. Он часто выполняется на основе анализа автокорреляционной (ACF) и частной автокорреляционной (PACF) функций временного ряда.

3. model_fit = model.fit ():  — Обучает модель ARIMA на данных world_growth. fit () находит оптимальные параметры модели ARIMA, которые наилучшим образом соответствуют историческим данным.

4. forecast = model_fit.forecast (steps=10):  — model_fit.forecast (steps=10): Выполняет прогноз на следующие 10 шагов (то есть на следующие 10 лет). Результатом является pandas Series, содержащий прогнозируемые значения роста населения.

5. plt.figure (figsize=(12, 6)):  — Создает новое окно для графика и устанавливает его размер.

6. plt.plot (world_growth, label="Фактические данные»):  — Строит график фактических данных роста населения из world_growth.  — label="Фактические данные»: Устанавливает метку для этой линии графика.

7. plt.plot (range (2023, 2033), forecast, label="Прогноз», linestyle="dashed», color='red'):  — Строит график прогнозируемых значений роста населения из forecast.  — range (2023, 2033): Создает последовательность годов для прогноза (2023, 2024, …, 2032).  — label="Прогноз»: Устанавливает метку для этой линии графика.  — linestyle="dashed»: Устанавливает стиль линии графика как пунктирный.  — color='red': Устанавливает цвет линии графика как красный.

8. plt.title («Прогноз роста населения на 10 лет»):  — Устанавливает заголовок графика.

9. plt.xlabel («Год»):  — Устанавливает подпись для оси x.

10. plt.ylabel («Рост населения (%)»):  — Устанавливает подпись для оси y.

11. plt.legend ():  — Отображает легенду графика, показывающую, какая линия соответствует фактическим данным, а какая — прогнозу.

12. plt.show ():  — Отображает график.

13. forecast:  — Выводит на экран прогнозируемые значения роста населения за следующие 10 лет. Это полезно для непосредственного просмотра результатов прогноза.

Original size 1265x656

1. Нейросети: я использовала самый классический chat4O, для того чтобы иногда структурировать свои мысли и в некоторых местах более грамотно сформулировать заключение или вывод, однако изначальные выводе естественно писала сама. Мой промт выглядел примерно так: Make my text better and add some formal phrases and words

2. Цвета: Я использовала две цветовые палитры — голубые оттенки и розовато-красные оттенки, мне показалось это сочетание достаточно контрастным. Также голубой цвет ассоциируется у меня с нашей планетой, а исследование как раз про ее население.

Анализ роста населения мира (1961–2022 гг.)
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more