{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_post","url":"https://ejfox.com/blog/projects/ccrb-clusters","json_url":"https://ejfox.com/blog/projects/ccrb-clusters.json","generator":"ejfox.com/json-twin@1","data":{"cacheVersion":"2026-05-13-gear-cards","html":"<figure role=\"figure\" aria-label=\"Force-directed network graph of NYPD civilian complaint clusters showing officers connected by shared misconduct patterns\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/fl_progressive:semi,c_scale,dpr_auto,w_1280/v1624505769/Screen_Shot_2021-06-21_at_8.58.50_PM.jpg\" alt=\"Force-directed network graph of NYPD civilian complaint clusters showing officers connected by shared misconduct patterns\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/fl_progressive:semi,c_scale,dpr_auto,w_1280/v1624505769/Screen_Shot_2021-06-21_at_8.58.50_PM.jpg 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/fl_progressive:semi,c_scale,dpr_auto,w_1280/v1624505769/Screen_Shot_2021-06-21_at_8.58.50_PM.jpg 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/fl_progressive:semi,c_scale,dpr_auto,w_1280/v1624505769/Screen_Shot_2021-06-21_at_8.58.50_PM.jpg 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/fl_progressive:semi,c_scale,dpr_auto,w_1280/v1624505769/Screen_Shot_2021-06-21_at_8.58.50_PM.jpg 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"Force-directed network graph of NYPD civilian complaint clusters showing officers connected by shared misconduct patterns\" width=\"2800\" height=\"2285\" style=\"--splay-rot:-1.18deg;\" data-dimensions=\"2800×2285\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">Force-directed network graph of NYPD civilian complaint clusters showing officers connected by shared misconduct patterns</figcaption>\n</figure>\n<figure role=\"figure\" aria-label=\"The published Gothamist/WNYC investigation built on this network analysis\" class=\"\">\n<img src=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1666630398/project-images/gothamist_ccrb.png\" alt=\"The published Gothamist/WNYC investigation built on this network analysis\" loading=\"lazy\" decoding=\"async\" srcset=\"https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_640/v1666630398/project-images/gothamist_ccrb.png 640w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_960/v1666630398/project-images/gothamist_ccrb.png 960w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1280/v1666630398/project-images/gothamist_ccrb.png 1280w, https://res.cloudinary.com/ejf/image/upload/c_scale,f_auto,q_auto:good,w_1920/v1666630398/project-images/gothamist_ccrb.png 1920w\" sizes=\"(max-width: 430px) 92vw, (max-width: 768px) 85vw, 900px\" title=\"The published Gothamist/WNYC investigation built on this network analysis\" width=\"5001\" height=\"2625\" style=\"--splay-rot:-0.6deg;\" data-dimensions=\"5001×2625\" class=\"img-full my-8 rounded-sm img-splay w-full mx-auto py-4\" crossorigin=\"anonymous\">\n<figcaption class=\"\">The published Gothamist/WNYC investigation built on this network analysis</figcaption>\n</figure>\n<p class=\"\">In 2021, I got my hands on a massive NYPD complaint dataset from Gothamist/WNYC and immediately went down a data rabbit hole. Built a network of 29,915 officer nodes with 159,671 relationships using Neo4j and Gephi (love-hate relationship with Gephi, but unrivaled for networks).</p>\n<p class=\"\">When Gothamist reporter George Joseph interviewed victims, they confirmed what the network showed - certain officers were \"catalysts\" who other officers \"followed\" into misconduct. Math and reality matched up! I documented everything in excruciating detail so others could replicate it for their own police departments.</p>","title":"Clusters of NYPD Misconduct","metadata":{"title":"Clusters of NYPD Misconduct","date":"2021-06-15T04:00:00.000Z","modified":"2025-08-26T19:52:56.000Z","url":"https://gothamist.com/news/mapping-clusters-nypd-officers-repeatedly-accused-misconduct","tech":["Neo4j","SQLite","Gephi","Network Analysis","Cypher"],"featured":true,"state":"deployed","aiInvolvement":"human-only","context":"client","tags":["data","nypd","journalism","database"],"words":114,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":2,"codeBlocks":0,"headers":{},"toc":[],"type":"post"}},"_links":{"self":"https://ejfox.com/blog/projects/ccrb-clusters.json","html":"https://ejfox.com/blog/projects/ccrb-clusters","index":"/blog.json"}}