見出し画像

Neo4j GraphDBブートキャンプ完全版: 結合 (セクション31/49)

  • Neo4jで実際のデータを扱うには、テーブルの結合、CSVファイルのロード、ノード間の意味のある関連付けが必要

  • 主キーと外部キーの概念を理解し、LOAD CSVコマンドとCypherクエリを使って、表形式データをグラフデータベースに変換

  • 航空データの例で、これらのテクニックを実際のデータセットに適用し、Neo4jの複雑なデータ関係性の扱いにおける力と柔軟性を実証

2024年版の「Complete Neo4j GraphDB Bootcamp:ゼロからヒーローへ」コースのセクション31では、Neo4jで実際のデータを扱う方法について深く掘り下げました。これには、テーブルの結合、CSVファイルからのデータのロード、ノード間の意味のある関連付けの作成が含まれます。このセクションで説明された主要な概念とテクニックを見ていきましょう。

Neo4jでのテーブルの結合

実際のデータを扱う際、情報が複数のテーブルに分散していることがよくあります。接続されたグラフを作成するには、共通のキーに基づいてこれらのテーブルを結合する必要があります。講師は、主キーと外部キーの概念を説明し、外部キー列の値が対応する主キー列の値と一致する必要があることを強調しました。

例えば、SuppliersテーブルとProductsテーブルの2つのテーブルを考えてみましょう。Suppliersテーブルには主キー「supplierID」があり、ProductsテーブルにはSuppliersテーブルを参照する外部キー「supplierID」があります。Neo4jでこれらのテーブルを結合するには、2つのテーブル間の「supplierID」の値を一致させて関連付けを確立します。

CSVファイルのロード

実際のデータをNeo4jに取り込むために、LOAD CSVコマンドを使用してCSVファイルをロードすることができます。講師は、「suppliers.csv」と「products.csv」ファイルからデータをロードする方法を示しました。以下は、Cypherクエリの例です。

LOAD CSV WITH HEADERS FROM "file:///suppliers.csv" AS row
MERGE (supplier:Supplier{supplierID:row.supplierID, supplierName:row.companyName})
WITH supplier
LOAD CSV WITH HEADERS FROM "file:///products.csv" AS row
MERGE (product:Product{productID:row.productID, productName:row.productName, supplierID:row.supplierID})
ON CREATE SET product.unitPrice=toInteger(row.unitPrice), product.unitsInStock=toFloat(row.unitsInStock)

このクエリでは、「suppliers.csv」ファイルからデータをロードし、プロパティを持つSupplierノードを作成し、次に「products.csv」ファイルからデータをロードしてProductノードを作成します。`ON CREATE SET`句は、Productノードの追加のプロパティを設定するために使用されます。

関連付けの作成

Neo4jにデータをロードした後、ノード間に意味のある関連付けを確立する必要があります。講師は、「supplierID」プロパティに基づいてSupplierノードとProductノード間の関連付けを作成する例を示しました。

WITH supplier, product
WHERE supplier.supplierID = product.supplierID
MERGE (supplier)-[:SUPPLIES]->(product)

このクエリは、「supplierID」プロパティが一致するSupplierノードとProductノードを照合し、それらの間に「SUPPLIES」関連を作成します。

実世界の例:フライトデータ

概念を強化するために、講師はKaggleからのフライトデータを使用して実際の例を説明しました。データには、航空会社、空港、フライトに関する情報が含まれていました。講師は、CSVファイルをロードし、Airlines、Airports、Flightsのノードを作成し、共通のプロパティに基づいてそれらの間の関連付けを確立する方法を示しました。

以下は、使用されたCypherクエリの簡略版です。

// 航空会社のロード
LOAD CSV WITH HEADERS FROM "file:///airlines.csv" AS row
CREATE (:Airlines {IATA_CODE: row.IATA_CODE, AIRLINE: row.AIRLINE});

// 空港のロード
LOAD CSV WITH HEADERS FROM "file:///airports.csv" AS row
CREATE (:Airports {IATA_CODE: row.IATA_CODE, AIRPORT: row.AIRPORT, CITY: row.CITY, STATE: row.STATE, COUNTRY: row.COUNTRY, LATITUDE: row.LATITUDE, LONGITUDE: row.LONGITUDE});

// フライトのロード 
LOAD CSV WITH HEADERS FROM "file:///flights.csv" AS row
CREATE (:Flights {YEAR: row.YEAR, MONTH: row.MONTH, DAY: row.DAY, AIRLINE: row.AIRLINE, FLIGHT_NUMBER: row.FLIGHT_NUMBER, ORIGIN_AIRPORT: row.ORIGIN_AIRPORT, DESTINATION_AIRPORT: row.DESTINATION_AIRPORT, DEPARTURE_TIME: row.DEPARTURE_TIME, ARRIVAL_TIME: row.ARRIVAL_TIME});

// 関連付けの作成
MATCH (a:Airports), (f:Flights), (al:Airlines)
WHERE a.IATA_CODE = f.DESTINATION_AIRPORT AND f.AIRLINE = al.IATA_CODE  
CREATE (al)<-[:OWNED_BY]-(f)-[:FLEW_TO]->(a);

これらのクエリは、CSVファイルからデータをロードし、関連するプロパティを持つノードを作成し、一致するプロパティ値に基づいてノード間の関連付けを確立します。

結論

Neo4jで実際のデータを扱うには、テーブルの結合、CSVファイルのロード、ノード間の意味のある関連付けの作成が必要です。主キーと外部キーの概念を理解し、LOAD CSVコマンドを使用し、適切なCypherクエリを作成することで、表形式のデータを接続されたグラフデータベースに変換することができます。フライトデータの例は、これらのテクニックを実際のデータセットに適用する方法を示し、複雑なデータの関係性を扱うNeo4jの力と柔軟性を実証しました。

「超本当にドラゴン」へ

この記事が気に入ったらサポートをしてみませんか?