Original size 564x796

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

PROTECT STATUS: not protected
5

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

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

Я выбрала данные динамики роста населения за последние 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 гг.)
5
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