Создание DataFrame-агента на базе Gemini для анализа данных на естественном языке с Pandas и LangChain
Узнайте, как объединить Google Gemini с Pandas и LangChain для анализа данных на естественном языке на примере набора Titanic, получая интерактивные и удобные инсайты без кода.
Использование Google Gemini и Pandas для анализа данных
В этом руководстве показано, как интегрировать модели Google Gemini с Pandas, используя экспериментального DataFrame-агента LangChain. В качестве примера используется классический набор данных Titanic для выполнения как базового, так и продвинутого анализа с помощью запросов на естественном языке.
Настройка окружения
Сначала установим необходимые библиотеки: langchain_experimental, langchain_google_genai и pandas.
!pip install langchain_experimental langchain_google_genai pandasИмпортируем основные модули и установим переменную окружения с API-ключом Google.
import os
import pandas as pd
import numpy as np
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
from langchain_google_genai import ChatGoogleGenerativeAI
os.environ["GOOGLE_API_KEY"] = "Use Your Own API Key"Инициализация DataFrame-агента на базе Gemini
Определим вспомогательную функцию для создания LangChain DataFrame-агента с поддержкой Gemini.
def setup_gemini_agent(df, temperature=0, model="gemini-1.5-flash"):
llm = ChatGoogleGenerativeAI(
model=model,
temperature=temperature,
convert_system_message_to_human=True
)
agent = create_pandas_dataframe_agent(
llm=llm,
df=df,
verbose=True,
agent_type=AgentType.OPENAI_FUNCTIONS,
allow_dangerous_code=True
)
return agentЗагрузка и обзор набора данных Titanic
Загружаем данные напрямую из репозитория Pandas на GitHub, выводим размер и список столбцов.
def load_and_explore_data():
print("Загрузка набора данных Titanic...")
df = pd.read_csv(
"https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"
)
print(f"Размер набора данных: {df.shape}")
print(f"Столбцы: {list(df.columns)}")
return dfПроведение базового анализа данных
Выполняем простые запросы для изучения структуры данных, выживаемости пассажиров и распределения классов.
def basic_analysis_demo(agent):
print("\nДЕМОНСТРАЦИЯ БАЗОВОГО АНАЛИЗА")
print("=" * 50)
queries = [
"Сколько строк и столбцов в наборе данных?",
"Каков процент выживших?",
"Сколько людей имеют более 3 братьев или сестер?",
"Каков квадратный корень среднего возраста?",
"Покажи распределение пассажирских классов"
]
for query in queries:
print(f"\nЗапрос: {query}")
try:
result = agent.invoke(query)
print(f"Результат: {result['output']}")
except Exception as e:
print(f"Ошибка: {e}")Продвинутый анализ данных
Исследуем корреляции, анализ выживаемости по демографическим группам, медианные значения и фильтрацию.
def advanced_analysis_demo(agent):
print("\nДЕМОНСТРАЦИЯ ПРОДВИНУТОГО АНАЛИЗА")
print("=" * 50)
advanced_queries = [
"Какова корреляция между возрастом и стоимостью билета?",
"Создай анализ выживаемости по полу и классу",
"Каков медианный возраст для каждого пассажирского класса?",
"Найди пассажиров с самыми высокими тарифами и их детали",
"Вычисли процент выживших для разных возрастных групп (0-18, 18-65, 65+)"
]
for query in advanced_queries:
print(f"\nЗапрос: {query}")
try:
result = agent.invoke(query)
print(f"Результат: {result['output']}")
except Exception as e:
print(f"Ошибка: {e}")Сравнение нескольких DataFrame
Показываем, как сравнивать оригинальный набор данных Titanic с версией, где пропущенные значения возраста заполнены.
def multi_dataframe_demo():
print("\nДЕМОНСТРАЦИЯ МНОЖЕСТВЕННЫХ DATAFRAME")
print("=" * 50)
df = pd.read_csv(
"https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"
)
df_filled = df.copy()
df_filled["Age"] = df_filled["Age"].fillna(df_filled["Age"].mean())
agent = setup_gemini_agent([df, df_filled])
queries = [
"Сколько строк с разными значениями возраста между двумя наборами?",
"Сравни средний возраст в обоих наборах",
"Какой процент значений возраста отсутствовал в оригинальном наборе?",
"Покажи сводную статистику по возрасту в обоих наборах"
]
for query in queries:
print(f"\nЗапрос: {query}")
try:
result = agent.invoke(query)
print(f"Результат: {result['output']}")
except Exception as e:
print(f"Ошибка: {e}")Кастомные и сложные анализы
Создаем модель оценки риска пассажиров, анализируем выживаемость по палубам и выявляем закономерности в фамилиях и ценах билетов.
def custom_analysis_demo(agent):
print("\nДЕМОНСТРАЦИЯ КАСТОМНОГО АНАЛИЗА")
print("=" * 50)
custom_queries = [
"Создай оценку риска для каждого пассажира на основе: Возраста (чем старше, тем выше риск), Пол (мужчины = выше риск), Класс (третий класс = выше риск), Размер семьи (одинокие или большие семьи = выше риск). Затем покажи 10 пассажиров с самым высоким риском, которые выжили",
"Проанализируй информацию о палубе из данных каюты: извлеки букву палубы, покажи выживаемость по палубам, какая палуба имела самый высокий уровень выживаемости?",
"Найди интересные закономерности: выживали ли вместе люди с одинаковыми фамилиями? Какова связь между ценой билета и выживанием? Были ли возрастные группы с 100% выживаемостью?"
]
for i, query in enumerate(custom_queries, 1):
print(f"\nКастомный анализ {i}:")
print(f"Запрос: {query[:100]}...")
try:
result = agent.invoke(query)
print(f"Результат: {result['output']}")
except Exception as e:
print(f"Ошибка: {e}")Запуск руководства
Функция main() проверяет наличие API-ключа, загружает данные, инициализирует агента и последовательно запускает все демонстрации.
def main():
print("Продвинутый Pandas агент с Gemini")
print("=" * 60)
if not os.getenv("GOOGLE_API_KEY"):
print("Внимание: GOOGLE_API_KEY не установлен!")
print("Пожалуйста, установите ваш Gemini API ключ в переменные окружения.")
return
try:
df = load_and_explore_data()
print("\nНастройка агента Gemini...")
agent = setup_gemini_agent(df)
basic_analysis_demo(agent)
advanced_analysis_demo(agent)
multi_dataframe_demo()
custom_analysis_demo(agent)
print("\nРуководство успешно завершено!")
except Exception as e:
print(f"Ошибка: {e}")
print("Убедитесь, что вы установили все необходимые пакеты и задали API ключ.")
if __name__ == "__main__":
main()Дополнительные одноразовые запросы
Можно напрямую задавать агенту вопросы для получения специфических инсайтов.
df = pd.read_csv("https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv")
agent = setup_gemini_agent(df)
agent.invoke("Какие факторы сильнее всего влияли на выживаемость?")
agent.invoke("Создай подробный анализ выживаемости по порту посадки")
agent.invoke("Найди интересные аномалии или выбросы в данных")Сочетание Pandas с Gemini через LangChain DataFrame агент превращает исследование данных в интерактивный процесс, позволяя использовать естественный язык для быстрого получения статистики, инсайтов и визуализаций без необходимости писать код вручную.
Switch Language
Read this article in English