SlideShare a Scribd company logo
1 of 60
Download to read offline
Exploring London NoSQL meetups
using R
Mark Needham
@markhneedham
Scraper at the ready...
Not needed :(
Lots of bits of data
● Events
● Members
● Groups
● RSVPs
● Venues
● Topics
The data model
Interesting questions to ask...
Interesting questions to ask...
● What day of the week do people go to meetups?
● Where abouts in London are NoSQL meetups held?
● Do people sign up for multiple meetups on the same
day?
● Are there common members between groups?
● What topics are people most interested in?
● In which order do people join the NoSQL groups?
● Who are the most connected people on the NoSQL
scene?
The tool set
RNeo4j
Results as a data frame
Query
dplyr
ggplot2
igraph ggmap
cluster
geosphere
When do people go to meetups?
When do people go to meetups?
(g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]-
({response: 'yes'})<-[:RSVPD]-()
When do people go to meetups?
MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]-
({response: 'yes'})<-[:RSVPD]-()
WHERE (event.time + event.utc_offset) < timestamp()
RETURN g.name,
event.time + event.utc_offset AS eventTime,
event.announced_at AS announcedAt,
event.name,
COUNT(*) AS rsvps
R Neo4j
install.packages("devtools")
devtools::install_github("nicolewhite/Rneo4j")
library(RNeo4j)
graph = startGraph("http://localhost:7474/db/data/")
query = "MATCH … RETURN …"
cypher(graph, query)
Grouping events by month
library(dplyr)
events %>%
group_by(month) %>%
summarise(events = n(),
count = sum(rsvps),
max = max(rsvps)) %>%
mutate(ave = count / events) %>%
arrange(desc(ave))
Grouping events by month
## month events count ave
## 1 November 55 3018 54.87273
## 2 May 52 2676 51.46154
## 3 April 58 2964 51.10345
## 4 June 47 2384 50.72340
## 5 October 71 3566 50.22535
## 6 September 59 2860 48.47458
## 7 February 43 2047 47.60465
## 8 January 34 1592 46.82353
## 9 December 24 1056 44.00000
## 10 March 39 1667 42.74359
## 11 July 48 1866 38.87500
## 12 August 34 1023 30.08824
Grouping events by day
events %>%
group_by(day) %>%
summarise(events = n(),
count = sum(rsvps),
max = max(rsvps)) %>%
mutate(ave = count / events) %>%
arrange(day)
Grouping events by day
## day events count ave
## 1 Monday 63 4034 64.03175
## 2 Tuesday 151 6696 44.34437
## 3 Wednesday 225 9481 42.13778
## 4 Thursday 104 5394 51.86538
## 5 Friday 11 378 34.36364
## 6 Saturday 10 736 73.60000
Some simple bar charts
library(ggplot2)
g1 = ggplot(aes(x = day, y = ave), data = byDay) +
geom_bar(stat="identity", fill="dark blue") +
ggtitle("Average attendees by day")
g2 = ggplot(aes(x = day, y = count), data = byDay) +
geom_bar(stat="identity", fill="dark blue") +
ggtitle("Total attendees by day")
grid.arrange(g1,g2, ncol = 1)
London hits
the pub
Where do people go to meetups?
(g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]-
({response: 'yes'})<-[:RSVPD]-(),
(event)-[:HELD_AT]->(venue)
Where do people go to meetups?
MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]-
({response: 'yes'})<-[:RSVPD]-(), (event)-[:HELD_AT]->(venue)
WHERE (event.time + event.utc_offset) < timestamp()
RETURN g.name,
event.time + event.utc_offset AS eventTime,
event.announced_at AS announcedAt,
event.name,
venue.name AS venue,
venue.lat AS lat,
venue.lon AS lon,
COUNT(*) AS rsvps
Where do people go to meetups?
MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]-
({response: 'yes'})<-[:RSVPD]-(), (event)-[:HELD_AT]->(venue)
WHERE (event.time + event.utc_offset) < timestamp()
RETURN g.name,
event.time + event.utc_offset AS eventTime,
event.announced_at AS announcedAt,
event.name,
venue.name AS venue,
venue.lat AS lat,
venue.lon AS lon,
COUNT(*) AS rsvps
Where do people go to meetups?
byVenue = events %>%
count(lat, lon, venue) %>%
ungroup() %>%
arrange(desc(n)) %>%
rename(count = n)
Where do people go to meetups?
## lat lon venue count
## 1 51.50256 -0.019379 Skyline Bar at CCT Venues Plus 1
## 2 51.53373 -0.122340 The Guardian 1
## 3 51.51289 -0.067163 Erlang Solutions 3
## 4 51.49146 -0.219424 Novotel - W6 8DR 1
## 5 51.49311 -0.146531 Google HQ 1
## 6 51.52655 -0.084219 Look Mum No Hands! 22
## 7 51.51976 -0.097270 Vibrant Media, 3rd Floor 1
## 8 51.52303 -0.085178 Mind Candy HQ 2
## 9 51.51786 -0.109260 ThoughtWorks UK Office 2
## 10 51.51575 -0.097978 BT Centre 1
Where do people go to meetups?
library(ggmap)
map = get_map(location = 'London', zoom = 12)
ggmap(map) +
geom_point(aes(x = lon, y = lat, size = count),
data = byVenue,
col = "red",
alpha = 0.8)
library(geosphere)
library(cluster)
clusteramounts = 40
distance.matrix = byVenue %>% select(lon, lat) %>% distm
clustersx <- as.hclust(agnes(distance.matrix, diss = T))
byVenue$group <- cutree(clustersx, k=clusteramounts)
byVenueClustered = byVenue %>%
group_by(group) %>%
summarise(meanLat = mean(lat),
meanLon = mean(lon),
total = sum(count),
venues = paste(venue, collapse = ","))
Spatial clustering
## group meanLat meanLon total
## 1 3 51.52349 -0.08506461 123
## 2 1 51.52443 -0.09919280 89
## 3 2 51.50547 -0.10325925 62
## 4 4 51.50794 -0.12714600 55
## 5 8 51.51671 -0.10028908 19
## 6 6 51.53655 -0.13798514 18
## 7 7 51.52159 -0.10934720 18
## 8 5 51.51155 -0.07004417 13
## 9 12 51.51459 -0.12314650 13
## 10 14 51.52129 -0.07588867 10
Spatial clustering
ggmap(map) +
geom_point(aes(x = meanLon, y = meanLat, size = total),
data = byVenueClustered,
col = "red",
alpha = 0.8)
Spatial clustering
byVenue %>%
filter(group == byVenueClustered$group[1])
What’s going on in Shoreditch?
Meetup Group Member Overlap
● Why would we want to know this?
○ Perhaps for joint meetups
○ Topics for future meetups
Extracting the data
MATCH (group1:Group), (group2:Group)
WHERE group1 <> group2
OPTIONAL MATCH p =
(group1)<-[:MEMBER_OF]-()-[:MEMBER_OF]->(group2)
WITH group1, group2, COLLECT(p) AS paths
RETURN group1.name, group2.name,
LENGTH(paths) as commonMembers
ORDER BY group1.name, group2.name
MATCH (group1:Group), (group2:Group)
WHERE group1 <> group2
OPTIONAL MATCH (group1)<-[:MEMBER_OF]-(member)
WITH group1, group2, COLLECT(member) AS group1Members
WITH group1, group2, group1Members,
LENGTH(group1Members) AS numberOfGroup1Members
UNWIND group1Members AS member
OPTIONAL MATCH path = (member)-[:MEMBER_OF]->(group2)
WITH group1, group2, COLLECT(path) AS paths, numberOfGroup1Members
WITH group1, group2, LENGTH(paths) as commonMembers, numberOfGroup1Members
RETURN group1.name, group2.name,
toInt(round(100.0 * commonMembers / numberOfGroup1Members)) AS percentage
ORDER BY group1.name, group1.name
Finding overlap as a percentage
How many groups are people part of?
MATCH (p:MeetupProfile)-[:MEMBER_OF]->()
RETURN ID(p), COUNT(*) AS groups
ORDER BY groups DESC
How many groups are people part of?
ggplot(aes(x = groups, y = n),
data = group_count %>% count(groups)) +
geom_bar(stat="identity", fill="dark blue") +
scale_y_sqrt() +
scale_x_continuous(
breaks = round(seq(min(group_count$groups),
max(group_count$groups), by = 1),1)) +
ggtitle("Number of groups people are members of")
Who’s the most connected?
● i.e. the person who had the chance to meet
the most people in the community
● Betweenness Centrality
● Page Rank
Who’s the most connected?
Betweenness Centrality
Calculates the number of shortest paths that go
through a particular node
Betweenness Centrality
library(igraph)
nodes_query = "MATCH (p:MeetupProfile)-[:RSVPD]->({response: 'yes'})-[:TO]->(event)
RETURN DISTINCT ID(p) AS id, p.id AS name, p.name AS fullName"
nodes = cypher(graph, nodes_query)
edges_query = "MATCH (p:MeetupProfile)-[:RSVPD]->({response: 'yes'})-[:TO]->(event),
(event)<-[:TO]-({response:'yes'})<-[:RSVPD]-(other)
RETURN ID(p) AS source, ID(other) AS target, COUNT(*) AS weight"
edges = cypher(graph, edges_query)
g = graph.data.frame(edges, directed = T, nodes)
bwGraph = betweenness(g)
bwDf = data.frame(id = names(bwGraph), score = bwGraph)
Betweenness Centrality
bwDf %>% arrange(desc(score)) %>% head(5)
merge(nodes, bwDf, by.x = "name", by.y = "id") %>%
arrange(desc(score)) %>%
head(5)
Page Rank
PageRank works by counting the number and quality of
links to a page to determine a rough estimate of how
important the website is.
The underlying assumption is that more important websites
are likely to receive more links from other websites.
Page Rank
PageRank works by counting the number and quality of
links to a person to determine a rough estimate of how
important the person is.
The underlying assumption is that more important people
are likely to receive more links from other people.
Page Rank
pr = page.rank(g)$vector
prDf = data.frame(name = names(pr), rank = pr)
data.frame(merge(nodes, prDf, by.x = "name", by.y = "name")) %>%
arrange(desc(rank)) %>%
head(10)
Blending back into the graph
query = "MATCH (p:MeetupProfile {id: {id}}) SET p.betweenness = {score}"
tx = newTransaction(graph)
for(i in 1:nrow(bwDf)) {
if(i %% 1000 == 0) {
commit(tx)
print(paste("Batch", i / 1000, "committed."))
tx = newTransaction(graph)
}
id = bwDf[i, "id"]
score = bwDf[i, "score"]
appendCypher(tx, query, id = id, score = as.double(score))
}
commit(tx)
Blending back into the graph
query = "MATCH (p:MeetupProfile {id: {id}}) SET p.pageRank = {score}"
tx = newTransaction(graph)
for(i in 1:nrow(prDf)) {
if(i %% 1000 == 0) {
commit(tx)
print(paste("Batch", i / 1000, "committed."))
tx = newTransaction(graph)
}
name = prDf[i, "name"]
rank = prDf[i, "rank"]
appendCypher(tx, query, id = name, score = as.double(rank))
}
commit(tx)
Are they in the Neo4j group?
MATCH (p:MeetupProfile)
WITH p
ORDER BY p.pageRank DESC
LIMIT 20
OPTIONAL MATCH member = (p)-[m:MEMBER_OF]->(g:Group)
WHERE group.name = "Neo4j - London User Group"
RETURN p.name, p.id, p.pageRank, NOT m is null AS isMember
ORDER BY p.pageRank DESC
Are they in the Neo4j group?
blended_data = cypher(graph, query)
Have they been to any events?
Have they been to any events?
MATCH (p:MeetupProfile)
WITH p
ORDER BY p.pageRank DESC
LIMIT 20
OPTIONAL MATCH member = (p)-[m:MEMBER_OF]->(g:Group)
WHERE g.name = "Neo4j - London User Group"
WITH p, NOT m is null AS isMember, g
OPTIONAL MATCH event= (p)-[:RSVPD]-({response:'yes'})-[:TO]->()<-[:HOSTED_EVENT]-(g)
WITH p, isMember, COLLECT(event) as events
RETURN p.name, p.id, p.pageRank, isMember, LENGTH(events) AS events
ORDER BY p.pageRank DESC
Have they been to any events?
blended_data = cypher(graph, query)
Take Aways
● ggplot => visualisations with minimal code
● dplyr => easy data manipulation for
people from other languages
● igraph => find the influencers in a network
● graphs => flexible way of modelling data
that allows querying across multiple
dimensions
And one final take away...
http://github.com/mneedham/neo4j-meetup
Get the code

More Related Content

What's hot

Patterns in Terraform 12+13: Data, Transformations and Resources
Patterns in Terraform 12+13: Data, Transformations and ResourcesPatterns in Terraform 12+13: Data, Transformations and Resources
Patterns in Terraform 12+13: Data, Transformations and ResourcesKatie Reese
 
ggplot2 extensions-ggtree.
ggplot2 extensions-ggtree.ggplot2 extensions-ggtree.
ggplot2 extensions-ggtree.Dr. Volkan OBAN
 
Text Mining of Twitter in Data Mining
Text Mining of Twitter in Data MiningText Mining of Twitter in Data Mining
Text Mining of Twitter in Data MiningMeghaj Mallick
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch MeetupLoïc Bertron
 
Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015Filippo Vitale
 
Thoughts on MongoDB Analytics
Thoughts on MongoDB AnalyticsThoughts on MongoDB Analytics
Thoughts on MongoDB Analyticsrogerbodamer
 
GraphTalk Stockholm - Fraud Detection with Graphs
GraphTalk Stockholm - Fraud Detection with GraphsGraphTalk Stockholm - Fraud Detection with Graphs
GraphTalk Stockholm - Fraud Detection with GraphsNeo4j
 
GraphTalk Helsinki - Fraud Analysis with Neo4j
GraphTalk Helsinki - Fraud Analysis with Neo4jGraphTalk Helsinki - Fraud Analysis with Neo4j
GraphTalk Helsinki - Fraud Analysis with Neo4jNeo4j
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisSpbDotNet Community
 
Distributed DataFrame (DDF) Simplifying Big Data For The Rest Of Us
Distributed DataFrame (DDF) Simplifying Big Data  For The Rest Of UsDistributed DataFrame (DDF) Simplifying Big Data  For The Rest Of Us
Distributed DataFrame (DDF) Simplifying Big Data For The Rest Of UsArimo, Inc.
 

What's hot (13)

Patterns in Terraform 12+13: Data, Transformations and Resources
Patterns in Terraform 12+13: Data, Transformations and ResourcesPatterns in Terraform 12+13: Data, Transformations and Resources
Patterns in Terraform 12+13: Data, Transformations and Resources
 
ggplot2 extensions-ggtree.
ggplot2 extensions-ggtree.ggplot2 extensions-ggtree.
ggplot2 extensions-ggtree.
 
Text Mining of Twitter in Data Mining
Text Mining of Twitter in Data MiningText Mining of Twitter in Data Mining
Text Mining of Twitter in Data Mining
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch Meetup
 
Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015Will it Blend? - ScalaSyd February 2015
Will it Blend? - ScalaSyd February 2015
 
Thoughts on MongoDB Analytics
Thoughts on MongoDB AnalyticsThoughts on MongoDB Analytics
Thoughts on MongoDB Analytics
 
GraphTalk Stockholm - Fraud Detection with Graphs
GraphTalk Stockholm - Fraud Detection with GraphsGraphTalk Stockholm - Fraud Detection with Graphs
GraphTalk Stockholm - Fraud Detection with Graphs
 
Message
MessageMessage
Message
 
GraphTalk Helsinki - Fraud Analysis with Neo4j
GraphTalk Helsinki - Fraud Analysis with Neo4jGraphTalk Helsinki - Fraud Analysis with Neo4j
GraphTalk Helsinki - Fraud Analysis with Neo4j
 
Артём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data AnalysisАртём Акуляков - F# for Data Analysis
Артём Акуляков - F# for Data Analysis
 
10. R getting spatial
10.  R getting spatial10.  R getting spatial
10. R getting spatial
 
Distributed DataFrame (DDF) Simplifying Big Data For The Rest Of Us
Distributed DataFrame (DDF) Simplifying Big Data  For The Rest Of UsDistributed DataFrame (DDF) Simplifying Big Data  For The Rest Of Us
Distributed DataFrame (DDF) Simplifying Big Data For The Rest Of Us
 
php Mailer
php Mailerphp Mailer
php Mailer
 

Viewers also liked

GraphDay Noble/Coolio
GraphDay Noble/CoolioGraphDay Noble/Coolio
GraphDay Noble/CoolioNeo4j
 
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration Patterns
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration PatternsGraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration Patterns
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration PatternsNeo4j
 
GraphConnect 2014 SF: The Business Graph
GraphConnect 2014 SF: The Business GraphGraphConnect 2014 SF: The Business Graph
GraphConnect 2014 SF: The Business GraphNeo4j
 
Neo4j Makes Graphs Easy
Neo4j Makes Graphs EasyNeo4j Makes Graphs Easy
Neo4j Makes Graphs EasyNeo4j
 
Graph your business
Graph your businessGraph your business
Graph your businessNeo4j
 
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2Neo4j
 
Graph all the things
Graph all the thingsGraph all the things
Graph all the thingsNeo4j
 
Graph Search and Discovery for your Dark Data
Graph Search and Discovery for your Dark DataGraph Search and Discovery for your Dark Data
Graph Search and Discovery for your Dark DataNeo4j
 
Graph Your Business - GraphDay JimWebber
Graph Your Business - GraphDay JimWebberGraph Your Business - GraphDay JimWebber
Graph Your Business - GraphDay JimWebberNeo4j
 
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucher
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucherNeo4j Makes Graphs Easy? - GraphDay AmandaLaucher
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucherNeo4j
 
GraphTalk Frankfurt - Master Data Management bei der Bayerischen Versicherung
GraphTalk Frankfurt - Master Data Management bei der Bayerischen VersicherungGraphTalk Frankfurt - Master Data Management bei der Bayerischen Versicherung
GraphTalk Frankfurt - Master Data Management bei der Bayerischen VersicherungNeo4j
 
Metadata and Access Control
Metadata and Access ControlMetadata and Access Control
Metadata and Access ControlNeo4j
 
Transparency One : La (re)découverte de la chaîne d'approvisionnement
Transparency One : La (re)découverte de la chaîne d'approvisionnementTransparency One : La (re)découverte de la chaîne d'approvisionnement
Transparency One : La (re)découverte de la chaîne d'approvisionnementNeo4j
 
Graphs fun vjug2
Graphs fun vjug2Graphs fun vjug2
Graphs fun vjug2Neo4j
 
GraphTalk Frankfurt - Einführung in Graphdatenbanken
GraphTalk Frankfurt - Einführung in GraphdatenbankenGraphTalk Frankfurt - Einführung in Graphdatenbanken
GraphTalk Frankfurt - Einführung in GraphdatenbankenNeo4j
 
GraphTalk - Semantische Netze mit structr
GraphTalk - Semantische Netze mit structrGraphTalk - Semantische Netze mit structr
GraphTalk - Semantische Netze mit structrNeo4j
 
Graph all the things - PRathle
Graph all the things - PRathleGraph all the things - PRathle
Graph all the things - PRathleNeo4j
 
GraphTalks - Einführung
GraphTalks - EinführungGraphTalks - Einführung
GraphTalks - EinführungNeo4j
 
GraphTalk - Semantisches PDM bei Schleich
GraphTalk - Semantisches PDM bei Schleich GraphTalk - Semantisches PDM bei Schleich
GraphTalk - Semantisches PDM bei Schleich Neo4j
 
RDBMS to Graphs
RDBMS to GraphsRDBMS to Graphs
RDBMS to GraphsNeo4j
 

Viewers also liked (20)

GraphDay Noble/Coolio
GraphDay Noble/CoolioGraphDay Noble/Coolio
GraphDay Noble/Coolio
 
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration Patterns
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration PatternsGraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration Patterns
GraphConnect 2014 SF: Neo4j at Scale using Enterprise Integration Patterns
 
GraphConnect 2014 SF: The Business Graph
GraphConnect 2014 SF: The Business GraphGraphConnect 2014 SF: The Business Graph
GraphConnect 2014 SF: The Business Graph
 
Neo4j Makes Graphs Easy
Neo4j Makes Graphs EasyNeo4j Makes Graphs Easy
Neo4j Makes Graphs Easy
 
Graph your business
Graph your businessGraph your business
Graph your business
 
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2
GraphConnect 2014 SF: Betting the Company on a Graph Database - Part 2
 
Graph all the things
Graph all the thingsGraph all the things
Graph all the things
 
Graph Search and Discovery for your Dark Data
Graph Search and Discovery for your Dark DataGraph Search and Discovery for your Dark Data
Graph Search and Discovery for your Dark Data
 
Graph Your Business - GraphDay JimWebber
Graph Your Business - GraphDay JimWebberGraph Your Business - GraphDay JimWebber
Graph Your Business - GraphDay JimWebber
 
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucher
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucherNeo4j Makes Graphs Easy? - GraphDay AmandaLaucher
Neo4j Makes Graphs Easy? - GraphDay AmandaLaucher
 
GraphTalk Frankfurt - Master Data Management bei der Bayerischen Versicherung
GraphTalk Frankfurt - Master Data Management bei der Bayerischen VersicherungGraphTalk Frankfurt - Master Data Management bei der Bayerischen Versicherung
GraphTalk Frankfurt - Master Data Management bei der Bayerischen Versicherung
 
Metadata and Access Control
Metadata and Access ControlMetadata and Access Control
Metadata and Access Control
 
Transparency One : La (re)découverte de la chaîne d'approvisionnement
Transparency One : La (re)découverte de la chaîne d'approvisionnementTransparency One : La (re)découverte de la chaîne d'approvisionnement
Transparency One : La (re)découverte de la chaîne d'approvisionnement
 
Graphs fun vjug2
Graphs fun vjug2Graphs fun vjug2
Graphs fun vjug2
 
GraphTalk Frankfurt - Einführung in Graphdatenbanken
GraphTalk Frankfurt - Einführung in GraphdatenbankenGraphTalk Frankfurt - Einführung in Graphdatenbanken
GraphTalk Frankfurt - Einführung in Graphdatenbanken
 
GraphTalk - Semantische Netze mit structr
GraphTalk - Semantische Netze mit structrGraphTalk - Semantische Netze mit structr
GraphTalk - Semantische Netze mit structr
 
Graph all the things - PRathle
Graph all the things - PRathleGraph all the things - PRathle
Graph all the things - PRathle
 
GraphTalks - Einführung
GraphTalks - EinführungGraphTalks - Einführung
GraphTalks - Einführung
 
GraphTalk - Semantisches PDM bei Schleich
GraphTalk - Semantisches PDM bei Schleich GraphTalk - Semantisches PDM bei Schleich
GraphTalk - Semantisches PDM bei Schleich
 
RDBMS to Graphs
RDBMS to GraphsRDBMS to Graphs
RDBMS to Graphs
 

Similar to Meetup Analytics with R and Neo4j

Text mining and social network analysis of twitter data part 1
Text mining and social network analysis of twitter data part 1Text mining and social network analysis of twitter data part 1
Text mining and social network analysis of twitter data part 1Johan Blomme
 
Data Science for Folks Without (or With!) a Ph.D.
Data Science for Folks Without (or With!) a Ph.D.Data Science for Folks Without (or With!) a Ph.D.
Data Science for Folks Without (or With!) a Ph.D.Douglas Starnes
 
10. Getting Spatial
10. Getting Spatial10. Getting Spatial
10. Getting SpatialFAO
 
Frsa
FrsaFrsa
Frsa_111
 
India software developers conference 2013 Bangalore
India software developers conference 2013 BangaloreIndia software developers conference 2013 Bangalore
India software developers conference 2013 BangaloreSatnam Singh
 
k-means Clustering and Custergram with R
k-means Clustering and Custergram with Rk-means Clustering and Custergram with R
k-means Clustering and Custergram with RDr. Volkan OBAN
 
Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Charles Martin
 
Using R for Building a Simple and Effective Dashboard
Using R for Building a Simple and Effective DashboardUsing R for Building a Simple and Effective Dashboard
Using R for Building a Simple and Effective DashboardAndrea Gigli
 
Introduction to R for data science
Introduction to R for data scienceIntroduction to R for data science
Introduction to R for data scienceLong Nguyen
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1Ke Wei Louis
 
Advanced Data Visualization Examples with R-Part II
Advanced Data Visualization Examples with R-Part IIAdvanced Data Visualization Examples with R-Part II
Advanced Data Visualization Examples with R-Part IIDr. Volkan OBAN
 
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj Talk
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj TalkSpark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj Talk
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj TalkZalando Technology
 
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver){tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)Takashi Kitano
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Sciencehenrygarner
 

Similar to Meetup Analytics with R and Neo4j (20)

Text mining and social network analysis of twitter data part 1
Text mining and social network analysis of twitter data part 1Text mining and social network analysis of twitter data part 1
Text mining and social network analysis of twitter data part 1
 
Data Science for Folks Without (or With!) a Ph.D.
Data Science for Folks Without (or With!) a Ph.D.Data Science for Folks Without (or With!) a Ph.D.
Data Science for Folks Without (or With!) a Ph.D.
 
10. Getting Spatial
10. Getting Spatial10. Getting Spatial
10. Getting Spatial
 
Frsa
FrsaFrsa
Frsa
 
Functional es6
Functional es6Functional es6
Functional es6
 
India software developers conference 2013 Bangalore
India software developers conference 2013 BangaloreIndia software developers conference 2013 Bangalore
India software developers conference 2013 Bangalore
 
k-means Clustering and Custergram with R
k-means Clustering and Custergram with Rk-means Clustering and Custergram with R
k-means Clustering and Custergram with R
 
Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3
 
Using R for Building a Simple and Effective Dashboard
Using R for Building a Simple and Effective DashboardUsing R for Building a Simple and Effective Dashboard
Using R for Building a Simple and Effective Dashboard
 
Introduction to R for data science
Introduction to R for data scienceIntroduction to R for data science
Introduction to R for data science
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
proj1v2
proj1v2proj1v2
proj1v2
 
Advanced Data Visualization Examples with R-Part II
Advanced Data Visualization Examples with R-Part IIAdvanced Data Visualization Examples with R-Part II
Advanced Data Visualization Examples with R-Part II
 
R programming language
R programming languageR programming language
R programming language
 
CLUSTERGRAM
CLUSTERGRAMCLUSTERGRAM
CLUSTERGRAM
 
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj Talk
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj TalkSpark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj Talk
Spark + Clojure for Topic Discovery - Zalando Tech Clojure/Conj Talk
 
Introduction to R
Introduction to RIntroduction to R
Introduction to R
 
Distributed computing with spark
Distributed computing with sparkDistributed computing with spark
Distributed computing with spark
 
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver){tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 

More from Neo4j

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansQIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansNeo4j
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...Neo4j
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosNeo4j
 
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Neo4j
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdfNeo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdfNeo4j
 
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdfRabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdfNeo4j
 
Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Neo4j
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeNeo4j
 
Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j
 
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j
 
Enabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsEnabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsNeo4j
 
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j
 
Neo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with GraphNeo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with GraphNeo4j
 

More from Neo4j (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansQIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
QIAGEN: Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
ISDEFE - GraphSummit Madrid - ARETA: Aviation Real-Time Emissions Token Accre...
 
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafosBBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
BBVA - GraphSummit Madrid - Caso de éxito en BBVA: Optimizando con grafos
 
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
Graph Everywhere - Josep Taruella - Por qué Graph Data Science en tus modelos...
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdfNeo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
Neo4j_Exploring the Impact of Graph Technology on Financial Services.pdf
 
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdfRabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
Rabobank_Exploring the Impact of Graph Technology on Financial Services.pdf
 
Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!Webinar - IA generativa e grafi Neo4j: RAG time!
Webinar - IA generativa e grafi Neo4j: RAG time!
 
IA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG timeIA Generativa y Grafos de Neo4j: RAG time
IA Generativa y Grafos de Neo4j: RAG time
 
Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)Neo4j: Data Engineering for RAG (retrieval augmented generation)
Neo4j: Data Engineering for RAG (retrieval augmented generation)
 
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdfNeo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
Neo4j Graph Summit 2024 Workshop - EMEA - Breda_and_Munchen.pdf
 
Enabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge GraphsEnabling GenAI Breakthroughs with Knowledge Graphs
Enabling GenAI Breakthroughs with Knowledge Graphs
 
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdfNeo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
Neo4j_Anurag Tandon_Product Vision and Roadmap.Benelux.pptx.pdf
 
Neo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with GraphNeo4j Jesus Barrasa The Art of the Possible with Graph
Neo4j Jesus Barrasa The Art of the Possible with Graph
 

Recently uploaded

Botany krishna series 2nd semester Only Mcq type questions
Botany krishna series 2nd semester Only Mcq type questionsBotany krishna series 2nd semester Only Mcq type questions
Botany krishna series 2nd semester Only Mcq type questionsSumit Kumar yadav
 
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service 🪡
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service  🪡CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service  🪡
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service 🪡anilsa9823
 
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...Sérgio Sacani
 
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...anilsa9823
 
Artificial Intelligence In Microbiology by Dr. Prince C P
Artificial Intelligence In Microbiology by Dr. Prince C PArtificial Intelligence In Microbiology by Dr. Prince C P
Artificial Intelligence In Microbiology by Dr. Prince C PPRINCE C P
 
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bNightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bSérgio Sacani
 
GFP in rDNA Technology (Biotechnology).pptx
GFP in rDNA Technology (Biotechnology).pptxGFP in rDNA Technology (Biotechnology).pptx
GFP in rDNA Technology (Biotechnology).pptxAleenaTreesaSaji
 
Chemistry 4th semester series (krishna).pdf
Chemistry 4th semester series (krishna).pdfChemistry 4th semester series (krishna).pdf
Chemistry 4th semester series (krishna).pdfSumit Kumar yadav
 
A relative description on Sonoporation.pdf
A relative description on Sonoporation.pdfA relative description on Sonoporation.pdf
A relative description on Sonoporation.pdfnehabiju2046
 
Botany 4th semester series (krishna).pdf
Botany 4th semester series (krishna).pdfBotany 4th semester series (krishna).pdf
Botany 4th semester series (krishna).pdfSumit Kumar yadav
 
Unlocking the Potential: Deep dive into ocean of Ceramic Magnets.pptx
Unlocking  the Potential: Deep dive into ocean of Ceramic Magnets.pptxUnlocking  the Potential: Deep dive into ocean of Ceramic Magnets.pptx
Unlocking the Potential: Deep dive into ocean of Ceramic Magnets.pptxanandsmhk
 
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...ssifa0344
 
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...Sérgio Sacani
 
Isotopic evidence of long-lived volcanism on Io
Isotopic evidence of long-lived volcanism on IoIsotopic evidence of long-lived volcanism on Io
Isotopic evidence of long-lived volcanism on IoSérgio Sacani
 
Disentangling the origin of chemical differences using GHOST
Disentangling the origin of chemical differences using GHOSTDisentangling the origin of chemical differences using GHOST
Disentangling the origin of chemical differences using GHOSTSérgio Sacani
 
G9 Science Q4- Week 1-2 Projectile Motion.ppt
G9 Science Q4- Week 1-2 Projectile Motion.pptG9 Science Q4- Week 1-2 Projectile Motion.ppt
G9 Science Q4- Week 1-2 Projectile Motion.pptMAESTRELLAMesa2
 
Orientation, design and principles of polyhouse
Orientation, design and principles of polyhouseOrientation, design and principles of polyhouse
Orientation, design and principles of polyhousejana861314
 
Biopesticide (2).pptx .This slides helps to know the different types of biop...
Biopesticide (2).pptx  .This slides helps to know the different types of biop...Biopesticide (2).pptx  .This slides helps to know the different types of biop...
Biopesticide (2).pptx .This slides helps to know the different types of biop...RohitNehra6
 

Recently uploaded (20)

Botany krishna series 2nd semester Only Mcq type questions
Botany krishna series 2nd semester Only Mcq type questionsBotany krishna series 2nd semester Only Mcq type questions
Botany krishna series 2nd semester Only Mcq type questions
 
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service 🪡
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service  🪡CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service  🪡
CALL ON ➥8923113531 🔝Call Girls Kesar Bagh Lucknow best Night Fun service 🪡
 
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...
Discovery of an Accretion Streamer and a Slow Wide-angle Outflow around FUOri...
 
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...
Lucknow 💋 Russian Call Girls Lucknow Finest Escorts Service 8923113531 Availa...
 
Artificial Intelligence In Microbiology by Dr. Prince C P
Artificial Intelligence In Microbiology by Dr. Prince C PArtificial Intelligence In Microbiology by Dr. Prince C P
Artificial Intelligence In Microbiology by Dr. Prince C P
 
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bNightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
 
GFP in rDNA Technology (Biotechnology).pptx
GFP in rDNA Technology (Biotechnology).pptxGFP in rDNA Technology (Biotechnology).pptx
GFP in rDNA Technology (Biotechnology).pptx
 
Chemistry 4th semester series (krishna).pdf
Chemistry 4th semester series (krishna).pdfChemistry 4th semester series (krishna).pdf
Chemistry 4th semester series (krishna).pdf
 
A relative description on Sonoporation.pdf
A relative description on Sonoporation.pdfA relative description on Sonoporation.pdf
A relative description on Sonoporation.pdf
 
9953056974 Young Call Girls In Mahavir enclave Indian Quality Escort service
9953056974 Young Call Girls In Mahavir enclave Indian Quality Escort service9953056974 Young Call Girls In Mahavir enclave Indian Quality Escort service
9953056974 Young Call Girls In Mahavir enclave Indian Quality Escort service
 
Botany 4th semester series (krishna).pdf
Botany 4th semester series (krishna).pdfBotany 4th semester series (krishna).pdf
Botany 4th semester series (krishna).pdf
 
Unlocking the Potential: Deep dive into ocean of Ceramic Magnets.pptx
Unlocking  the Potential: Deep dive into ocean of Ceramic Magnets.pptxUnlocking  the Potential: Deep dive into ocean of Ceramic Magnets.pptx
Unlocking the Potential: Deep dive into ocean of Ceramic Magnets.pptx
 
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
 
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...
PossibleEoarcheanRecordsoftheGeomagneticFieldPreservedintheIsuaSupracrustalBe...
 
Isotopic evidence of long-lived volcanism on Io
Isotopic evidence of long-lived volcanism on IoIsotopic evidence of long-lived volcanism on Io
Isotopic evidence of long-lived volcanism on Io
 
Disentangling the origin of chemical differences using GHOST
Disentangling the origin of chemical differences using GHOSTDisentangling the origin of chemical differences using GHOST
Disentangling the origin of chemical differences using GHOST
 
G9 Science Q4- Week 1-2 Projectile Motion.ppt
G9 Science Q4- Week 1-2 Projectile Motion.pptG9 Science Q4- Week 1-2 Projectile Motion.ppt
G9 Science Q4- Week 1-2 Projectile Motion.ppt
 
Orientation, design and principles of polyhouse
Orientation, design and principles of polyhouseOrientation, design and principles of polyhouse
Orientation, design and principles of polyhouse
 
Engler and Prantl system of classification in plant taxonomy
Engler and Prantl system of classification in plant taxonomyEngler and Prantl system of classification in plant taxonomy
Engler and Prantl system of classification in plant taxonomy
 
Biopesticide (2).pptx .This slides helps to know the different types of biop...
Biopesticide (2).pptx  .This slides helps to know the different types of biop...Biopesticide (2).pptx  .This slides helps to know the different types of biop...
Biopesticide (2).pptx .This slides helps to know the different types of biop...
 

Meetup Analytics with R and Neo4j

  • 1. Exploring London NoSQL meetups using R Mark Needham @markhneedham
  • 2.
  • 3.
  • 4. Scraper at the ready...
  • 6. Lots of bits of data ● Events ● Members ● Groups ● RSVPs ● Venues ● Topics
  • 9. Interesting questions to ask... ● What day of the week do people go to meetups? ● Where abouts in London are NoSQL meetups held? ● Do people sign up for multiple meetups on the same day? ● Are there common members between groups? ● What topics are people most interested in? ● In which order do people join the NoSQL groups? ● Who are the most connected people on the NoSQL scene?
  • 10. The tool set RNeo4j Results as a data frame Query dplyr ggplot2 igraph ggmap cluster geosphere
  • 11. When do people go to meetups?
  • 12. When do people go to meetups? (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]- ({response: 'yes'})<-[:RSVPD]-()
  • 13. When do people go to meetups? MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]- ({response: 'yes'})<-[:RSVPD]-() WHERE (event.time + event.utc_offset) < timestamp() RETURN g.name, event.time + event.utc_offset AS eventTime, event.announced_at AS announcedAt, event.name, COUNT(*) AS rsvps
  • 14. R Neo4j install.packages("devtools") devtools::install_github("nicolewhite/Rneo4j") library(RNeo4j) graph = startGraph("http://localhost:7474/db/data/") query = "MATCH … RETURN …" cypher(graph, query)
  • 15. Grouping events by month library(dplyr) events %>% group_by(month) %>% summarise(events = n(), count = sum(rsvps), max = max(rsvps)) %>% mutate(ave = count / events) %>% arrange(desc(ave))
  • 16. Grouping events by month ## month events count ave ## 1 November 55 3018 54.87273 ## 2 May 52 2676 51.46154 ## 3 April 58 2964 51.10345 ## 4 June 47 2384 50.72340 ## 5 October 71 3566 50.22535 ## 6 September 59 2860 48.47458 ## 7 February 43 2047 47.60465 ## 8 January 34 1592 46.82353 ## 9 December 24 1056 44.00000 ## 10 March 39 1667 42.74359 ## 11 July 48 1866 38.87500 ## 12 August 34 1023 30.08824
  • 17. Grouping events by day events %>% group_by(day) %>% summarise(events = n(), count = sum(rsvps), max = max(rsvps)) %>% mutate(ave = count / events) %>% arrange(day)
  • 18. Grouping events by day ## day events count ave ## 1 Monday 63 4034 64.03175 ## 2 Tuesday 151 6696 44.34437 ## 3 Wednesday 225 9481 42.13778 ## 4 Thursday 104 5394 51.86538 ## 5 Friday 11 378 34.36364 ## 6 Saturday 10 736 73.60000
  • 19. Some simple bar charts library(ggplot2) g1 = ggplot(aes(x = day, y = ave), data = byDay) + geom_bar(stat="identity", fill="dark blue") + ggtitle("Average attendees by day") g2 = ggplot(aes(x = day, y = count), data = byDay) + geom_bar(stat="identity", fill="dark blue") + ggtitle("Total attendees by day") grid.arrange(g1,g2, ncol = 1)
  • 21.
  • 22. Where do people go to meetups? (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]- ({response: 'yes'})<-[:RSVPD]-(), (event)-[:HELD_AT]->(venue)
  • 23. Where do people go to meetups? MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]- ({response: 'yes'})<-[:RSVPD]-(), (event)-[:HELD_AT]->(venue) WHERE (event.time + event.utc_offset) < timestamp() RETURN g.name, event.time + event.utc_offset AS eventTime, event.announced_at AS announcedAt, event.name, venue.name AS venue, venue.lat AS lat, venue.lon AS lon, COUNT(*) AS rsvps
  • 24. Where do people go to meetups? MATCH (g:Group)-[:HOSTED_EVENT]->(event)<-[:TO]- ({response: 'yes'})<-[:RSVPD]-(), (event)-[:HELD_AT]->(venue) WHERE (event.time + event.utc_offset) < timestamp() RETURN g.name, event.time + event.utc_offset AS eventTime, event.announced_at AS announcedAt, event.name, venue.name AS venue, venue.lat AS lat, venue.lon AS lon, COUNT(*) AS rsvps
  • 25. Where do people go to meetups? byVenue = events %>% count(lat, lon, venue) %>% ungroup() %>% arrange(desc(n)) %>% rename(count = n)
  • 26. Where do people go to meetups? ## lat lon venue count ## 1 51.50256 -0.019379 Skyline Bar at CCT Venues Plus 1 ## 2 51.53373 -0.122340 The Guardian 1 ## 3 51.51289 -0.067163 Erlang Solutions 3 ## 4 51.49146 -0.219424 Novotel - W6 8DR 1 ## 5 51.49311 -0.146531 Google HQ 1 ## 6 51.52655 -0.084219 Look Mum No Hands! 22 ## 7 51.51976 -0.097270 Vibrant Media, 3rd Floor 1 ## 8 51.52303 -0.085178 Mind Candy HQ 2 ## 9 51.51786 -0.109260 ThoughtWorks UK Office 2 ## 10 51.51575 -0.097978 BT Centre 1
  • 27. Where do people go to meetups? library(ggmap) map = get_map(location = 'London', zoom = 12) ggmap(map) + geom_point(aes(x = lon, y = lat, size = count), data = byVenue, col = "red", alpha = 0.8)
  • 28.
  • 29. library(geosphere) library(cluster) clusteramounts = 40 distance.matrix = byVenue %>% select(lon, lat) %>% distm clustersx <- as.hclust(agnes(distance.matrix, diss = T)) byVenue$group <- cutree(clustersx, k=clusteramounts) byVenueClustered = byVenue %>% group_by(group) %>% summarise(meanLat = mean(lat), meanLon = mean(lon), total = sum(count), venues = paste(venue, collapse = ",")) Spatial clustering
  • 30. ## group meanLat meanLon total ## 1 3 51.52349 -0.08506461 123 ## 2 1 51.52443 -0.09919280 89 ## 3 2 51.50547 -0.10325925 62 ## 4 4 51.50794 -0.12714600 55 ## 5 8 51.51671 -0.10028908 19 ## 6 6 51.53655 -0.13798514 18 ## 7 7 51.52159 -0.10934720 18 ## 8 5 51.51155 -0.07004417 13 ## 9 12 51.51459 -0.12314650 13 ## 10 14 51.52129 -0.07588867 10 Spatial clustering
  • 31. ggmap(map) + geom_point(aes(x = meanLon, y = meanLat, size = total), data = byVenueClustered, col = "red", alpha = 0.8) Spatial clustering
  • 32.
  • 33. byVenue %>% filter(group == byVenueClustered$group[1]) What’s going on in Shoreditch?
  • 34. Meetup Group Member Overlap ● Why would we want to know this? ○ Perhaps for joint meetups ○ Topics for future meetups
  • 35. Extracting the data MATCH (group1:Group), (group2:Group) WHERE group1 <> group2 OPTIONAL MATCH p = (group1)<-[:MEMBER_OF]-()-[:MEMBER_OF]->(group2) WITH group1, group2, COLLECT(p) AS paths RETURN group1.name, group2.name, LENGTH(paths) as commonMembers ORDER BY group1.name, group2.name
  • 36.
  • 37. MATCH (group1:Group), (group2:Group) WHERE group1 <> group2 OPTIONAL MATCH (group1)<-[:MEMBER_OF]-(member) WITH group1, group2, COLLECT(member) AS group1Members WITH group1, group2, group1Members, LENGTH(group1Members) AS numberOfGroup1Members UNWIND group1Members AS member OPTIONAL MATCH path = (member)-[:MEMBER_OF]->(group2) WITH group1, group2, COLLECT(path) AS paths, numberOfGroup1Members WITH group1, group2, LENGTH(paths) as commonMembers, numberOfGroup1Members RETURN group1.name, group2.name, toInt(round(100.0 * commonMembers / numberOfGroup1Members)) AS percentage ORDER BY group1.name, group1.name Finding overlap as a percentage
  • 38.
  • 39. How many groups are people part of? MATCH (p:MeetupProfile)-[:MEMBER_OF]->() RETURN ID(p), COUNT(*) AS groups ORDER BY groups DESC
  • 40. How many groups are people part of? ggplot(aes(x = groups, y = n), data = group_count %>% count(groups)) + geom_bar(stat="identity", fill="dark blue") + scale_y_sqrt() + scale_x_continuous( breaks = round(seq(min(group_count$groups), max(group_count$groups), by = 1),1)) + ggtitle("Number of groups people are members of")
  • 41.
  • 42. Who’s the most connected? ● i.e. the person who had the chance to meet the most people in the community ● Betweenness Centrality ● Page Rank
  • 43. Who’s the most connected?
  • 44. Betweenness Centrality Calculates the number of shortest paths that go through a particular node
  • 45. Betweenness Centrality library(igraph) nodes_query = "MATCH (p:MeetupProfile)-[:RSVPD]->({response: 'yes'})-[:TO]->(event) RETURN DISTINCT ID(p) AS id, p.id AS name, p.name AS fullName" nodes = cypher(graph, nodes_query) edges_query = "MATCH (p:MeetupProfile)-[:RSVPD]->({response: 'yes'})-[:TO]->(event), (event)<-[:TO]-({response:'yes'})<-[:RSVPD]-(other) RETURN ID(p) AS source, ID(other) AS target, COUNT(*) AS weight" edges = cypher(graph, edges_query) g = graph.data.frame(edges, directed = T, nodes) bwGraph = betweenness(g) bwDf = data.frame(id = names(bwGraph), score = bwGraph)
  • 46. Betweenness Centrality bwDf %>% arrange(desc(score)) %>% head(5) merge(nodes, bwDf, by.x = "name", by.y = "id") %>% arrange(desc(score)) %>% head(5)
  • 47. Page Rank PageRank works by counting the number and quality of links to a page to determine a rough estimate of how important the website is. The underlying assumption is that more important websites are likely to receive more links from other websites.
  • 48. Page Rank PageRank works by counting the number and quality of links to a person to determine a rough estimate of how important the person is. The underlying assumption is that more important people are likely to receive more links from other people.
  • 49. Page Rank pr = page.rank(g)$vector prDf = data.frame(name = names(pr), rank = pr) data.frame(merge(nodes, prDf, by.x = "name", by.y = "name")) %>% arrange(desc(rank)) %>% head(10)
  • 50. Blending back into the graph query = "MATCH (p:MeetupProfile {id: {id}}) SET p.betweenness = {score}" tx = newTransaction(graph) for(i in 1:nrow(bwDf)) { if(i %% 1000 == 0) { commit(tx) print(paste("Batch", i / 1000, "committed.")) tx = newTransaction(graph) } id = bwDf[i, "id"] score = bwDf[i, "score"] appendCypher(tx, query, id = id, score = as.double(score)) } commit(tx)
  • 51. Blending back into the graph query = "MATCH (p:MeetupProfile {id: {id}}) SET p.pageRank = {score}" tx = newTransaction(graph) for(i in 1:nrow(prDf)) { if(i %% 1000 == 0) { commit(tx) print(paste("Batch", i / 1000, "committed.")) tx = newTransaction(graph) } name = prDf[i, "name"] rank = prDf[i, "rank"] appendCypher(tx, query, id = name, score = as.double(rank)) } commit(tx)
  • 52. Are they in the Neo4j group? MATCH (p:MeetupProfile) WITH p ORDER BY p.pageRank DESC LIMIT 20 OPTIONAL MATCH member = (p)-[m:MEMBER_OF]->(g:Group) WHERE group.name = "Neo4j - London User Group" RETURN p.name, p.id, p.pageRank, NOT m is null AS isMember ORDER BY p.pageRank DESC
  • 53. Are they in the Neo4j group? blended_data = cypher(graph, query)
  • 54. Have they been to any events?
  • 55. Have they been to any events? MATCH (p:MeetupProfile) WITH p ORDER BY p.pageRank DESC LIMIT 20 OPTIONAL MATCH member = (p)-[m:MEMBER_OF]->(g:Group) WHERE g.name = "Neo4j - London User Group" WITH p, NOT m is null AS isMember, g OPTIONAL MATCH event= (p)-[:RSVPD]-({response:'yes'})-[:TO]->()<-[:HOSTED_EVENT]-(g) WITH p, isMember, COLLECT(event) as events RETURN p.name, p.id, p.pageRank, isMember, LENGTH(events) AS events ORDER BY p.pageRank DESC
  • 56. Have they been to any events? blended_data = cypher(graph, query)
  • 57. Take Aways ● ggplot => visualisations with minimal code ● dplyr => easy data manipulation for people from other languages ● igraph => find the influencers in a network ● graphs => flexible way of modelling data that allows querying across multiple dimensions
  • 58. And one final take away...
  • 59.