{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
next
methodCategories
total_count33
linkhttps://api.meetup.com/2/categories
count33
descriptionReturns a list of Meetup group categories
lonNone
titleCategories
urlhttps://api.meetup.com/2/categories?offset=0&f...
id
updated1450292956000
latNone
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnameshortnamesort_name
01Arts & CultureArtsArts & Culture
118Book ClubsBook ClubsBook Clubs
22Career & BusinessBusinessCareer & Business
33Cars & MotorcyclesAutoCars & Motorcycles
44Community & EnvironmentCommunityCommunity & Environment
55DancingDancingDancing
66Education & LearningEducationEducation & Learning
78Fashion & BeautyFashionFashion & Beauty
89FitnessFitnessFitness
910Food & DrinkFood & DrinkFood & Drink
1011GamesGamesGames
1113Movements & PoliticsMovementsMovements & Politics
1214Health & WellbeingWell-beingHealth & Wellbeing
1315Hobbies & CraftsCraftsHobbies & Crafts
1416Language & Ethnic IdentityLanguagesLanguage & Ethnic Identity
1512LGBTLGBTLGBT
1617LifestyleLifestyleLifestyle
1720Movies & FilmFilmsMovies & Film
1821MusicMusicMusic
1922New Age & SpiritualitySpiritualityNew Age & Spirituality
2023Outdoors & AdventureOutdoorsOutdoors & Adventure
2124ParanormalParanormalParanormal
2225Parents & FamilyMoms & DadsParents & Family
2326Pets & AnimalsPetsPets & Animals
2427PhotographyPhotographyPhotography
2528Religion & BeliefsBeliefsReligion & Beliefs
2629Sci-Fi & FantasySci fiSci-Fi & Fantasy
2730SinglesSinglesSingles
2831SocializingSocialSocializing
2932Sports & RecreationSportsSports & Recreation
3033SupportSupportSupport
3134TechTechTech
3236WritingWritingWriting
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnameshortnamesort_name
3134TechTechTech
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
next
methodCities
total_count4
linkhttps://api.meetup.com/2/cities
count4
descriptionReturns Meetup cities. This method supports se...
lonNone
titleCities
urlhttps://api.meetup.com/2/cities?country=us&off...
id
updated1263132740000
latNone
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
citycountryidlatlocalized_country_namelonmember_countname_stringrankingstatezip
0San Franciscous9410137.779999USA-122.41999860351San Francisco, California, USA0CA94101
1Bosqueus8700634.560001USA-106.7799995San Francisco, New Mexico, USA1NM87006
2San Luisus8115237.080002USA-105.6200034San Francisco, Colorado, USA2CO81152
3Reserveus8783033.650002USA-108.7699971San Francisco Plaza, New Mexico, USA3NM87830
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
citycountryidlatlocalized_country_namelonmember_countname_stringrankingstatezip
0San Franciscous9410137.779999USA-122.41999860351San Francisco, California, USA0CA94101
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0
nexthttps://api.meetup.com/2/groups?offset=1&forma...
methodGroups
total_count2197
linkhttps://api.meetup.com/2/groups
count200
descriptionNone
lon-122.42
titleMeetup Groups v2
urlhttps://api.meetup.com/2/groups?offset=0&forma...
id
updated1550965553000
lat37.78
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
categorycitycountrycreateddescriptiongroup_photoidjoin_modelatlink...nameorganizerratingstatetimezonetopicsurlnameutc_offsetvisibilitywho
0{'name': 'tech', 'id': 34, 'shortname': 'tech'}San FranciscoUS1034097740000<p>The SF PHP Community Meetup is an open foru...{'highres_link': 'https://secure.meetupstatic....120903open37.77https://www.meetup.com/sf-php/...SF PHP Community{'member_id': 126468982, 'name': 'Andre Marigo...4.38CAUS/Pacific[{'urlkey': 'php', 'name': 'PHP', 'id': 455}, ...sf-php-28800000publicPHP Developers
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamemembersratingjoin_modeurlname
0120903SF PHP Community27024.38opensf-php
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
members
count2,197.00
mean811.79
std1,741.14
min1.00
25%86.00
50%256.00
75%780.00
max36,058.00
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namemembers
19Silicon Valley Entrepreneurs & Startups36058
107SFHTML517718
106Designers + Geeks15467
426SF Data Science14874
28The SF JavaScript Meetup13359
250Tech in Motion Events: San Francisco13090
540Docker Online Meetup12475
191SF Data Mining12378
201Women Who Code SF12334
706SF Big Analytics11889
\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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
createddescriptiondurationevent_urlgroupheadcounthow_to_find_usidmaybe_rsvp_countname...ratingrsvp_limitstatustimeupdatedutc_offsetvenuevisibilitywaitlist_countyes_rsvp_count
01534368847000<p>Demo Session is free to meetup attendees. U...7200000https://www.meetup.com/sventrepreneurs/events/...{'join_mode': 'open', 'created': 1196203591000...0NaN2538245060Demo Session @ Mars Blockchain Summit by Mars ......{'count': 0, 'average': 0}nanpast15354954000001535527171000-25200000{'country': 'us', 'localized_country_name': 'U...public066
\n", "

1 rows × 21 columns

\n", "
" ], "text/plain": [ " created description duration \\\n", "0 1534368847000

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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
grouptimedurationyes_rsvp_count
0{'join_mode': 'open', 'created': 1196203591000...1535495400000720000066
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idtimedurationyes_rsvp_count
08447261535495400000720000066
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idtimetime_dtdurationyes_rsvp_count
0844726153549540000008/28/18 22:30720000066
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idtimetime_dtdurationyes_rsvp_count
0844726153549540000008/28/18 22:302 hours, 0 minutes66
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametimetime_dtdurationyes_rsvp_countid
101Designers + Geeks155080440000002/22/19 03:002 hours, 0 minutes1781615633
55Designers + Geeks154233720000011/16/18 03:002 hours, 0 minutes711615633
46Designers + Geeks154112400000011/02/18 02:002 hours, 0 minutes711615633
32Designers + Geeks153991440000010/19/18 02:002 hours, 0 minutes411615633
24Designers + Geeks153870480000010/05/18 02:002 hours, 0 minutes291615633
14Designers + Geeks153749520000009/21/18 02:002 hours, 0 minutes371615633
4Designers + Geeks153628560000009/07/18 02:002 hours, 0 minutes871615633
40Docker Online Meetup154091520000010/30/18 16:001 hours, 0 minutes113402242
97SF Big Analytics154959120000002/08/19 02:002 hours, 30 minutes41818354966
80SF Big Analytics154769040000001/17/19 02:003 hours, 0 minutes45018354966
78SF Big Analytics154760400000001/16/19 02:003 hours, 0 minutes518354966
64SF Big Analytics154406160000012/06/18 02:003 hours, 0 minutes718354966
53SF Big Analytics154224720000011/15/18 02:003 hours, 0 minutes1618354966
51SF Big Analytics154216080000011/14/18 02:002 hours, 30 minutes47818354966
50SF Big Analytics154178280000011/09/18 17:0057 hours, 0 minutes1618354966
44SF Big Analytics154112040000011/02/18 01:003 hours, 0 minutes15218354966
29SF Big Analytics153990900000010/19/18 00:302 hours, 30 minutes39018354966
16SF Big Analytics153801000000009/27/18 01:002 hours, 45 minutes24518354966
8SF Big Analytics153680040000009/13/18 01:002 hours, 30 minutes21818354966
10SF Data Mining153720000000009/17/18 16:00104 hours, 0 minutes62065031
93SF Data Science154898820000002/01/19 02:302 hours, 0 minutes949226282
89SF Data Science154838340000001/25/19 02:302 hours, 0 minutes489226282
82SF Data Science154777860000001/18/19 02:302 hours, 0 minutes269226282
81SF Data Science154769220000001/17/19 02:302 hours, 0 minutes599226282
60SF Data Science154353960000011/30/18 01:003 hours, 30 minutes189226282
52SF Data Science154221120000011/14/18 16:0010 hours, 0 minutes19226282
38SF Data Science154077480000010/29/18 01:004 hours, 0 minutes219226282
30SF Data Science153991080000010/19/18 01:002 hours, 0 minutes959226282
26SF Data Science153930600000010/12/18 01:003 hours, 0 minutes159226282
102SFHTML5155088360000002/23/19 01:004 hours, 0 minutes3361619955
.....................
95Women Who Code SF154942020000002/06/19 02:302 hours, 0 minutes472252591
92Women Who Code SF154881540000001/30/19 02:302 hours, 0 minutes372252591
86Women Who Code SF154821060000001/23/19 02:302 hours, 0 minutes292252591
79Women Who Code SF154760580000001/16/19 02:302 hours, 0 minutes322252591
76Women Who Code SF154700100000001/09/19 02:302 hours, 0 minutes572252591
71Women Who Code SF154527120000012/20/18 02:002 hours, 0 minutes1992252591
69Women Who Code SF154518660000012/19/18 02:301 hours, 30 minutes502252591
70Women Who Code SF154518660000012/19/18 02:302 hours, 0 minutes232252591
67Women Who Code SF154458180000012/12/18 02:302 hours, 0 minutes222252591
65Women Who Code SF154414980000012/07/18 02:302 hours, 0 minutes172252591
63Women Who Code SF154397700000012/05/18 02:302 hours, 0 minutes292252591
62Women Who Code SF154397520000012/05/18 02:003 hours, 0 minutes12252591
58Women Who Code SF154276740000011/21/18 02:302 hours, 0 minutes312252591
54Women Who Code SF154233540000011/16/18 02:302 hours, 0 minutes502252591
49Women Who Code SF154155780000011/07/18 02:302 hours, 0 minutes272252591
45Women Who Code SF154112220000011/02/18 01:302 hours, 0 minutes502252591
43Women Who Code SF154094940000010/31/18 01:302 hours, 0 minutes292252591
39Women Who Code SF154085940000010/30/18 00:302 hours, 30 minutes642252591
34Women Who Code SF154040040000010/24/18 17:001 hours, 0 minutes22252591
33Women Who Code SF154034460000010/24/18 01:302 hours, 0 minutes362252591
31Women Who Code SF153991260000010/19/18 01:302 hours, 0 minutes502252591
25Women Who Code SF153913500000010/10/18 01:302 hours, 0 minutes252252591
23Women Who Code SF153870300000010/05/18 01:302 hours, 0 minutes502252591
21Women Who Code SF153853020000010/03/18 01:302 hours, 0 minutes102252591
22Women Who Code SF153853020000010/03/18 01:302 hours, 0 minutes272252591
13Women Who Code SF153749340000009/21/18 01:302 hours, 0 minutes332252591
11Women Who Code SF153732060000009/19/18 01:302 hours, 0 minutes142252591
9Women Who Code SF153703080000009/15/18 17:003 hours, 0 minutes102252591
7Women Who Code SF153671580000009/12/18 01:302 hours, 0 minutes252252591
1Women Who Code SF153550620000008/29/18 01:302 hours, 0 minutes352252591
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametimetime_dtdurationyes_rsvp_countid
101Designers + Geeks155080440000002/22/19 03:002 hours, 0 minutes1780
55Designers + Geeks154233720000011/16/18 03:002 hours, 0 minutes710
46Designers + Geeks154112400000011/02/18 02:002 hours, 0 minutes710
32Designers + Geeks153991440000010/19/18 02:002 hours, 0 minutes410
24Designers + Geeks153870480000010/05/18 02:002 hours, 0 minutes290
14Designers + Geeks153749520000009/21/18 02:002 hours, 0 minutes370
4Designers + Geeks153628560000009/07/18 02:002 hours, 0 minutes870
40Docker Online Meetup154091520000010/30/18 16:001 hours, 0 minutes11
97SF Big Analytics154959120000002/08/19 02:002 hours, 30 minutes4182
80SF Big Analytics154769040000001/17/19 02:003 hours, 0 minutes4502
78SF Big Analytics154760400000001/16/19 02:003 hours, 0 minutes52
64SF Big Analytics154406160000012/06/18 02:003 hours, 0 minutes72
53SF Big Analytics154224720000011/15/18 02:003 hours, 0 minutes162
51SF Big Analytics154216080000011/14/18 02:002 hours, 30 minutes4782
50SF Big Analytics154178280000011/09/18 17:0057 hours, 0 minutes162
44SF Big Analytics154112040000011/02/18 01:003 hours, 0 minutes1522
29SF Big Analytics153990900000010/19/18 00:302 hours, 30 minutes3902
16SF Big Analytics153801000000009/27/18 01:002 hours, 45 minutes2452
8SF Big Analytics153680040000009/13/18 01:002 hours, 30 minutes2182
10SF Data Mining153720000000009/17/18 16:00104 hours, 0 minutes63
93SF Data Science154898820000002/01/19 02:302 hours, 0 minutes944
89SF Data Science154838340000001/25/19 02:302 hours, 0 minutes484
82SF Data Science154777860000001/18/19 02:302 hours, 0 minutes264
81SF Data Science154769220000001/17/19 02:302 hours, 0 minutes594
60SF Data Science154353960000011/30/18 01:003 hours, 30 minutes184
52SF Data Science154221120000011/14/18 16:0010 hours, 0 minutes14
38SF Data Science154077480000010/29/18 01:004 hours, 0 minutes214
30SF Data Science153991080000010/19/18 01:002 hours, 0 minutes954
26SF Data Science153930600000010/12/18 01:003 hours, 0 minutes154
102SFHTML5155088360000002/23/19 01:004 hours, 0 minutes3365
\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/5vjx4wFXJKUpbf0hjkzaQvbxTCw2guzjmRyZtEVBVkREpJQoxAbEzLjxxhvzZyv48MMPNVtBJZI6ZyeEG2FR4Zh5Xwk3b7uIiIiUmEJsgGrUqMGgQYMA2LBhAytXrgy4Iikt2YfTscjCv70sMozsw+kBVSQiIlK5KMQGrGPHjrRp0wbw2gqOHTsWcEVSGiJqx+Cycgttc1m5RNSOCagiERGRykUhNmB5bQWxsbGkp6erraCSiLu6MeQ4cjNzcM77So7ztouIiEiJKcRWAHFxcfltBRs3bmTFihUBVyQlFdsmgVpDLyGiRhQuLZuIGlHUGnoJsW0Sgi5NRESkUqgIix0I0KFDB9auXcu6deuYOnUqLVq0ID4+PuiypARi2yQotIqIiJQRjcRWEGbG4MGD89sKJk+erLYCERERkTNQiK1A4uLiGDx4MACbNm1i+fLlAVckIiIiUjEpxFYw7du3p127dgBMnTpVsxWIiIiInIZCbAVjZgwaNIhq1aqRkZHBpEmT1FYgIiIiUoRCbAVUsK1g8+bNaisQERERKUIhtoIq2lZw9OjRgCsSERERqTgUYiuwwYMHq61ARERE5DQUYiuw6tWrc+ONNwKwZcsWli1bFnBFIiIiIhWDQmwF165dO9q3bw/AtGnTOHLkSMAViYiIiARPITYEDBo0iOrVq6utQERERMSnEBsCCrYVbN26laVLlwZckYiIiEiwFGJDRNu2benQoQOgtgIRERERhdgQktdWkJmZqbYCERERqdIUYkNItWrVGDJkCOC1FSxZsiTgikRERESCoRAbYtq0aUPHjh0BmD59OocPHw64IhEREZHypxAbggYOHEhcXJzaCkRERKTKUogNQQXbCrZt28bixYsDrkhERESkfCnEhqhLL72Uyy67DFBbgYiIiFQ9CrEhLK+tICsri4kTJ5Kbmxt0SSIiIiLlQiE2hMXGxjJ06FAAtm/frrYCERERqTIUYkNc69atufzyywH45JNPOHToUMAViYiIiJQ9hdhKYMCAAdSoUUNtBSIiIlJlKMRWArGxsfmzFXz55ZcsWrQo4IpEREREypZCbCXRunVrOnXqBMCMGTPUViAiIiKVmkJsJXLDDTeorUBERESqBIXYSqTgbAVffvklX3zxRcAViYiIiJQNhdhKplWrVnTu3Bnw2goOHjwYcEUiIiIipU8hthK64YYbiI+PJzs7W20FIiIiUikpxFZCMTEx+W0FX331FQsXLgy4IhEREZHSpRBbSbVs2ZIrrrgCgJkzZ3LgwIGAKxIREREpPQqxlVj//v3VViAiIiKVkkJsJVawrWDHjh0sWLAg4IpERERESodCbCXXsmVLunTpAsCsWbPUViAiIiKVgkJsFXD99ddTs2ZNsrOz+eCDD9RWICIiIiFPIbYKKNhWsHPnTrUViIiISMhTiK0iLrnkEpKSkgBvtoKUlJSAKxIRERG5cAqxVUheW0FOTo5mKxAREZGQphBbhURHRzNs2DDAayuYP39+wBWJiIiIXBiF2CqmRYsWdO3aFfBmK1BbgYiIiIQihdgqqF+/ftSqVYucnBw++OADcnJygi5JRERE5LwoxFZBBdsKdu3apbYCERERCTkKsVVU8+bNufLKKwGYPXs2+/fvD7giERERkeJTiK3C+vXrR+3atdVWICIiIiFHIbYKi4qKym8r2L17N/PmzQu4oopn27LF/Oc3T/Dy/aP4z2+eYNuyxUGXJCIiIijEVnnNmjWjW7duAHz66afs27cv4Ioqjm3LFjNz7IucOHKImLg4Thw5xMyxLyrIioiIVAAKsULfvn3VVnAaiyZPIDwygsjoGMyMyOgYwiMjWDR5QtCliYiIVHkKsUJUVBQ33XQTAHv27GHu3LkBV1QxHN2/j4io6ELbIqKiObpfo9UiIiJBU4gVAC6++GK6d+8OqK0gT8169cnOzCi0LTszg5r16gdUkYiIiORRiJV8ffr0ISEhgdzcXLUVAF2H3ExOVjZZGek458jKSCcnK5uuQ24OujQAkncmM2raKAa8N4BR00aRvDM56JJERETKjUKs5CvaVvD5558HXFGwmndOou/I0VSvlUB6airVayXQd+RomndOCro0kncm89TCp0hJSyE+Kp6UtBSeWviUgqyIiFQZEUEXIBVL06ZN6dGjB/Pnz+ezzz7j0ksv5aKLLgq6rMA075xUIUJrUePWjCMyPJLYiFiA/K/j1oyjd+PeQZYmIiJSLjQSK6fo06cPderUUVtBBbYrdRcx4TGFtsWEx7ArdVdAFYmIiJQvhVg5RWRkZP4iCHv37iU5WR9RVzSN4hqRnpNeaFt6TjqN4hoFVJGIiEj5UoiV08prKwCYM2cOe/bsCbgiKWh4++Fk5WSRlp2Gc4607DSycrIY3n540KWJiIiUC4VYOaOibQXZ2dlBlyS+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": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametimetime_dtdurationyes_rsvp_countid
40Docker Online Meetup154091520000010/30/18 16:001 hours, 0 minutes11
\n", "
" ], "text/plain": [ " name time time_dt duration \\\n", "40 Docker Online Meetup 1540915200000 10/30/18 16:00 1 hours, 0 minutes \n", "\n", " yes_rsvp_count id \n", "40 1 1 " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interesting_group_df = final_df[final_df['name'] == \"Docker Online Meetup\"]\n", "interesting_group_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Yikes, are there other mega-groups with no RSVPs?" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametimeyes_rsvp_countid
1Docker Online Meetup1,540,915,200,000.001.001.00
3SF Data Mining1,537,200,000,000.006.003.00
9Women Who Code SF1,542,342,600,000.0037.039.00
4SF Data Science1,544,287,200,000.0041.894.00
0Designers + Geeks1,540,952,228,571.4373.430.00
8The SF JavaScript Meetup1,544,289,840,000.0083.808.00
7Tech in Motion Events: San Francisco1,544,405,400,000.00113.507.00
6Silicon Valley Entrepreneurs & Startups1,542,303,840,000.00130.306.00
2SF Big Analytics1,542,816,163,636.36217.732.00
5SFHTML51,546,360,500,000.00218.335.00
\n", "
" ], "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idtime
572
685
356
007
249
1211
4630
7931
\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 }