Я делаю проект по мошенничеству с кредитными картами, и у меня есть некоторые сгенерированные данные образца в .CSV (с разделителями каналов), где каждая строка - это в основном информация человека, данные транзакции вместе с именем продавца и т. д. Поскольку это сгенерированные данные, есть также флаг, указывающий, была ли эта транзакция мошеннической или нет.Основные/концептуальные проблемы, производительность запросов с Cypher и Neo4J
Что я пытаюсь сделать, это загрузить данные в Neo4j, создать узлы (лица, транзакции и торговцы), а затем визуализировать график мошеннических платежей, чтобы узнать, есть ли обычные торговцы. (Я знаю, что есть набор данных neo4j, подобный этому, но я пытаюсь применить эту концепцию к отдельному проекту).
Я загружаю данные, создаю ограничения, и они пытаются выполнить мой запрос, который, кажется, работает вечно.
Вот несколько строк, например, данные ..
ssn|cc_num|first|last|gender|street|city|state|zip|lat|long|city_pop|job|dob|acct_num|profile|trans_num|trans_date|trans_time|unix_time|category|amt|is_fraud|merchant|merch_lat|merch_long
692-42-2939|5270441615999263|Eliza|Stokes|F|684 Abigayle Port Suite 372|Tucson|AZ|85718|32.3112|-110.9179|865276|Science writer|1962-12-06|563973647649|40_60_bigger_cities.json|2e5186427c626815e47725e59cb04c9f|2013-03-21|02:01:05|1363831265|misc_net|838.47|1|fraud_Greenfelder, Bartoletti and Davis|31.616203|-110.221915
692-42-2939|5270441615999263|Eliza|Stokes|F|684 Abigayle Port Suite 372|Tucson|AZ|85718|32.3112|-110.9179|865276|Science writer|1962-12-06|563973647649|40_60_bigger_cities.json|7d3f5eae923428c51b6bb396a3b50aab|2013-03-22|22:36:52|1363991812|shopping_net|907.03|1|fraud_Gerlach Inc|32.142740|-111.675048
692-42-2939|5270441615999263|Eliza|Stokes|F|684 Abigayle Port Suite 372|Tucson|AZ|85718|32.3112|-110.9179|865276|Science writer|1962-12-06|563973647649|40_60_bigger_cities.json|76083345f18c5fa4be6e51e4d0ea3580|2013-03-22|16:40:20|1363970420|shopping_pos|912.03|1|fraud_Morissette PLC|31.909227|-111.3878746
Пример файла Я использую около 60k сделок
Ниже мой высчитывать запрос/код до сих пор.
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "card_data.csv"
AS line FIELDTERMINATOR '|'
CREATE (p:Person { id: toInt(line.cc_num), name_first: line.first, name_last: line.last })
CREATE (m:Merchant { id: line.merchant, name: line.merchant })
CREATE (t:Transaction { id: line.trans_num, merchant_name: line.merchant, card_number:line.cc_num, amount:line.amt, is_fraud:line.is_fraud, trans_date:line.trans_date, trans_time:line.trans_time })
create constraint on (t:Transaction) assert t.trans_num is unique;
create constraint on (p:Person) assert p.cc_num is unique;
MATCH (m:Merchant)
WITH m
MATCH (t:Transaction{merchant_name:m.merchant,is_fraud:1})
CREATE (m)-[:processed]->(t)
Вы можете увидеть в 2 MATCH запрос, я пытаюсь определить, что мы только рассмотрим мошеннические операции (is_fraud: 1), и из примерно 65 тысяч сделок, 230 имеют is_fraud: 1.
Любые идеи, почему этот запрос будет работать бесконечно? У меня есть МНОГО БОЛЬШИХ наборов данных, которые я хотел бы изучить таким образом, и небольшие результаты данных пока не являются многообещающими (я уверен, из-за моего отсутствия понимания, а не ошибки Neo4j).
Спасибо, Дэвид! Это сработало, хотя теперь я не совсем понимаю, чего я ожидал. У меня есть центральный узел, который является мошеннической транзакцией (и только 1 из 230 транзакций мошенничества), подключенной к 25 другим узлам торговца типа с тем же именем. То, что я надеялся увидеть, было торговцем, связанным с мошенническими транзакциями .. так идеально один или два торговца в качестве центральных узлов, связанных со всеми мошенническими транзакциями, имевшими место у данного торговца. Возможно, это не мой запрос? – nameBrandon
Ссылка на изображение - http://i.imgur.com/43ZUw8h.png Центральный узел является мошенническим Tx, синие узлы, похоже, повторяются у одного и того же торговца (одно имя, другое значение «id»). – nameBrandon