Использование возможностей искусственного интеллекта в ноутбуках Jupyter
Интерес к использованию возможностей искусственного интеллекта и больших языковых моделей для создания интерактивных чат-ботов, таких как ChatGPT, резко возрос в последние месяцы. Это был лишь вопрос времени, когда мы сможем использовать возможности этих моделей непосредственно из библиотеки Python в Jupyter Notebook.
Недавно выпущенная библиотека Python под названием Sketch предоставляет помощника по кодированию AI непосредственно на Python и легко используется в ноутбуках Jupyter и IDE. Библиотека предназначена для того, чтобы пользователям было проще понимать и исследовать данные, хранящиеся в фрейме данных pandas, без необходимости использования дополнительных плагинов.
Библиотека скетчей может быстро суммировать данные, хранящиеся в фрейме данных. Это достигается путем создания сводок данных с использованием алгоритмов аппроксимации (известных как эскизы данных), а затем передачи сгенерированных сводок в большую языковую модель.
Благодаря вводу на естественном языке и доступным функциям мы можем исследовать наш набор данных. Это может быть полезно во многих отношениях, например:
- Создание приложения для конечных пользователей, не умеющих кодировать, для изучения данных
- Для быстрого получения кода для создания графиков и управления данными
Вы можете найти больше о библиотеке на PyPi:
В этой статье мы собираемся изучить две доступные функции в Sketch. Функции .ask и .howto. Это позволяет нам задавать вопросы о нашем фрейме данных и о том, как с ним что-то делать. Это делается с использованием естественного языка, а не с использованием встроенных функций pandas.
На момент написания этой статьи библиотеке Sketch всего несколько месяцев, и она имеет версию 0.3.5. Он все еще активно разрабатывается.
Импорт библиотек и данных
Первый шаг — импортируем скетч и панд в наш блокнот вот так.
import sketch import pandas as pd
Далее мы загрузим наши данные из CSV-файла, используя функцию pandas read_csv. В этой функции мы передадим местоположение и имя файла.
df = pd.read_csv('Data/Xeek_Well_15-9-15.csv')
Когда данные загружены, мы можем проверить их содержимое, вызвав df.

Теперь, когда у нас загружены данные, мы можем начать использовать скетч в нашей записной книжке.
После импорта скетча нам станут доступны три новые функции, прикрепленные к объекту dataframe. Это df.ask() , df.howto() и df.apply(). В этой статье мы сосредоточимся на методах ask и howto.
Задавайте вопросы по Sketch с помощью .sketch.ask
Метод .ask() позволяет нам задавать вопросы о фрейме данных, используя простой язык. Мы можем использовать этот метод, чтобы помочь нам понять и изучить данные.
Чтобы попробовать, мы спросим, сколько уникальных значений содержится в столбце GROUP нашего фрейма данных. Этот столбец должен содержать 7 различных геологических групп.
df.sketch.ask('How many unique values are in the GROUP column?')
Sketch вернет следующее:
7
Мы можем расширить запрос и попросить Sketch предоставить нам уникальные значения, присутствующие в столбце GROUP, в дополнение к их количеству:
df.sketch.ask("""How many unique values are in the
GROUP column and what are the values?""")
Sketch вернул следующее. Вы увидите, что это написано более похоже на предложение, а не просто число и список. Это удобно, если мы хотим скопировать вывод непосредственно в отчет.
The GROUP column has 7 unique values: 'NORDLAND GP.', 'VESTLAND GP.', 'TROMS GP.', 'FINNMARK GP.', 'SVALBARD GP.', 'BARENTS SEA GP.', and 'NORTH SEA GP.'.
Правда, ИИ-помощник растерялся, когда тот же вопрос задали колонке ФОРМИРОВАНИЕ:
df.sketch.ask("""How many unique values are in the
FORMATION column and what are the values?""")
Который вернул список литологий вместо списка, содержащего геологические формации.
The FORMATION column has 15093 unique values. The values are: ['nan', 'SHALE', 'SANDSTONE', 'LIMESTONE', 'DOLOMITE', 'CHALK', 'ANHYDRITE', 'GYPSUM'].
Мы можем проверить, что на самом деле присутствует в столбце FORMATION, вызвав df.FORMATION.unique(). Когда мы это делаем, мы получаем массив имен формирований, как и ожидалось.
array([nan, 'Utsira Fm.', 'Frigg Fm.', 'Balder Fm.', 'Sele Fm.',
'Lista Fm.', 'Tor Fm.', 'Hod Fm.', 'Blodoeks Fm.', 'Draupne Fm.',
'Heather Fm.', 'Skagerrak Fm.'], dtype=object)
Мы также можем попросить Sketch предоставить нам некоторую статистику о данных. В этом примере мы получим минимальное, максимальное и среднее значения для столбца GR (гамма-излучение).
df.sketch.ask('What is the min, max and mean values for the GR column')
Эскиз вернул следующее:
The min value for the GR column is 6.0244188309, the max value is 804.2989502 and the mean value is 57.9078450037.
На первый взгляд, это выглядит разумно. Однако, когда мы вызываем df.describe() и просматриваем сводную статистику pandas, мы видим, что среднее значение 59,1542 отличается от того, что вернул Sketch: 57,9078.

Может ли это быть результатом ошибки в коде? Возможно.
Спрашиваем у Sketch, как что-то делать с помощью sketch.howto
Sketch позволяет нам спросить его, что делать с нашим фреймом данных, и вернет кодовый блок. Это удобно, если вы хотите быстро построить данные, не запоминая все вызовы matplotlib.
В этом примере мы спросим его, как создать простую диаграмму рассеяния плотность-нейтронная пористость, которая обычно используется в петрофизике.
df.sketch.howto("""How to make a scatterplot with NPHI on the x axis,
caled from 0 to 0.8, and RHOB on the y axis reversed scaled from 1 to 3""")
Это возвращает некоторый простой код matplotlib, который можно скопировать и вставить в следующую ячейку:
import matplotlib.pyplot as plt # Create the scatterplot plt.scatter(df['NPHI'], df['RHOB']) # Set the x-axis limits plt.xlim(0, 0.8) # Reverse the y-axis limits plt.ylim(3, 1) # Show the plot plt.show()
Который при запуске генерирует следующий сюжет:

Мы видим, что приведенный выше график очень прост, поэтому давайте добавим немного цвета на график, используя третью переменную.
df.sketch.howto("""How to make a scatterplot with NPHI on the x axis,
scaled from 0 to 0.8 and RHOB on the y axis reversed scaled from 1 to 3.
Colour the points by GR and add a colorbar.
Limit the colorbar values to between 0 and 200.""")
Который возвращает следующий код
import matplotlib.pyplot as plt
# Create the scatterplot
_['NPHI'].plot.scatter(x='NPHI', y='RHOB', c='GR', cmap='viridis',
vmin=0, vmax=200, s=20, figsize=(10,8))
# Reverse the y axis
plt.gca().invert_yaxis()
# Scale the x axis
plt.xlim(0, 0.8)
# Add a colorbar
plt.colorbar()
Код, который он возвращает, почти правильный. Тем не менее, это добавило некоторые странности в код.
Вместо расширения приведенного выше кода он переключился на использование метода pandas .plot и применил его к _['NPHI']. Он также проигнорировал мой диапазон шкалы для оси Y, но правильно инвертировал его.
Наконец, он также добавил вызов plt.colorbar, который на самом деле не требуется и выдает ошибку, если он включен.
Немного поправив код, мы можем заставить его работать так:
import matplotlib.pyplot as plt
# Create the scatterplot
df.plot.scatter(x='NPHI', y='RHOB', c='GR', cmap='viridis',
vmin=0, vmax=200, s=20, figsize=(10,8))
# Reverse the y axis
plt.gca().invert_yaxis()
# Scale the x axis
plt.xlim(0, 0.8)

Теперь у нас есть хороший сюжет, с которым можно работать и развивать.
Краткое содержание
Библиотека скетч выглядит очень многообещающе для интеграции мощности ИИ в Jupyter Notebooks или IDE. Несмотря на то, что при написании этой статьи возникло несколько проблем, мы должны помнить, что это все еще новая библиотека, которая все еще активно развивается. Будет интересно посмотреть, куда пойдет эта библиотека в ближайшие месяцы.
Как и в случае с любыми инструментами на основе ИИ в наше время, всегда необходима осторожность, особенно когда полагаешься на ответы, которые он генерирует. Однако, даже при такой осторожности, эти системы могут иметь множество преимуществ, в том числе помощь в освежении памяти, если вы забыли вызов функции, или создание быстрых графиков без написания кода.
Интересно, что если бы это было интегрировано с панелью инструментов или приложением, таким как Streamlit, это могло бы стать мощным инструментом для непрограммистов.
Набор данных, используемый в этой статье, является подмножеством обучающего набора данных, используемого в рамках соревнования по машинному обучению, проводимого Xeek и FORCE 2020 (Bormann et al., 2020). Он выпущен под лицензией NOLD 2.0 от правительства Норвегии, подробности о которой можно найти здесь: Норвежская лицензия на открытые правительственные данные (NLOD) 2.0. Полный набор данных доступен здесь.
Полная ссылка на набор данных:
Борман, Питер, Аурсанд, Педер, Дилиб, Фахад, Манраль, Сдача и Дишингтон, Питер. (2020). FORCE 2020 Набор данных ГИС и литофаций для соревнований по машинному обучению [Набор данных]. Зенодо. http://doi.org/10.5281/zenodo.4351156
Спасибо, что прочитали. Прежде чем идти, вы должны обязательно подписаться на мой контент и получать мои статьи в свой почтовый ящик. Ты можешь сделать это здесь! Кроме того, вы можете подписаться на мою рассылку новостей, чтобы бесплатно получать дополнительный контент прямо в свой почтовый ящик.
Во-вторых, вы можете получить все возможности Medium и поддержать меня и тысячи других авторов, подписавшись на членство. Это стоит всего 5 долларов в месяц, и у вас есть полный доступ ко всем потрясающим статьям на Medium, а также возможность зарабатывать деньги своим текстом. Если вы зарегистрируетесь, используя мою ссылку, вы поддержите меня напрямую частью вашего гонорара, и это не будет стоить вам больше. Если вы это сделаете, большое спасибо за вашу поддержку!