Улитка по клеткам
Кавай рисунки по клеточкам
Рисование по клеточкам в маленьком блокноте
Рисунки по клеткам для мальчиков
Рисунки по клеточкам в блокнотике
Рисунки по клеточкам
Очень маленькие рисунки по клеточкам
Рисования маркером по клеточкам
Рисование по клеткам Единорог
Рисунки по клеточкам маленькие мини
Рисунки по клеточкам лёгкие
Рисование по клеточкам в блокноте
Схемы рисунков по клеточкам маленькие
Рисунки по клеточкам
Рисунки по клеточкам небольшие
Рисунки по клеточкам чёрной ручкой
Гриб из Марио по клеточкам
Рисование по клеткам
Рисунки по клеткам
Рисунки в клеточку легкие
Картинки по клеткам
Рисунки по клеточкам в тетради маленькие и милые
Рисунки по клеточкам
Блокнот в клетку
Рисунки по клеточкам лёгкие приложения
Рисунки по клеточкам лёгкие
Рисунки по клеточкам маленькие
Рисунки по клеточкам Единорог
Рисунки по клеткам без черного
Хедвиг Гарри Поттера пиксель
BTS bt21 вышивка
Рисунки по клеточкам милые
Рисунки по клеточкам в тетради маленькие
Рисунки по клеточкам Гарри Поттер
Значки по клеточкам в тетради
Простые пиксельные рисунки
Узоры в блокноте в клеточку
Рисунки квадратикиками
Рисование по точкам в блокноте
Рисунки по клеточкам в тетради приложения
Снитч Гарри Поттер вышивка
Схемы фенечек из бисера с котиками
Буллет джорнал Вдохновение
Рисунки по клеточкам маленькие
Вышивка крестом аниме Тоторо
Рисунки маленькие для блокнота
Рисунки по клеточкам в тетради лёгкие
Листы для блокнота в клеточку
Листы для ежедневника
Украшения для скетчбука
Рисунки по клеточкам красные
Вышивка Гарри Поттер схемы маленькие
Рисунки по клеточкам черные маленькие
Рисунки котов по клеточкам
Череп по клеточкам
Рисунки по клеточкам лиса
Рисунки в блокноте в точечку
Рисование по клеточкам фломастерами
Рисунки по клеточкам Путин маленький
Пиксельный дневник
Рисунки по клеточкам
Красивые рисунки в тетрадке
Якорь по клеточкам
Рисовать приложения фото по клеточкам и камера
Рисунки по клеточкам
Красивые узоры для скетчбука
Рисунки по клеточкам маленькие
Рисунки по клеточкам
Рисунки с закрашиванием клеток
Рисование по клеточкам фломастерами
Узоры по клеточкам в тетради
Рисунки по клеточкам маленькие для мальчиков
Рисунки по клеточкам черно белые
Рисование по клеткам
Печенье по клеткам
Кавайные рисунки по клеткам
Блокнотысозданы на основе Jupyter Notebook, веб-сайта с открытым исходным кодом. приложение, которое позволяет создавать и обмениваться документами, которые содержат живой код Python, визуализации и описательный текст. С блокнотами ArcGIS, интегрированными в ArcGIS Pro, вы можете выполнять анализ и сразу просматривать результаты в географическом контексте, взаимодействовать с появляющимися данными, документировать и автоматизировать рабочего процесса и сохраните его для последующего использования или совместного использования. Использование ArcGIS Notebooks включает очистку и преобразование данных, имитационное моделирование, статистическое моделирование, машинное обучение, административное задачи и многое другое.
Все функции Python в ArcGIS Pro доступны через ArcGIS Notebooks, включая основные функции Python, стандартная библиотека Python, ArcPy, ArcGIS API for Python и многочисленные сторонние библиотеки включены с ArcGIS Pro, такими как NumPy и pandas. ArcGIS Pro можно расширить за счет открытого исходного кода. библиотеки с помощью Менеджера пакетов ArcGIS Pro.
Хотя блокноты Jupyter Notebook с открытым исходным кодом запускаются локально в приложении ArcGIS Pro, Интегрированный интерфейс Esri Jupyter Notebook также доступен в ArcGIS Online или на портале ArcGIS Enterprise.
Узнайте больше о блокнотах ArcGIS
Если вы ищете интерактивный терминал Python для тестирования или запускать короткие фрагменты кода без дополнительных возможности ноутбука, см. окно Python.
Чтобы создать блокнот, щелкните вкладку Вставка на ленте и нажмите кнопку Создать блокнот . Либо откройте панель «Каталог», перейдите в каталог проекта, щелкните папку правой кнопкой мыши и выберите «Создать» > «Блокнот».
Блокноты ArcGIS, добавленные в проект, перечислены в папке Блокноты на панели Каталог. Блокноты, созданные с помощью ArcGIS Pro, автоматически добавляются в ваш проект. Чтобы добавить в проект существующую записную книжку, щелкните правой кнопкой мыши папку «Записные книжки» и выберите «Добавить записную книжку» или щелкните стрелку раскрывающегося списка рядом с кнопкой «Добавить записную книжку» на ленте «Вставка» и выберите «Добавить записную книжку».
Чтобы открыть существующую записную книжку в проекте, перейдите к файлу записной книжки на панели Каталог и либо дважды щелкните записную книжку, либо щелкните записную книжку правой кнопкой мыши и выберите Открыть записную книжку.
Блокнот открывается в пользовательском интерфейсе, аналогичном стандартному блокноту Jupyter, с кнопками Создать , Сохранить и кнопкой Прервать ядро, расположенными на вкладке Блокнот ArcGIS Pro. Лента записной книжки появляется автоматически, когда открыто представление записной книжки. См. документацию по пользовательскому интерфейсу Jupyter Notebook, чтобы узнать, как взаимодействовать с Jupyter Notebooks.
Чтобы экспортировать блокнот, используйте раскрывающееся меню «Экспорт», чтобы экспортировать блокнот в файл Python (. py) или HTML (.html).
В меню справки Notebook представлен обзор Пользовательский интерфейс Jupyter Notebook, сочетания клавиш, Markdown и другие важные темы.
Функция завершения табуляции предоставляет контекстную справку на основе расположение указателя. Методы и свойства можно просмотреть с помощью нажатие Tab после точки после объекта или библиотеки имя. Например, введите arcpy.analysis в ячейку и нажмите клавишу Tab, чтобы отобразить список возможных методов, доступных в модуле анализа. Один раз отображается список, вы можете отфильтровать его, введя связанные слова. После выбрав из списка подходящий метод, нажмите Enter, чтобы использовать это.
Инструменты Python, модули, функции, классы и ключевые слова хранят документацию, которая предоставляет информацию об их использовании. Активируйте документацию по указателю, нажав Shift+Tab. Ниже приведена документация, отображаемая для инструмента «Буфер»:
Кроме того, к той же документации можно получить доступ с помощью встроенной функции справки Python. Ниже представлена справочная документация для arcpy.analysis.Buffer:
В дополнение к окну Python, блокноты ArcGIS в ArcGIS Pro предоставляют доступ к содержимому вашей карты, что позволяет выполнять следующие интерактивные рабочие процессы: используя путь к данным.
ArcGIS Pro предназначен для запуска одного экземпляра Python. Этот экземпляр Python совместно используется каждой открытой записной книжкой в одном экземпляре ArcGIS Pro. Если разные записные книжки используют одно и то же имя переменной, могут возникнуть конфликты имен переменных. Избегать потенциальные коллизии имен переменных, рассмотрите следующие варианты:
Блокноты ArcGIS, размещенные в ArcGIS Enterprise, не поддерживаются непосредственно в ArcGIS Pro. Чтобы использовать размещенную записную книжку в ArcGIS Pro, загрузите и используйте файл .ipynb локально.
При использовании встроенной магической команды %matplotlib для отображения графиков необходимо рисовать график с помощью функции show() из matplotlib.pyplot.
Блокноты ArcGIS в ArcGIS Pro поддерживают только Python; никакие другие языковые ядра (например, R) не поддерживаются.
В ArcGIS API for Python объект ГИС используется для представления ГИС, с которой вы работаете, например, ArcGIS Online или экземпляр ArcGIS Enterprise. Ваша ГИС может поддерживать ряд схем аутентификации; см. раздел Работа с различными схемами проверки подлинности, чтобы узнать, как выполнять проверку подлинности сценариев и блокнотов для различных схем.
Например, чтобы подключиться к ArcGIS Online в качестве анонимного пользователя, укажите ГИС = ГИС(). Чтобы подключиться к вашему активному порталу в ArcGIS Pro без ввода учетных данных, укажите ГИС = ГИС («дом»).
Отзыв по этой теме?
·
Чтение через 10 мин.·
3 мая 2019 г.Традиционно каждый раз, когда вам нужно изменить вывод ячеек записной книжки, вам нужно изменить код и повторно запустить затронутые ячейки. Это может быть громоздким, неэффективным и подверженным ошибкам, а в случае нетехнического пользователя это может быть даже невыполнимо. Здесь в игру вступают ipywidgets: они могут быть встроены в блокнот и предоставлять удобный интерфейс для сбора пользовательского ввода и просмотра влияния изменений на данные/результаты без необходимости взаимодействия с кодом; ваши блокноты могут быть преобразованы из статических документов в динамические информационные панели — идеально для демонстрации вашей истории данных!
⚠️ Область применения: Ресурсы ipywidgets ограничены, и очень немногие учебные пособия либо неполные, либо посвящены функции/декоратору
взаимодействия
. Это полное руководство о том, как получить полный контроль над виджетами для создания мощных информационных панелей.Мы начнем с основ: добавим виджет и объясним, как работают события, и постепенно разработаем информационную панель.
Я буду направлять вас шаг за шагом, опираясь на примеры по ходу дела.
Если вы когда-либо создавали графический пользовательский интерфейс (GUI), то вы уже знаете, что такое виджет. Но давайте все же дадим краткое определение:
Виджет — это элемент графического интерфейса, такой как кнопка, раскрывающийся список или текстовое поле, который находится в браузере и позволяет нам управлять кодом и данными, реагируя на события и вызывая определенные обработчики.
Эти элементы графического интерфейса можно собирать и настраивать для создания сложных информационных панелей.
Демонстрация: несколько самых популярных виджетовВ этой статье мы увидим некоторые из них в действии.
Готов? 🏁
Чтобы начать пользоваться библиотекой нам необходимо установить расширение ipywidgets . При использовании conda введите в терминал следующую команду:
conda install -c conda-forge ipywidgets
Для pip это будет двухэтапный процесс: 1. install и 2. enable:
pip install ipywidgetsjupyter nbextension включить --py widgetsnbeextension
Чтобы включить виджеты в блокнот, мы должны импортировать модуль, как показано ниже:
импортировать ipywidgets как виджеты
Чтобы добавить ползунок, мы можем определить минимальное и максимальное значения, интервал размер (шаг), описание и начальное значение:
widgets.IntSlider(Демо: Слайдер
min=0,
max=10,
step=1,
description='Slider:',
value=3
)
Функция display()
отображает объект виджета во входной ячейке.
Первый импорт:
из IPython.display import display
Затем передайте виджет в качестве параметра функции display():
slider = widgets. IntSlider()
display(slider)
Чтобы прочитать значение виджета, мы запросим его свойство value
. Точно так же мы можем установить значение виджета:
Мы можем синхронизировать значения двух виджетов с помощью функции jslink()
.
slider = widgets.IntSlider()Демонстрация: связывание
text = widgets.IntText()
display(slider, text)widgets.jslink((slider, 'value'), (text, 'value'))
Полный список виджетов можно найти в документации или выполнить следующую команду:
print(dir(widgets))
Виджеты могут реагировать на события, возникающие при взаимодействии с ними пользователя. Простой пример — нажатие на кнопку — мы ожидаем выполнения действия.
Давайте посмотрим, как это работает…
В зависимости от своих особенностей каждый виджет предоставляет различные события. Обработчик события будет выполняться каждый раз при запуске события.
Обработчик событий — это функция обратного вызова в ответ на событие, которая работает асинхронно и обрабатывает полученные входные данные.
Здесь мы создадим простую кнопку с именем btn
. Метод on_click
вызывается при нажатии кнопки.
Наш обработчик событий, btn_eventhandler
, напечатает короткое сообщение с заголовком кнопки — обратите внимание, что входным аргументом обработчика, obj
, является сам объект кнопки, который позволяет нам получить доступ к ее свойствам.
Чтобы связать событие с обработчиком, мы назначаем последний методу кнопки on_click
.
btn = widgets.Button(description='Medium')Демонстрация: обработчик событий кнопки
display(btn)def btn_eventhandler(obj):
print('Привет от кнопки {}!'.format(obj.description))btn.on_click(btn_eventhandler )
Что приведет нас к следующему разделу, так это то, что выходные данные появляются в той же ячейке , что и сама кнопка. Итак, давайте перейдем к тому, как мы можем добавить больше гибкости нашему ноутбуку!
В этом разделе мы рассмотрим, как использовать виджеты для управления кадром данных . Я выбрал образец набора данных «Количество иностранных посетителей Лондона», который показывает общее количество посетителей Лондона в отношении ночей, посещений и расходов с разбивкой по годам, кварталам, целям, продолжительности, способу и стране.
Первоначально мы получим данные и загрузим их в фрейм данных:
import pandas as pddf_london.sample(5)
import numpy as npurl = "https://data.london.gov.uk/download/number-international-visitors-london /b1e0f953-4c8a-4b45-95f5-e0d143d5641e/international-visitors-london-raw.csv"df_london = pd.read_csv(url)
Предположим, мы хотим отфильтровать кадр данных по 901 42 года . Сначала мы определим раскрывающийся список и заполним его списком уникальных значений года.
Чтобы сделать это, мы создадим общую функцию unique_sorted_values_plus_ALL
, которая будет находить уникальные значения, сортировать их, а затем добавлять элемент ALL
в начале, чтобы пользователь мог удалить фильтр.
ALL = 'ALL'def unique_sorted_values_plus_ALL(array):
unique = array.unique().tolist()
unique.sort()
unique.insert(0, ALL)
return unique
Теперь мы инициализируем выпадающий список:
выпадающий_год = виджеты. Выпадающий список (параметры = уникальные_отсортированные_значения_плюс_ВСЕ (df_london.year))
Виджет раскрывающегося списка предоставляет метод наблюдения
, который принимает функцию, которая будет вызываться при изменении значения раскрывающегося списка. Таким образом, затем мы создадим обработчик наблюдателя для фильтрации фрейма данных по выбранным значениям — обратите внимание, что входной аргумент обработчика change
содержит информацию о произошедших изменениях, что позволяет нам получить доступ к новому значению
. ( изменить.новый
).
Если новое значение равно ВСЕ
, мы удаляем фильтр, иначе применяем его:
def dropdown_year_eventhandler(change):
if (change. new == ALL):
display(df_london)
else:
display(df_london[df_london.year == change.new])
Затем мы привяжем обработчик в раскрывающемся списке:
dropdown_year.observe(dropdown_year_eventhandler, names='value')Использование раскрывающегося списка для фильтрации кадра данных
Пока все хорошо, но результат всех запросов , накапливающий в этой самой ячейке; то есть, если мы выберем новый год из раскрывающегося списка, новый фрейм данных будет отображаться под первым в той же ячейке.
Тем не менее, желательно обновлять содержимое фрейма данных каждый раз.
Решение этой проблемы состоит в захвате вывода ячейки в виджете особого типа, а именно Вывод
, а затем его отображении в другой ячейке.
Мы немного изменим код, чтобы:
Output
output_year = widgets.Output()
clear_output
в обработчике событий для очистки предыдущего выбора на каждой итерации и захвата вывода кадра данных в блоке с
.def dopdown_year_eventhandler (изменение):
output_year.clear_output ()
с output_year:
дисплей (df_london [df_london.year == newer.new]
. (output_year)
Вот как это работает:
Демонстрация: захват вывода в новой ячейкеКак видите, вывод отображается в новой ячейке, и фильтрация работает как положено! 👍
Продолжая предыдущий пример, предположим, что мы также хотим отфильтровать по цели .
Если мы продолжим и добавим еще один раскрывающийся список, мы быстро поймем, что фрейм данных отвечает на фильтр только раскрывающимся списком, который был недавно изменен. Что нам нужно сделать, так это связать вместе, чтобы он мог работать с обоими значениями (т.е. годом и целью).
Давайте посмотрим, как это должно работать:
Во-первых, нам нужен общий вывод для обоих раскрывающихся списков:
output = widgets.Output()
Вот два раскрывающихся списка:
dropdown_year = widgets. Dropdown(options = unique_sorted_values_plus_ALL(df _лондон .year))dropdown_purpose = widgets.Dropdown(options = unique_sorted_values_plus_ALL(df_london.purpose))
Затем мы создаем новую функцию, common_filtering
, которая будет вызываться обоими обработчиками событий. Эта функция применит фильтр к фрейму данных как для 9-го года,0119 И цель:
Мы очищаем вывод, затем проверяем, является ли какое-либо из значений ALL
, и в этом случае мы считаем, что соответствующий фильтр удален. Когда присутствуют оба фильтра, в операторе else
мы применяем операцию и
к обоим фильтрам. Наконец, мы получаем вывод:
def common_filtering(год, цель):
output.clear_output()if (год == ВСЕ) & (цель == ВСЕ):
common_filter = df_london
elif (год == ВСЕ):
common_filter = df_london[df_london.цель == цель]
elif (цель == ВСЕ):
common_filter = df_london[df_london.year == год]
else:
common_filter = df_london[ (df_london. year == year) &
(df_london.purpose == цель)]с выводом:
display(common_filter)
Мы изменили обработчики событий, чтобы вызвать функцию common_filtering
и передать изменение . новое значение
, а также текущее значение
другого раскрывающегося списка:
def dropdown_year_eventhandler(change):
common_filtering(change.new, dropdown_purpose.value)def dropdown_purpose_eventhandler(change):
common_filtering(dropdown_year.value, change.new)
Мы связываем обработчики в выпадающие списки, и все!
dropdown_year.observe(
dropdown_year_eventhandler, имена = 'значение') dropdown_purpose.observe (
dropdown_цель_eventhandler, имена = 'значение')
Фрагмент кода:
Фильтрация фрейма данных на основе двух значенийВот демонстрация:
Демонстрация: Фильтрация фрейма данных на основе двух значенийНа данный момент мы заложили основу для нашей информационной панели, отфильтровав и отобразив данные лондонского набора данных. Мы продолжим раскрашивать числовые значения в зависимости от выбранного пользователем значения.
Полезным числовым виджетом является BoundedFloatText
; мы дадим ему min
, max
и начальное значение
, и инкрементное шаг
.
bounded_num = widgets.BoundedFloatText(
min=0, max=100000, value=5, step=1)
Чтобы раскрасить ячейки фрейма данных, мы определим эту функцию:
def color_ge_value(значение, сравнение) :
if value >= сравнение:
return 'color: red'
else:
return 'color: black'
Теперь мы минимально изменим функцию common_filtering
на:
num
входной параметр:def common_filtering(year, target, num):
color_ge_value
для трех числовых столбцов:с выводом:
display(common_filter
.style. apply карта(
лямбда х : color_ge_value(x, num),
subset=['посещения','расходы', 'ночи']))
Существующие обработчики событий необходимо настроить для передачи bounded_num.value
:
def dropdown_year_eventhandler( изменение):
common_filtering(change.new, dropdown_purpose.value,
bounded_num.value)def dropdown_purpose_eventhandler(change):
common_filtering(dropdown_year.value, change.new,
bounded_num.value)
И, наконец, мы подключим обработчик событий нового виджета:
defbounded_num_eventhandler(change):
common_filtering(dropdown_year.value, dropdown_purpose.value,
change.new)bounded_num.observe(bounded_num_eventhandler, names='value')
Фрагмент кода:
Значения цветного кадра данныхВот демонстрация:
Демонстрация: Цветовые значения кадра данныхДалее мы добавим новый график для построения базовой одномерной плотности количества посещений (KDE → Оценка плотности ядра). Мы будем использовать seaborn, поэтому давайте импортируем библиотеки:
import seaborn as sns
import matplotlib.pyplot as plt
Продолжая предыдущий вариант использования, мы захватим график в новую выходную переменную:
plot_output = widgets. Выход()
Теперь мы изменим функцию common_filtering
, чтобы построить новую диаграмму:
plot_output.clear_output()
с plot_output:
sns.kdeplot(common_filter['visits'], shadow=True)
plt.show()
Наконец, единственное, что нам нужно сделать, это отобразить выходные данные в новая ячейка:
display(output)
display(plot_output)
Фрагмент кода:
Управление графикомВот демонстрация:
Демонстрация: Управление графикомДо сих пор наш пользовательский интерфейс функционировал, но занимал много места .
Сначала мы расположим виджеты ввода по горизонтали. HBox
будет добавлять к нему виджеты по одному слева направо:
input_widgets = widgets.HBox(HBox
[dropdown_year, dropdown_цель, bounded_num])display(input_widgets)
Далее мы создадим контейнер для вывода. Вкладка
отлично подходит для этого. На 1-й вкладке будет размещен фрейм данных, а на 2-й — график.
tab = widgets.Tab([output, plot_output])Tab
tab.set_title(0, 'Исследование набора данных')
tab.set_title(1, 'KDE Plot')display(tab)
Наконец, мы сложим виджеты ввода и вкладка друг над другом с помощью VBox
.
панель инструментов = widgets.VBox([input_widgets, tab])display(панель инструментов)VBox
Он кажется немного «замятым», поэтому в качестве последнего шага мы отполируем нашу панель инструментов, добавив немного места. Мы определим Layout
с отступом 50px между элементами.