Картограф Альтаира не отображается в приложении с потоковой подсветкой на Snowflake и проблема с цветовым кодированием

Я пытаюсь создать картографическую карту в приложении с потоковой подсветкой на Snowflake.

Помимо снежинки, я могу использовать следующий код для визуализации карты, на которой только один округ в Алабаме имеет цветовую кодировку.

import streamlit as st
import altair as alt
import pandas as pd
from vega_datasets import data

us_counties = alt.topo_feature(data.us_10m.url, "counties")

dist_background = alt.Chart(us_counties).mark_geoshape(fill = "lightgray", stroke = "white").project("albersUsa")

df = {"FIPS_CD": 1001,
      "FIPS_COLOR": 1}

df = pd.DataFrame(df, index=[0])

dist_foreground = (
    alt.Chart(us_counties)
    .mark_geoshape()
    .transform_lookup(lookup = "id", from_=alt.LookupData(df, "FIPS_CD", ["FIPS_COLOR"]))
    .encode(color=alt.Color("FIPS_COLOR:Q"))
    .project(type = "albersUsa")
)

dist_chart = alt.layer(dist_background, dist_foreground).properties(width=800, height=800)
st.altair_chart(dist_chart, use_container_width=True)

Однако, если я попытаюсь запустить тот же код в приложении Streamlit в Snowflake, он вообще не будет отображаться. Я получаю пустое место, где отображается только легенда, но в Snowflake легенда показывает «NaN», а при запуске кода вне среды Snowflake — 1. Я вижу, что данные загрузились, нажав на многоточие рядом с графиком и перейдя в редактор vega. Когда я это делаю, я вижу на графике всю страну, но цветового кодирования нет.

Что Снежинка делает за кулисами, что все портит? В Snowflake я использую следующие параметры пакета:

  • Альтаир 5.0.1
  • вега-наборы данных 0.9.0
  • питон 3.8
  • а также «новейшие» пакеты стримлайт и сноупарк.

Позволяет ли Snowflake получить доступ к URL-адресу из вашего блокнота? Может это как-то блокирует data.us_10m.url? Вы можете попробовать загрузить набор данных и сохранить его локально на Snowflake, чтобы сравнить, или попробовать один из других примеров в галерее, в котором используется URL-адрес, а не геодиаграмма.

joelostblom 13.04.2024 18:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что Altair пытается загрузить файл topojson из внешнего CDN во внешнем интерфейсе, что блокируется политикой безопасности контента, установленной Snowflake (которая не позволяет Streamlit в приложениях Snowflake получать доступ к произвольным внешним доменам по соображениям безопасности).

Если вы откроете консоль разработчика браузера во время запуска приложения, вы должны увидеть журнал, подобный этому, который указывает на проблему:

Refused to connect to 'https://cdn.jsdelivr.net/npm/[email protected]/data/us-10m.json' because it violates the document's Content Security Policy.

Доступный сегодня обходной путь — использовать локальную копию файла topojson на этапе приложения — я не эксперт в топографических функциях Altair, но знаю, например, что plotly.express.choropleth_mapbox поддерживает это.

Кроме того, чтобы воспроизвести предоставленный пример кода, вам нужно добавить from vega_datasets import data.

Спасибо за это. Ошибка, о которой вы упомянули, действительно была проблемой. В итоге я подготовил приложение, но мне пришлось использовать pydeck, чтобы заставить картографию работать. И у Альтаира, и у Plotly были проблемы... казалось бы, проблемы с построением картоплетов на Snowflake хорошо задокументированы на их доске помощи, но никакого решения предложено не было. Кажется, Пайдек работает.

jh_ 17.04.2024 23:17

Другие вопросы по теме