
Введение
Набор данных включает в себя основные сведения о растениях, произрастающих на территории парка. Сведения взяты с сайта «Портал открытых данных правительства Москвы». Парк «Зарядье» — это уникальный парк, построенный в историческом центре Москвы. Но он не просто парк, это новый тип общественного пространства, созданный международной командой архитекторов, инженеров, ландшафтных дизайнеров и других экспертов. Здесь природа и технологии, просвещение и развлечения, история и современность соединяются и дополняют друг друга. Парк «Зарядье» — это остров тишины и спокойствия, где горожане могут отдохнуть от ритма мегаполиса. Все культурно-развлекательные объекты и новые технологии деликатно интегрированы в ландшафт. Холмы и низины покрыты лесом, степными ландшафтами и пойменными лугами, которые воссоздают разные природные зоны страны, от Крайнего Севера до степных районов. Ботаническая коллекция парка призвана продемонстрировать всё природное разнообразие России. Парк является уникальным ландшафтным проектом не только для столицы, но и для всей страны в целом!
Этапы работы
1. Загрузка данных: Данные были загружены из Excel-файла с помощью библиотеки pandas.
import pandas as pd df = pd.read_excel ('data-60861-04.09.2024.xlsx')
2. Предварительный анализ: Проведён обзор структуры данных, поиск пропусков и приведение данных к единому формату.
df.info () df = df.dropna (subset=['LocationPlace', 'FloweringMonth']) df['FloweringMonth'] = df['FloweringMonth'].str.strip ().str.capitalize ()
3. Анализ разнообразия:
Подсчитано количество уникальных видов растений в парке и их распределение по зонам.
unique_plants = df['Name'].nunique () print (f’Количество уникальных видов растений: {unique_plants}')
zone_diversity = df.groupby ('LandscapingZone')['Name'].nunique ().sort_values (ascending=False) print (zone_diversity)
4. Анализ распределения по зонам: Построена столбчатая диаграмма для подсчёта количества растений в каждой ландшафтной зоне.
plt.figure (figsize=(12, 8), facecolor='#FAF3E0') sns.barplot (x=df['LandscapingZone'].value_counts ().index, y=df['LandscapingZone'].value_counts ().values, palette=sns.color_palette («YlGn», len (df['LandscapingZone'].unique ())))
plt.title ('Распределение растений по ландшафтным зонам', fontsize=18, color='#2E4600', weight='bold') plt.xlabel ('Ландшафтная зона', fontsize=14, color='#2E4600') plt.ylabel ('Количество растений', fontsize=14, color='#2E4600') plt.xticks (rotation=45, ha='right', color='#2E4600') plt.yticks (color='#2E4600') plt.grid (axis='y', linestyle='--', linewidth=0.5, color='#D6E4C0') plt.show ()
5. Анализ периода цветения: Создана столбчатая диаграмма для отображения количества растений, цветущих в разные месяцы.
months = [ 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь' ]
df['ProsperityPeriod'] = df['ProsperityPeriod'].str.strip ().str.replace ('\n', '')
monthly_counts = {month: 0 for month in months} for period in df['ProsperityPeriod'].dropna (): found = re.findall ('|'.join (months), period.lower ()) if found: start_month = months.index (found[0]) end_month = months.index (found[-1]) for i in range (start_month, end_month + 1): monthly_counts[months[i]] += 1
sns.set_theme (style="whitegrid», palette="YlGn»)
plt.figure (figsize=(12, 8), facecolor='#FAF3E0') sns.barplot (x=list (monthly_counts.keys ()), y=list (monthly_counts.values ()), palette=sns.color_palette («YlGn», len (months)))
plt.title ('Распределение растений по периоду цветения', fontsize=18, color='#2E4600', weight='bold') plt.xlabel ('Месяцы', fontsize=14, color='#2E4600') plt.ylabel ('Количество растений', fontsize=14, color='#2E4600') plt.xticks (rotation=45, ha='right', color='#2E4600') plt.yticks (color='#2E4600') plt.grid (axis='y', linestyle='--', linewidth=0.5, color='#D6E4C0') plt.show ()
6. Круговая диаграмма по месту расположения: Построена круговая диаграмма для отображения доли растений по различным местам расположения.
location_counts = df['LocationPlace'].value_counts () total = location_counts.sum () filtered_counts = location_counts[location_counts / total >= 0.05] other_count = location_counts[location_counts / total < 0.05].sum () filtered_counts['Другие'] = other_count
plt.figure (figsize=(8, 8)) filtered_counts.plot (kind='pie', autopct='%1.1f%%', startangle=140, colors=forest_colors[: len (filtered_counts)], wedgeprops={'edgecolor': 'black'}) plt.title ('Доля растений по месту расположения', fontsize=14, color='#2e4600') plt.ylabel ('') plt.show ()
7. Частотный анализ описаний: Выполнен анализ текстовых описаний растений для определения самых часто встречающихся слов.
from wordcloud import WordCloud text = ' '.join (df['Description'].dropna ().astype (str)) wordcloud = WordCloud (width=800, height=400, background_color='white', max_words=100, colormap='Greens').generate (text) plt.figure (figsize=(10, 6)) plt.imshow (wordcloud, interpolation='bilinear') plt.axis ('off') plt.show ()
Стилизация
Графики стилизованы в пастельных природных тонах: различные оттенки зелёного и жёлтого для создания лесной атмосферы. Использован шрифт с мягкими очертаниями для сохранения естественности визуализации.
Идеи для цветовых схем были взяты из фотографий самого парка и его природных зон, где зелень травы контрастирует с яркими цветами растений.
Итоговые графики
Для визуализации данных были выбраны различные типы графиков: - Столбчатые диаграммы — для наглядного представления распределения растений по ландшафтным зонам и периодам цветения, так как они позволяют легко сравнить количество растений в разных категориях. - Круговая диаграмма — для отображения доли растений по месту расположения, что помогает быстро оценить соотношения между различными зонами. - Облако слов — для частотного анализа описаний растений, что даёт возможность визуально выделить самые часто встречающиеся термины.
Распределение растений по ландшафтным зонам
Анализ периода цветения
Круговая диаграмма по месту расположения
Частотный анализ описаний
Исходные данные и код
Использование нейросетей
Для работы над проектом частично использовался ChatGPT 4O (https://chat.openai.com/) для генерации отдельных фрагментов кода и поиска оптимальных решений при анализе данных. Например, при создании сложных визуализаций и написании регулярных выражений для обработки периода цветения.
Пример промпта: «Напиши код на Python с использованием pandas и matplotlib для анализа периода цветения растений. Нужно подсчитать количество растений, цветущих в каждый месяц, и построить столбчатую диаграмму с использованием зелёных оттенков.»
Вывод
Анализ позволил получить представление о разнообразии растительности в парке «Зарядье», выявить основные группы растений, их периоды цветения и частоту встречаемости в различных зонах. Это даёт ценные данные для дальнейшего ухода за растениями и планирования новых посадок, а также для популяризации парка среди посетителей.