├── .gitignore ├── README.adoc ├── bloom └── Entity Resolution Perspective.json ├── code ├── csharp │ └── Example.cs ├── go │ └── example.go ├── java │ └── Example.java ├── javascript │ └── example.js └── python │ └── example.py ├── data ├── csv │ ├── Movies.csv │ ├── Users.csv │ └── WatchEvent.csv ├── entity-resolution-43.dump ├── entity-resolution-44.dump └── entity-resolution-50.dump ├── documentation ├── cypher.queries.txt ├── entity-resolution.adoc ├── entity-resolution.neo4j-browser-guide └── img │ ├── entity-resolution-icon.svg │ ├── example.png │ ├── model.PNG │ └── neo4j.png └── relate.project-install.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | *.class 4 | package-lock.json 5 | code/csharp/bin 6 | code/csharp/debug 7 | code/csharp/obj 8 | code/javascript/node_modules 9 | code/java/target 10 | pythonenv3.8 11 | -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | :name: entity-resolution 2 | :long-name: Entity-Resolution-Demonstration 3 | :description: Entity Resolution, Record Linkage and Similarity wise recommendation with Neo4j 4 | :icon: documentation/img/entity-resolution-icon.svg 5 | :tags: Entity Resolution, Record Linkage, Recommendation, Graph Based Search, Node Similarity 6 | :author: Chintan Desai, Neo4j 7 | :demodb: false 8 | :data: true 9 | :use-load-script: false 10 | :use-dump-file: data/entity-resolution-44.dump 11 | :zip-file: false 12 | :use-plugin: apoc, graph-data-science 13 | :target-db-version: 4.4 14 | :bloom-perspective: bloom/Entity%20Resolution%20Perspective.json 15 | :guide: documentation/entity-resolution.adoc 16 | :model: documentation/img/model.PNG 17 | :example: documentation/img/example.png 18 | :rendered-guide: https://guides.neo4j.com/sandbox/{name} 19 | :nodes: 1267 20 | :relationships: 1939 21 | 22 | image::{icon}[width=100] 23 | 24 | == {long-name} Graph Example 25 | 26 | Description: _{description}_ 27 | 28 | Nodes {nodes} Relationships {relationships} 29 | 30 | .Model 31 | image::{model}[] 32 | 33 | .Example 34 | image::{example}[width=600] 35 | 36 | .Example Query: 37 | [source,cypher,role=query-example,param-name=state,param-value="Texas",result-column=genre,expected-result="xxx"] 38 | ---- 39 | MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 40 | 41 | RETURN g.name as genre, count(g) as freq 42 | ORDER BY freq DESC 43 | ---- 44 | 45 | === Setup 46 | 47 | This is for Neo4j version: {target-db-version} 48 | 49 | ifeval::[{use-plugin} != false] 50 | Required plugins: {use-plugin} 51 | endif::[] 52 | 53 | ifeval::[{demodb} != false] 54 | The database is also available on https://demo.neo4jlabs.com:7473 55 | 56 | Username "{name}", password: "{name}", database: "{name}" 57 | endif::[] 58 | 59 | Rendered guide available via: `:play {rendered-guide}` 60 | 61 | Unrendered guide: link:{guide}[] 62 | 63 | Load graph data via the following: 64 | 65 | ifeval::[{data} != false] 66 | ==== Data files: `{data}` 67 | 68 | Import flat files (csv, json, etc) using Cypher's https://neo4j.com/docs/cypher-manual/current/clauses/load-csv/[`LOAD CSV`], https://neo4j.com/labs/apoc/[APOC library], or https://neo4j.com/developer/data-import/[other methods]. 69 | endif::[] 70 | 71 | ifeval::[{use-dump-file} != false] 72 | ==== Dump file: `link:{use-dump-file}[]` 73 | 74 | * Drop the file into the `Files` section of a project in Neo4j Desktop. Then choose the option to `Create new DBMS from dump` option from the file options. 75 | 76 | * Use the neo4j-admin tool to load data from the command line with the command below. 77 | 78 | [source,shell,subs=attributes] 79 | ---- 80 | bin/neo4j-admin load --from {use-dump-file} [--database "database"] 81 | ---- 82 | 83 | * Upload the dump file to Neo4j Aura via https://console.neo4j.io/#import-instructions 84 | endif::[] 85 | 86 | ifeval::[{use-load-script} != false] 87 | ==== Data load script: `{use-load-script}` 88 | 89 | [source,shell,subs=attributes] 90 | ---- 91 | bin/cypher-shell -u neo4j -p "password" -f {use-load-script} [-d "database"] 92 | ---- 93 | 94 | Or import in Neo4j Browser by dragging or pasting the content of {use-load-script}. 95 | endif::[] 96 | 97 | ifeval::[{zip-file} != false] 98 | ==== Zip file 99 | 100 | Download the zip file link:{repo}/raw/master/{name}.zip[{name}.zip] and add it as "project from file" to https://neo4j.com/developer/neo4j-desktop[Neo4j Desktop^]. 101 | endif::[] 102 | 103 | === Feedback 104 | 105 | Feel free to submit issues or pull requests for improvement on this repository. 106 | 107 | //// 108 | === Code Examples 109 | 110 | * link:code/javascript/example.js[JavaScript] 111 | * link:code/java/Example.java[Java] 112 | * link:code/csharp/Example.cs[C#] 113 | * link:code/python/example.py[Python] 114 | * link:code/go/example.go[Go] 115 | 116 | == Entity Resolution, Record Linkage and Similarity wise recommendation with Neo4j 117 | 118 | === What is Entity Resolution? 119 | 120 | Entity Resolution (ER) is the process of disambiguating data to determine if multiple digital records represent the same real-world entity such as a person, organization, place, or other type of object. 121 | For example, say you have information on persons coming from different e-commerce platforms. They may have slightly different contact information, with addresses formatted differently, using different forms/abbreviations of names, etc. 122 | A human may be able to tell if the records actually belong to the same underlying entity but given the number of possible combinations and matching that can be had, there is a need for an intelligent automated approach to doing so, which is where ER systems come into play. 123 | 124 | === Use cases 125 | Few of the common and useful entity resolution use cases are below. 126 | 127 | ==== Life Science & Healthcare 128 | Life science and healthcare organizations requires data linking the most. For example, a healthcare organization can implement Entity resolution for consolidation of a patient’s records from a variety of sources, matching data from hospitals and clinics, laboratories, insurance providers and claims and social media profiles to create a unique profile of each patient. This will help providing precise and effective treatment. Similarly, Life science organizations can use ER to connect various entities, research results, input data sets etc. This can facilitate the research & development. 129 | 130 | ==== Insurance and Financial Services 131 | 132 | Financial services and Insurance companies often struggle with fragmented and siloed datasets. Because various products\categories maintain their data in different systems and databases. Thus, it is difficult to reconcile a customer's preferences, history, credit ratings etc on a central platform. ER can enable them to perform record linking on different data sets and produce a unified view of customer's state and needs. 133 | 134 | ==== Digital Marketing and content recommendation 135 | 136 | Effective marketing and recommendation scheme cannot be produces using distinct data sets or different silos. Records linking, some machine learning and analytics can be very much helpful in producing effective marketing content. Identifying redundant customers is another area in marketing and CRM which needs to be addressed. ER can be mighty effective in such use cases. 137 | 138 | 139 | === Graphs can come handy 140 | 141 | Graphs can add benefits to Entity Resolution process, by not just using the attributes of the entities but also taking their context into account e.g. behavior, social relationships, shared attributes to others, connections to people, objects, locations, events (POLE). 142 | 143 | == Demo Use Case 144 | 145 | This demo guide covers a similar use case of performing Entity Resolution. 146 | 147 | We have taken an example of a dummy online movie streaming platform. For ease of understanding, we have taken only movies and users datasets. 148 | 149 | Users can have one or more accounts on a movie streaming platform. 150 | 151 | We are performing Entity Resolution over users’ data to identify similar/same users. We are also performing linking for users which are from same account (or group/family). Later, we are leveraging this linking to provide effective recommendations to individual users. 152 | 153 | ==== Data Model 154 | .Model 155 | image::{model}[] 156 | 157 | == Preparing the Graph: Loading data and creating Nodes and Relationships 158 | In this guide, we will perform below steps: 159 | 160 | * Load: Load nodes and relationship information from external CSV files and create entities 161 | * Relate: Establish more connections (relationships) between entities 162 | * Test: Perform basic querying with Cypher on loaded data 163 | * ER: Perform Entity Resolution based on similarity and do record linkage 164 | * Recommend: Generate recommendation based on user similarities / preferences 165 | * Additional: Try couple of preference based similarities and recommendation examples 166 | 167 | 168 | === Notes 169 | In this demonstration, we have used Neo4j APOC (Awesome Procedures on Cypher) and Neo4j GDS (Graph Data Science) libraries few Cypher queries. 170 | To execute the Cypher queries with APOC or GDS functions, you will need to add these libraries as plugins to your Neo4j database instance. 171 | 172 | For more details on APOC and GDS, please refer below links. 173 | 174 | * https://neo4j.com/developer/neo4j-apoc/[APOC^] 175 | * https://neo4j.com/docs/graph-data-science/current/[GDS^] 176 | 177 | == Load nodes and relationship information from external CSV files and create entities 178 | 179 | .Load Users, Ip Addresses and connect Users with IP Addresses 180 | [source,cypher] 181 | ---- 182 | // Constraints 183 | CREATE CONSTRAINT user_id IF NOT EXISTS FOR (u:User) REQUIRE u.userId IS UNIQUE; 184 | CREATE CONSTRAINT ip_address IF NOT EXISTS FOR (i:IpAddress) REQUIRE i.address IS UNIQUE; 185 | 186 | // Data load 187 | LOAD CSV WITH HEADERS FROM "https://gist.githubusercontent.com/chintan196/6b33019341bdcb6ed4d712cc94b84fc6/raw/2513454dd72b70d3122fd0a15777fc9842bbba89/Users.csv" AS row 188 | MERGE (u:User { userId: toInteger(row.userId) }) 189 | ON CREATE SET 190 | u.firstName= row.firstName, 191 | u.lastName= row.lastName, 192 | u.gender= row.gender, 193 | u.email= row.email, 194 | u.phone= row.phone, 195 | u.state= row.state, 196 | u.country= row.country 197 | WITH u, row 198 | MERGE (ip:IpAddress { address: row.ipAddress }) 199 | MERGE (u)-[:USES]->(ip) 200 | RETURN u, ip 201 | ---- 202 | 203 | .Load Movies, Genres and link them 204 | [source,cypher] 205 | ---- 206 | // Constraints 207 | CREATE CONSTRAINT genre_name IF NOT EXISTS FOR (g:Genre) REQUIRE g.name IS UNIQUE; 208 | CREATE CONSTRAINT movie_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.movieId IS UNIQUE; 209 | CREATE CONSTRAINT movie_name IF NOT EXISTS FOR (m:Movie) REQUIRE m.name IS UNIQUE; 210 | 211 | //Load Data 212 | :auto USING PERIODIC COMMIT 500 213 | LOAD CSV WITH HEADERS FROM 214 | "https://gist.githubusercontent.com/chintan196/6b33019341bdcb6ed4d712cc94b84fc6/raw/2513454dd72b70d3122fd0a15777fc9842bbba89/Movies.csv" AS row 215 | MERGE ( m:Movie { movieId: toInteger(row.movieId) }) 216 | ON CREATE SET 217 | m.name= row.name, 218 | m.year= toInteger(row.year) 219 | WITH m, row 220 | MERGE (g:Genre { name: row.genre } ) 221 | MERGE (m)-[:HAS]->(g) RETURN m, g; 222 | ---- 223 | 224 | == Establish more connections (relationships) between entities 225 | 226 | .Load data and create "WATCHED" relationships between Users who have watched whatever Movies 227 | [source,cypher] 228 | ---- 229 | LOAD CSV WITH HEADERS FROM "https://gist.githubusercontent.com/chintan196/6b33019341bdcb6ed4d712cc94b84fc6/raw/2513454dd72b70d3122fd0a15777fc9842bbba89/WatchEvent.csv" AS row 230 | MATCH (u:User {userId: toInteger(row.userId)}) 231 | MATCH (m:Movie {movieId: toInteger(row.movieId)}) 232 | MERGE (u)-[w:WATCHED]->(m) ON CREATE SET w.watchCount = toInteger(row.watchCount) 233 | RETURN u, m; 234 | ---- 235 | 236 | == Perform basic querying with Cypher on loaded data 237 | .Query users who have watched movie "The Boss Baby: Family Business" 238 | [source,cypher] 239 | ---- 240 | MATCH (u:User)-->(m:Movie {name: "The Boss Baby: Family Business"}) RETURN u,m LIMIT 5 241 | ---- 242 | 243 | .Show users from "New York" and movies watched by them 244 | [source,cypher] 245 | ---- 246 | MATCH (u:User {state: "New York"} )-[:WATCHED]->(m) RETURN u, m LIMIT 50 247 | ---- 248 | 249 | .Show trending genres in Texas 250 | [source,cypher] 251 | ---- 252 | MATCH (u:User {state: "Texas"} )-[:WATCHED]->(m)-[:HAS]->(g) 253 | return g.name, count(g) order by count(g) desc 254 | ---- 255 | 256 | == Perform Entity Resolution based on similarity and perform record linkage 257 | 258 | === Users who have similar names 259 | 260 | These are users who have same/similar names but different (redundant) profiles due to typos or abbreviations used for some instances. We are using the Jaro Winkler Distance algorithm from the Neo4j APOC library. 261 | 262 | References 263 | 264 | * https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance[Jaro–Winkler distance^] 265 | * https://neo4j.com/labs/apoc/4.1/overview/apoc.text/apoc.text.jaroWinklerDistance/[apoc.text.jaroWinklerDistance^] 266 | 267 | [source,cypher] 268 | ---- 269 | MATCH (a:User) 270 | MATCH (b:User) 271 | WHERE a.firstName + a.lastName <> b.firstName + b.lastName 272 | WITH a, b, a.firstName + a.lastName AS norm1, b.firstName + b.lastName AS norm2 273 | WITH 274 | toInteger((1-apoc.text.jaroWinklerDistance(norm1, norm2)) * 100) AS nameSimilarity, 275 | toInteger((1-apoc.text.jaroWinklerDistance(a.email, b.email)) * 100) AS emailSimilarity, 276 | toInteger((1-apoc.text.jaroWinklerDistance(a.phone, b.phone)) * 100) AS phoneSimilarity, a, b 277 | WITH a, b, toInteger((nameSimilarity + emailSimilarity + phoneSimilarity)/3) as similarity WHERE similarity >= 90 278 | RETURN a.firstName + a.lastName AS p1, b.firstName + b.lastName AS p2, a.email, b.email, similarity 279 | ---- 280 | 281 | === Users belonging to same family 282 | 283 | Users who have similar last names and live in same state, and use same IP address, that means they are either same users with redundant profile or belong to the same family 284 | 285 | [source,cypher] 286 | ---- 287 | MATCH (a:User)-->(:IpAddress)<--(b:User) 288 | WHERE a.lastName = b.lastName AND a.state = b.state AND a.country = b.country 289 | WITH a.lastName as familyName, collect(distinct b.firstName + ' ' + b.lastName) as members, count(distinct b) as memberCount 290 | RETURN familyName, memberCount, members 291 | ---- 292 | 293 | Record Linkage: Create Family Nodes for each family and connect members. This is how we link the similar users and family members using a common Family node 294 | 295 | [source,cypher] 296 | ---- 297 | MATCH (a:User)-->(:IpAddress)<--(b:User) 298 | WHERE a.lastName = b.lastName AND a.state = b.state AND a.country = b.country 299 | WITH a.lastName as familyName, collect(distinct b) as familyMembers, count(distinct b) as totalMembers 300 | MERGE (a:Family {name: familyName}) 301 | WITH a,familyMembers 302 | UNWIND familyMembers as member 303 | MERGE (member)-[:BELONGS_TO]->(a) 304 | RETURN a, member 305 | ---- 306 | 307 | === Check how may families are created 308 | 309 | [source,cypher] 310 | ---- 311 | MATCH (f:Family)<--(u:User) RETURN f, u LIMIT 200 312 | ---- 313 | 314 | == Generate recommendation based on user's family or group similarities / preferences 315 | 316 | Providing recommendation to the member based on his/her account/family members history. Get preferred genres by other account members and suggest top 5 movies from most watched genres. 317 | 318 | [source,cypher] 319 | ---- 320 | MATCH (user:User {firstName: "Vilma", lastName: "De Mars"}) 321 | MATCH (user)-[:BELONGS_TO]->(f)<-[:BELONGS_TO]-(otherMember) 322 | MATCH (otherMember)-[:WATCHED]->(m1)-[:HAS]->(g:Genre)<-[:HAS]-(m2) 323 | WITH g.name as genre, count(distinct m2) as totalMovies, collect(m2.name) as movies 324 | RETURN genre, totalMovies, movies[0..5] as topFiveMovies ORDER BY totalMovies DESC LIMIT 50 325 | ---- 326 | 327 | == Using Neo4j Node Similarity Algorigthm to find similar users and get recommendations 328 | 329 | Find users based on their movie watching preferences using Node Similarity algorithm 330 | 331 | * https://neo4j.com/docs/graph-data-science/current/algorithms/node-similarity/[Node Similarity^] 332 | 333 | .Step 1: For this, we will first create an in-memory graph with node and relationship specification to run the algorithm on 334 | [source,cypher] 335 | ---- 336 | CALL gds.graph.create( 337 | 'similarityGraph', 338 | ['User', 'Movie'], 339 | { 340 | WATCHED: { 341 | type: 'WATCHED', 342 | properties: { 343 | strength: { 344 | property: 'watchCount', 345 | defaultValue: 1 346 | } 347 | } 348 | } 349 | } 350 | ); 351 | ---- 352 | 353 | .Step 2: Perform memory estimate for the matching to execute 354 | [source,cypher] 355 | ---- 356 | CALL gds.nodeSimilarity.write.estimate('similarityGraph', { 357 | writeRelationshipType: 'SIMILAR', 358 | writeProperty: 'score' 359 | }) 360 | YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory 361 | ---- 362 | 363 | .Step 3: Execute algorithm and show results 364 | [source,cypher] 365 | ---- 366 | CALL gds.nodeSimilarity.stream('similarityGraph') 367 | YIELD node1, node2, similarity 368 | WITH gds.util.asNode(node1) AS Person1, gds.util.asNode(node2) AS Person2, similarity 369 | RETURN 370 | Person1.firstName + ' ' + Person1.lastName as p1, 371 | Person2.firstName + ' ' + Person2.lastName as p2, similarity ORDER BY similarity DESC 372 | ---- 373 | 374 | 375 | .Step 4: Get recommendations for a user based on similarity. For a user, fetch recommendations based on other similar users' preferences 376 | [source,cypher] 377 | ---- 378 | CALL gds.nodeSimilarity.stream('similarityGraph') 379 | YIELD node1, node2, similarity 380 | WITH gds.util.asNode(node1) AS Person1, gds.util.asNode(node2) AS Person2, similarity 381 | WHERE Person1.firstName = 'Paulie' AND Person1.lastName = 'Imesson' 382 | MATCH (Person2)-[w:WATCHED]->(m) WHERE NOT exists((Person1)-->(m)) 383 | WITH DISTINCT m as movies, SUM(w.watchCount) as watchCount 384 | RETURN movies order by watchCount 385 | ---- 386 | 387 | == Using Pearson Similarity Algorigthm to find similar users based on Genre preference and get recommendations 388 | 389 | * https://neo4j.com/docs/graph-data-science/current/alpha-algorithms/pearson/[Peason Similarity - Neo4j GDS^] 390 | * https://en.wikipedia.org/wiki/Pearson_correlation_coefficient[Pearson correlation coefficient^] 391 | 392 | 393 | Here we are finding the users who have similar Genre preferences as user Lanette Laughtisse. 394 | We are comparing the similarities based on the movies they have watched from similar genre. We can use this information to provide recommendations. 395 | 396 | [source,cypher] 397 | ---- 398 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 399 | MATCH (m)-[:HAS]->(g1:Genre) 400 | WITH p1, g1, count(m) as movieCount1 401 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 402 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 403 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 404 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 405 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 406 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 407 | WITH 408 | p1.firstName + ' ' + p1.lastName AS currentUser, 409 | p2.firstName + ' ' + p2.lastName AS similarUser, 410 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 411 | WHERE similarity > 0.9 412 | RETURN currentUser,similarUser, similarity 413 | ORDER BY similarity DESC 414 | LIMIT 100 415 | ---- 416 | 417 | Get recommendations for a user using similar order users' preferenes by fetching similar users using Pearson Similarity function 418 | 419 | [source,cypher] 420 | ---- 421 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 422 | MATCH (m)-[:HAS]->(g1:Genre) 423 | WITH p1, g1, count(m) as movieCount1 424 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 425 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 426 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 427 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 428 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 429 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 430 | WITH 431 | p1 AS currentUser, 432 | p2 AS similarUser, 433 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 434 | WHERE similarity > 0.9 435 | MATCH (similarUser)-[w:WATCHED]->(m) 436 | WITH DISTINCT m as movies, SUM(w.watchCount) as watchCount 437 | RETURN movies order by watchCount 438 | ---- 439 | 440 | == References 441 | 442 | * https://neo4j.com/developer/[Developer resources^] 443 | * https://neo4j.com/docs/cypher-manual[Neo4j Cypher Manual^] 444 | * https://neo4j.com/developer-blog/exploring-supervised-entity-resolution-in-neo4j/[Entity Resolution in Neo4j reference^] 445 | //// 446 | -------------------------------------------------------------------------------- /bloom/Entity Resolution Perspective.json: -------------------------------------------------------------------------------- 1 | {"name":"Entity Resolution Perspective","id":"ca9193c0-59df-11ec-99cc-315437f8faf0","categories":[{"id":1,"name":"IpAddress","color":"#FFE081","size":1,"icon":"no-icon","labels":["IpAddress"],"properties":[{"name":"address","exclude":false,"isCaption":true,"dataType":"string"},{"name":"ipAddressId","exclude":false,"isCaption":false,"dataType":"bigint"}],"caption":[""],"createdAt":1639157825285,"lastEditedAt":1639158174784},{"id":2,"name":"User","color":"#C990C0","size":1,"icon":"DB188874-D25F-4B34-A296-E5E950072319","labels":["User"],"properties":[{"name":"phone","exclude":false,"isCaption":false,"dataType":"string"},{"name":"firstName","exclude":false,"isCaption":true,"dataType":"string"},{"name":"gender","exclude":false,"isCaption":false,"dataType":"string"},{"name":"userId","exclude":false,"isCaption":false,"dataType":"bigint"},{"name":"state","exclude":false,"isCaption":false,"dataType":"string"},{"name":"country","exclude":false,"isCaption":false,"dataType":"string"},{"name":"lastName","exclude":false,"isCaption":true,"dataType":"string"},{"name":"email","exclude":false,"isCaption":false,"dataType":"string"},{"name":"ipAddressId","exclude":false,"isCaption":false,"dataType":"bigint"}],"caption":[""],"createdAt":1639157825285,"lastEditedAt":1639158156891},{"id":3,"name":"Genre","color":"#F79767","size":1,"icon":"no-icon","labels":["Genre"],"properties":[{"name":"name","exclude":false,"isCaption":true,"dataType":"string"},{"name":"genreId","exclude":false,"isCaption":false,"dataType":"bigint"}],"caption":[""],"createdAt":1639157825285,"lastEditedAt":1639158163219},{"id":4,"name":"Movie","color":"#57C7E3","size":1,"icon":"E1B92F18-DE2E-43F3-9A70-B759EC207639","labels":["Movie"],"properties":[{"name":"movieId","exclude":false,"isCaption":false,"dataType":"bigint"},{"name":"genreId","exclude":false,"isCaption":false,"dataType":"bigint"},{"name":"year","exclude":false,"isCaption":false,"dataType":"bigint"},{"name":"name","exclude":false,"isCaption":true,"dataType":"string"}],"caption":[""],"createdAt":1639157825285,"lastEditedAt":1639158168548},{"id":5,"name":"Family","color":"#F16667","size":1,"icon":"1BA78CC1-ED89-46D5-9D2B-D78DC944A59D","labels":["Family"],"properties":[{"name":"name","exclude":false,"isCaption":true,"dataType":"string"}],"caption":[""],"createdAt":1639157825285,"lastEditedAt":1639157844816}],"labels":{"IpAddress":[{"propertyKey":"address","type":"IpAddress","dataType":"string"},{"propertyKey":"ipAddressId","type":"IpAddress","dataType":"bigint"}],"User":[{"propertyKey":"phone","type":"User","dataType":"string"},{"propertyKey":"firstName","type":"User","dataType":"string"},{"propertyKey":"gender","type":"User","dataType":"string"},{"propertyKey":"userId","type":"User","dataType":"bigint"},{"propertyKey":"state","type":"User","dataType":"string"},{"propertyKey":"country","type":"User","dataType":"string"},{"propertyKey":"lastName","type":"User","dataType":"string"},{"propertyKey":"email","type":"User","dataType":"string"},{"propertyKey":"ipAddressId","type":"User","dataType":"bigint"}],"Genre":[{"propertyKey":"name","type":"Genre","dataType":"string"},{"propertyKey":"genreId","type":"Genre","dataType":"bigint"}],"Movie":[{"propertyKey":"movieId","type":"Movie","dataType":"bigint"},{"propertyKey":"genreId","type":"Movie","dataType":"bigint"},{"propertyKey":"year","type":"Movie","dataType":"bigint"},{"propertyKey":"name","type":"Movie","dataType":"string"}],"Family":[{"propertyKey":"name","type":"Family","dataType":"string"}]},"relationshipTypes":[{"properties":[],"name":"USES","id":"USES"},{"properties":[],"name":"HAS","id":"HAS"},{"properties":[{"propertyKey":"timeStamp","type":"WATCHED","dataType":"string"}],"name":"WATCHED","id":"WATCHED"},{"properties":[],"name":"BELONGS_TO","id":"BELONGS_TO"}],"palette":{"colors":["#FFE081","#C990C0","#F79767","#57C7E3","#F16667","#D9C8AE","#8DCC93","#ECB5C9","#4C8EDA","#FFC454","#DA7194","#569480","#848484","#D9D9D9"],"currentIndex":5},"createdAt":1639157825276,"lastEditedAt":1639157825276,"templates":[{"name":"Show all families and users linked to each family","id":"tmpl:1639159376687","createdAt":1639159376687,"text":"Show all families and users linked to each family","cypher":"MATCH (f:Family)<-[b:BELONGS_TO]-(u:User) RETURN f,b,u","params":[],"hasCypherErrors":false},{"name":"Show trending genres in selected state","id":"tmpl:1639159022306","createdAt":1639159022306,"text":"Show trending genres in $state","cypher":"MATCH (u:User {state: $state} )-[w:WATCHED]->(m:Movie)-->(g:Genre) return g","params":[{"name":"$state","dataType":"String","collapsed":false,"suggestionLabel":"User","suggestionProp":"state","suggestionBoolean":false,"cypher":null}],"hasCypherErrors":false},{"name":"Show users from selected state and all movies watched by them","id":"tmpl:1639158887123","createdAt":1639158887123,"text":"Show users from $state and all movies watched by them","cypher":"MATCH (u:User {state: $state} )-[w:WATCHED]->(m:Movie) RETURN u,w,m","params":[{"name":"$state","dataType":"String","collapsed":false,"suggestionLabel":"User","suggestionProp":"state","suggestionBoolean":false,"cypher":null}],"hasCypherErrors":false},{"name":"Show all users who watched selected movie ","id":"tmpl:1639158328919","createdAt":1639158328919,"text":"Users who watched movie $movie","cypher":"MATCH (u:User)-[w:WATCHED]->(m:Movie {name: $movie}) RETURN u,w,m","params":[{"name":"$movie","dataType":"String","collapsed":false,"suggestionLabel":"Movie","suggestionProp":"name","suggestionBoolean":false,"cypher":null}],"hasCypherErrors":false},{"name":"Show movies from selected genre","id":"tmpl:1639158268504","createdAt":1639158268504,"text":"Show all movies from genre $genre","cypher":"MATCH (m:Movie)-[h:HAS]->(g:Genre) WHERE g.name = $genre RETURN g, h, m","params":[{"name":"$genre","dataType":"String","collapsed":false,"suggestionLabel":"Genre","suggestionProp":"name","suggestionBoolean":false,"cypher":null}],"hasCypherErrors":false}],"hiddenRelationshipTypes":[],"hiddenCategories":[],"hideUncategorisedData":false,"isAuto":true,"parentPerspectiveId":false,"metadata":{"pathSegments":[{"source":"User","relationshipType":"WATCHED","target":"Movie"},{"source":"User","relationshipType":"BELONGS_TO","target":"Family"},{"source":"User","relationshipType":"USES","target":"IpAddress"},{"source":"Movie","relationshipType":"HAS","target":"Genre"}],"indexes":[{"label":"Family","type":"native","isMetadataPropIndex":true,"propertyKeys":["name"]},{"label":"IpAddress","type":"native","propertyKeys":["ipAddressId"]},{"label":"User","type":"native","propertyKeys":["ipAddressId","userId"]},{"label":"Genre","type":"native","propertyKeys":["genreId"]},{"label":"Movie","type":"native","propertyKeys":["movieId"]}],"stats":{"labels":{},"relationshipTypes":{"BELONGS_TO":120,"HAS":320,"USES":500,"WATCHED":1000}}},"version":"1.9.1"} -------------------------------------------------------------------------------- /code/csharp/Example.cs: -------------------------------------------------------------------------------- 1 | // install dotnet core on your system 2 | // dotnet new console -o . 3 | // dotnet add package Neo4j.Driver 4 | // paste in this code into Program.cs 5 | // dotnet run 6 | 7 | using System; 8 | using System.Collections.Generic; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using Neo4j.Driver; 12 | 13 | namespace dotnet { 14 | class Example { 15 | static async Task Main() { 16 | var driver = GraphDatabase.Driver("neo4j://:", 17 | AuthTokens.Basic("", "")); 18 | 19 | var cypherQuery = 20 | @" 21 | MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 22 | 23 | RETURN g.name as genre, count(g) as freq 24 | ORDER BY freq DESC 25 | "; 26 | 27 | var session = driver.AsyncSession(o => o.WithDatabase("neo4j")); 28 | var result = await session.ReadTransactionAsync(async tx => { 29 | var r = await tx.RunAsync(cypherQuery, 30 | new { state="Texas"}); 31 | return await r.ToListAsync(); 32 | }); 33 | 34 | await session?.CloseAsync(); 35 | foreach (var row in result) 36 | Console.WriteLine(row["genre"].As()); 37 | 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /code/go/example.go: -------------------------------------------------------------------------------- 1 | // go mod init main 2 | // go run example.go 3 | package main 4 | 5 | import ( 6 | "fmt" 7 | "github.com/neo4j/neo4j-go-driver/v4/neo4j" 8 | "io" 9 | "reflect" 10 | ) 11 | 12 | func main() { 13 | results, err := runQuery("neo4j://:", "neo4j", "", "") 14 | if err != nil { 15 | panic(err) 16 | } 17 | for _, result := range results { 18 | fmt.Println(result) 19 | } 20 | } 21 | 22 | func runQuery(uri, database, username, password string) (result []string, err error) { 23 | driver, err := neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, "")) 24 | if err != nil { 25 | return nil, err 26 | } 27 | defer func() {err = handleClose(driver, err)}() 28 | session := driver.NewSession(neo4j.SessionConfig{AccessMode: neo4j.AccessModeRead, DatabaseName: database}) 29 | defer func() {err = handleClose(session, err)}() 30 | results, err := session.ReadTransaction(func(transaction neo4j.Transaction) (interface{}, error) { 31 | result, err := transaction.Run( 32 | ` 33 | MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 34 | 35 | RETURN g.name as genre, count(g) as freq 36 | ORDER BY freq DESC 37 | `, map[string]interface{}{ 38 | "state": "Texas", 39 | }) 40 | if err != nil { 41 | return nil, err 42 | } 43 | var arr []string 44 | for result.Next() { 45 | value, found := result.Record().Get("genre") 46 | if found { 47 | arr = append(arr, value.(string)) 48 | } 49 | } 50 | if err = result.Err(); err != nil { 51 | return nil, err 52 | } 53 | return arr, nil 54 | }) 55 | if err != nil { 56 | return nil, err 57 | } 58 | result = results.([]string) 59 | return result, err 60 | } 61 | 62 | func handleClose(closer io.Closer, previousError error) error { 63 | err := closer.Close() 64 | if err == nil { 65 | return previousError 66 | } 67 | if previousError == nil { 68 | return err 69 | } 70 | return fmt.Errorf("%v closure error occurred:\n%s\ninitial error was:\n%w", reflect.TypeOf(closer), err.Error(), previousError) 71 | } 72 | -------------------------------------------------------------------------------- /code/java/Example.java: -------------------------------------------------------------------------------- 1 | // Add your the driver dependency to your pom.xml build.gradle etc. 2 | // Java Driver Dependency: http://search.maven.org/#artifactdetails|org.neo4j.driver|neo4j-java-driver|4.0.1|jar 3 | // Reactive Streams http://search.maven.org/#artifactdetails|org.reactivestreams|reactive-streams|1.0.3|jar 4 | // download jars into current directory 5 | // java -cp "*" Example.java 6 | 7 | import org.neo4j.driver.*; 8 | import static org.neo4j.driver.Values.parameters; 9 | 10 | public class Example { 11 | 12 | public static void main(String...args) { 13 | 14 | Driver driver = GraphDatabase.driver("neo4j://:", 15 | AuthTokens.basic("","")); 16 | 17 | try (Session session = driver.session(SessionConfig.forDatabase("neo4j"))) { 18 | 19 | String cypherQuery = 20 | "MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre)\n" + 21 | "\n" + 22 | "RETURN g.name as genre, count(g) as freq\n" + 23 | "ORDER BY freq DESC"; 24 | 25 | var result = session.readTransaction( 26 | tx -> tx.run(cypherQuery, 27 | parameters("state","Texas")) 28 | .list()); 29 | 30 | for (Record record : result) { 31 | System.out.println(record.get("genre").asString()); 32 | } 33 | } 34 | driver.close(); 35 | } 36 | } 37 | 38 | 39 | -------------------------------------------------------------------------------- /code/javascript/example.js: -------------------------------------------------------------------------------- 1 | // npm install --save neo4j-driver 2 | // node example.js 3 | const neo4j = require('neo4j-driver'); 4 | const driver = neo4j.driver('neo4j://:', 5 | neo4j.auth.basic('', ''), 6 | {/* encrypted: 'ENCRYPTION_OFF' */}); 7 | 8 | const query = 9 | ` 10 | MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 11 | 12 | RETURN g.name as genre, count(g) as freq 13 | ORDER BY freq DESC 14 | `; 15 | 16 | const params = {"state": "Texas"}; 17 | 18 | const session = driver.session({database:"neo4j"}); 19 | 20 | session.run(query, params) 21 | .then((result) => { 22 | result.records.forEach((record) => { 23 | console.log(record.get('genre')); 24 | }); 25 | session.close(); 26 | driver.close(); 27 | }) 28 | .catch((error) => { 29 | console.error(error); 30 | }); 31 | -------------------------------------------------------------------------------- /code/python/example.py: -------------------------------------------------------------------------------- 1 | # pip3 install neo4j-driver 2 | # python3 example.py 3 | 4 | from neo4j import GraphDatabase, basic_auth 5 | 6 | driver = GraphDatabase.driver( 7 | "neo4j://:", 8 | auth=basic_auth("", "")) 9 | 10 | cypher_query = ''' 11 | MATCH (u:User {state: $state} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 12 | 13 | RETURN g.name as genre, count(g) as freq 14 | ORDER BY freq DESC 15 | ''' 16 | 17 | with driver.session(database="neo4j") as session: 18 | results = session.read_transaction( 19 | lambda tx: tx.run(cypher_query, 20 | state="Texas").data()) 21 | for record in results: 22 | print(record['genre']) 23 | 24 | driver.close() 25 | -------------------------------------------------------------------------------- /data/csv/Movies.csv: -------------------------------------------------------------------------------- 1 | movieId,name,year,genre 2 | 1,Zack and Miri Make a Porno,2008,Romance 3 | 2,Youth in Revolt,2010,Comedy 4 | 3,You Will Meet a Tall Dark Stranger,2010,Comedy 5 | 4,When in Rome,2010,Comedy 6 | 5,What Happens in Vegas,2008,Comedy 7 | 6,Water For Elephants,2011,Drama 8 | 7,WALL-E,2008,Animation 9 | 8,Waitress,2007,Romance 10 | 9,Waiting For Forever,2011,Romance 11 | 10,Valentine's Day,2010,Comedy 12 | 11,Tyler Perry's Why Did I get Married,2007,Romance 13 | 12,Twilight: Breaking Dawn,2011,Romance 14 | 13,Twilight,2008,Romance 15 | 14,The Ugly Truth,2009,Comedy 16 | 15,The Twilight Saga: New Moon,2009,Drama 17 | 16,The Time Traveler's Wife,2009,Drama 18 | 17,The Proposal,2009,Comedy 19 | 18,The Invention of Lying,2009,Comedy 20 | 19,The Heartbreak Kid,2007,Comedy 21 | 20,The Duchess,2008,Drama 22 | 21,The Curious Case of Benjamin Button,2008,Fantasy 23 | 22,The Back-up Plan,2010,Comedy 24 | 23,Tangled,2010,Animation 25 | 24,Something Borrowed,2011,Romance 26 | 25,She's Out of My League,2010,Comedy 27 | 26,Sex and the City Two,2010,Comedy 28 | 27,Sex and the City 2,2010,Comedy 29 | 28,Sex and the City,2008,Comedy 30 | 29,Remember Me,2010,Drama 31 | 30,Rachel Getting Married,2008,Drama 32 | 31,Penelope,2008,Comedy 33 | 32,P.S. I Love You,2007,Romance 34 | 33,Over Her Dead Body,2008,Comedy 35 | 34,Our Family Wedding,2010,Comedy 36 | 35,One Day,2011,Romance 37 | 36,Not Easily Broken,2009,Drama 38 | 37,No Reservations,2007,Comedy 39 | 38,Nick and Norah's Infinite Playlist,2008,Comedy 40 | 39,New Year's Eve,2011,Romance 41 | 40,My Week with Marilyn,2011,Drama 42 | 41,Music and Lyrics,2007,Romance 43 | 42,Monte Carlo,2011,Romance 44 | 43,Miss Pettigrew Lives for a Day,2008,Comedy 45 | 44,Midnight in Paris,2011,Romance 46 | 45,Marley and Me,2008,Comedy 47 | 46,Mamma Mia!,2008,Comedy 48 | 47,Made of Honor,2008,Comedy 49 | 48,Love Happens,2009,Drama 50 | 49,Love & Other Drugs,2010,Comedy 51 | 50,Life as We Know It,2010,Comedy 52 | 51,License to Wed,2007,Comedy 53 | 52,Letters to Juliet,2010,Comedy 54 | 53,Leap Year,2010,Comedy 55 | 54,Knocked Up,2007,Comedy 56 | 55,Killers,2010,Action 57 | 56,Just Wright,2010,Comedy 58 | 57,Jane Eyre,2011,Romance 59 | 58,It's Complicated,2009,Comedy 60 | 59,I Love You Phillip Morris,2010,Comedy 61 | 60,High School Musical 3: Senior Year,2008,Comedy 62 | 61,He's Just Not That Into You,2009,Comedy 63 | 62,Good Luck Chuck,2007,Comedy 64 | 63,Going the Distance,2010,Comedy 65 | 64,Gnomeo and Juliet,2011,Animation 66 | 65,Ghosts of Girlfriends Past,2009,Comedy 67 | 66,Four Christmases,2008,Comedy 68 | 67,Fireproof,2008,Drama 69 | 68,Enchanted,2007,Comedy 70 | 69,Dear John,2010,Drama 71 | 70,Beginners,2011,Comedy 72 | 71,Across the Universe,2007,Romance 73 | 72,A Serious Man,2009,Drama 74 | 73,A Dangerous Method,2011,Drama 75 | 74,27 Dresses,2008,Comedy 76 | 75,(500) Days of Summer,2009,Comedy 77 | 76,Shang-Chi,2021,Action 78 | 77,Venom: Let There be Carnage,2021,Action 79 | 78,Black Widow,2021,Action 80 | 79,F9: The Fast Saga,2021,Action 81 | 80,No Time to Die,2021,Action 82 | 81,Eternals,2021,Action 83 | 82,Free Guy,2021,Action 84 | 83,Dune,2021,Action 85 | 84,Godzilla vs. Kong,2021,Action 86 | 85,The Suicide Squad,2021,Action 87 | 86,Mortal Kombat,2021,Action 88 | 87,Snake Eyes: G.I. Joe Origins,2021,Action 89 | 88,Wrath of Man,2021,Action 90 | 89,Wonder Woman 1984,2021,Action 91 | 90,The Marksman,2021,Action 92 | 91,Chaos Walking,2021,Action 93 | 92,Monster Hunter,2021,Action 94 | 93,The Protege,2021,Action 95 | 94,CopShop,2021,Action 96 | 95,Nou fo,2021,Action 97 | 96,Tenet,2021,Action 98 | 97,Kokaku kidotai,2021,Action 99 | 98,World War Z,2021,Action 100 | 99,Mogadisyu,2021,Action 101 | 100,Doctor,2021,Action 102 | 101,Top Gun,2021,Action 103 | 102,SAS: Red Notice,2021,Action 104 | 103,Shadow in the Cloud,2021,Action 105 | 104,The Paper Tigers,2021,Action 106 | 105,Jurassic World,2021,Action 107 | 106,Trigger Point,2021,Action 108 | 107,Prisoners of the Ghostland,2021,Action 109 | 108,A Soldier's Story 2: Return,2021,Action 110 | 109,Archenemy,2021,Action 111 | 110,Equal Standard,2021,Action 112 | 111,Average Joe,2021,Action 113 | 112,Mayday,2021,Action 114 | 113,No Place,2021,Action 115 | 114,Tian Huo Wei Qing,2021,Action 116 | 115,Den blomstertid nu kommer,2021,Action 117 | 116,Jungle Cruise,2021,Adventure 118 | 117,Encanto,2021,Adventure 119 | 118,The Boss Baby: Family Business,2021,Adventure 120 | 119,The Addams Family 2,2021,Adventure 121 | 120,Raya and the Last Dragon,2021,Adventure 122 | 121,Kimetsu no Yaiba,2021,Adventure 123 | 122,Tom and Jerry,2021,Adventure 124 | 123,Clifford the Big Red Dog,2021,Adventure 125 | 124,Peter Rabbit 2: The Runaway,2021,Adventure 126 | 125,PAW Patrol: The Movie,2021,Adventure 127 | 126,The Croods: A New Age,2021,Adventure 128 | 127,Ron's Gone Wrong,2021,Adventure 129 | 128,Spirit Untamed,2021,Adventure 130 | 129,The Green Knight,2021,Adventure 131 | 130,Boku no Hero Academia,2021,Adventure 132 | 131,Pinocchio,2021,Adventure 133 | 132,Scoob!,2021,Adventure 134 | 133,The Emperor's New Groove,2021,Adventure 135 | 134,Aya to majo,2021,Adventure 136 | 135,Abominable,2021,Adventure 137 | 136,Cryptozoo,2021,Adventure 138 | 137,Mystery of the Kingdom of God,2021,Adventure 139 | 138,The Laws Of The Universe,2021,Adventure 140 | 139,A Quiet Place: Part II,2021,Horror 141 | 140,Halloween Kills,2021,Horror 142 | 141,The Conjuring: The Devil Made Me Do It,2021,Horror 143 | 142,Candyman,2021,Horror 144 | 143,The Forever Purge,2021,Horror 145 | 144,Don't Breathe 2,2021,Horror 146 | 145,Escape Room,2021,Horror 147 | 146,Spiral,2021,Horror 148 | 147,The Unholy,2021,Horror 149 | 148,Malignant,2021,Horror 150 | 149,Resident Evil,2021,Horror 151 | 150,Antlers,2021,Horror 152 | 151,The Night House,2021,Horror 153 | 152,Separation,2021,Horror 154 | 153,Titane,2021,Horror 155 | 154,Wrong Turn,2021,Horror 156 | 155,In the Earth,2021,Horror 157 | 156,Come Play,2021,Horror 158 | 157,Werewolves Within,2021,Horror 159 | 158,Willy's Wonderland,2021,Horror 160 | 159,Freaky,2021,Horror 161 | 160,Murder in the Woods,2021,Horror 162 | 161,The Resort,2021,Horror 163 | 162,The Reckoning,2021,Horror 164 | 163,Held,2021,Horror 165 | 164,Gaia,2021,Horror 166 | 165,The Djinn,2021,Horror 167 | 166,Psycho Goreman,2021,Horror 168 | 167,Censor,2021,Horror 169 | 168,Demonic,2021,Horror 170 | 169,Come True,2021,Horror 171 | 170,Alien,2021,Horror 172 | 171,Son,2021,Horror 173 | 172,The Vigil,2021,Horror 174 | 173,Death Rider in the House of Vampires,2021,Horror 175 | 174,Bloody Hell,2021,Horror 176 | 175,Jakob's Wife,2021,Horror 177 | 176,Halloween,2021,Horror 178 | 177,We Need to Do Something,2021,Horror 179 | 178,Hunter Hunter,2021,Horror 180 | 179,The Scary of Sixty First,2021,Horror 181 | 180,The Feast,2021,Horror 182 | 181,The Boonies,2021,Horror 183 | 182,Gosuto masuta,2021,Horror 184 | 183,Victim of Love,2021,Horror 185 | 184,The Dark and The Wicked,2021,Horror 186 | 185,Crack House of the Dead,2021,Horror 187 | 186,Andra Sidan,2021,Horror 188 | 187,Funhouse,2021,Horror 189 | 188,Ghostbusters: Afterlife,2021,Comedy 190 | 189,Cruella,2021,Comedy 191 | 190,Space Jam: A New Legacy,2021,Comedy 192 | 191,The Hitman's Wife's Bodyguard,2021,Comedy 193 | 192,The French Dispatch,2021,Comedy 194 | 193,Dazed and Confused,2021,Comedy 195 | 194,The House Next Door: Meet the Blacks 2,2021,Comedy 196 | 195,Here Today,2021,Comedy 197 | 196,The War with Grandpa,2021,Comedy 198 | 197,Queen Bees,2021,Comedy 199 | 198,Together Together,2021,Comedy 200 | 199,Honsla Rakh,2021,Comedy 201 | 200,Scott Pilgrim vs. The World,2021,Comedy 202 | 201,Un rescate de huevitos,2021,Comedy 203 | 202,French Exit,2021,Comedy 204 | 203,Jathi Ratnalu,2021,Comedy 205 | 204,Ghostbusters,2021,Comedy 206 | 205,Bo Gia,2021,Comedy 207 | 206,Blithe Spirit,2021,Comedy 208 | 207,India Sweets and Spices,2021,Comedy 209 | 208,I'm Your Man,2021,Comedy 210 | 209,Delicieux,2021,Comedy 211 | 210,Once I Was Engaged,2021,Comedy 212 | 211,Together,2021,Comedy 213 | 212,Half Brothers,2021,Comedy 214 | 213,Shiva Baby,2021,Comedy 215 | 214,Walking with Herb,2021,Comedy 216 | 215,Tango Shalom,2021,Comedy 217 | 216,Riders of Justice,2021,Comedy 218 | 217,Christmas Vs The Walters,2021,Comedy 219 | 218,The Nowhere Inn,2021,Comedy 220 | 219,Last Call,2021,Comedy 221 | 220,Senior Moment,2021,Comedy 222 | 221,Mainstream,2021,Comedy 223 | 222,La daronne,2021,Comedy 224 | 223,Our Ladies,2021,Comedy 225 | 224,The Ladykillers,2021,Comedy 226 | 225,Mandibules,2021,Comedy 227 | 226,Effacer l'historique,2021,Comedy 228 | 227,How It Ends,2021,Comedy 229 | 228,Sniegu juz nigdy nie bedzie,2021,Comedy 230 | 229,First Date,2021,Comedy 231 | 230,Best Sellers,2021,Comedy 232 | 231,Zombie Bro,2021,Comedy 233 | 232,Blanche comme neige,2021,Comedy 234 | 233,El Planeta,2021,Comedy 235 | 234,Here After,2021,Comedy 236 | 235,Rock Paper Scissors,2021,Comedy 237 | 236,Deux,2021,Comedy 238 | 237,Project Space 13,2021,Comedy 239 | 238,Elbow Grease,2021,Comedy 240 | 239,Killer Raccoons 2,2021,Comedy 241 | 240,The Bra,2021,Comedy 242 | 241,Old,2021,Thriller 243 | 242,Nobody,2021,Thriller 244 | 243,The Little Things,2021,Thriller 245 | 244,Last Night in Soho,2021,Thriller 246 | 245,Those Who Wish Me Dead,2021,Thriller 247 | 246,Ironbark,2021,Thriller 248 | 247,Reminiscence,2021,Thriller 249 | 248,Fatale,2021,Thriller 250 | 249,Voyagers,2021,Thriller 251 | 250,The Card Counter,2021,Thriller 252 | 251,Profile,2021,Thriller 253 | 252,Dreamland,2021,Thriller 254 | 253,The Dry,2021,Thriller 255 | 254,Dutch,2021,Thriller 256 | 255,Nuevo Orden,2021,Thriller 257 | 256,Six Minutes to Midnight,2021,Thriller 258 | 257,Safer at Home,2021,Thriller 259 | 258,Spy no Tsuma,2021,Thriller 260 | 259,Lansky,2021,Thriller 261 | 260,Always & Forever,2021,Thriller 262 | 261,My Zoe,2021,Thriller 263 | 262,The God Committee,2021,Thriller 264 | 263,Yakuza Princess,2021,Thriller 265 | 264,The Beta Test,2021,Thriller 266 | 265,The Night,2021,Thriller 267 | 266,John and the Hole,2021,Thriller 268 | 267,The Violent Heart,2021,Thriller 269 | 268,Final Frequency,2021,Thriller 270 | 269,Angelique's Isle,2021,Thriller 271 | 270,Dark State,2021,Thriller 272 | 271,Tomato Red,2021,Thriller 273 | 272,Blood Brothers,2021,Thriller 274 | 273,Below the Fold,2021,Thriller 275 | 274,The Shade Shepherd,2021,Thriller 276 | 275,Let Him Go,2021,Thriller 277 | 276,Roadrunner,2021,Documentary 278 | 277,Summer of Soul,2021,Documentary 279 | 278,Show Me the Father,2021,Documentary 280 | 279,The Jesus Music,2021,Documentary 281 | 280,The Alpinist,2021,Documentary 282 | 281,The Rescue,2021,Documentary 283 | 282,The Sparks Brothers,2021,Documentary 284 | 283,The Truffle Hunters,2021,Documentary 285 | 284,The Lost Leonardo,2021,Documentary 286 | 285,Final Account,2021,Documentary 287 | 286,Julia,2021,Documentary 288 | 287,Rita Moreno,2021,Documentary 289 | 288,Becoming Cousteau,2021,Documentary 290 | 289,Ailey,2021,Documentary 291 | 290,Gunda,2021,Documentary 292 | 291,The Loneliest Whale,2021,Documentary 293 | 292,On Broadway,2021,Documentary 294 | 293,In Balanchine's Classroom,2021,Documentary 295 | 294,CatVideoFest,2021,Documentary 296 | 295,The First Wave,2021,Documentary 297 | 296,Truman & Tennessee,2021,Documentary 298 | 297,Kurt Vonnegut: Unstuck in Time,2021,Documentary 299 | 298,MLK/FBI,2021,Documentary 300 | 299,Some Kind of Heaven,2021,Documentary 301 | 300,"All Light, Everywhere",2021,Documentary 302 | 301,The Human Factor,2021,Documentary 303 | 302,Das geheime Leben der Baume,2021,Documentary 304 | 303,Ascension (???),2021,Documentary 305 | 304,No Ordinary Man,2021,Documentary 306 | 305,Bring Your Own Brigade,2021,Documentary 307 | 306,Stray,2021,Documentary 308 | 307,Storm Lake,2021,Documentary 309 | 308,Lydia Lunch,2021,Documentary 310 | 309,The Meaning of Hitler,2021,Documentary 311 | 310,State Funeral,2021,Documentary 312 | 311,Sabaya,2021,Documentary 313 | 312,Petite fille,2021,Documentary 314 | 313,Can You Bring It,2021,Documentary 315 | 314,All the Streets are Silent,2021,Documentary 316 | 315,Enemies of the State,2021,Documentary 317 | 316,Writing With Fire,2021,Documentary 318 | 317,Bill Traylor: Chasing Ghosts,2021,Documentary 319 | 318,The Village Detective,2021,Documentary 320 | 319,A Glitch in the Matrix,2021,Documentary 321 | 320,"Amigo Skate, Cuba",2021,Documentary 322 | -------------------------------------------------------------------------------- /data/csv/Users.csv: -------------------------------------------------------------------------------- 1 | userId,firstName,lastName,gender,email,state,country,phone,ipAddress 2 | 1,Dorette,Burbidge,Male,dburbidge0@japanpost.jp,Ohio,US,834-424-8856,59.146.136.204 3 | 2,Farley,Mongenot,Female,fmulryan1@adobe.com,Virginia,US,586-213-7447,125.42.199.194 4 | 3,Aileen,Diggens,Male,adiggens2@chron.com,Ohio,US,414-618-9307,186.168.99.84 5 | 4,Milissent,Lyokhin,Female,mmacairt3@fastcompany.com,Virginia,US,289-923-3928,209.186.131.167 6 | 5,Kienan,Stanway,Male,kstanway4@lycos.com,Kentucky,US,185-726-4318,176.186.239.197 7 | 6,Brandie,Schimonek,Male,bscollick5@macromedia.com,Kentucky,US,574-326-7989,127.158.155.26 8 | 7,Englebert,Peaseman,Female,epeaseman6@vkontakte.ru,Virginia,US,298-983-5834,211.6.192.145 9 | 8,Katina,Craker,Female,kcraker7@tumblr.com,Ohio,US,103-221-8119,115.226.228.22 10 | 9,Nissie,Smewing,Male,nsmewing8@state.tx.us,Kentucky,US,721-573-0606,41.118.231.4 11 | 10,Skipton,Meco,Female,smeco9@independent.co.uk,Virginia,US,725-521-6886,240.251.232.0 12 | 11,Lucais,Stoite,Male,lstoitea@cocolog-nifty.com,Kentucky,US,177-292-2353,18.87.25.172 13 | 12,Shalne,Sopp,Male,ssoppb@sitemeter.com,Kentucky,US,800-873-8514,213.130.219.85 14 | 13,Dorelle,Sighart,Male,dsighartc@lulu.com,Kentucky,US,159-638-0739,13.188.234.179 15 | 14,Marcia,Imesson,Female,mingreyd@skyrock.com,New York,US,161-111-0795,67.204.43.20 16 | 15,Germain,O'Hartnedy,Male,gohartnedye@alexa.com,Virginia,US,659-226-6776,43.238.26.237 17 | 16,Herve,Coupland,Male,hcouplandf@t.co,Ohio,US,274-512-9316,204.39.82.152 18 | 17,Iggy,Duffett,Male,iduffettg@weibo.com,Ohio,US,955-528-9097,117.27.212.10 19 | 18,Fernando,Blewett,Male,fblewetth@storify.com,Washington,US,848-844-6148,2.238.236.187 20 | 19,Phylis,Butterfill,Female,pbutterfilli@harvard.edu,Ohio,US,227-656-2131,72.148.188.249 21 | 20,Oates,Lorente,Female,olorentej@mac.com,Virginia,US,718-254-3538,14.207.210.190 22 | 21,Jade,Storey,Female,jstoreyk@ucoz.com,Kentucky,US,413-925-9548,197.52.227.109 23 | 22,Malcolm,Woollhead,Female,mwoollheadl@wufoo.com,Illinois,US,333-290-6488,159.57.100.205 24 | 23,Amabelle,Fenning,Male,afenningm@merriam-webster.com,Connecticut,US,666-566-9060,213.71.217.250 25 | 24,Leese,Absolem,Female,ladvanin@github.com,New Jersey,US,329-179-2858,133.198.156.5 26 | 25,Barris,Keemar,Male,bkillfordo@godaddy.com,New York,US,876-599-0692,167.40.189.45 27 | 26,Leigh,Standish,Female,lstandishp@purevolume.com,Kentucky,US,184-415-3324,91.64.31.217 28 | 27,Zitella,Cousins,Female,zcousinsq@creativecommons.org,Ohio,US,212-327-2150,187.24.225.33 29 | 28,Tarrah,Caw,Female,tcawr@symantec.com,Ohio,US,456-113-5728,12.213.27.177 30 | 29,Robbyn,McLugish,Male,rmclugishs@nhs.uk,Virginia,US,656-336-5037,129.217.216.3 31 | 30,Jard,Dilke,Male,jdilket@msn.com,Ohio,US,928-275-9801,174.9.170.69 32 | 31,Rodney,Thornborrow,Female,rthornborrowu@hatena.ne.jp,Kentucky,US,237-910-2160,75.71.60.45 33 | 32,Jacquelynn,Steely,Male,jsteelyv@census.gov,Kentucky,US,472-739-8553,237.78.240.98 34 | 33,Margie,Eunson,Female,meunsonw@mysql.com,Ohio,US,672-740-4029,66.241.101.8 35 | 34,Flo,Chalcraft,Male,fchiversx@bizjournals.com,Ohio,US,523-716-4152,51.49.92.51 36 | 35,Penni,Rigmand,Male,promagnosiy@rakuten.co.jp,California,US,496-963-8223,229.123.59.184 37 | 36,Jobye,Maycey,Male,jmcalindenz@ezinearticles.com,Virginia,US,288-901-6801,29.221.147.16 38 | 37,Cynthie,Fackney,Male,cfelder10@bizjournals.com,Ohio,US,405-865-4232,192.54.162.135 39 | 38,Merline,Gemeau,Female,mgemeau11@constantcontact.com,Connecticut,US,616-123-4872,253.112.190.4 40 | 39,Artair,Le Quesne,Female,alenoir12@eventbrite.com,Virginia,US,516-449-4080,103.186.31.19 41 | 40,Robyn,Haskett,Female,rhaskett13@pbs.org,New York,US,124-625-6492,58.190.219.73 42 | 41,Barnaby,Sidlow,Male,bsidlow14@cam.ac.uk,Kentucky,US,543-355-9069,217.185.209.63 43 | 42,Gris,Paulsen,Female,gpaulsen15@tamu.edu,Virginia,US,675-181-2809,222.167.167.43 44 | 43,Sibbie,Penylton,Female,spenylton16@kickstarter.com,California,US,158-300-9743,75.52.208.182 45 | 44,Jobey,Dugmore,Female,jdugmore17@sourceforge.net,Ohio,US,518-226-9838,158.195.29.66 46 | 45,Meg,Skurm,Male,mskurm18@trellian.com,Kentucky,US,905-137-4325,239.12.128.34 47 | 46,Trish,Bartolomieu,Male,tbartolomieu19@a8.net,Texas,US,505-725-7346,241.35.176.246 48 | 47,Cornell,Keatch,Male,ckeatch1a@dropbox.com,New York,US,744-590-7472,208.5.216.124 49 | 48,Ulla,Brownstein,Male,ubrownstein1b@eventbrite.com,Washington,US,125-967-2999,193.127.239.19 50 | 49,Cindie,Betjeman,Female,cbetjeman1c@e-recht24.de,Washington,US,365-846-8886,123.168.84.162 51 | 50,Royal,Brocking,Male,rbrocking1d@army.mil,Washington,US,706-845-9984,70.161.66.15 52 | 51,Shirlene,Borres,Female,sbortoloni1e@tiny.cc,Washington,US,141-914-4106,16.129.236.37 53 | 52,Anitra,Hawkslee,Male,ahawkslee1f@g.co,New York,US,969-846-5443,117.187.248.143 54 | 53,Bobbe,Wittering,Female,bwittering1g@surveymonkey.com,Illinois,US,280-756-7921,215.150.219.99 55 | 54,Gardiner,Dudman,Male,gdudman1h@newyorker.com,Ohio,US,698-447-0150,192.244.162.212 56 | 55,Ingrim,De Mars,Male,idenkel1i@4shared.com,Ohio,US,702-239-2465,35.42.26.101 57 | 56,Tiffanie,Van der Kruys,Female,tvanderkruys1j@clickbank.net,Illinois,US,458-551-4667,133.89.153.117 58 | 57,Lanette,Laughtisse,Female,llaughtisse1k@elegantthemes.com,Virginia,US,893-928-1059,158.239.246.83 59 | 58,Emmit,Coveny,Female,ecoveny1l@mozilla.com,Ohio,US,165-476-7973,164.231.88.82 60 | 59,Audrie,Privett,Male,aprivett1m@tripod.com,California,US,608-561-5337,76.107.108.146 61 | 60,Liese,Absolem,Female,aainslie1n@studiopress.com,New Jersey,US,724-930-9130,133.198.156.5 62 | 61,Far,Teape,Male,fteape1o@deliciousdays.com,Kentucky,US,304-772-9632,7.134.125.206 63 | 62,Vaughn,Domsalla,Male,vdomsalla1p@globo.com,Ohio,US,104-243-3845,247.19.46.94 64 | 63,Andriana,Gare,Female,agare1q@disqus.com,Connecticut,US,408-592-1668,83.18.132.84 65 | 64,Nanete,Blaxland,Male,nblaxland1r@jalbum.net,Washington,US,888-403-8950,2.238.236.186 66 | 65,Storm,MacRorie,Female,smangeney1s@clickbank.net,Virginia,US,573-424-0861,149.178.224.218 67 | 66,Eal,Grombridge,Female,ehakey1t@livejournal.com,New York,US,629-915-4262,70.93.192.173 68 | 67,Had,Sandford,Female,hsandford1u@cbslocal.com,Kentucky,US,784-309-4870,131.6.158.32 69 | 68,Bertie,Chalcraft,Male,bclayworth1v@rakuten.co.jp,Ohio,US,221-732-1603,209.255.88.64 70 | 69,Holly,Applegarth,Male,harmfirld1w@rambler.ru,Nevada,US,918-828-5154,199.231.127.16 71 | 70,Hansiain,Martindale,Male,hmartindale1x@blog.com,Virginia,US,204-836-6340,113.167.208.148 72 | 71,Sebastien,Gleadhall,Female,sgleadhall1y@ameblo.jp,Connecticut,US,131-420-6265,73.42.187.184 73 | 72,Michaela,O'Shevlan,Male,moshevlan1z@lycos.com,Virginia,US,363-865-2127,203.248.198.141 74 | 73,Aguste,Wakeling,Male,awickling20@imageshack.us,Illinois,US,618-266-6516,159.20.53.178 75 | 74,Kara-lynn,Oswal,Male,koswal21@amazon.co.jp,Virginia,US,312-849-1941,138.127.11.128 76 | 75,Ladonna,Annott,Female,lannott22@xinhuanet.com,Nevada,US,521-674-0660,155.215.120.214 77 | 76,Adrianna,Edleston,Male,aedleston23@ibm.com,Ohio,US,185-425-5949,42.130.137.194 78 | 77,Kylie,Gilderoy,Female,kgillooly24@cargocollective.com,Connecticut,US,842-950-9668,165.95.27.225 79 | 78,Wilton,Mulvey,Female,wmulvey25@163.com,Virginia,US,242-234-8723,170.73.240.36 80 | 79,Earlie,Applegarth,Female,eashby26@google.com.br,Nevada,US,183-810-3443,199.231.127.16 81 | 80,Missie,Conybear,Male,mconybear27@nifty.com,Ohio,US,727-292-9346,219.8.210.108 82 | 81,Kylie,Purnell,Male,kpurnell28@cnn.com,California,US,468-553-4205,78.189.244.187 83 | 82,Kayla,Pignon,Female,kpignon29@mac.com,California,US,221-614-4115,126.104.70.60 84 | 83,Sephira,Swane,Male,standy2a@tinypic.com,Kentucky,US,320-814-7666,247.145.254.234 85 | 84,Courtenay,Covert,Female,ccovert2b@i2i.jp,Ohio,US,175-252-1115,160.206.30.151 86 | 85,Hasty,Eddolls,Male,heddolls2c@vinaora.com,Ohio,US,444-631-9231,151.128.197.39 87 | 86,Ganny,Soot,Male,gsoot2d@howstuffworks.com,Kentucky,US,979-976-4722,176.23.137.157 88 | 87,Quinlan,Tiller,Female,qtiller2e@wp.com,Kentucky,US,700-975-1017,131.11.212.131 89 | 88,Nellie,Grellier,Male,ngrellier2f@rakuten.co.jp,New York,US,257-669-0011,155.49.100.248 90 | 89,Anna-diana,Dwerryhouse,Female,adwerryhouse2g@oakley.com,Ohio,US,986-819-7086,13.251.243.140 91 | 90,Dev,Marrion,Female,dmarrion2h@skype.com,Virginia,US,582-737-3983,29.65.29.154 92 | 91,Tova,Canton,Female,tcanton2i@surveymonkey.com,Ohio,US,133-749-0749,97.184.66.51 93 | 92,Maxy,Gershom,Female,mgershom2j@51.la,Connecticut,US,951-605-5344,131.161.93.251 94 | 93,Ceil,Tharme,Male,ctharme2k@vinaora.com,Kentucky,US,902-667-5186,65.89.248.73 95 | 94,Gerard,Toy,Male,gtoy2l@army.mil,Kentucky,US,563-467-7369,126.181.129.15 96 | 95,Ruby,Simonou,Male,rsimonou2m@squarespace.com,Kentucky,US,767-540-2782,98.198.208.16 97 | 96,Dane,Tremayle,Female,dtremayle2n@un.org,Kentucky,US,616-352-3588,43.252.141.52 98 | 97,Edgardo,Grombridge,Male,cgrombridge92@miibeian.gov.cn,New York,US,403-342-5761,239.56.155.50 99 | 98,Rosalinda,Ferrari,Male,rferrari2p@bbb.org,Connecticut,US,731-996-9488,152.145.204.236 100 | 99,Sheeree,Ojeda,Male,sosheeryne2q@mit.edu,Virginia,US,708-988-1869,246.88.70.230 101 | 100,Christopher,Cowmeadow,Female,ccowmeadow2r@hugedomains.com,Ohio,US,841-166-2763,124.182.186.182 102 | 101,Geralda,Wiltsher,Male,gwiltsher2s@telegraph.co.uk,Illinois,US,999-192-0716,159.20.53.180 103 | 102,Duff,Kleiser,Male,dkyngdon2t@bloomberg.com,New York,US,602-136-8892,232.222.5.100 104 | 103,Robbert,Daton,Male,rdaton2u@google.co.jp,Ohio,US,806-470-3984,38.38.254.141 105 | 104,Nicol,Chalcraft,Male,nchristene2v@wufoo.com,Ohio,US,669-604-6453,209.255.88.64 106 | 105,Granville,Maycey,Male,gmcgall2w@weather.com,Virginia,US,770-932-2873,170.141.151.111 107 | 106,Bar,O'Hear,Female,bohear2x@feedburner.com,Virginia,US,137-180-7754,176.65.4.38 108 | 107,Tiffie,Utley,Male,tutley2y@aol.com,Illinois,US,742-340-2882,193.6.4.227 109 | 108,Tobin,Vassman,Female,tvassman2z@opera.com,Illinois,US,814-807-2768,210.125.140.59 110 | 109,Petey,Swane,Female,psyder30@twitter.com,Kentucky,US,991-647-6916,247.145.254.232 111 | 110,Husein,Woolam,Male,hwoolam31@yellowpages.com,Illinois,US,911-815-3254,215.150.219.100 112 | 111,Rebecca,Riddall,Male,rriddall32@tmall.com,California,US,468-739-8967,51.219.169.246 113 | 112,Josepha,Mewis,Female,jmewis33@tripadvisor.com,Virginia,US,531-269-6118,222.96.0.69 114 | 113,Ingram,Sandhill,Male,isandhill34@google.com.br,Kentucky,US,552-593-2182,16.22.73.183 115 | 114,Izzy,Quinion,Male,iquinion35@google.fr,California,US,138-970-8095,170.46.3.164 116 | 115,Dunstan,Skett,Female,dskett36@ihg.com,Kentucky,US,179-438-1865,247.102.11.221 117 | 116,Ronda,Skilling,Female,rskilling37@bbc.co.uk,Kentucky,US,765-863-9401,237.121.93.144 118 | 117,Adrienne,Brocklehurst,Male,abrocklehurst38@privacy.gov.au,Washington,US,612-398-5786,218.252.159.50 119 | 118,Chiquita,Nann,Male,cnann39@php.net,Virginia,US,679-882-9116,9.192.112.4 120 | 119,Findley,Sattin,Female,fsattin3a@cloudflare.com,Kentucky,US,851-656-1467,56.205.177.201 121 | 120,Odelia,Heynen,Female,oheynen3b@columbia.edu,New York,US,966-590-7139,211.144.137.225 122 | 121,Lisetta,Kitchinham,Female,lkitchinham3c@goo.ne.jp,New York,US,358-355-8928,79.32.210.82 123 | 122,Glen,Vertigan,Male,gvertigan3d@google.co.uk,Illinois,US,536-511-4086,12.151.100.39 124 | 123,Zackariah,Digger,Female,zdigger3e@businesswire.com,Ohio,US,994-744-8343,179.19.54.255 125 | 124,Enrika,Durnan,Female,edurnan3f@dell.com,Ohio,US,156-386-0957,125.43.142.80 126 | 125,Jeddy,Pawelski,Male,jpawelski3g@buzzfeed.com,Virginia,US,460-485-0054,213.199.200.28 127 | 126,Ross,Creaser,Female,rcreaser3h@wix.com,Ohio,US,879-699-2700,92.177.144.216 128 | 127,Isabelle,Beadnall,Male,ibeadnall3i@oakley.com,Texas,US,711-371-6200,34.12.66.72 129 | 128,Madelaine,Kleinmintz,Female,mkleinmintz3j@zimbio.com,New York,US,320-553-8783,34.125.169.209 130 | 129,Beret,MacRinn,Male,bmacrinn3k@cmu.edu,Virginia,US,662-260-2209,176.33.12.236 131 | 130,Wolfie,MacRorie,Female,wmagor3l@blogtalkradio.com,Virginia,US,339-235-3509,149.178.224.218 132 | 131,Eda,Shee,Male,eshee3m@ft.com,Kentucky,US,928-576-3235,198.72.115.5 133 | 132,Dallas,Kleinert,Male,dkleinert3n@buzzfeed.com,New York,US,105-543-7053,48.77.11.95 134 | 133,Ibrahim,Loblie,Male,iloblie3o@tripadvisor.com,Virginia,US,643-554-4382,52.41.16.77 135 | 134,Adamo,Sowley,Female,aspoor3p@a8.net,Kentucky,US,918-597-6597,163.107.178.72 136 | 135,Alexis,Rigmand,Male,aroisen3q@bloglovin.com,California,US,428-112-3184,229.123.59.183 137 | 136,Vanya,Kisar,Female,vkisar3r@sphinn.com,New York,US,941-352-5845,196.229.114.202 138 | 137,Vilma,De Mars,Female,vdemars3s@is.gd,Ohio,US,827-474-4596,15.250.123.170 139 | 138,Wandis,Blewett,Male,wboam3t@wired.com,Washington,US,655-269-4581,2.238.236.189 140 | 139,Harlie,Berrow,Male,hberrow3u@purevolume.com,Washington,US,144-552-5755,161.115.13.234 141 | 140,Arne,Colwell,Female,acolwell3v@businessweek.com,Ohio,US,792-780-3997,54.198.113.41 142 | 141,Alexis,Erdes,Female,aerdes3w@mapquest.com,Ohio,US,839-326-4329,230.96.164.39 143 | 142,Doyle,Wakeling,Male,dweale3x@boston.com,Illinois,US,187-795-7452,159.20.53.178 144 | 143,Laina,Francescone,Female,lganforth3y@nih.gov,Connecticut,US,478-393-7288,55.238.98.193 145 | 144,Merola,Sheekey,Male,msheekey3z@businessinsider.com,Kentucky,US,354-643-3784,88.57.83.172 146 | 145,Lennie,Cowwell,Male,lcowwell40@washington.edu,Ohio,US,512-405-7051,125.20.59.29 147 | 146,Gillie,Gianolini,Female,ggianolini41@tripod.com,Connecticut,US,212-819-5067,151.106.192.11 148 | 147,Abbie,Swane,Female,asybbe42@tripod.com,Kentucky,US,312-373-8139,247.145.254.231 149 | 148,Pammi,Von Der Empten,Female,pvonderempten43@cbslocal.com,Illinois,US,291-516-8324,143.29.173.234 150 | 149,Mella,Curr,Female,mcurr44@opensource.org,Ohio,US,914-798-6357,129.42.246.203 151 | 150,Margo,Chalcot,Female,mchalcot45@bluehost.com,Ohio,US,122-919-2168,222.65.45.114 152 | 151,Judd,Pedrocco,Male,jpenritt46@pcworld.com,Virginia,US,102-383-0081,5.46.227.169 153 | 152,Devin,Torrese,Female,dtorrese47@imdb.com,Kentucky,US,106-458-4194,189.245.196.108 154 | 153,Carr,Keemar,Female,ckeemar48@wikimedia.org,New York,US,382-816-6514,169.230.198.192 155 | 154,Caria,Ridwood,Male,cridwood49@wordpress.org,California,US,874-344-9929,5.4.190.250 156 | 155,Gunner,Middlemass,Female,gmiddlemass4a@printfriendly.com,Virginia,US,657-352-0132,188.82.92.232 157 | 156,Korney,Rigmand,Male,krigmand4b@barnesandnoble.com,California,US,407-265-7398,229.123.59.182 158 | 157,Leesa,De Lisle,Female,ldelisle4c@fema.gov,Ohio,US,176-574-9359,219.215.23.8 159 | 158,Quinn,Francescone,Female,qfrancescone4d@tripod.com,Connecticut,US,198-872-3177,75.111.106.145 160 | 159,Wayland,Wroath,Female,wwroath4e@yandex.ru,Illinois,US,987-818-0517,54.222.184.173 161 | 160,Ardelia,Meany,Female,ameany4f@shinystat.com,Virginia,US,790-423-2977,183.116.204.176 162 | 161,Ondrea,Garnsey,Male,ogarnsey4g@blogtalkradio.com,Connecticut,US,281-990-8494,212.228.171.86 163 | 162,Hort,Benian,Female,hbenian6h@dmoz.org,Texas,US,758-188-8638,120.81.160.131 164 | 163,Sanson,Berrisford,Female,sberrisford4i@seesaa.net,Washington,US,734-689-1559,42.58.139.87 165 | 164,Hussein,D,Female,hdanielovitch4j@tinypic.com,Ohio,US,780-206-6658,140.53.226.88 166 | 165,Zerk,Battaille,Male,zbattaille4k@ted.com,Texas,US,205-497-4522,75.55.81.251 167 | 166,Porty,Aartsen,Male,paartsen4l@nifty.com,New Jersey,US,189-407-8226,101.37.174.75 168 | 167,Albina,O'Corrane,Female,aocorrane4m@jugem.jp,Virginia,US,835-407-1211,41.13.181.48 169 | 168,Tadio,Tripcony,Female,ttripcony4n@spotify.com,Illinois,US,160-423-6736,234.133.54.126 170 | 169,Caren,MacRannell,Male,cmacrannell4o@cafepress.com,Virginia,US,850-460-6627,41.189.105.206 171 | 170,Mercedes,Dakin,Male,mdakin4p@digg.com,Ohio,US,468-754-1288,148.182.187.25 172 | 171,Keary,Wilton,Female,kwilton4q@storify.com,Illinois,US,573-841-3637,159.20.53.179 173 | 172,Pietro,Lawrence,Female,plawrence4r@fda.gov,Virginia,US,573-251-1815,239.41.146.75 174 | 173,Yehudi,Fackney,Female,yfackney4s@51.la,Ohio,US,516-553-5653,27.215.71.150 175 | 174,Stearn,Branthwaite,Male,sbranthwaite4t@google.fr,Washington,US,362-689-2795,237.17.123.33 176 | 175,Danice,Ranald,Male,dranald4u@symantec.com,California,US,983-712-8130,64.0.167.12 177 | 176,Hermann,Conybear,Female,hcopnar4v@istockphoto.com,Ohio,US,677-549-5392,12.21.98.210 178 | 177,Darlleen,Wilstead,Female,dwilstead4w@hp.com,Illinois,US,526-664-9540,159.20.53.178 179 | 178,Curcio,Thurman,Male,cthurman4x@ft.com,Kentucky,US,436-567-3267,127.212.91.83 180 | 179,Deni,Jest,Female,djest4y@typepad.com,New York,US,451-615-8955,238.110.91.23 181 | 180,Bobbe,Sowley,Male,bsparshett4z@histats.com,Kentucky,US,269-804-0412,163.107.178.72 182 | 181,Brandyn,Wiper,Female,bwiper50@utexas.edu,Illinois,US,754-669-7984,215.150.219.97 183 | 182,Tiena,Reiner,Male,treiner51@fc2.com,California,US,739-771-0548,38.59.206.106 184 | 183,Ursuline,Wroath,Male,uwrotham52@istockphoto.com,Illinois,US,794-874-3903,54.222.184.173 185 | 184,Cheri,Goldsbury,Female,cgoldsbury53@unc.edu,Connecticut,US,988-258-5660,245.86.127.99 186 | 185,Tamiko,Pinnigar,Male,tpinnigar54@amazon.de,California,US,911-201-1881,81.222.159.247 187 | 186,Jacquelyn,De Caville,Male,jdecaville55@goo.gl,Ohio,US,339-320-0246,137.138.62.27 188 | 187,Tamiko,Le Quesne,Male,tlill56@bloglovin.com,Virginia,US,270-324-3713,103.186.31.19 189 | 188,Roseanna,Wakeling,Female,rwatsham57@archive.org,Illinois,US,224-734-2642,159.20.53.178 190 | 189,Justino,Gapp,Female,jgapp58@jimdo.com,Connecticut,US,333-390-8219,47.70.132.177 191 | 190,Reinaldos,Laughnan,Female,rlaughnan59@abc.net.au,Virginia,US,401-477-7599,142.77.29.58 192 | 191,Ruddy,Shadfourth,Female,rshadfourth5a@blogger.com,Kentucky,US,797-630-8601,124.144.104.140 193 | 192,Perceval,Pilbury,Female,ppilbury5b@flickr.com,California,US,247-100-8122,193.250.194.86 194 | 193,Klarrisa,Absolem,Male,aainslie1n@studiopress.com,New Jersey,US,819-222-8412,133.198.156.5 195 | 194,Burl,Applegarth,Female,bapplegarth5d@walmart.com,Nevada,US,419-647-1486,199.231.127.16 196 | 195,Justinn,Hunter,Female,jhunter5e@exblog.jp,New York,US,627-360-9792,172.8.77.237 197 | 196,Zebulon,Rigmand,Male,zrosenau5f@newsvine.com,California,US,205-316-4859,229.123.59.185 198 | 197,Pennie,Alldre,Female,palldre5g@slideshare.net,Nevada,US,167-403-3288,33.91.127.223 199 | 198,Arleta,Trinbey,Female,atrinbey5h@123-reg.co.uk,Illinois,US,368-649-8517,185.189.7.242 200 | 199,Enoch,Zorn,Male,ezorn5i@topsy.com,Illinois,US,632-196-3884,54.222.184.175 201 | 200,Steffie,Hebard,Male,shebard5j@skype.com,New York,US,852-286-0765,237.209.138.147 202 | 201,Nert,Picopp,Female,npicopp5k@tiny.cc,California,US,625-988-1591,202.242.91.99 203 | 202,Honoria,Jeffels,Male,hjeffels5l@scribd.com,New York,US,841-620-5727,62.215.80.193 204 | 203,Stace,Hathorn,Male,shathorn5m@disqus.com,New York,US,584-356-2802,121.36.99.113 205 | 204,Eadie,Ickovic,Male,eickovic5n@usda.gov,New York,US,478-902-1537,181.50.218.49 206 | 205,Gina,Le Quesne,Female,gleaming5o@wordpress.org,Virginia,US,377-942-5708,44.48.215.97 207 | 206,Minni,De Mars,Male,mdeldello5p@parallels.com,Ohio,US,830-422-5348,15.250.123.170 208 | 207,Glennis,Mongenot,Female,gmongenot5q@sourceforge.net,Virginia,US,686-229-4371,210.193.25.55 209 | 208,Pauletta,Allardyce,Female,pallardyce5r@state.tx.us,New Jersey,US,570-322-2630,133.198.156.8 210 | 209,Angie,O'Currane,Male,aocurrane5s@shop-pro.jp,Virginia,US,293-779-0545,92.195.241.143 211 | 210,Phyl,Butterfill,Female,pbutterfilli@hotmail.com,Ohio,US,227-656-2131,72.148.188.249 212 | 211,Darcey,Gherardelli,Male,dgherardelli5u@so-net.ne.jp,Connecticut,US,382-590-3742,165.160.176.169 213 | 212,Wilhelmine,Shadbolt,Female,wshadbolt5v@elpais.com,Kentucky,US,339-920-1530,65.24.225.161 214 | 213,Reid,Simon,Male,rsimon5w@fc2.com,Kentucky,US,484-908-6393,103.20.205.198 215 | 214,Rebe,Aumerle,Female,raumerle5x@vinaora.com,Nevada,US,644-544-4031,199.231.127.18 216 | 215,Starlin,Stachini,Male,sstachini5y@psu.edu,Kentucky,US,264-184-3074,234.46.237.92 217 | 216,Chantal,Kleiser,Female,clanglois5z@sun.com,New York,US,838-765-8770,232.222.5.100 218 | 217,Ginny,Rigmand,Female,growney60@sphinn.com,California,US,523-825-6549,46.117.18.180 219 | 218,Terrie,Aird,Female,taird61@ucoz.ru,New Jersey,US,362-261-8916,133.198.156.6 220 | 219,Sadella,Czaja,Male,sczaja62@yelp.com,Ohio,US,844-776-8615,14.194.148.232 221 | 220,Morey,Maycey,Male,mmaycey63@techcrunch.com,Virginia,US,952-372-0722,29.221.147.15 222 | 221,Joela,Scapens,Male,jscapens64@free.fr,Kentucky,US,851-770-7479,66.156.105.206 223 | 222,Glenn,Mongenot,Female,gmongenot5q@ms.com,Virginia,US,686-229-4371,125.42.199.193 224 | 223,Charmian,Kleiser,Female,ckondratenya66@friendfeed.com,New York,US,841-755-6758,196.204.98.140 225 | 224,Karia,Connochie,Male,kconnochie67@google.com.hk,Ohio,US,867-563-6684,205.168.159.115 226 | 225,Morie,Kirrage,Male,mkirrage68@vk.com,New York,US,105-282-7660,170.10.198.43 227 | 226,Devonne,Imesson,Male,disles69@disqus.com,New York,US,776-268-0038,79.32.210.82 228 | 227,Augy,Cattel,Female,acattel6a@phpbb.com,Ohio,US,251-807-6667,136.24.17.112 229 | 228,Maxine,Francescone,Male,mgable6b@feedburner.com,Connecticut,US,506-236-3932,75.111.106.145 230 | 229,Gauthier,Fackney,Female,gfaithfull6c@infoseek.co.jp,Ohio,US,462-832-3949,192.54.162.135 231 | 230,Thomasina,Dobbins,Male,tdobbins6d@miibeian.gov.cn,Ohio,US,877-567-9135,144.164.175.110 232 | 231,Heda,Maycey,Female,hmccosker6e@discovery.com,Virginia,US,306-383-6622,29.221.147.18 233 | 232,Nadine,Garnsey,Female,ngarvill6f@state.tx.us,Connecticut,US,653-688-1978,212.228.171.86 234 | 233,Danyette,Pinnigar,Female,dpoulson6g@columbia.edu,California,US,638-194-0097,57.107.72.174 235 | 234,Hortensia,Benian,Female,hbenian6h@dmoz.org,Texas,US,758-188-8638,235.96.81.43 236 | 235,Traver,Karslake,Female,tkarslake6i@google.cn,New York,US,512-727-6290,168.84.229.213 237 | 236,Gaylor,Crippin,Male,gcrippin6j@jugem.jp,Ohio,US,476-827-1166,154.43.233.187 238 | 237,Wallas,Lattin,Male,wlattin6k@reverbnation.com,Virginia,US,656-261-4307,69.156.140.52 239 | 238,Geralda,Ojeda,Male,goldacres6l@rediff.com,Virginia,US,347-152-6963,219.97.245.117 240 | 239,Victoir,Keemar,Male,vkilmaster6m@sakura.ne.jp,New York,US,267-630-2016,167.40.189.45 241 | 240,Claudianus,Borres,Male,cborres6n@yahoo.co.jp,Washington,US,344-930-3669,16.129.236.37 242 | 241,Suellen,Dracksford,Female,sdracksford6o@pbs.org,Ohio,US,460-750-0276,239.161.223.130 243 | 242,Christophe,Stockill,Male,cstockill6p@china.com.cn,Kentucky,US,563-714-9947,29.228.37.233 244 | 243,Hobey,Hawkslee,Male,hhayhurst6q@hexun.com,New York,US,644-995-8079,117.187.248.143 245 | 244,Nappy,Kapelhof,Female,nkapelhof6r@godaddy.com,New York,US,324-932-2553,205.230.44.44 246 | 245,Stinky,Brislen,Male,sbrixham6s@dmoz.org,Washington,US,929-670-1989,159.106.115.98 247 | 246,Crysta,Caston,Male,ccaston6t@comcast.net,Ohio,US,445-924-9232,97.184.66.51 248 | 247,Victoir,Tilliard,Female,vtilliard6u@etsy.com,Kentucky,US,533-915-9272,61.254.244.176 249 | 248,Sam,Schimonek,Male,sscone6v@mit.edu,Kentucky,US,435-962-6124,127.158.155.27 250 | 249,Dalt,Le Quesne,Male,dlias6w@drupal.org,Virginia,US,253-204-6293,103.186.31.19 251 | 250,Christiana,Goodey,Female,cgothup6x@gov.uk,Connecticut,US,647-602-4539,225.15.186.24 252 | 251,Reyna,Chalcraft,Male,rclayborn6y@deliciousdays.com,Ohio,US,954-682-1091,209.255.88.64 253 | 252,Wanda,W,Female,wwroath@yahoo.co.uk,Illinois,US,945-987-8057,54.222.184.173 254 | 253,Kattie,Straun,Female,kstraun70@godaddy.com,Kentucky,US,732-333-1685,242.70.240.186 255 | 254,Willette,Crease,Female,wcrease71@fc2.com,Ohio,US,753-352-9991,143.30.217.105 256 | 255,Henriette,Winscom,Male,hwinscom72@who.int,Illinois,US,161-247-8265,159.20.53.181 257 | 256,Sharline,Cordelette,Male,scordelette73@de.vu,Ohio,US,772-427-2592,140.186.183.65 258 | 257,Deb,Batters,Male,dbatters74@pbs.org,Texas,US,985-534-0643,61.189.227.97 259 | 258,Lilia,Applegarth,Female,larchbald75@freewebs.com,Nevada,US,992-423-6987,199.231.127.16 260 | 259,Melitta,Swane,Female,mszymanzyk76@unicef.org,Kentucky,US,590-501-5391,247.145.254.233 261 | 260,Tudor,Swane,Female,ttaylerson77@godaddy.com,Kentucky,US,607-955-1880,247.145.254.236 262 | 261,Max,Francescone,Male,mgable6b@feedburner.com,Connecticut,US,506-236-3932,75.111.106.145 263 | 262,Joletta,Murrthum,Male,jmurrthum79@bloglovin.com,Virginia,US,380-315-9278,211.8.44.157 264 | 263,Robenia,Gebbie,Female,rgebbie7a@ovh.net,Connecticut,US,664-844-7134,81.79.52.51 265 | 264,Jae,Garnall,Male,jgarnall7b@e-recht24.de,Connecticut,US,972-368-4106,71.99.42.233 266 | 265,Aveline,Cattanach,Female,acattanach7c@squarespace.com,Ohio,US,265-927-6836,14.79.95.223 267 | 266,Maurizio,Duffitt,Male,mduffitt7d@hp.com,Ohio,US,493-157-0375,139.227.176.100 268 | 267,Mayer,Conybear,Female,mcoopland7e@uol.com.br,Ohio,US,583-937-4316,12.21.98.210 269 | 268,Tammara,Sowley,Female,tsowley7f@1688.com,Kentucky,US,167-293-1642,163.107.178.72 270 | 269,Hussein,Dalliwater,Female,hdanielovitch@gmail.com,Ohio,US,780-206-6658,140.53.226.88 271 | 270,Eveleen,Saberton,Male,esaberton7h@auda.org.au,Kentucky,US,336-939-8881,22.236.156.7 272 | 271,Roddie,Vaux,Female,rvaux7i@fotki.com,Illinois,US,349-848-4735,170.71.186.139 273 | 272,Garner,Pavia,Female,gpavia7j@4shared.com,Virginia,US,435-585-3526,185.50.75.186 274 | 273,Iggy,Hartley,Female,ihartley7k@irs.gov,New York,US,386-998-0825,153.142.165.64 275 | 274,Thedrick,Dwine,Male,tdwine7l@ibm.com,Ohio,US,963-674-8637,107.36.53.169 276 | 275,Burk,Kleiser,Male,bkleiser7m@usnews.com,New York,US,972-511-5399,239.250.253.221 277 | 276,Demetris,Bolles,Male,dbolles7n@yellowbook.com,Washington,US,187-713-0496,22.231.125.34 278 | 277,Arleyne,Applegarth,Male,aarkil7o@irs.gov,Nevada,US,974-612-4743,199.231.127.16 279 | 278,Randy,Camelia,Male,rcamelia7p@psu.edu,Ohio,US,630-887-7856,123.59.244.205 280 | 279,Phineas,Dinning,Female,pdinning7q@hubpages.com,Ohio,US,150-387-6787,255.225.99.189 281 | 280,Culver,Le Quesne,Male,clever7r@google.com.br,Virginia,US,229-356-6500,103.186.31.19 282 | 281,Willard,Tuxwell,Male,wtuxwell7s@privacy.gov.au,Illinois,US,876-401-4603,118.115.25.127 283 | 282,Jorrie,Lorenzo,Male,jlorenzo7t@stanford.edu,Virginia,US,302-303-2614,139.38.76.174 284 | 283,Dany,Pinnigar,Female,dpoulson6g@columbia.edu,California,US,638-194-0097,57.107.72.171 285 | 284,Meryl,Boncore,Male,mboncore7v@networksolutions.com,Washington,US,238-645-7096,51.47.122.180 286 | 285,Gabrila,Winthrop,Male,gwinthrop7w@bravesites.com,Illinois,US,136-471-0971,215.150.219.96 287 | 286,Alicea,Empson,Male,aempson7x@shareasale.com,Ohio,US,972-443-9553,253.75.193.81 288 | 287,Lesli,MacRorie,Female,lmacrorie7y@parallels.com,Virginia,US,971-109-4564,70.53.101.46 289 | 288,Riki,Prujean,Female,rprujean7z@ifeng.com,California,US,245-877-7738,82.94.187.236 290 | 289,Cly,Benian,Female,cbergeau80@alibaba.com,Texas,US,879-315-4072,120.81.160.131 291 | 290,Cara,Bangley,Male,cbangley81@alexa.com,Texas,US,782-102-4436,50.186.166.29 292 | 291,Zena,Lyokhin,Male,zmacdonagh82@imgur.com,Virginia,US,921-602-6175,209.186.131.167 293 | 292,Sarah,Penzer,Male,spenzer83@gnu.org,California,US,713-163-2329,151.196.228.163 294 | 293,Lezley,Wakeling,Female,lwakeling84@berkeley.edu,Illinois,US,150-948-2117,159.20.53.178 295 | 294,Jen,Canacott,Male,jcanacott85@unc.edu,Ohio,US,229-875-1724,40.112.124.94 296 | 295,Huey,Ferneyhough,Female,hferneyhough86@nih.gov,Connecticut,US,859-272-4835,181.20.168.229 297 | 296,Wanda,Wroath,Female,wyushachkov8y@ebay.co.uk,Illinois,US,858-980-1252,54.222.184.173 298 | 297,Bridgette,Ferney,Female,bferney88@freewebs.com,Connecticut,US,580-490-9866,213.71.217.250 299 | 298,Lesly,MacRorie,Female,lmacrorie7y@parallels.com,Virginia,US,971-109-4564,149.178.224.218 300 | 299,Rob,Heintzsch,Male,rheintzsch8a@liveinternet.ru,New York,US,289-165-4439,118.233.94.72 301 | 300,Nealy,Patington,Female,npatington8b@howstuffworks.com,Virginia,US,316-902-6576,99.194.71.32 302 | 301,Ora,Finnimore,Male,ofinnimore8c@harvard.edu,Connecticut,US,233-516-7471,59.74.111.105 303 | 302,Mandy,Lillo,Male,mlillo8d@illinois.edu,Virginia,US,920-347-9578,59.140.115.117 304 | 303,Hilda,Sutliff,Female,hsutliff8e@bbc.co.uk,Kentucky,US,434-315-5825,43.225.45.58 305 | 304,Brana,Cordeau,Male,bcordeau8f@wikipedia.org,Ohio,US,267-606-2894,246.51.2.226 306 | 305,Garfield,Swane,Female,gswane8g@constantcontact.com,Kentucky,US,122-947-6219,247.145.254.230 307 | 306,Nikki,Chalcraft,Female,nchampe8h@google.com.br,Ohio,US,290-811-1308,51.49.92.51 308 | 307,Carroll,Bragge,Male,cbragge8i@feedburner.com,Washington,US,511-867-6376,230.198.93.117 309 | 308,Arnoldo,Bugdell,Male,abugdell8j@google.pl,Ohio,US,191-496-4414,210.97.236.113 310 | 309,Janina,Keemar,Male,jkinnoch8k@squarespace.com,New York,US,359-332-2812,35.143.160.115 311 | 310,Butch,Wakeling,Male,bwessel8l@netlog.com,Illinois,US,813-905-8423,159.20.53.178 312 | 311,Gaye,Brislen,Male,gbrislen8m@businessweek.com,Washington,US,780-984-5320,159.106.115.98 313 | 312,Rogers,Cutteridge,Male,rcutteridge8n@jugem.jp,Ohio,US,766-804-5372,102.246.107.50 314 | 313,Sarena,Rigmand,Female,srozzell8o@skype.com,Kentucky,US,427-438-7862,46.117.18.181 315 | 314,Amerigo,Canton,Male,acapper8p@cbsnews.com,Ohio,US,466-572-1239,97.184.66.51 316 | 315,Linette,Duferie,Female,lduferie8q@artisteer.com,Ohio,US,192-864-1093,125.186.228.247 317 | 316,Inesita,Jelkes,Male,ijelkes8r@google.cn,New York,US,733-356-3823,144.126.38.57 318 | 317,Konstanze,Absolem,Male,kabsolem8s@360.cn,New Jersey,US,736-559-9820,133.198.156.5 319 | 318,Floris,Wagon,Female,fwagon8t@surveymonkey.com,Illinois,US,189-537-3359,35.234.15.97 320 | 319,Aeriel,Kleiser,Female,alangeley8u@ted.com,New York,US,732-539-9226,232.222.5.100 321 | 320,Erie,Sturch,Female,esturch8v@java.com,Kentucky,US,511-426-4760,55.195.36.214 322 | 321,Kassia,Noddles,Female,knoddles8w@loc.gov,Virginia,US,857-916-5968,3.184.36.144 323 | 322,Fairlie,MacRorie,Female,fmarquet8x@wunderground.com,Virginia,US,384-704-4971,149.178.224.218 324 | 323,Wenda,Wroath,Female,wyushachkov8y@ebay.co.uk,Illinois,US,858-980-1252,54.222.184.173 325 | 324,Port,Prozescky,Male,pprozescky8z@google.ca,California,US,467-803-7716,143.112.72.245 326 | 325,Mariya,Vasquez,Female,mvasquez90@wp.com,Illinois,US,481-767-7172,27.245.180.185 327 | 326,Burker,Kleiser,Male,bkleiser7m@foxmail.com,New York,US,972-511-5399,196.204.98.140 328 | 327,Ed,Grombridge,Male,cgrombridge92@miibeian.gov.cn,New York,US,403-342-5761,239.56.155.50 329 | 328,Aliza,Sawle,Male,asawle93@ted.com,Kentucky,US,286-815-9421,51.133.239.110 330 | 329,Ramonda,Keemar,Female,rkilby94@apple.com,New York,US,988-437-6443,167.40.189.45 331 | 330,Arlyne,Applegarth,Male,darnau95@ovh.net,Nevada,US,763-612-2703,199.231.127.16 332 | 331,Morgan,Mongenot,Female,mmonnery96@ustream.tv,Virginia,US,986-857-0901,210.193.25.56 333 | 332,Bartholomew,Abramowitch,Male,babramowitch97@about.com,New Jersey,US,731-287-3887,243.162.50.43 334 | 333,Nellie,Goodey,Female,ngoodey98@biglobe.ne.jp,Connecticut,US,756-617-5472,109.106.229.8 335 | 334,Brennan,Le Quesne,Male,bley99@rakuten.co.jp,Virginia,US,926-627-1514,103.186.31.19 336 | 335,Jens,Tolputt,Female,jtolputt9a@ebay.co.uk,Kentucky,US,343-913-8811,91.140.64.154 337 | 336,Clarke,Bachs,Female,cbachs9b@issuu.com,Texas,US,373-858-6591,199.231.127.19 338 | 337,Caresse,Cowl,Female,ccowl9c@livejournal.com,Ohio,US,175-798-9534,66.220.201.24 339 | 338,Ilka,Clooney,Female,iclooney9d@google.com.br,Ohio,US,709-171-8343,193.108.79.224 340 | 339,Emmalynn,Schimonek,Male,eseine9e@cpanel.net,Kentucky,US,112-137-0312,76.129.22.4 341 | 340,Randell,De Mars,Male,rdecourcy9f@abc.net.au,Ohio,US,575-787-2163,15.250.123.170 342 | 341,Heall,Follin,Female,hfollin9g@mozilla.org,Connecticut,US,606-771-3806,139.104.147.25 343 | 342,Nell,Ojeda,Male,nongin9h@blinklist.com,Virginia,US,642-310-6315,219.97.245.118 344 | 343,Rowney,De Mars,Female,rdibner9i@nytimes.com,Ohio,US,873-384-3129,35.42.26.101 345 | 344,Waverly,Hookes,Female,whookes9j@slate.com,New York,US,221-254-0599,16.72.118.206 346 | 345,Uta,Kleiser,Male,ukyncl9k@histats.com,New York,US,765-793-5778,196.204.98.140 347 | 346,Euell,Hillborne,Male,ehillborne9l@google.de,New York,US,854-914-8139,61.82.229.230 348 | 347,Jewel,Conybear,Male,jcoopper9m@parallels.com,Ohio,US,477-708-3378,12.21.98.210 349 | 348,Dayle,Curness,Male,dcurness9n@usgs.gov,Ohio,US,273-966-4623,223.113.137.31 350 | 349,Claretta,Curgenuer,Male,ccurgenuer9o@pbs.org,Ohio,US,948-428-6389,150.84.38.35 351 | 350,Maryann,Lyokhin,Male,mlyokhin9p@wsj.com,Virginia,US,477-647-8721,209.186.131.167 352 | 351,Nickolas,Tidder,Female,ntidder9q@blogger.com,Kentucky,US,842-619-5636,12.107.241.65 353 | 352,Cam,Wakeling,Male,cwhitton9r@moonfruit.com,Illinois,US,865-220-6285,159.20.53.178 354 | 353,Clarissa,Nixon,Male,cnixon9s@rakuten.co.jp,Virginia,US,552-723-8465,176.232.201.41 355 | 354,Humfrid,Bransden,Male,hbransden9t@latimes.com,Washington,US,178-818-3675,224.66.87.17 356 | 355,Goober,Gilderoy,Female,ggiorgetti9u@examiner.com,Connecticut,US,517-556-6794,165.95.27.225 357 | 356,Lexy,Canton,Male,lcarmo9v@seattletimes.com,Ohio,US,694-555-9578,97.184.66.51 358 | 357,Berk,Mauser,Female,bmauser9w@tripadvisor.com,Virginia,US,217-789-6952,5.236.37.137 359 | 358,Sylas,Ranscome,Female,sranscome9x@princeton.edu,California,US,192-383-1761,184.104.138.128 360 | 359,Kally,Shafier,Female,kshafier9y@paginegialle.it,Kentucky,US,737-953-0073,161.90.182.24 361 | 360,Nanice,Borres,Female,nbosward9z@washingtonpost.com,Washington,US,986-489-5209,16.129.236.37 362 | 361,Heida,Garnsey,Female,hgassona0@admin.ch,Connecticut,US,367-342-2014,212.228.171.86 363 | 362,Germaine,Sellek,Female,gselleka1@reverbnation.com,Kentucky,US,704-744-0287,65.176.36.116 364 | 363,Devonne,Imesson,Female,ajanoucha2@a8.net,New York,US,482-966-2346,18.183.148.107 365 | 364,Christalle,Hallows,Female,challowsa3@nydailynews.com,New York,US,801-289-9473,247.225.91.175 366 | 365,Nik,Chalcraft,Female,nchampe8h@google.com.br,Ohio,US,290-811-1308,48.102.29.192 367 | 366,Lisha,Goundrill,Male,lgoundrilla5@reverbnation.com,New York,US,367-525-1637,18.220.87.254 368 | 367,Marie-ann,Swane,Male,mtappingtona6@amazon.de,Kentucky,US,433-772-6058,247.145.254.235 369 | 368,Jilli,Tregunna,Female,jtregunnaa7@epa.gov,Kentucky,US,121-583-9666,119.230.186.242 370 | 369,Raye,Grier,Male,rgriera8@ox.ac.uk,New York,US,991-785-7581,170.116.107.124 371 | 370,Vilma,Obee,Female,vobeea9@xrea.com,Virginia,US,999-620-3381,51.134.183.164 372 | 371,Tann,MacFaul,Female,tmacfaulaa@eepurl.com,Virginia,US,130-898-1523,46.42.100.47 373 | 372,Rufus,Gavagan,Male,rgavaganab@salon.com,Connecticut,US,385-537-8760,85.135.198.202 374 | 373,Clarabelle,Sarah,Female,csarahac@trellian.com,Kentucky,US,429-549-0461,47.43.149.67 375 | 374,Belinda,Allaker,Male,ballakerad@a8.net,New Jersey,US,917-341-5143,133.198.156.7 376 | 375,Alexi,Dalliwater,Male,adalliwaterae@comcast.net,Ohio,US,850-705-9065,140.53.226.88 377 | 376,Maddi,Fewster,Female,mfewsteraf@moonfruit.com,Connecticut,US,543-838-5886,115.104.22.32 378 | 377,Isacco,Blewett,Female,iblumireag@eventbrite.com,Washington,US,826-497-4699,2.238.236.188 379 | 378,Nichole,Dalligan,Male,ndalliganah@omniture.com,Ohio,US,205-163-6098,47.117.255.8 380 | 379,Ewart,Neem,Male,eneemai@psu.edu,Virginia,US,457-929-9310,175.180.24.169 381 | 380,Brigitte,Dorrian,Female,bdorrianaj@ifeng.com,Ohio,US,608-591-6633,190.186.164.174 382 | 381,Myron,Mitrikhin,Female,mmitrikhinak@theatlantic.com,Virginia,US,818-778-5243,17.170.153.152 383 | 382,Anders,Batram,Female,abatramal@so-net.ne.jp,Texas,US,564-362-5856,133.214.233.6 384 | 383,Clive,Steutly,Male,csteutlyam@wiley.com,Kentucky,US,510-909-7245,139.22.164.10 385 | 384,Sada,Boyington,Female,sboyingtonan@omniture.com,Washington,US,671-687-7405,160.227.125.239 386 | 385,Avrit,Pinnigar,Male,apitsallao@sina.com.cn,California,US,867-449-7107,57.107.72.172 387 | 386,Ingelbert,Altamirano,Female,ialtamiranoap@addtoany.com,Nevada,US,650-783-6011,199.44.52.5 388 | 387,Temple,Combes,Male,tcombesaq@artisteer.com,Ohio,US,678-210-7363,43.205.223.143 389 | 388,Martha,Riedel,Male,mriedelar@comcast.net,California,US,738-136-9620,70.225.22.106 390 | 389,Caty,Butterfill,Male,ccallfas@mapquest.com,Ohio,US,139-952-1232,72.148.188.249 391 | 390,Kaylee,Augustin,Male,kaugustinat@histats.com,Nevada,US,997-371-8134,199.231.127.17 392 | 391,Guinevere,Venturoli,Female,gventuroliau@delicious.com,Illinois,US,368-118-5410,102.114.141.131 393 | 392,Harley,Medley,Female,hmedleyav@pbs.org,Virginia,US,357-712-1666,134.115.144.183 394 | 393,Penelopa,MacRorie,Male,pmalkieaw@google.ru,Virginia,US,251-214-3109,149.178.224.218 395 | 394,Claudette,Gard,Male,cgardax@accuweather.com,Connecticut,US,577-897-5741,83.18.132.84 396 | 395,Cam,Rahl,Male,crahlay@google.ru,California,US,952-286-2707,38.222.123.237 397 | 396,Jsandye,Pedrocco,Male,jpelleraz@princeton.edu,Virginia,US,196-268-1081,5.46.227.168 398 | 397,Meris,Hursthouse,Male,mhursthouseb0@spotify.com,New York,US,619-306-3676,245.131.95.53 399 | 398,Amie,Ojeda,Male,aojedab1@pcworld.com,Virginia,US,204-775-0559,219.97.245.116 400 | 399,Bruno,Mattersley,Male,bmattersleyb2@list-manage.com,Virginia,US,475-277-2502,134.159.60.252 401 | 400,Terrell,Gredden,Female,tgreddenb3@vk.com,New York,US,625-402-6176,52.89.186.25 402 | 401,Aubry,Chalcraft,Female,achmarnyb4@netvibes.com,Ohio,US,988-573-5859,51.49.92.51 403 | 402,Danyette,McIntosh,Male,dmcintoshb5@ebay.com,Virginia,US,444-577-8373,144.144.252.18 404 | 403,Deeann,Benediktovich,Female,dbenediktovichb6@etsy.com,Texas,US,191-257-1129,139.207.222.39 405 | 404,Melany,Sowley,Female,mspiterib7@shinystat.com,Kentucky,US,227-656-8103,163.107.178.72 406 | 405,Colby,Linnit,Male,clinnitb8@businessinsider.com,Virginia,US,957-657-8278,111.179.219.216 407 | 406,Billie,Duckfield,Female,bduckfieldb9@yale.edu,Ohio,US,202-489-5371,53.38.208.167 408 | 407,Cacilie,Nicklin,Male,cnicklinba@google.ru,Virginia,US,411-690-9362,161.216.175.170 409 | 408,Norrie,Cullimore,Male,ncullimorebb@ft.com,Ohio,US,879-181-8044,57.158.167.199 410 | 409,Maudie,Houlton,Male,mhoultonbc@vkontakte.ru,New York,US,507-980-8774,60.19.82.243 411 | 410,Brenda,Applegarth,Female,barrellbd@kickstarter.com,Nevada,US,183-831-4119,199.231.127.16 412 | 411,Nolly,Giberd,Male,ngiberdbe@istockphoto.com,Connecticut,US,446-153-5887,216.39.63.193 413 | 412,Cal,Dowman,Female,cdowmanbf@addtoany.com,Ohio,US,204-300-1614,29.62.83.162 414 | 413,Orville,Ojeda,Male,oorrettbg@trellian.com,Virginia,US,157-439-5356,246.88.70.229 415 | 414,Lynnelle,Minkin,Male,lminkinbh@w3.org,Virginia,US,411-491-6931,46.134.111.157 416 | 415,Kayne,Buncombe,Female,kbuncombebi@deliciousdays.com,Ohio,US,598-524-0481,208.54.37.58 417 | 416,Brit,Goater,Female,bgoaterbj@hexun.com,Connecticut,US,420-966-2374,239.234.28.225 418 | 417,Maxy,F,Male,mgable@gmail.com,Connecticut,US,110-960-3685,55.238.98.193 419 | 418,Lombard,Maycey,Male,lmccorkellbl@typepad.com,Virginia,US,209-955-7393,29.221.147.17 420 | 419,Rozanna,Pedrocco,Female,rpelferbm@taobao.com,Virginia,US,350-165-7463,5.46.227.167 421 | 420,Nelly,Goodey,Female,ngoodey98@biglobe.ne.jp,Connecticut,US,756-617-5472,225.15.186.24 422 | 421,Forrester,Borres,Male,fbossonbo@google.de,Washington,US,114-383-3778,16.129.236.37 423 | 422,Sianna,Durrand,Male,sdurrandbp@paypal.com,Ohio,US,339-793-8603,251.142.118.162 424 | 423,Cally,Pavolini,Male,cpavolinibq@webnode.com,Virginia,US,668-840-4813,7.240.64.243 425 | 424,Mireille,Crippin,Male,mculbertbr@livejournal.com,Ohio,US,359-332-3816,154.43.233.187 426 | 425,Tremaine,Golsworthy,Male,tgolsworthybs@webmd.com,Connecticut,US,952-216-4963,52.22.126.222 427 | 426,Titos,Drohan,Male,tdrohanbt@dailymail.co.uk,Ohio,US,873-787-8326,213.160.218.150 428 | 427,Auroora,Brownstein,Male,abuchebu@canalblog.com,Washington,US,623-586-3742,193.127.239.19 429 | 428,Luce,Elph,Female,lelphbv@ucla.edu,Ohio,US,718-279-7269,163.240.1.131 430 | 429,Leigh,Dahlbom,Female,ldahlbombw@delicious.com,Ohio,US,595-551-2408,107.24.134.147 431 | 430,Kennie,Grombridge,Female,kguillermanbx@odnoklassniki.ru,New York,US,767-786-4196,239.56.155.50 432 | 431,Dollie,Bunce,Female,dbunceby@sourceforge.net,Ohio,US,846-229-4761,194.146.110.144 433 | 432,Kenny,Pedrocco,Female,kpedroccobz@goo.ne.jp,Virginia,US,100-278-4292,5.46.227.166 434 | 433,Ezekiel,Mongenot,Male,emorlandc0@rakuten.co.jp,Virginia,US,128-158-3534,210.193.25.57 435 | 434,Bartram,Molian,Female,bmolianc1@naver.com,Virginia,US,692-745-4678,160.221.247.103 436 | 435,Robina,Tilley,Male,rtilleyc2@google.com.hk,Kentucky,US,330-700-0299,207.120.219.147 437 | 436,Porty,Schimonek,Male,pseargeantc3@miitbeian.gov.cn,Kentucky,US,334-677-6513,76.129.22.3 438 | 437,Tatiana,Davydochkin,Female,tdavydochkinc4@sphinn.com,Ohio,US,901-795-6182,19.166.185.18 439 | 438,Aurora,Broadis,Male,abroadisc5@cloudflare.com,Washington,US,629-579-0610,189.204.241.176 440 | 439,Kippy,Butterfill,Male,kcaineyc6@cornell.edu,Ohio,US,431-382-9094,72.148.188.249 441 | 440,Korrie,MacPike,Male,kmacpikec7@baidu.com,Virginia,US,133-769-2889,124.55.252.134 442 | 441,Adena,Chalcraft,Female,acheeversc8@google.it,Ohio,US,664-353-6698,51.49.92.51 443 | 442,Emlynn,Le Quesne,Male,elequesnec9@spiegel.de,Virginia,US,861-871-6136,44.48.215.97 444 | 443,Kristian,Twaits,Female,ktwaitsca@moonfruit.com,Illinois,US,504-920-4941,157.24.19.147 445 | 444,Erna,Simonou,Male,esirlcb@psu.edu,Kentucky,US,341-570-4729,98.198.208.17 446 | 445,Krissie,Dykins,Male,kdykinscc@exblog.jp,Ohio,US,159-289-4996,101.7.179.250 447 | 446,Evey,Johananoff,Male,ejohananoffcd@utexas.edu,New York,US,280-638-7004,2.220.197.235 448 | 447,Dru,Benian,Male,dberensce@cdbaby.com,Texas,US,387-508-1932,235.96.81.43 449 | 448,Keelia,Skillen,Female,kskillencf@imageshack.us,Kentucky,US,972-706-3213,204.14.20.208 450 | 449,Henrie,Rigmand,Female,hrymmercg@cam.ac.uk,Kentucky,US,246-729-4384,46.117.18.182 451 | 450,Paulie,Imesson,Female,pimessonch@issuu.com,New York,US,398-857-4077,78.31.18.175 452 | 451,Sybil,De Mars,Female,sdericotci@blog.com,Ohio,US,216-843-4955,35.42.26.101 453 | 452,Heloise,Reynish,Male,hreynishcj@apple.com,California,US,861-566-5811,54.119.148.191 454 | 453,Bridgette,Ferrolli,Male,bferrollick@huffingtonpost.com,Connecticut,US,970-389-9448,83.195.39.63 455 | 454,Debbie,Eshelby,Male,deshelbycl@chicagotribune.com,Ohio,US,367-449-7006,218.140.2.235 456 | 455,Suellen,Grombridge,Female,shaberfieldcm@msn.com,New York,US,899-559-8683,70.93.192.173 457 | 456,Hakeem,Allom,Female,hallomcn@npr.org,Nevada,US,552-215-9926,72.160.1.127 458 | 457,Caraa,Bangley,Male,cbangley81@alexa.com,Texas,US,782-102-4436,50.186.166.29 459 | 458,Rawley,Fackney,Male,rfeechumcp@scribd.com,Connecticut,US,309-720-2150,192.54.162.135 460 | 459,Orville,Mattei,Female,omatteicq@ucla.edu,Virginia,US,798-520-0795,162.247.81.177 461 | 460,Towney,Hartin,Female,thartincr@cam.ac.uk,New York,US,669-405-5270,10.93.212.228 462 | 461,Loydie,Regis,Male,lregiscs@twitter.com,California,US,262-201-6063,74.134.98.1 463 | 462,Christoffer,Wisson,Female,cwissonct@canalblog.com,Illinois,US,941-774-4589,215.150.219.98 464 | 463,June,Gilderoy,Male,jgilderoycu@toplist.cz,Connecticut,US,332-452-7916,165.95.27.225 465 | 464,Gerri,Bangley,Female,gbartelscv@opera.com,Texas,US,927-302-7133,50.186.166.29 466 | 465,Penie,Allmen,Female,palldre5g@onet.net,Nevada,US,552-215-9926,195.188.43.182 467 | 466,Querida,Sowley,Female,qspaulecx@arstechnica.com,Kentucky,US,169-226-9255,163.107.178.72 468 | 467,Lannie,Geharke,Male,lgeharkecy@toplist.cz,Connecticut,US,455-133-9362,74.88.133.133 469 | 468,Cece,Brownstein,Female,cbrungercz@bbc.co.uk,Washington,US,980-943-6428,193.127.239.19 470 | 469,Maxine,Clousley,Male,mclousleyd0@studiopress.com,Ohio,US,498-149-6950,195.119.94.96 471 | 470,Stavros,Lukasen,Male,slukasend1@tuttocitta.it,Virginia,US,930-468-4755,17.167.14.21 472 | 471,Benn,Elloit,Female,belloitd2@live.com,Ohio,US,594-986-9175,178.226.241.163 473 | 472,Wesley,Pinnigar,Female,wpriddied3@spotify.com,California,US,622-360-9755,57.107.72.175 474 | 473,Sanderson,Harrop,Male,sharropd4@scribd.com,New York,US,537-954-5823,130.176.107.108 475 | 474,Carolin,Rigmand,Female,crotheryd5@weibo.com,Kentucky,US,135-199-4176,46.117.18.179 476 | 475,Tadeo,Schimonek,Female,tschimonekd6@goodreads.com,Kentucky,US,839-535-2933,127.158.155.25 477 | 476,Starr,Touhig,Female,stouhigd7@nyu.edu,Kentucky,US,135-769-0669,206.133.115.142 478 | 477,Emanuel,Brislen,Female,ebrittind8@bandcamp.com,Washington,US,255-591-4042,159.106.115.98 479 | 478,Deeann,Zmitrovich,Male,dzmitrovichd9@networksolutions.com,Illinois,US,409-192-5435,54.222.184.174 480 | 479,Valma,Imesson,Male,viskowitzda@answers.com,New York,US,901-141-7510,67.204.43.20 481 | 480,Weidar,Longhorne,Male,wlonghornedb@microsoft.com,Virginia,US,728-626-3483,77.241.49.248 482 | 481,Cy,Mackrell,Male,cmackrelldc@icq.com,Virginia,US,392-336-9709,216.134.31.100 483 | 482,Chandal,Purser,Female,cpurserdd@fema.gov,California,US,768-158-1624,51.183.18.61 484 | 483,Forrest,Pfeffel,Male,fpfeffelde@shutterfly.com,California,US,816-969-3115,118.249.243.177 485 | 484,Tasia,Keemar,Male,tkinkerdf@ucla.edu,New York,US,928-440-4781,35.143.160.115 486 | 485,Agretha,Thompson,Female,athompsondg@fastcompany.com,Kentucky,US,964-845-4591,12.106.164.42 487 | 486,Jackqueline,Semmence,Female,jsemmencedh@yelp.com,Kentucky,US,719-987-0943,250.96.187.83 488 | 487,Raddie,Stede,Female,rstededi@berkeley.edu,Kentucky,US,614-140-4698,163.32.64.29 489 | 488,Laurella,Bangley,Male,lbarthramdj@posterous.com,Texas,US,404-735-4717,50.186.166.29 490 | 489,Bastien,Graves,Female,bgravesdk@seattletimes.com,New York,US,933-477-5642,73.6.207.48 491 | 490,Esta,Pinnigar,Male,epostindl@woothemes.com,California,US,534-561-8434,57.107.72.173 492 | 491,Ichabod,Goodey,Male,igoodhalldm@wordpress.org,Connecticut,US,110-290-9180,225.15.186.24 493 | 492,Maurine,Mesant,Male,mmesantdn@merriam-webster.com,Virginia,US,208-692-5495,108.115.7.244 494 | 493,Ric,Corbitt,Male,rcorbittdo@loc.gov,Ohio,US,950-795-7850,27.112.158.249 495 | 494,Olivie,Hovard,Female,ohovarddp@google.cn,New York,US,982-851-4396,243.40.71.93 496 | 495,Amalita,Kalb,Male,akalbdq@loc.gov,New York,US,689-814-5399,20.150.212.216 497 | 496,Silas,Dalliwater,Female,sdarwendr@infoseek.co.jp,Ohio,US,720-245-0474,86.37.244.208 498 | 497,Stevie,Bowler,Female,sbowlerds@youtu.be,Washington,US,723-252-7300,16.129.236.37 499 | 498,Hyacintha,Cranmer,Male,hcranmerdt@i2i.jp,Ohio,US,930-663-1738,137.249.180.151 500 | 499,Christie,Simonou,Female,cskepperdu@typepad.com,Kentucky,US,833-969-4798,98.198.208.18 501 | 500,Tilly,Basnett,Male,tbasnettdv@ning.com,Texas,US,279-161-3554,63.129.84.25 -------------------------------------------------------------------------------- /data/csv/WatchEvent.csv: -------------------------------------------------------------------------------- 1 | userId,movieId,watchCount 2 | 279,268,2 3 | 395,256,4 4 | 375,87,67 5 | 360,65,4 6 | 470,27,2 7 | 270,186,1 8 | 454,59,2 9 | 44,135,6 10 | 10,159,1 11 | 78,155,4 12 | 424,320,2 13 | 224,140,2 14 | 4,314,4 15 | 371,167,1 16 | 46,279,1 17 | 303,37,1 18 | 431,319,1 19 | 125,185,1 20 | 177,49,1 21 | 170,178,1 22 | 430,62,1 23 | 155,151,1 24 | 426,164,1 25 | 152,74,1 26 | 393,94,6 27 | 196,174,1 28 | 44,206,5 29 | 127,159,7 30 | 1,218,3 31 | 484,272,1 32 | 224,292,12 33 | 216,151,4 34 | 370,52,1 35 | 330,272,2 36 | 345,272,2 37 | 493,63,2 38 | 127,186,2 39 | 428,99,2 40 | 427,115,2 41 | 350,98,2 42 | 44,242,2 43 | 112,122,2 44 | 157,45,2 45 | 467,254,2 46 | 402,89,2 47 | 78,85,2 48 | 223,190,1 49 | 34,186,1 50 | 351,84,1 51 | 52,201,1 52 | 329,87,1 53 | 483,82,1 54 | 34,43,1 55 | 359,24,1 56 | 399,2,1 57 | 446,29,1 58 | 55,260,1 59 | 352,318,77 60 | 240,220,2 61 | 61,118,2 62 | 254,304,2 63 | 89,134,2 64 | 137,295,2 65 | 250,244,2 66 | 376,312,6 67 | 363,61,4 68 | 11,215,8 69 | 88,229,4 70 | 9,60,6 71 | 113,45,1 72 | 25,121,2 73 | 483,230,1 74 | 342,305,1 75 | 83,299,4 76 | 119,268,2 77 | 42,92,2 78 | 312,39,4 79 | 477,262,1 80 | 126,118,1 81 | 35,39,1 82 | 249,39,1 83 | 470,49,1 84 | 206,173,1 85 | 25,157,1 86 | 136,202,1 87 | 103,133,7 88 | 181,34,1 89 | 391,115,1 90 | 180,318,1 91 | 139,76,1 92 | 82,67,5 93 | 411,69,2 94 | 405,317,3 95 | 381,11,6 96 | 62,54,12 97 | 5,36,4 98 | 363,237,1 99 | 8,171,2 100 | 228,283,2 101 | 448,140,2 102 | 11,124,2 103 | 155,127,2 104 | 350,277,2 105 | 491,262,2 106 | 304,133,2 107 | 354,74,2 108 | 336,148,2 109 | 11,273,2 110 | 170,114,2 111 | 217,141,2 112 | 212,143,1 113 | 58,274,1 114 | 389,312,7 115 | 284,159,1 116 | 415,151,1 117 | 143,129,1 118 | 69,183,1 119 | 10,1,1 120 | 181,307,5 121 | 47,149,1 122 | 395,271,1 123 | 190,17,1 124 | 467,28,2 125 | 22,237,2 126 | 76,171,2 127 | 453,48,2 128 | 365,138,2 129 | 79,45,2 130 | 31,57,2 131 | 309,109,2 132 | 175,314,2 133 | 130,47,2 134 | 40,186,2 135 | 141,224,2 136 | 242,54,2 137 | 471,87,2 138 | 103,227,1 139 | 134,222,1 140 | 104,280,6 141 | 53,6,7 142 | 74,216,1 143 | 80,298,1 144 | 240,213,1 145 | 120,66,1 146 | 334,284,1 147 | 305,134,1 148 | 446,55,1 149 | 367,90,1 150 | 397,67,2 151 | 385,202,2 152 | 498,224,5 153 | 432,282,2 154 | 159,51,2 155 | 326,219,2 156 | 500,2,2 157 | 419,34,4 158 | 176,158,8 159 | 393,275,4 160 | 53,1,2 161 | 153,174,1 162 | 317,288,2 163 | 145,243,1 164 | 194,312,1 165 | 494,225,8 166 | 461,293,2 167 | 460,49,2 168 | 125,296,4 169 | 234,299,1 170 | 33,126,1 171 | 466,175,1 172 | 222,269,1 173 | 473,219,1 174 | 94,33,1 175 | 160,115,1 176 | 106,127,15 177 | 435,28,1 178 | 459,135,1 179 | 402,148,1 180 | 7,51,1 181 | 438,31,1 182 | 411,296,5 183 | 394,279,2 184 | 386,118,3 185 | 71,149,1 186 | 441,202,12 187 | 488,266,4 188 | 293,148,1 189 | 285,315,3 190 | 276,142,2 191 | 439,162,2 192 | 469,125,2 193 | 166,96,2 194 | 375,13,2 195 | 423,172,2 196 | 285,56,2 197 | 464,294,10 198 | 435,53,2 199 | 429,213,2 200 | 384,148,2 201 | 439,1,2 202 | 422,78,1 203 | 162,53,1 204 | 312,180,1 205 | 246,4,1 206 | 228,286,1 207 | 446,269,1 208 | 251,11,1 209 | 292,21,1 210 | 81,166,1 211 | 10,271,3 212 | 94,303,1 213 | 292,214,1 214 | 153,284,2 215 | 392,137,2 216 | 45,85,2 217 | 457,255,2 218 | 381,290,4 219 | 93,315,8 220 | 471,150,4 221 | 42,291,2 222 | 428,229,1 223 | 485,76,2 224 | 280,149,1 225 | 131,185,1 226 | 133,140,3 227 | 337,103,2 228 | 496,118,2 229 | 398,14,4 230 | 461,168,1 231 | 84,314,1 232 | 279,83,1 233 | 204,197,1 234 | 243,248,1 235 | 117,181,1 236 | 63,173,1 237 | 9,154,1 238 | 214,31,1 239 | 270,215,1 240 | 112,60,1 241 | 2,214,1 242 | 9,30,1 243 | 215,111,5 244 | 96,166,2 245 | 415,71,3 246 | 273,42,1 247 | 24,66,3 248 | 201,44,4 249 | 186,50,1 250 | 96,192,2 251 | 14,259,2 252 | 478,5,2 253 | 203,172,2 254 | 174,216,2 255 | 439,86,2 256 | 131,299,2 257 | 31,122,2 258 | 32,23,2 259 | 145,70,2 260 | 347,293,2 261 | 243,50,2 262 | 331,10,2 263 | 374,63,1 264 | 348,87,1 265 | 89,297,1 266 | 391,27,1 267 | 20,105,1 268 | 96,312,3 269 | 246,99,1 270 | 321,301,1 271 | 194,30,1 272 | 262,296,1 273 | 436,22,1 274 | 212,156,1 275 | 148,94,2 276 | 351,282,2 277 | 308,65,2 278 | 17,120,2 279 | 57,164,2 280 | 246,154,2 281 | 49,198,2 282 | 162,18,4 283 | 476,167,3 284 | 403,165,4 285 | 40,91,2 286 | 273,41,1 287 | 372,26,2 288 | 380,112,1 289 | 405,202,1 290 | 376,248,4 291 | 174,204,2 292 | 165,271,2 293 | 471,259,4 294 | 476,121,1 295 | 441,159,1 296 | 241,26,1 297 | 393,218,1 298 | 240,201,1 299 | 43,126,1 300 | 37,267,1 301 | 222,317,3 302 | 72,249,1 303 | 117,69,1 304 | 49,135,1 305 | 172,271,1 306 | 366,184,1 307 | 193,267,5 308 | 107,1,2 309 | 184,104,3 310 | 380,110,1 311 | 76,97,12 312 | 27,223,4 313 | 358,141,1 314 | 102,319,2 315 | 486,78,2 316 | 18,19,2 317 | 157,38,2 318 | 164,13,2 319 | 120,148,3 320 | 361,76,2 321 | 412,109,2 322 | 151,289,2 323 | 494,116,2 324 | 335,251,2 325 | 290,181,2 326 | 381,38,2 327 | 437,44,1 328 | 1,182,1 329 | 112,75,1 330 | 147,67,1 331 | 256,208,1 332 | 8,136,1 333 | 427,107,1 334 | 313,123,1 335 | 264,90,1 336 | 462,142,1 337 | 221,165,3 338 | 394,122,1 339 | 69,159,2 340 | 164,280,2 341 | 50,217,2 342 | 12,272,2 343 | 93,196,2 344 | 315,154,2 345 | 15,81,2 346 | 132,273,2 347 | 222,264,2 348 | 173,305,2 349 | 493,92,2 350 | 311,312,2 351 | 192,230,2 352 | 462,208,2 353 | 496,269,1 354 | 255,267,1 355 | 12,18,1 356 | 16,66,1 357 | 56,248,1 358 | 285,176,3 359 | 224,73,1 360 | 150,264,1 361 | 498,158,1 362 | 128,302,1 363 | 87,314,1 364 | 494,102,1 365 | 290,232,2 366 | 93,216,2 367 | 152,72,2 368 | 255,28,2 369 | 483,41,2 370 | 483,261,2 371 | 490,170,2 372 | 134,42,4 373 | 63,270,8 374 | 73,270,4 375 | 293,243,2 376 | 256,86,3 377 | 261,301,2 378 | 309,279,1 379 | 398,305,1 380 | 45,189,4 381 | 327,87,2 382 | 116,249,2 383 | 126,308,4 384 | 244,184,1 385 | 399,191,1 386 | 150,24,1 387 | 65,168,1 388 | 229,23,1 389 | 472,88,1 390 | 275,232,1 391 | 227,61,1 392 | 227,198,1 393 | 331,150,1 394 | 40,218,5 395 | 221,5,1 396 | 345,209,1 397 | 241,104,5 398 | 235,130,2 399 | 343,183,3 400 | 453,118,1 401 | 28,39,12 402 | 402,227,4 403 | 364,209,1 404 | 322,127,2 405 | 284,168,2 406 | 193,156,5 407 | 351,305,2 408 | 40,318,2 409 | 319,270,2 410 | 21,213,2 411 | 249,307,2 412 | 26,83,2 413 | 210,237,2 414 | 106,263,2 415 | 459,308,2 416 | 71,81,2 417 | 116,250,1 418 | 195,179,1 419 | 225,223,1 420 | 110,301,1 421 | 118,69,1 422 | 479,31,1 423 | 42,285,1 424 | 107,214,5 425 | 167,217,1 426 | 210,303,1 427 | 212,93,1 428 | 345,234,1 429 | 83,170,2 430 | 344,83,2 431 | 142,237,2 432 | 468,270,2 433 | 416,89,1 434 | 254,211,8 435 | 186,291,2 436 | 217,178,2 437 | 432,138,4 438 | 85,88,1 439 | 218,299,1 440 | 425,146,1 441 | 498,253,1 442 | 31,284,1 443 | 12,82,1 444 | 370,311,1 445 | 317,15,15 446 | 134,147,1 447 | 354,239,1 448 | 414,93,1 449 | 266,259,1 450 | 15,258,1 451 | 203,230,5 452 | 180,171,2 453 | 484,246,3 454 | 340,193,1 455 | 57,230,12 456 | 429,304,4 457 | 303,269,1 458 | 136,85,3 459 | 338,23,2 460 | 322,272,2 461 | 311,319,2 462 | 242,214,2 463 | 98,139,2 464 | 399,108,2 465 | 410,104,2 466 | 402,194,10 467 | 240,153,2 468 | 258,29,2 469 | 314,19,2 470 | 235,55,2 471 | 117,166,1 472 | 391,111,1 473 | 304,48,1 474 | 72,284,1 475 | 41,42,1 476 | 33,210,1 477 | 101,113,1 478 | 181,289,1 479 | 468,28,1 480 | 229,98,3 481 | 370,303,1 482 | 65,51,1 483 | 10,111,2 484 | 125,273,1 485 | 50,241,8 486 | 367,105,2 487 | 482,86,2 488 | 180,320,4 489 | 18,249,1 490 | 120,221,1 491 | 213,219,1 492 | 302,98,1 493 | 391,226,1 494 | 275,211,1 495 | 277,240,1 496 | 319,143,15 497 | 70,289,1 498 | 247,217,1 499 | 491,21,1 500 | 301,91,1 501 | 498,201,1 502 | 278,11,5 503 | 91,139,2 504 | 394,311,3 505 | 6,79,1 506 | 484,264,12 507 | 332,199,4 508 | 316,111,1 509 | 57,318,3 510 | 373,64,2 511 | 375,109,2 512 | 71,248,2 513 | 273,103,2 514 | 214,222,2 515 | 129,306,2 516 | 335,95,2 517 | 174,299,10 518 | 389,142,2 519 | 119,105,2 520 | 278,183,2 521 | 238,165,2 522 | 458,283,1 523 | 204,189,1 524 | 186,93,1 525 | 75,179,1 526 | 270,31,1 527 | 48,25,1 528 | 269,109,1 529 | 317,305,1 530 | 158,306,1 531 | 113,114,3 532 | 170,123,1 533 | 437,133,1 534 | 109,277,2 535 | 254,255,1 536 | 302,41,8 537 | 116,18,2 538 | 91,29,2 539 | 30,13,4 540 | 145,296,1 541 | 144,56,1 542 | 389,156,1 543 | 302,33,1 544 | 459,126,1 545 | 219,162,1 546 | 222,49,1 547 | 57,100,15 548 | 415,27,1 549 | 19,179,1 550 | 77,188,1 551 | 434,215,1 552 | 353,62,1 553 | 155,290,5 554 | 147,159,2 555 | 132,190,3 556 | 393,109,1 557 | 40,249,12 558 | 363,112,4 559 | 277,131,1 560 | 465,281,3 561 | 39,58,2 562 | 302,25,2 563 | 266,81,2 564 | 175,291,2 565 | 212,155,2 566 | 486,312,2 567 | 42,165,2 568 | 35,300,10 569 | 387,3,2 570 | 162,25,2 571 | 415,312,2 572 | 125,13,2 573 | 248,14,1 574 | 177,261,1 575 | 383,279,1 576 | 56,278,1 577 | 329,140,1 578 | 357,195,1 579 | 42,89,1 580 | 271,58,1 581 | 57,63,1 582 | 217,63,3 583 | 268,34,1 584 | 307,267,1 585 | 66,7,2 586 | 266,129,1 587 | 39,299,8 588 | 130,5,2 589 | 276,161,2 590 | 435,51,4 591 | 401,280,1 592 | 41,199,1 593 | 76,38,1 594 | 410,66,1 595 | 311,293,1 596 | 359,80,1 597 | 410,289,1 598 | 251,52,15 599 | 433,191,1 600 | 4,25,1 601 | 89,132,1 602 | 357,118,1 603 | 348,150,1 604 | 196,245,5 605 | 344,219,2 606 | 334,191,3 607 | 21,187,1 608 | 168,135,12 609 | 98,286,4 610 | 163,98,1 611 | 127,139,3 612 | 451,63,2 613 | 397,310,2 614 | 251,24,2 615 | 81,201,2 616 | 361,192,2 617 | 206,132,2 618 | 297,243,2 619 | 216,177,10 620 | 84,12,2 621 | 405,244,2 622 | 142,24,2 623 | 369,91,2 624 | 380,57,1 625 | 389,234,1 626 | 64,77,1 627 | 449,182,1 628 | 19,26,1 629 | 448,291,1 630 | 357,270,1 631 | 323,116,1 632 | 233,143,1 633 | 206,154,3 634 | 479,261,1 635 | 451,242,1 636 | 201,43,2 637 | 106,173,1 638 | 470,73,8 639 | 377,12,2 640 | 173,286,2 641 | 156,173,4 642 | 102,131,1 643 | 63,178,1 644 | 467,145,1 645 | 475,311,1 646 | 228,242,1 647 | 500,277,1 648 | 205,128,1 649 | 130,63,15 650 | 52,207,1 651 | 170,48,1 652 | 383,247,1 653 | 88,191,1 654 | 307,12,1 655 | 283,289,5 656 | 88,70,2 657 | 332,301,3 658 | 133,91,1 659 | 123,65,12 660 | 16,30,4 661 | 78,166,1 662 | 38,199,3 663 | 452,106,2 664 | 108,11,2 665 | 291,275,2 666 | 200,113,2 667 | 281,217,2 668 | 2,4,2 669 | 300,241,2 670 | 141,212,10 671 | 66,277,2 672 | 49,298,2 673 | 438,243,2 674 | 135,302,2 675 | 439,5,1 676 | 454,298,1 677 | 3,269,1 678 | 23,19,1 679 | 3,125,1 680 | 466,19,1 681 | 278,262,1 682 | 100,23,1 683 | 190,314,1 684 | 58,159,3 685 | 55,267,1 686 | 378,103,1 687 | 188,28,2 688 | 42,312,1 689 | 54,74,8 690 | 385,29,2 691 | 113,313,2 692 | 339,72,4 693 | 489,218,1 694 | 456,8,1 695 | 88,311,1 696 | 330,272,1 697 | 426,240,1 698 | 262,51,1 699 | 494,67,1 700 | 225,249,15 701 | 23,111,1 702 | 379,158,1 703 | 294,177,1 704 | 357,199,1 705 | 56,41,1 706 | 269,25,5 707 | 255,61,2 708 | 15,120,3 709 | 214,319,1 710 | 63,219,12 711 | 172,241,4 712 | 452,21,1 713 | 484,91,3 714 | 444,92,2 715 | 281,241,2 716 | 313,255,2 717 | 35,161,2 718 | 100,72,2 719 | 383,18,2 720 | 423,234,2 721 | 477,164,10 722 | 393,141,2 723 | 87,273,2 724 | 248,204,2 725 | 244,143,2 726 | 199,188,1 727 | 419,65,1 728 | 16,109,1 729 | 355,309,1 730 | 207,202,1 731 | 403,12,1 732 | 349,281,1 733 | 272,40,1 734 | 257,13,1 735 | 469,270,3 736 | 424,11,1 737 | 368,241,1 738 | 230,317,2 739 | 164,200,1 740 | 453,218,8 741 | 350,45,2 742 | 375,61,2 743 | 415,24,4 744 | 198,58,1 745 | 176,62,1 746 | 392,264,1 747 | 187,137,1 748 | 291,217,1 749 | 235,151,1 750 | 439,214,1 751 | 158,272,15 752 | 48,198,1 753 | 290,127,1 754 | 298,209,1 755 | 288,145,1 756 | 60,157,1 757 | 343,35,5 758 | 265,130,2 759 | 218,93,3 760 | 206,66,1 761 | 454,78,12 762 | 417,239,4 763 | 40,256,1 764 | 203,237,3 765 | 335,230,2 766 | 288,280,2 767 | 187,46,2 768 | 234,142,2 769 | 234,16,2 770 | 439,47,2 771 | 300,173,2 772 | 309,292,10 773 | 267,164,2 774 | 459,25,2 775 | 76,68,2 776 | 276,51,2 777 | 46,36,1 778 | 275,60,1 779 | 173,208,1 780 | 443,77,1 781 | 377,16,1 782 | 344,188,1 783 | 64,254,1 784 | 46,232,1 785 | 439,40,1 786 | 282,90,3 787 | 3,39,1 788 | 364,302,1 789 | 120,250,2 790 | 104,106,1 791 | 215,65,8 792 | 439,307,2 793 | 312,41,2 794 | 114,149,4 795 | 85,232,1 796 | 165,79,1 797 | 351,240,1 798 | 89,80,1 799 | 302,283,1 800 | 341,196,1 801 | 58,48,1 802 | 69,245,15 803 | 97,194,1 804 | 339,116,1 805 | 3,81,1 806 | 118,116,1 807 | 133,106,1 808 | 15,123,5 809 | 428,173,2 810 | 278,241,3 811 | 497,288,1 812 | 266,59,12 813 | 307,211,4 814 | 100,93,1 815 | 210,160,3 816 | 95,69,2 817 | 295,138,2 818 | 372,310,2 819 | 267,122,2 820 | 122,173,2 821 | 443,7,2 822 | 231,56,2 823 | 55,235,10 824 | 136,55,2 825 | 241,298,2 826 | 39,4,2 827 | 447,176,2 828 | 243,147,1 829 | 345,226,1 830 | 207,108,1 831 | 297,194,1 832 | 434,253,1 833 | 409,116,1 834 | 255,257,1 835 | 143,81,1 836 | 211,251,1 837 | 363,52,3 838 | 435,280,1 839 | 331,187,1 840 | 286,26,2 841 | 120,280,1 842 | 274,37,8 843 | 235,249,2 844 | 250,201,2 845 | 173,176,4 846 | 392,192,1 847 | 213,112,1 848 | 136,311,1 849 | 29,94,1 850 | 408,278,1 851 | 207,261,1 852 | 164,272,1 853 | 179,288,15 854 | 230,188,1 855 | 358,210,1 856 | 211,250,1 857 | 417,201,1 858 | 37,25,1 859 | 26,220,5 860 | 144,139,2 861 | 2,37,3 862 | 249,204,1 863 | 62,137,12 864 | 468,136,4 865 | 334,195,1 866 | 40,60,3 867 | 64,44,2 868 | 446,17,2 869 | 170,37,2 870 | 320,187,2 871 | 397,157,2 872 | 385,132,2 873 | 343,70,2 874 | 59,189,10 875 | 389,117,2 876 | 277,13,2 877 | 157,91,2 878 | 492,315,2 879 | 90,29,1 880 | 86,184,1 881 | 19,74,1 882 | 264,203,1 883 | 394,177,1 884 | 132,250,1 885 | 61,38,1 886 | 187,256,1 887 | 341,170,1 888 | 241,287,3 889 | 109,124,1 890 | 129,182,1 891 | 257,42,2 892 | 143,147,1 893 | 451,230,8 894 | 450,74,2 895 | 81,204,2 896 | 30,224,4 897 | 45,222,1 898 | 297,210,1 899 | 166,175,1 900 | 290,10,1 901 | 410,295,1 902 | 465,173,1 903 | 113,319,1 904 | 302,202,15 905 | 246,190,1 906 | 244,123,1 907 | 139,247,1 908 | 381,172,1 909 | 498,165,1 910 | 261,250,5 911 | 183,181,2 912 | 25,176,3 913 | 13,20,1 914 | 214,233,12 915 | 288,255,4 916 | 29,180,1 917 | 17,2,3 918 | 496,283,2 919 | 43,240,2 920 | 482,312,2 921 | 81,237,2 922 | 253,163,2 923 | 475,305,2 924 | 423,32,2 925 | 110,171,10 926 | 471,190,2 927 | 212,251,2 928 | 322,239,2 929 | 121,198,2 930 | 292,57,1 931 | 269,293,1 932 | 463,174,1 933 | 96,170,1 934 | 267,230,1 935 | 468,260,1 936 | 57,247,1 937 | 362,298,1 938 | 116,40,1 939 | 7,68,3 940 | 315,286,1 941 | 117,104,1 942 | 432,245,2 943 | 397,217,1 944 | 420,190,8 945 | 339,243,2 946 | 243,40,2 947 | 498,191,4 948 | 240,241,1 949 | 201,154,1 950 | 64,230,1 951 | 335,145,1 952 | 81,220,1 953 | 376,46,1 954 | 311,301,1 955 | 315,235,15 956 | 182,309,1 957 | 152,171,1 958 | 193,209,1 959 | 106,54,1 960 | 138,241,1 961 | 476,273,5 962 | 373,312,2 963 | 340,151,3 964 | 329,284,1 965 | 396,219,12 966 | 41,222,4 967 | 304,74,1 968 | 28,130,3 969 | 402,76,2 970 | 138,132,2 971 | 19,276,2 972 | 248,67,2 973 | 409,233,2 974 | 313,95,2 975 | 445,63,2 976 | 424,298,10 977 | 59,292,2 978 | 175,77,2 979 | 353,225,2 980 | 369,129,2 981 | 93,160,1 982 | 415,99,1 983 | 297,241,12 984 | 275,298,4 985 | 10,180,1 986 | 478,117,3 987 | 325,8,2 988 | 403,229,2 989 | 112,100,2 990 | 117,33,2 991 | 396,152,2 992 | 27,296,2 993 | 410,9,2 994 | 375,257,10 995 | 247,40,2 996 | 89,265,2 997 | 238,19,2 998 | 15,94,2 999 | 300,189,1 1000 | 301,149,2 1001 | 166,194,4 1002 | -------------------------------------------------------------------------------- /data/entity-resolution-43.dump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/data/entity-resolution-43.dump -------------------------------------------------------------------------------- /data/entity-resolution-44.dump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/data/entity-resolution-44.dump -------------------------------------------------------------------------------- /data/entity-resolution-50.dump: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/data/entity-resolution-50.dump -------------------------------------------------------------------------------- /documentation/cypher.queries.txt: -------------------------------------------------------------------------------- 1 | ------------------------------------------------------------------------------------------------------------------ 2 | //Load Users, Ip Addresses and connect Users with IP Addresses 3 | 4 | // Constraints (Neo4j 4.4.X) 5 | CREATE CONSTRAINT user_id IF NOT EXISTS FOR (u:User) REQUIRE u.userId IS UNIQUE; 6 | CREATE CONSTRAINT ip_address IF NOT EXISTS FOR (i:IpAddress) REQUIRE i.address IS UNIQUE; 7 | 8 | // Constraints (Neo4j 4.3.X) 9 | CREATE CONSTRAINT user_id IF NOT EXISTS ON (u:User) ASSERT u.userId IS UNIQUE; 10 | CREATE CONSTRAINT ip_address IF NOT EXISTS ON (i:IpAddress) ASSERT i.address IS UNIQUE; 11 | 12 | // indexes 13 | CREATE INDEX user_state IF NOT EXISTS FOR (u:User) ON (u.state); 14 | CREATE INDEX user_firstName IF NOT EXISTS FOR (u:User) ON (u.firstName); 15 | CREATE INDEX user_lastName IF NOT EXISTS FOR (u:User) ON (u.firstName); 16 | 17 | // Data load 18 | LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/Users.csv" AS row 19 | 20 | // Conditionally create User, set properties on first create 21 | MERGE (u:User { userId: toInteger(row.userId) }) 22 | ON CREATE SET 23 | u.firstName= row.firstName, 24 | u.lastName= row.lastName, 25 | u.gender= row.gender, 26 | u.email= row.email, 27 | u.phone= row.phone, 28 | u.state= row.state, 29 | u.country= row.country 30 | 31 | WITH u, row 32 | // create IpAddress if not exists 33 | MERGE (ip:IpAddress { address: row.ipAddress }) 34 | // create unique relationship 35 | MERGE (u)-[:USES]->(ip); 36 | 37 | ------------------------------------------------------------------------------------------------------------------ 38 | // Load Movies, Genres and link them 39 | 40 | // Constraints (Neo4j 4.4.X) 41 | CREATE CONSTRAINT genre_name IF NOT EXISTS FOR (g:Genre) REQUIRE g.name IS UNIQUE; 42 | CREATE CONSTRAINT movie_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.movieId IS UNIQUE; 43 | 44 | // Constraints (Neo4j 4.3.X) 45 | CREATE CONSTRAINT genre_name IF NOT EXISTS ON (g:Genre) ASSERT g.name IS UNIQUE; 46 | CREATE CONSTRAINT movie_id IF NOT EXISTS ON (m:Movie) ASSERT m.movieId IS UNIQUE; 47 | 48 | // Index 49 | CREATE INDEX movie_title IF NOT EXISTS FOR (m:Movie) ON (m.title); 50 | 51 | //Load Data 52 | LOAD CSV WITH HEADERS FROM 53 | "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/Movies.csv" AS row 54 | 55 | // conditionally create movie and set properties on first creation 56 | MERGE ( m:Movie { movieId: toInteger(row.movieId) }) 57 | ON CREATE SET 58 | m.title = row.name, 59 | m.year = toInteger(row.year) 60 | 61 | WITH m, row 62 | // create Genre if not exists 63 | MERGE (g:Genre { name: row.genre } ) 64 | // create relationship if not exists 65 | MERGE (m)-[:HAS]->(g) 66 | RETURN m, g; 67 | 68 | ------------------------------------------------------------------------------------------------------------------ 69 | //Load Watch Events Relationships - Execute this after loading user and movies 70 | LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/WatchEvent.csv" AS row 71 | 72 | // find user and movie 73 | MATCH (u:User {userId: toInteger(row.userId)}) 74 | MATCH (m:Movie {movieId: toInteger(row.movieId)}) 75 | 76 | // create relationship if not exists 77 | MERGE (u)-[w:WATCHED]->(m) 78 | // always update watchCount 79 | SET w.watchCount = toInteger(row.watchCount); 80 | ------------------------------------------------------------------------------------------------------------------ 81 | // Query users who have watched movie "The Boss Baby: Family Business" 82 | MATCH (u:User)-[w:WATCHED]->(m:Movie {title: "The Boss Baby: Family Business"}) 83 | RETURN u, w, m LIMIT 5 84 | ------------------------------------------------------------------------------------------------------------------ 85 | // Show users from "New York" and movies watched by them 86 | MATCH (u:User {state: "New York"} )-[w:WATCHED]->(m) RETURN u, w, m LIMIT 50 87 | ------------------------------------------------------------------------------------------------------------------ 88 | // Show trending genres in Texas 89 | MATCH (u:User {state: "Texas"} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 90 | // group by genre, order by frequency 91 | RETURN g.name as genre, count(g) as freq 92 | ORDER BY freq DESC 93 | ------------------------------------------------------------------------------------------------------------------ 94 | //Users who have similar names 95 | // These are users who have same/similar names but different (redundant) accounts due to typos or abbreviations used for some instance 96 | MATCH (a:User) 97 | MATCH (b:User) 98 | // not the same user 99 | WHERE a <> b 100 | 101 | // users with full-names 102 | WITH a, b, a.firstName + ' ' + a.lastName AS name1, b.firstName + ' ' + b.lastName AS name2 103 | 104 | // compute different similiarities 105 | WITH *, 106 | toInteger((1-apoc.text.jaroWinklerDistance(name1, name2)) * 100) AS nameSimilarity, 107 | toInteger((1-apoc.text.jaroWinklerDistance(a.email, b.email)) * 100) AS emailSimilarity, 108 | toInteger((1-apoc.text.jaroWinklerDistance(a.phone, b.phone)) * 100) AS phoneSimilarity 109 | 110 | // compute a total similarity score 111 | WITH a, b, name1, name2, toInteger((nameSimilarity + emailSimilarity + phoneSimilarity)/3) as similarity 112 | 113 | // filter 114 | WHERE similarity >= 90 115 | 116 | RETURN name1, name2, a.email, b.email, similarity 117 | 118 | ORDER BY similarity DESC 119 | ------------------------------------------------------------------------------------------------------------------ 120 | //Users belonging to same family 121 | //Find users who have similar last names and live in same state, and connected using same IP address, that means they are either same users with redundant account or belong to the same family 122 | // shared IP address 123 | MATCH (a:User)-->(ip:IpAddress)<--(b:User) 124 | // same lastname and state 125 | WHERE a.lastName = b.lastName 126 | AND a.state = b.state AND a.country = b.country 127 | 128 | // group by joint attributes, collect all member-names 129 | WITH ip, a.country as country, a.state as state, 130 | a.lastName as familyName, 131 | collect(distinct b.firstName + ' ' + b.lastName) as members, 132 | count(distinct b) as memberCount 133 | 134 | RETURN state, familyName, memberCount, members 135 | ORDER BY memberCount DESC 136 | ------------------------------------------------------------------------------------------------------------------ 137 | //Create Family Nodes for each family and connect members 138 | // shared IP address 139 | MATCH (a:User)-->(ip:IpAddress)<--(b:User) 140 | // same lastname and state 141 | WHERE a.lastName = b.lastName 142 | AND a.state = b.state AND a.country = b.country 143 | 144 | // group by joint attributes, collect all members 145 | WITH ip, a.country as country, a.state as state, 146 | a.lastName as familyName, 147 | collect(distinct b) as familyMembers, 148 | count(distinct b) as totalMembers 149 | WITH familyName, head(familyMembers) as first, tail(familyMembers) as rest 150 | // not global family but within first member 151 | MERGE (first)-[:BELONGS_TO]->(f:Family {name: familyName}) 152 | WITH f,rest 153 | 154 | UNWIND rest as member 155 | 156 | MERGE (member)-[r:BELONGS_TO]->(f) 157 | RETURN count(*); 158 | ------------------------------------------------------------------------------------------------------------------ 159 | //Check how may families are created 160 | MATCH (f:Family)<-[b:BELONGS_TO]-(u:User) 161 | 162 | RETURN f, b, u LIMIT 200 163 | ------------------------------------------------------------------------------------------------------------------ 164 | //Providing recommendation to the member bease on his account\family members history 165 | //Check other genres preferred by account members and suggest top 5 movies from most watched genres 166 | MATCH (user:User {firstName: "Vilma", lastName: "De Mars"}) 167 | // other family members 168 | MATCH (user)-[:BELONGS_TO]->(f)<-[:BELONGS_TO]-(otherMember) 169 | 170 | // what have they watched and transitive via genre 171 | MATCH (otherMember)-[:WATCHED]->(m1)-[:HAS]->(g:Genre)<-[:HAS]-(m2) 172 | 173 | // aggregate by genre, sort by watch count 174 | WITH g, count(*) as watched, m2 175 | ORDER BY watched DESC 176 | 177 | // count totals per genre, top-5 watched per genre 178 | WITH g, count(distinct m2) as totalMovies, collect(m2.title)[0..5] as movies 179 | 180 | // return 5 per genre 181 | RETURN g.name as genre, totalMovies, movies as topFiveMovies 182 | ORDER BY totalMovies DESC LIMIT 10 183 | ------------------------------------------------------------------------------------------------------------------ 184 | 185 | //Find users based on their movie watching preferences using Node Similarity algorithm 186 | //Node Similarity-Create Graph 187 | //CREATE GRAPH FOR Node Similarity 188 | CALL gds.graph.create( 189 | 'similarityGraph', 190 | // labels 191 | ['User', 'Movie'], 192 | { 193 | // relationships 194 | WATCHED: { 195 | type: 'WATCHED', 196 | properties: { 197 | strength: { 198 | property: 'watchCount', 199 | defaultValue: 1 200 | } 201 | } 202 | } 203 | } 204 | ); 205 | 206 | //Node Similarity - Graph Memory Estimate 207 | //The following will estimate the memory requirements for running the algorithm 208 | CALL gds.nodeSimilarity.write.estimate('similarityGraph', { 209 | writeRelationshipType: 'SIMILAR', 210 | writeProperty: 'score' 211 | }) 212 | YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory 213 | ------------------------------------------------------------------------------------------------------------------ 214 | //Node Similarity - Execute algorithm and show results 215 | //The following will run the algorithm, and stream results 216 | 217 | CALL gds.nodeSimilarity.stream('similarityGraph') 218 | // return ids and similarity 219 | YIELD node1, node2, similarity 220 | // fetch nodes by id 221 | WITH gds.util.asNode(node1) AS person1, gds.util.asNode(node2) AS person2, similarity 222 | 223 | RETURN 224 | person1.firstName + ' ' + person1.lastName as p1, 225 | person2.firstName + ' ' + person2.lastName as p2, similarity 226 | ORDER BY similarity DESC LIMIT 50 227 | ------------------------------------------------------------------------------------------------------------------ 228 | //Get recommendations for a user based on similarity. For a user, fetch recommendations based on other similar users' preferences 229 | MATCH (person1:User) 230 | WHERE person1.firstName = 'Paulie' AND person1.lastName = 'Imesson' 231 | 232 | CALL gds.nodeSimilarity.stream('similarityGraph') 233 | YIELD node1, node2, similarity 234 | // limit to our user 235 | WHERE node1 = id(person1) 236 | 237 | WITH person1, gds.util.asNode(node2) AS person2, similarity 238 | 239 | // what did the other people watch 240 | MATCH (person2)-[w:WATCHED]->(m) 241 | // that our user hasn't seen 242 | WHERE NOT exists { (person1)-[:WATCHED]->(m) } 243 | 244 | RETURN m.title as movie, SUM(w.watchCount) as watchCount 245 | ORDER BY watchCount DESC LIMIT 10 246 | ------------------------------------------------------------------------------------------------------------------ 247 | //Find similar users by genre preference using Pearson similarity function 248 | //Here we are finding the users who have similar preferences as Lanette Laughtisse 249 | //We are comparing the similarities based on the movies they have watched from similar genre 250 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 251 | MATCH (m)-[:HAS]->(g1:Genre) 252 | WITH p1, g1, count(m) as movieCount1 253 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 254 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 255 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 256 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 257 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 258 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 259 | WITH 260 | p1.firstName + ' ' + p1.lastName AS currentUser, 261 | p2.firstName + ' ' + p2.lastName AS similarUser, 262 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 263 | WHERE similarity > 0.9 264 | RETURN currentUser,similarUser, similarity 265 | ORDER BY similarity DESC 266 | LIMIT 100 267 | ------------------------------------------------------------------------------------------------------------------ 268 | //Get recommendations for a user using similar order users' preferenes by fetching similar users using Pearson Similarity function 269 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 270 | MATCH (m)-[:HAS]->(g1:Genre) 271 | WITH p1, g1, count(m) as movieCount1 272 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 273 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 274 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 275 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 276 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 277 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 278 | WITH 279 | p1 AS currentUser, 280 | p2 AS similarUser, 281 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 282 | WHERE similarity > 0.9 283 | MATCH (similarUser)-[w:WATCHED]->(m) 284 | WITH DISTINCT m as movies, SUM(w.watchCount) as watchCount 285 | RETURN movies order by watchCount 286 | ------------------------------------------------------------------------------------------------------------------ 287 | -------------------------------------------------------------------------------- /documentation/entity-resolution.adoc: -------------------------------------------------------------------------------- 1 | = Entity Resolution 2 | :img: img 3 | 4 | == Entity Resolution, Record Linkage and Similarity wise recommendation with Neo4j 5 | 6 | === What is Entity Resolution? 7 | 8 | Entity Resolution (ER) is the process of disambiguating data to determine if multiple digital records represent the same real-world entity such as a person, organization, place, or other type of object. 9 | 10 | For example, say you have information on persons coming from different e-commerce platforms, or say same users with different profiles in a system. 11 | 12 | They may have slightly different contact information, with addresses formatted differently, using different forms/abbreviations of names, etc. 13 | 14 | A human may be able to tell if the records actually belong to the same underlying entity but given the number of possible combinations and matching that can be had, there is a need for an intelligent automated approach to doing so, which is where ER systems come into play. 15 | 16 | There can be numerous use cases for Entity Resolution across industries like patient history linkage in Healthcare, customers' preferences and history in Insurance and Financial Services, identifying similar entities or groups for recommendation in E-commerce and Digital Marketing etc. 17 | 18 | == Demo Use Case 19 | 20 | This demo guide covers a similar use case of performing Entity Resolution. 21 | 22 | We have taken an example of a dummy online movie streaming platform. For ease of understanding, we have taken only movies and users datasets. 23 | 24 | Users can have one or more accounts on a movie streaming platform. 25 | 26 | We are performing Entity Resolution over users’ data to identify similar/same users. We are also performing linking for users which are from same account (or group/family). Later, we are leveraging this linking to provide effective recommendations to individual users. 27 | 28 | === Data Model 29 | 30 | image::{img}/model.png[] 31 | 32 | == Steps in this Guide 33 | 34 | In this guide, we will perform below steps: 35 | 36 | ifndef::env-guide[] 37 | * Load: Load nodes and relationship information from external CSV files and create entities 38 | * Relate: Establish more connections (relationships) between entities 39 | endif::[] 40 | * Explore: Perform basic querying with Cypher on loaded data 41 | * ER: Perform Entity Resolution based on similarity and do record linkage 42 | * Recommend: Generate recommendation based on user similarities / preferences 43 | * Additional: Try couple of preference based similarities and recommendation examples 44 | 45 | ifndef::env-auradb[] 46 | === Notes 47 | 48 | In this demonstration, we have used Neo4j APOC (Awesome Procedures on Cypher) and Neo4j GDS (Graph Data Science) libraries few Cypher queries. 49 | To execute the Cypher queries with APOC or GDS functions, you will need to add these libraries as plugins to your Neo4j database instance. 50 | 51 | For more details on APOC and GDS, please refer below links. 52 | 53 | * https://neo4j.com/developer/neo4j-apoc/[APOC^] 54 | * https://neo4j.com/docs/graph-data-science/current/[GDS^] 55 | endif::env-auradb[] 56 | 57 | ifndef::env-guide[] 58 | == Load Users, Ip Addresses and connect Users with IP Addresses 59 | 60 | Load nodes and relationship information from external CSV files and create entities 61 | 62 | [source,cypher] 63 | ---- 64 | // Constraints 65 | CREATE CONSTRAINT user_id IF NOT EXISTS FOR (u:User) REQUIRE u.userId IS UNIQUE; 66 | CREATE CONSTRAINT ip_address IF NOT EXISTS FOR (i:IpAddress) REQUIRE i.address IS UNIQUE; 67 | 68 | // indexes 69 | CREATE INDEX user_state IF NOT EXISTS FOR (u:User) ON (u.state); 70 | CREATE INDEX user_firstName IF NOT EXISTS FOR (u:User) ON (u.firstName); 71 | CREATE INDEX user_lastName IF NOT EXISTS FOR (u:User) ON (u.firstName); 72 | 73 | // Data load 74 | LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/Users.csv" AS row 75 | 76 | // Conditionally create User, set properties on first create 77 | MERGE (u:User { userId: toInteger(row.userId) }) 78 | ON CREATE SET 79 | u.firstName= row.firstName, 80 | u.lastName= row.lastName, 81 | u.gender= row.gender, 82 | u.email= row.email, 83 | u.phone= row.phone, 84 | u.state= row.state, 85 | u.country= row.country 86 | 87 | WITH u, row 88 | // create IpAddress if not exists 89 | MERGE (ip:IpAddress { address: row.ipAddress }) 90 | // create unique relationship 91 | MERGE (u)-[:USES]->(ip); 92 | ---- 93 | 94 | == Load Movies, Genres and link them 95 | 96 | [source,cypher] 97 | ---- 98 | // Constraints 99 | CREATE CONSTRAINT genre_name IF NOT EXISTS FOR (g:Genre) REQUIRE g.name IS UNIQUE; 100 | CREATE CONSTRAINT movie_id IF NOT EXISTS FOR (m:Movie) REQUIRE m.movieId IS UNIQUE; 101 | // Index 102 | CREATE INDEX movie_title IF NOT EXISTS FOR (m:Movie) ON (m.title); 103 | 104 | //Load Data 105 | LOAD CSV WITH HEADERS FROM 106 | "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/Movies.csv" AS row 107 | 108 | // conditionally create movie and set properties on first creation 109 | MERGE ( m:Movie { movieId: toInteger(row.movieId) }) 110 | ON CREATE SET 111 | m.title = row.name, 112 | m.year = toInteger(row.year) 113 | 114 | WITH m, row 115 | // create Genre if not exists 116 | MERGE (g:Genre { name: row.genre } ) 117 | // create relationship if not exists 118 | MERGE (m)-[:HAS]->(g) 119 | RETURN m, g; 120 | ---- 121 | 122 | == Establish more connections (relationships) between entities 123 | 124 | Load data and create "WATCHED" relationships between Users who have watched whatever Movies 125 | 126 | [source,cypher] 127 | ---- 128 | LOAD CSV WITH HEADERS FROM "https://raw.githubusercontent.com/neo4j-graph-examples/entity_resolution/main/data/csv/WatchEvent.csv" AS row 129 | 130 | // find user and movie 131 | MATCH (u:User {userId: toInteger(row.userId)}) 132 | MATCH (m:Movie {movieId: toInteger(row.movieId)}) 133 | 134 | // create relationship if not exists 135 | MERGE (u)-[w:WATCHED]->(m) 136 | // always update watchCount 137 | SET w.watchCount = toInteger(row.watchCount); 138 | ---- 139 | endif::[] 140 | 141 | == Perform basic querying with Cypher on loaded data 142 | 143 | Query users who have watched movie "The Boss Baby: Family Business" 144 | 145 | [source,cypher] 146 | ---- 147 | MATCH (u:User)-[w:WATCHED]->(m:Movie {title: "The Boss Baby: Family Business"}) 148 | RETURN u, w, m LIMIT 5 149 | ---- 150 | 151 | Show users from "New York" and movies watched by them 152 | 153 | [source,cypher] 154 | ---- 155 | MATCH (u:User {state: "New York"} )-[w:WATCHED]->(m) RETURN u, w, m LIMIT 50 156 | ---- 157 | 158 | Show trending genres in Texas 159 | 160 | [source,cypher] 161 | ---- 162 | MATCH (u:User {state: "Texas"} )-[:WATCHED]->(m)-[:HAS]->(g:Genre) 163 | // group by genre, order by frequency 164 | RETURN g.name as genre, count(g) as freq 165 | ORDER BY freq DESC 166 | ---- 167 | 168 | 169 | == Perform Entity Resolution based on similarity and perform record linkage 170 | 171 | === Users who have similar names 172 | 173 | These are users who have same/similar names but different (redundant) profiles due to typos or abbreviations used for some instances. 174 | 175 | We are using the Jaro Winkler Distance algorithm from the Neo4j APOC library. 176 | 177 | References 178 | 179 | * https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance[Jaro–Winkler distance^] 180 | * https://neo4j.com/labs/apoc/4.1/overview/apoc.text/apoc.text.jaroWinklerDistance/[apoc.text.jaroWinklerDistance^] 181 | 182 | [source,cypher] 183 | ---- 184 | MATCH (a:User) 185 | MATCH (b:User) 186 | // not the same user 187 | WHERE a <> b 188 | 189 | // users with full-names 190 | WITH a, b, a.firstName + ' ' + a.lastName AS name1, b.firstName + ' ' + b.lastName AS name2 191 | 192 | // compute different similiarities 193 | WITH *, 194 | toInteger(apoc.text.sorensenDiceSimilarity(name1, name2) * 100) AS nameSimilarity, 195 | toInteger(apoc.text.sorensenDiceSimilarity(a.email, b.email) * 100) AS emailSimilarity, 196 | toInteger(apoc.text.sorensenDiceSimilarity(a.phone, b.phone) * 100) AS phoneSimilarity 197 | 198 | // compute a total similarity score 199 | WITH a, b, name1, name2, toInteger((nameSimilarity + emailSimilarity + phoneSimilarity)/3) as similarity 200 | 201 | // filter 202 | WHERE similarity >= 90 203 | 204 | RETURN name1, name2, a.email, b.email, similarity 205 | 206 | ORDER BY similarity DESC 207 | ---- 208 | 209 | === Users belonging to same family 210 | 211 | Users who have similar last names and live in same state, and use same IP address, that means they are either same users with redundant profile or belong to the same family 212 | 213 | [source,cypher] 214 | ---- 215 | // shared IP address 216 | MATCH (a:User)-->(ip:IpAddress)<--(b:User) 217 | // same lastname and state 218 | WHERE a.lastName = b.lastName 219 | AND a.state = b.state AND a.country = b.country 220 | 221 | // group by joint attributes, collect all member-names 222 | WITH ip, a.country as country, a.state as state, 223 | a.lastName as familyName, 224 | collect(distinct b.firstName + ' ' + b.lastName) as members, 225 | count(distinct b) as memberCount 226 | 227 | RETURN state, familyName, memberCount, members 228 | ORDER BY memberCount DESC 229 | ---- 230 | 231 | Record Linkage: Create Family Nodes for each family and connect members. This is how we link the similar users and family members using a common Family node 232 | 233 | [source,cypher] 234 | ---- 235 | // shared IP address 236 | MATCH (a:User)-->(ip:IpAddress)<--(b:User) 237 | // same lastname and state 238 | WHERE a.lastName = b.lastName 239 | AND a.state = b.state AND a.country = b.country 240 | 241 | // group by joint attributes, collect all members 242 | WITH ip, a.country as country, a.state as state, 243 | a.lastName as familyName, 244 | collect(distinct b) as familyMembers, 245 | count(distinct b) as totalMembers 246 | WITH familyName, head(familyMembers) as first, tail(familyMembers) as rest 247 | // not global family but within first member 248 | MERGE (first)-[:BELONGS_TO]->(f:Family {name: familyName}) 249 | WITH f,rest 250 | 251 | UNWIND rest as member 252 | 253 | MERGE (member)-[r:BELONGS_TO]->(f) 254 | RETURN count(*); 255 | ---- 256 | 257 | === Check how may families are created 258 | [source,cypher] 259 | ---- 260 | MATCH (f:Family)<-[b:BELONGS_TO]-(u:User) 261 | 262 | RETURN f, b, u LIMIT 200 263 | ---- 264 | 265 | == Generate recommendation based on user family or group similarities / preferences 266 | 267 | Providing recommendation to the member based on his/her account/family members history. Get preferred genres by other account members and suggest top 5 movies from most watched genres. 268 | 269 | [source,cypher] 270 | ---- 271 | MATCH (user:User {firstName: "Vilma", lastName: "De Mars"}) 272 | // other family members 273 | MATCH (user)-[:BELONGS_TO]->(f)<-[:BELONGS_TO]-(otherMember) 274 | 275 | // what have they watched and transitive via genre 276 | MATCH (otherMember)-[:WATCHED]->(m1)-[:HAS]->(g:Genre)<-[:HAS]-(m2) 277 | 278 | // aggregate by genre, sort by watch count 279 | WITH g, count(*) as watched, m2 280 | ORDER BY watched DESC 281 | 282 | // count totals per genre, top-5 watched per genre 283 | WITH g, count(distinct m2) as totalMovies, collect(m2.title)[0..5] as movies 284 | 285 | // return 5 per genre 286 | RETURN g.name as genre, totalMovies, movies as topFiveMovies 287 | ORDER BY totalMovies DESC LIMIT 10 288 | ---- 289 | 290 | ifndef::env-auradb[] 291 | 292 | == Using Neo4j Node Similarity Algorigthm to find similar users and get recommendations 293 | 294 | Find users based on their movie watching preferences using Node Similarity algorithm 295 | 296 | * https://neo4j.com/docs/graph-data-science/current/algorithms/node-similarity/[Node Similarity^] 297 | 298 | Step 1: For this, we will first create an in-memory graph with node and relationship specification to perform matching 299 | 300 | [source,cypher] 301 | ---- 302 | CALL gds.graph.project( 303 | 'similarityGraph', 304 | // labels 305 | ['User', 'Movie'], 306 | { 307 | // relationships 308 | WATCHED: { 309 | type: 'WATCHED', 310 | properties: { 311 | strength: { 312 | property: 'watchCount', 313 | defaultValue: 1 314 | } 315 | } 316 | } 317 | } 318 | ); 319 | ---- 320 | 321 | Step 2: Perform memory estimate for the matching to execute 322 | 323 | [source,cypher] 324 | ---- 325 | CALL gds.nodeSimilarity.write.estimate('similarityGraph', { 326 | writeRelationshipType: 'SIMILAR', 327 | writeProperty: 'score' 328 | }) 329 | YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory 330 | ---- 331 | 332 | Step 3: Execute algorithm and show results 333 | 334 | [source,cypher] 335 | ---- 336 | CALL gds.nodeSimilarity.stream('similarityGraph') 337 | // return ids and similarity 338 | YIELD node1, node2, similarity 339 | WITH * ORDER BY similarity DESC LIMIT 50 340 | // fetch nodes by id 341 | WITH gds.util.asNode(node1) AS person1, gds.util.asNode(node2) AS person2, similarity 342 | RETURN 343 | person1.firstName + ' ' + person1.lastName as p1, 344 | person2.firstName + ' ' + person2.lastName as p2, similarity; 345 | ---- 346 | 347 | Step 4: Get recommendations for a user based on similarity. For a user, fetch recommendations based on other similar users' preferences 348 | 349 | [source,cypher] 350 | ---- 351 | MATCH (person1:User) 352 | WHERE person1.firstName = 'Paulie' AND person1.lastName = 'Imesson' 353 | 354 | CALL gds.nodeSimilarity.stream('similarityGraph') 355 | YIELD node1, node2, similarity 356 | // limit to our user 357 | WHERE node1 = id(person1) 358 | 359 | WITH person1, gds.util.asNode(node2) AS person2, similarity 360 | 361 | // what did the other people watch 362 | MATCH (person2)-[w:WATCHED]->(m) 363 | // that our user hasn't seen 364 | WHERE NOT exists { (person1)-[:WATCHED]->(m) } 365 | 366 | RETURN m.title as movie, SUM(w.watchCount) as watchCount 367 | ORDER BY watchCount DESC LIMIT 10 368 | ---- 369 | 370 | //// 371 | == Using Pearson Similarity Algorigthm to find similar users based on Genre preference and get recommendations 372 | 373 | * https://neo4j.com/docs/graph-data-science/current/alpha-algorithms/pearson/[Peason Similarity - Neo4j GDS^] 374 | * https://en.wikipedia.org/wiki/Pearson_correlation_coefficient[Pearson correlation coefficient^] 375 | 376 | 377 | Here we are finding the users who have similar Genre preferences as user Lanette Laughtisse. 378 | We are comparing the similarities based on the movies they have watched from similar genre. We can use this information to provide recommendations. 379 | 380 | 381 | [source,cypher] 382 | ---- 383 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 384 | MATCH (m)-[:HAS]->(g1:Genre) 385 | WITH p1, g1, count(m) as movieCount1 386 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 387 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 388 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 389 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 390 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 391 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 392 | WITH 393 | p1.firstName + ' ' + p1.lastName AS currentUser, 394 | p2.firstName + ' ' + p2.lastName AS similarUser, 395 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 396 | WHERE similarity > 0.9 397 | RETURN currentUser,similarUser, similarity 398 | ORDER BY similarity DESC 399 | LIMIT 100 400 | ---- 401 | 402 | Get recommendations for a user using similar order users' preferenes by fetching similar users using Pearson Similarity function 403 | [source,cypher] 404 | ---- 405 | MATCH (p1:User {firstName:"Lanette", lastName:"Laughtisse"} )-[:WATCHED]->(m:Movie) 406 | MATCH (m)-[:HAS]->(g1:Genre) 407 | WITH p1, g1, count(m) as movieCount1 408 | WITH p1, gds.alpha.similarity.asVector(g1, movieCount1) AS p1Vector 409 | MATCH (p2:User)-[:WATCHED]->(m2:Movie) 410 | MATCH (m2)-[:HAS]->(g1:Genre) WHERE p2 <> p1 411 | WITH p1, g1, p1Vector, p2, count(m2) as movieCount2 412 | WITH p1, p2, p1Vector, gds.alpha.similarity.asVector(g1, movieCount2) AS p2Vector 413 | WHERE size(apoc.coll.intersection([v in p1Vector | v.category], [v in p2Vector | v.category])) > 3 414 | WITH 415 | p1 AS currentUser, 416 | p2 AS similarUser, 417 | gds.alpha.similarity.pearson(p1Vector, p2Vector, {vectorType: "maps"}) AS similarity 418 | WHERE similarity > 0.9 419 | MATCH (similarUser)-[w:WATCHED]->(m) 420 | WITH DISTINCT m as movies, SUM(w.watchCount) as watchCount 421 | RETURN movies order by watchCount 422 | ---- 423 | //// 424 | endif::env-auradb[] 425 | 426 | == Next steps 427 | 428 | === Full Source Code Available on GitHub 429 | 430 | * https://github.com/neo4j-graph-examples/enitity_resolution[Source Code with Cypher and data dumps^] 431 | 432 | * https://github.com/neo4j-graph-examples/[Other Example Datasets^] 433 | 434 | === References 435 | 436 | * https://graphacademy.neo4j.com[GraphAcademy^] 437 | * https://neo4j.com/developer/[Developer resources^] 438 | * https://neo4j.com/docs/cypher-manual[Neo4j Cypher Manual^] 439 | * https://neo4j.com/developer-blog/exploring-supervised-entity-resolution-in-neo4j/[Entity Resolution in Neo4j Article^] 440 | -------------------------------------------------------------------------------- /documentation/entity-resolution.neo4j-browser-guide: -------------------------------------------------------------------------------- 1 | 21 | 24 |
25 | 26 | 44 | 45 | 46 | 47 |

Entity Resolution

48 | 49 | 50 | 51 | 52 |
53 |

Entity Resolution, Record Linkage and Similarity wise recommendation with Neo4j

54 |
55 |
56 | 57 | 58 | 59 |

What is Entity Resolution?

60 |
61 |

Entity Resolution (ER) is the process of disambiguating data to determine if multiple digital records represent the same real-world entity such as a person, organization, place, or other type of object.

62 |
63 |
64 |

For example, say you have information on persons coming from different e-commerce platforms, or say same users with different profiles in a system.

65 |
66 |
67 |

They may have slightly different contact information, with addresses formatted differently, using different forms/abbreviations of names, etc.

68 |
69 |
70 |

A human may be able to tell if the records actually belong to the same underlying entity but given the number of possible combinations and matching that can be had, there is a need for an intelligent automated approach to doing so, which is where ER systems come into play.

71 |
72 |
73 |

There can be numerous use cases for Entity Resolution across industries like patient history linkage in Healthcare, customers' preferences and history in Insurance and Financial Services, identifying similar entities or groups for recommendation in E-commerce and Digital Marketing etc.

74 |
75 |
76 |
77 |
78 | 79 | 80 | 81 | 82 |
83 |

Demo Use Case

84 |
85 |
86 |
87 |

This demo guide covers a similar use case of performing Entity Resolution.

88 |
89 |
90 |

We have taken an example of a dummy online movie streaming platform. For ease of understanding, we have taken only movies and users datasets.

91 |
92 |
93 |

Users can have one or more accounts on a movie streaming platform.

94 |
95 |
96 |

We are performing Entity Resolution over users’ data to identify similar/same users. We are also performing linking for users which are from same account (or group/family). Later, we are leveraging this linking to provide effective recommendations to individual users.

97 |
98 | 99 | 100 | 101 |

Data Model

102 |
103 |
104 | model 105 |
106 |
107 |
108 |
109 |
110 | 111 | 112 | 113 | 114 |
115 |

Steps in this Guide

116 |
117 |
118 |
119 |

In this guide, we will perform below steps:

120 |
121 |
122 |
    123 |
  • 124 |

    Explore: Perform basic querying with Cypher on loaded data

    125 |
  • 126 |
  • 127 |

    ER: Perform Entity Resolution based on similarity and do record linkage

    128 |
  • 129 |
  • 130 |

    Recommend: Generate recommendation based on user similarities / preferences

    131 |
  • 132 |
  • 133 |

    Additional: Try couple of preference based similarities and recommendation examples

    134 |
  • 135 |
136 |
137 | 138 | 139 | 140 |

Notes

141 |
142 |

In this demonstration, we have used Neo4j APOC (Awesome Procedures on Cypher) and Neo4j GDS (Graph Data Science) libraries few Cypher queries. 143 | To execute the Cypher queries with APOC or GDS functions, you will need to add these libraries as plugins to your Neo4j database instance.

144 |
145 |
146 |

For more details on APOC and GDS, please refer below links.

147 |
148 |
149 |
    150 |
  • 151 |

    APOC

    152 |
  • 153 |
  • 154 |

    GDS

    155 |
  • 156 |
157 |
158 |
159 |
160 |
161 | 162 | 163 | 164 | 165 |
166 |

Perform basic querying with Cypher on loaded data

167 |
168 |
169 |
170 |

Query users who have watched movie "The Boss Baby: Family Business"

171 |
172 |
173 |
174 |
MATCH (u:User)-[w:WATCHED]->(m:Movie {title: "The Boss Baby: Family Business"})
175 | RETURN u, w, m LIMIT 5
176 |
177 |
178 |
179 |

Show users from "New York" and movies watched by them

180 |
181 |
182 |
183 |
MATCH (u:User {state: "New York"} )-[w:WATCHED]->(m)  RETURN u, w, m LIMIT 50
184 |
185 |
186 |
187 |

Show trending genres in Texas

188 |
189 |
190 |
191 |
MATCH (u:User {state: "Texas"} )-[:WATCHED]->(m)-[:HAS]->(g:Genre)
192 | // group by genre, order by frequency
193 | RETURN g.name as genre, count(g) as freq
194 | ORDER BY freq DESC
195 |
196 |
197 |
198 |
199 |
200 | 201 | 202 | 203 | 204 |
205 |

Perform Entity Resolution based on similarity and perform record linkage

206 |
207 |
208 | 209 | 210 | 211 |

Users who have similar names

212 |
213 |

These are users who have same/similar names but different (redundant) profiles due to typos or abbreviations used for some instances.

214 |
215 |
216 |

We are using the Jaro Winkler Distance algorithm from the Neo4j APOC library.

217 |
218 |
219 |

References

220 |
221 |
222 | 230 |
231 |
232 |
233 |
MATCH (a:User)
234 | MATCH (b:User)
235 | // not the same user
236 | WHERE a <> b
237 | 
238 | // users with full-names
239 | WITH a, b, a.firstName + ' ' + a.lastName AS name1, b.firstName + ' ' + b.lastName AS name2
240 | 
241 | // compute different similiarities
242 | WITH *,
243 | toInteger((1-apoc.text.jaroWinklerDistance(name1, name2)) * 100) AS nameSimilarity,
244 | toInteger((1-apoc.text.jaroWinklerDistance(a.email, b.email)) * 100) AS emailSimilarity,
245 | toInteger((1-apoc.text.jaroWinklerDistance(a.phone, b.phone)) * 100) AS phoneSimilarity
246 | 
247 | // compute a total similarity score
248 | WITH a, b, name1, name2, toInteger((nameSimilarity + emailSimilarity + phoneSimilarity)/3) as similarity
249 | 
250 | // filter
251 | WHERE similarity >= 90
252 | 
253 | RETURN name1, name2, a.email, b.email,  similarity
254 | 
255 | ORDER BY similarity DESC
256 |
257 |
258 | 259 | 260 | 261 |

Users belonging to same family

262 |
263 |

Users who have similar last names and live in same state, and use same IP address, that means they are either same users with redundant profile or belong to the same family

264 |
265 |
266 |
267 |
// shared IP address
268 | MATCH (a:User)-->(ip:IpAddress)<--(b:User)
269 | // same lastname and state
270 | WHERE a.lastName = b.lastName
271 | AND a.state = b.state AND a.country = b.country
272 | 
273 | // group by joint attributes, collect all member-names
274 | WITH ip, a.country as country, a.state as state,
275 |      a.lastName as familyName,
276 |     collect(distinct b.firstName + ' '  + b.lastName) as members,
277 |     count(distinct b) as memberCount
278 | 
279 | RETURN state, familyName, memberCount, members
280 | ORDER BY memberCount DESC
281 |
282 |
283 |
284 |

Record Linkage: Create Family Nodes for each family and connect members. This is how we link the similar users and family members using a common Family node

285 |
286 |
287 |
288 |
// shared IP address
289 | MATCH (a:User)-->(ip:IpAddress)<--(b:User)
290 | // same lastname and state
291 | WHERE a.lastName = b.lastName
292 | AND a.state = b.state AND a.country = b.country
293 | 
294 | // group by joint attributes, collect all members
295 | WITH ip, a.country as country, a.state as state,
296 |      a.lastName as familyName,
297 |      collect(distinct b) as familyMembers,
298 |      count(distinct b) as totalMembers
299 | WITH familyName, head(familyMembers) as first, tail(familyMembers) as rest
300 | // not global family but within first member
301 | MERGE (first)-[:BELONGS_TO]->(f:Family {name: familyName})
302 | WITH f,rest
303 | 
304 | UNWIND rest as member
305 | 
306 | MERGE (member)-[r:BELONGS_TO]->(f)
307 | RETURN count(*);
308 |
309 |
310 | 311 | 312 | 313 |

Check how may families are created

314 |
315 |
316 |
MATCH (f:Family)<-[b:BELONGS_TO]-(u:User)
317 | 
318 | RETURN f, b, u LIMIT 200
319 |
320 |
321 |
322 |
323 |
324 | 325 | 326 | 327 | 328 |
329 |

Generate recommendation based on user family or group similarities / preferences

330 |
331 |
332 |
333 |

Providing recommendation to the member based on his/her account/family members history. Get preferred genres by other account members and suggest top 5 movies from most watched genres.

334 |
335 |
336 |
337 |
MATCH (user:User {firstName: "Vilma", lastName: "De Mars"})
338 | // other family members
339 | MATCH (user)-[:BELONGS_TO]->(f)<-[:BELONGS_TO]-(otherMember)
340 | 
341 | // what have they watched and transitive via genre
342 | MATCH (otherMember)-[:WATCHED]->(m1)-[:HAS]->(g:Genre)<-[:HAS]-(m2)
343 | 
344 | // aggregate by genre, sort by watch count
345 | WITH g, count(*) as watched, m2
346 | ORDER BY watched DESC
347 | 
348 | // count totals per genre, top-5 watched per genre
349 | WITH g, count(distinct m2) as totalMovies, collect(m2.title)[0..5] as movies
350 | 
351 | // return 5 per genre
352 | RETURN g.name as genre, totalMovies, movies as topFiveMovies
353 | ORDER BY totalMovies DESC LIMIT 10
354 |
355 |
356 |
357 |
358 |
359 | 360 | 361 | 362 | 363 |
364 |

Using Neo4j Node Similarity Algorigthm to find similar users and get recommendations

365 |
366 |
367 |
368 |

Find users based on their movie watching preferences using Node Similarity algorithm

369 |
370 |
371 | 376 |
377 |
378 |

Step 1: For this, we will first create an in-memory graph with node and relationship specification to perform matching

379 |
380 |
381 |
382 |
CALL gds.graph.project(
383 |     'similarityGraph',
384 |     // labels
385 |     ['User', 'Movie'],
386 |     {
387 |         // relationships
388 |         WATCHED: {
389 |             type: 'WATCHED',
390 |             properties: {
391 |                 strength: {
392 |                     property: 'watchCount',
393 |                     defaultValue: 1
394 |                 }
395 |             }
396 |         }
397 |     }
398 | );
399 |
400 |
401 |
402 |

Step 2: Perform memory estimate for the matching to execute

403 |
404 |
405 |
406 |
CALL gds.nodeSimilarity.write.estimate('similarityGraph', {
407 |   writeRelationshipType: 'SIMILAR',
408 |   writeProperty: 'score'
409 | })
410 | YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory
411 |
412 |
413 |
414 |

Step 3: Execute algorithm and show results

415 |
416 |
417 |
418 |
CALL gds.nodeSimilarity.stream('similarityGraph')
419 | // return ids and similarity
420 | YIELD node1, node2, similarity
421 | WITH * ORDER BY similarity DESC LIMIT 50
422 | // fetch nodes by id
423 | WITH gds.util.asNode(node1) AS person1, gds.util.asNode(node2) AS person2, similarity
424 | RETURN
425 | person1.firstName + ' ' +  person1.lastName as p1,
426 | person2.firstName  + ' ' +   person2.lastName as p2, similarity;
427 |
428 |
429 |
430 |

Step 4: Get recommendations for a user based on similarity. For a user, fetch recommendations based on other similar users' preferences

431 |
432 |
433 |
434 |
MATCH (person1:User)
435 | WHERE person1.firstName = 'Paulie' AND person1.lastName = 'Imesson'
436 | 
437 | CALL gds.nodeSimilarity.stream('similarityGraph')
438 | YIELD node1, node2, similarity
439 | // limit to our user
440 | WHERE node1 = id(person1)
441 | 
442 | WITH person1, gds.util.asNode(node2) AS person2, similarity
443 | 
444 | // what did the other people watch
445 | MATCH (person2)-[w:WATCHED]->(m)
446 | // that our user hasn't seen
447 | WHERE NOT exists { (person1)-[:WATCHED]->(m) }
448 | 
449 | RETURN m.title as movie, SUM(w.watchCount) as watchCount
450 | ORDER BY watchCount DESC LIMIT 10
451 |
452 |
453 |
454 |
455 |
456 | 457 | 458 | 459 | 460 |
461 |

Next steps

462 |
463 |
464 | 465 | 466 | 467 |

Full Source Code Available on GitHub

468 |
469 | 477 |
478 | 479 | 480 | 481 |

References

482 |
483 | 497 |
498 |
499 |
500 |
501 |
502 |
-------------------------------------------------------------------------------- /documentation/img/entity-resolution-icon.svg: -------------------------------------------------------------------------------- 1 | human-resources-hierarchy-woman -------------------------------------------------------------------------------- /documentation/img/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/documentation/img/example.png -------------------------------------------------------------------------------- /documentation/img/model.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/documentation/img/model.PNG -------------------------------------------------------------------------------- /documentation/img/neo4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neo4j-graph-examples/entity-resolution/2a2210b39d1d5d94e054fd1afbf085a56a39b76a/documentation/img/neo4j.png -------------------------------------------------------------------------------- /relate.project-install.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "entity-resolution", 3 | "description":"Entity Resolution, Record Linkage and Similarity wise recommendation with Neo4j", 4 | "icon": "documentation/img/entity-resolution-icon.svg", 5 | "dbms": [ 6 | { 7 | "dumpFile": "data/entity_resolution-44.dump", 8 | "targetNeo4jVersion": ">=4.4.0 <5.0.0", 9 | "plugins": ["apoc", "graph-data-science"] 10 | }, 11 | { 12 | "dumpFile": "data/entity-resolution-43.dump", 13 | "targetNeo4jVersion": ">=4.3.0 <4.4.0", 14 | "plugins": ["apoc", "graph-data-science"] 15 | }, 16 | { 17 | "dumpFile": "data/entity-resolution-50.dump", 18 | "targetNeo4jVersion": ">=5.0.0 <6.0.0", 19 | "plugins": ["apoc", "graph-data-science"] 20 | } 21 | ] 22 | } --------------------------------------------------------------------------------