Skip to content

jexp/fincen

Repository files navigation

ICIJ FinCen Dataset in Neo4j

ICIJ Investigation

FinCEN Files ICIJ 1920px

Finally, ICIJ used graph databases (Neo4J and Linkurious) to visualize and explore the FinCEN Files’ 400 spreadsheets containing data on 100,000 transactions. These were among the many tools to help piece together a nuanced picture of a broken system.

— ICIJ again used Neo4j for their investigation

Data

The download contains two CSV files with the same data as our JSON so I’ll adjust the instructions below.

The JSON files used here were scraped from their site (Explore The FinCen Data Files)

Feedback and Contributions

All data is from the ICIJ Web-Visualization (JS files) or download section.

If you have fixes, or new ideas for queries, please send a pull request.

If something doesn’t work, please create an issue.

Pre-Populated Demo Databases

Demo Server with Neo4j Browser

Sandbox

Dump File

  • fincen.dump

  • To import into Neo4j Aura, use the "Upload Data" feature and drop the dump file

  • For Neo4j Desktop, add the file to your project and use the "Imort Dump" from the 3-dots menu to import

  • For manual import use neo4j-admin load --from fincen.dump in a stopped dmbs

  • For a running 4.x Enterprise dbms, you need to add --database fincen and then use :use system and create database fincen to activate it.

Import into Neo4j

Neo4j Sandbox (3 days)

  1. Start Blank Neo4j sandbox https://sandbox.neo4j.com/?usecase=blank-sandbox

  2. Open Neo4j Browser with the button

  3. Copy or drag&drop fincen_csv.cypher into the editor window on top and run with the triangular run button

  4. Explore with the sidebar, e.g. clicking on Filing

  5. To explore interactively and visually, use the blue "Open with Bloom" button and use "neo4j" as a username, and the password (under the key icon) as password to log in

Neo4j Desktop (local installation)

  1. Download Neo4j Desktop https://neo4j.com/download

  2. Install locally

  3. Create a new project and a new database, call it eg. FinCen, set a password and remember it

  4. Click on the three dots and then "Manage", click on "Plugins" and Install "APOC"

  5. Start the database with the Start Button (Triangle)

  6. Open Neo4j Browser (e.g. with the blue "Open" button) or by pressing cmd+k or ctrl+k and entering "Browser"

  7. Copy or drag&drop fincen_csv.cypher into the editor window on top and run with the triangular run button

  8. Explore with the sidebar, e.g. clicking on Filing

  9. To explore interactively and visually, select "Open with Bloom" from the blue "Open" button drop-down

Neo4j Aura Cloud Database

  1. Log into https://neo4j.com/cloud/aura (or directly https://console.neo4j.io)

  2. Put in your credit card information

  3. Create a new 1GB database

  4. Save the password

  5. Open Neo4j Browser with the button

  6. Copy or drag&drop fincen_csv.cypher into the editor window on top and run with the triangular run button

  7. Explore with the sidebar, e.g. clicking on Filing

  8. To explore interactively and visually, select "Open with Bloom" from the blue "Open" button drop-down

Exploration

Neo4j Bloom

bloom fincen

In Neo4j Bloom, you can e.g. search for Filing Entity in the search bar.

You can configure the sidebar with icons for Countries, Entities and filings

You can set a rule based styling e.g. for Filings, I did a size based on amount with the min 100000 to 0.5x and the max 100000000 to 2x

bloom sidebar

To not have to do that manually, you can also import the bloom perspective file in this repository.

Example Queries

To run in Neo4j Browser just copy them into the editor on top and run with the triangular run button.

Biggest Filings
MATCH (f:Filing)
RETURN f ORDER BY f.amount DESC LIMIT 10;
Biggest Filing with participants
MATCH (f:Filing)
WITH f ORDER BY f.amount DESC LIMIT 10
MATCH (f)--(e:Entity)
RETURN *
fincen browser
Entities with highest transaction volume
MATCH (e:Entity)--(f:Filing)
WITH e, round(sum(f.amount)) as total
WITH e, total ORDER BY total DESC LIMIT 10
OPTIONAL MATCH (e)-[:COUNTRY]-(c:Country)
RETURN e.name, c.name, total
Money flows between banks
MATCH (source:Entity)<-[:ORIGINATOR]-(f:Filing)-[:BENEFITS]->(target:Entity)
WITH source, target, round(sum(f.amount)) as total ORDER BY total DESC LIMIT 10
RETURN source.name, target.name, total