Быстрое обучение в одной статье — практическое руководство 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.