Как мне связать мои значения с конкретным столбцом шейп-файла для раскрашивания карты в Python?

Вопрос или проблема

Я пытаюсь раскрасить карту на основе значений из файла csv. Один шейп-файл работает очень хорошо, связывая csv с шейп-файлом на основе заголовка “ADM1_EN”, как показано в примерах строк 1 и 2 ниже

         ADM1_EN ADM1_PCODE ADM1_TYPE                                           geometry
0          Berea        LSD  District  POLYGON ((27.98656 -28.94791, 27.98670 -28.948...

Другой шейп-файл, с другой стороны, трудно обрабатывать

               shapeName shapeISO                  shapeID shapeGroup shapeType                                           geometry
0     Mokhotlong District     LS-J  63558799B62052207870559        LSO      ADM1  POLYGON ((28.79248 -28.90741, 28.79586 -28.908...

Я пытался связать по shapeName, это не сработало. Я пытался связать по колонке=2, без успеха. Помощь будет оценена.

Ответ или решение

Чтобы связать значения из CSV-файла с определенным столбцом шейп-файла для окрашивания карты в Python, потребуется несколько шагов. Давайте рассмотрим процесс более подробно.

Шаг 1: Подготовка данных

Прежде чем начинать, убедитесь, что у вас есть два файла: ваш CSV-файл с данными и шейп-файлы, которые вы планируете использовать. Вам также понадобятся библиотеки для работы с геоданными в Python, такие как geopandas, pandas и matplotlib.

pip install geopandas pandas matplotlib

Шаг 2: Загрузка данных

Импортируйте необходимые библиотеки в вашем Python-скрипте.

import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt

Загрузите ваш шейп-файл и CSV-файл:

# Загрузка шейп-файла
shape_file_path_1 = "path_to_your_first_shapefile.shp"
shape_file_path_2 = "path_to_your_second_shapefile.shp"
csv_file_path = "path_to_your_csv_file.csv"

gdf1 = gpd.read_file(shape_file_path_1)
gdf2 = gpd.read_file(shape_file_path_2)
csv_data = pd.read_csv(csv_file_path)

Шаг 3: Проверка и подготовка названий для связи

Ваша задача — связать данные из CSV-файла с шейп-файлом. В первом шейп-файле связь осуществляется по столбцу ADM1_EN, во втором – по shapeName. Для успешного связывания необходимо проверить наличие совпадений между этими столбцами.

Выводим уникальные значения для проверки:

print(gdf2['shapeName'].unique())
print(csv_data['column_name'])  # Замените 'column_name' на нужное имя столбца из вашего CSV

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

# Привести все значения к нижнему регистру и убрать пробелы
csv_data['column_name'] = csv_data['column_name'].str.lower().str.strip()
gdf2['shapeName'] = gdf2['shapeName'].str.lower().str.strip()

Шаг 4: Объединение данных

Теперь, когда данные подготовлены, выполните объединение с использованием метода merge. Вам нужно будет выбрать столбцы, по которым будет производиться связь.

# Объединение по shapeName
merged_gdf = gdf2.merge(csv_data, left_on='shapeName', right_on='column_name', how='left')

Шаг 5: Визуализация данных

После успешного объединения данных вы готовы к визуализации. Вы можете использовать метод plot для создания карты. Например, чтобы раскрасить карту на основе значения из определенного столбца:

# Отображение карты с использованием столбца для раскраски
merged_gdf.plot(column='value_column', cmap='OrRd', legend=True)

plt.title('Map with Values from CSV')
plt.show()

Замените 'value_column' на название столбца из вашего объединенного DataFrame, который вы хотите использовать для окраски карты.

Заключение

Объединение данных из шейп-файлов и CSV в Python требует тщательной подготовки данных и правильных функций для объединения. Отделите внимание на предобработку, чтобы избежать проблем с несоответствием названий. Следуя этим шагам, вы сможете успешно создать карту с использованием ваших данных.

Если у вас есть дополнительные вопросы или проблемы, не стесняйтесь уточнять!

Оцените материал
Добавить комментарий

Капча загружается...