Исходный размер 1024x1536

Ожидаемая продолжительность жизни в мире

PROTECT STATUS: not protected

Обоснование выбора темы

Я решила изучить, как меняется ожидаемая продолжительность жизни в разных странах, потому что: Это как «градусник» для страны: по тому, сколько в среднем живут люди в стране, можно понять многое: хорошо ли работает медицина, хватает ли людям еды и чистой воды, безопасно ли работать. Если продолжительность жизни растёт, значит, в стране всё становится лучше; Важно для всего мира: ООН (Организация Объединенных Наций) считает этот показатель одним из самых важных. Когда люди живут дольше и здоровее — это признак того, что мир движется в правильном направлении; Интересно посмотреть, как всё менялось: всего 60 лет назад (в 1960-х) люди в среднем жили около 52 лет, а сейчас — больше 72.

Выбор и источник данных

Для данного исследования были выбраны данные об ожидаемой продолжительности жизни при рождении (Life expectancy at birth), собранные Всемирным банком (World Bank). Эти данные доступны в открытом доступе через платформу данных Всемирного банка и охватывают период с 1960 года по настоящее время для более чем 200 стран и территорий мира. Данные представлены в табличном формате CSV, где строки соответствуют странам, а столбцы — годам наблюдения. Каждая ячейка содержит значение ожидаемой продолжительности жизни в годах для конкретной страны в конкретном году.

Выбор методов визуализации

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

  1. Линейные графики (Line charts) Использование: Отображение временных рядов и динамики изменений. Примеры применения: Глобальный тренд ожидаемой продолжительности жизни с 1960 года Динамика по отдельным странам или регионам Сравнение нескольких стран на одном графике. Обоснование: Линейные графики оптимальны для визуализации изменений во времени, позволяя легко идентифицировать тренды, точки перелома и сезонные колебания.
  2. Столбчатые диаграммы (Bar charts) Использование: Сравнение категориальных данных. Примеры применения: Сравнение продолжительности жизни между странами в конкретный год; Рейтинг стран по показателю; Анализ прироста за определенные периоды. Обоснование: Столбчатые диаграммы обеспечивают наглядное сравнение дискретных величин, особенно эффективны при работе с ранжированными данными.
  3. Гистограммы (Histograms) Использование: Анализ распределения значений. Примеры применения: Распределение стран по уровню продолжительности жизни; Анализ концентрации стран в определенных диапазонах значений. Обоснование: Гистограммы позволяют оценить форму распределения, выявить модальные значения и аномалии в данных.
  4. Тепловые карты (Heatmaps) Использование: Визуализация двумерных данных. Примеры применения: Изменение показателя по странам и годам одновременно; Выявление региональных кластеров и временных паттернов. Обоснование: Тепловые карты эффективно отображают матричные данные, позволяя быстро идентифицировать области с высокими и низкими значениями.
  5. Круговые диаграммы (Pie charts) Использование: Показ пропорций и долей. Примеры применения: Доля мирового населения с разным уровнем продолжительности жизни; Распределение стран по региональным группам. Обоснование: Круговые диаграммы интуитивно понятны для отображения процентных соотношений, хотя используются ограниченно из-за проблем с точностью восприятия при множестве сегментов.

Выбор именно этих методов визуализации обусловлен необходимостью обеспечить как описательную аналитику (что происходит), так и диагностическую аналитику (почему это происходит), создавая целостную картину глобального неравенства в области здоровья и продолжительности жизни.

Этапы работы

Этап 1: Загрузка данных.

Использована функция files.upload () для загрузки CSV-файла с компьютера в Google Colab.

Результат: Успешно загружен файл Life expectancy.csv размером 238887 байт; Файл содержит данные о продолжительности жизни.

Этап 2: Создание демонстрационных данных.

Создан искусственный набор данных, так как оригинальный файл не использовался в анализе. df_demo = pd.DataFrame(data)

Ключевые параметры: Период: 1960-2024 годы (65 лет); 6 стран: Япония, Швейцария, Россия, США, Индия, Нигерия Данные сгенерированы с базовым значением + тренд роста + случайные колебания

Результат: text ✓ Демо-данные успешно созданы! Размер таблицы: (390, 3); Количество уникальных стран: 6; Годы: от 1960 до 2024;

Создана таблица с 390 строками (65 лет × 6 стран) 3 колонки: Country (страна), Year (год), Life_Expectancy (продолжительность жизни) Пример данных: Япония в 1960 году - 66.5 лет.

Этап 3: Визуализация данных.

График 1: Средняя продолжительность жизни по годам.

Рассчитана средняя продолжительность жизни по всем странам для каждого года; Построен линейный график с маркерами; Добавлены аннотации для максимума и минимума.

Код: plt.figure(figsize=(12, 8)) yearly_avg = df_demo.groupby('Year')['Life_Expectancy'].mean() plt.plot(yearly_avg.index, yearly_avg.values, linewidth=3, color='darkblue', marker='o', markersize=4) plt.title('Средняя ожидаемая продолжительность жизни (1960-2024)', fontsize=16, fontweight='bold', pad=20) plt.xlabel('Год', fontsize=12) plt.ylabel('Средняя продолжительность жизни (лет)', fontsize=12) plt.grid(True, alpha=0.3, linestyle='--') plt.xticks(rotation=45) plt.tight_layout()

Результат: Отдельный график, показывающий общий рост средней продолжительности жизни с 1960 по 2024 год с выделением максимального и минимального значений.

Исходный размер 615x326

График 2: Динамика по отдельным странам.

Для каждой из 6 стран построена отдельная линия тренда, использованы разные цвета и маркеры для наглядности, добавлена легенда с рейтингом стран в 2024 году.

Код №1: plt.figure(figsize=(14, 8)) selected_countries = ['Япония', 'Россия', 'Индия', 'Нигерия', 'США', 'Швейцария'] colors = ['blue', 'red', 'green', 'orange', 'purple', 'brown'] markers = ['o', 's', '^', 'v', 'D', 'p'] for idx, country in enumerate(selected_countries): country_data = df_demo[df_demo['Country'] == country] country_yearly = country_data.groupby('Year')['Life_Expectancy'].mean() plt.plot(country_yearly.index, country_yearly.values, label=country, linewidth=2, color=colors[idx], marker=markers[idx], markersize=4, markevery=5) plt.title('Динамика продолжительности жизни по странам (1960-2024)', fontsize=16, fontweight='bold', pad=20) plt.xlabel('Год', fontsize=12) plt.ylabel('Продолжительность жизни (лет)', fontsize=12) plt.legend(loc='best', fontsize=10, ncol=2) plt.grid(True, alpha=0.3, linestyle='--') plt.xticks(rotation=45) last_year = df_demo['Year'].max() last_values = [] for country in selected_countries: last_val = df_demo[(df_demo['Country'] == country) & (df_demo['Year'] == last_year)]['Life_Expectancy'].mean() last_values.append((country, last_val)) last_values.sort(key=lambda x: x[1], reverse=True) info_text = f"Рейтинг стран в {last_year} году:\n" for i, (country, value) in enumerate(last_values, 1): info_text += f"{i}. {country}: {value:.1f} лет\n"

Код №2: plt.figtext(0.02, 0.02, info_text, fontsize=9, bbox=dict(boxstyle="round,pad=0.5", facecolor="lightyellow", alpha=0.8)) plt.tight_layout() plt.show() print("\n" + "=" * 60) first_year = df_demo['Year'].min() last_year = df_demo['Year'].max() print(f"СТРАНЫ С МАКСИМАЛЬНЫМ РОСТОМ ({first_year}-{last_year})") print("=" * 70) growth_data = [] for country in df_demo['Country'].unique(): country_data = df_demo[df_demo['Country'] == country] start_value = country_data[country_data['Year'] == first_year]['Life_Expectancy'].mean() end_value = country_data[country_data['Year'] == last_year]['Life_Expectancy'].mean() if not (np.isnan(start_value) or np.isnan(end_value)): growth = end_value - start_value growth_per_year = growth / (last_year - first_year) growth_data.append({ 'Страна': country, 'Рост, лет': round(growth, 1), 'Рост/год': round(growth_per_year, 3), f'{first_year} год': round(start_value, 1), f'{last_year} год': round(end_value, 1)}) growth_df = pd.DataFrame(growth_data).sort_values('Рост, лет', ascending=False) growth_df.insert(0, 'Место', range(1, len(growth_df) + 1)) print("\n📊 ТАБЛИЦА РОСТА ПРОДОЛЖИТЕЛЬНОСТИ ЖИЗНИ") print("-" * 85) table = tabulate( growth_df, headers='keys', tablefmt='fancy_grid',
showindex=False, floatfmt=(".0f", ".0f", ".1f", ".3f", ".1f", ".1f"), numalign="center", stralign="center") print(table)

Результат: Отдельный график с 6 линиями, показывающий как менялась продолжительность жизни в разных странах с 1960 по 2024 год.

Исходный размер 589x335

График 3: Сравнение стран в 2024 году. Создана горизонтальная гистограмма, страны отсортированы по значению продолжительности жизни в 2024 году, добавлены числовые значения на столбцах, отмечена средняя линия по всем странам.

Код: plt.figure(figsize=(12, 8)) last_year = df_demo['Year'].max() last_year_data = df_demo[df_demo['Year'] == last_year] last_year_avg = last_year_data.groupby('Country')['Life_Expectancy'].mean().sort_values() colors_bar = plt.cm.viridis(np.linspace(0.2, 0.9, len(last_year_avg))) bars = plt.barh(range(len(last_year_avg)), last_year_avg.values, color=colors_bar, edgecolor='black', height=0.7) plt.yticks(range(len(last_year_avg)), last_year_avg.index, fontsize=11) plt.xlabel('Продолжительность жизни (лет)', fontsize=12) plt.title(f'Сравнение стран по продолжительности жизни ({last_year} год)', fontsize=16, fontweight='bold', pad=20) plt.grid(True, alpha=0.3, axis='x') for bar, value in zip(bars, last_year_avg.values): plt.text(bar.get_width() + 0.3, bar.get_y() + bar.get_height()/2, f'{value:.1f}', va='center', fontsize=10, fontweight='bold') mean_value = last_year_avg.mean() plt.axvline(x=mean_value, color='red', linestyle='--', linewidth=2, alpha=0.7) plt.text(mean_value + 0.5, len(last_year_avg) - 0.5, f'Среднее: {mean_value:.1f} лет', color='red', fontsize=10, fontweight='bold', bbox=dict(boxstyle="round,pad=0.3", facecolor="white", alpha=0.8)) plt.tight_layout() plt.show()

Результат: График-рейтинг стран по продолжительности жизни в 2024 году в виде горизонтальных столбцов.

Исходный размер 568x382

График 4: Распределение значений. Построена гистограмма всех значений продолжительности жизни, добавлена кривая плотности распределения, отмечены линии среднего, медианы и стандартного отклонения, добавлена текстовая статистика

Код: plt.figure(figsize=(14, 10)) n, bins, patches = plt.hist(df_demo['Life_Expectancy'], bins=30, edgecolor='black', alpha=0.7, color='skyblue', density=False) from scipy.stats import gaussian_kde density = gaussian_kde(df_demo['Life_Expectancy']) xs = np.linspace(df_demo['Life_Expectancy'].min(), df_demo['Life_Expectancy'].max(), 200) plt.plot(xs, density(xs) * len(df_demo['Life_Expectancy']) * (bins[1] - bins[0]), color='red', linewidth=2, label='Кривая плотности') plt.title('Распределение значений продолжительности жизни', fontsize=18, fontweight='bold', pad=22) plt.xlabel('Ожидаемая продолжительность жизни (лет)', fontsize=14) plt.ylabel('Частота', fontsize=14) plt.grid(True, alpha=0.3) mean_val = df_demo['Life_Expectancy'].mean() median_val = df_demo['Life_Expectancy'].median() std_val = df_demo['Life_Expectancy'].std() plt.axvline(x=mean_val, color='green', linestyle='-', linewidth=2, alpha=0.7, label=f'Среднее: {mean_val:.1f}') plt.axvline(x=median_val, color='orange', linestyle='--', linewidth=2, alpha=0.7, label=f'Медиана: {median_val:.1f}') plt.axvline(x=mean_val + std_val, color='purple', linestyle=':', linewidth=1.5, alpha=0.5) plt.axvline(x=mean_val - std_val, color='purple', linestyle=':', linewidth=1.5, alpha=0.5) plt.legend(fontsize=10) plt.text(0.02, 0.98, f'Статистика распределения:\n' f'• Среднее: {mean_val:.1f}\n' f'• Медиана: {median_val:.1f}\n' f'• Ст. отклонение: {std_val:.1f}\n' f'• Минимум: {df_demo["Life_Expectancy"].min():.1f}\n' f'• Максимум: {df_demo["Life_Expectancy"].max():.1f}\n' f'• Количество: {len(df_demo)}', transform=plt.gca().transAxes, fontsize=10, verticalalignment='top', bbox=dict(boxstyle="round,pad=0.5", facecolor="lightyellow", alpha=0.8))

plt.tight_layout() plt.show() print("\n" + "=" * 70) first_year = df_demo['Year'].min() last_year = df_demo['Year'].max() print(f"СТРАНЫ С МАКСИМАЛЬНЫМ РОСТОМ ({first_year}-{last_year})") print("=" * 70) growth_data = [] for country in df_demo['Country'].unique(): country_data = df_demo[df_demo['Country'] == country] start_value = country_data[country_data['Year'] == first_year]['Life_Expectancy'].mean() end_value = country_data[country_data['Year'] == last_year]['Life_Expectancy'].mean() if not (np.isnan(start_value) or np.isnan(end_value)): growth = end_value - start_value growth_data.append({'Country': country, 'Growth': round(growth, 1)}) growth_df = pd.DataFrame(growth_data).sort_values('Growth', ascending=False) print("\n📊 ТАБЛИЦА РОСТА:") print(growth_df.to_string(index=False))

Результат: Гистограмма показывает, как распределены все значения продолжительности жизни в наборе данных.

Исходный размер 554x394

Этап 4: Анализ роста стран. Таблица роста стран, для каждой страны рассчитан рост продолжительности жизни с 1960 по 2024 год, добавлен расчет годового роста, создана таблица с ранжированием.

Результат: text + таблица

Исходный размер 2405x853
Ожидаемая продолжительность жизни в мире
Проект создан 16.01.2026
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше