Skip to content

Instantly share code, notes, and snippets.

@rvanbruggen
Last active October 20, 2015 12:50
Show Gist options
  • Save rvanbruggen/cdb6c72cde9a96dde498 to your computer and use it in GitHub Desktop.
Save rvanbruggen/cdb6c72cde9a96dde498 to your computer and use it in GitHub Desktop.
GraphConnect San Francisco 2015 - Schedule

Looking forward to October 21st, 2015 in San Francisco

This week we will be hosting and attending THE worldwide graph conference in San Francisco, California, GraphConnect. It’s going to be a splendid event, and that’s why I of course had to take the schedule for a spin in Neo4j.

The Schedule’s Model

Here’s what the model looks like (generated using a meta-graph of course):

1 model bis

Very simple - but it’s so much nicer when you can make it interactive and load it into Neo4j. Let’s do that. Let’s load that data into this graphgist.

//create the GraphConnect San Francisco 2015 Schedule
create (_0:`Conference` {`name`:"GraphConnect San Francisco 2015"})
create (_1:`Venue` {`name`:"Pier 27"})
create (_2:`Room` {`name`:"Coffee area"})
create (_3:`Room` {`name`:"Keynote room"})
create (_4:`Room` {`name`:"Golden Gate"})
create (_5:`Room` {`name`:"Bayview"})
create (_6:`Room` {`name`:"Colt Tower"})
create (_7:`Room` {`name`:"Lightning Talk Room"})
create (_8:`Day` {`date`:20151021})
create (_9:`Track` {`name`:"Fika"})
create (_10:`Track` {`name`:"Keynote"})
create (_11:`Track` {`name`:"Business Impact of Graphs"})
create (_12:`Track` {`name`:"Graphs in Action"})
create (_13:`Track` {`name`:"Learning Neo4j"})
create (_14:`Track` {`name`:"Lightning Talks"})
create (_15:`Speaker` {`name`:"ALL"})
create (_16:`Speaker` {`name`:"Emil Eifrem", `title`:"CEO"})
create (_17:`Speaker` {`name`:"Scott David"})
create (_18:`Speaker` {`name`:"Tim Williamson"})
create (_19:`Speaker` {`name`:"Hamish Boland-Rudder", `title`:"Online Editor"})
create (_20:`Speaker` {`name`:"Kevin Madden"})
create (_21:`Speaker` {`name`:"Julien Mazerolle", `title`:"CTO"})
create (_22:`Speaker` {`name`:"Chris Morrison", `title`:"CMO"})
create (_23:`Speaker` {`name`:"Rob Schoening", `title`:"Director of DevOps, Associate DevOps Engineer"})
create (_24:`Speaker` {`name`:"Prem Malhotra", `title`:"Sr. Director of Collaboration Architecture"})
create (_25:`Speaker` {`name`:"Karen Lopez"})
create (_26:`Speaker` {`name`:"Jim Webber", `title`:"Chief Scientist"})
create (_27:`Speaker` {`name`:"David Makoogan"})
create (_28:`Speaker` {`name`:"Patrick Chenzon"})
create (_29:`Speaker` {`name`:"Dr. Mahesh Chaudhari", `title`:"Chief Architect"})
create (_30:`Speaker` {`name`:"Steven Noel"})
create (_31:`Speaker` {`name`:"Lasse Andresen"})
create (_32:`Speaker` {`name`:"Dave Bennett"})
create (_33:`Speaker` {`name`:"Michal Bachman"})
create (_34:`Speaker` {`name`:"Clark Richey", `title`:"CTO"})
create (_35:`Speaker` {`name`:"Caleb Jones"})
create (_36:`Speaker` {`name`:"Kenny Bastani"})
create (_37:`Speaker` {`name`:"Josh Long"})
create (_38:`Speaker` {`name`:"Mark Needham", `title`:"Developer"})
create (_39:`Speaker` {`name`:"Michael Hunger", `title`:"Developer Evangelist"})
create (_40:`Speaker` {`name`:"Nicole White", `title`:"Data Scientist"})
create (_41:`Speaker` {`name`:"Petra Selmer", `title`:"Developer"})
create (_42:`Speaker` {`name`:"Ian Robinson", `title`:"Developer"})
create (_43:`Speaker` {`name`:"Chris Leishman", `title`:"Developer"})
create (_44:`Speaker` {`name`:"Stefan Armbruster", `title`:"Field Engineer"})
create (_45:`Speaker` {`name`:"Aseem Kishore"})
create (_46:`Speaker` {`name`:"Ryan Boyd", `title`:"Developer Evangelist"})
create (_47:`Speaker` {`name`:"Doug Auclair"})
create (_48:`Speaker` {`name`:"Chris Skardon"})
create (_49:`Speaker` {`name`:"Chet Corcos"})
create (_50:`Speaker` {`name`:"Brad Brech"})
create (_51:`Speaker` {`name`:"Corey Lanum"})
create (_52:`Speaker` {`name`:"Kevin Van Gundy", `title`:"Account manager"})
create (_53:`Speaker` {`name`:"Jeremy Snyder"})
create (_54:`Speaker` {`name`:"Christophe Willemsen ", `title`:"Consultant"})
create (_55:`Speaker` {`name`:"Axel Morgner", `title`:"CEO"})
create (_56:`Speaker` {`name`:"Suellen Stringer-Hye"})
create (_57:`Speaker` {`name`:"Rik Van Bruggen", `title`:"Regional Director"})
create (_58:`Speaker` {`name`:"Andreas Kolleger", `title`:"Product designer"})
create (_59:`Speaker` {`name`:"Will Lyon"})
create (_60:`Speaker` {`name`:"Nigel Small", `title`:"Developer"})
create (_61:`Speaker` {`name`:"Philip Rathle", `title`:"VP Product"})
create (_62:`Company` {`name`:"ALL"})
create (_63:`Company` {`name`:"Neo Technology"})
create (_64:`Company` {`name`:"World Economic Forum"})
create (_65:`Company` {`name`:"Monsanto"})
create (_66:`Company` {`name`:"ICIJ"})
create (_67:`Company` {`name`:"Tom Sawyer + Customer"})
create (_68:`Company` {`name`:"TraceOne"})
create (_69:`Company` {`name`:"Lending Club and Ashley Sun, Lending Club"})
create (_70:`Company` {`name`:"Cisco Systems"})
create (_71:`Company` {`name`:"InfoAdvisors"})
create (_72:`Company` {`name`:"Microsoft Azure"})
create (_73:`Company` {`name`:"Docker"})
create (_74:`Company` {`name`:"Zephyr Health"})
create (_75:`Company` {`name`:"MITRE"})
create (_76:`Company` {`name`:"FactGem"})
create (_77:`Company` {`name`:"Disney"})
create (_78:`Company` {`name`:"Fifty Three"})
create (_79:`Company` {`name`:"Tournr"})
create (_80:`Company` {`name`:"GraphAware"})
create (_81:`Company` {`name`:"Structr"})
create (_82:`Time` {`time`:815})
create (_83:`Time` {`time`:900})
create (_84:`Time` {`time`:1015})
create (_85:`Time` {`time`:1200})
create (_86:`Time` {`time`:1425})
create (_87:`Time` {`time`:1605})
create (_88:`Time` {`time`:1840})
create (_89:`Time` {`time`:1030})
create (_90:`Time` {`time`:1115})
create (_91:`Time` {`time`:1300})
create (_92:`Time` {`time`:1345})
create (_93:`Time` {`time`:1440})
create (_94:`Time` {`time`:1525})
create (_95:`Time` {`time`:1620})
create (_96:`Time` {`time`:1705})
create (_97:`Time` {`time`:1750})
create (_98:`Time` {`time`:1050})
create (_99:`Time` {`time`:1135})
create (_100:`Time` {`time`:1220})
create (_101:`Time` {`time`:1320})
create (_102:`Time` {`time`:1340})
create (_103:`Time` {`time`:1400})
create (_104:`Time` {`time`:1420})
create (_105:`Time` {`time`:1505})
create (_106:`Time` {`time`:1545})
create (_107:`Time` {`time`:1600})
create (_108:`Time` {`time`:1645})
create (_109:`Time` {`time`:1710})
create (_110:`Time` {`time`:1730})
create (_111:`Time` {`time`:2000})
create (_112:`Time` {`time`:1110})
create (_113:`Time` {`time`:1155})
create (_114:`Time` {`time`:1520})
create (_115:`Time` {`time`:1700})
create (_116:`Time` {`time`:1240})
create (_117:`Time` {`time`:1405})
create (_118:`Time` {`time`:1500})
create (_119:`Time` {`time`:1640})
create (_120:`Time` {`time`:1725})
create (_121:`Time` {`time`:1745})
create (_122:`Session` {`topic`:"Welcome to Graphconnect"})
create (_123:`Session` {`topic`:"Keynote presentation"})
create (_124:`Session` {`topic`:"Coffee break"})
create (_125:`Session` {`topic`:"Coffee break"})
create (_126:`Session` {`topic`:"Coffee break"})
create (_127:`Session` {`topic`:"Coffee break"})
create (_128:`Session` {`topic`:"Graph Reception"})
create (_129:`Session` {`topic`:"Building a Global Issues Graph for World Leaders"})
create (_130:`Session` {`topic`:"Graphs are Feeding the World "})
create (_131:`Session` {`topic`:"Secrecy for Sale: Unraveling the shady world of offshore finance"})
create (_132:`Session` {`topic`:"Gaining Insight with Graph Visualization and Analysis"})
create (_133:`Session` {`topic`:"Tracing the world’s food from source to table"})
create (_134:`Session` {`topic`:"Managing Microservices with Neo4j"})
create (_135:`Session` {`topic`:"MetaData Graph and Content Findability at Cisco"})
create (_136:`Session` {`topic`:"7 Ways Your Data Is Telling You It’s a Graph"})
create (_137:`Session` {`topic`:"Keynote presentation"})
create (_138:`Session` {`topic`:"Containerized Neo4j: Automating Deployments with Docker"})
create (_139:`Session` {`topic`:"Integrating Diverse Healthcare Data using MongoDB and Neo4j"})
create (_140:`Session` {`topic`:"Big Data Architecture for Cyber Attack Graphs"})
create (_141:`Session` {`topic`:"Access Managment: Injecting Identity into the Graph"})
create (_142:`Session` {`topic`:"Building graph-based recommendation engines for online businesses"})
create (_143:`Session` {`topic`:"A Journey from Good to Graph: How We Found the Right Database"})
create (_144:`Session` {`topic`:"Using Neo4j To Take Us To The Stars"})
create (_145:`Session` {`topic`:"Polyglot Persistence for Microservices using Spring Cloud and Neo4j"})
create (_146:`Session` {`topic`:"Importing Data - Quickly and Easily"})
create (_147:`Session` {`topic`:"Query your World; Focus on Relationships"})
create (_148:`Session` {`topic`:"Tuning your Cypher"})
create (_149:`Session` {`topic`:"Moving Graphs to Production at Scale"})
create (_150:`Session` {`topic`:"Graph Data Modelling in the Real World"})
create (_151:`Session` {`topic`:"Neo4j Worst Practices"})
create (_152:`Session` {`topic`:"Mission-Critical DevOps at FiftyThree"})
create (_153:`Session` {`topic`:"Graph Compute: Built-in algorithms"})
create (_154:`Session` {`topic`:"Project Planning in Trouble? Graph Theory: to the Rescue!"})
create (_155:`Session` {`topic`:"Neo4j on .NET"})
create (_156:`Session` {`topic`:"Meteor.js powered by Neo4j"})
create (_157:`Session` {`topic`:"Neo4j Powered by IBM POWER8"})
create (_158:`Session` {`topic`:"Mapping connections: Visualization of Geospatial Graphs "})
create (_159:`Session` {`topic`:"Graph Your (Twitter) Network in Neo4j"})
create (_160:`Session` {`topic`:"Cycli: Command-line Interface for Cypher"})
create (_161:`Session` {`topic`:"Spring Data Neo4j 4.0"})
create (_162:`Session` {`topic`:"Amazon Review Sentiment Analysis with Neo4j"})
create (_163:`Session` {`topic`:"Building your Graph Visualization Application "})
create (_164:`Session` {`topic`:"Mining Github Activity in Neo4j"})
create (_165:`Session` {`topic`:"What's New in Stuctr 2.0"})
create (_166:`Session` {`topic`:"The Power of Tiny Data: Using Neo4j in the Digital Humanities"})
create (_167:`Session` {`topic`:"Docker-powered Neo4j"})
create (_168:`Session` {`topic`:"Exploring the Global Terrorism Database, POLE system example"})
create (_169:`Session` {`topic`:"Connector for Tableau"})
create (_170:`Session` {`topic`:"Mongo Connector - Sync MongoDB with Neo4j"})
create (_171:`Session` {`topic`:"New Remoting Protocol and Drivers"})
create (_172:`Session` {`topic`:"Fireside Chat with Neo4j product team"})
create (_173:`Meta_Node` {`name`:"Room"})
create (_174:`Meta_Node` {`name`:"Day"})
create (_175:`Meta_Node` {`name`:"Speaker"})
create (_176:`Meta_Node` {`name`:"Time"})
create (_177:`Meta_Node` {`name`:"Session"})
create (_178:`Meta_Node` {`name`:"Venue"})
create (_179:`Meta_Node` {`name`:"Conference"})
create (_180:`Meta_Node` {`name`:"Company"})
create (_181:`Meta_Node` {`name`:"Track"})
create _2-[:`LOCATED_IN`]->_1
create _3-[:`LOCATED_IN`]->_1
create _4-[:`LOCATED_IN`]->_1
create _5-[:`LOCATED_IN`]->_1
create _6-[:`LOCATED_IN`]->_1
create _7-[:`LOCATED_IN`]->_1
create _8-[:`PART_OF`]->_0
create _15-[:`PRESENTS`]->_125
create _15-[:`PRESENTS`]->_126
create _15-[:`PRESENTS`]->_127
create _15-[:`PRESENTS`]->_128
create _15-[:`PRESENTS`]->_122
create _15-[:`PRESENTS`]->_124
create _15-[:`WORKS_FOR`]->_62
create _16-[:`PRESENTS`]->_123
create _16-[:`WORKS_FOR`]->_63
create _17-[:`PRESENTS`]->_129
create _17-[:`WORKS_FOR`]->_64
create _18-[:`PRESENTS`]->_130
create _18-[:`WORKS_FOR`]->_65
create _19-[:`PRESENTS`]->_131
create _19-[:`WORKS_FOR`]->_66
create _20-[:`PRESENTS`]->_132
create _20-[:`WORKS_FOR`]->_67
create _21-[:`PRESENTS`]->_133
create _21-[:`WORKS_FOR`]->_68
create _22-[:`PRESENTS`]->_133
create _22-[:`WORKS_FOR`]->_68
create _23-[:`PRESENTS`]->_134
create _23-[:`WORKS_FOR`]->_69
create _24-[:`PRESENTS`]->_135
create _24-[:`WORKS_FOR`]->_70
create _25-[:`PRESENTS`]->_136
create _25-[:`WORKS_FOR`]->_71
create _26-[:`PRESENTS`]->_137
create _26-[:`WORKS_FOR`]->_63
create _27-[:`PRESENTS`]->_138
create _27-[:`WORKS_FOR`]->_72
create _28-[:`PRESENTS`]->_138
create _28-[:`WORKS_FOR`]->_73
create _29-[:`PRESENTS`]->_139
create _29-[:`WORKS_FOR`]->_74
create _30-[:`PRESENTS`]->_140
create _30-[:`WORKS_FOR`]->_75
create _31-[:`PRESENTS`]->_141
create _32-[:`PRESENTS`]->_141
create _33-[:`PRESENTS`]->_142
create _34-[:`PRESENTS`]->_143
create _34-[:`WORKS_FOR`]->_76
create _35-[:`PRESENTS`]->_144
create _35-[:`WORKS_FOR`]->_77
create _36-[:`PRESENTS`]->_145
create _37-[:`PRESENTS`]->_145
create _38-[:`PRESENTS`]->_146
create _38-[:`PRESENTS`]->_148
create _38-[:`WORKS_FOR`]->_63
create _39-[:`PRESENTS`]->_167
create _39-[:`PRESENTS`]->_146
create _39-[:`PRESENTS`]->_161
create _39-[:`WORKS_FOR`]->_63
create _40-[:`PRESENTS`]->_147
create _40-[:`PRESENTS`]->_160
create _40-[:`WORKS_FOR`]->_63
create _41-[:`PRESENTS`]->_148
create _41-[:`WORKS_FOR`]->_63
create _42-[:`PRESENTS`]->_149
create _42-[:`WORKS_FOR`]->_63
create _43-[:`PRESENTS`]->_150
create _44-[:`PRESENTS`]->_151
create _44-[:`WORKS_FOR`]->_63
create _45-[:`PRESENTS`]->_152
create _45-[:`WORKS_FOR`]->_78
create _46-[:`PRESENTS`]->_159
create _46-[:`PRESENTS`]->_153
create _46-[:`WORKS_FOR`]->_63
create _47-[:`PRESENTS`]->_154
create _48-[:`PRESENTS`]->_155
create _48-[:`WORKS_FOR`]->_79
create _49-[:`PRESENTS`]->_156
create _50-[:`PRESENTS`]->_157
create _51-[:`PRESENTS`]->_158
create _52-[:`PRESENTS`]->_162
create _52-[:`WORKS_FOR`]->_63
create _53-[:`PRESENTS`]->_163
create _54-[:`PRESENTS`]->_164
create _54-[:`WORKS_FOR`]->_80
create _55-[:`PRESENTS`]->_165
create _55-[:`WORKS_FOR`]->_81
create _56-[:`PRESENTS`]->_166
create _57-[:`PRESENTS`]->_168
create _57-[:`WORKS_FOR`]->_63
create _58-[:`PRESENTS`]->_169
create _58-[:`WORKS_FOR`]->_63
create _59-[:`PRESENTS`]->_170
create _60-[:`PRESENTS`]->_171
create _60-[:`WORKS_FOR`]->_63
create _61-[:`PRESENTS`]->_172
create _61-[:`WORKS_FOR`]->_63
create _82-[:`FOLLOWED_BY`]->_83
create _82-[:`PART_OF`]->_8
create _83-[:`FOLLOWED_BY`]->_84
create _83-[:`PART_OF`]->_8
create _84-[:`FOLLOWED_BY`]->_89
create _84-[:`PART_OF`]->_8
create _85-[:`FOLLOWED_BY`]->_100
create _85-[:`PART_OF`]->_8
create _86-[:`FOLLOWED_BY`]->_93
create _86-[:`PART_OF`]->_8
create _87-[:`FOLLOWED_BY`]->_95
create _87-[:`PART_OF`]->_8
create _88-[:`FOLLOWED_BY`]->_111
create _88-[:`PART_OF`]->_8
create _89-[:`FOLLOWED_BY`]->_98
create _89-[:`PART_OF`]->_8
create _90-[:`FOLLOWED_BY`]->_99
create _90-[:`PART_OF`]->_8
create _91-[:`FOLLOWED_BY`]->_101
create _91-[:`PART_OF`]->_8
create _92-[:`FOLLOWED_BY`]->_103
create _92-[:`PART_OF`]->_8
create _93-[:`FOLLOWED_BY`]->_118
create _93-[:`PART_OF`]->_8
create _94-[:`FOLLOWED_BY`]->_106
create _94-[:`PART_OF`]->_8
create _95-[:`FOLLOWED_BY`]->_119
create _95-[:`PART_OF`]->_8
create _96-[:`FOLLOWED_BY`]->_109
create _96-[:`PART_OF`]->_8
create _97-[:`FOLLOWED_BY`]->_88
create _97-[:`PART_OF`]->_8
create _98-[:`FOLLOWED_BY`]->_112
create _98-[:`PART_OF`]->_8
create _99-[:`FOLLOWED_BY`]->_113
create _99-[:`PART_OF`]->_8
create _100-[:`FOLLOWED_BY`]->_116
create _100-[:`PART_OF`]->_8
create _101-[:`FOLLOWED_BY`]->_102
create _101-[:`PART_OF`]->_8
create _102-[:`FOLLOWED_BY`]->_92
create _102-[:`PART_OF`]->_8
create _103-[:`FOLLOWED_BY`]->_117
create _103-[:`PART_OF`]->_8
create _104-[:`FOLLOWED_BY`]->_86
create _104-[:`PART_OF`]->_8
create _105-[:`FOLLOWED_BY`]->_114
create _105-[:`PART_OF`]->_8
create _106-[:`FOLLOWED_BY`]->_107
create _106-[:`PART_OF`]->_8
create _107-[:`FOLLOWED_BY`]->_87
create _107-[:`PART_OF`]->_8
create _108-[:`FOLLOWED_BY`]->_115
create _108-[:`PART_OF`]->_8
create _109-[:`FOLLOWED_BY`]->_120
create _109-[:`PART_OF`]->_8
create _110-[:`FOLLOWED_BY`]->_121
create _110-[:`PART_OF`]->_8
create _111-[:`PART_OF`]->_8
create _112-[:`FOLLOWED_BY`]->_90
create _112-[:`PART_OF`]->_8
create _113-[:`FOLLOWED_BY`]->_85
create _113-[:`PART_OF`]->_8
create _114-[:`FOLLOWED_BY`]->_94
create _114-[:`PART_OF`]->_8
create _115-[:`FOLLOWED_BY`]->_96
create _115-[:`PART_OF`]->_8
create _116-[:`FOLLOWED_BY`]->_91
create _116-[:`PART_OF`]->_8
create _117-[:`FOLLOWED_BY`]->_104
create _117-[:`PART_OF`]->_8
create _118-[:`FOLLOWED_BY`]->_105
create _118-[:`PART_OF`]->_8
create _119-[:`FOLLOWED_BY`]->_108
create _119-[:`PART_OF`]->_8
create _120-[:`FOLLOWED_BY`]->_110
create _120-[:`PART_OF`]->_8
create _121-[:`FOLLOWED_BY`]->_97
create _121-[:`PART_OF`]->_8
create _122-[:`PART_OF_TRACK`]->_9
create _122-[:`HELD_IN_ROOM`]->_2
create _122-[:`STARTS_AT`]->_82
create _122-[:`ENDS_AT`]->_83
create _123-[:`PART_OF_TRACK`]->_10
create _123-[:`HELD_IN_ROOM`]->_3
create _123-[:`STARTS_AT`]->_83
create _123-[:`ENDS_AT`]->_84
create _124-[:`PART_OF_TRACK`]->_9
create _124-[:`HELD_IN_ROOM`]->_2
create _124-[:`STARTS_AT`]->_84
create _124-[:`ENDS_AT`]->_89
create _125-[:`PART_OF_TRACK`]->_9
create _125-[:`HELD_IN_ROOM`]->_2
create _125-[:`STARTS_AT`]->_85
create _125-[:`ENDS_AT`]->_91
create _126-[:`PART_OF_TRACK`]->_9
create _126-[:`HELD_IN_ROOM`]->_2
create _126-[:`STARTS_AT`]->_86
create _126-[:`ENDS_AT`]->_93
create _127-[:`PART_OF_TRACK`]->_9
create _127-[:`HELD_IN_ROOM`]->_2
create _127-[:`STARTS_AT`]->_87
create _127-[:`ENDS_AT`]->_95
create _128-[:`PART_OF_TRACK`]->_9
create _128-[:`HELD_IN_ROOM`]->_2
create _128-[:`STARTS_AT`]->_88
create _128-[:`ENDS_AT`]->_111
create _129-[:`PART_OF_TRACK`]->_11
create _129-[:`HELD_IN_ROOM`]->_4
create _129-[:`STARTS_AT`]->_89
create _129-[:`ENDS_AT`]->_112
create _130-[:`PART_OF_TRACK`]->_11
create _130-[:`HELD_IN_ROOM`]->_4
create _130-[:`STARTS_AT`]->_90
create _130-[:`ENDS_AT`]->_113
create _131-[:`PART_OF_TRACK`]->_11
create _131-[:`HELD_IN_ROOM`]->_4
create _131-[:`STARTS_AT`]->_91
create _131-[:`ENDS_AT`]->_102
create _132-[:`PART_OF_TRACK`]->_11
create _132-[:`HELD_IN_ROOM`]->_4
create _132-[:`STARTS_AT`]->_92
create _132-[:`ENDS_AT`]->_86
create _133-[:`PART_OF_TRACK`]->_11
create _133-[:`HELD_IN_ROOM`]->_4
create _133-[:`STARTS_AT`]->_93
create _133-[:`ENDS_AT`]->_114
create _134-[:`PART_OF_TRACK`]->_11
create _134-[:`HELD_IN_ROOM`]->_4
create _134-[:`ENDS_AT`]->_87
create _134-[:`STARTS_AT`]->_94
create _135-[:`PART_OF_TRACK`]->_11
create _135-[:`HELD_IN_ROOM`]->_4
create _135-[:`ENDS_AT`]->_115
create _135-[:`STARTS_AT`]->_95
create _136-[:`PART_OF_TRACK`]->_11
create _136-[:`HELD_IN_ROOM`]->_4
create _136-[:`ENDS_AT`]->_106
create _136-[:`STARTS_AT`]->_96
create _137-[:`PART_OF_TRACK`]->_10
create _137-[:`HELD_IN_ROOM`]->_3
create _137-[:`ENDS_AT`]->_88
create _137-[:`STARTS_AT`]->_97
create _138-[:`PART_OF_TRACK`]->_12
create _138-[:`HELD_IN_ROOM`]->_5
create _138-[:`ENDS_AT`]->_112
create _138-[:`STARTS_AT`]->_89
create _139-[:`PART_OF_TRACK`]->_12
create _139-[:`HELD_IN_ROOM`]->_5
create _139-[:`ENDS_AT`]->_113
create _139-[:`STARTS_AT`]->_90
create _140-[:`PART_OF_TRACK`]->_12
create _140-[:`HELD_IN_ROOM`]->_5
create _140-[:`ENDS_AT`]->_102
create _140-[:`STARTS_AT`]->_91
create _141-[:`PART_OF_TRACK`]->_12
create _141-[:`HELD_IN_ROOM`]->_5
create _141-[:`ENDS_AT`]->_86
create _141-[:`STARTS_AT`]->_92
create _142-[:`PART_OF_TRACK`]->_12
create _142-[:`HELD_IN_ROOM`]->_5
create _142-[:`STARTS_AT`]->_93
create _142-[:`ENDS_AT`]->_114
create _143-[:`PART_OF_TRACK`]->_12
create _143-[:`HELD_IN_ROOM`]->_5
create _143-[:`STARTS_AT`]->_94
create _143-[:`ENDS_AT`]->_87
create _144-[:`PART_OF_TRACK`]->_12
create _144-[:`HELD_IN_ROOM`]->_5
create _144-[:`STARTS_AT`]->_95
create _144-[:`ENDS_AT`]->_115
create _145-[:`PART_OF_TRACK`]->_12
create _145-[:`HELD_IN_ROOM`]->_5
create _145-[:`STARTS_AT`]->_96
create _145-[:`ENDS_AT`]->_106
create _146-[:`PART_OF_TRACK`]->_13
create _146-[:`HELD_IN_ROOM`]->_6
create _146-[:`STARTS_AT`]->_89
create _146-[:`ENDS_AT`]->_112
create _147-[:`PART_OF_TRACK`]->_13
create _147-[:`HELD_IN_ROOM`]->_6
create _147-[:`STARTS_AT`]->_90
create _147-[:`ENDS_AT`]->_113
create _148-[:`PART_OF_TRACK`]->_13
create _148-[:`HELD_IN_ROOM`]->_6
create _148-[:`STARTS_AT`]->_91
create _148-[:`ENDS_AT`]->_102
create _149-[:`PART_OF_TRACK`]->_13
create _149-[:`HELD_IN_ROOM`]->_6
create _149-[:`STARTS_AT`]->_92
create _149-[:`ENDS_AT`]->_86
create _150-[:`PART_OF_TRACK`]->_13
create _150-[:`HELD_IN_ROOM`]->_6
create _150-[:`ENDS_AT`]->_114
create _150-[:`STARTS_AT`]->_93
create _151-[:`PART_OF_TRACK`]->_13
create _151-[:`HELD_IN_ROOM`]->_6
create _151-[:`ENDS_AT`]->_87
create _151-[:`STARTS_AT`]->_94
create _152-[:`PART_OF_TRACK`]->_13
create _152-[:`HELD_IN_ROOM`]->_6
create _152-[:`ENDS_AT`]->_115
create _152-[:`STARTS_AT`]->_95
create _153-[:`PART_OF_TRACK`]->_13
create _153-[:`HELD_IN_ROOM`]->_6
create _153-[:`ENDS_AT`]->_106
create _153-[:`STARTS_AT`]->_96
create _154-[:`PART_OF_TRACK`]->_14
create _154-[:`HELD_IN_ROOM`]->_7
create _154-[:`ENDS_AT`]->_98
create _154-[:`STARTS_AT`]->_89
create _155-[:`PART_OF_TRACK`]->_14
create _155-[:`HELD_IN_ROOM`]->_7
create _155-[:`ENDS_AT`]->_112
create _155-[:`STARTS_AT`]->_98
create _156-[:`PART_OF_TRACK`]->_14
create _156-[:`HELD_IN_ROOM`]->_7
create _156-[:`ENDS_AT`]->_99
create _156-[:`STARTS_AT`]->_90
create _157-[:`PART_OF_TRACK`]->_14
create _157-[:`HELD_IN_ROOM`]->_7
create _157-[:`ENDS_AT`]->_113
create _157-[:`STARTS_AT`]->_99
create _158-[:`PART_OF_TRACK`]->_14
create _158-[:`HELD_IN_ROOM`]->_7
create _158-[:`STARTS_AT`]->_100
create _158-[:`ENDS_AT`]->_116
create _159-[:`PART_OF_TRACK`]->_14
create _159-[:`HELD_IN_ROOM`]->_7
create _159-[:`STARTS_AT`]->_91
create _159-[:`ENDS_AT`]->_101
create _160-[:`PART_OF_TRACK`]->_14
create _160-[:`HELD_IN_ROOM`]->_7
create _160-[:`STARTS_AT`]->_101
create _160-[:`ENDS_AT`]->_102
create _161-[:`PART_OF_TRACK`]->_14
create _161-[:`HELD_IN_ROOM`]->_7
create _161-[:`STARTS_AT`]->_102
create _161-[:`ENDS_AT`]->_117
create _162-[:`PART_OF_TRACK`]->_14
create _162-[:`HELD_IN_ROOM`]->_7
create _162-[:`STARTS_AT`]->_103
create _162-[:`ENDS_AT`]->_86
create _163-[:`PART_OF_TRACK`]->_14
create _163-[:`HELD_IN_ROOM`]->_7
create _163-[:`STARTS_AT`]->_104
create _163-[:`ENDS_AT`]->_93
create _164-[:`PART_OF_TRACK`]->_14
create _164-[:`HELD_IN_ROOM`]->_7
create _164-[:`STARTS_AT`]->_93
create _164-[:`ENDS_AT`]->_118
create _165-[:`PART_OF_TRACK`]->_14
create _165-[:`HELD_IN_ROOM`]->_7
create _165-[:`STARTS_AT`]->_105
create _165-[:`ENDS_AT`]->_114
create _166-[:`PART_OF_TRACK`]->_14
create _166-[:`HELD_IN_ROOM`]->_7
create _166-[:`ENDS_AT`]->_106
create _166-[:`STARTS_AT`]->_94
create _167-[:`PART_OF_TRACK`]->_14
create _167-[:`HELD_IN_ROOM`]->_7
create _167-[:`ENDS_AT`]->_87
create _167-[:`STARTS_AT`]->_106
create _168-[:`PART_OF_TRACK`]->_14
create _168-[:`HELD_IN_ROOM`]->_7
create _168-[:`ENDS_AT`]->_95
create _168-[:`STARTS_AT`]->_107
create _169-[:`PART_OF_TRACK`]->_14
create _169-[:`HELD_IN_ROOM`]->_7
create _169-[:`ENDS_AT`]->_119
create _169-[:`STARTS_AT`]->_95
create _170-[:`PART_OF_TRACK`]->_14
create _170-[:`HELD_IN_ROOM`]->_7
create _170-[:`ENDS_AT`]->_115
create _170-[:`STARTS_AT`]->_108
create _171-[:`PART_OF_TRACK`]->_14
create _171-[:`HELD_IN_ROOM`]->_7
create _171-[:`ENDS_AT`]->_120
create _171-[:`STARTS_AT`]->_109
create _172-[:`PART_OF_TRACK`]->_14
create _172-[:`HELD_IN_ROOM`]->_7
create _172-[:`ENDS_AT`]->_121
create _172-[:`STARTS_AT`]->_110
create _173-[:`META_RELATIONSHIP` {`name`:"LOCATED_IN"}]->_178
create _174-[:`META_RELATIONSHIP` {`name`:"PART_OF"}]->_179
create _175-[:`META_RELATIONSHIP` {`name`:"WORKS_FOR"}]->_180
create _175-[:`META_RELATIONSHIP` {`name`:"PRESENTS"}]->_177
create _176-[:`META_RELATIONSHIP` {`name`:"FOLLOWED_BY"}]->_176
create _176-[:`META_RELATIONSHIP` {`name`:"PART_OF"}]->_174
create _177-[:`META_RELATIONSHIP` {`name`:"HELD_IN_ROOM"}]->_173
create _177-[:`META_RELATIONSHIP` {`name`:"STARTS_AT"}]->_176
create _177-[:`META_RELATIONSHIP` {`name`:"ENDS_AT"}]->_176
create _177-[:`META_RELATIONSHIP` {`name`:"PART_OF_TRACK"}]->_181

I can actually look at the Model inside the graph now - as I have added a Meta-graph in the gist too:

//the meta-graph
MATCH (m:Meta_Node)-[r:META_RELATIONSHIP]-()
return m,r

And then we can see at the entire schedule-graph that we have added. Here is is:

Granted, that looks a bit like a hairball. But let’s see what the schedule for the morning of the day looks like:

//the schedule on the Day
MATCH (n:Day {date:20151021})--(timeslots:Time)--(s:Session)--(tr:Track)
where timeslots.time < 1300
return n,timeslots,s,tr

Let’s look at talks with 2 speakers

//talks with 2 speakers
match (s1:Speaker)--(s:Session)--(s2:Speaker) , (s)--(tr:Track) where id(s1)<id(s2) return s.topic, s1.name, s2.name, tr.name

Or let’s look at it as a network:

//talks with 2 speakers
match (s1:Speaker)--(s:Session)--(s2:Speaker), (s)--(tr:Track) where id(s1)<id(s2) return s,s1,s2,tr

Just a start…​

There are so many other things that we could look at. Use the console below to explore if you are interested in more.

I hope this gist was interesting for you, and that we will see each other at the conference.

This gist was created by Rik Van Bruggen

//load the GraphConnect Europe 2015 schedule
create (c:Conference {name:"GraphConnect San Francisco 2015"});
//first load the NEVER-null items
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
merge (v:Venue {name: csv.Venue})
merge (r:Room {name: csv.Room})
merge (r)-[:LOCATED_IN]->(v)
merge (d:Day {date: toInt(csv.Date)})
merge (tr:Track {name: csv.Track});
//connect the days to the conference
match (d:Day), (c:Conference {name:"GraphConnect San Francisco 2015"})
merge (d)-[:PART_OF]->(c);
//load the GraphConnect Europe 2015 speakers (they can be null)
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
merge (sp:Speaker {name: csv.Speaker});
//add the titles to the speakers (they can be null)
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
with csv
where NOT csv.Title IS NULL
match (sp:Speaker {name: csv.Speaker})
set sp.title = csv.Title;
//load the GraphConnect San Francisco 2015 companies (they can be null)
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
with csv
where NOT csv.Company IS NULL
merge (co:Company {name: csv.Company});
//load the GraphConnect San Francisco 2015 links between speakers and companies
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
match (co:Company {name: csv.Company}), (sp:Speaker {name: csv.Speaker})
merge (sp)-[:WORKS_FOR]->(co);
//create the timeline for the day
//connect the timeslots to the day
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
with csv
match (d:Day {date: 20151021})
merge (t1:Time {time: toInt(csv.Starttime)})-[:PART_OF]->(d)
merge (t2:Time {time: toInt(csv.Endtime)})-[:PART_OF]->(d);
//iterate through the sorted timeslots, and connect them to a timeline
//see http://www.markhneedham.com/blog/2014/04/19/neo4j-cypher-creating-relationships-between-a-collection-of-nodes-invalid-input/ for inspiration
match (t:Time)--(d:Day {date: 20151021})
with t
order by t.time ASC
with collect(t) as times
foreach (i in range(0,length(times)-2) |
foreach (t1 in [times[i]] |
foreach (t2 in [times[i+1]] |
merge (t1)-[:FOLLOWED_BY]->(t2))));
//add the conference sessions
load csv with headers from "https://docs.google.com/spreadsheets/export?format=csv&id=1U5Knv-k5_uMOQ0X4US5kitKgX9mVoQOlA2QckVU0Gzc&gid=0" as csv
match (r:Room {name: csv.Room}),
(t1:Time {time: toInt(csv.Starttime)})--(d:Day {date: toInt(csv.Date)})--(t2:Time {time: toInt(csv.Endtime)}), (tr:Track {name: csv.Track}), (sp:Speaker {name: csv.Speaker})
merge (t1)<-[:STARTS_AT]-(s:Session {topic: csv.Topic})-[:ENDS_AT]->(t2)
merge (s)-[:HELD_IN_ROOM]->(r)
merge (sp)-[:PRESENTS]->(s)
merge (s)-[:PART_OF_TRACK]->(tr);
//generate the GraphConnect Schedule Graph
MATCH (a)-[r]->(b)
WITH labels(a) AS a_labels,type(r) AS rel_type,labels(b) AS b_labels
UNWIND a_labels as l
UNWIND b_labels as l2
MERGE (a:Meta_Node {name:l})
MERGE (b:Meta_Node {name:l2})
MERGE (a)-[:META_RELATIONSHIP {name:rel_type}]->(b)
RETURN distinct l as first_node, rel_type as connected_by, l2 as second_node;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment