Быстрое обучение в одной статье — практическое руководство по Python для построения графа знаний с нуля.
Быстрое обучение в одной статье — практическое руководство по Python для построения графа знаний с нуля.

Рекомендация статьи "Хорошая вещь": Интеллектуальный анализ больших данных на практике - PyODPSОсновные операции

Адрес статьи:https://cloud.tencent.com/developer/article/2470521

Причина рекомендации: многие сторонние платформы имеют свои собственные инструменты для работы с большими данными и библиотеки инструментов для кода. Поэтому в этой серии материалов в основном рассказывается о PyODPS, которая в настоящее время является основной и широко используемой библиотекой PySpark для работы с большими данными. Она в основном опирается на Alibaba Cloud. DataWorks и может быть непосредственно использован при разработке больших данных. MaxCompute использует PyODPS, что очень удобно для интеллектуального анализа данных. Таким образом, эта серия расширит возможности MaxComputer для выполнения ряда проектов по интеллектуальному анализу данных. Не пропустите, если вам это нужно.

Предисловие

На данный момент проект продвинулся до пятого шага, который близок к нашей конечной цели — автоматизации. Производство знаний не за горами. Следуя содержанию предыдущей главы, наш контент в этой главе требует подключения Python для работы Neo4j для достижения полной интеграции процессов. Уже существуют относительно зрелые методы, и наш предыдущий контент был завершен, включая использование Neo4j и использование данных. операции, поэтому мы хорошо понимаем, как использовать Neo4j через Python, поэтому давайте начнем сейчас, без лишних слов. в График Заинтересованные студенты не должны пропустить мою колонку о создании проекта с нуля.

Основные операции

Установить

Необходимо обратить внимание на среду Python, для которой требуется Python >= 3.7

Язык кода:shell
копировать
pip install neo4j

соединять

После установки драйвера и запуска экземпляра Neo4j,Пришло время добавить приложение в базу данных. Создав объект Driver и предоставив URL-адрес и токен аутентификации.,Может подключаться к базе данных.

Язык кода:python
кодКоличество запусков:0
копировать
from neo4j import GraphDatabase

# URI examples: "neo4j://localhost", "neo4j+s://xxx.databases.neo4j.io"
URI = "<URI for Neo4j database>"
AUTH = ("<Username>", "<Password>")

with GraphDatabase.driver(URI, auth=AUTH) as driver:
    driver.verify_connectivity()
    print("Connection established.")

Создание экземпляра драйвера предоставляет только информацию о том, как получить доступ к базе данных.,Но единство фактически не было установлено. соединение откладывается до исполнения первого Запроса.,Чтобы немедленно убедиться, что драйвер может подключаться к базе данных (действительные учетные данные, совместимая версия и т. д.),Необходимо использовать метод .verify_connectivity() после инициализации драйвера.

Как создание объекта Driver, так и его проверка вызывают ряд различных исключений. Из-за Обработки ошибок Может быть очень многословным,И ошибка соединения будет мешать выполнению последующих задач.,Поэтому наиболее распространенным вариантом является аварийное завершение программы при возникновении исключения во время процесса.

Объекты драйвера неизменяемы и потокобезопасны.,И стоимость создания высока,Таким образом, приложения должны создавать только один экземпляр и передавать его (экземпляры драйвера могут использоваться несколькими потоками). Если вам нужно передать базу данных Запрос нескольким разным пользователям,Запрос может быть выполнен в контексте безопасности другого пользователя.,и использовать параметрыpseudomateduserУкажите имя пользователя, которого вы хотите олицетворять.。с этой целью,Пользователь, создающий драйвер, должен иметь соответствующие разрешения. Лучше олицетворять пользователя, чем создавать новый объект Driver.

Язык кода:sql
копировать
driver.execute_query(
    "MATCH (p:Person) RETURN p.name",
    impersonated_user_="somebody_else",
    database_="neo4j",
)

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

закрытиесоединять

Закройте объект Driver, чтобы освободить все выделенные ресурсы.,Это справедливо даже в случае сбоя подключения или ошибки во время выполнения. Создайте экземпляр объекта Driver с помощью оператора with.,Или вызовите метод Driver.close() явно.

Язык кода:shell
копировать
driver.close()

Запрос

После подключения к базе данных,Запрос можно запустить с помощью Cypher и метода Driver.execute_query(). Driver.execut_query() появился в версии драйвера 5.8. Для более ранних версий Запроса,Нужно использоватьsessions and transactions.。

Запись в базу данных

Чтобы создать узел, представляющий человека по имени Алиса, вы можете использовать предложение Cypher create:

Язык кода:python
кодКоличество запусков:0
копировать
summary = driver.execute_query(
    "CREATE (:Person {name: $name})",
    name="Alice",
    database_="neo4j",
).summary
print("Created {nodes_created} nodes in {time} ms.".format(
    nodes_created=summary.counters.nodes_created,
    time=summary.result_available_after
))

Когда мы снова входим в Cypher, мы видим:

Язык кода:sql
копировать
MATCH (tom:Person)
WHERE tom.name = "Alice"
RETURN tom

Чтение данных

Чтобы получить информацию из базы данных, передайте ее Neo4j, как в предложении Cypher MATCH выше:

Язык кода:python
кодКоличество запусков:0
копировать
records, summary, keys = driver.execute_query(
    "MATCH (tom:Person)\
    WHERE tom.name = 'Alice'\
    RETURN tom",
    database_="neo4j",
)

# Loop through results and do something with them
for record in records:
    print(record.data())  # obtain record as dict

# Summary information
print("The query `{query}` returned {records_count} records in {time} ms.".format(
    query=summary.query, records_count=len(records),
    time=summary.result_available_after
))

Records содержит результаты в виде массива объектов Record, а summary содержит сводку выполнения, возвращаемую сервером.

возобновлять

Чтобы восстановить информацию об узлах в базе данных, вы можете использовать предложения Cypher MATCH и SET:

Язык кода:python
кодКоличество запусков:0
копировать
records, summary, keys = driver.execute_query("""
    MATCH (p:Person {name: $name})
    SET p.age = $age
    """, name="Alice", age=42,
    database_="neo4j",
)
print(f"Query counters: {summary.counters}.")
Язык кода:python
кодКоличество запусков:0
копировать
records, summary, keys = driver.execute_query(    "MATCH (people:Person)\    WHERE people.name = 'Alice'\    RETURN people.age",    database_="neo4j",)

Чтобы создать новую связь, связывающую его с двумя существующими узлами, вы можете использовать комбинацию предложений Cypher MATCH и create:

Язык кода:python
кодКоличество запусков:0
копировать
records, summary, keys = driver.execute_query("""
    MATCH (alice:Person {name: $name})
    MATCH (bob:Person {name: $friend})
    CREATE (alice)-[:KNOWS]->(bob)
    """, name="Alice", friend="Bob",
    database_="neo4j",
)
print(f"Query counters: {summary.counters}.")

Если Боба нет, вы можете сначала создать этот узел:

Язык кода:python
кодКоличество запусков:0
копировать
summary = driver.execute_query(
    "CREATE (:Person {name: $name})",
    name="Bob",
    database_="neo4j",
).summary
print("Created {nodes_created} nodes in {time} ms.".format(
    nodes_created=summary.counters.nodes_created,
    time=summary.result_available_after
))

После выполнения вышеуказанной связи вставки на дисплее выводится:

Вставка прошла успешно.

удалить

Чтобы получить узел удаления и все связанные с ним отношения, вам нужно использовать предложение Cypher DETACH DELETE:

Язык кода:python
кодКоличество запусков:0
копировать
records, summary, keys = driver.execute_query("""
    MATCH (p:Person {name: $name})
    DETACH DELETE p
    """, name="Bob",
    database_="neo4j",
)
print(f"Query counters: {summary.counters}.")

Запрос параметров

Запрос При написании кода не делайте жесткого кода и не подключайтесь непосредственно к Запросу. Напротив,Пожалуйста, всегда используйте заполнители и указывайте параметры Cypher.,Как показано в предыдущем примере. Это для:

  • Преимущества производительности: компиляция и кеширование Neo4j,Но сделать это можно только в том случае, если структура Запроса останется неизменной;
  • Соображения безопасности: Чтобы предотвратить внедрение Cypher.

Запрос параметры могут передаваться как несколько аргументов ключевого слова,Также могут быть сгруппированы в словаре как значения для аргументов options_keyword. В случае смешанного,Аргументы ключевого слова имеют приоритет над аргументами словаря.

Язык кода:sql
копировать
parameters = {
    "name": "Alice",
    "age": 42
}
driver.execute_query(
    "MERGE (charlie {name: $name, age: $age})\
    RETURN charlie",
    parameters_=parameters,
    database_="neo4j",
)

Обработка ошибок

Поскольку .execut_query() может генерировать множество различных исключений, лучший способ обработки ошибок — перехватить их все в одном блоке try/Exception:

Язык кода:python
кодКоличество запусков:0
копировать
try:
    driver.execute_query(...)
except Exception as e:
    ...  # handle exception

Если сбой считается временным (например, из-за отсутствия временной Служить),Драйвер автоматически повторит неудачный запуск Запроса. Если операция по-прежнему не удалась после нескольких попыток,выдаст исключение.

Запросконфигурация

Для изменения могут быть предоставлены дополнительные аргументы ключевого слова..executПоведение query() по умолчанию, суффикс параметра конфигурации:

Выбор базы данных

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

Язык кода:python
кодКоличество запусков:0
копировать
driver.execute_query(
    "MATCH (p:Person) RETURN p.name",
    database_="neo4j",
)

маршрутизация запроса

В кластерной среде,По умолчанию,Все сообщения будут направляться узлу-лидеру. Для улучшения показателей чтения Запрос,Запрос можно направить на узел чтения, используя параметр router_="r".

Язык кода:python
кодКоличество запусков:0
копировать
driver.execute_query(
    "MATCH (p:Person) RETURN p.name",
    routing_="r",  # short for neo4j.RoutingControl.READ
    database_="neo4j",
)

При выполнении записи Запроса в режиме чтения может возникнуть ошибка выполнения.,Но на это не следует полагаться при контроле доступа. Разница между этими двумя режимами заключается в том, что,Транзакции чтения будут направляться на любой узел кластера.,И транзакции записи будут направлены лидеру. другими словами,Нет никакой гарантии, что записи в Запросы, отправленные в режиме чтения, будут отклонены.

Войти под другим именем

Мы также Запрос может быть выполнен в контексте безопасности другого пользователя.,Использовать параметрыpseudomateduserУкажите имя пользователя, которого вы хотите олицетворять.。с этой целью Пользователь, создающий драйвер, должен иметь соответствующие разрешения.。Создание нового не требуется и не рекомендуется.Driverобъект。

Язык кода:python
кодКоличество запусков:0
копировать
driver.execute_query(
    "MATCH (p:Person) RETURN p.name",
    impersonated_user_="somebody_else",
    database_="neo4j",
)

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

Конвертировать результаты Запроса

Можно использоватьresulttransformerПараметры будут Запрос Результаты преобразуются в различные структуры данных.。Драйвер предоставляет способ преобразования результата вpandas Встроенные методы для Dataframe или Graph, также можно создать собственный конвертер.

Полное создание кейса

Затем мы объединим вышеизложенное, чтобы использовать полный пример создания диаграммы:

Язык кода:python
кодКоличество запусков:0
копировать
from neo4j import GraphDatabase


URI = "bolt://localhost:7687"
AUTH = ("neo4j", "xwt353008")

people = [{"name": "Alice", "age": 42, "friends": ["Bob", "Peter", "Anna"]},
          {"name": "Bob", "age": 19},
          {"name": "Peter", "age": 50},
          {"name": "Anna", "age": 30}]

with GraphDatabase.driver(URI, auth=AUTH) as driver:
    try:
        # Create some nodes
        for person in people:
            records, summary, keys = driver.execute_query(
                "MERGE (p:Person {name: $person.name, age: $person.age})",
                person=person,
                database_="neo4j",
            )

        # Create some relationships
        for person in people:
            if person.get("friends"):
                records, summary, keys = driver.execute_query("""
                    MATCH (p:Person {name: $person.name})
                    UNWIND $person.friends AS friend_name
                    MATCH (friend:Person {name: friend_name})
                    MERGE (p)-[:KNOWS]->(friend)
                    """, person=person,
                    database_="neo4j",
                )

        # Retrieve Alice's friends who are under 40
        records, summary, keys = driver.execute_query("""
            MATCH (p:Person {name: $name})-[:KNOWS]-(friend:Person)
            WHERE friend.age < $age
            RETURN friend
            """, name="Alice", age=40,
            routing_="r",
            database_="neo4j",
        )
        # Loop through results and do something with them
        for record in records:
            print(record)
        # Summary information
        print("The query `{query}` returned {records_count} records in {time} ms.".format(
            query=summary.query, records_count=len(records),
            time=summary.result_available_after
        ))

    except Exception as e:
        print(e)
        # further logging/processing

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose