Kepler.gl — инструмент для визуализации геоданных.

Kepler.gl — инструмент для визуализации геоданных.

https://t.me/python_job_interview

Если вы когда-либо работали с геоданными, то знаете, насколько нецелесообразно просматривать их в формате CSV, таблицы или JSON. Геоданные необходимо нанести на карту для последующего изучения и выявления закономерностей. Процесс сбора информации не ограничивается только этими действиями и обязательно требует выполнения качественного анализа или/и запуска моделей МО. 

Введение в Kepler.gl

Kepler.gl  — проект от Uber с открытым ПО (ссылка на GitHub). Он позволяет создавать высокопроизводительные веб-приложения, обрабатывающие любые форматы данных. Этот инструмент, разработанный на базе Mapbox, отлично справляется с большими датасетами и обеспечивает гибкие настройки визуализации. 

В качестве основных строительных блоков Kepler.gl использует слои, позволяющие создавать интерактивные карты. С этими слоями вы можете выполнять разные действия: добавлять, удалять, показывать, скрывать, менять их внешний вид. Ниже представлен базовый пример с применением общедоступного датасета по авиарейсам, взятым с сайта data.world:

Как видно, вы можете задействовать слои сеток, точек, дуг/линий, многоугольников, а также создавать 3D-карту. В ваше распоряжение предоставляются разные способы детализированной фильтрации в той мере, в которой позволяет датасет: 

Рассматриваемый в статье датасет содержит всего 37042 строки. Но опыт показывает, что Kepler.gl успешно обрабатывает датасеты с миллионами строк. Для повышения производительности геовычисления выполняются с ускорением GPU. 

Способы применения Kepler.gl

  • Загрузить датасет на демостраницу Kepler.gl. Воспользуйтесь указанным способом, если хотите получить представление о работе данного инструмента или быстро визуализировать средний объем неконфиденциальных данных. 
  • Использовать в качестве компонента React. Рекомендован в случае необходимости встроить данную функциональность в существующий проект. Так вы получаете больше возможностей для управления состоянием, потоком данных, внешним видом и т. д. Просто выполняем: 
npm install kepler.gl
  • Задействовать как модуль Python. Данный способ оптимален для тех, кто: 1) не является экспертом в области фронтенд-разработки; 2) хочет быстро получить результаты, не заморачиваясь со множеством сложных компонентов UI, помимо карт. Для начала выполняем:
pip install keplergl

Далее мы рассмотрим 3-й способ. Вы увидите, насколько быстро можно создать и запустить в работу впечатляющее MVP-приложение, а также наглядно представить данные нетерпеливым клиентам и заинтересованным сторонам проекта. 

Создание веб-приложения с помощью модуля Kepler в Python 

Для дальнейшей работы требуются базовые знания Python, Pandas и FastAPI.

1) Импортируем все необходимое: 

import uvicorn
import pandas as pd
from keplergl import KeplerGl 
from fastapi import FastAPI
from fastapi.responses import HTMLResponse

2) Загружаем данные:

# загрузка файла csv
df = pd.read_csv('my_data.csv')
# или файла json
df = pd.read_json('my_data.json')

Скорее всего, потребуется загрузка не одного, а нескольких файлов. Поэтому сделаем это в цикле и объединим датафреймы dataframes, полученные из каждого файла, следующим образом:

all_data = pf.concat([all_data, df])

3) Инициализируем карту Kepler.gl:

kepler = KeplerGl(config=my_map_config)

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

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

Приведем пример конфигурации: 

config = {
  "version": "v1",
  "config": {
     "visState": {
        "filters": [
            {
              "dataId": ["my_data"],
              "id": "11111",
              "name": ["some_col_name"],
              "type": "multiSelect",
              "value": [],
              "enlarged": False,
              "plotType": "histogram",
              "animationWindow": "free",
              "yAxis": None,
              "speed": 1,
            }
        ],
        "layers": [
            {
              "id": "22222",
              "type": "point",
              "config": {
                  "dataId": "my_data",
                  "label": "my_data",
                  "color": [30, 150, 190],
                  "highlightColor": [252, 242, 26, 255],
                  "isVisible": True,
                  "visConfig": {
                      "radius": 5,
                      "fixedRadius": False,
                      "opacity": 0.8,
                      "outline": False,
                      "thickness": 2,
                      "strokeColor": None,
                       ...
                   },
                   "hidden": False
              }
           }  
         ],
         "interactionConfig": {
             "tooltip": {
                 "fieldsToShow": {
                     "my_data": [
                         {"name": "col_1", "format": None},
                         {"name": "col_2", "format": None}  
                    ]
                 },
                 "compareMode": False,
                 "compareType": "absolute",
                 "enabled": True,
             },
             "brush": {"size": 0.5, "enabled": False},
             "geocoder": {"enabled": False},
             "coordinate": {"enabled": False},
         },
         "layerBlending": "normal",
         "splitMaps": [],
         "animationConfig": {"currentTime": None, "speed": 1},
     },
     "mapState": {
         "bearing": 0,
         "dragRotate": False,
         "latitude": 40.710394,
         "longitude": -74.000288,
         "pitch": 0,
         "zoom": 12.41,
         "isSplit": False,
     },
     "mapStyle": {
         "styleType": "dark",
         "topLayerGroups": {},
         "visibleLayerGroups": {
             "label": True,
             "road": True,
             "border": False,
             "building": True,
             "water": True,
             "land": True,
             "3d building": False,
         },
         "threeDBuildingColor": [
             9.665468314072013,
             17.18305478057247,
             31.1442867897876,
         ],
         "mapStyles": {},
      },
  },
}

Главным образом код содержит 3 основных раздела: visStatemapState и mapStyle.

MapState определяет место на карте мира, которое является отправной точкой при каждой перезагрузке страницы, начальным/предустановленным местоположением. 

MapStyles устанавливает общую тему приложения KeplerGl и включает такие предустановленные варианты, как темный, приглушенный темный, светлый, приглушенный светлый и сопутствующие им. 

VizState представляет для нас больший интерес. Он определяет слои, будь то слои точек, шестиугольников, линий и т. д., и датасет для каждого из них. Обратите внимание, что dataId выделен жирным шрифтом. Именно так данные связываются с конфигурацией, и мы наглядно это рассмотрим в следующем пункте. Допускается определять фильтры, применяемые для одного или более датасетов и установленные на одном или нескольких полях в этих датасетах. Помимо этого, здесь вы можете определить, что и как вы хотите показать во всплывающей подсказке (или другой интерактивной опции). 

4) Передаем данные в Kepler:

# указанное здесь имя должно соответствовать dataId в конфигурации 
kepler.add_data(data=all_data, name="my_data")

5) Преобразуем карту в HTML:

kepler_html = kepler._repr_html_()

6) Запускаем приложение и возвращаем сгенерированный HTML:

app = FastAPI()@app.get("/")
async def index():
   return HTMLResponse(content=kepler_html, status_code=200)if __name__ == "__main__":
   uvicorn.run("web_app:app", host="X", port="X")

7) Наслаждаемся результатами работы!

https://t.me/ai_machinelearning_big_data

источник

Report Page