{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction\n",
"\n",
"My friend [Johannes Giorgis] and I are developing a series of [Data Science Challenges] to help others\n",
"become better data scientists by presenting a series of challenges. Why did we do this?\n",
"\n",
"\n",
"> Because that's what heroes do!\n",
">\n",
"> --Johannes Giorgis\n",
"\n",
"I now present my response to the first challenge, Exploring the Meetup API in the city of my choice.\n",
"\n",
"**San Francisco, CA**, I choose you!\n",
"\n",
"\n",
"\n",
"# Challenge 01: Explore the Meetup API\n",
"Use the [Meetup API] to explore meetups in your city of choice.\n",
"\n",
"\n",
"**Guide Questions**:\n",
"\n",
"Below are some guide line questions to get you started:\n",
"\n",
"- What is the largest meetup in your location of choice (city, cities, country...etc)?\n",
"- How many meetups of a certain category (e.g. Tech, Art...etc) are in your city?\n",
"- Basic statistics of meetups\n",
"\t- What is the average size of meetups?\n",
"\t- How frequently do meetups host events?\n",
" \n",
"## Okay, but what I really want to know is\n",
"\n",
"What is the biggest Tech Group in San Francisco that meets regularly and has a growing and enthusiastic membership?\n",
"\n",
"\n",
"## Prerequisites:\n",
"Add a [Meetup API Key] to your environment.\n",
"\n",
"[//]: # (References)\n",
"\n",
"[Meetup API]: https://www.meetup.com/meetup_api/\n",
"[Meetup API Key]: https://secure.meetup.com/meetup_api/key/\n",
"[Johannes Giorgis]: http://johannesgiorgis.com/\n",
"[Data Science Challenges]: https://medium.com/red-panda-ai/introducing-data-science-challenges-4ae4a103d67b"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import datetime\n",
"import json\n",
"import math\n",
"import meetup.api\n",
"import os\n",
"import pprint\n",
"import requests\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sb\n",
"\n",
"from tqdm import tnrange, tqdm_notebook\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Double check your environment\n",
"\n",
"Nothing works without **MEETUP_API_KEY**."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"assert 'MEETUP_API_KEY' in os.environ, (\n",
" \"You need a MEETUP_API_KEY in your environment please look at the \"\n",
" \"README for instructions.\")\n",
"client = meetup.api.Client()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Categories\n",
"\n",
"There are multiple categories of groups in Meetup, let's use Python's meetup.api to [GetCategories](https://meetup-api.readthedocs.io/en/latest/meetup_api.html#meetup.api.meetup.api.Client.GetCategories)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"%%capture --no-display\n",
"categories = client.GetCategories()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### What are the attributes of the response object? \n",
"\n",
"First, \n",
"let's create ahelper function to help us parse out the two most useful\n",
"different pieces:\n",
"\n",
"1. **meta**: an object containing meta-data about the response object itself\n",
"2. **results**: A page of actual data from the entire result of our API call"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def parse_response(response):\n",
" \"\"\"Returns two dataframes, meta and results:\n",
" meta: a vertically aligned dataframe, where each row is an element \n",
" of the response.meta dictionary\n",
" results: a horizontally aligned dataframe, where each column is\n",
" an element of the response.results dictionary\"\"\"\n",
" meta = pd.DataFrame.from_dict(response.meta, orient='index')\n",
" results = pd.DataFrame.from_dict(response.results)\n",
" return meta, results\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exploring the response object\n",
"\n",
"We received a response object when we called ```client.GetCategories()```.\n",
"\n",
"By looking at the categories **meta** dataframe, we can see that there are 33 different categories."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
next
\n",
"
\n",
"
\n",
"
\n",
"
method
\n",
"
Categories
\n",
"
\n",
"
\n",
"
total_count
\n",
"
33
\n",
"
\n",
"
\n",
"
link
\n",
"
https://api.meetup.com/2/categories
\n",
"
\n",
"
\n",
"
count
\n",
"
33
\n",
"
\n",
"
\n",
"
description
\n",
"
Returns a list of Meetup group categories
\n",
"
\n",
"
\n",
"
lon
\n",
"
None
\n",
"
\n",
"
\n",
"
title
\n",
"
Categories
\n",
"
\n",
"
\n",
"
url
\n",
"
https://api.meetup.com/2/categories?offset=0&f...
\n",
"
\n",
"
\n",
"
id
\n",
"
\n",
"
\n",
"
\n",
"
updated
\n",
"
1450292956000
\n",
"
\n",
"
\n",
"
lat
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0\n",
"next \n",
"method Categories\n",
"total_count 33\n",
"link https://api.meetup.com/2/categories\n",
"count 33\n",
"description Returns a list of Meetup group categories\n",
"lon None\n",
"title Categories\n",
"url https://api.meetup.com/2/categories?offset=0&f...\n",
"id \n",
"updated 1450292956000\n",
"lat None"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cats_meta_df, cats_df = parse_response(categories)\n",
"cats_meta_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can see from the meta that there are 33 categories available to us.\n",
"I wonder what they are. \n",
"\n",
"### How the Meetup API works\n",
"\n",
"Notice that the value of **next** (above) is an empty string. Meetup API v2 response payloads come in **pages**, one at a time, but provide the URI of the **next** API call in the sequence. We can use this to programmatically get each next **page** in **response.meta\\[\"next\"\\]**. until the complete result is returned.\n",
"\n",
"As we can see, the **response.meta\\[\"next\"\\]** for this page is an empty string, so all of the categories\n",
"fit into our first API call.\n",
"\n",
"#### Secondly, let's review the categories results dataframe"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
name
\n",
"
shortname
\n",
"
sort_name
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
Arts & Culture
\n",
"
Arts
\n",
"
Arts & Culture
\n",
"
\n",
"
\n",
"
1
\n",
"
18
\n",
"
Book Clubs
\n",
"
Book Clubs
\n",
"
Book Clubs
\n",
"
\n",
"
\n",
"
2
\n",
"
2
\n",
"
Career & Business
\n",
"
Business
\n",
"
Career & Business
\n",
"
\n",
"
\n",
"
3
\n",
"
3
\n",
"
Cars & Motorcycles
\n",
"
Auto
\n",
"
Cars & Motorcycles
\n",
"
\n",
"
\n",
"
4
\n",
"
4
\n",
"
Community & Environment
\n",
"
Community
\n",
"
Community & Environment
\n",
"
\n",
"
\n",
"
5
\n",
"
5
\n",
"
Dancing
\n",
"
Dancing
\n",
"
Dancing
\n",
"
\n",
"
\n",
"
6
\n",
"
6
\n",
"
Education & Learning
\n",
"
Education
\n",
"
Education & Learning
\n",
"
\n",
"
\n",
"
7
\n",
"
8
\n",
"
Fashion & Beauty
\n",
"
Fashion
\n",
"
Fashion & Beauty
\n",
"
\n",
"
\n",
"
8
\n",
"
9
\n",
"
Fitness
\n",
"
Fitness
\n",
"
Fitness
\n",
"
\n",
"
\n",
"
9
\n",
"
10
\n",
"
Food & Drink
\n",
"
Food & Drink
\n",
"
Food & Drink
\n",
"
\n",
"
\n",
"
10
\n",
"
11
\n",
"
Games
\n",
"
Games
\n",
"
Games
\n",
"
\n",
"
\n",
"
11
\n",
"
13
\n",
"
Movements & Politics
\n",
"
Movements
\n",
"
Movements & Politics
\n",
"
\n",
"
\n",
"
12
\n",
"
14
\n",
"
Health & Wellbeing
\n",
"
Well-being
\n",
"
Health & Wellbeing
\n",
"
\n",
"
\n",
"
13
\n",
"
15
\n",
"
Hobbies & Crafts
\n",
"
Crafts
\n",
"
Hobbies & Crafts
\n",
"
\n",
"
\n",
"
14
\n",
"
16
\n",
"
Language & Ethnic Identity
\n",
"
Languages
\n",
"
Language & Ethnic Identity
\n",
"
\n",
"
\n",
"
15
\n",
"
12
\n",
"
LGBT
\n",
"
LGBT
\n",
"
LGBT
\n",
"
\n",
"
\n",
"
16
\n",
"
17
\n",
"
Lifestyle
\n",
"
Lifestyle
\n",
"
Lifestyle
\n",
"
\n",
"
\n",
"
17
\n",
"
20
\n",
"
Movies & Film
\n",
"
Films
\n",
"
Movies & Film
\n",
"
\n",
"
\n",
"
18
\n",
"
21
\n",
"
Music
\n",
"
Music
\n",
"
Music
\n",
"
\n",
"
\n",
"
19
\n",
"
22
\n",
"
New Age & Spirituality
\n",
"
Spirituality
\n",
"
New Age & Spirituality
\n",
"
\n",
"
\n",
"
20
\n",
"
23
\n",
"
Outdoors & Adventure
\n",
"
Outdoors
\n",
"
Outdoors & Adventure
\n",
"
\n",
"
\n",
"
21
\n",
"
24
\n",
"
Paranormal
\n",
"
Paranormal
\n",
"
Paranormal
\n",
"
\n",
"
\n",
"
22
\n",
"
25
\n",
"
Parents & Family
\n",
"
Moms & Dads
\n",
"
Parents & Family
\n",
"
\n",
"
\n",
"
23
\n",
"
26
\n",
"
Pets & Animals
\n",
"
Pets
\n",
"
Pets & Animals
\n",
"
\n",
"
\n",
"
24
\n",
"
27
\n",
"
Photography
\n",
"
Photography
\n",
"
Photography
\n",
"
\n",
"
\n",
"
25
\n",
"
28
\n",
"
Religion & Beliefs
\n",
"
Beliefs
\n",
"
Religion & Beliefs
\n",
"
\n",
"
\n",
"
26
\n",
"
29
\n",
"
Sci-Fi & Fantasy
\n",
"
Sci fi
\n",
"
Sci-Fi & Fantasy
\n",
"
\n",
"
\n",
"
27
\n",
"
30
\n",
"
Singles
\n",
"
Singles
\n",
"
Singles
\n",
"
\n",
"
\n",
"
28
\n",
"
31
\n",
"
Socializing
\n",
"
Social
\n",
"
Socializing
\n",
"
\n",
"
\n",
"
29
\n",
"
32
\n",
"
Sports & Recreation
\n",
"
Sports
\n",
"
Sports & Recreation
\n",
"
\n",
"
\n",
"
30
\n",
"
33
\n",
"
Support
\n",
"
Support
\n",
"
Support
\n",
"
\n",
"
\n",
"
31
\n",
"
34
\n",
"
Tech
\n",
"
Tech
\n",
"
Tech
\n",
"
\n",
"
\n",
"
32
\n",
"
36
\n",
"
Writing
\n",
"
Writing
\n",
"
Writing
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id name shortname sort_name\n",
"0 1 Arts & Culture Arts Arts & Culture\n",
"1 18 Book Clubs Book Clubs Book Clubs\n",
"2 2 Career & Business Business Career & Business\n",
"3 3 Cars & Motorcycles Auto Cars & Motorcycles\n",
"4 4 Community & Environment Community Community & Environment\n",
"5 5 Dancing Dancing Dancing\n",
"6 6 Education & Learning Education Education & Learning\n",
"7 8 Fashion & Beauty Fashion Fashion & Beauty\n",
"8 9 Fitness Fitness Fitness\n",
"9 10 Food & Drink Food & Drink Food & Drink\n",
"10 11 Games Games Games\n",
"11 13 Movements & Politics Movements Movements & Politics\n",
"12 14 Health & Wellbeing Well-being Health & Wellbeing\n",
"13 15 Hobbies & Crafts Crafts Hobbies & Crafts\n",
"14 16 Language & Ethnic Identity Languages Language & Ethnic Identity\n",
"15 12 LGBT LGBT LGBT\n",
"16 17 Lifestyle Lifestyle Lifestyle\n",
"17 20 Movies & Film Films Movies & Film\n",
"18 21 Music Music Music\n",
"19 22 New Age & Spirituality Spirituality New Age & Spirituality\n",
"20 23 Outdoors & Adventure Outdoors Outdoors & Adventure\n",
"21 24 Paranormal Paranormal Paranormal\n",
"22 25 Parents & Family Moms & Dads Parents & Family\n",
"23 26 Pets & Animals Pets Pets & Animals\n",
"24 27 Photography Photography Photography\n",
"25 28 Religion & Beliefs Beliefs Religion & Beliefs\n",
"26 29 Sci-Fi & Fantasy Sci fi Sci-Fi & Fantasy\n",
"27 30 Singles Singles Singles\n",
"28 31 Socializing Social Socializing\n",
"29 32 Sports & Recreation Sports Sports & Recreation\n",
"30 33 Support Support Support\n",
"31 34 Tech Tech Tech\n",
"32 36 Writing Writing Writing"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cats_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### So, if we want to work with a particular category\n",
"In this case, I want **Tech**. Let's query the dataframe for categories named **Tech**."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
name
\n",
"
shortname
\n",
"
sort_name
\n",
"
\n",
" \n",
" \n",
"
\n",
"
31
\n",
"
34
\n",
"
Tech
\n",
"
Tech
\n",
"
Tech
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id name shortname sort_name\n",
"31 34 Tech Tech Tech"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tech_df = cats_df.loc[cats_df['name'] == 'Tech']\n",
"tech_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's store the category ID number for later use"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"34"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tech_category_id = tech_df['id'].values[0]\n",
"tech_category_id"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Explore Cities\n",
"### Now let's look at cities in the United States named San Francisco"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"%%capture --no-display\n",
"cities_resp = client.GetCities(country='us', query='San Francisco')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here we used the [GetCities] method of the [Python Meetup API client]\n",
"\n",
"I used a query for cities in **United States** called **San Francisco**.\n",
"\n",
"[//]: # (References)\n",
"\n",
"[GetCities]: https://meetup-api.readthedocs.io/en/latest/meetup_api.html#meetup.api.meetup.api.Client.GetCities\n",
"[Python Meetup API client]: https://meetup-api.readthedocs.io/en/latest/meetup_api.html#api-client-details\n",
"\n",
"Now let's take a look at the **meta** for our results."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
next
\n",
"
\n",
"
\n",
"
\n",
"
method
\n",
"
Cities
\n",
"
\n",
"
\n",
"
total_count
\n",
"
4
\n",
"
\n",
"
\n",
"
link
\n",
"
https://api.meetup.com/2/cities
\n",
"
\n",
"
\n",
"
count
\n",
"
4
\n",
"
\n",
"
\n",
"
description
\n",
"
Returns Meetup cities. This method supports se...
\n",
"
\n",
"
\n",
"
lon
\n",
"
None
\n",
"
\n",
"
\n",
"
title
\n",
"
Cities
\n",
"
\n",
"
\n",
"
url
\n",
"
https://api.meetup.com/2/cities?country=us&off...
\n",
"
\n",
"
\n",
"
id
\n",
"
\n",
"
\n",
"
\n",
"
updated
\n",
"
1263132740000
\n",
"
\n",
"
\n",
"
lat
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0\n",
"next \n",
"method Cities\n",
"total_count 4\n",
"link https://api.meetup.com/2/cities\n",
"count 4\n",
"description Returns Meetup cities. This method supports se...\n",
"lon None\n",
"title Cities\n",
"url https://api.meetup.com/2/cities?country=us&off...\n",
"id \n",
"updated 1263132740000\n",
"lat None"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cities_meta_df, cities_df = parse_response(cities_resp)\n",
"cities_meta_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hmm, a count of 4 cities is suspicious...\n",
"\n",
"I only know of the one San Francisco, why are there 4 cities?"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
city
\n",
"
country
\n",
"
id
\n",
"
lat
\n",
"
localized_country_name
\n",
"
lon
\n",
"
member_count
\n",
"
name_string
\n",
"
ranking
\n",
"
state
\n",
"
zip
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
San Francisco
\n",
"
us
\n",
"
94101
\n",
"
37.779999
\n",
"
USA
\n",
"
-122.419998
\n",
"
60351
\n",
"
San Francisco, California, USA
\n",
"
0
\n",
"
CA
\n",
"
94101
\n",
"
\n",
"
\n",
"
1
\n",
"
Bosque
\n",
"
us
\n",
"
87006
\n",
"
34.560001
\n",
"
USA
\n",
"
-106.779999
\n",
"
5
\n",
"
San Francisco, New Mexico, USA
\n",
"
1
\n",
"
NM
\n",
"
87006
\n",
"
\n",
"
\n",
"
2
\n",
"
San Luis
\n",
"
us
\n",
"
81152
\n",
"
37.080002
\n",
"
USA
\n",
"
-105.620003
\n",
"
4
\n",
"
San Francisco, Colorado, USA
\n",
"
2
\n",
"
CO
\n",
"
81152
\n",
"
\n",
"
\n",
"
3
\n",
"
Reserve
\n",
"
us
\n",
"
87830
\n",
"
33.650002
\n",
"
USA
\n",
"
-108.769997
\n",
"
1
\n",
"
San Francisco Plaza, New Mexico, USA
\n",
"
3
\n",
"
NM
\n",
"
87830
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" city country id lat localized_country_name lon \\\n",
"0 San Francisco us 94101 37.779999 USA -122.419998 \n",
"1 Bosque us 87006 34.560001 USA -106.779999 \n",
"2 San Luis us 81152 37.080002 USA -105.620003 \n",
"3 Reserve us 87830 33.650002 USA -108.769997 \n",
"\n",
" member_count name_string ranking state zip \n",
"0 60351 San Francisco, California, USA 0 CA 94101 \n",
"1 5 San Francisco, New Mexico, USA 1 NM 87006 \n",
"2 4 San Francisco, Colorado, USA 2 CO 81152 \n",
"3 1 San Francisco Plaza, New Mexico, USA 3 NM 87830 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cities_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Oh, there are lots of San Franciscos! \n",
"\n",
"### Let's filter the dataframe with a query to give us only cities in California, US"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
city
\n",
"
country
\n",
"
id
\n",
"
lat
\n",
"
localized_country_name
\n",
"
lon
\n",
"
member_count
\n",
"
name_string
\n",
"
ranking
\n",
"
state
\n",
"
zip
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
San Francisco
\n",
"
us
\n",
"
94101
\n",
"
37.779999
\n",
"
USA
\n",
"
-122.419998
\n",
"
60351
\n",
"
San Francisco, California, USA
\n",
"
0
\n",
"
CA
\n",
"
94101
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" city country id lat localized_country_name lon \\\n",
"0 San Francisco us 94101 37.779999 USA -122.419998 \n",
"\n",
" member_count name_string ranking state zip \n",
"0 60351 San Francisco, California, USA 0 CA 94101 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"single_city_df = cities_df.loc[\n",
" (cities_df['state'] == 'CA')]\n",
"\n",
"single_city_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One San Francisco, perfect! \n",
"\n",
"### Let's store the latitude and longitude for later use as well"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(37.779998779296875, -122.41999816894531)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"latitude = single_city_df['lat'][0]\n",
"longitude = single_city_df['lon'][0]\n",
"latitude, longitude"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Now let's look at groups in San Francisco, CA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Since we are going to grab lots of groups, let's make a function to help us call the API\n",
"\n",
"**Note**: This function will use the **tech_category_id, latitude, and longitude** values that we \n",
"found eariler."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def get_a_group(page_number, category_id=tech_category_id, lat=latitude,\n",
" lon=longitude):\n",
" group = None\n",
" retry_counter, retry_max = 0, 3\n",
" print(f\"Getting page {page_number}\")\n",
" while retry_counter < retry_max:\n",
" try:\n",
" group = client.GetGroups(\n",
" category_id=category_id, lat=lat, lon=lon, offset=page_number)\n",
" return group\n",
" except:\n",
" print(f\"Fetch failure {retry_counter + 1}\")\n",
" retry_counter += 1\n",
"\n",
" raise Exception(f\"Unable to fetch page after {retry_counter} attempts\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Now, After grabbing the first group\n",
"\n",
"Let's review the **meta** to help us see what we are getting into"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
next
\n",
"
https://api.meetup.com/2/groups?offset=1&forma...
\n",
"
\n",
"
\n",
"
method
\n",
"
Groups
\n",
"
\n",
"
\n",
"
total_count
\n",
"
2197
\n",
"
\n",
"
\n",
"
link
\n",
"
https://api.meetup.com/2/groups
\n",
"
\n",
"
\n",
"
count
\n",
"
200
\n",
"
\n",
"
\n",
"
description
\n",
"
None
\n",
"
\n",
"
\n",
"
lon
\n",
"
-122.42
\n",
"
\n",
"
\n",
"
title
\n",
"
Meetup Groups v2
\n",
"
\n",
"
\n",
"
url
\n",
"
https://api.meetup.com/2/groups?offset=0&forma...
\n",
"
\n",
"
\n",
"
id
\n",
"
\n",
"
\n",
"
\n",
"
updated
\n",
"
1550965553000
\n",
"
\n",
"
\n",
"
lat
\n",
"
37.78
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0\n",
"next https://api.meetup.com/2/groups?offset=1&forma...\n",
"method Groups\n",
"total_count 2197\n",
"link https://api.meetup.com/2/groups\n",
"count 200\n",
"description None\n",
"lon -122.42\n",
"title Meetup Groups v2\n",
"url https://api.meetup.com/2/groups?offset=0&forma...\n",
"id \n",
"updated 1550965553000\n",
"lat 37.78"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%%capture --no-display\n",
"group_resp = get_a_group(0)\n",
"group_meta, _ = parse_response(group_resp)\n",
"group_meta"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Wait! There's a meta[\\\"next\\\"].\n",
"\n",
"Remember earlier when I spoke about **response.meta\\[\"next\"\\]**? \n",
"\n",
"It seems as though our result will span mulitple API calls, each returning 200 new groups in \n",
"a **page**.\n",
"\n",
"Let's make a new helper that will grab each **page** in a series of API calls until we obtain the entire data set:\n",
"\n",
"We will use the pandas.DataFrame.[concat] function to collate all pages into a single useful dataframe\n",
"\n",
"[//]: # (References)\n",
"\n",
"[concat]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def get_all_groups_as_a_df():\n",
" \"\"\"Returns a single dataframe composed from data from multiple\n",
" successive calls to get_a_group.\n",
" \n",
" We will loop through get_a_group pages while our page.meta['next'] is \n",
" not the empty string.\n",
" \"\"\"\n",
" page_df_list = []\n",
" next_page = None\n",
" page_number = 0\n",
" while next_page != '': \n",
" page = get_a_group(page_number)\n",
" next_page = page.meta[\"next\"]\n",
" _, frame = parse_response(page)\n",
" page_number += 1\n",
" page_df_list.append(frame)\n",
" \n",
" return pd.concat(page_df_list, ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Getting page 0\n",
"28/30 (5 seconds remaining)\n",
"Getting page 1\n",
"27/30 (3 seconds remaining)\n",
"Getting page 2\n",
"26/30 (3 seconds remaining)\n",
"Getting page 3\n",
"25/30 (2 seconds remaining)\n",
"Getting page 4\n",
"24/30 (1 seconds remaining)\n",
"Getting page 5\n",
"29/30 (10 seconds remaining)\n",
"Getting page 6\n",
"28/30 (9 seconds remaining)\n",
"Getting page 7\n",
"27/30 (8 seconds remaining)\n",
"Getting page 8\n",
"26/30 (7 seconds remaining)\n",
"Getting page 9\n",
"25/30 (6 seconds remaining)\n",
"Getting page 10\n",
"24/30 (5 seconds remaining)\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
category
\n",
"
city
\n",
"
country
\n",
"
created
\n",
"
description
\n",
"
group_photo
\n",
"
id
\n",
"
join_mode
\n",
"
lat
\n",
"
link
\n",
"
...
\n",
"
name
\n",
"
organizer
\n",
"
rating
\n",
"
state
\n",
"
timezone
\n",
"
topics
\n",
"
urlname
\n",
"
utc_offset
\n",
"
visibility
\n",
"
who
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
{'name': 'tech', 'id': 34, 'shortname': 'tech'}
\n",
"
San Francisco
\n",
"
US
\n",
"
1034097740000
\n",
"
<p>The SF PHP Community Meetup is an open foru...
\n",
"
{'highres_link': 'https://secure.meetupstatic....
\n",
"
120903
\n",
"
open
\n",
"
37.77
\n",
"
https://www.meetup.com/sf-php/
\n",
"
...
\n",
"
SF PHP Community
\n",
"
{'member_id': 126468982, 'name': 'Andre Marigo...
\n",
"
4.38
\n",
"
CA
\n",
"
US/Pacific
\n",
"
[{'urlkey': 'php', 'name': 'PHP', 'id': 455}, ...
\n",
"
sf-php
\n",
"
-28800000
\n",
"
public
\n",
"
PHP Developers
\n",
"
\n",
" \n",
"
\n",
"
1 rows × 22 columns
\n",
"
"
],
"text/plain": [
" category city country \\\n",
"0 {'name': 'tech', 'id': 34, 'shortname': 'tech'} San Francisco US \n",
"\n",
" created description \\\n",
"0 1034097740000
The SF PHP Community Meetup is an open foru... \n",
"\n",
" group_photo id join_mode lat \\\n",
"0 {'highres_link': 'https://secure.meetupstatic.... 120903 open 37.77 \n",
"\n",
" link ... name \\\n",
"0 https://www.meetup.com/sf-php/ ... SF PHP Community \n",
"\n",
" organizer rating state timezone \\\n",
"0 {'member_id': 126468982, 'name': 'Andre Marigo... 4.38 CA US/Pacific \n",
"\n",
" topics urlname utc_offset \\\n",
"0 [{'urlkey': 'php', 'name': 'PHP', 'id': 455}, ... sf-php -28800000 \n",
"\n",
" visibility who \n",
"0 public PHP Developers \n",
"\n",
"[1 rows x 22 columns]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Collect all groups into a single dataframe\n",
"all_groups_df = get_all_groups_as_a_df()\n",
"\n",
"# Show the first row in the dataframe\n",
"all_groups_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### That's too many columns\n",
"I really only care about a small list of columns, let's exclude the unneeded columns."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
name
\n",
"
members
\n",
"
rating
\n",
"
join_mode
\n",
"
urlname
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
120903
\n",
"
SF PHP Community
\n",
"
2702
\n",
"
4.38
\n",
"
open
\n",
"
sf-php
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id name members rating join_mode urlname\n",
"0 120903 SF PHP Community 2702 4.38 open sf-php"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"column_list = ['id', 'name', 'members', 'rating', 'join_mode', 'urlname']\n",
"all_groups_df = all_groups_df[column_list]\n",
"all_groups_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's double check the size of our new dataframe"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2197, 6)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_groups_df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That looks just about right:\n",
"* 2197 rows\n",
"* 6 columns\n",
"\n",
"---\n",
"## Explore Members per Group\n",
"\n",
"Each group has a different sized membership, let's explore this first!\n",
"\n",
"\n",
"### Let's start with with a histogram\n",
"\n",
"This visualization should give us a basic idea of how big our groups are."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Using seaborn's distplot function\n",
"plt.rcParams['figure.figsize'] = [11, 6]\n",
"sb.distplot(all_groups_df['members'], kde=False, color=\"g\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### It appears that most groups are relatively small\n",
"\n",
"Let's take a closer look at some basic stats for our data in a tabular \n",
"format for some hard numbers:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
members
\n",
"
\n",
" \n",
" \n",
"
\n",
"
count
\n",
"
2,197.00
\n",
"
\n",
"
\n",
"
mean
\n",
"
811.79
\n",
"
\n",
"
\n",
"
std
\n",
"
1,741.14
\n",
"
\n",
"
\n",
"
min
\n",
"
1.00
\n",
"
\n",
"
\n",
"
25%
\n",
"
86.00
\n",
"
\n",
"
\n",
"
50%
\n",
"
256.00
\n",
"
\n",
"
\n",
"
75%
\n",
"
780.00
\n",
"
\n",
"
\n",
"
max
\n",
"
36,058.00
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" members\n",
"count 2,197.00\n",
"mean 811.79\n",
"std 1,741.14\n",
"min 1.00\n",
"25% 86.00\n",
"50% 256.00\n",
"75% 780.00\n",
"max 36,058.00"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.options.display.float_format = '{:20,.2f}'.format\n",
"all_groups_df[[\"members\"]].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As a table I can see some numbers:\n",
"\n",
"1. It looks like the average group size is about 812 persons.\n",
"2. Half of the group sits at or under 256 members.\n",
"3. The smallest group has a single person.\n",
"4. **the largest group has 36,000+ members!**\n",
"\n",
"What an outlier! But are there other **mega-groups** like this?\n",
"\n",
"### Maybe a box and whisker plot can visualize these stats for us"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.rcParams['figure.figsize'] = [6, 20]\n",
"all_groups_df['members'].plot.box();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wow, there are quite a few **mega-groups**, as indicated by the circles above our top whisker!\n",
"\n",
"---\n",
"\n",
"Why are the groups so big?\n",
"\n",
"In fact...\n",
"\n",
"### What are the 10 biggest tech groups in the area?"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
name
\n",
"
members
\n",
"
\n",
" \n",
" \n",
"
\n",
"
19
\n",
"
Silicon Valley Entrepreneurs & Startups
\n",
"
36058
\n",
"
\n",
"
\n",
"
107
\n",
"
SFHTML5
\n",
"
17718
\n",
"
\n",
"
\n",
"
106
\n",
"
Designers + Geeks
\n",
"
15467
\n",
"
\n",
"
\n",
"
426
\n",
"
SF Data Science
\n",
"
14874
\n",
"
\n",
"
\n",
"
28
\n",
"
The SF JavaScript Meetup
\n",
"
13359
\n",
"
\n",
"
\n",
"
250
\n",
"
Tech in Motion Events: San Francisco
\n",
"
13090
\n",
"
\n",
"
\n",
"
540
\n",
"
Docker Online Meetup
\n",
"
12475
\n",
"
\n",
"
\n",
"
191
\n",
"
SF Data Mining
\n",
"
12378
\n",
"
\n",
"
\n",
"
201
\n",
"
Women Who Code SF
\n",
"
12334
\n",
"
\n",
"
\n",
"
706
\n",
"
SF Big Analytics
\n",
"
11889
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name members\n",
"19 Silicon Valley Entrepreneurs & Startups 36058\n",
"107 SFHTML5 17718\n",
"106 Designers + Geeks 15467\n",
"426 SF Data Science 14874\n",
"28 The SF JavaScript Meetup 13359\n",
"250 Tech in Motion Events: San Francisco 13090\n",
"540 Docker Online Meetup 12475\n",
"191 SF Data Mining 12378\n",
"201 Women Who Code SF 12334\n",
"706 SF Big Analytics 11889"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"biggest_ten_df = all_groups_df.sort_values('members',\n",
" ascending=False).head(10)\n",
"biggest_ten_df[[\"name\", \"members\"]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get Group Events"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### We need to do some data shaping before the next api call\n",
"\n",
"Mostly we need to:\n",
"1. pass in a string with group ids from our 10 biggest groups\n",
"2. convert our human-readable date ranges to milliseconds since Jan 1, 1970\n",
"3. Call the GetEvents API filtering for past events using our group IDs and our date range\n",
"\n",
"#### First, let's make that string of group ids\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'844726,1619955,1615633,9226282,1060260,3483762,13402242,2065031,2252591,18354966'"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"id_list = biggest_ten_df['id'].tolist()\n",
"id_list\n",
"ids = ','.join(str(x) for x in id_list)\n",
"ids"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Now, let's get the epoch milliseconds for a date range between now and 9 months ago"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Now: 1550937159472, nine months ago: 1535385159472\n"
]
}
],
"source": [
"def to_millis(dt):\n",
" return int(pd.to_datetime(dt).value / 1000000)\n",
"\n",
"right_now = to_millis(datetime.datetime.now())\n",
"nine_months_ago = int(right_now - 180 * 24 * 60 * 60 * 1000)\n",
"print(f\"Now: {right_now}, nine months ago: {nine_months_ago}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Finally, let's look at those events."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"%%capture --no-display\n",
"events_resp = client.GetEvents(group_id=ids, status='past',\n",
" time=f\"{nine_months_ago},{right_now}\");\n",
"\n",
"events_meta, events_df = parse_response(events_resp)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Again, our events_df dataframe has extra columns that I don't care about"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
Demo Session is free to meetup attendees. U... 7200000 \n",
"\n",
" event_url \\\n",
"0 https://www.meetup.com/sventrepreneurs/events/... \n",
"\n",
" group headcount \\\n",
"0 {'join_mode': 'open', 'created': 1196203591000... 0 \n",
"\n",
" how_to_find_us id maybe_rsvp_count \\\n",
"0 NaN 253824506 0 \n",
"\n",
" name ... \\\n",
"0 Demo Session @ Mars Blockchain Summit by Mars ... ... \n",
"\n",
" rating rsvp_limit status time \\\n",
"0 {'count': 0, 'average': 0} nan past 1535495400000 \n",
"\n",
" updated utc_offset \\\n",
"0 1535527171000 -25200000 \n",
"\n",
" venue visibility \\\n",
"0 {'country': 'us', 'localized_country_name': 'U... public \n",
"\n",
" waitlist_count yes_rsvp_count \n",
"0 0 66 \n",
"\n",
"[1 rows x 21 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"events_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### So again, let's filter down to just what's relevant"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
group
\n",
"
time
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
{'join_mode': 'open', 'created': 1196203591000...
\n",
"
1535495400000
\n",
"
7200000
\n",
"
66
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" group time duration \\\n",
"0 {'join_mode': 'open', 'created': 1196203591000... 1535495400000 7200000 \n",
"\n",
" yes_rsvp_count \n",
"0 66 "
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"column_list = ['group', 'time', 'duration', 'yes_rsvp_count']\n",
"events_df = events_df[column_list]\n",
"events_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The group column\n",
"\n",
"The **group** column is actually a JSON object full of metadata about the group.\n",
"\n",
"I really only need the **group\\[\"id\"\\]** for now, so let's focus on that."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
time
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
844726
\n",
"
1535495400000
\n",
"
7200000
\n",
"
66
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id time duration yes_rsvp_count\n",
"0 844726 1535495400000 7200000 66"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def get_id(my_dict):\n",
" \"\"\"Extract the id member of a python dictionary\"\"\"\n",
" return my_dict[\"id\"]\n",
"\n",
"events_df[\"id\"] = events_df[\"group\"].apply(get_id)\n",
"\n",
"# Let's \n",
"columns = ['id', 'time', 'duration', 'yes_rsvp_count']\n",
"events_df = events_df[columns]\n",
"events_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hmm, it seems that our **time** is numeric\n",
"\n",
"The **time** is stored in **Epoch milliseconds** format.\n",
"\n",
"This is great if you want to see time as the number of milliseconds since Jan 1, 1970.\n",
"\n",
"This is not-so-great if you just want to see a human-readable date and time equivalent.\n",
"\n",
"Let's make a new human-readable column called **time_dt**"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
time
\n",
"
time_dt
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
844726
\n",
"
1535495400000
\n",
"
08/28/18 22:30
\n",
"
7200000
\n",
"
66
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id time time_dt duration yes_rsvp_count\n",
"0 844726 1535495400000 08/28/18 22:30 7200000 66"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"events_df[\"time_dt\"] = pd.to_datetime(\n",
" events_df[\"time\"], unit='ms').dt.strftime('%m/%d/%y %H:%M')\n",
" \n",
"columns = ['id', 'time','time_dt', 'duration', 'yes_rsvp_count']\n",
"events_df = events_df[columns]\n",
"events_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Now let's convert the duration column to something human-readable\n",
"\n",
"Let's convert the column to a string that shows hours and minutes."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
time
\n",
"
time_dt
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
844726
\n",
"
1535495400000
\n",
"
08/28/18 22:30
\n",
"
2 hours, 0 minutes
\n",
"
66
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id time time_dt duration yes_rsvp_count\n",
"0 844726 1535495400000 08/28/18 22:30 2 hours, 0 minutes 66"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def millis_2_hours_and_minutes(ms):\n",
" \"\"\"Converts milliseconds to hours and minutes.\"\"\"\n",
" seconds = ms / 1000\n",
" minutes, seconds = divmod(seconds, 60)\n",
" hours, minutes = divmod(minutes, 60)\n",
"\n",
" return f\"{int(hours)} hours, {int(minutes)} minutes\" \n",
"\n",
"events_df[\"duration\"] = events_df[\"duration\"].apply(\n",
" millis_2_hours_and_minutes)\n",
"\n",
"events_df.head(1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Now let's join our top ten mega-groups dataframe with our events dataframe\n",
"\n",
"If you are familiar with SQL this is similar to a left join from **raw_results_df**\n",
"to **biggest_ten_df** on **id**\n",
"\n",
"Then we sort the output by **name** ascending and then **time** descending."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
name
\n",
"
time
\n",
"
time_dt
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
id
\n",
"
\n",
" \n",
" \n",
"
\n",
"
101
\n",
"
Designers + Geeks
\n",
"
1550804400000
\n",
"
02/22/19 03:00
\n",
"
2 hours, 0 minutes
\n",
"
178
\n",
"
1615633
\n",
"
\n",
"
\n",
"
55
\n",
"
Designers + Geeks
\n",
"
1542337200000
\n",
"
11/16/18 03:00
\n",
"
2 hours, 0 minutes
\n",
"
71
\n",
"
1615633
\n",
"
\n",
"
\n",
"
46
\n",
"
Designers + Geeks
\n",
"
1541124000000
\n",
"
11/02/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
71
\n",
"
1615633
\n",
"
\n",
"
\n",
"
32
\n",
"
Designers + Geeks
\n",
"
1539914400000
\n",
"
10/19/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
41
\n",
"
1615633
\n",
"
\n",
"
\n",
"
24
\n",
"
Designers + Geeks
\n",
"
1538704800000
\n",
"
10/05/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
29
\n",
"
1615633
\n",
"
\n",
"
\n",
"
14
\n",
"
Designers + Geeks
\n",
"
1537495200000
\n",
"
09/21/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
37
\n",
"
1615633
\n",
"
\n",
"
\n",
"
4
\n",
"
Designers + Geeks
\n",
"
1536285600000
\n",
"
09/07/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
87
\n",
"
1615633
\n",
"
\n",
"
\n",
"
40
\n",
"
Docker Online Meetup
\n",
"
1540915200000
\n",
"
10/30/18 16:00
\n",
"
1 hours, 0 minutes
\n",
"
1
\n",
"
13402242
\n",
"
\n",
"
\n",
"
97
\n",
"
SF Big Analytics
\n",
"
1549591200000
\n",
"
02/08/19 02:00
\n",
"
2 hours, 30 minutes
\n",
"
418
\n",
"
18354966
\n",
"
\n",
"
\n",
"
80
\n",
"
SF Big Analytics
\n",
"
1547690400000
\n",
"
01/17/19 02:00
\n",
"
3 hours, 0 minutes
\n",
"
450
\n",
"
18354966
\n",
"
\n",
"
\n",
"
78
\n",
"
SF Big Analytics
\n",
"
1547604000000
\n",
"
01/16/19 02:00
\n",
"
3 hours, 0 minutes
\n",
"
5
\n",
"
18354966
\n",
"
\n",
"
\n",
"
64
\n",
"
SF Big Analytics
\n",
"
1544061600000
\n",
"
12/06/18 02:00
\n",
"
3 hours, 0 minutes
\n",
"
7
\n",
"
18354966
\n",
"
\n",
"
\n",
"
53
\n",
"
SF Big Analytics
\n",
"
1542247200000
\n",
"
11/15/18 02:00
\n",
"
3 hours, 0 minutes
\n",
"
16
\n",
"
18354966
\n",
"
\n",
"
\n",
"
51
\n",
"
SF Big Analytics
\n",
"
1542160800000
\n",
"
11/14/18 02:00
\n",
"
2 hours, 30 minutes
\n",
"
478
\n",
"
18354966
\n",
"
\n",
"
\n",
"
50
\n",
"
SF Big Analytics
\n",
"
1541782800000
\n",
"
11/09/18 17:00
\n",
"
57 hours, 0 minutes
\n",
"
16
\n",
"
18354966
\n",
"
\n",
"
\n",
"
44
\n",
"
SF Big Analytics
\n",
"
1541120400000
\n",
"
11/02/18 01:00
\n",
"
3 hours, 0 minutes
\n",
"
152
\n",
"
18354966
\n",
"
\n",
"
\n",
"
29
\n",
"
SF Big Analytics
\n",
"
1539909000000
\n",
"
10/19/18 00:30
\n",
"
2 hours, 30 minutes
\n",
"
390
\n",
"
18354966
\n",
"
\n",
"
\n",
"
16
\n",
"
SF Big Analytics
\n",
"
1538010000000
\n",
"
09/27/18 01:00
\n",
"
2 hours, 45 minutes
\n",
"
245
\n",
"
18354966
\n",
"
\n",
"
\n",
"
8
\n",
"
SF Big Analytics
\n",
"
1536800400000
\n",
"
09/13/18 01:00
\n",
"
2 hours, 30 minutes
\n",
"
218
\n",
"
18354966
\n",
"
\n",
"
\n",
"
10
\n",
"
SF Data Mining
\n",
"
1537200000000
\n",
"
09/17/18 16:00
\n",
"
104 hours, 0 minutes
\n",
"
6
\n",
"
2065031
\n",
"
\n",
"
\n",
"
93
\n",
"
SF Data Science
\n",
"
1548988200000
\n",
"
02/01/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
94
\n",
"
9226282
\n",
"
\n",
"
\n",
"
89
\n",
"
SF Data Science
\n",
"
1548383400000
\n",
"
01/25/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
48
\n",
"
9226282
\n",
"
\n",
"
\n",
"
82
\n",
"
SF Data Science
\n",
"
1547778600000
\n",
"
01/18/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
26
\n",
"
9226282
\n",
"
\n",
"
\n",
"
81
\n",
"
SF Data Science
\n",
"
1547692200000
\n",
"
01/17/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
59
\n",
"
9226282
\n",
"
\n",
"
\n",
"
60
\n",
"
SF Data Science
\n",
"
1543539600000
\n",
"
11/30/18 01:00
\n",
"
3 hours, 30 minutes
\n",
"
18
\n",
"
9226282
\n",
"
\n",
"
\n",
"
52
\n",
"
SF Data Science
\n",
"
1542211200000
\n",
"
11/14/18 16:00
\n",
"
10 hours, 0 minutes
\n",
"
1
\n",
"
9226282
\n",
"
\n",
"
\n",
"
38
\n",
"
SF Data Science
\n",
"
1540774800000
\n",
"
10/29/18 01:00
\n",
"
4 hours, 0 minutes
\n",
"
21
\n",
"
9226282
\n",
"
\n",
"
\n",
"
30
\n",
"
SF Data Science
\n",
"
1539910800000
\n",
"
10/19/18 01:00
\n",
"
2 hours, 0 minutes
\n",
"
95
\n",
"
9226282
\n",
"
\n",
"
\n",
"
26
\n",
"
SF Data Science
\n",
"
1539306000000
\n",
"
10/12/18 01:00
\n",
"
3 hours, 0 minutes
\n",
"
15
\n",
"
9226282
\n",
"
\n",
"
\n",
"
102
\n",
"
SFHTML5
\n",
"
1550883600000
\n",
"
02/23/19 01:00
\n",
"
4 hours, 0 minutes
\n",
"
336
\n",
"
1619955
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
95
\n",
"
Women Who Code SF
\n",
"
1549420200000
\n",
"
02/06/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
47
\n",
"
2252591
\n",
"
\n",
"
\n",
"
92
\n",
"
Women Who Code SF
\n",
"
1548815400000
\n",
"
01/30/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
37
\n",
"
2252591
\n",
"
\n",
"
\n",
"
86
\n",
"
Women Who Code SF
\n",
"
1548210600000
\n",
"
01/23/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
29
\n",
"
2252591
\n",
"
\n",
"
\n",
"
79
\n",
"
Women Who Code SF
\n",
"
1547605800000
\n",
"
01/16/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
32
\n",
"
2252591
\n",
"
\n",
"
\n",
"
76
\n",
"
Women Who Code SF
\n",
"
1547001000000
\n",
"
01/09/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
57
\n",
"
2252591
\n",
"
\n",
"
\n",
"
71
\n",
"
Women Who Code SF
\n",
"
1545271200000
\n",
"
12/20/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
199
\n",
"
2252591
\n",
"
\n",
"
\n",
"
69
\n",
"
Women Who Code SF
\n",
"
1545186600000
\n",
"
12/19/18 02:30
\n",
"
1 hours, 30 minutes
\n",
"
50
\n",
"
2252591
\n",
"
\n",
"
\n",
"
70
\n",
"
Women Who Code SF
\n",
"
1545186600000
\n",
"
12/19/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
23
\n",
"
2252591
\n",
"
\n",
"
\n",
"
67
\n",
"
Women Who Code SF
\n",
"
1544581800000
\n",
"
12/12/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
22
\n",
"
2252591
\n",
"
\n",
"
\n",
"
65
\n",
"
Women Who Code SF
\n",
"
1544149800000
\n",
"
12/07/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
17
\n",
"
2252591
\n",
"
\n",
"
\n",
"
63
\n",
"
Women Who Code SF
\n",
"
1543977000000
\n",
"
12/05/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
29
\n",
"
2252591
\n",
"
\n",
"
\n",
"
62
\n",
"
Women Who Code SF
\n",
"
1543975200000
\n",
"
12/05/18 02:00
\n",
"
3 hours, 0 minutes
\n",
"
1
\n",
"
2252591
\n",
"
\n",
"
\n",
"
58
\n",
"
Women Who Code SF
\n",
"
1542767400000
\n",
"
11/21/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
31
\n",
"
2252591
\n",
"
\n",
"
\n",
"
54
\n",
"
Women Who Code SF
\n",
"
1542335400000
\n",
"
11/16/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
50
\n",
"
2252591
\n",
"
\n",
"
\n",
"
49
\n",
"
Women Who Code SF
\n",
"
1541557800000
\n",
"
11/07/18 02:30
\n",
"
2 hours, 0 minutes
\n",
"
27
\n",
"
2252591
\n",
"
\n",
"
\n",
"
45
\n",
"
Women Who Code SF
\n",
"
1541122200000
\n",
"
11/02/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
50
\n",
"
2252591
\n",
"
\n",
"
\n",
"
43
\n",
"
Women Who Code SF
\n",
"
1540949400000
\n",
"
10/31/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
29
\n",
"
2252591
\n",
"
\n",
"
\n",
"
39
\n",
"
Women Who Code SF
\n",
"
1540859400000
\n",
"
10/30/18 00:30
\n",
"
2 hours, 30 minutes
\n",
"
64
\n",
"
2252591
\n",
"
\n",
"
\n",
"
34
\n",
"
Women Who Code SF
\n",
"
1540400400000
\n",
"
10/24/18 17:00
\n",
"
1 hours, 0 minutes
\n",
"
2
\n",
"
2252591
\n",
"
\n",
"
\n",
"
33
\n",
"
Women Who Code SF
\n",
"
1540344600000
\n",
"
10/24/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
36
\n",
"
2252591
\n",
"
\n",
"
\n",
"
31
\n",
"
Women Who Code SF
\n",
"
1539912600000
\n",
"
10/19/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
50
\n",
"
2252591
\n",
"
\n",
"
\n",
"
25
\n",
"
Women Who Code SF
\n",
"
1539135000000
\n",
"
10/10/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
25
\n",
"
2252591
\n",
"
\n",
"
\n",
"
23
\n",
"
Women Who Code SF
\n",
"
1538703000000
\n",
"
10/05/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
50
\n",
"
2252591
\n",
"
\n",
"
\n",
"
21
\n",
"
Women Who Code SF
\n",
"
1538530200000
\n",
"
10/03/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
10
\n",
"
2252591
\n",
"
\n",
"
\n",
"
22
\n",
"
Women Who Code SF
\n",
"
1538530200000
\n",
"
10/03/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
27
\n",
"
2252591
\n",
"
\n",
"
\n",
"
13
\n",
"
Women Who Code SF
\n",
"
1537493400000
\n",
"
09/21/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
33
\n",
"
2252591
\n",
"
\n",
"
\n",
"
11
\n",
"
Women Who Code SF
\n",
"
1537320600000
\n",
"
09/19/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
14
\n",
"
2252591
\n",
"
\n",
"
\n",
"
9
\n",
"
Women Who Code SF
\n",
"
1537030800000
\n",
"
09/15/18 17:00
\n",
"
3 hours, 0 minutes
\n",
"
10
\n",
"
2252591
\n",
"
\n",
"
\n",
"
7
\n",
"
Women Who Code SF
\n",
"
1536715800000
\n",
"
09/12/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
25
\n",
"
2252591
\n",
"
\n",
"
\n",
"
1
\n",
"
Women Who Code SF
\n",
"
1535506200000
\n",
"
08/29/18 01:30
\n",
"
2 hours, 0 minutes
\n",
"
35
\n",
"
2252591
\n",
"
\n",
" \n",
"
\n",
"
103 rows × 6 columns
\n",
"
"
],
"text/plain": [
" name time time_dt \\\n",
"101 Designers + Geeks 1550804400000 02/22/19 03:00 \n",
"55 Designers + Geeks 1542337200000 11/16/18 03:00 \n",
"46 Designers + Geeks 1541124000000 11/02/18 02:00 \n",
"32 Designers + Geeks 1539914400000 10/19/18 02:00 \n",
"24 Designers + Geeks 1538704800000 10/05/18 02:00 \n",
"14 Designers + Geeks 1537495200000 09/21/18 02:00 \n",
"4 Designers + Geeks 1536285600000 09/07/18 02:00 \n",
"40 Docker Online Meetup 1540915200000 10/30/18 16:00 \n",
"97 SF Big Analytics 1549591200000 02/08/19 02:00 \n",
"80 SF Big Analytics 1547690400000 01/17/19 02:00 \n",
"78 SF Big Analytics 1547604000000 01/16/19 02:00 \n",
"64 SF Big Analytics 1544061600000 12/06/18 02:00 \n",
"53 SF Big Analytics 1542247200000 11/15/18 02:00 \n",
"51 SF Big Analytics 1542160800000 11/14/18 02:00 \n",
"50 SF Big Analytics 1541782800000 11/09/18 17:00 \n",
"44 SF Big Analytics 1541120400000 11/02/18 01:00 \n",
"29 SF Big Analytics 1539909000000 10/19/18 00:30 \n",
"16 SF Big Analytics 1538010000000 09/27/18 01:00 \n",
"8 SF Big Analytics 1536800400000 09/13/18 01:00 \n",
"10 SF Data Mining 1537200000000 09/17/18 16:00 \n",
"93 SF Data Science 1548988200000 02/01/19 02:30 \n",
"89 SF Data Science 1548383400000 01/25/19 02:30 \n",
"82 SF Data Science 1547778600000 01/18/19 02:30 \n",
"81 SF Data Science 1547692200000 01/17/19 02:30 \n",
"60 SF Data Science 1543539600000 11/30/18 01:00 \n",
"52 SF Data Science 1542211200000 11/14/18 16:00 \n",
"38 SF Data Science 1540774800000 10/29/18 01:00 \n",
"30 SF Data Science 1539910800000 10/19/18 01:00 \n",
"26 SF Data Science 1539306000000 10/12/18 01:00 \n",
"102 SFHTML5 1550883600000 02/23/19 01:00 \n",
".. ... ... ... \n",
"95 Women Who Code SF 1549420200000 02/06/19 02:30 \n",
"92 Women Who Code SF 1548815400000 01/30/19 02:30 \n",
"86 Women Who Code SF 1548210600000 01/23/19 02:30 \n",
"79 Women Who Code SF 1547605800000 01/16/19 02:30 \n",
"76 Women Who Code SF 1547001000000 01/09/19 02:30 \n",
"71 Women Who Code SF 1545271200000 12/20/18 02:00 \n",
"69 Women Who Code SF 1545186600000 12/19/18 02:30 \n",
"70 Women Who Code SF 1545186600000 12/19/18 02:30 \n",
"67 Women Who Code SF 1544581800000 12/12/18 02:30 \n",
"65 Women Who Code SF 1544149800000 12/07/18 02:30 \n",
"63 Women Who Code SF 1543977000000 12/05/18 02:30 \n",
"62 Women Who Code SF 1543975200000 12/05/18 02:00 \n",
"58 Women Who Code SF 1542767400000 11/21/18 02:30 \n",
"54 Women Who Code SF 1542335400000 11/16/18 02:30 \n",
"49 Women Who Code SF 1541557800000 11/07/18 02:30 \n",
"45 Women Who Code SF 1541122200000 11/02/18 01:30 \n",
"43 Women Who Code SF 1540949400000 10/31/18 01:30 \n",
"39 Women Who Code SF 1540859400000 10/30/18 00:30 \n",
"34 Women Who Code SF 1540400400000 10/24/18 17:00 \n",
"33 Women Who Code SF 1540344600000 10/24/18 01:30 \n",
"31 Women Who Code SF 1539912600000 10/19/18 01:30 \n",
"25 Women Who Code SF 1539135000000 10/10/18 01:30 \n",
"23 Women Who Code SF 1538703000000 10/05/18 01:30 \n",
"21 Women Who Code SF 1538530200000 10/03/18 01:30 \n",
"22 Women Who Code SF 1538530200000 10/03/18 01:30 \n",
"13 Women Who Code SF 1537493400000 09/21/18 01:30 \n",
"11 Women Who Code SF 1537320600000 09/19/18 01:30 \n",
"9 Women Who Code SF 1537030800000 09/15/18 17:00 \n",
"7 Women Who Code SF 1536715800000 09/12/18 01:30 \n",
"1 Women Who Code SF 1535506200000 08/29/18 01:30 \n",
"\n",
" duration yes_rsvp_count id \n",
"101 2 hours, 0 minutes 178 1615633 \n",
"55 2 hours, 0 minutes 71 1615633 \n",
"46 2 hours, 0 minutes 71 1615633 \n",
"32 2 hours, 0 minutes 41 1615633 \n",
"24 2 hours, 0 minutes 29 1615633 \n",
"14 2 hours, 0 minutes 37 1615633 \n",
"4 2 hours, 0 minutes 87 1615633 \n",
"40 1 hours, 0 minutes 1 13402242 \n",
"97 2 hours, 30 minutes 418 18354966 \n",
"80 3 hours, 0 minutes 450 18354966 \n",
"78 3 hours, 0 minutes 5 18354966 \n",
"64 3 hours, 0 minutes 7 18354966 \n",
"53 3 hours, 0 minutes 16 18354966 \n",
"51 2 hours, 30 minutes 478 18354966 \n",
"50 57 hours, 0 minutes 16 18354966 \n",
"44 3 hours, 0 minutes 152 18354966 \n",
"29 2 hours, 30 minutes 390 18354966 \n",
"16 2 hours, 45 minutes 245 18354966 \n",
"8 2 hours, 30 minutes 218 18354966 \n",
"10 104 hours, 0 minutes 6 2065031 \n",
"93 2 hours, 0 minutes 94 9226282 \n",
"89 2 hours, 0 minutes 48 9226282 \n",
"82 2 hours, 0 minutes 26 9226282 \n",
"81 2 hours, 0 minutes 59 9226282 \n",
"60 3 hours, 30 minutes 18 9226282 \n",
"52 10 hours, 0 minutes 1 9226282 \n",
"38 4 hours, 0 minutes 21 9226282 \n",
"30 2 hours, 0 minutes 95 9226282 \n",
"26 3 hours, 0 minutes 15 9226282 \n",
"102 4 hours, 0 minutes 336 1619955 \n",
".. ... ... ... \n",
"95 2 hours, 0 minutes 47 2252591 \n",
"92 2 hours, 0 minutes 37 2252591 \n",
"86 2 hours, 0 minutes 29 2252591 \n",
"79 2 hours, 0 minutes 32 2252591 \n",
"76 2 hours, 0 minutes 57 2252591 \n",
"71 2 hours, 0 minutes 199 2252591 \n",
"69 1 hours, 30 minutes 50 2252591 \n",
"70 2 hours, 0 minutes 23 2252591 \n",
"67 2 hours, 0 minutes 22 2252591 \n",
"65 2 hours, 0 minutes 17 2252591 \n",
"63 2 hours, 0 minutes 29 2252591 \n",
"62 3 hours, 0 minutes 1 2252591 \n",
"58 2 hours, 0 minutes 31 2252591 \n",
"54 2 hours, 0 minutes 50 2252591 \n",
"49 2 hours, 0 minutes 27 2252591 \n",
"45 2 hours, 0 minutes 50 2252591 \n",
"43 2 hours, 0 minutes 29 2252591 \n",
"39 2 hours, 30 minutes 64 2252591 \n",
"34 1 hours, 0 minutes 2 2252591 \n",
"33 2 hours, 0 minutes 36 2252591 \n",
"31 2 hours, 0 minutes 50 2252591 \n",
"25 2 hours, 0 minutes 25 2252591 \n",
"23 2 hours, 0 minutes 50 2252591 \n",
"21 2 hours, 0 minutes 10 2252591 \n",
"22 2 hours, 0 minutes 27 2252591 \n",
"13 2 hours, 0 minutes 33 2252591 \n",
"11 2 hours, 0 minutes 14 2252591 \n",
"9 3 hours, 0 minutes 10 2252591 \n",
"7 2 hours, 0 minutes 25 2252591 \n",
"1 2 hours, 0 minutes 35 2252591 \n",
"\n",
"[103 rows x 6 columns]"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged_df = pd.merge(\n",
" events_df,\n",
" biggest_ten_df[['id', 'name']],\n",
" on='id',\n",
" how='left')\n",
"\n",
"columns = ['name', 'time', 'time_dt', 'duration', 'yes_rsvp_count', 'id']\n",
"final_df = merged_df[columns]\n",
"\n",
"# Sort the output by name and time\n",
"final_df = final_df.sort_values(by=['name', 'time'], ascending=[True, False])\n",
"final_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hmm, those ID numbers are numeric, but take a while to type\n",
"\n",
"Let's convert those to something easier.\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
name
\n",
"
time
\n",
"
time_dt
\n",
"
duration
\n",
"
yes_rsvp_count
\n",
"
id
\n",
"
\n",
" \n",
" \n",
"
\n",
"
101
\n",
"
Designers + Geeks
\n",
"
1550804400000
\n",
"
02/22/19 03:00
\n",
"
2 hours, 0 minutes
\n",
"
178
\n",
"
0
\n",
"
\n",
"
\n",
"
55
\n",
"
Designers + Geeks
\n",
"
1542337200000
\n",
"
11/16/18 03:00
\n",
"
2 hours, 0 minutes
\n",
"
71
\n",
"
0
\n",
"
\n",
"
\n",
"
46
\n",
"
Designers + Geeks
\n",
"
1541124000000
\n",
"
11/02/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
71
\n",
"
0
\n",
"
\n",
"
\n",
"
32
\n",
"
Designers + Geeks
\n",
"
1539914400000
\n",
"
10/19/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
41
\n",
"
0
\n",
"
\n",
"
\n",
"
24
\n",
"
Designers + Geeks
\n",
"
1538704800000
\n",
"
10/05/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
29
\n",
"
0
\n",
"
\n",
"
\n",
"
14
\n",
"
Designers + Geeks
\n",
"
1537495200000
\n",
"
09/21/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
37
\n",
"
0
\n",
"
\n",
"
\n",
"
4
\n",
"
Designers + Geeks
\n",
"
1536285600000
\n",
"
09/07/18 02:00
\n",
"
2 hours, 0 minutes
\n",
"
87
\n",
"
0
\n",
"
\n",
"
\n",
"
40
\n",
"
Docker Online Meetup
\n",
"
1540915200000
\n",
"
10/30/18 16:00
\n",
"
1 hours, 0 minutes
\n",
"
1
\n",
"
1
\n",
"
\n",
"
\n",
"
97
\n",
"
SF Big Analytics
\n",
"
1549591200000
\n",
"
02/08/19 02:00
\n",
"
2 hours, 30 minutes
\n",
"
418
\n",
"
2
\n",
"
\n",
"
\n",
"
80
\n",
"
SF Big Analytics
\n",
"
1547690400000
\n",
"
01/17/19 02:00
\n",
"
3 hours, 0 minutes
\n",
"
450
\n",
"
2
\n",
"
\n",
"
\n",
"
78
\n",
"
SF Big Analytics
\n",
"
1547604000000
\n",
"
01/16/19 02:00
\n",
"
3 hours, 0 minutes
\n",
"
5
\n",
"
2
\n",
"
\n",
"
\n",
"
64
\n",
"
SF Big Analytics
\n",
"
1544061600000
\n",
"
12/06/18 02:00
\n",
"
3 hours, 0 minutes
\n",
"
7
\n",
"
2
\n",
"
\n",
"
\n",
"
53
\n",
"
SF Big Analytics
\n",
"
1542247200000
\n",
"
11/15/18 02:00
\n",
"
3 hours, 0 minutes
\n",
"
16
\n",
"
2
\n",
"
\n",
"
\n",
"
51
\n",
"
SF Big Analytics
\n",
"
1542160800000
\n",
"
11/14/18 02:00
\n",
"
2 hours, 30 minutes
\n",
"
478
\n",
"
2
\n",
"
\n",
"
\n",
"
50
\n",
"
SF Big Analytics
\n",
"
1541782800000
\n",
"
11/09/18 17:00
\n",
"
57 hours, 0 minutes
\n",
"
16
\n",
"
2
\n",
"
\n",
"
\n",
"
44
\n",
"
SF Big Analytics
\n",
"
1541120400000
\n",
"
11/02/18 01:00
\n",
"
3 hours, 0 minutes
\n",
"
152
\n",
"
2
\n",
"
\n",
"
\n",
"
29
\n",
"
SF Big Analytics
\n",
"
1539909000000
\n",
"
10/19/18 00:30
\n",
"
2 hours, 30 minutes
\n",
"
390
\n",
"
2
\n",
"
\n",
"
\n",
"
16
\n",
"
SF Big Analytics
\n",
"
1538010000000
\n",
"
09/27/18 01:00
\n",
"
2 hours, 45 minutes
\n",
"
245
\n",
"
2
\n",
"
\n",
"
\n",
"
8
\n",
"
SF Big Analytics
\n",
"
1536800400000
\n",
"
09/13/18 01:00
\n",
"
2 hours, 30 minutes
\n",
"
218
\n",
"
2
\n",
"
\n",
"
\n",
"
10
\n",
"
SF Data Mining
\n",
"
1537200000000
\n",
"
09/17/18 16:00
\n",
"
104 hours, 0 minutes
\n",
"
6
\n",
"
3
\n",
"
\n",
"
\n",
"
93
\n",
"
SF Data Science
\n",
"
1548988200000
\n",
"
02/01/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
94
\n",
"
4
\n",
"
\n",
"
\n",
"
89
\n",
"
SF Data Science
\n",
"
1548383400000
\n",
"
01/25/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
48
\n",
"
4
\n",
"
\n",
"
\n",
"
82
\n",
"
SF Data Science
\n",
"
1547778600000
\n",
"
01/18/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
26
\n",
"
4
\n",
"
\n",
"
\n",
"
81
\n",
"
SF Data Science
\n",
"
1547692200000
\n",
"
01/17/19 02:30
\n",
"
2 hours, 0 minutes
\n",
"
59
\n",
"
4
\n",
"
\n",
"
\n",
"
60
\n",
"
SF Data Science
\n",
"
1543539600000
\n",
"
11/30/18 01:00
\n",
"
3 hours, 30 minutes
\n",
"
18
\n",
"
4
\n",
"
\n",
"
\n",
"
52
\n",
"
SF Data Science
\n",
"
1542211200000
\n",
"
11/14/18 16:00
\n",
"
10 hours, 0 minutes
\n",
"
1
\n",
"
4
\n",
"
\n",
"
\n",
"
38
\n",
"
SF Data Science
\n",
"
1540774800000
\n",
"
10/29/18 01:00
\n",
"
4 hours, 0 minutes
\n",
"
21
\n",
"
4
\n",
"
\n",
"
\n",
"
30
\n",
"
SF Data Science
\n",
"
1539910800000
\n",
"
10/19/18 01:00
\n",
"
2 hours, 0 minutes
\n",
"
95
\n",
"
4
\n",
"
\n",
"
\n",
"
26
\n",
"
SF Data Science
\n",
"
1539306000000
\n",
"
10/12/18 01:00
\n",
"
3 hours, 0 minutes
\n",
"
15
\n",
"
4
\n",
"
\n",
"
\n",
"
102
\n",
"
SFHTML5
\n",
"
1550883600000
\n",
"
02/23/19 01:00
\n",
"
4 hours, 0 minutes
\n",
"
336
\n",
"
5
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name time time_dt \\\n",
"101 Designers + Geeks 1550804400000 02/22/19 03:00 \n",
"55 Designers + Geeks 1542337200000 11/16/18 03:00 \n",
"46 Designers + Geeks 1541124000000 11/02/18 02:00 \n",
"32 Designers + Geeks 1539914400000 10/19/18 02:00 \n",
"24 Designers + Geeks 1538704800000 10/05/18 02:00 \n",
"14 Designers + Geeks 1537495200000 09/21/18 02:00 \n",
"4 Designers + Geeks 1536285600000 09/07/18 02:00 \n",
"40 Docker Online Meetup 1540915200000 10/30/18 16:00 \n",
"97 SF Big Analytics 1549591200000 02/08/19 02:00 \n",
"80 SF Big Analytics 1547690400000 01/17/19 02:00 \n",
"78 SF Big Analytics 1547604000000 01/16/19 02:00 \n",
"64 SF Big Analytics 1544061600000 12/06/18 02:00 \n",
"53 SF Big Analytics 1542247200000 11/15/18 02:00 \n",
"51 SF Big Analytics 1542160800000 11/14/18 02:00 \n",
"50 SF Big Analytics 1541782800000 11/09/18 17:00 \n",
"44 SF Big Analytics 1541120400000 11/02/18 01:00 \n",
"29 SF Big Analytics 1539909000000 10/19/18 00:30 \n",
"16 SF Big Analytics 1538010000000 09/27/18 01:00 \n",
"8 SF Big Analytics 1536800400000 09/13/18 01:00 \n",
"10 SF Data Mining 1537200000000 09/17/18 16:00 \n",
"93 SF Data Science 1548988200000 02/01/19 02:30 \n",
"89 SF Data Science 1548383400000 01/25/19 02:30 \n",
"82 SF Data Science 1547778600000 01/18/19 02:30 \n",
"81 SF Data Science 1547692200000 01/17/19 02:30 \n",
"60 SF Data Science 1543539600000 11/30/18 01:00 \n",
"52 SF Data Science 1542211200000 11/14/18 16:00 \n",
"38 SF Data Science 1540774800000 10/29/18 01:00 \n",
"30 SF Data Science 1539910800000 10/19/18 01:00 \n",
"26 SF Data Science 1539306000000 10/12/18 01:00 \n",
"102 SFHTML5 1550883600000 02/23/19 01:00 \n",
"\n",
" duration yes_rsvp_count id \n",
"101 2 hours, 0 minutes 178 0 \n",
"55 2 hours, 0 minutes 71 0 \n",
"46 2 hours, 0 minutes 71 0 \n",
"32 2 hours, 0 minutes 41 0 \n",
"24 2 hours, 0 minutes 29 0 \n",
"14 2 hours, 0 minutes 37 0 \n",
"4 2 hours, 0 minutes 87 0 \n",
"40 1 hours, 0 minutes 1 1 \n",
"97 2 hours, 30 minutes 418 2 \n",
"80 3 hours, 0 minutes 450 2 \n",
"78 3 hours, 0 minutes 5 2 \n",
"64 3 hours, 0 minutes 7 2 \n",
"53 3 hours, 0 minutes 16 2 \n",
"51 2 hours, 30 minutes 478 2 \n",
"50 57 hours, 0 minutes 16 2 \n",
"44 3 hours, 0 minutes 152 2 \n",
"29 2 hours, 30 minutes 390 2 \n",
"16 2 hours, 45 minutes 245 2 \n",
"8 2 hours, 30 minutes 218 2 \n",
"10 104 hours, 0 minutes 6 3 \n",
"93 2 hours, 0 minutes 94 4 \n",
"89 2 hours, 0 minutes 48 4 \n",
"82 2 hours, 0 minutes 26 4 \n",
"81 2 hours, 0 minutes 59 4 \n",
"60 3 hours, 30 minutes 18 4 \n",
"52 10 hours, 0 minutes 1 4 \n",
"38 4 hours, 0 minutes 21 4 \n",
"30 2 hours, 0 minutes 95 4 \n",
"26 3 hours, 0 minutes 15 4 \n",
"102 4 hours, 0 minutes 336 5 "
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Helper function to transform long id number to easy id numbers\n",
"# Get an enumeration of unique ids\n",
"unique_ids = final_df['id'].unique()\n",
"ids_2_new_ids = {k: v for v, k in enumerate(unique_ids)}\n",
"ids_2_new_ids\n",
"def get_new_id(old_id):\n",
" return ids_2_new_ids[old_id]\n",
"\n",
"# re-write those ids as something simpler\n",
"final_df['id'] = final_df['id'].apply(get_new_id)\n",
"\n",
"final_df.head(30)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"This is nice, but which groups have regular meetings, which ones have growing interest (increasing RSVP-yes)?\n",
"How do any of these groups compare to each other?\n",
"\n",
"### Let's visualize the trend lines for the top ten mega-groups\n",
"\n",
"Let's just use linear regression to draw trend lines for each mega-group.\n",
"\n",
"We'll use seaborn's **lmplot** to visualize all ten mega-groups.\n",
"\n",
"We need to use epoch milliseconds **time** column of our dataframe, since it is numeric and can be used to generate trend lines."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArEAAAKACAYAAACL/CAlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd8VuX5x/HPlR0IAQIBmQICMhUkyBIHIDIErLa1VauMtuKstlr9afewtbbVDlGrIrg7RAFRQIYSWbL3HsombALZuX9/nJOYhBXIOHmS7/v18pU8Z15PZHy5n+vctznnEBEREREJJWFBFyAiIiIicr4UYkVEREQk5CjEioiIiEjIUYgVERERkZCjECsiIiIiIUchVkRERERCjkKsiIiIiIQchVgRERERCTkKsSIiIiISciKCLqCsDRgwwE2dOjXoMkREpGKxoAsQkZKp9COxBw4cCLoEERERESlllT7EioiIiEjloxArIiIiIiFHIVZEREREQo5CrIiIiIiEHIVYEREREQk5CrEiIiIiEnIUYkVEREQk5CjEioiIiEjIUYgVERERkZCjECsiIiIiIUchVkRERERCjkKsiIiIiIQchVgRERERCTkKsSIiIiISchRiRURERCTkKMSKiIiISMhRiBURERGRkKMQKyIiIiIhRyFWREREREKOQqyIiIiIhByFWBEREREJOQqxIiIiIhJyFGJFREREJOREBF2ASJDS1h8idc5Osg+nE1E7hrirGxPbJiHoskREROQcFGKlykpbf4gjk7ZAuGGxEWQfz/Reg4KsiIhIBad2AqmyUufshHAjLCocM+8r4eZtFxERkQpNIVaqrOzD6Vhk4d8CFhlG9uH0gCoSERGR4lKIlSoronYMLiu30DaXlUtE7ZiAKhIREZHiUoiVKivu6saQ48jNzME57ys5ztsuIiIiFZoe7JIqK+/hLc1OICIiEnoUYqVKi22ToNAqIiISgtROICIiIiIhRyFWREREREKOQqyIiIiIhByFWBEREREJOQqxIiIiIhJyFGJFREREJOQoxIqIiIhIyFGIFREREZGQoxArIiIiIiFHIVZEREREQo5CrIiIiIiEHIVYEREREQk5CrEiIiIiEnIUYkVEREQk5CjEioiIiEjIUYgVERERkZCjECsiIiIiIUchVkRERERCjkKsiIiIiIQchVgRERERCTkKsSIiIiISchRiRURERCTkKMSKiIiISMhRiBURERGRkKMQKyIiIiIhRyFWREREREKOQqyIiIiIhByFWBEREREJOQqxIiIiIhJyFGJFREREJOQoxIqIiIhIyFGIFREREZGQoxArIiIiIiFHIVZEREREQo5CrIiIiIiEHIVYEREREQk5CrEiIiIiEnIUYkVEREQk5CjEioiIiEjIUYgVERERkZCjECsiIiIiIUchVkRERERCjkKsiIiIiIQchVgRERERCTkKsSIiIiISchRiRURERCTkKMSKiIiISMhRiC0HJ06c4OTJk0GXISIiIlJpKMSWsfXr1/P888/z4YcfBl2KiIiISKUReIg1s1pm9j8zW29m68ysh5klmNknZrbJ/1rbP9bM7O9mttnMVprZFUHXfy5paWmcPHmStWvXsmbNmqDLEREREakUAg+xwN+Aqc65NsDlwDrgcWCmc64VMNN/DTAQaOX/90PghfIv9/x06tSJVq1aATBlyhRSU1MDrkhEREQk9AUaYs2sJnA18CqAcy7TOXcEGAaM9w8bD9zkfz8MeN15FgC1zKxBOZd9XsyMIUOGEB0dzcmTJ/noo4+CLklEREQk5AU9EtscSAFeM7NlZvaKmVUH6jvn9vjH7AXq+983AnYUOH+nv60QM/uhmS02s8UpKSllWH7xxMfHM2DAAADWrl3L6tWrA65IREREJLQFHWIjgCuAF5xznYETfN06AIBzzgHufC7qnPuXcy7JOZeUmJhYasWWhNoKREREREpP0CF2J7DTObfQf/0/vFC7L69NwP+639+/C2hS4PzG/rYKL6+tICYmhrS0NKZMmYKXz0VERETkfAUaYp1ze4EdZnapv6kvsBaYBNzlb7sLmOh/Pwm405+loDtwtEDbQYVXsK1g3bp1aisQERERuUARQRcAPAC8ZWZRwFZgBF64/o+ZjQK+BL7tH/sRMAjYDJz0jw0pl19+OWvXrmXjxo189NFHNG/enLi4uKDLEhEREQkpVtk/0k5KSnKLFy8OuoxCjh07xpgxY0hPT6dNmzbceuutmFnQZYmIVCX6Q1ckxAXdE1slxcfHM3DgQMBb0WvVqlUBVyRlIW39IVL+tZI9T39Byr9Wkrb+UNAliYiIVBoKsQG57LLLuPRSrxX4448/5vjx4wFXJKUpbf0hjkzaQvbx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3o1780S3J0iMTeRY5jESYxN5otsT6ocVEZEqw5xzQddQppKSktzixVom9ELt2LGDsWPH4pzjmmuu4brrrgu6JBGR0mBBFyAiJaORWDmrJk2a5LcVJCcnq61AREREKgSFWDmn6667jrp166qtQERERCoMhVg5p8jISG666SbMjH379jFnzpygSxIREZEqTiFWiqVx48b07NkT8NoKdu/eHXBFIiIiUpUpxEqxXXvttSQmJuKcU1uBiIiIBEohVoqtYFvB/v37+eyzz4IuSURERKoohVg5L40aNaJXr14AfP755+zapWVOpXQl70xm1LRRDHhvAKOmjSJ5p1aMExGRUynEynlTW4GUleSdyTy18ClS0lKIj4onJS2FpxY+pSArIiKnUIiV8xYREcE3vvENzIyUlBQ+/fTToEuSSmLcmnFEhkcSGxGLmREbEUtkeCTj1owLujQREalgFGLlgjRs2JCrrroKgLlz57Jz586AK5LKYFfqLmLCYwptiwmPYVeq2lZERKQwhVi5YNdccw316tXLbyvIysoKuiQJcY3iGpGek15oW3pOOo3iGgVUkYiIVFQKsXLBIiIi8mcrOHDggNoKpMSGtx9OVk4WadlpOOdIy04jKyeL4e2HB12aiIhUMAqxUiINGzakd+/eAMybN09tBVIivRv35oluT5AYm8ixzGMkxibyRLcn6N24d9CliYhIBWPOuaBrKFNJSUlu8eLFQZdRqWVnZ/Pyyy+zb98+6taty913301kZGTQZYmInI0FXYCIlIxGYqXE8toKwsLCOHDgALNnzw66JBEREankFGKlVDRo0CC/rWD+/Pns2LEj4IpERESkMlOIlVLTu3dv6tevr9kKREREpMwpxEqpKdhWcPDgQbUViIiISJlRiJVS1aBBA66++mrAm63gq6++CrgiERERqYwUYqXU9e7dm4suugiAiRMnqq1ARERESp1CrJS68PDwQm0Fs2bNCrokERERqWQUYqVMXHTRRVxzzTWAN1uB2gpERESkNCnESpm56qqraNCgAQAffPABmZmZAVckIiIilUVE0AVI5ZXXVvDSSy9x6NAhZs2axYABA4IuS0LctmWLWTR5Akf376Nmvfp0HXIzzTsnnfbY5J3JjFszjl2pu2gU14jh7YdrCVsRkUpCI7FSpurXr8+1114LwIIFC/jyyy+DLUhC2rZli5k5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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# import statsmodels.api as sm\n",
"ax = sb.lmplot(\"time\", \"yes_rsvp_count\", data=final_df, hue=\"name\",\n",
" height=9, aspect=0.75, order=1, ci=None)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Ah, this is interesting\n",
"\n",
"From the top 10 mega-groups I can see that several groups have major problems.\n",
"For instance, the **Docker Online Meetup** group has almost no yes_rsvp_counts.\n",
"\n",
"Let's take a closer look."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
" name time \\\n",
"1 Docker Online Meetup 1,540,915,200,000.00 \n",
"3 SF Data Mining 1,537,200,000,000.00 \n",
"9 Women Who Code SF 1,542,342,600,000.00 \n",
"4 SF Data Science 1,544,287,200,000.00 \n",
"0 Designers + Geeks 1,540,952,228,571.43 \n",
"8 The SF JavaScript Meetup 1,544,289,840,000.00 \n",
"7 Tech in Motion Events: San Francisco 1,544,405,400,000.00 \n",
"6 Silicon Valley Entrepreneurs & Startups 1,542,303,840,000.00 \n",
"2 SF Big Analytics 1,542,816,163,636.36 \n",
"5 SFHTML5 1,546,360,500,000.00 \n",
"\n",
" yes_rsvp_count id \n",
"1 1.00 1.00 \n",
"3 6.00 3.00 \n",
"9 37.03 9.00 \n",
"4 41.89 4.00 \n",
"0 73.43 0.00 \n",
"8 83.80 8.00 \n",
"7 113.50 7.00 \n",
"6 130.30 6.00 \n",
"2 217.73 2.00 \n",
"5 218.33 5.00 "
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rsvp_df = final_df.groupby(['name'], as_index=False).mean()\n",
"\n",
"rsvp_df = rsvp_df.sort_values(by=['yes_rsvp_count', 'name'],\n",
" ascending=[True, True])\n",
"rsvp_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Okay, we have two mega-groups that nobody really RSVPs for....\n",
"\n",
"Let's exclude those now."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"final_df = final_df[~final_df['id'].isin([1, 3])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's also make sure that our groups meet frequently enough\n"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
id
\n",
"
time
\n",
"
\n",
" \n",
" \n",
"
\n",
"
5
\n",
"
7
\n",
"
2
\n",
"
\n",
"
\n",
"
6
\n",
"
8
\n",
"
5
\n",
"
\n",
"
\n",
"
3
\n",
"
5
\n",
"
6
\n",
"
\n",
"
\n",
"
0
\n",
"
0
\n",
"
7
\n",
"
\n",
"
\n",
"
2
\n",
"
4
\n",
"
9
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
11
\n",
"
\n",
"
\n",
"
4
\n",
"
6
\n",
"
30
\n",
"
\n",
"
\n",
"
7
\n",
"
9
\n",
"
31
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id time\n",
"5 7 2\n",
"6 8 5\n",
"3 5 6\n",
"0 0 7\n",
"2 4 9\n",
"1 2 11\n",
"4 6 30\n",
"7 9 31"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"event_count_df = final_df.groupby(['id'], as_index=False).count()\n",
"event_count_df = event_count_df.sort_values(by=['name', 'id'],ascending=[True, True])\n",
"event_count_df[[\"id\", \"time\"]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Hmm... a few of our groups meet rather infrequently\n",
"\n",
"Let's remove those as well."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"final_df = final_df[~final_df['id'].isin([7, 8, 5, 0])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Let's try this again, only with the remaining 4 mega-groups\n",
"\n",
"This time we're going to do two more things:\n",
"1. Show our Confidence Interval. This adds a translucent band showing which events had a number of RSVPs within a single Standard Deviation of the mean.\n",
"2. Estimate a [**robust regression**](https://en.wikipedia.org/wiki/Robust_regression), to de-weight outliers"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%%capture --no-display\n",
"sb.lmplot(\"time\", \"yes_rsvp_count\", data=final_df, hue=\"name\", \n",
" height=9, aspect=0.75, order=1,\n",
" ci=68, # 1. Confidence interval of 1 Standard Deviation\n",
" robust=True) # 2. estimate robust regression, to de-weight outliers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Looking at the for the four remaining lines, we can see that\n",
"\n",
"### Gold Medal -- [SF Big Analytics](https://www.meetup.com/SF-Big-Analytics/)\n",
"* PROs\n",
" * the largest mean number of RSVPs\n",
" * a slope for the trendline that indicates that it's getting even more popular\n",
"* CONs\n",
" * the confidence interval shows a pretty thick blue bar, which means that the yes RSVPs are pretty hit-and-miss. Check each event in advance, so that you're not surprised\n",
" \n",
"### Silver Medal -- [Silicon Valley Entrepreneurs & Startups](https://www.meetup.com/sventrepreneurs/)\n",
"* PROs\n",
" * holding onto a flat trend of about 100 yes-RSVPs per meeting\n",
" * Met 31 times in the past 3 months\n",
"* CONs\n",
" * The trend is flat or slightly down over the last nine months, so it's not really showing signs of getting more popular\n",
" \n",
"### Bronze Medal # 1 -- [SF Data Science](https://www.meetup.com/SF-Data-Science/)\n",
"* PROs\n",
" * Show a pretty aggresive slope for the trend line, it's definitely rising in popularity.\n",
"* CONs \n",
" * Meets up the least frequently of the four top mega-groups, just about monthly\n",
" \n",
"### Bronze Medal # 2 -- [Women Who Code SF](https://www.meetup.com/Women-Who-Code-SF/)\n",
"* PROs\n",
" * Met up 31 times in the past 9 months (that's almost weekly)\n",
" * Smallest variance in RSVPs, perhaps indicating a loyal following\n",
"* CONs\n",
" * Smallest average number of RSVPs\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Goal Achieved!\n",
"\n",
"At last! We found the four best Tech groups in San Francisco, CA that:\n",
"1. are among the 10 biggest in the city\n",
"2. that are popular and are staying popular\n",
"3. holds events at least monthly\n",
"\n",
"## Conclusion\n",
"\n",
"We achieved our objectives and demonstrated several useful techniques along the way we :\n",
"1. worked with the [Python Meetup API client]\n",
"2. built a helper function to parse response objects into **meta** and **results** dataframes\n",
"3. built a helper function to loop through multiple API calls and [concat]-enate a list of pages into a single useful dataframe\n",
"4. Used pandas.DataFrame.[query] to sort and filter data of interest\n",
"5. Used pandas.DataFrame.[apply] to clean columns of data using custom helper functions\n",
"6. Used pandas.DataFrame.[describe] to get descriptive statistics that summarize\n",
" * the central tendency\n",
" * dispersion\n",
" * shape of our dataset's distribution\n",
"7. Used pandas.DataFrame.[merge] to join the **events** and **groups** dataframes to create a report of the events for our 10 biggest mega-groups in technology\n",
"8. Used visualizations and statistics to filter those 10 mega-groups into the 4 very best tech groups in San Francisco\n",
"\n",
"\n",
"[//]: # (References)\n",
"\n",
"[Python Meetup API client]: https://meetup-api.readthedocs.io/en/latest/meetup_api.html#api-client-details\n",
"[concat]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html\n",
"[query]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html\n",
"[apply]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html\n",
"[describe]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html\n",
"[merge]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (datascience_challenges)",
"language": "python",
"name": "datascience_challenges"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.2"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": true,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}