
ВВОДНАЯ ЧАСТЬ

Картина Александра Макса Кестера.
СТАТИСТИКА ДАННЫХ
Для данного исследования была взята следующая статистика — Wings of Wisdom: Deep Dive into Waterfowl Species.
Я выбрала данные из открытого набора данных на Kaggle. Внутри есть детальная информация о характеристиках каждой птицы, особенностях размножения, пищевых предпочтениях, динамике популяции и природоохранном статусе.

Картина Александра Макса Кестера.
ЦЕННОСТЬ
Итак, мой проект посвящен анализу данных о гусях и им подобных водоплавающих птицах, потому что гуси и куры для меня крайне важны в этой жизни. Именно по этой причине мне стало очень интересно собрать данные воедино и написать о них.
ВИДЫ ИСПОЛЬЗУЕМЫХ ДИАГРАММ
В своём проекте я буду использовать такие виды диаграмм как: - Линейные диаграммы - Гистограммы - Столбчатые диаграммы - Круговые диаграммы - Тепловые карты - Диаграммы рассеяния
МОИ ЭТАПЫ РАБОТЫ
Картина Александра Макса Кестера.
ОБРАБОТКА ДАННЫХ
Чтобы получить структурированные данные таблицы и с их помощью создавать диаграммы я использую библиотеку Pandas на языке Python. Скачав и использовав программу Anaconda в среде Spider я вывела данные таблицы и создала несколько диаграмм, которые будут описаны ниже.
import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
print (df)
id name type latin_name
0 1 American Black Duck Dabbling Duck Anas rubripes
1 2 American Coot Other Fulica americana
2 3 American Wigeon Dabbling Duck Mareca americana
3 4 Barnacle Goose Goose Branta leucopsis
4 5 Barrow’s Goldeneye Diving Duck Bucephala islandica
5 6 Black Scoter Diving Duck Melanitta americana
6 7 Black-bellied Whistling-Duck Other Dendrocygna autumnalis
7 8 Blue-winged Teal Dabbling Duck Spatula discors
8 9 Brant Goose Branta bernicla
9 10 Bufflehead Diving Duck Bucephala albeola
m_avg_length_inches f_avg_length_inches m_avg_weight_lbs
0 22.0 21.0 2.70
1 16.2 16.2 1.50
2 20.0 19.0 1.80
3 27.0 23.5 4.03
4 19.2 17.0 2.13
5 19.7 18.5 2.50
6 19.4 19.0 1.80
7 16.0 14.0 1.00
8 25.0 23.0 3.40
9 15.0 13.0 1.10
f_avg_weight_lbs life_span_year egg_avg 0 2.40 10-15 9 1 1.20 2-3 6 2 1.60 5-10 9 3 3.57 10-20 4 4 1.31 10-15 6 5 2.20 10-15 8 6 1.85 10-15 13 7 0.80 3-5 10 8 3.10 5-10 5 9 0.70 3-5 9
ОБРАБОТКА ДАННЫХ В ДИАГРАММАХ
Я работал в приложении «Google Colab», так как в среде Spyder у меня не получилось создать диаграмму.
Все итоговые диаграммы прикреплены в самом конце проекта. Написанный код и база данных, ведущая на гугл диск, будут также прикреплены в самом конце проекта.
ДИАГРАММА № 1
С помощью гистограммы я продемонстрирую следующее:
Средний вес и длина птиц: Ось X: Вид птицы. Ось Y: Средний вес (в фунтах) или длина (в дюймах).
Гистограмма покажет распределение среднего веса и длины различных видов водоплавающих птиц.
Продолжительность жизни: Ось X: Вид птицы. Ось Y: Продолжительность жизни (в годах).
Гистограмма покажет распределение продолжительности жизни различных видов водоплавающих птиц.
import matplotlib.pyplot as plt import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
plt.figure (figsize=(10, 6)) plt.bar (df['name'], df['m_avg_weight_lbs'], color='skyblue') plt.xlabel ('Вид птицы') plt.ylabel ('Средний вес (фунты)') plt.title ('Средний вес водоплавающих птиц') plt.xticks (rotation=90) plt.tight_layout () plt.show ()
plt.figure (figsize=(10, 6)) plt.bar (df['name'], df['m_avg_length_inches'], color='lightgreen') plt.xlabel ('Вид птицы') plt.ylabel ('Средняя длина (дюймы)') plt.title ('Средняя длина водоплавающих птиц') plt.xticks (rotation=90) plt.tight_layout () plt.show ()
plt.figure (figsize=(10, 6)) plt.bar (df['name'], df['life_span_year'].astype (str).str.split ('-').str[0].astype (int), color='lightcoral') plt.xlabel ('Вид птицы') plt.ylabel ('Продолжительность жизни (годы)') plt.title ('Продолжительность жизни водоплавающих птиц') plt.xticks (rotation=90) plt.tight_layout () plt.show ()
Здесь используется библиотека pandas для работы с таблицами данных.
Далее создается словарь data, который содержит столбцы и их значения.
Позже создаю DataFrame df из словаря data.
И как итог — вывожу таблицу на экран с помощью функции print (df).
ДИАГРАММА № 2
С помощью круговой диаграммы я продемонстрирую следующее
Типы водоплавающих птиц: Секторы: Процентное соотношение различных типов водоплавающих птиц (например, утки, гуси, лебеди).
Круговая диаграмма покажет распределение видов водоплавающих птиц по типам.
Статус охраны: Секторы: Процентное соотношение видов с различными статусами охраны (например, Least Concern, Vulnerable, Endangered).
Круговая диаграмма покажет распределение видов водоплавающих птиц по статусам охраны.
import matplotlib.pyplot as plt import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
type_counts = df['type'].value_counts ()
conservation_status_counts = pd.Series ({'Least Concern': 5, 'Vulnerable': 3, 'Endangered': 2})
plt.figure (figsize=(8, 8)) plt.pie (type_counts, labels=type_counts.index, autopct='%1.1f%%', startangle=140) plt.title ('Распределение типов водоплавающих птиц') plt.show ()
plt.figure (figsize=(8, 8)) plt.pie (conservation_status_counts, labels=conservation_status_counts.index, autopct='%1.1f%%', startangle=140) plt.title ('Распределение видов водоплавающих птиц по статусам охраны') plt.show ()
Здесь используется matplotlib для создания графиков и pandas для работы с данными.
Создается словарь data, который содержит столбцы и их значения.
Из словаря data создаем DataFrame df.
Используется метод value_counts () для подсчета количества каждого типа водоплавающих птиц.
Я создаю пример данных для статусов охраны (в реальном коде это столбец в DataFrame).
С помощью функции plt.pie () создается круговая диаграмма.
Так же создается вторая круговая диаграмма для статусов охраны.
ДИАГРАММА № 3
С помощью линейной диаграммы я продемонстрирую следующее:
Изменение численности популяции: Ось X: Время (годы). Ось Y: Численность популяции.
Линейная диаграмма покажет динамику изменения численности популяции различных видов водоплавающих птиц.
import matplotlib.pyplot as plt import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
years = [2010, 2015, 2020, 2025] population_data = { 'American Black Duck': [1000, 1200, 1300, 1400], 'American Coot': [800, 900, 1000, 1100], 'American Wigeon': [1500, 1600, 1700, 1800], # Добавьте данные для других видов водоплавающих птиц }
population_df = pd.DataFrame (population_data, index=years)
plt.figure (figsize=(10, 6)) for species in population_df.columns: plt.plot (population_df.index, population_df[species], label=species)
plt.xlabel ('Год') plt.ylabel ('Численность популяции') plt.title ('Динамика изменения численности популяции водоплавающих птиц') plt.legend () plt.grid (True) plt.show ()
Используется matplotlib для создания графиков и pandas для работы с данными.
Создается словарь data, который содержит столбцы и их значения.
Создается DataFrame df из словаря data.
Далее создается пример данных для изменения численности популяции за несколько лет.
Создается DataFrame population_df из данных о численности популяции.
И после я создаю линейную диаграмму с помощью функции plt.plot () для каждого вида водоплавающих птиц.
ДИАГРАММА № 4
С помощью тепловой карты я продемонстрирую следующее
Места обитания и миграции: Ось X: Географические регионы. Ось Y: Виды водоплавающих птиц. Цвет: Интенсивность использования региона видом.
Тепловая карта покажет распределение видов водоплавающих птиц по географическим регионам.
import seaborn as sns import pandas as pd import matplotlib.pyplot as plt
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
regions = ['North America', 'South America', 'Europe', 'Asia', 'Africa'] species = df['name'].tolist ()
import numpy as np np.random.seed (0) habitat_data = np.random.rand (len (species), len (regions)) * 100
habitat_df = pd.DataFrame (habitat_data, index=species, columns=regions)
plt.figure (figsize=(10, 8)) sns.heatmap (habitat_df, annot=True, fmt='.0f', cmap='YlGnBu', linewidths=.5) plt.xlabel ('Географические регионы') plt.ylabel ('Виды водоплавающих птиц') plt.title ('Распределение видов водоплавающих птиц по географическим регионам') plt.show ()
Здесь используется seaborn для создания тепловой карты, pandas для работы с данными и matplotlib для отображения графика.
Далее создается словарь data, который содержит столбцы и их значения.
Создается DataFrame df из словаря data.
Создается пример данных о распределении видов водоплавающих птиц по географическим регионам.
Я создаю DataFrame habitat_df из данных о распределении видов по регионам.
И последнее, создается тепловая карта с помощью функции sns.heatmap () из библиотеки seaborn.
ДИАГРАММА № 5
С помощью диаграммы рассеяния я продемонстрирую следующее:
Средний вес и длина: Ось X: Средний вес (в фунтах). Ось Y: Средняя длина (в дюймах). Цвет: Тип водоплавающей птицы.
Диаграмма рассеяния покажет корреляцию между средним весом и длиной различных видов водоплавающих птиц.
import matplotlib.pyplot as plt import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
plt.figure (figsize=(10, 6)) colors = {'Dabbling Duck': 'blue', 'Other': 'green', 'Goose': 'red', 'Diving Duck': 'purple'} for t in df['type'].unique (): subset = df[df['type'] == t] plt.scatter (subset['m_avg_weight_lbs'], subset['m_avg_length_inches'], color=colors[t], label=t)
plt.xlabel ('Средний вес (фунты)') plt.ylabel ('Средняя длина (дюймы)') plt.title ('Корреляция между средним весом и длиной водоплавающих птиц') plt.legend () plt.grid (True) plt.show ()
Используется matplotlib для создания графиков и pandas для работы с данными.
Создается словарь data, который содержит столбцы и их значения.
Создается DataFrame df из словаря data.
Создается диаграмма рассеяния с помощью функции plt.scatter (). Для каждого типа водоплавающей птицы используются разные цвета.
Задаются метки для осей и заголовок для диаграммы.
Добавляю легенду для обозначения типов водоплавающих птиц.
ДИАГРАММА № 6
С помощью столбчатой диаграммы я продемонстрирую следующее:
Среднее количество яиц: Ось X: Вид птицы. Ось Y: Среднее количество яиц.
Столбчатая диаграмма покажет распределение среднего количества яиц, откладываемых различными видами водоплавающих птиц.
import matplotlib.pyplot as plt import pandas as pd
data = { 'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name': ['American Black Duck', 'American Coot', 'American Wigeon', 'Barnacle Goose', 'Barrow's Goldeneye', 'Black Scoter', 'Black-bellied Whistling-Duck', 'Blue-winged Teal', 'Brant', 'Bufflehead'], 'type': ['Dabbling Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck', 'Diving Duck', 'Other', 'Dabbling Duck', 'Goose', 'Diving Duck'], 'latin_name': ['Anas rubripes', 'Fulica americana', 'Mareca americana', 'Branta leucopsis', 'Bucephala islandica', 'Melanitta americana', 'Dendrocygna autumnalis', 'Spatula discors', 'Branta bernicla', 'Bucephala albeola'], 'm_avg_length_inches': [22, 16.2, 20, 27.0, 19.2, 19.7, 19.4, 16, 25, 15], 'f_avg_length_inches': [21, 16.2, 19, 23.5, 17, 18.5, 19, 14, 23, 13], 'm_avg_weight_lbs': [2.7, 1.5, 1.8, 4.03, 2.13, 2.5, 1.8, 1, 3.4, 1.1], 'f_avg_weight_lbs': [2.4, 1.2, 1.6, 3.57, 1.31, 2.2, 1.85, 0.8, 3.1, 0.7], 'life_span_year': ['10-15', '2-3', '5-10', '10-20', '10-15', '10-15', '10-15', '3-5', '5-10', '3-5'], 'egg_avg': [9, 6, 9, 4, 6, 8, 13, 10, 5, 9] }
df = pd.DataFrame (data)
plt.figure (figsize=(10, 6)) plt.bar (df['name'], df['egg_avg'], color='skyblue') plt.xlabel ('Вид птицы') plt.ylabel ('Среднее количество яиц') plt.title ('Среднее количество яиц водоплавающих птиц') plt.xticks (rotation=90) plt.tight_layout () plt.show ()
Используется matplotlib для создания графиков и pandas для работы с данными.
Создается словарь data, который содержит столбцы и их значения.
Создается DataFrame df из словаря data.
Создается столбчатая диаграмма с помощью функции plt.bar ().
Задаются метки для осей и заголовок для диаграммы.
Используется plt.xticks (rotation=90) для поворота меток на оси X, чтобы они были читаемыми.
НЕЙРОСЕТИ
Картина Александра Макса Кестера.
В своём проекте я использовала такие нейросети как:
- Чат GPT «Гигачат» https://giga.chat/
Это бесплатная нейросеть, которая помогала с поиском и анализом данных.
ОПИСАНИЕ ПРИМЕНЕНИЯ ГЕНЕРАТИВНОЙ МОДЕЛИ
Я использовала нейросеть «Гигачат». Моей целью его использования было найти информацию о сайтах, которые могут предоставить детальную статистику о водоплавающих птицах.
СТИЛИЗАЦИЯ ГРАФИКИ
Я создала шесть видов диаграмм. Я просто одержима этими птицами, и именно поэтому решила создать исследование на такую тему.
СТАТИСТИЧЕСКИЕ МЕТОДЫ
Картина Александра Макса Кестера.
В анализе статистики я использовала такие данные, как: - Описательная статистика - Визуализация данных - Создание диаграмм
ОПИСАТЕЛЬНАЯ СТАТИСТИКА
Я использовала для изучения существующих данных в оригинальной таблице, и далее для выборочных данных в своём проекте.
ВИЗУАЛИЗАЦИЯ ДАННЫХ
Я визуализировала выбранные мною данные в одну структуру и создала диаграммы, для лучшей ориентировки.
СОЗДАНИЕ ДИАГРАММ
Было создано шесть видов разных диаграмм, код которых был описан выше, готовый же результат, размещен в конце проекта.
ИТОГОВЫЕ ГРАФИКИ И КОД
Картина Александра Макса Кестера.