{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Wrangle and Analyze Data\n", "\n", "Wrangling of WeRateDogs Twitter data to create interesting and trustworthy analyses and visualizations. \n", "\n", "## Table of Contents\n", "- [Introduction](#intro)\n", "- [Gathering](#gathering)\n", "- [Assessing](#assessing)\n", " - [The WeRateDogs twitter archive](#weratedogstwitter)\n", " - [The tweet image predictions](#tweetimagepreductions)\n", " - [Data retrieved via twitter API](#datafromtwitter)\n", " - [Synthesis](#assesssynthesis)\n", "- [Cleaning](#cleaning)\n", "- [Storing Cleaned Data](#storing)\n", "- [Analyzing and Visualizing](#analysis)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='intro'></a>\n", "### Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The WeRateDogs Twitter archive is great, but it only contains very basic tweet information. So we perform additional gathering through an URL and a direct connection to twitter. Then we assess and clean the Data as required to perform analysis and visualization." ] }, { "cell_type": "code", "execution_count": 784, "metadata": {}, "outputs": [], "source": [ "# Import required packages\n", "import pandas as pd\n", "import numpy as np\n", "import requests\n", "import tweepy\n", "import json\n", "import re\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from timeit import default_timer as timer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='gathering'></a>\n", "### Gathering\n", "\n", "Based on the project motivation and details, we gather Data from three sources:\n", "1. The WeRateDogs twitter archive, available as `twitter_archive_enhanced.csv`\n", "2. The tweet image predictions, i.e., what breed of dog (or other object, animal, etc.) is present in each tweet according to a neural network, available at the following URL: https://d17h27t6h515a5.cloudfront.net/topher/2017/August/599fd2ad_image-predictions/image-predictions.tsv\n", "3. A pandas DataFrame created from data we will be collecting directly from twitter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1. Gather data from the archive available as `twitter-archive-enhanced.csv`" ] }, { "cell_type": "code", "execution_count": 785, "metadata": {}, "outputs": [], "source": [ "# Load the csv file as a dataframe\n", "df_archive = pd.read_csv('twitter-archive-enhanced.csv')" ] }, { "cell_type": "code", "execution_count": 786, "metadata": {}, "outputs": [], "source": [ "# make a copy, as we will be using the copy\n", "df_archive_clean = df_archive.copy()" ] }, { "cell_type": "code", "execution_count": 787, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>in_reply_to_status_id</th>\n", " <th>in_reply_to_user_id</th>\n", " <th>timestamp</th>\n", " <th>source</th>\n", " <th>text</th>\n", " <th>retweeted_status_id</th>\n", " <th>retweeted_status_user_id</th>\n", " <th>retweeted_status_timestamp</th>\n", " <th>expanded_urls</th>\n", " <th>rating_numerator</th>\n", " <th>rating_denominator</th>\n", " <th>name</th>\n", " <th>doggo</th>\n", " <th>floofer</th>\n", " <th>pupper</th>\n", " <th>puppo</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>892420643555336193</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-08-01 16:23:56 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/892420643555336193/photo/1</td>\n", " <td>13</td>\n", " <td>10</td>\n", " <td>Phineas</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>892177421306343426</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-08-01 00:17:27 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/892177421306343426/photo/1</td>\n", " <td>13</td>\n", " <td>10</td>\n", " <td>Tilly</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>891815181378084864</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-07-31 00:18:03 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/891815181378084864/photo/1</td>\n", " <td>12</td>\n", " <td>10</td>\n", " <td>Archie</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>891689557279858688</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-07-30 15:58:51 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/891689557279858688/photo/1</td>\n", " <td>13</td>\n", " <td>10</td>\n", " <td>Darla</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>891327558926688256</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-07-29 16:00:24 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/891327558926688256/photo/1,https://twitter.com/dog_rates/status/891327558926688256/photo/1</td>\n", " <td>12</td>\n", " <td>10</td>\n", " <td>Franklin</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id in_reply_to_status_id in_reply_to_user_id \\\n", "0 892420643555336193 NaN NaN \n", "1 892177421306343426 NaN NaN \n", "2 891815181378084864 NaN NaN \n", "3 891689557279858688 NaN NaN \n", "4 891327558926688256 NaN NaN \n", "\n", " timestamp \\\n", "0 2017-08-01 16:23:56 +0000 \n", "1 2017-08-01 00:17:27 +0000 \n", "2 2017-07-31 00:18:03 +0000 \n", "3 2017-07-30 15:58:51 +0000 \n", "4 2017-07-29 16:00:24 +0000 \n", "\n", " source \\\n", "0 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "2 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "3 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "4 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "\n", " text \\\n", "0 This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU \n", "1 This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV \n", "2 This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB \n", "3 This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ \n", "4 This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f \n", "\n", " retweeted_status_id retweeted_status_user_id retweeted_status_timestamp \\\n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", "2 NaN NaN NaN \n", "3 NaN NaN NaN \n", "4 NaN NaN NaN \n", "\n", " expanded_urls \\\n", "0 https://twitter.com/dog_rates/status/892420643555336193/photo/1 \n", "1 https://twitter.com/dog_rates/status/892177421306343426/photo/1 \n", "2 https://twitter.com/dog_rates/status/891815181378084864/photo/1 \n", "3 https://twitter.com/dog_rates/status/891689557279858688/photo/1 \n", "4 https://twitter.com/dog_rates/status/891327558926688256/photo/1,https://twitter.com/dog_rates/status/891327558926688256/photo/1 \n", "\n", " rating_numerator rating_denominator name doggo floofer pupper puppo \n", "0 13 10 Phineas None None None None \n", "1 13 10 Tilly None None None None \n", "2 12 10 Archie None None None None \n", "3 13 10 Darla None None None None \n", "4 12 10 Franklin None None None None " ] }, "execution_count": 787, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the dataframe\n", "df_archive_clean.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the project details, we got the information that the data we loaded are probably not all correct: the ratings are probably not all correct, same for the dog names and dog stages. \n", "So we will need to assess and clean those columns prior to any analysis and visualization." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2. Gather the tweet image predictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As the `image-predictions.tsv` is available through the following URL https://d17h27t6h515a5.cloudfront.net/topher/2017/August/599fd2ad_image-predictions/image-predictions.tsv, I download it first using the \"Requests\" library, and then I load it as a dataframe." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Set the images file URL\n", "images_url = 'https://d17h27t6h515a5.cloudfront.net/topher/2017/August/599fd2ad_image-predictions/image-predictions.tsv'" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Get the content \n", "response = requests.get(images_url)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Write it locally as a file\n", "with open('tweet_images_predictions.tsv', mode='wb') as file:\n", " file.write(response.content)" ] }, { "cell_type": "code", "execution_count": 788, "metadata": {}, "outputs": [], "source": [ "# load the images prediction file as a dataframe\n", "df_image = pd.read_csv('tweet_images_predictions.tsv', sep='\\t')" ] }, { "cell_type": "code", "execution_count": 789, "metadata": {}, "outputs": [], "source": [ "# create a copy for our further cleaning\n", "df_image_clean = df_image.copy()" ] }, { "cell_type": "code", "execution_count": 790, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>jpg_url</th>\n", " <th>img_num</th>\n", " <th>p1</th>\n", " <th>p1_conf</th>\n", " <th>p1_dog</th>\n", " <th>p2</th>\n", " <th>p2_conf</th>\n", " <th>p2_dog</th>\n", " <th>p3</th>\n", " <th>p3_conf</th>\n", " <th>p3_dog</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>666020888022790149</td>\n", " <td>https://pbs.twimg.com/media/CT4udn0WwAA0aMy.jpg</td>\n", " <td>1</td>\n", " <td>Welsh_springer_spaniel</td>\n", " <td>0.465074</td>\n", " <td>True</td>\n", " <td>collie</td>\n", " <td>0.156665</td>\n", " <td>True</td>\n", " <td>Shetland_sheepdog</td>\n", " <td>0.061428</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>666029285002620928</td>\n", " <td>https://pbs.twimg.com/media/CT42GRgUYAA5iDo.jpg</td>\n", " <td>1</td>\n", " <td>redbone</td>\n", " <td>0.506826</td>\n", " <td>True</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.074192</td>\n", " <td>True</td>\n", " <td>Rhodesian_ridgeback</td>\n", " <td>0.072010</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>666033412701032449</td>\n", " <td>https://pbs.twimg.com/media/CT4521TWwAEvMyu.jpg</td>\n", " <td>1</td>\n", " <td>German_shepherd</td>\n", " <td>0.596461</td>\n", " <td>True</td>\n", " <td>malinois</td>\n", " <td>0.138584</td>\n", " <td>True</td>\n", " <td>bloodhound</td>\n", " <td>0.116197</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>666044226329800704</td>\n", " <td>https://pbs.twimg.com/media/CT5Dr8HUEAA-lEu.jpg</td>\n", " <td>1</td>\n", " <td>Rhodesian_ridgeback</td>\n", " <td>0.408143</td>\n", " <td>True</td>\n", " <td>redbone</td>\n", " <td>0.360687</td>\n", " <td>True</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.222752</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>666049248165822465</td>\n", " <td>https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg</td>\n", " <td>1</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.560311</td>\n", " <td>True</td>\n", " <td>Rottweiler</td>\n", " <td>0.243682</td>\n", " <td>True</td>\n", " <td>Doberman</td>\n", " <td>0.154629</td>\n", " <td>True</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id jpg_url \\\n", "0 666020888022790149 https://pbs.twimg.com/media/CT4udn0WwAA0aMy.jpg \n", "1 666029285002620928 https://pbs.twimg.com/media/CT42GRgUYAA5iDo.jpg \n", "2 666033412701032449 https://pbs.twimg.com/media/CT4521TWwAEvMyu.jpg \n", "3 666044226329800704 https://pbs.twimg.com/media/CT5Dr8HUEAA-lEu.jpg \n", "4 666049248165822465 https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg \n", "\n", " img_num p1 p1_conf p1_dog p2 \\\n", "0 1 Welsh_springer_spaniel 0.465074 True collie \n", "1 1 redbone 0.506826 True miniature_pinscher \n", "2 1 German_shepherd 0.596461 True malinois \n", "3 1 Rhodesian_ridgeback 0.408143 True redbone \n", "4 1 miniature_pinscher 0.560311 True Rottweiler \n", "\n", " p2_conf p2_dog p3 p3_conf p3_dog \n", "0 0.156665 True Shetland_sheepdog 0.061428 True \n", "1 0.074192 True Rhodesian_ridgeback 0.072010 True \n", "2 0.138584 True bloodhound 0.116197 True \n", "3 0.360687 True miniature_pinscher 0.222752 True \n", "4 0.243682 True Doberman 0.154629 True " ] }, "execution_count": 790, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view to this dataframe\n", "df_image_clean.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3. Gather additional informations directly from twitter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the twitter archive data loaded as `df_archive_clean`, \"retweet count\" and \"favorite count\" (\"like\") are missing. \n", "We gather this additional information using twitter API. Using the tweet IDs within `df_archive_clean` we gather all this missing info through queries towards Twitter's API. \n", "The gathering process here is the following:\n", "* For each tweet ID in the WeRateDogs archive (`df_archive_clean`),\n", "* We query the Twitter API and get a tweet JSON data\n", "* We store the entire set of JSON data in a file called `tweet_json.txt`, on a new line\n", "* Once `tweet_json.txt` is completed, we read it line by line into a pandas DataFrame (at a minimum with tweet ID, retweet count, favorite count)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "# Create twitter API object to gather twitter data\n", "# Get the key, token and secrets\n", "# - keys, token and secrets are hidden here -\n", "\n", "\n", "# Create the api object\n", "# set the wait_on_rate_limit to True to automatically wait for rate limits to refill\n", "# set wait_on_rate_limit_notify to True to print a notification when Tweepy is waiting for rate limits to refill\n", "api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next cell query the twitter API and write the content into \"tweet_json.txt\" file. \n", "Due to the rate limit from twitter, this code run for more or less 30 minutes !" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 892420643555336193\n", "Successfully queried - Tweet ID: 892177421306343426\n", "Successfully queried - Tweet ID: 891815181378084864\n", "Successfully queried - Tweet ID: 891689557279858688\n", "Successfully queried - Tweet ID: 891327558926688256\n", "Successfully queried - Tweet ID: 891087950875897856\n", "Successfully queried - Tweet ID: 890971913173991426\n", "Successfully queried - Tweet ID: 890729181411237888\n", "Successfully queried - Tweet ID: 890609185150312448\n", "Successfully queried - Tweet ID: 890240255349198849\n", "Successfully queried - Tweet ID: 890006608113172480\n", "Successfully queried - Tweet ID: 889880896479866881\n", "Successfully queried - Tweet ID: 889665388333682689\n", "Successfully queried - Tweet ID: 889638837579907072\n", "Successfully queried - Tweet ID: 889531135344209921\n", "Successfully queried - Tweet ID: 889278841981685760\n", "Successfully queried - Tweet ID: 888917238123831296\n", "Successfully queried - Tweet ID: 888804989199671297\n", "Successfully queried - Tweet ID: 888554962724278272\n", "Error Tweet_Id: 888202515573088257 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 888202515573088257\n", "Successfully queried - Tweet ID: 888078434458587136\n", "Successfully queried - Tweet ID: 887705289381826560\n", "Successfully queried - Tweet ID: 887517139158093824\n", "Successfully queried - Tweet ID: 887473957103951883\n", "Successfully queried - Tweet ID: 887343217045368832\n", "Successfully queried - Tweet ID: 887101392804085760\n", "Successfully queried - Tweet ID: 886983233522544640\n", "Successfully queried - Tweet ID: 886736880519319552\n", "Successfully queried - Tweet ID: 886680336477933568\n", "Successfully queried - Tweet ID: 886366144734445568\n", "Successfully queried - Tweet ID: 886267009285017600\n", "Successfully queried - Tweet ID: 886258384151887873\n", "Successfully queried - Tweet ID: 886054160059072513\n", "Successfully queried - Tweet ID: 885984800019947520\n", "Successfully queried - Tweet ID: 885528943205470208\n", "Successfully queried - Tweet ID: 885518971528720385\n", "Successfully queried - Tweet ID: 885311592912609280\n", "Successfully queried - Tweet ID: 885167619883638784\n", "Successfully queried - Tweet ID: 884925521741709313\n", "Successfully queried - Tweet ID: 884876753390489601\n", "Successfully queried - Tweet ID: 884562892145688576\n", "Successfully queried - Tweet ID: 884441805382717440\n", "Successfully queried - Tweet ID: 884247878851493888\n", "Successfully queried - Tweet ID: 884162670584377345\n", "Successfully queried - Tweet ID: 883838122936631299\n", "Successfully queried - Tweet ID: 883482846933004288\n", "Successfully queried - Tweet ID: 883360690899218434\n", "Successfully queried - Tweet ID: 883117836046086144\n", "Successfully queried - Tweet ID: 882992080364220416\n", "Successfully queried - Tweet ID: 882762694511734784\n", "Successfully queried - Tweet ID: 882627270321602560\n", "Successfully queried - Tweet ID: 882268110199369728\n", "Successfully queried - Tweet ID: 882045870035918850\n", "Successfully queried - Tweet ID: 881906580714921986\n", "Successfully queried - Tweet ID: 881666595344535552\n", "Successfully queried - Tweet ID: 881633300179243008\n", "Successfully queried - Tweet ID: 881536004380872706\n", "Successfully queried - Tweet ID: 881268444196462592\n", "Successfully queried - Tweet ID: 880935762899988482\n", "Successfully queried - Tweet ID: 880872448815771648\n", "Successfully queried - Tweet ID: 880465832366813184\n", "Successfully queried - Tweet ID: 880221127280381952\n", "Successfully queried - Tweet ID: 880095782870896641\n", "Successfully queried - Tweet ID: 879862464715927552\n", "Successfully queried - Tweet ID: 879674319642796034\n", "Successfully queried - Tweet ID: 879492040517615616\n", "Successfully queried - Tweet ID: 879415818425184262\n", "Successfully queried - Tweet ID: 879376492567855104\n", "Successfully queried - Tweet ID: 879130579576475649\n", "Successfully queried - Tweet ID: 879050749262655488\n", "Successfully queried - Tweet ID: 879008229531029506\n", "Successfully queried - Tweet ID: 878776093423087618\n", "Successfully queried - Tweet ID: 878604707211726852\n", "Successfully queried - Tweet ID: 878404777348136964\n", "Successfully queried - Tweet ID: 878316110768087041\n", "Successfully queried - Tweet ID: 878281511006478336\n", "Successfully queried - Tweet ID: 878057613040115712\n", "Successfully queried - Tweet ID: 877736472329191424\n", "Successfully queried - Tweet ID: 877611172832227328\n", "Successfully queried - Tweet ID: 877556246731214848\n", "Successfully queried - Tweet ID: 877316821321428993\n", "Successfully queried - Tweet ID: 877201837425926144\n", "Successfully queried - Tweet ID: 876838120628539392\n", "Successfully queried - Tweet ID: 876537666061221889\n", "Successfully queried - Tweet ID: 876484053909872640\n", "Successfully queried - Tweet ID: 876120275196170240\n", "Successfully queried - Tweet ID: 875747767867523072\n", "Successfully queried - Tweet ID: 875144289856114688\n", "Successfully queried - Tweet ID: 875097192612077568\n", "Successfully queried - Tweet ID: 875021211251597312\n", "Successfully queried - Tweet ID: 874680097055178752\n", "Successfully queried - Tweet ID: 874434818259525634\n", "Successfully queried - Tweet ID: 874296783580663808\n", "Successfully queried - Tweet ID: 874057562936811520\n", "Successfully queried - Tweet ID: 874012996292530176\n", "Error Tweet_Id: 873697596434513921 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 873697596434513921\n", "Successfully queried - Tweet ID: 873580283840344065\n", "Successfully queried - Tweet ID: 873337748698140672\n", "Successfully queried - Tweet ID: 873213775632977920\n", "Successfully queried - Tweet ID: 872967104147763200\n", "Successfully queried - Tweet ID: 872820683541237760\n", "Error Tweet_Id: 872668790621863937 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 872668790621863937\n", "Successfully queried - Tweet ID: 872620804844003328\n", "Successfully queried - Tweet ID: 872486979161796608\n", "Error Tweet_Id: 872261713294495745 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 872261713294495745\n", "Successfully queried - Tweet ID: 872122724285648897\n", "Successfully queried - Tweet ID: 871879754684805121\n", "Successfully queried - Tweet ID: 871762521631449091\n", "Successfully queried - Tweet ID: 871515927908634625\n", "Successfully queried - Tweet ID: 871166179821445120\n", "Successfully queried - Tweet ID: 871102520638267392\n", "Successfully queried - Tweet ID: 871032628920680449\n", "Successfully queried - Tweet ID: 870804317367881728\n", "Successfully queried - Tweet ID: 870726314365509632\n", "Successfully queried - Tweet ID: 870656317836468226\n", "Successfully queried - Tweet ID: 870374049280663552\n", "Successfully queried - Tweet ID: 870308999962521604\n", "Successfully queried - Tweet ID: 870063196459192321\n", "Error Tweet_Id: 869988702071779329 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 869988702071779329\n", "Successfully queried - Tweet ID: 869772420881756160\n", "Successfully queried - Tweet ID: 869702957897576449\n", "Successfully queried - Tweet ID: 869596645499047938\n", "Successfully queried - Tweet ID: 869227993411051520\n", "Successfully queried - Tweet ID: 868880397819494401\n", "Successfully queried - Tweet ID: 868639477480148993\n", "Successfully queried - Tweet ID: 868622495443632128\n", "Successfully queried - Tweet ID: 868552278524837888\n", "Successfully queried - Tweet ID: 867900495410671616\n", "Successfully queried - Tweet ID: 867774946302451713\n", "Successfully queried - Tweet ID: 867421006826221569\n", "Successfully queried - Tweet ID: 867072653475098625\n", "Successfully queried - Tweet ID: 867051520902168576\n", "Error Tweet_Id: 866816280283807744 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 866816280283807744\n", "Successfully queried - Tweet ID: 866720684873056260\n", "Successfully queried - Tweet ID: 866686824827068416\n", "Successfully queried - Tweet ID: 866450705531457537\n", "Successfully queried - Tweet ID: 866334964761202691\n", "Successfully queried - Tweet ID: 866094527597207552\n", "Successfully queried - Tweet ID: 865718153858494464\n", "Successfully queried - Tweet ID: 865359393868664832\n", "Successfully queried - Tweet ID: 865006731092295680\n", "Successfully queried - Tweet ID: 864873206498414592\n", "Successfully queried - Tweet ID: 864279568663928832\n", "Successfully queried - Tweet ID: 864197398364647424\n", "Successfully queried - Tweet ID: 863907417377173506\n", "Successfully queried - Tweet ID: 863553081350529029\n", "Successfully queried - Tweet ID: 863471782782697472\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 863432100342583297\n", "Successfully queried - Tweet ID: 863427515083354112\n", "Successfully queried - Tweet ID: 863079547188785154\n", "Successfully queried - Tweet ID: 863062471531167744\n", "Successfully queried - Tweet ID: 862831371563274240\n", "Successfully queried - Tweet ID: 862722525377298433\n", "Successfully queried - Tweet ID: 862457590147678208\n", "Successfully queried - Tweet ID: 862096992088072192\n", "Error Tweet_Id: 861769973181624320 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 861769973181624320\n", "Successfully queried - Tweet ID: 861383897657036800\n", "Successfully queried - Tweet ID: 861288531465048066\n", "Successfully queried - Tweet ID: 861005113778896900\n", "Successfully queried - Tweet ID: 860981674716409858\n", "Successfully queried - Tweet ID: 860924035999428608\n", "Successfully queried - Tweet ID: 860563773140209665\n", "Successfully queried - Tweet ID: 860524505164394496\n", "Successfully queried - Tweet ID: 860276583193509888\n", "Successfully queried - Tweet ID: 860184849394610176\n", "Successfully queried - Tweet ID: 860177593139703809\n", "Successfully queried - Tweet ID: 859924526012018688\n", "Successfully queried - Tweet ID: 859851578198683649\n", "Successfully queried - Tweet ID: 859607811541651456\n", "Successfully queried - Tweet ID: 859196978902773760\n", "Successfully queried - Tweet ID: 859074603037188101\n", "Successfully queried - Tweet ID: 858860390427611136\n", "Successfully queried - Tweet ID: 858843525470990336\n", "Successfully queried - Tweet ID: 858471635011153920\n", "Successfully queried - Tweet ID: 858107933456039936\n", "Successfully queried - Tweet ID: 857989990357356544\n", "Successfully queried - Tweet ID: 857746408056729600\n", "Successfully queried - Tweet ID: 857393404942143489\n", "Successfully queried - Tweet ID: 857263160327368704\n", "Successfully queried - Tweet ID: 857214891891077121\n", "Successfully queried - Tweet ID: 857062103051644929\n", "Successfully queried - Tweet ID: 857029823797047296\n", "Error Tweet_Id: 856602993587888130 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 856602993587888130\n", "Successfully queried - Tweet ID: 856543823941562368\n", "Successfully queried - Tweet ID: 856526610513747968\n", "Successfully queried - Tweet ID: 856330835276025856\n", "Successfully queried - Tweet ID: 856288084350160898\n", "Successfully queried - Tweet ID: 856282028240666624\n", "Successfully queried - Tweet ID: 855862651834028034\n", "Successfully queried - Tweet ID: 855860136149123072\n", "Successfully queried - Tweet ID: 855857698524602368\n", "Successfully queried - Tweet ID: 855851453814013952\n", "Successfully queried - Tweet ID: 855818117272018944\n", "Successfully queried - Tweet ID: 855459453768019968\n", "Successfully queried - Tweet ID: 855245323840757760\n", "Successfully queried - Tweet ID: 855138241867124737\n", "Successfully queried - Tweet ID: 854732716440526848\n", "Successfully queried - Tweet ID: 854482394044301312\n", "Successfully queried - Tweet ID: 854365224396361728\n", "Successfully queried - Tweet ID: 854120357044912130\n", "Successfully queried - Tweet ID: 854010172552949760\n", "Successfully queried - Tweet ID: 853760880890318849\n", "Successfully queried - Tweet ID: 853639147608842240\n", "Successfully queried - Tweet ID: 853299958564483072\n", "Successfully queried - Tweet ID: 852936405516943360\n", "Successfully queried - Tweet ID: 852912242202992640\n", "Successfully queried - Tweet ID: 852672615818899456\n", "Successfully queried - Tweet ID: 852553447878664193\n", "Successfully queried - Tweet ID: 852311364735569921\n", "Successfully queried - Tweet ID: 852226086759018497\n", "Successfully queried - Tweet ID: 852189679701164033\n", "Successfully queried - Tweet ID: 851953902622658560\n", "Successfully queried - Tweet ID: 851861385021730816\n", "Successfully queried - Tweet ID: 851591660324737024\n", "Successfully queried - Tweet ID: 851464819735769094\n", "Successfully queried - Tweet ID: 851224888060895234\n", "Successfully queried - Tweet ID: 850753642995093505\n", "Successfully queried - Tweet ID: 850380195714523136\n", "Successfully queried - Tweet ID: 850333567704068097\n", "Successfully queried - Tweet ID: 850145622816686080\n", "Successfully queried - Tweet ID: 850019790995546112\n", "Successfully queried - Tweet ID: 849776966551130114\n", "Successfully queried - Tweet ID: 849668094696017920\n", "Successfully queried - Tweet ID: 849412302885593088\n", "Successfully queried - Tweet ID: 849336543269576704\n", "Successfully queried - Tweet ID: 849051919805034497\n", "Successfully queried - Tweet ID: 848690551926992896\n", "Successfully queried - Tweet ID: 848324959059550208\n", "Successfully queried - Tweet ID: 848213670039564288\n", "Successfully queried - Tweet ID: 848212111729840128\n", "Successfully queried - Tweet ID: 847978865427394560\n", "Successfully queried - Tweet ID: 847971574464610304\n", "Successfully queried - Tweet ID: 847962785489326080\n", "Successfully queried - Tweet ID: 847842811428974592\n", "Successfully queried - Tweet ID: 847617282490613760\n", "Successfully queried - Tweet ID: 847606175596138505\n", "Successfully queried - Tweet ID: 847251039262605312\n", "Successfully queried - Tweet ID: 847157206088847362\n", "Successfully queried - Tweet ID: 847116187444137987\n", "Successfully queried - Tweet ID: 846874817362120707\n", "Successfully queried - Tweet ID: 846514051647705089\n", "Successfully queried - Tweet ID: 846505985330044928\n", "Successfully queried - Tweet ID: 846153765933735936\n", "Successfully queried - Tweet ID: 846139713627017216\n", "Successfully queried - Tweet ID: 846042936437604353\n", "Successfully queried - Tweet ID: 845812042753855489\n", "Successfully queried - Tweet ID: 845677943972139009\n", "Error Tweet_Id: 845459076796616705 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 845459076796616705\n", "Successfully queried - Tweet ID: 845397057150107648\n", "Successfully queried - Tweet ID: 845306882940190720\n", "Successfully queried - Tweet ID: 845098359547420673\n", "Successfully queried - Tweet ID: 844979544864018432\n", "Successfully queried - Tweet ID: 844973813909606400\n", "Error Tweet_Id: 844704788403113984 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 844704788403113984\n", "Successfully queried - Tweet ID: 844580511645339650\n", "Successfully queried - Tweet ID: 844223788422217728\n", "Successfully queried - Tweet ID: 843981021012017153\n", "Successfully queried - Tweet ID: 843856843873095681\n", "Successfully queried - Tweet ID: 843604394117681152\n", "Successfully queried - Tweet ID: 843235543001513987\n", "Error Tweet_Id: 842892208864923648 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 842892208864923648\n", "Successfully queried - Tweet ID: 842846295480000512\n", "Successfully queried - Tweet ID: 842765311967449089\n", "Successfully queried - Tweet ID: 842535590457499648\n", "Successfully queried - Tweet ID: 842163532590374912\n", "Successfully queried - Tweet ID: 842115215311396866\n", "Successfully queried - Tweet ID: 841833993020538882\n", "Successfully queried - Tweet ID: 841680585030541313\n", "Successfully queried - Tweet ID: 841439858740625411\n", "Successfully queried - Tweet ID: 841320156043304961\n", "Successfully queried - Tweet ID: 841314665196081154\n", "Successfully queried - Tweet ID: 841077006473256960\n", "Successfully queried - Tweet ID: 840761248237133825\n", "Successfully queried - Tweet ID: 840728873075638272\n", "Successfully queried - Tweet ID: 840698636975636481\n", "Successfully queried - Tweet ID: 840696689258311684\n", "Successfully queried - Tweet ID: 840632337062862849\n", "Successfully queried - Tweet ID: 840370681858686976\n", "Successfully queried - Tweet ID: 840268004936019968\n", "Successfully queried - Tweet ID: 839990271299457024\n", "Successfully queried - Tweet ID: 839549326359670784\n", "Successfully queried - Tweet ID: 839290600511926273\n", "Successfully queried - Tweet ID: 839239871831150596\n", "Successfully queried - Tweet ID: 838952994649550848\n", "Successfully queried - Tweet ID: 838921590096166913\n", "Successfully queried - Tweet ID: 838916489579200512\n", "Successfully queried - Tweet ID: 838831947270979586\n", "Successfully queried - Tweet ID: 838561493054533637\n", "Successfully queried - Tweet ID: 838476387338051585\n", "Successfully queried - Tweet ID: 838201503651401729\n", "Successfully queried - Tweet ID: 838150277551247360\n", "Successfully queried - Tweet ID: 838085839343206401\n", "Successfully queried - Tweet ID: 838083903487373313\n", "Successfully queried - Tweet ID: 837820167694528512\n", "Successfully queried - Tweet ID: 837482249356513284\n", "Successfully queried - Tweet ID: 837471256429613056\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 837366284874571778\n", "Successfully queried - Tweet ID: 837110210464448512\n", "Error Tweet_Id: 837012587749474308 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 837012587749474308\n", "Successfully queried - Tweet ID: 836989968035819520\n", "Successfully queried - Tweet ID: 836753516572119041\n", "Successfully queried - Tweet ID: 836677758902222849\n", "Successfully queried - Tweet ID: 836648853927522308\n", "Successfully queried - Tweet ID: 836397794269200385\n", "Successfully queried - Tweet ID: 836380477523124226\n", "Successfully queried - Tweet ID: 836260088725786625\n", "Successfully queried - Tweet ID: 836001077879255040\n", "Successfully queried - Tweet ID: 835685285446955009\n", "Successfully queried - Tweet ID: 835574547218894849\n", "Successfully queried - Tweet ID: 835536468978302976\n", "Successfully queried - Tweet ID: 835309094223372289\n", "Successfully queried - Tweet ID: 835297930240217089\n", "Successfully queried - Tweet ID: 835264098648616962\n", "Successfully queried - Tweet ID: 835246439529840640\n", "Successfully queried - Tweet ID: 835172783151792128\n", "Successfully queried - Tweet ID: 835152434251116546\n", "Successfully queried - Tweet ID: 834931633769889797\n", "Successfully queried - Tweet ID: 834786237630337024\n", "Successfully queried - Tweet ID: 834574053763584002\n", "Successfully queried - Tweet ID: 834477809192075265\n", "Successfully queried - Tweet ID: 834458053273591808\n", "Successfully queried - Tweet ID: 834209720923721728\n", "Successfully queried - Tweet ID: 834167344700198914\n", "Successfully queried - Tweet ID: 834089966724603904\n", "Successfully queried - Tweet ID: 834086379323871233\n", "Successfully queried - Tweet ID: 833863086058651648\n", "Successfully queried - Tweet ID: 833826103416520705\n", "Successfully queried - Tweet ID: 833732339549220864\n", "Successfully queried - Tweet ID: 833722901757046785\n", "Successfully queried - Tweet ID: 833479644947025920\n", "Successfully queried - Tweet ID: 833124694597443584\n", "Successfully queried - Tweet ID: 832998151111966721\n", "Successfully queried - Tweet ID: 832769181346996225\n", "Successfully queried - Tweet ID: 832757312314028032\n", "Successfully queried - Tweet ID: 832682457690300417\n", "Successfully queried - Tweet ID: 832645525019123713\n", "Successfully queried - Tweet ID: 832636094638288896\n", "Successfully queried - Tweet ID: 832397543355072512\n", "Successfully queried - Tweet ID: 832369877331693569\n", "Successfully queried - Tweet ID: 832273440279240704\n", "Successfully queried - Tweet ID: 832215909146226688\n", "Successfully queried - Tweet ID: 832215726631055365\n", "Successfully queried - Tweet ID: 832088576586297345\n", "Successfully queried - Tweet ID: 832040443403784192\n", "Successfully queried - Tweet ID: 832032802820481025\n", "Successfully queried - Tweet ID: 831939777352105988\n", "Successfully queried - Tweet ID: 831926988323639298\n", "Successfully queried - Tweet ID: 831911600680497154\n", "Successfully queried - Tweet ID: 831670449226514432\n", "Successfully queried - Tweet ID: 831650051525054464\n", "Successfully queried - Tweet ID: 831552930092285952\n", "Successfully queried - Tweet ID: 831322785565769729\n", "Successfully queried - Tweet ID: 831315979191906304\n", "Successfully queried - Tweet ID: 831309418084069378\n", "Successfully queried - Tweet ID: 831262627380748289\n", "Successfully queried - Tweet ID: 830956169170665475\n", "Successfully queried - Tweet ID: 830583320585068544\n", "Successfully queried - Tweet ID: 830173239259324417\n", "Successfully queried - Tweet ID: 830097400375152640\n", "Successfully queried - Tweet ID: 829878982036299777\n", "Successfully queried - Tweet ID: 829861396166877184\n", "Successfully queried - Tweet ID: 829501995190984704\n", "Successfully queried - Tweet ID: 829449946868879360\n", "Successfully queried - Tweet ID: 829374341691346946\n", "Successfully queried - Tweet ID: 829141528400556032\n", "Successfully queried - Tweet ID: 829011960981237760\n", "Successfully queried - Tweet ID: 828801551087042563\n", "Successfully queried - Tweet ID: 828770345708580865\n", "Successfully queried - Tweet ID: 828708714936930305\n", "Successfully queried - Tweet ID: 828650029636317184\n", "Successfully queried - Tweet ID: 828409743546925057\n", "Successfully queried - Tweet ID: 828408677031882754\n", "Successfully queried - Tweet ID: 828381636999917570\n", "Successfully queried - Tweet ID: 828376505180889089\n", "Successfully queried - Tweet ID: 828372645993398273\n", "Successfully queried - Tweet ID: 828361771580813312\n", "Successfully queried - Tweet ID: 828046555563323392\n", "Successfully queried - Tweet ID: 828011680017821696\n", "Successfully queried - Tweet ID: 827933404142436356\n", "Successfully queried - Tweet ID: 827653905312006145\n", "Successfully queried - Tweet ID: 827600520311402496\n", "Successfully queried - Tweet ID: 827324948884643840\n", "Error Tweet_Id: 827228250799742977 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 827228250799742977\n", "Successfully queried - Tweet ID: 827199976799354881\n", "Successfully queried - Tweet ID: 826958653328592898\n", "Successfully queried - Tweet ID: 826848821049180160\n", "Successfully queried - Tweet ID: 826615380357632002\n", "Successfully queried - Tweet ID: 826598799820865537\n", "Successfully queried - Tweet ID: 826598365270007810\n", "Successfully queried - Tweet ID: 826476773533745153\n", "Successfully queried - Tweet ID: 826240494070030336\n", "Successfully queried - Tweet ID: 826204788643753985\n", "Successfully queried - Tweet ID: 826115272272650244\n", "Successfully queried - Tweet ID: 825876512159186944\n", "Successfully queried - Tweet ID: 825829644528148480\n", "Successfully queried - Tweet ID: 825535076884762624\n", "Successfully queried - Tweet ID: 825147591692263424\n", "Successfully queried - Tweet ID: 825120256414846976\n", "Successfully queried - Tweet ID: 825026590719483904\n", "Successfully queried - Tweet ID: 824796380199809024\n", "Successfully queried - Tweet ID: 824775126675836928\n", "Successfully queried - Tweet ID: 824663926340194305\n", "Successfully queried - Tweet ID: 824325613288833024\n", "Successfully queried - Tweet ID: 824297048279236611\n", "Successfully queried - Tweet ID: 824025158776213504\n", "Successfully queried - Tweet ID: 823939628516474880\n", "Successfully queried - Tweet ID: 823719002937630720\n", "Successfully queried - Tweet ID: 823699002998870016\n", "Successfully queried - Tweet ID: 823581115634085888\n", "Successfully queried - Tweet ID: 823333489516937216\n", "Successfully queried - Tweet ID: 823322678127919110\n", "Successfully queried - Tweet ID: 823269594223824897\n", "Successfully queried - Tweet ID: 822975315408461824\n", "Successfully queried - Tweet ID: 822872901745569793\n", "Successfully queried - Tweet ID: 822859134160621569\n", "Successfully queried - Tweet ID: 822647212903690241\n", "Successfully queried - Tweet ID: 822610361945911296\n", "Successfully queried - Tweet ID: 822489057087389700\n", "Successfully queried - Tweet ID: 822462944365645825\n", "Successfully queried - Tweet ID: 822244816520155136\n", "Successfully queried - Tweet ID: 822163064745328640\n", "Successfully queried - Tweet ID: 821886076407029760\n", "Successfully queried - Tweet ID: 821813639212650496\n", "Successfully queried - Tweet ID: 821765923262631936\n", "Successfully queried - Tweet ID: 821522889702862852\n", "Successfully queried - Tweet ID: 821421320206483457\n", "Successfully queried - Tweet ID: 821407182352777218\n", "Successfully queried - Tweet ID: 821153421864615936\n", "Successfully queried - Tweet ID: 821149554670182400\n", "Successfully queried - Tweet ID: 821107785811234820\n", "Successfully queried - Tweet ID: 821044531881721856\n", "Successfully queried - Tweet ID: 820837357901512704\n", "Successfully queried - Tweet ID: 820749716845686786\n", "Successfully queried - Tweet ID: 820690176645140481\n", "Successfully queried - Tweet ID: 820494788566847489\n", "Successfully queried - Tweet ID: 820446719150292993\n", "Successfully queried - Tweet ID: 820314633777061888\n", "Successfully queried - Tweet ID: 820078625395449857\n", "Successfully queried - Tweet ID: 820013781606658049\n", "Successfully queried - Tweet ID: 819952236453363712\n", "Successfully queried - Tweet ID: 819924195358416896\n", "Successfully queried - Tweet ID: 819711362133872643\n", "Successfully queried - Tweet ID: 819588359383371776\n", "Successfully queried - Tweet ID: 819347104292290561\n", "Successfully queried - Tweet ID: 819238181065359361\n", "Successfully queried - Tweet ID: 819227688460238848\n", "Successfully queried - Tweet ID: 819015337530290176\n", "Successfully queried - Tweet ID: 819015331746349057\n", "Successfully queried - Tweet ID: 819006400881917954\n", "Successfully queried - Tweet ID: 819004803107983360\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 818646164899774465\n", "Successfully queried - Tweet ID: 818627210458333184\n", "Successfully queried - Tweet ID: 818614493328580609\n", "Successfully queried - Tweet ID: 818588835076603904\n", "Successfully queried - Tweet ID: 818536468981415936\n", "Successfully queried - Tweet ID: 818307523543449600\n", "Successfully queried - Tweet ID: 818259473185828864\n", "Successfully queried - Tweet ID: 818145370475810820\n", "Successfully queried - Tweet ID: 817908911860748288\n", "Successfully queried - Tweet ID: 817827839487737858\n", "Successfully queried - Tweet ID: 817777686764523521\n", "Successfully queried - Tweet ID: 817536400337801217\n", "Successfully queried - Tweet ID: 817502432452313088\n", "Successfully queried - Tweet ID: 817423860136083457\n", "Successfully queried - Tweet ID: 817415592588222464\n", "Successfully queried - Tweet ID: 817181837579653120\n", "Successfully queried - Tweet ID: 817171292965273600\n", "Successfully queried - Tweet ID: 817120970343411712\n", "Successfully queried - Tweet ID: 817056546584727552\n", "Successfully queried - Tweet ID: 816829038950027264\n", "Successfully queried - Tweet ID: 816816676327063552\n", "Successfully queried - Tweet ID: 816697700272001025\n", "Successfully queried - Tweet ID: 816450570814898180\n", "Successfully queried - Tweet ID: 816336735214911488\n", "Successfully queried - Tweet ID: 816091915477250048\n", "Successfully queried - Tweet ID: 816062466425819140\n", "Successfully queried - Tweet ID: 816014286006976512\n", "Successfully queried - Tweet ID: 815990720817401858\n", "Successfully queried - Tweet ID: 815966073409433600\n", "Successfully queried - Tweet ID: 815745968457060357\n", "Successfully queried - Tweet ID: 815736392542261248\n", "Successfully queried - Tweet ID: 815639385530101762\n", "Successfully queried - Tweet ID: 815390420867969024\n", "Successfully queried - Tweet ID: 814986499976527872\n", "Successfully queried - Tweet ID: 814638523311648768\n", "Successfully queried - Tweet ID: 814578408554463233\n", "Successfully queried - Tweet ID: 814530161257443328\n", "Successfully queried - Tweet ID: 814153002265309185\n", "Successfully queried - Tweet ID: 813944609378369540\n", "Successfully queried - Tweet ID: 813910438903693312\n", "Successfully queried - Tweet ID: 813812741911748608\n", "Successfully queried - Tweet ID: 813800681631023104\n", "Successfully queried - Tweet ID: 813217897535406080\n", "Successfully queried - Tweet ID: 813202720496779264\n", "Successfully queried - Tweet ID: 813187593374461952\n", "Successfully queried - Tweet ID: 813172488309972993\n", "Successfully queried - Tweet ID: 813157409116065792\n", "Successfully queried - Tweet ID: 813142292504645637\n", "Successfully queried - Tweet ID: 813130366689148928\n", "Successfully queried - Tweet ID: 813127251579564032\n", "Successfully queried - Tweet ID: 813112105746448384\n", "Successfully queried - Tweet ID: 813096984823349248\n", "Successfully queried - Tweet ID: 813081950185472002\n", "Successfully queried - Tweet ID: 813066809284972545\n", "Successfully queried - Tweet ID: 813051746834595840\n", "Successfully queried - Tweet ID: 812781120811126785\n", "Error Tweet_Id: 812747805718642688 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 812747805718642688\n", "Successfully queried - Tweet ID: 812709060537683968\n", "Successfully queried - Tweet ID: 812503143955202048\n", "Successfully queried - Tweet ID: 812466873996607488\n", "Successfully queried - Tweet ID: 812372279581671427\n", "Successfully queried - Tweet ID: 811985624773361665\n", "Successfully queried - Tweet ID: 811744202451197953\n", "Successfully queried - Tweet ID: 811647686436880384\n", "Successfully queried - Tweet ID: 811627233043480576\n", "Successfully queried - Tweet ID: 811386762094317568\n", "Successfully queried - Tweet ID: 810984652412424192\n", "Successfully queried - Tweet ID: 810896069567610880\n", "Successfully queried - Tweet ID: 810657578271330305\n", "Successfully queried - Tweet ID: 810284430598270976\n", "Successfully queried - Tweet ID: 810254108431155201\n", "Successfully queried - Tweet ID: 809920764300447744\n", "Successfully queried - Tweet ID: 809808892968534016\n", "Successfully queried - Tweet ID: 809448704142938112\n", "Successfully queried - Tweet ID: 809220051211603969\n", "Successfully queried - Tweet ID: 809084759137812480\n", "Successfully queried - Tweet ID: 808838249661788160\n", "Successfully queried - Tweet ID: 808733504066486276\n", "Successfully queried - Tweet ID: 808501579447930884\n", "Successfully queried - Tweet ID: 808344865868283904\n", "Successfully queried - Tweet ID: 808134635716833280\n", "Successfully queried - Tweet ID: 808106460588765185\n", "Successfully queried - Tweet ID: 808001312164028416\n", "Successfully queried - Tweet ID: 807621403335917568\n", "Successfully queried - Tweet ID: 807106840509214720\n", "Successfully queried - Tweet ID: 807059379405148160\n", "Successfully queried - Tweet ID: 807010152071229440\n", "Successfully queried - Tweet ID: 806629075125202948\n", "Successfully queried - Tweet ID: 806620845233815552\n", "Successfully queried - Tweet ID: 806576416489959424\n", "Successfully queried - Tweet ID: 806542213899489280\n", "Successfully queried - Tweet ID: 806242860592926720\n", "Successfully queried - Tweet ID: 806219024703037440\n", "Successfully queried - Tweet ID: 805958939288408065\n", "Successfully queried - Tweet ID: 805932879469572096\n", "Successfully queried - Tweet ID: 805826884734976000\n", "Successfully queried - Tweet ID: 805823200554876929\n", "Successfully queried - Tweet ID: 805520635690676224\n", "Successfully queried - Tweet ID: 805487436403003392\n", "Successfully queried - Tweet ID: 805207613751304193\n", "Successfully queried - Tweet ID: 804738756058218496\n", "Successfully queried - Tweet ID: 804475857670639616\n", "Successfully queried - Tweet ID: 804413760345620481\n", "Successfully queried - Tweet ID: 804026241225523202\n", "Successfully queried - Tweet ID: 803773340896923648\n", "Successfully queried - Tweet ID: 803692223237865472\n", "Successfully queried - Tweet ID: 803638050916102144\n", "Successfully queried - Tweet ID: 803380650405482500\n", "Successfully queried - Tweet ID: 803321560782307329\n", "Successfully queried - Tweet ID: 803276597545603072\n", "Successfully queried - Tweet ID: 802952499103731712\n", "Successfully queried - Tweet ID: 802624713319034886\n", "Successfully queried - Tweet ID: 802600418706604034\n", "Successfully queried - Tweet ID: 802572683846291456\n", "Successfully queried - Tweet ID: 802323869084381190\n", "Successfully queried - Tweet ID: 802265048156610565\n", "Error Tweet_Id: 802247111496568832 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 802247111496568832\n", "Successfully queried - Tweet ID: 802239329049477120\n", "Successfully queried - Tweet ID: 802185808107208704\n", "Successfully queried - Tweet ID: 801958328846974976\n", "Successfully queried - Tweet ID: 801854953262350336\n", "Successfully queried - Tweet ID: 801538201127157760\n", "Successfully queried - Tweet ID: 801285448605831168\n", "Successfully queried - Tweet ID: 801167903437357056\n", "Successfully queried - Tweet ID: 801127390143516673\n", "Successfully queried - Tweet ID: 801115127852503040\n", "Successfully queried - Tweet ID: 800859414831898624\n", "Successfully queried - Tweet ID: 800855607700029440\n", "Successfully queried - Tweet ID: 800751577355128832\n", "Successfully queried - Tweet ID: 800513324630806528\n", "Successfully queried - Tweet ID: 800459316964663297\n", "Successfully queried - Tweet ID: 800443802682937345\n", "Successfully queried - Tweet ID: 800388270626521089\n", "Successfully queried - Tweet ID: 800188575492947969\n", "Successfully queried - Tweet ID: 800141422401830912\n", "Successfully queried - Tweet ID: 800018252395122689\n", "Successfully queried - Tweet ID: 799774291445383169\n", "Successfully queried - Tweet ID: 799757965289017345\n", "Successfully queried - Tweet ID: 799422933579902976\n", "Successfully queried - Tweet ID: 799308762079035393\n", "Successfully queried - Tweet ID: 799297110730567681\n", "Successfully queried - Tweet ID: 799063482566066176\n", "Successfully queried - Tweet ID: 798933969379225600\n", "Successfully queried - Tweet ID: 798925684722855936\n", "Successfully queried - Tweet ID: 798705661114773508\n", "Successfully queried - Tweet ID: 798701998996647937\n", "Successfully queried - Tweet ID: 798697898615730177\n", "Successfully queried - Tweet ID: 798694562394996736\n", "Successfully queried - Tweet ID: 798686750113755136\n", "Successfully queried - Tweet ID: 798682547630837760\n", "Successfully queried - Tweet ID: 798673117451325440\n", "Successfully queried - Tweet ID: 798665375516884993\n", "Successfully queried - Tweet ID: 798644042770751489\n", "Successfully queried - Tweet ID: 798628517273620480\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 798585098161549313\n", "Successfully queried - Tweet ID: 798576900688019456\n", "Successfully queried - Tweet ID: 798340744599797760\n", "Successfully queried - Tweet ID: 798209839306514432\n", "Successfully queried - Tweet ID: 797971864723324932\n", "Successfully queried - Tweet ID: 797545162159308800\n", "Successfully queried - Tweet ID: 797236660651966464\n", "Successfully queried - Tweet ID: 797165961484890113\n", "Successfully queried - Tweet ID: 796904159865868288\n", "Successfully queried - Tweet ID: 796865951799083009\n", "Successfully queried - Tweet ID: 796759840936919040\n", "Successfully queried - Tweet ID: 796563435802726400\n", "Successfully queried - Tweet ID: 796484825502875648\n", "Successfully queried - Tweet ID: 796387464403357696\n", "Successfully queried - Tweet ID: 796177847564038144\n", "Successfully queried - Tweet ID: 796149749086875649\n", "Successfully queried - Tweet ID: 796125600683540480\n", "Successfully queried - Tweet ID: 796116448414461957\n", "Successfully queried - Tweet ID: 796080075804475393\n", "Successfully queried - Tweet ID: 796031486298386433\n", "Successfully queried - Tweet ID: 795464331001561088\n", "Successfully queried - Tweet ID: 795400264262053889\n", "Successfully queried - Tweet ID: 795076730285391872\n", "Successfully queried - Tweet ID: 794983741416415232\n", "Successfully queried - Tweet ID: 794926597468000259\n", "Successfully queried - Tweet ID: 794355576146903043\n", "Successfully queried - Tweet ID: 794332329137291264\n", "Successfully queried - Tweet ID: 794205286408003585\n", "Successfully queried - Tweet ID: 793962221541933056\n", "Successfully queried - Tweet ID: 793845145112371200\n", "Successfully queried - Tweet ID: 793614319594401792\n", "Successfully queried - Tweet ID: 793601777308463104\n", "Successfully queried - Tweet ID: 793500921481273345\n", "Successfully queried - Tweet ID: 793286476301799424\n", "Successfully queried - Tweet ID: 793271401113350145\n", "Successfully queried - Tweet ID: 793256262322548741\n", "Successfully queried - Tweet ID: 793241302385262592\n", "Successfully queried - Tweet ID: 793226087023144960\n", "Successfully queried - Tweet ID: 793210959003287553\n", "Successfully queried - Tweet ID: 793195938047070209\n", "Successfully queried - Tweet ID: 793180763617361921\n", "Successfully queried - Tweet ID: 793165685325201412\n", "Successfully queried - Tweet ID: 793150605191548928\n", "Successfully queried - Tweet ID: 793135492858580992\n", "Successfully queried - Tweet ID: 793120401413079041\n", "Successfully queried - Tweet ID: 792913359805018113\n", "Successfully queried - Tweet ID: 792883833364439040\n", "Successfully queried - Tweet ID: 792773781206999040\n", "Successfully queried - Tweet ID: 792394556390137856\n", "Successfully queried - Tweet ID: 792050063153438720\n", "Successfully queried - Tweet ID: 791821351946420224\n", "Successfully queried - Tweet ID: 791784077045166082\n", "Successfully queried - Tweet ID: 791780927877898241\n", "Successfully queried - Tweet ID: 791774931465953280\n", "Successfully queried - Tweet ID: 791672322847637504\n", "Successfully queried - Tweet ID: 791406955684368384\n", "Successfully queried - Tweet ID: 791312159183634433\n", "Successfully queried - Tweet ID: 791026214425268224\n", "Successfully queried - Tweet ID: 790987426131050500\n", "Successfully queried - Tweet ID: 790946055508652032\n", "Successfully queried - Tweet ID: 790723298204217344\n", "Successfully queried - Tweet ID: 790698755171364864\n", "Successfully queried - Tweet ID: 790581949425475584\n", "Successfully queried - Tweet ID: 790337589677002753\n", "Successfully queried - Tweet ID: 790277117346975746\n", "Successfully queried - Tweet ID: 790227638568808452\n", "Successfully queried - Tweet ID: 789986466051088384\n", "Successfully queried - Tweet ID: 789960241177853952\n", "Successfully queried - Tweet ID: 789903600034189313\n", "Successfully queried - Tweet ID: 789628658055020548\n", "Successfully queried - Tweet ID: 789599242079838210\n", "Successfully queried - Tweet ID: 789530877013393408\n", "Successfully queried - Tweet ID: 789314372632018944\n", "Successfully queried - Tweet ID: 789280767834746880\n", "Successfully queried - Tweet ID: 789268448748703744\n", "Successfully queried - Tweet ID: 789137962068021249\n", "Successfully queried - Tweet ID: 788908386943430656\n", "Successfully queried - Tweet ID: 788765914992902144\n", "Successfully queried - Tweet ID: 788552643979468800\n", "Successfully queried - Tweet ID: 788412144018661376\n", "Successfully queried - Tweet ID: 788178268662984705\n", "Successfully queried - Tweet ID: 788150585577050112\n", "Successfully queried - Tweet ID: 788070120937619456\n", "Successfully queried - Tweet ID: 788039637453406209\n", "Successfully queried - Tweet ID: 787810552592695296\n", "Successfully queried - Tweet ID: 787717603741622272\n", "Successfully queried - Tweet ID: 787397959788929025\n", "Successfully queried - Tweet ID: 787322443945877504\n", "Successfully queried - Tweet ID: 787111942498508800\n", "Successfully queried - Tweet ID: 786963064373534720\n", "Successfully queried - Tweet ID: 786729988674449408\n", "Successfully queried - Tweet ID: 786709082849828864\n", "Successfully queried - Tweet ID: 786664955043049472\n", "Successfully queried - Tweet ID: 786595970293370880\n", "Successfully queried - Tweet ID: 786363235746385920\n", "Successfully queried - Tweet ID: 786286427768250368\n", "Successfully queried - Tweet ID: 786233965241827333\n", "Successfully queried - Tweet ID: 786051337297522688\n", "Successfully queried - Tweet ID: 786036967502913536\n", "Successfully queried - Tweet ID: 785927819176054784\n", "Successfully queried - Tweet ID: 785872687017132033\n", "Successfully queried - Tweet ID: 785639753186217984\n", "Successfully queried - Tweet ID: 785533386513321988\n", "Successfully queried - Tweet ID: 785515384317313025\n", "Successfully queried - Tweet ID: 785264754247995392\n", "Successfully queried - Tweet ID: 785170936622350336\n", "Successfully queried - Tweet ID: 784826020293709826\n", "Successfully queried - Tweet ID: 784517518371221505\n", "Successfully queried - Tweet ID: 784431430411685888\n", "Successfully queried - Tweet ID: 784183165795655680\n", "Successfully queried - Tweet ID: 784057939640352768\n", "Successfully queried - Tweet ID: 783839966405230592\n", "Successfully queried - Tweet ID: 783821107061198850\n", "Successfully queried - Tweet ID: 783695101801398276\n", "Successfully queried - Tweet ID: 783466772167098368\n", "Successfully queried - Tweet ID: 783391753726550016\n", "Successfully queried - Tweet ID: 783347506784731136\n", "Successfully queried - Tweet ID: 783334639985389568\n", "Successfully queried - Tweet ID: 783085703974514689\n", "Successfully queried - Tweet ID: 782969140009107456\n", "Successfully queried - Tweet ID: 782747134529531904\n", "Successfully queried - Tweet ID: 782722598790725632\n", "Successfully queried - Tweet ID: 782598640137187329\n", "Successfully queried - Tweet ID: 782305867769217024\n", "Successfully queried - Tweet ID: 782021823840026624\n", "Successfully queried - Tweet ID: 781955203444699136\n", "Successfully queried - Tweet ID: 781661882474196992\n", "Successfully queried - Tweet ID: 781655249211752448\n", "Successfully queried - Tweet ID: 781524693396357120\n", "Successfully queried - Tweet ID: 781308096455073793\n", "Successfully queried - Tweet ID: 781251288990355457\n", "Successfully queried - Tweet ID: 781163403222056960\n", "Successfully queried - Tweet ID: 780931614150983680\n", "Successfully queried - Tweet ID: 780858289093574656\n", "Successfully queried - Tweet ID: 780800785462489090\n", "Successfully queried - Tweet ID: 780601303617732608\n", "Successfully queried - Tweet ID: 780543529827336192\n", "Successfully queried - Tweet ID: 780496263422808064\n", "Successfully queried - Tweet ID: 780476555013349377\n", "Successfully queried - Tweet ID: 780459368902959104\n", "Successfully queried - Tweet ID: 780192070812196864\n", "Successfully queried - Tweet ID: 780092040432480260\n", "Successfully queried - Tweet ID: 780074436359819264\n", "Successfully queried - Tweet ID: 779834332596887552\n", "Successfully queried - Tweet ID: 779377524342161408\n", "Successfully queried - Tweet ID: 779124354206535695\n", "Successfully queried - Tweet ID: 779123168116150273\n", "Successfully queried - Tweet ID: 779056095788752897\n", "Successfully queried - Tweet ID: 778990705243029504\n", "Successfully queried - Tweet ID: 778774459159379968\n", "Successfully queried - Tweet ID: 778764940568104960\n", "Successfully queried - Tweet ID: 778748913645780993\n", "Successfully queried - Tweet ID: 778650543019483137\n", "Successfully queried - Tweet ID: 778624900596654080\n", "Successfully queried - Tweet ID: 778408200802557953\n", "Successfully queried - Tweet ID: 778396591732486144\n", "Successfully queried - Tweet ID: 778383385161035776\n", "Successfully queried - Tweet ID: 778286810187399168\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 778039087836069888\n", "Successfully queried - Tweet ID: 778027034220126208\n", "Successfully queried - Tweet ID: 777953400541634568\n", "Successfully queried - Tweet ID: 777885040357281792\n", "Successfully queried - Tweet ID: 777684233540206592\n", "Successfully queried - Tweet ID: 777641927919427584\n", "Successfully queried - Tweet ID: 777621514455814149\n", "Successfully queried - Tweet ID: 777189768882946048\n", "Successfully queried - Tweet ID: 776819012571455488\n", "Successfully queried - Tweet ID: 776813020089548800\n", "Successfully queried - Tweet ID: 776477788987613185\n", "Successfully queried - Tweet ID: 776249906839351296\n", "Successfully queried - Tweet ID: 776218204058357768\n", "Successfully queried - Tweet ID: 776201521193218049\n", "Successfully queried - Tweet ID: 776113305656188928\n", "Successfully queried - Tweet ID: 776088319444877312\n", "Successfully queried - Tweet ID: 775898661951791106\n", "Successfully queried - Tweet ID: 775842724423557120\n", "Successfully queried - Tweet ID: 775733305207554048\n", "Successfully queried - Tweet ID: 775729183532220416\n", "Successfully queried - Tweet ID: 775364825476165632\n", "Successfully queried - Tweet ID: 775350846108426240\n", "Error Tweet_Id: 775096608509886464 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 775096608509886464\n", "Successfully queried - Tweet ID: 775085132600442880\n", "Successfully queried - Tweet ID: 774757898236878852\n", "Successfully queried - Tweet ID: 774639387460112384\n", "Successfully queried - Tweet ID: 774314403806253056\n", "Successfully queried - Tweet ID: 773985732834758656\n", "Successfully queried - Tweet ID: 773922284943896577\n", "Successfully queried - Tweet ID: 773704687002451968\n", "Successfully queried - Tweet ID: 773670353721753600\n", "Successfully queried - Tweet ID: 773547596996571136\n", "Successfully queried - Tweet ID: 773336787167145985\n", "Successfully queried - Tweet ID: 773308824254029826\n", "Successfully queried - Tweet ID: 773247561583001600\n", "Successfully queried - Tweet ID: 773191612633579521\n", "Successfully queried - Tweet ID: 772877495989305348\n", "Successfully queried - Tweet ID: 772826264096874500\n", "Successfully queried - Tweet ID: 772615324260794368\n", "Successfully queried - Tweet ID: 772581559778025472\n", "Successfully queried - Tweet ID: 772193107915964416\n", "Successfully queried - Tweet ID: 772152991789019136\n", "Successfully queried - Tweet ID: 772117678702071809\n", "Successfully queried - Tweet ID: 772114945936949249\n", "Successfully queried - Tweet ID: 772102971039580160\n", "Successfully queried - Tweet ID: 771908950375665664\n", "Successfully queried - Tweet ID: 771770456517009408\n", "Successfully queried - Tweet ID: 771500966810099713\n", "Successfully queried - Tweet ID: 771380798096281600\n", "Successfully queried - Tweet ID: 771171053431250945\n", "Successfully queried - Tweet ID: 771136648247640064\n", "Successfully queried - Tweet ID: 771102124360998913\n", "Successfully queried - Tweet ID: 771014301343748096\n", "Successfully queried - Tweet ID: 771004394259247104\n", "Successfully queried - Tweet ID: 770787852854652928\n", "Successfully queried - Tweet ID: 770772759874076672\n", "Error Tweet_Id: 770743923962707968 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 770743923962707968\n", "Successfully queried - Tweet ID: 770655142660169732\n", "Successfully queried - Tweet ID: 770414278348247044\n", "Successfully queried - Tweet ID: 770293558247038976\n", "Successfully queried - Tweet ID: 770093767776997377\n", "Successfully queried - Tweet ID: 770069151037685760\n", "Successfully queried - Tweet ID: 769940425801170949\n", "Successfully queried - Tweet ID: 769695466921623552\n", "Successfully queried - Tweet ID: 769335591808995329\n", "Successfully queried - Tweet ID: 769212283578875904\n", "Successfully queried - Tweet ID: 768970937022709760\n", "Successfully queried - Tweet ID: 768909767477751808\n", "Successfully queried - Tweet ID: 768855141948723200\n", "Successfully queried - Tweet ID: 768609597686943744\n", "Successfully queried - Tweet ID: 768596291618299904\n", "Successfully queried - Tweet ID: 768554158521745409\n", "Successfully queried - Tweet ID: 768473857036525572\n", "Successfully queried - Tweet ID: 768193404517830656\n", "Successfully queried - Tweet ID: 767884188863397888\n", "Successfully queried - Tweet ID: 767754930266464257\n", "Successfully queried - Tweet ID: 767500508068192258\n", "Successfully queried - Tweet ID: 767191397493538821\n", "Successfully queried - Tweet ID: 767122157629476866\n", "Successfully queried - Tweet ID: 766864461642756096\n", "Successfully queried - Tweet ID: 766793450729734144\n", "Successfully queried - Tweet ID: 766714921925144576\n", "Successfully queried - Tweet ID: 766693177336135680\n", "Successfully queried - Tweet ID: 766423258543644672\n", "Successfully queried - Tweet ID: 766313316352462849\n", "Successfully queried - Tweet ID: 766078092750233600\n", "Successfully queried - Tweet ID: 766069199026450432\n", "Successfully queried - Tweet ID: 766008592277377025\n", "Successfully queried - Tweet ID: 765719909049503744\n", "Successfully queried - Tweet ID: 765669560888528897\n", "Successfully queried - Tweet ID: 765395769549590528\n", "Successfully queried - Tweet ID: 765371061932261376\n", "Successfully queried - Tweet ID: 765222098633691136\n", "Successfully queried - Tweet ID: 764857477905154048\n", "Successfully queried - Tweet ID: 764259802650378240\n", "Successfully queried - Tweet ID: 763956972077010945\n", "Successfully queried - Tweet ID: 763837565564780549\n", "Successfully queried - Tweet ID: 763183847194451968\n", "Successfully queried - Tweet ID: 763167063695355904\n", "Successfully queried - Tweet ID: 763103485927849985\n", "Successfully queried - Tweet ID: 762699858130116608\n", "Successfully queried - Tweet ID: 762471784394268675\n", "Successfully queried - Tweet ID: 762464539388485633\n", "Successfully queried - Tweet ID: 762316489655476224\n", "Successfully queried - Tweet ID: 762035686371364864\n", "Successfully queried - Tweet ID: 761976711479193600\n", "Successfully queried - Tweet ID: 761750502866649088\n", "Successfully queried - Tweet ID: 761745352076779520\n", "Successfully queried - Tweet ID: 761672994376806400\n", "Successfully queried - Tweet ID: 761599872357261312\n", "Successfully queried - Tweet ID: 761371037149827077\n", "Successfully queried - Tweet ID: 761334018830917632\n", "Successfully queried - Tweet ID: 761292947749015552\n", "Successfully queried - Tweet ID: 761227390836215808\n", "Successfully queried - Tweet ID: 761004547850530816\n", "Successfully queried - Tweet ID: 760893934457552897\n", "Successfully queried - Tweet ID: 760656994973933572\n", "Successfully queried - Tweet ID: 760641137271070720\n", "Successfully queried - Tweet ID: 760539183865880579\n", "Successfully queried - Tweet ID: 760521673607086080\n", "Successfully queried - Tweet ID: 760290219849637889\n", "Successfully queried - Tweet ID: 760252756032651264\n", "Successfully queried - Tweet ID: 760190180481531904\n", "Successfully queried - Tweet ID: 760153949710192640\n", "Successfully queried - Tweet ID: 759943073749200896\n", "Successfully queried - Tweet ID: 759923798737051648\n", "Successfully queried - Tweet ID: 759846353224826880\n", "Successfully queried - Tweet ID: 759793422261743616\n", "Successfully queried - Tweet ID: 759566828574212096\n", "Successfully queried - Tweet ID: 759557299618865152\n", "Successfully queried - Tweet ID: 759447681597108224\n", "Successfully queried - Tweet ID: 759446261539934208\n", "Successfully queried - Tweet ID: 759197388317847553\n", "Successfully queried - Tweet ID: 759159934323924993\n", "Successfully queried - Tweet ID: 759099523532779520\n", "Successfully queried - Tweet ID: 759047813560868866\n", "Successfully queried - Tweet ID: 758854675097526272\n", "Successfully queried - Tweet ID: 758828659922702336\n", "Successfully queried - Tweet ID: 758740312047005698\n", "Successfully queried - Tweet ID: 758474966123810816\n", "Successfully queried - Tweet ID: 758467244762497024\n", "Successfully queried - Tweet ID: 758405701903519748\n", "Successfully queried - Tweet ID: 758355060040593408\n", "Successfully queried - Tweet ID: 758099635764359168\n", "Successfully queried - Tweet ID: 758041019896193024\n", "Successfully queried - Tweet ID: 757741869644341248\n", "Successfully queried - Tweet ID: 757729163776290825\n", "Successfully queried - Tweet ID: 757725642876129280\n", "Successfully queried - Tweet ID: 757611664640446465\n", "Successfully queried - Tweet ID: 757597904299253760\n", "Successfully queried - Tweet ID: 757596066325864448\n", "Successfully queried - Tweet ID: 757400162377592832\n", "Successfully queried - Tweet ID: 757393109802180609\n", "Successfully queried - Tweet ID: 757354760399941633\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 756998049151549440\n", "Successfully queried - Tweet ID: 756939218950160384\n", "Successfully queried - Tweet ID: 756651752796094464\n", "Successfully queried - Tweet ID: 756526248105566208\n", "Successfully queried - Tweet ID: 756303284449767430\n", "Successfully queried - Tweet ID: 756288534030475264\n", "Successfully queried - Tweet ID: 756275833623502848\n", "Successfully queried - Tweet ID: 755955933503782912\n", "Successfully queried - Tweet ID: 755206590534418437\n", "Successfully queried - Tweet ID: 755110668769038337\n", "Successfully queried - Tweet ID: 754874841593970688\n", "Successfully queried - Tweet ID: 754856583969079297\n", "Successfully queried - Tweet ID: 754747087846248448\n", "Successfully queried - Tweet ID: 754482103782404096\n", "Successfully queried - Tweet ID: 754449512966619136\n", "Successfully queried - Tweet ID: 754120377874386944\n", "Error Tweet_Id: 754011816964026368 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 754011816964026368\n", "Successfully queried - Tweet ID: 753655901052166144\n", "Successfully queried - Tweet ID: 753420520834629632\n", "Successfully queried - Tweet ID: 753398408988139520\n", "Successfully queried - Tweet ID: 753375668877008896\n", "Successfully queried - Tweet ID: 753298634498793472\n", "Successfully queried - Tweet ID: 753294487569522689\n", "Successfully queried - Tweet ID: 753039830821511168\n", "Successfully queried - Tweet ID: 753026973505581056\n", "Successfully queried - Tweet ID: 752932432744185856\n", "Successfully queried - Tweet ID: 752917284578922496\n", "Successfully queried - Tweet ID: 752701944171524096\n", "Successfully queried - Tweet ID: 752682090207055872\n", "Successfully queried - Tweet ID: 752660715232722944\n", "Successfully queried - Tweet ID: 752568224206688256\n", "Successfully queried - Tweet ID: 752519690950500352\n", "Successfully queried - Tweet ID: 752334515931054080\n", "Successfully queried - Tweet ID: 752309394570878976\n", "Successfully queried - Tweet ID: 752173152931807232\n", "Successfully queried - Tweet ID: 751950017322246144\n", "Successfully queried - Tweet ID: 751937170840121344\n", "Successfully queried - Tweet ID: 751830394383790080\n", "Successfully queried - Tweet ID: 751793661361422336\n", "Successfully queried - Tweet ID: 751598357617971201\n", "Successfully queried - Tweet ID: 751583847268179968\n", "Successfully queried - Tweet ID: 751538714308972544\n", "Successfully queried - Tweet ID: 751456908746354688\n", "Successfully queried - Tweet ID: 751251247299190784\n", "Successfully queried - Tweet ID: 751205363882532864\n", "Successfully queried - Tweet ID: 751132876104687617\n", "Successfully queried - Tweet ID: 750868782890057730\n", "Successfully queried - Tweet ID: 750719632563142656\n", "Successfully queried - Tweet ID: 750506206503038976\n", "Successfully queried - Tweet ID: 750429297815552001\n", "Successfully queried - Tweet ID: 750383411068534784\n", "Successfully queried - Tweet ID: 750381685133418496\n", "Successfully queried - Tweet ID: 750147208377409536\n", "Successfully queried - Tweet ID: 750132105863102464\n", "Successfully queried - Tweet ID: 750117059602808832\n", "Successfully queried - Tweet ID: 750101899009982464\n", "Successfully queried - Tweet ID: 750086836815486976\n", "Successfully queried - Tweet ID: 750071704093859840\n", "Successfully queried - Tweet ID: 750056684286914561\n", "Successfully queried - Tweet ID: 750041628174217216\n", "Successfully queried - Tweet ID: 750026558547456000\n", "Successfully queried - Tweet ID: 750011400160841729\n", "Successfully queried - Tweet ID: 749996283729883136\n", "Successfully queried - Tweet ID: 749981277374128128\n", "Successfully queried - Tweet ID: 749774190421639168\n", "Successfully queried - Tweet ID: 749417653287129088\n", "Successfully queried - Tweet ID: 749403093750648834\n", "Successfully queried - Tweet ID: 749395845976588288\n", "Successfully queried - Tweet ID: 749317047558017024\n", "Successfully queried - Tweet ID: 749075273010798592\n", "Successfully queried - Tweet ID: 749064354620928000\n", "Successfully queried - Tweet ID: 749036806121881602\n", "Successfully queried - Tweet ID: 748977405889503236\n", "Successfully queried - Tweet ID: 748932637671223296\n", "Successfully queried - Tweet ID: 748705597323898880\n", "Successfully queried - Tweet ID: 748699167502000129\n", "Successfully queried - Tweet ID: 748692773788876800\n", "Successfully queried - Tweet ID: 748575535303884801\n", "Successfully queried - Tweet ID: 748568946752774144\n", "Successfully queried - Tweet ID: 748346686624440324\n", "Successfully queried - Tweet ID: 748337862848962560\n", "Successfully queried - Tweet ID: 748324050481647620\n", "Successfully queried - Tweet ID: 748307329658011649\n", "Successfully queried - Tweet ID: 748220828303695873\n", "Successfully queried - Tweet ID: 747963614829678593\n", "Successfully queried - Tweet ID: 747933425676525569\n", "Successfully queried - Tweet ID: 747885874273214464\n", "Successfully queried - Tweet ID: 747844099428986880\n", "Successfully queried - Tweet ID: 747816857231626240\n", "Successfully queried - Tweet ID: 747651430853525504\n", "Successfully queried - Tweet ID: 747648653817413632\n", "Successfully queried - Tweet ID: 747600769478692864\n", "Successfully queried - Tweet ID: 747594051852075008\n", "Successfully queried - Tweet ID: 747512671126323200\n", "Successfully queried - Tweet ID: 747461612269887489\n", "Successfully queried - Tweet ID: 747439450712596480\n", "Successfully queried - Tweet ID: 747242308580548608\n", "Successfully queried - Tweet ID: 747219827526344708\n", "Successfully queried - Tweet ID: 747204161125646336\n", "Successfully queried - Tweet ID: 747103485104099331\n", "Successfully queried - Tweet ID: 746906459439529985\n", "Successfully queried - Tweet ID: 746872823977771008\n", "Successfully queried - Tweet ID: 746818907684614144\n", "Successfully queried - Tweet ID: 746790600704425984\n", "Successfully queried - Tweet ID: 746757706116112384\n", "Successfully queried - Tweet ID: 746726898085036033\n", "Successfully queried - Tweet ID: 746542875601690625\n", "Successfully queried - Tweet ID: 746521445350707200\n", "Successfully queried - Tweet ID: 746507379341139972\n", "Successfully queried - Tweet ID: 746369468511756288\n", "Successfully queried - Tweet ID: 746131877086527488\n", "Successfully queried - Tweet ID: 746056683365994496\n", "Successfully queried - Tweet ID: 745789745784041472\n", "Successfully queried - Tweet ID: 745712589599014916\n", "Successfully queried - Tweet ID: 745433870967832576\n", "Successfully queried - Tweet ID: 745422732645535745\n", "Successfully queried - Tweet ID: 745314880350101504\n", "Successfully queried - Tweet ID: 745074613265149952\n", "Successfully queried - Tweet ID: 745057283344719872\n", "Successfully queried - Tweet ID: 744995568523612160\n", "Successfully queried - Tweet ID: 744971049620602880\n", "Successfully queried - Tweet ID: 744709971296780288\n", "Successfully queried - Tweet ID: 744334592493166593\n", "Successfully queried - Tweet ID: 744234799360020481\n", "Successfully queried - Tweet ID: 744223424764059648\n", "Successfully queried - Tweet ID: 743980027717509120\n", "Successfully queried - Tweet ID: 743895849529389061\n", "Successfully queried - Tweet ID: 743835915802583040\n", "Successfully queried - Tweet ID: 743609206067040256\n", "Successfully queried - Tweet ID: 743595368194129920\n", "Successfully queried - Tweet ID: 743545585370791937\n", "Successfully queried - Tweet ID: 743510151680958465\n", "Successfully queried - Tweet ID: 743253157753532416\n", "Successfully queried - Tweet ID: 743222593470234624\n", "Successfully queried - Tweet ID: 743210557239623680\n", "Successfully queried - Tweet ID: 742534281772302336\n", "Successfully queried - Tweet ID: 742528092657332225\n", "Successfully queried - Tweet ID: 742465774154047488\n", "Successfully queried - Tweet ID: 742423170473463808\n", "Successfully queried - Tweet ID: 742385895052087300\n", "Successfully queried - Tweet ID: 742161199639494656\n", "Successfully queried - Tweet ID: 742150209887731712\n", "Successfully queried - Tweet ID: 741793263812808706\n", "Successfully queried - Tweet ID: 741743634094141440\n", "Successfully queried - Tweet ID: 741438259667034112\n", "Successfully queried - Tweet ID: 741303864243200000\n", "Successfully queried - Tweet ID: 741099773336379392\n", "Successfully queried - Tweet ID: 741067306818797568\n", "Successfully queried - Tweet ID: 740995100998766593\n", "Successfully queried - Tweet ID: 740711788199743490\n", "Successfully queried - Tweet ID: 740699697422163968\n", "Successfully queried - Tweet ID: 740676976021798912\n", "Successfully queried - Tweet ID: 740373189193256964\n", "Successfully queried - Tweet ID: 740365076218183684\n", "Successfully queried - Tweet ID: 740359016048689152\n", "Successfully queried - Tweet ID: 740214038584557568\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 739979191639244800\n", "Successfully queried - Tweet ID: 739932936087216128\n", "Successfully queried - Tweet ID: 739844404073074688\n", "Successfully queried - Tweet ID: 739623569819336705\n", "Successfully queried - Tweet ID: 739606147276148736\n", "Successfully queried - Tweet ID: 739544079319588864\n", "Successfully queried - Tweet ID: 739485634323156992\n", "Successfully queried - Tweet ID: 739238157791694849\n", "Successfully queried - Tweet ID: 738891149612572673\n", "Successfully queried - Tweet ID: 738885046782832640\n", "Successfully queried - Tweet ID: 738883359779196928\n", "Successfully queried - Tweet ID: 738537504001953792\n", "Successfully queried - Tweet ID: 738402415918125056\n", "Successfully queried - Tweet ID: 738184450748633089\n", "Successfully queried - Tweet ID: 738166403467907072\n", "Successfully queried - Tweet ID: 738156290900254721\n", "Successfully queried - Tweet ID: 737826014890496000\n", "Successfully queried - Tweet ID: 737800304142471168\n", "Successfully queried - Tweet ID: 737678689543020544\n", "Successfully queried - Tweet ID: 737445876994609152\n", "Successfully queried - Tweet ID: 737322739594330112\n", "Successfully queried - Tweet ID: 737310737551491075\n", "Successfully queried - Tweet ID: 736736130620620800\n", "Successfully queried - Tweet ID: 736392552031657984\n", "Successfully queried - Tweet ID: 736365877722001409\n", "Successfully queried - Tweet ID: 736225175608430592\n", "Successfully queried - Tweet ID: 736010884653420544\n", "Successfully queried - Tweet ID: 735991953473572864\n", "Successfully queried - Tweet ID: 735648611367784448\n", "Successfully queried - Tweet ID: 735635087207878657\n", "Successfully queried - Tweet ID: 735274964362878976\n", "Successfully queried - Tweet ID: 735256018284875776\n", "Successfully queried - Tweet ID: 735137028879360001\n", "Successfully queried - Tweet ID: 734912297295085568\n", "Successfully queried - Tweet ID: 734787690684657664\n", "Successfully queried - Tweet ID: 734776360183431168\n", "Successfully queried - Tweet ID: 734559631394082816\n", "Successfully queried - Tweet ID: 733828123016450049\n", "Successfully queried - Tweet ID: 733822306246479872\n", "Successfully queried - Tweet ID: 733482008106668032\n", "Successfully queried - Tweet ID: 733460102733135873\n", "Successfully queried - Tweet ID: 733109485275860992\n", "Successfully queried - Tweet ID: 732732193018155009\n", "Successfully queried - Tweet ID: 732726085725589504\n", "Successfully queried - Tweet ID: 732585889486888962\n", "Successfully queried - Tweet ID: 732375214819057664\n", "Successfully queried - Tweet ID: 732005617171337216\n", "Successfully queried - Tweet ID: 731285275100512256\n", "Successfully queried - Tweet ID: 731156023742988288\n", "Successfully queried - Tweet ID: 730924654643314689\n", "Successfully queried - Tweet ID: 730573383004487680\n", "Successfully queried - Tweet ID: 730427201120833536\n", "Successfully queried - Tweet ID: 730211855403241472\n", "Successfully queried - Tweet ID: 730196704625098752\n", "Successfully queried - Tweet ID: 729854734790754305\n", "Successfully queried - Tweet ID: 729838605770891264\n", "Successfully queried - Tweet ID: 729823566028484608\n", "Successfully queried - Tweet ID: 729463711119904772\n", "Successfully queried - Tweet ID: 729113531270991872\n", "Successfully queried - Tweet ID: 728986383096946689\n", "Successfully queried - Tweet ID: 728760639972315136\n", "Successfully queried - Tweet ID: 728751179681943552\n", "Successfully queried - Tweet ID: 728653952833728512\n", "Successfully queried - Tweet ID: 728409960103686147\n", "Successfully queried - Tweet ID: 728387165835677696\n", "Successfully queried - Tweet ID: 728046963732717569\n", "Successfully queried - Tweet ID: 728035342121635841\n", "Successfully queried - Tweet ID: 728015554473250816\n", "Successfully queried - Tweet ID: 727685679342333952\n", "Successfully queried - Tweet ID: 727644517743104000\n", "Successfully queried - Tweet ID: 727524757080539137\n", "Successfully queried - Tweet ID: 727314416056803329\n", "Successfully queried - Tweet ID: 727286334147182592\n", "Successfully queried - Tweet ID: 727175381690781696\n", "Successfully queried - Tweet ID: 727155742655025152\n", "Successfully queried - Tweet ID: 726935089318363137\n", "Successfully queried - Tweet ID: 726887082820554753\n", "Successfully queried - Tweet ID: 726828223124897792\n", "Successfully queried - Tweet ID: 726224900189511680\n", "Successfully queried - Tweet ID: 725842289046749185\n", "Successfully queried - Tweet ID: 725786712245440512\n", "Successfully queried - Tweet ID: 725729321944506368\n", "Successfully queried - Tweet ID: 725458796924002305\n", "Successfully queried - Tweet ID: 724983749226668032\n", "Successfully queried - Tweet ID: 724771698126512129\n", "Successfully queried - Tweet ID: 724405726123311104\n", "Successfully queried - Tweet ID: 724049859469295616\n", "Successfully queried - Tweet ID: 724046343203856385\n", "Successfully queried - Tweet ID: 724004602748780546\n", "Successfully queried - Tweet ID: 723912936180330496\n", "Successfully queried - Tweet ID: 723688335806480385\n", "Successfully queried - Tweet ID: 723673163800948736\n", "Successfully queried - Tweet ID: 723179728551723008\n", "Successfully queried - Tweet ID: 722974582966214656\n", "Successfully queried - Tweet ID: 722613351520608256\n", "Successfully queried - Tweet ID: 721503162398597120\n", "Successfully queried - Tweet ID: 721001180231503872\n", "Successfully queried - Tweet ID: 720785406564900865\n", "Successfully queried - Tweet ID: 720775346191278080\n", "Successfully queried - Tweet ID: 720415127506415616\n", "Successfully queried - Tweet ID: 720389942216527872\n", "Successfully queried - Tweet ID: 720340705894408192\n", "Successfully queried - Tweet ID: 720059472081784833\n", "Successfully queried - Tweet ID: 720043174954147842\n", "Successfully queried - Tweet ID: 719991154352222208\n", "Successfully queried - Tweet ID: 719704490224398336\n", "Successfully queried - Tweet ID: 719551379208073216\n", "Successfully queried - Tweet ID: 719367763014393856\n", "Successfully queried - Tweet ID: 719339463458033665\n", "Successfully queried - Tweet ID: 719332531645071360\n", "Successfully queried - Tweet ID: 718971898235854848\n", "Successfully queried - Tweet ID: 718939241951195136\n", "Successfully queried - Tweet ID: 718631497683582976\n", "Successfully queried - Tweet ID: 718613305783398402\n", "Successfully queried - Tweet ID: 718540630683709445\n", "Successfully queried - Tweet ID: 718460005985447936\n", "Successfully queried - Tweet ID: 718454725339934721\n", "Successfully queried - Tweet ID: 718246886998687744\n", "Successfully queried - Tweet ID: 718234618122661888\n", "Successfully queried - Tweet ID: 717841801130979328\n", "Successfully queried - Tweet ID: 717790033953034240\n", "Successfully queried - Tweet ID: 717537687239008257\n", "Successfully queried - Tweet ID: 717428917016076293\n", "Successfully queried - Tweet ID: 717421804990701568\n", "Successfully queried - Tweet ID: 717047459982213120\n", "Successfully queried - Tweet ID: 717009362452090881\n", "Successfully queried - Tweet ID: 716802964044845056\n", "Successfully queried - Tweet ID: 716791146589110272\n", "Successfully queried - Tweet ID: 716730379797970944\n", "Successfully queried - Tweet ID: 716447146686459905\n", "Successfully queried - Tweet ID: 716439118184652801\n", "Successfully queried - Tweet ID: 716285507865542656\n", "Successfully queried - Tweet ID: 716080869887381504\n", "Successfully queried - Tweet ID: 715928423106027520\n", "Successfully queried - Tweet ID: 715758151270801409\n", "Successfully queried - Tweet ID: 715733265223708672\n", "Successfully queried - Tweet ID: 715704790270025728\n", "Successfully queried - Tweet ID: 715696743237730304\n", "Successfully queried - Tweet ID: 715680795826982913\n", "Successfully queried - Tweet ID: 715360349751484417\n", "Successfully queried - Tweet ID: 715342466308784130\n", "Successfully queried - Tweet ID: 715220193576927233\n", "Successfully queried - Tweet ID: 715200624753819648\n", "Successfully queried - Tweet ID: 715009755312439296\n", "Successfully queried - Tweet ID: 714982300363173890\n", "Successfully queried - Tweet ID: 714962719905021952\n", "Successfully queried - Tweet ID: 714957620017307648\n", "Successfully queried - Tweet ID: 714631576617938945\n", "Successfully queried - Tweet ID: 714606013974974464\n", "Successfully queried - Tweet ID: 714485234495041536\n", "Successfully queried - Tweet ID: 714258258790387713\n", "Successfully queried - Tweet ID: 714251586676113411\n", "Successfully queried - Tweet ID: 714214115368108032\n", "Successfully queried - Tweet ID: 714141408463036416\n", "Successfully queried - Tweet ID: 713919462244790272\n", "Successfully queried - Tweet ID: 713909862279876608\n", "Successfully queried - Tweet ID: 713900603437621249\n", "Successfully queried - Tweet ID: 713761197720473600\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 713411074226274305\n", "Successfully queried - Tweet ID: 713177543487135744\n", "Successfully queried - Tweet ID: 713175907180089344\n", "Successfully queried - Tweet ID: 712809025985978368\n", "Successfully queried - Tweet ID: 712717840512598017\n", "Successfully queried - Tweet ID: 712668654853337088\n", "Successfully queried - Tweet ID: 712438159032893441\n", "Successfully queried - Tweet ID: 712309440758808576\n", "Successfully queried - Tweet ID: 712097430750289920\n", "Successfully queried - Tweet ID: 712092745624633345\n", "Successfully queried - Tweet ID: 712085617388212225\n", "Successfully queried - Tweet ID: 712065007010385924\n", "Successfully queried - Tweet ID: 711998809858043904\n", "Successfully queried - Tweet ID: 711968124745228288\n", "Successfully queried - Tweet ID: 711743778164514816\n", "Successfully queried - Tweet ID: 711732680602345472\n", "Successfully queried - Tweet ID: 711694788429553666\n", "Successfully queried - Tweet ID: 711652651650457602\n", "Successfully queried - Tweet ID: 711363825979756544\n", "Successfully queried - Tweet ID: 711306686208872448\n", "Successfully queried - Tweet ID: 711008018775851008\n", "Successfully queried - Tweet ID: 710997087345876993\n", "Successfully queried - Tweet ID: 710844581445812225\n", "Successfully queried - Tweet ID: 710833117892898816\n", "Successfully queried - Tweet ID: 710658690886586372\n", "Successfully queried - Tweet ID: 710609963652087808\n", "Successfully queried - Tweet ID: 710588934686908417\n", "Successfully queried - Tweet ID: 710296729921429505\n", "Successfully queried - Tweet ID: 710283270106132480\n", "Successfully queried - Tweet ID: 710272297844797440\n", "Successfully queried - Tweet ID: 710269109699739648\n", "Successfully queried - Tweet ID: 710153181850935296\n", "Successfully queried - Tweet ID: 710140971284037632\n", "Successfully queried - Tweet ID: 710117014656950272\n", "Successfully queried - Tweet ID: 709918798883774466\n", "Successfully queried - Tweet ID: 709901256215666688\n", "Successfully queried - Tweet ID: 709852847387627521\n", "Successfully queried - Tweet ID: 709566166965075968\n", "Successfully queried - Tweet ID: 709556954897764353\n", "Successfully queried - Tweet ID: 709519240576036864\n", "Successfully queried - Tweet ID: 709449600415961088\n", "Successfully queried - Tweet ID: 709409458133323776\n", "Successfully queried - Tweet ID: 709225125749587968\n", "Successfully queried - Tweet ID: 709207347839836162\n", "Successfully queried - Tweet ID: 709198395643068416\n", "Successfully queried - Tweet ID: 709179584944730112\n", "Successfully queried - Tweet ID: 709158332880297985\n", "Successfully queried - Tweet ID: 709042156699303936\n", "Successfully queried - Tweet ID: 708853462201716736\n", "Successfully queried - Tweet ID: 708845821941387268\n", "Successfully queried - Tweet ID: 708834316713893888\n", "Successfully queried - Tweet ID: 708810915978854401\n", "Successfully queried - Tweet ID: 708738143638450176\n", "Successfully queried - Tweet ID: 708711088997666817\n", "Successfully queried - Tweet ID: 708479650088034305\n", "Successfully queried - Tweet ID: 708469915515297792\n", "Successfully queried - Tweet ID: 708400866336894977\n", "Successfully queried - Tweet ID: 708356463048204288\n", "Successfully queried - Tweet ID: 708349470027751425\n", "Successfully queried - Tweet ID: 708149363256774660\n", "Successfully queried - Tweet ID: 708130923141795840\n", "Successfully queried - Tweet ID: 708119489313951744\n", "Successfully queried - Tweet ID: 708109389455101952\n", "Successfully queried - Tweet ID: 708026248782585858\n", "Successfully queried - Tweet ID: 707995814724026368\n", "Successfully queried - Tweet ID: 707983188426153984\n", "Successfully queried - Tweet ID: 707969809498152960\n", "Successfully queried - Tweet ID: 707776935007539200\n", "Successfully queried - Tweet ID: 707741517457260545\n", "Successfully queried - Tweet ID: 707738799544082433\n", "Successfully queried - Tweet ID: 707693576495472641\n", "Successfully queried - Tweet ID: 707629649552134146\n", "Successfully queried - Tweet ID: 707610948723478529\n", "Successfully queried - Tweet ID: 707420581654872064\n", "Successfully queried - Tweet ID: 707411934438625280\n", "Successfully queried - Tweet ID: 707387676719185920\n", "Successfully queried - Tweet ID: 707377100785885184\n", "Successfully queried - Tweet ID: 707315916783140866\n", "Successfully queried - Tweet ID: 707297311098011648\n", "Successfully queried - Tweet ID: 707059547140169728\n", "Successfully queried - Tweet ID: 707038192327901184\n", "Successfully queried - Tweet ID: 707021089608753152\n", "Successfully queried - Tweet ID: 707014260413456384\n", "Successfully queried - Tweet ID: 706904523814649856\n", "Successfully queried - Tweet ID: 706901761596989440\n", "Successfully queried - Tweet ID: 706681918348251136\n", "Successfully queried - Tweet ID: 706644897839910912\n", "Successfully queried - Tweet ID: 706593038911545345\n", "Successfully queried - Tweet ID: 706538006853918722\n", "Successfully queried - Tweet ID: 706516534877929472\n", "Successfully queried - Tweet ID: 706346369204748288\n", "Successfully queried - Tweet ID: 706310011488698368\n", "Successfully queried - Tweet ID: 706291001778950144\n", "Successfully queried - Tweet ID: 706265994973601792\n", "Successfully queried - Tweet ID: 706169069255446529\n", "Successfully queried - Tweet ID: 706166467411222528\n", "Successfully queried - Tweet ID: 706153300320784384\n", "Successfully queried - Tweet ID: 705975130514706432\n", "Successfully queried - Tweet ID: 705970349788291072\n", "Successfully queried - Tweet ID: 705898680587526145\n", "Successfully queried - Tweet ID: 705786532653883392\n", "Successfully queried - Tweet ID: 705591895322394625\n", "Successfully queried - Tweet ID: 705475953783398401\n", "Successfully queried - Tweet ID: 705442520700944385\n", "Successfully queried - Tweet ID: 705428427625635840\n", "Successfully queried - Tweet ID: 705239209544720384\n", "Successfully queried - Tweet ID: 705223444686888960\n", "Successfully queried - Tweet ID: 705102439679201280\n", "Successfully queried - Tweet ID: 705066031337840642\n", "Successfully queried - Tweet ID: 704871453724954624\n", "Successfully queried - Tweet ID: 704859558691414016\n", "Successfully queried - Tweet ID: 704847917308362754\n", "Successfully queried - Tweet ID: 704819833553219584\n", "Successfully queried - Tweet ID: 704761120771465216\n", "Successfully queried - Tweet ID: 704499785726889984\n", "Successfully queried - Tweet ID: 704491224099647488\n", "Successfully queried - Tweet ID: 704480331685040129\n", "Successfully queried - Tweet ID: 704364645503647744\n", "Successfully queried - Tweet ID: 704347321748819968\n", "Successfully queried - Tweet ID: 704134088924532736\n", "Successfully queried - Tweet ID: 704113298707505153\n", "Successfully queried - Tweet ID: 704054845121142784\n", "Successfully queried - Tweet ID: 703774238772166656\n", "Successfully queried - Tweet ID: 703769065844768768\n", "Successfully queried - Tweet ID: 703631701117943808\n", "Successfully queried - Tweet ID: 703611486317502464\n", "Successfully queried - Tweet ID: 703425003149250560\n", "Successfully queried - Tweet ID: 703407252292673536\n", "Successfully queried - Tweet ID: 703382836347330562\n", "Successfully queried - Tweet ID: 703356393781329922\n", "Successfully queried - Tweet ID: 703268521220972544\n", "Successfully queried - Tweet ID: 703079050210877440\n", "Successfully queried - Tweet ID: 703041949650034688\n", "Successfully queried - Tweet ID: 702932127499816960\n", "Successfully queried - Tweet ID: 702899151802126337\n", "Successfully queried - Tweet ID: 702684942141153280\n", "Successfully queried - Tweet ID: 702671118226825216\n", "Successfully queried - Tweet ID: 702598099714314240\n", "Successfully queried - Tweet ID: 702539513671897089\n", "Successfully queried - Tweet ID: 702332542343577600\n", "Successfully queried - Tweet ID: 702321140488925184\n", "Successfully queried - Tweet ID: 702276748847800320\n", "Successfully queried - Tweet ID: 702217446468493312\n", "Successfully queried - Tweet ID: 701981390485725185\n", "Successfully queried - Tweet ID: 701952816642965504\n", "Successfully queried - Tweet ID: 701889187134500865\n", "Successfully queried - Tweet ID: 701805642395348998\n", "Successfully queried - Tweet ID: 701601587219795968\n", "Successfully queried - Tweet ID: 701570477911896070\n", "Successfully queried - Tweet ID: 701545186879471618\n", "Successfully queried - Tweet ID: 701214700881756160\n", "Successfully queried - Tweet ID: 700890391244103680\n", "Successfully queried - Tweet ID: 700864154249383937\n", "Successfully queried - Tweet ID: 700847567345688576\n", "Successfully queried - Tweet ID: 700796979434098688\n", "Successfully queried - Tweet ID: 700747788515020802\n", "Successfully queried - Tweet ID: 700518061187723268\n", "Successfully queried - Tweet ID: 700505138482569216\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 700462010979500032\n", "Successfully queried - Tweet ID: 700167517596164096\n", "Successfully queried - Tweet ID: 700151421916807169\n", "Successfully queried - Tweet ID: 700143752053182464\n", "Successfully queried - Tweet ID: 700062718104104960\n", "Successfully queried - Tweet ID: 700029284593901568\n", "Successfully queried - Tweet ID: 700002074055016451\n", "Successfully queried - Tweet ID: 699801817392291840\n", "Successfully queried - Tweet ID: 699788877217865730\n", "Successfully queried - Tweet ID: 699779630832685056\n", "Successfully queried - Tweet ID: 699775878809702401\n", "Successfully queried - Tweet ID: 699691744225525762\n", "Successfully queried - Tweet ID: 699446877801091073\n", "Successfully queried - Tweet ID: 699434518667751424\n", "Successfully queried - Tweet ID: 699423671849451520\n", "Successfully queried - Tweet ID: 699413908797464576\n", "Successfully queried - Tweet ID: 699370870310113280\n", "Successfully queried - Tweet ID: 699323444782047232\n", "Successfully queried - Tweet ID: 699088579889332224\n", "Successfully queried - Tweet ID: 699079609774645248\n", "Successfully queried - Tweet ID: 699072405256409088\n", "Successfully queried - Tweet ID: 699060279947165696\n", "Successfully queried - Tweet ID: 699036661657767936\n", "Successfully queried - Tweet ID: 698989035503689728\n", "Successfully queried - Tweet ID: 698953797952008193\n", "Successfully queried - Tweet ID: 698907974262222848\n", "Successfully queried - Tweet ID: 698710712454139905\n", "Successfully queried - Tweet ID: 698703483621523456\n", "Successfully queried - Tweet ID: 698635131305795584\n", "Successfully queried - Tweet ID: 698549713696649216\n", "Successfully queried - Tweet ID: 698355670425473025\n", "Successfully queried - Tweet ID: 698342080612007937\n", "Successfully queried - Tweet ID: 698262614669991936\n", "Successfully queried - Tweet ID: 698195409219559425\n", "Successfully queried - Tweet ID: 698178924120031232\n", "Successfully queried - Tweet ID: 697995514407682048\n", "Successfully queried - Tweet ID: 697990423684476929\n", "Successfully queried - Tweet ID: 697943111201378304\n", "Successfully queried - Tweet ID: 697881462549430272\n", "Successfully queried - Tweet ID: 697630435728322560\n", "Successfully queried - Tweet ID: 697616773278015490\n", "Successfully queried - Tweet ID: 697596423848730625\n", "Successfully queried - Tweet ID: 697575480820686848\n", "Successfully queried - Tweet ID: 697516214579523584\n", "Successfully queried - Tweet ID: 697482927769255936\n", "Successfully queried - Tweet ID: 697463031882764288\n", "Successfully queried - Tweet ID: 697270446429966336\n", "Successfully queried - Tweet ID: 697259378236399616\n", "Successfully queried - Tweet ID: 697255105972801536\n", "Successfully queried - Tweet ID: 697242256848379904\n", "Successfully queried - Tweet ID: 696900204696625153\n", "Successfully queried - Tweet ID: 696894894812565505\n", "Successfully queried - Tweet ID: 696886256886657024\n", "Successfully queried - Tweet ID: 696877980375769088\n", "Successfully queried - Tweet ID: 696754882863349760\n", "Successfully queried - Tweet ID: 696744641916489729\n", "Successfully queried - Tweet ID: 696713835009417216\n", "Successfully queried - Tweet ID: 696518437233913856\n", "Successfully queried - Tweet ID: 696490539101908992\n", "Successfully queried - Tweet ID: 696488710901260288\n", "Successfully queried - Tweet ID: 696405997980676096\n", "Successfully queried - Tweet ID: 696100768806522880\n", "Successfully queried - Tweet ID: 695816827381944320\n", "Successfully queried - Tweet ID: 695794761660297217\n", "Successfully queried - Tweet ID: 695767669421768709\n", "Successfully queried - Tweet ID: 695629776980148225\n", "Successfully queried - Tweet ID: 695446424020918272\n", "Successfully queried - Tweet ID: 695409464418041856\n", "Successfully queried - Tweet ID: 695314793360662529\n", "Successfully queried - Tweet ID: 695095422348574720\n", "Successfully queried - Tweet ID: 695074328191332352\n", "Successfully queried - Tweet ID: 695064344191721472\n", "Successfully queried - Tweet ID: 695051054296211456\n", "Successfully queried - Tweet ID: 694925794720792577\n", "Successfully queried - Tweet ID: 694905863685980160\n", "Successfully queried - Tweet ID: 694669722378485760\n", "Successfully queried - Tweet ID: 694356675654983680\n", "Successfully queried - Tweet ID: 694352839993344000\n", "Successfully queried - Tweet ID: 694342028726001664\n", "Successfully queried - Tweet ID: 694329668942569472\n", "Successfully queried - Tweet ID: 694206574471057408\n", "Successfully queried - Tweet ID: 694183373896572928\n", "Successfully queried - Tweet ID: 694001791655137281\n", "Successfully queried - Tweet ID: 693993230313091072\n", "Successfully queried - Tweet ID: 693942351086120961\n", "Successfully queried - Tweet ID: 693647888581312512\n", "Successfully queried - Tweet ID: 693644216740769793\n", "Successfully queried - Tweet ID: 693642232151285760\n", "Successfully queried - Tweet ID: 693629975228977152\n", "Successfully queried - Tweet ID: 693622659251335168\n", "Successfully queried - Tweet ID: 693590843962331137\n", "Successfully queried - Tweet ID: 693582294167244802\n", "Successfully queried - Tweet ID: 693486665285931008\n", "Successfully queried - Tweet ID: 693280720173801472\n", "Successfully queried - Tweet ID: 693267061318012928\n", "Successfully queried - Tweet ID: 693262851218264065\n", "Successfully queried - Tweet ID: 693231807727280129\n", "Successfully queried - Tweet ID: 693155686491000832\n", "Successfully queried - Tweet ID: 693109034023534592\n", "Successfully queried - Tweet ID: 693095443459342336\n", "Successfully queried - Tweet ID: 692919143163629568\n", "Successfully queried - Tweet ID: 692905862751522816\n", "Successfully queried - Tweet ID: 692901601640583168\n", "Successfully queried - Tweet ID: 692894228850999298\n", "Successfully queried - Tweet ID: 692828166163931137\n", "Successfully queried - Tweet ID: 692752401762250755\n", "Successfully queried - Tweet ID: 692568918515392513\n", "Successfully queried - Tweet ID: 692535307825213440\n", "Successfully queried - Tweet ID: 692530551048294401\n", "Successfully queried - Tweet ID: 692423280028966913\n", "Successfully queried - Tweet ID: 692417313023332352\n", "Successfully queried - Tweet ID: 692187005137076224\n", "Successfully queried - Tweet ID: 692158366030913536\n", "Successfully queried - Tweet ID: 692142790915014657\n", "Successfully queried - Tweet ID: 692041934689402880\n", "Successfully queried - Tweet ID: 692017291282812928\n", "Successfully queried - Tweet ID: 691820333922455552\n", "Successfully queried - Tweet ID: 691793053716221953\n", "Successfully queried - Tweet ID: 691756958957883396\n", "Successfully queried - Tweet ID: 691675652215414786\n", "Successfully queried - Tweet ID: 691483041324204033\n", "Successfully queried - Tweet ID: 691459709405118465\n", "Successfully queried - Tweet ID: 691444869282295808\n", "Successfully queried - Tweet ID: 691416866452082688\n", "Successfully queried - Tweet ID: 691321916024623104\n", "Successfully queried - Tweet ID: 691096613310316544\n", "Successfully queried - Tweet ID: 691090071332753408\n", "Successfully queried - Tweet ID: 690989312272396288\n", "Successfully queried - Tweet ID: 690959652130045952\n", "Successfully queried - Tweet ID: 690938899477221376\n", "Successfully queried - Tweet ID: 690932576555528194\n", "Successfully queried - Tweet ID: 690735892932222976\n", "Successfully queried - Tweet ID: 690728923253055490\n", "Successfully queried - Tweet ID: 690690673629138944\n", "Successfully queried - Tweet ID: 690649993829576704\n", "Successfully queried - Tweet ID: 690607260360429569\n", "Successfully queried - Tweet ID: 690597161306841088\n", "Successfully queried - Tweet ID: 690400367696297985\n", "Successfully queried - Tweet ID: 690374419777196032\n", "Successfully queried - Tweet ID: 690360449368465409\n", "Successfully queried - Tweet ID: 690348396616552449\n", "Successfully queried - Tweet ID: 690248561355657216\n", "Successfully queried - Tweet ID: 690021994562220032\n", "Successfully queried - Tweet ID: 690015576308211712\n", "Successfully queried - Tweet ID: 690005060500217858\n", "Successfully queried - Tweet ID: 689999384604450816\n", "Successfully queried - Tweet ID: 689993469801164801\n", "Successfully queried - Tweet ID: 689977555533848577\n", "Successfully queried - Tweet ID: 689905486972461056\n", "Successfully queried - Tweet ID: 689877686181715968\n", "Successfully queried - Tweet ID: 689835978131935233\n", "Successfully queried - Tweet ID: 689661964914655233\n", "Successfully queried - Tweet ID: 689659372465688576\n", "Successfully queried - Tweet ID: 689623661272240129\n", "Successfully queried - Tweet ID: 689599056876867584\n", "Successfully queried - Tweet ID: 689557536375177216\n", "Successfully queried - Tweet ID: 689517482558820352\n", "Successfully queried - Tweet ID: 689289219123089408\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 689283819090870273\n", "Successfully queried - Tweet ID: 689280876073582592\n", "Successfully queried - Tweet ID: 689275259254616065\n", "Successfully queried - Tweet ID: 689255633275777024\n", "Successfully queried - Tweet ID: 689154315265683456\n", "Successfully queried - Tweet ID: 689143371370250240\n", "Successfully queried - Tweet ID: 688916208532455424\n", "Successfully queried - Tweet ID: 688908934925697024\n", "Successfully queried - Tweet ID: 688898160958271489\n", "Successfully queried - Tweet ID: 688894073864884227\n", "Successfully queried - Tweet ID: 688828561667567616\n", "Successfully queried - Tweet ID: 688804835492233216\n", "Successfully queried - Tweet ID: 688789766343622656\n", "Successfully queried - Tweet ID: 688547210804498433\n", "Successfully queried - Tweet ID: 688519176466644993\n", "Successfully queried - Tweet ID: 688385280030670848\n", "Successfully queried - Tweet ID: 688211956440801280\n", "Successfully queried - Tweet ID: 688179443353796608\n", "Successfully queried - Tweet ID: 688116655151435777\n", "Successfully queried - Tweet ID: 688064179421470721\n", "Successfully queried - Tweet ID: 687841446767013888\n", "Successfully queried - Tweet ID: 687826841265172480\n", "Successfully queried - Tweet ID: 687818504314159109\n", "Successfully queried - Tweet ID: 687807801670897665\n", "Successfully queried - Tweet ID: 687732144991551489\n", "Successfully queried - Tweet ID: 687704180304273409\n", "Successfully queried - Tweet ID: 687664829264453632\n", "Successfully queried - Tweet ID: 687494652870668288\n", "Successfully queried - Tweet ID: 687480748861947905\n", "Successfully queried - Tweet ID: 687476254459715584\n", "Successfully queried - Tweet ID: 687460506001633280\n", "Successfully queried - Tweet ID: 687399393394311168\n", "Successfully queried - Tweet ID: 687317306314240000\n", "Successfully queried - Tweet ID: 687312378585812992\n", "Successfully queried - Tweet ID: 687127927494963200\n", "Successfully queried - Tweet ID: 687124485711986689\n", "Successfully queried - Tweet ID: 687109925361856513\n", "Successfully queried - Tweet ID: 687102708889812993\n", "Successfully queried - Tweet ID: 687096057537363968\n", "Successfully queried - Tweet ID: 686947101016735744\n", "Successfully queried - Tweet ID: 686760001961103360\n", "Successfully queried - Tweet ID: 686749460672679938\n", "Successfully queried - Tweet ID: 686730991906516992\n", "Successfully queried - Tweet ID: 686683045143953408\n", "Successfully queried - Tweet ID: 686618349602762752\n", "Successfully queried - Tweet ID: 686606069955735556\n", "Successfully queried - Tweet ID: 686394059078897668\n", "Successfully queried - Tweet ID: 686386521809772549\n", "Successfully queried - Tweet ID: 686377065986265092\n", "Successfully queried - Tweet ID: 686358356425093120\n", "Successfully queried - Tweet ID: 686286779679375361\n", "Successfully queried - Tweet ID: 686050296934563840\n", "Successfully queried - Tweet ID: 686035780142297088\n", "Successfully queried - Tweet ID: 686034024800862208\n", "Successfully queried - Tweet ID: 686007916130873345\n", "Successfully queried - Tweet ID: 686003207160610816\n", "Successfully queried - Tweet ID: 685973236358713344\n", "Successfully queried - Tweet ID: 685943807276412928\n", "Successfully queried - Tweet ID: 685906723014619143\n", "Successfully queried - Tweet ID: 685681090388975616\n", "Successfully queried - Tweet ID: 685667379192414208\n", "Successfully queried - Tweet ID: 685663452032069632\n", "Successfully queried - Tweet ID: 685641971164143616\n", "Successfully queried - Tweet ID: 685547936038666240\n", "Successfully queried - Tweet ID: 685532292383666176\n", "Successfully queried - Tweet ID: 685325112850124800\n", "Successfully queried - Tweet ID: 685321586178670592\n", "Successfully queried - Tweet ID: 685315239903100929\n", "Successfully queried - Tweet ID: 685307451701334016\n", "Successfully queried - Tweet ID: 685268753634967552\n", "Successfully queried - Tweet ID: 685198997565345792\n", "Successfully queried - Tweet ID: 685169283572338688\n", "Successfully queried - Tweet ID: 684969860808454144\n", "Successfully queried - Tweet ID: 684959798585110529\n", "Successfully queried - Tweet ID: 684940049151070208\n", "Successfully queried - Tweet ID: 684926975086034944\n", "Successfully queried - Tweet ID: 684914660081053696\n", "Successfully queried - Tweet ID: 684902183876321280\n", "Successfully queried - Tweet ID: 684880619965411328\n", "Successfully queried - Tweet ID: 684830982659280897\n", "Successfully queried - Tweet ID: 684800227459624960\n", "Successfully queried - Tweet ID: 684594889858887680\n", "Successfully queried - Tweet ID: 684588130326986752\n", "Successfully queried - Tweet ID: 684567543613382656\n", "Successfully queried - Tweet ID: 684538444857667585\n", "Successfully queried - Tweet ID: 684481074559381504\n", "Successfully queried - Tweet ID: 684460069371654144\n", "Successfully queried - Tweet ID: 684241637099323392\n", "Successfully queried - Tweet ID: 684225744407494656\n", "Successfully queried - Tweet ID: 684222868335505415\n", "Successfully queried - Tweet ID: 684200372118904832\n", "Successfully queried - Tweet ID: 684195085588783105\n", "Successfully queried - Tweet ID: 684188786104872960\n", "Successfully queried - Tweet ID: 684177701129875456\n", "Successfully queried - Tweet ID: 684147889187209216\n", "Successfully queried - Tweet ID: 684122891630342144\n", "Successfully queried - Tweet ID: 684097758874210310\n", "Successfully queried - Tweet ID: 683857920510050305\n", "Successfully queried - Tweet ID: 683852578183077888\n", "Successfully queried - Tweet ID: 683849932751646720\n", "Successfully queried - Tweet ID: 683834909291606017\n", "Successfully queried - Tweet ID: 683828599284170753\n", "Successfully queried - Tweet ID: 683773439333797890\n", "Successfully queried - Tweet ID: 683742671509258241\n", "Successfully queried - Tweet ID: 683515932363329536\n", "Successfully queried - Tweet ID: 683498322573824003\n", "Successfully queried - Tweet ID: 683481228088049664\n", "Successfully queried - Tweet ID: 683462770029932544\n", "Successfully queried - Tweet ID: 683449695444799489\n", "Successfully queried - Tweet ID: 683391852557561860\n", "Successfully queried - Tweet ID: 683357973142474752\n", "Successfully queried - Tweet ID: 683142553609318400\n", "Successfully queried - Tweet ID: 683111407806746624\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Rate limit reached. Sleeping for: 571\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 683098815881154561\n", "Successfully queried - Tweet ID: 683078886620553216\n", "Successfully queried - Tweet ID: 683030066213818368\n", "Successfully queried - Tweet ID: 682962037429899265\n", "Successfully queried - Tweet ID: 682808988178739200\n", "Successfully queried - Tweet ID: 682788441537560576\n", "Successfully queried - Tweet ID: 682750546109968385\n", "Successfully queried - Tweet ID: 682697186228989953\n", "Successfully queried - Tweet ID: 682662431982772225\n", "Successfully queried - Tweet ID: 682638830361513985\n", "Successfully queried - Tweet ID: 682429480204398592\n", "Successfully queried - Tweet ID: 682406705142087680\n", "Successfully queried - Tweet ID: 682393905736888321\n", "Successfully queried - Tweet ID: 682389078323662849\n", "Successfully queried - Tweet ID: 682303737705140231\n", "Successfully queried - Tweet ID: 682259524040966145\n", "Successfully queried - Tweet ID: 682242692827447297\n", "Successfully queried - Tweet ID: 682088079302213632\n", "Successfully queried - Tweet ID: 682059653698686977\n", "Successfully queried - Tweet ID: 682047327939461121\n", "Successfully queried - Tweet ID: 682032003584274432\n", "Successfully queried - Tweet ID: 682003177596559360\n", "Successfully queried - Tweet ID: 681981167097122816\n", "Successfully queried - Tweet ID: 681891461017812993\n", "Successfully queried - Tweet ID: 681694085539872773\n", "Successfully queried - Tweet ID: 681679526984871937\n", "Successfully queried - Tweet ID: 681654059175129088\n", "Successfully queried - Tweet ID: 681610798867845120\n", "Successfully queried - Tweet ID: 681579835668455424\n", "Successfully queried - Tweet ID: 681523177663676416\n", "Successfully queried - Tweet ID: 681340665377193984\n", "Successfully queried - Tweet ID: 681339448655802368\n", "Successfully queried - Tweet ID: 681320187870711809\n", "Successfully queried - Tweet ID: 681302363064414209\n", "Successfully queried - Tweet ID: 681297372102656000\n", "Successfully queried - Tweet ID: 681281657291280384\n", "Successfully queried - Tweet ID: 681261549936340994\n", "Successfully queried - Tweet ID: 681242418453299201\n", "Successfully queried - Tweet ID: 681231109724700672\n", "Successfully queried - Tweet ID: 681193455364796417\n", "Successfully queried - Tweet ID: 680970795137544192\n", "Successfully queried - Tweet ID: 680959110691590145\n", "Successfully queried - Tweet ID: 680940246314430465\n", "Successfully queried - Tweet ID: 680934982542561280\n", "Successfully queried - Tweet ID: 680913438424612864\n", "Successfully queried - Tweet ID: 680889648562991104\n", "Successfully queried - Tweet ID: 680836378243002368\n", "Successfully queried - Tweet ID: 680805554198020098\n", "Successfully queried - Tweet ID: 680801747103793152\n", "Successfully queried - Tweet ID: 680798457301471234\n", "Successfully queried - Tweet ID: 680609293079592961\n", "Successfully queried - Tweet ID: 680583894916304897\n", "Successfully queried - Tweet ID: 680497766108381184\n", "Successfully queried - Tweet ID: 680494726643068929\n", "Successfully queried - Tweet ID: 680473011644985345\n", "Successfully queried - Tweet ID: 680440374763077632\n", "Successfully queried - Tweet ID: 680221482581123072\n", "Successfully queried - Tweet ID: 680206703334408192\n", "Successfully queried - Tweet ID: 680191257256136705\n", "Successfully queried - Tweet ID: 680176173301628928\n", "Successfully queried - Tweet ID: 680161097740095489\n", "Successfully queried - Tweet ID: 680145970311643136\n", "Successfully queried - Tweet ID: 680130881361686529\n", "Successfully queried - Tweet ID: 680115823365742593\n", "Successfully queried - Tweet ID: 680100725817409536\n", "Successfully queried - Tweet ID: 680085611152338944\n", "Successfully queried - Tweet ID: 680070545539371008\n", "Error Tweet_Id: 680055455951884288 : [{'code': 144, 'message': 'No status found with that ID.'}]\n", "Successfully queried - Tweet ID: 680055455951884288\n", "Successfully queried - Tweet ID: 679877062409191424\n", "Successfully queried - Tweet ID: 679872969355714560\n", "Successfully queried - Tweet ID: 679862121895714818\n", "Successfully queried - Tweet ID: 679854723806179328\n", "Successfully queried - Tweet ID: 679844490799091713\n", "Successfully queried - Tweet ID: 679828447187857408\n", "Successfully queried - Tweet ID: 679777920601223168\n", "Successfully queried - Tweet ID: 679736210798047232\n", "Successfully queried - Tweet ID: 679729593985699840\n", "Successfully queried - Tweet ID: 679722016581222400\n", "Successfully queried - Tweet ID: 679530280114372609\n", "Successfully queried - Tweet ID: 679527802031484928\n", "Successfully queried - Tweet ID: 679511351870550016\n", "Successfully queried - Tweet ID: 679503373272485890\n", "Successfully queried - Tweet ID: 679475951516934144\n", "Successfully queried - Tweet ID: 679462823135686656\n", "Successfully queried - Tweet ID: 679405845277462528\n", "Successfully queried - Tweet ID: 679158373988876288\n", "Successfully queried - Tweet ID: 679148763231985668\n", "Successfully queried - Tweet ID: 679132435750195208\n", "Successfully queried - Tweet ID: 679111216690831360\n", "Successfully queried - Tweet ID: 679062614270468097\n", "Successfully queried - Tweet ID: 679047485189439488\n", "Successfully queried - Tweet ID: 679001094530465792\n", "Successfully queried - Tweet ID: 678991772295516161\n", "Successfully queried - Tweet ID: 678969228704284672\n", "Successfully queried - Tweet ID: 678800283649069056\n", "Successfully queried - Tweet ID: 678798276842360832\n", "Successfully queried - Tweet ID: 678774928607469569\n", "Successfully queried - Tweet ID: 678767140346941444\n", "Successfully queried - Tweet ID: 678764513869611008\n", "Successfully queried - Tweet ID: 678755239630127104\n", "Successfully queried - Tweet ID: 678740035362037760\n", "Successfully queried - Tweet ID: 678708137298427904\n", "Successfully queried - Tweet ID: 678675843183484930\n", "Successfully queried - Tweet ID: 678643457146150913\n", "Successfully queried - Tweet ID: 678446151570427904\n", "Successfully queried - Tweet ID: 678424312106393600\n", "Successfully queried - Tweet ID: 678410210315247616\n", "Successfully queried - Tweet ID: 678399652199309312\n", "Successfully queried - Tweet ID: 678396796259975168\n", "Successfully queried - Tweet ID: 678389028614488064\n", "Successfully queried - Tweet ID: 678380236862578688\n", "Successfully queried - Tweet ID: 678341075375947776\n", "Successfully queried - Tweet ID: 678334497360859136\n", "Successfully queried - Tweet ID: 678278586130948096\n", "Successfully queried - Tweet ID: 678255464182861824\n", "Successfully queried - Tweet ID: 678023323247357953\n", "Successfully queried - Tweet ID: 678021115718029313\n", "Successfully queried - Tweet ID: 677961670166224897\n", "Successfully queried - Tweet ID: 677918531514703872\n", "Successfully queried - Tweet ID: 677895101218201600\n", "Successfully queried - Tweet ID: 677716515794329600\n", "Successfully queried - Tweet ID: 677700003327029250\n", "Successfully queried - Tweet ID: 677698403548192770\n", "Successfully queried - Tweet ID: 677687604918272002\n", "Successfully queried - Tweet ID: 677673981332312066\n", "Successfully queried - Tweet ID: 677662372920729601\n", "Successfully queried - Tweet ID: 677644091929329666\n", "Successfully queried - Tweet ID: 677573743309385728\n", "Successfully queried - Tweet ID: 677565715327688705\n", "Successfully queried - Tweet ID: 677557565589463040\n", "Successfully queried - Tweet ID: 677547928504967168\n", "Successfully queried - Tweet ID: 677530072887205888\n", "Successfully queried - Tweet ID: 677335745548390400\n", "Successfully queried - Tweet ID: 677334615166730240\n", "Successfully queried - Tweet ID: 677331501395156992\n", "Successfully queried - Tweet ID: 677328882937298944\n", "Successfully queried - Tweet ID: 677314812125323265\n", "Successfully queried - Tweet ID: 677301033169788928\n", "Successfully queried - Tweet ID: 677269281705472000\n", "Successfully queried - Tweet ID: 677228873407442944\n", "Successfully queried - Tweet ID: 677187300187611136\n", "Successfully queried - Tweet ID: 676975532580409345\n", "Successfully queried - Tweet ID: 676957860086095872\n", "Successfully queried - Tweet ID: 676949632774234114\n", "Successfully queried - Tweet ID: 676948236477857792\n", "Successfully queried - Tweet ID: 676946864479084545\n", "Successfully queried - Tweet ID: 676942428000112642\n", "Successfully queried - Tweet ID: 676936541936185344\n", "Successfully queried - Tweet ID: 676916996760600576\n", "Successfully queried - Tweet ID: 676897532954456065\n", "Successfully queried - Tweet ID: 676864501615042560\n", "Successfully queried - Tweet ID: 676821958043033607\n", "Successfully queried - Tweet ID: 676819651066732545\n", "Successfully queried - Tweet ID: 676811746707918848\n", "Successfully queried - Tweet ID: 676776431406465024\n", "Successfully queried - Tweet ID: 676617503762681856\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 676613908052996102\n", "Successfully queried - Tweet ID: 676606785097199616\n", "Successfully queried - Tweet ID: 676603393314578432\n", "Successfully queried - Tweet ID: 676593408224403456\n", "Successfully queried - Tweet ID: 676590572941893632\n", "Successfully queried - Tweet ID: 676588346097852417\n", "Successfully queried - Tweet ID: 676582956622721024\n", "Successfully queried - Tweet ID: 676575501977128964\n", "Successfully queried - Tweet ID: 676533798876651520\n", "Successfully queried - Tweet ID: 676496375194980353\n", "Successfully queried - Tweet ID: 676470639084101634\n", "Successfully queried - Tweet ID: 676440007570247681\n", "Successfully queried - Tweet ID: 676430933382295552\n", "Successfully queried - Tweet ID: 676263575653122048\n", "Successfully queried - Tweet ID: 676237365392908289\n", "Successfully queried - Tweet ID: 676219687039057920\n", "Successfully queried - Tweet ID: 676215927814406144\n", "Successfully queried - Tweet ID: 676191832485810177\n", "Successfully queried - Tweet ID: 676146341966438401\n", "Successfully queried - Tweet ID: 676121918416756736\n", "Successfully queried - Tweet ID: 676101918813499392\n", "Successfully queried - Tweet ID: 676098748976615425\n", "Successfully queried - Tweet ID: 676089483918516224\n", "Successfully queried - Tweet ID: 675898130735476737\n", "Successfully queried - Tweet ID: 675891555769696257\n", "Successfully queried - Tweet ID: 675888385639251968\n", "Successfully queried - Tweet ID: 675878199931371520\n", "Successfully queried - Tweet ID: 675870721063669760\n", "Successfully queried - Tweet ID: 675853064436391936\n", "Successfully queried - Tweet ID: 675849018447167488\n", "Successfully queried - Tweet ID: 675845657354215424\n", "Successfully queried - Tweet ID: 675822767435051008\n", "Successfully queried - Tweet ID: 675820929667219457\n", "Successfully queried - Tweet ID: 675798442703122432\n", "Successfully queried - Tweet ID: 675781562965868544\n", "Successfully queried - Tweet ID: 675740360753160193\n", "Successfully queried - Tweet ID: 675710890956750848\n", "Successfully queried - Tweet ID: 675707330206547968\n", "Successfully queried - Tweet ID: 675706639471788032\n", "Successfully queried - Tweet ID: 675534494439489536\n", "Successfully queried - Tweet ID: 675531475945709568\n", "Successfully queried - Tweet ID: 675522403582218240\n", "Successfully queried - Tweet ID: 675517828909424640\n", "Successfully queried - Tweet ID: 675501075957489664\n", "Successfully queried - Tweet ID: 675497103322386432\n", "Successfully queried - Tweet ID: 675489971617296384\n", "Successfully queried - Tweet ID: 675483430902214656\n", "Successfully queried - Tweet ID: 675432746517426176\n", "Successfully queried - Tweet ID: 675372240448454658\n", "Successfully queried - Tweet ID: 675362609739206656\n", "Successfully queried - Tweet ID: 675354435921575936\n", "Successfully queried - Tweet ID: 675349384339542016\n", "Successfully queried - Tweet ID: 675334060156301312\n", "Successfully queried - Tweet ID: 675166823650848770\n", "Successfully queried - Tweet ID: 675153376133427200\n", "Successfully queried - Tweet ID: 675149409102012420\n", "Successfully queried - Tweet ID: 675147105808306176\n", "Successfully queried - Tweet ID: 675146535592706048\n", "Successfully queried - Tweet ID: 675145476954566656\n", "Successfully queried - Tweet ID: 675135153782571009\n", "Successfully queried - Tweet ID: 675113801096802304\n", "Successfully queried - Tweet ID: 675111688094527488\n", "Successfully queried - Tweet ID: 675109292475830276\n", "Successfully queried - Tweet ID: 675047298674663426\n", "Successfully queried - Tweet ID: 675015141583413248\n", "Successfully queried - Tweet ID: 675006312288268288\n", "Successfully queried - Tweet ID: 675003128568291329\n", "Successfully queried - Tweet ID: 674999807681908736\n", "Successfully queried - Tweet ID: 674805413498527744\n", "Successfully queried - Tweet ID: 674800520222154752\n", "Successfully queried - Tweet ID: 674793399141146624\n", "Successfully queried - Tweet ID: 674790488185167872\n", "Successfully queried - Tweet ID: 674788554665512960\n", "Successfully queried - Tweet ID: 674781762103414784\n", "Successfully queried - Tweet ID: 674774481756377088\n", "Successfully queried - Tweet ID: 674767892831932416\n", "Successfully queried - Tweet ID: 674764817387900928\n", "Successfully queried - Tweet ID: 674754018082705410\n", "Successfully queried - Tweet ID: 674752233200820224\n", "Successfully queried - Tweet ID: 674743008475090944\n", "Successfully queried - Tweet ID: 674742531037511680\n", "Successfully queried - Tweet ID: 674739953134403584\n", "Successfully queried - Tweet ID: 674737130913071104\n", "Successfully queried - Tweet ID: 674690135443775488\n", "Successfully queried - Tweet ID: 674670581682434048\n", "Successfully queried - Tweet ID: 674664755118911488\n", "Successfully queried - Tweet ID: 674646392044941312\n", "Successfully queried - Tweet ID: 674644256330530816\n", "Successfully queried - Tweet ID: 674638615994089473\n", "Successfully queried - Tweet ID: 674632714662858753\n", "Successfully queried - Tweet ID: 674606911342424069\n", "Successfully queried - Tweet ID: 674468880899788800\n", "Successfully queried - Tweet ID: 674447403907457024\n", "Successfully queried - Tweet ID: 674436901579923456\n", "Successfully queried - Tweet ID: 674422304705744896\n", "Successfully queried - Tweet ID: 674416750885273600\n", "Successfully queried - Tweet ID: 674410619106390016\n", "Successfully queried - Tweet ID: 674394782723014656\n", "Successfully queried - Tweet ID: 674372068062928900\n", "Successfully queried - Tweet ID: 674330906434379776\n", "Successfully queried - Tweet ID: 674318007229923329\n", "Successfully queried - Tweet ID: 674307341513269249\n", "Successfully queried - Tweet ID: 674291837063053312\n", "Successfully queried - Tweet ID: 674271431610523648\n", "Successfully queried - Tweet ID: 674269164442398721\n", "Successfully queried - Tweet ID: 674265582246694913\n", "Successfully queried - Tweet ID: 674262580978937856\n", "Successfully queried - Tweet ID: 674255168825880576\n", "Successfully queried - Tweet ID: 674082852460433408\n", "Successfully queried - Tweet ID: 674075285688614912\n", "Successfully queried - Tweet ID: 674063288070742018\n", "Successfully queried - Tweet ID: 674053186244734976\n", "Successfully queried - Tweet ID: 674051556661161984\n", "Successfully queried - Tweet ID: 674045139690631169\n", "Successfully queried - Tweet ID: 674042553264685056\n", "Successfully queried - Tweet ID: 674038233588723717\n", "Successfully queried - Tweet ID: 674036086168010753\n", "Successfully queried - Tweet ID: 674024893172875264\n", "Successfully queried - Tweet ID: 674019345211760640\n", "Successfully queried - Tweet ID: 674014384960745472\n", "Successfully queried - Tweet ID: 674008982932058114\n", "Successfully queried - Tweet ID: 673956914389192708\n", "Successfully queried - Tweet ID: 673919437611909120\n", "Successfully queried - Tweet ID: 673906403526995968\n", "Successfully queried - Tweet ID: 673887867907739649\n", "Successfully queried - Tweet ID: 673716320723169284\n", "Successfully queried - Tweet ID: 673715861853720576\n", "Successfully queried - Tweet ID: 673711475735838725\n", "Successfully queried - Tweet ID: 673709992831262724\n", "Successfully queried - Tweet ID: 673708611235921920\n", "Successfully queried - Tweet ID: 673707060090052608\n", "Successfully queried - Tweet ID: 673705679337693185\n", "Successfully queried - Tweet ID: 673700254269775872\n", "Successfully queried - Tweet ID: 673697980713705472\n", "Successfully queried - Tweet ID: 673689733134946305\n", "Successfully queried - Tweet ID: 673688752737402881\n", "Successfully queried - Tweet ID: 673686845050527744\n", "Successfully queried - Tweet ID: 673680198160809984\n", "Successfully queried - Tweet ID: 673662677122719744\n", "Successfully queried - Tweet ID: 673656262056419329\n", "Successfully queried - Tweet ID: 673636718965334016\n", "Successfully queried - Tweet ID: 673612854080196609\n", "Successfully queried - Tweet ID: 673583129559498752\n", "Successfully queried - Tweet ID: 673580926094458881\n", "Successfully queried - Tweet ID: 673576835670777856\n", "Successfully queried - Tweet ID: 673363615379013632\n", "Successfully queried - Tweet ID: 673359818736984064\n", "Successfully queried - Tweet ID: 673355879178194945\n", "Successfully queried - Tweet ID: 673352124999274496\n", "Successfully queried - Tweet ID: 673350198937153538\n", "Successfully queried - Tweet ID: 673345638550134785\n", "Successfully queried - Tweet ID: 673343217010679808\n", "Successfully queried - Tweet ID: 673342308415348736\n", "Successfully queried - Tweet ID: 673320132811366400\n", "Successfully queried - Tweet ID: 673317986296586240\n", "Successfully queried - Tweet ID: 673295268553605120\n", "Successfully queried - Tweet ID: 673270968295534593\n", "Successfully queried - Tweet ID: 673240798075449344\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 673213039743795200\n", "Successfully queried - Tweet ID: 673148804208660480\n", "Successfully queried - Tweet ID: 672997845381865473\n", "Successfully queried - Tweet ID: 672995267319328768\n", "Successfully queried - Tweet ID: 672988786805112832\n", "Successfully queried - Tweet ID: 672984142909456390\n", "Successfully queried - Tweet ID: 672980819271634944\n", "Successfully queried - Tweet ID: 672975131468300288\n", "Successfully queried - Tweet ID: 672970152493887488\n", "Successfully queried - Tweet ID: 672968025906282496\n", "Successfully queried - Tweet ID: 672964561327235073\n", "Successfully queried - Tweet ID: 672902681409806336\n", "Successfully queried - Tweet ID: 672898206762672129\n", "Successfully queried - Tweet ID: 672884426393653248\n", "Successfully queried - Tweet ID: 672877615439593473\n", "Successfully queried - Tweet ID: 672834301050937345\n", "Successfully queried - Tweet ID: 672828477930868736\n", "Successfully queried - Tweet ID: 672640509974827008\n", "Successfully queried - Tweet ID: 672622327801233409\n", "Successfully queried - Tweet ID: 672614745925664768\n", "Successfully queried - Tweet ID: 672609152938721280\n", "Successfully queried - Tweet ID: 672604026190569472\n", "Successfully queried - Tweet ID: 672594978741354496\n", "Successfully queried - Tweet ID: 672591762242805761\n", "Successfully queried - Tweet ID: 672591271085670400\n", "Successfully queried - Tweet ID: 672538107540070400\n", "Successfully queried - Tweet ID: 672523490734551040\n", "Successfully queried - Tweet ID: 672488522314567680\n", "Successfully queried - Tweet ID: 672482722825261057\n", "Successfully queried - Tweet ID: 672481316919734272\n", "Successfully queried - Tweet ID: 672475084225949696\n", "Successfully queried - Tweet ID: 672466075045466113\n", "Successfully queried - Tweet ID: 672272411274932228\n", "Successfully queried - Tweet ID: 672267570918129665\n", "Successfully queried - Tweet ID: 672264251789176834\n", "Successfully queried - Tweet ID: 672256522047614977\n", "Successfully queried - Tweet ID: 672254177670729728\n", "Successfully queried - Tweet ID: 672248013293752320\n", "Successfully queried - Tweet ID: 672245253877968896\n", "Successfully queried - Tweet ID: 672239279297454080\n", "Successfully queried - Tweet ID: 672231046314901505\n", "Successfully queried - Tweet ID: 672222792075620352\n", "Successfully queried - Tweet ID: 672205392827572224\n", "Successfully queried - Tweet ID: 672169685991993344\n", "Successfully queried - Tweet ID: 672160042234327040\n", "Successfully queried - Tweet ID: 672139350159835138\n", "Successfully queried - Tweet ID: 672125275208069120\n", "Successfully queried - Tweet ID: 672095186491711488\n", "Successfully queried - Tweet ID: 672082170312290304\n", "Successfully queried - Tweet ID: 672068090318987265\n", "Successfully queried - Tweet ID: 671896809300709376\n", "Successfully queried - Tweet ID: 671891728106971137\n", "Successfully queried - Tweet ID: 671882082306625538\n", "Successfully queried - Tweet ID: 671879137494245376\n", "Successfully queried - Tweet ID: 671874878652489728\n", "Successfully queried - Tweet ID: 671866342182637568\n", "Successfully queried - Tweet ID: 671855973984772097\n", "Successfully queried - Tweet ID: 671789708968640512\n", "Successfully queried - Tweet ID: 671768281401958400\n", "Successfully queried - Tweet ID: 671763349865160704\n", "Successfully queried - Tweet ID: 671744970634719232\n", "Successfully queried - Tweet ID: 671743150407421952\n", "Successfully queried - Tweet ID: 671735591348891648\n", "Successfully queried - Tweet ID: 671729906628341761\n", "Successfully queried - Tweet ID: 671561002136281088\n", "Successfully queried - Tweet ID: 671550332464455680\n", "Successfully queried - Tweet ID: 671547767500775424\n", "Successfully queried - Tweet ID: 671544874165002241\n", "Successfully queried - Tweet ID: 671542985629241344\n", "Successfully queried - Tweet ID: 671538301157904385\n", "Successfully queried - Tweet ID: 671536543010570240\n", "Successfully queried - Tweet ID: 671533943490011136\n", "Successfully queried - Tweet ID: 671528761649688577\n", "Successfully queried - Tweet ID: 671520732782923777\n", "Successfully queried - Tweet ID: 671518598289059840\n", "Successfully queried - Tweet ID: 671511350426865664\n", "Successfully queried - Tweet ID: 671504605491109889\n", "Successfully queried - Tweet ID: 671497587707535361\n", "Successfully queried - Tweet ID: 671488513339211776\n", "Successfully queried - Tweet ID: 671486386088865792\n", "Successfully queried - Tweet ID: 671485057807351808\n", "Successfully queried - Tweet ID: 671390180817915904\n", "Successfully queried - Tweet ID: 671362598324076544\n", "Successfully queried - Tweet ID: 671357843010908160\n", "Successfully queried - Tweet ID: 671355857343524864\n", "Successfully queried - Tweet ID: 671347597085433856\n", "Successfully queried - Tweet ID: 671186162933985280\n", "Successfully queried - Tweet ID: 671182547775299584\n", "Successfully queried - Tweet ID: 671166507850801152\n", "Successfully queried - Tweet ID: 671163268581498880\n", "Successfully queried - Tweet ID: 671159727754231808\n", "Successfully queried - Tweet ID: 671154572044468225\n", "Successfully queried - Tweet ID: 671151324042559489\n", "Successfully queried - Tweet ID: 671147085991960577\n", "Successfully queried - Tweet ID: 671141549288370177\n", "Successfully queried - Tweet ID: 671138694582165504\n", "Successfully queried - Tweet ID: 671134062904504320\n", "Successfully queried - Tweet ID: 671122204919246848\n", "Successfully queried - Tweet ID: 671115716440031232\n", "Successfully queried - Tweet ID: 671109016219725825\n", "Successfully queried - Tweet ID: 670995969505435648\n", "Successfully queried - Tweet ID: 670842764863651840\n", "Successfully queried - Tweet ID: 670840546554966016\n", "Successfully queried - Tweet ID: 670838202509447168\n", "Successfully queried - Tweet ID: 670833812859932673\n", "Successfully queried - Tweet ID: 670832455012716544\n", "Successfully queried - Tweet ID: 670826280409919488\n", "Successfully queried - Tweet ID: 670823764196741120\n", "Successfully queried - Tweet ID: 670822709593571328\n", "Successfully queried - Tweet ID: 670815497391357952\n", "Successfully queried - Tweet ID: 670811965569282048\n", "Successfully queried - Tweet ID: 670807719151067136\n", "Successfully queried - Tweet ID: 670804601705242624\n", "Successfully queried - Tweet ID: 670803562457407488\n", "Successfully queried - Tweet ID: 670797304698376195\n", "Successfully queried - Tweet ID: 670792680469889025\n", "Successfully queried - Tweet ID: 670789397210615808\n", "Successfully queried - Tweet ID: 670786190031921152\n", "Successfully queried - Tweet ID: 670783437142401025\n", "Successfully queried - Tweet ID: 670782429121134593\n", "Successfully queried - Tweet ID: 670780561024270336\n", "Successfully queried - Tweet ID: 670778058496974848\n", "Successfully queried - Tweet ID: 670764103623966721\n", "Successfully queried - Tweet ID: 670755717859713024\n", "Successfully queried - Tweet ID: 670733412878163972\n", "Successfully queried - Tweet ID: 670727704916926465\n", "Successfully queried - Tweet ID: 670717338665226240\n", "Successfully queried - Tweet ID: 670704688707301377\n", "Successfully queried - Tweet ID: 670691627984359425\n", "Successfully queried - Tweet ID: 670679630144274432\n", "Successfully queried - Tweet ID: 670676092097810432\n", "Successfully queried - Tweet ID: 670668383499735048\n", "Successfully queried - Tweet ID: 670474236058800128\n", "Successfully queried - Tweet ID: 670468609693655041\n", "Successfully queried - Tweet ID: 670465786746662913\n", "Successfully queried - Tweet ID: 670452855871037440\n", "Successfully queried - Tweet ID: 670449342516494336\n", "Successfully queried - Tweet ID: 670444955656130560\n", "Successfully queried - Tweet ID: 670442337873600512\n", "Successfully queried - Tweet ID: 670435821946826752\n", "Successfully queried - Tweet ID: 670434127938719744\n", "Successfully queried - Tweet ID: 670433248821026816\n", "Successfully queried - Tweet ID: 670428280563085312\n", "Successfully queried - Tweet ID: 670427002554466305\n", "Successfully queried - Tweet ID: 670421925039075328\n", "Successfully queried - Tweet ID: 670420569653809152\n", "Successfully queried - Tweet ID: 670417414769758208\n", "Successfully queried - Tweet ID: 670411370698022913\n", "Successfully queried - Tweet ID: 670408998013820928\n", "Successfully queried - Tweet ID: 670403879788544000\n", "Successfully queried - Tweet ID: 670385711116361728\n", "Successfully queried - Tweet ID: 670374371102445568\n", "Successfully queried - Tweet ID: 670361874861563904\n", "Successfully queried - Tweet ID: 670338931251150849\n", "Successfully queried - Tweet ID: 670319130621435904\n", "Successfully queried - Tweet ID: 670303360680108032\n", "Successfully queried - Tweet ID: 670290420111441920\n", "Successfully queried - Tweet ID: 670093938074779648\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 670086499208155136\n", "Successfully queried - Tweet ID: 670079681849372674\n", "Successfully queried - Tweet ID: 670073503555706880\n", "Successfully queried - Tweet ID: 670069087419133954\n", "Successfully queried - Tweet ID: 670061506722140161\n", "Successfully queried - Tweet ID: 670055038660800512\n", "Successfully queried - Tweet ID: 670046952931721218\n", "Successfully queried - Tweet ID: 670040295598354432\n", "Successfully queried - Tweet ID: 670037189829525505\n", "Successfully queried - Tweet ID: 670003130994700288\n", "Successfully queried - Tweet ID: 669993076832759809\n", "Successfully queried - Tweet ID: 669972011175813120\n", "Successfully queried - Tweet ID: 669970042633789440\n", "Successfully queried - Tweet ID: 669942763794931712\n", "Successfully queried - Tweet ID: 669926384437997569\n", "Successfully queried - Tweet ID: 669923323644657664\n", "Successfully queried - Tweet ID: 669753178989142016\n", "Successfully queried - Tweet ID: 669749430875258880\n", "Successfully queried - Tweet ID: 669684865554620416\n", "Successfully queried - Tweet ID: 669683899023405056\n", "Successfully queried - Tweet ID: 669682095984410625\n", "Successfully queried - Tweet ID: 669680153564442624\n", "Successfully queried - Tweet ID: 669661792646373376\n", "Successfully queried - Tweet ID: 669625907762618368\n", "Successfully queried - Tweet ID: 669603084620980224\n", "Successfully queried - Tweet ID: 669597912108789760\n", "Successfully queried - Tweet ID: 669583744538451968\n", "Successfully queried - Tweet ID: 669573570759163904\n", "Successfully queried - Tweet ID: 669571471778410496\n", "Successfully queried - Tweet ID: 669567591774625800\n", "Successfully queried - Tweet ID: 669564461267722241\n", "Successfully queried - Tweet ID: 669393256313184256\n", "Successfully queried - Tweet ID: 669375718304980992\n", "Successfully queried - Tweet ID: 669371483794317312\n", "Successfully queried - Tweet ID: 669367896104181761\n", "Successfully queried - Tweet ID: 669363888236994561\n", "Successfully queried - Tweet ID: 669359674819481600\n", "Successfully queried - Tweet ID: 669354382627049472\n", "Successfully queried - Tweet ID: 669353438988365824\n", "Successfully queried - Tweet ID: 669351434509529089\n", "Successfully queried - Tweet ID: 669328503091937280\n", "Successfully queried - Tweet ID: 669327207240699904\n", "Successfully queried - Tweet ID: 669324657376567296\n", "Successfully queried - Tweet ID: 669216679721873412\n", "Successfully queried - Tweet ID: 669214165781868544\n", "Successfully queried - Tweet ID: 669203728096960512\n", "Successfully queried - Tweet ID: 669037058363662336\n", "Successfully queried - Tweet ID: 669015743032369152\n", "Successfully queried - Tweet ID: 669006782128353280\n", "Successfully queried - Tweet ID: 669000397445533696\n", "Successfully queried - Tweet ID: 668994913074286592\n", "Successfully queried - Tweet ID: 668992363537309700\n", "Successfully queried - Tweet ID: 668989615043424256\n", "Successfully queried - Tweet ID: 668988183816871936\n", "Successfully queried - Tweet ID: 668986018524233728\n", "Successfully queried - Tweet ID: 668981893510119424\n", "Successfully queried - Tweet ID: 668979806671884288\n", "Successfully queried - Tweet ID: 668975677807423489\n", "Successfully queried - Tweet ID: 668967877119254528\n", "Successfully queried - Tweet ID: 668960084974809088\n", "Successfully queried - Tweet ID: 668955713004314625\n", "Successfully queried - Tweet ID: 668932921458302977\n", "Successfully queried - Tweet ID: 668902994700836864\n", "Successfully queried - Tweet ID: 668892474547511297\n", "Successfully queried - Tweet ID: 668872652652679168\n", "Successfully queried - Tweet ID: 668852170888998912\n", "Successfully queried - Tweet ID: 668826086256599040\n", "Successfully queried - Tweet ID: 668815180734689280\n", "Successfully queried - Tweet ID: 668779399630725120\n", "Successfully queried - Tweet ID: 668655139528511488\n", "Successfully queried - Tweet ID: 668645506898350081\n", "Successfully queried - Tweet ID: 668643542311546881\n", "Successfully queried - Tweet ID: 668641109086707712\n", "Successfully queried - Tweet ID: 668636665813057536\n", "Successfully queried - Tweet ID: 668633411083464705\n", "Successfully queried - Tweet ID: 668631377374486528\n", "Successfully queried - Tweet ID: 668627278264475648\n", "Successfully queried - Tweet ID: 668625577880875008\n", "Successfully queried - Tweet ID: 668623201287675904\n", "Successfully queried - Tweet ID: 668620235289837568\n", "Successfully queried - Tweet ID: 668614819948453888\n", "Successfully queried - Tweet ID: 668587383441514497\n", "Successfully queried - Tweet ID: 668567822092664832\n", "Successfully queried - Tweet ID: 668544745690562560\n", "Successfully queried - Tweet ID: 668542336805281792\n", "Successfully queried - Tweet ID: 668537837512433665\n", "Successfully queried - Tweet ID: 668528771708952576\n", "Successfully queried - Tweet ID: 668507509523615744\n", "Successfully queried - Tweet ID: 668496999348633600\n", "Successfully queried - Tweet ID: 668484198282485761\n", "Successfully queried - Tweet ID: 668480044826800133\n", "Successfully queried - Tweet ID: 668466899341221888\n", "Successfully queried - Tweet ID: 668297328638447616\n", "Successfully queried - Tweet ID: 668291999406125056\n", "Successfully queried - Tweet ID: 668286279830867968\n", "Successfully queried - Tweet ID: 668274247790391296\n", "Successfully queried - Tweet ID: 668268907921326080\n", "Successfully queried - Tweet ID: 668256321989451776\n", "Successfully queried - Tweet ID: 668248472370458624\n", "Successfully queried - Tweet ID: 668237644992782336\n", "Successfully queried - Tweet ID: 668226093875376128\n", "Successfully queried - Tweet ID: 668221241640230912\n", "Successfully queried - Tweet ID: 668204964695683073\n", "Successfully queried - Tweet ID: 668190681446379520\n", "Successfully queried - Tweet ID: 668171859951755264\n", "Successfully queried - Tweet ID: 668154635664932864\n", "Successfully queried - Tweet ID: 668142349051129856\n", "Successfully queried - Tweet ID: 668113020489474048\n", "Successfully queried - Tweet ID: 667937095915278337\n", "Successfully queried - Tweet ID: 667924896115245057\n", "Successfully queried - Tweet ID: 667915453470232577\n", "Successfully queried - Tweet ID: 667911425562669056\n", "Successfully queried - Tweet ID: 667902449697558528\n", "Successfully queried - Tweet ID: 667886921285246976\n", "Successfully queried - Tweet ID: 667885044254572545\n", "Successfully queried - Tweet ID: 667878741721415682\n", "Successfully queried - Tweet ID: 667873844930215936\n", "Successfully queried - Tweet ID: 667866724293877760\n", "Successfully queried - Tweet ID: 667861340749471744\n", "Successfully queried - Tweet ID: 667832474953625600\n", "Successfully queried - Tweet ID: 667806454573760512\n", "Successfully queried - Tweet ID: 667801013445750784\n", "Successfully queried - Tweet ID: 667793409583771648\n", "Successfully queried - Tweet ID: 667782464991965184\n", "Successfully queried - Tweet ID: 667773195014021121\n", "Successfully queried - Tweet ID: 667766675769573376\n", "Successfully queried - Tweet ID: 667728196545200128\n", "Successfully queried - Tweet ID: 667724302356258817\n", "Successfully queried - Tweet ID: 667550904950915073\n", "Successfully queried - Tweet ID: 667550882905632768\n", "Successfully queried - Tweet ID: 667549055577362432\n", "Successfully queried - Tweet ID: 667546741521195010\n", "Successfully queried - Tweet ID: 667544320556335104\n", "Successfully queried - Tweet ID: 667538891197542400\n", "Successfully queried - Tweet ID: 667534815156183040\n", "Successfully queried - Tweet ID: 667530908589760512\n", "Successfully queried - Tweet ID: 667524857454854144\n", "Successfully queried - Tweet ID: 667517642048163840\n", "Successfully queried - Tweet ID: 667509364010450944\n", "Successfully queried - Tweet ID: 667502640335572993\n", "Successfully queried - Tweet ID: 667495797102141441\n", "Successfully queried - Tweet ID: 667491009379606528\n", "Successfully queried - Tweet ID: 667470559035432960\n", "Successfully queried - Tweet ID: 667455448082227200\n", "Successfully queried - Tweet ID: 667453023279554560\n", "Successfully queried - Tweet ID: 667443425659232256\n", "Successfully queried - Tweet ID: 667437278097252352\n", "Successfully queried - Tweet ID: 667435689202614272\n", "Successfully queried - Tweet ID: 667405339315146752\n", "Successfully queried - Tweet ID: 667393430834667520\n", "Successfully queried - Tweet ID: 667369227918143488\n", "Successfully queried - Tweet ID: 667211855547486208\n", "Successfully queried - Tweet ID: 667200525029539841\n", "Successfully queried - Tweet ID: 667192066997374976\n", "Successfully queried - Tweet ID: 667188689915760640\n", "Successfully queried - Tweet ID: 667182792070062081\n", "Successfully queried - Tweet ID: 667177989038297088\n", "Successfully queried - Tweet ID: 667176164155375616\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Successfully queried - Tweet ID: 667174963120574464\n", "Successfully queried - Tweet ID: 667171260800061440\n", "Successfully queried - Tweet ID: 667165590075940865\n", "Successfully queried - Tweet ID: 667160273090932737\n", "Successfully queried - Tweet ID: 667152164079423490\n", "Successfully queried - Tweet ID: 667138269671505920\n", "Successfully queried - Tweet ID: 667119796878725120\n", "Successfully queried - Tweet ID: 667090893657276420\n", "Successfully queried - Tweet ID: 667073648344346624\n", "Successfully queried - Tweet ID: 667070482143944705\n", "Successfully queried - Tweet ID: 667065535570550784\n", "Successfully queried - Tweet ID: 667062181243039745\n", "Successfully queried - Tweet ID: 667044094246576128\n", "Successfully queried - Tweet ID: 667012601033924608\n", "Successfully queried - Tweet ID: 666996132027977728\n", "Successfully queried - Tweet ID: 666983947667116034\n", "Successfully queried - Tweet ID: 666837028449972224\n", "Successfully queried - Tweet ID: 666835007768551424\n", "Successfully queried - Tweet ID: 666826780179869698\n", "Successfully queried - Tweet ID: 666817836334096384\n", "Successfully queried - Tweet ID: 666804364988780544\n", "Successfully queried - Tweet ID: 666786068205871104\n", "Successfully queried - Tweet ID: 666781792255496192\n", "Successfully queried - Tweet ID: 666776908487630848\n", "Successfully queried - Tweet ID: 666739327293083650\n", "Successfully queried - Tweet ID: 666701168228331520\n", "Successfully queried - Tweet ID: 666691418707132416\n", "Successfully queried - Tweet ID: 666649482315059201\n", "Successfully queried - Tweet ID: 666644823164719104\n", "Successfully queried - Tweet ID: 666454714377183233\n", "Successfully queried - Tweet ID: 666447344410484738\n", "Successfully queried - Tweet ID: 666437273139982337\n", "Successfully queried - Tweet ID: 666435652385423360\n", "Successfully queried - Tweet ID: 666430724426358785\n", "Successfully queried - Tweet ID: 666428276349472768\n", "Successfully queried - Tweet ID: 666421158376562688\n", "Successfully queried - Tweet ID: 666418789513326592\n", "Successfully queried - Tweet ID: 666411507551481857\n", "Successfully queried - Tweet ID: 666407126856765440\n", "Successfully queried - Tweet ID: 666396247373291520\n", "Successfully queried - Tweet ID: 666373753744588802\n", "Successfully queried - Tweet ID: 666362758909284353\n", "Successfully queried - Tweet ID: 666353288456101888\n", "Successfully queried - Tweet ID: 666345417576210432\n", "Successfully queried - Tweet ID: 666337882303524864\n", "Successfully queried - Tweet ID: 666293911632134144\n", "Successfully queried - Tweet ID: 666287406224695296\n", "Successfully queried - Tweet ID: 666273097616637952\n", "Successfully queried - Tweet ID: 666268910803644416\n", "Successfully queried - Tweet ID: 666104133288665088\n", "Successfully queried - Tweet ID: 666102155909144576\n", "Successfully queried - Tweet ID: 666099513787052032\n", "Successfully queried - Tweet ID: 666094000022159362\n", "Successfully queried - Tweet ID: 666082916733198337\n", "Successfully queried - Tweet ID: 666073100786774016\n", "Successfully queried - Tweet ID: 666071193221509120\n", "Successfully queried - Tweet ID: 666063827256086533\n", "Successfully queried - Tweet ID: 666058600524156928\n", "Successfully queried - Tweet ID: 666057090499244032\n", "Successfully queried - Tweet ID: 666055525042405380\n", "Successfully queried - Tweet ID: 666051853826850816\n", "Successfully queried - Tweet ID: 666050758794694657\n", "Successfully queried - Tweet ID: 666049248165822465\n", "Successfully queried - Tweet ID: 666044226329800704\n", "Successfully queried - Tweet ID: 666033412701032449\n", "Successfully queried - Tweet ID: 666029285002620928\n", "Successfully queried - Tweet ID: 666020888022790149\n" ] } ], "source": [ "# Just to keep the tweet IDs with no status found\n", "no_status_tweet_ids = []\n", "\n", "# Start code timer\n", "start = timer()\n", "\n", "# Create and open a tweet_json.txt file\n", "with open('tweet_json.txt', mode='w') as json_file:\n", " \n", " # Iterate over the \"tweet_id\" column from WeRateDogs twitter archive \"df_archive_clean\"\n", " for tweet_id in np.nditer(df_archive_clean.tweet_id):\n", " \n", " # Try...except in case some tweets IDs do not lead to any status\n", " try:\n", " # Get the object associated with tweet_id\n", " a_tweet = api.get_status(tweet_id, tweet_mode='extended')\n", " # Get the tweet JSON info from the object, and write it into a file\n", " json_file.write(json.dumps(a_tweet._json)+'\\n')\n", " except tweepy.TweepError as e:\n", " print(\"Error Tweet_Id: \" + str(tweet_id) + \" : \" + str(e))\n", " # Keep the Ids with no status found\n", " no_status_tweet_ids.append(str(tweet_id))\n", " \n", " # Print out the tweet ID after it was queried\n", " print(\"Successfully queried - Tweet ID: \" + str(tweet_id))\n", " \n", "# End code timer\n", "stop = timer()" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Twitter Query and file writing duration: 1430.7260451979819\n" ] } ], "source": [ "# Get the duration for the whole data collection from twitter\n", "print(\"Twitter Query and file writing duration: \" + str(stop - start))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now as `tweet_json.txt` file has been properly created, we can read it and create the associated pandas DataFrame with at a minimum \"tweet ID\", \"retweet count\", and \"favorite count\" as columns." ] }, { "cell_type": "code", "execution_count": 791, "metadata": {}, "outputs": [], "source": [ "# A dictionary to build and convert to a DataFrame later\n", "df_tweet_json = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've got a basic understanding of the tweet json object from here : https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object.html. So I choose to collect \"created_at\", \"id\", \"retweet_count\", \"favorite_count\" and \"full_text\"." ] }, { "cell_type": "code", "execution_count": 792, "metadata": {}, "outputs": [], "source": [ "# Load \"tweet_json.txt\"\n", "with open('tweet_json.txt') as tweet_json:\n", " \n", " # Get each line and load it as a json object\n", " for a_line in tweet_json:\n", " line_data_json = json.loads(a_line)\n", " \n", " # Get the tweet ID\n", " tweet_id = line_data_json['id']\n", " \n", " # Get the tweet retweet count\n", " retweet_count = line_data_json['retweet_count']\n", " \n", " # Get the tweet favorites count\n", " favorite_count = line_data_json['favorite_count']\n", " \n", " # Get the tweet creation date\n", " creation_date = line_data_json['created_at']\n", " \n", " # Get the tweet full text\n", " tweet_full_text = line_data_json['full_text']\n", " \n", " \n", " # Add the extracted data to the dictionary\n", " df_tweet_json.append({'tweet_id': tweet_id,\n", " 'created_at': creation_date,\n", " 'retweet_count': retweet_count,\n", " 'favorite_count': favorite_count,\n", " 'tweet_full_text': tweet_full_text})" ] }, { "cell_type": "code", "execution_count": 793, "metadata": {}, "outputs": [], "source": [ "# Convert the dictionary to a DataFrame\n", "df_twitter = pd.DataFrame(df_tweet_json, columns = ['tweet_id', 'created_at', 'retweet_count', 'favorite_count', 'tweet_full_text'])" ] }, { "cell_type": "code", "execution_count": 794, "metadata": {}, "outputs": [], "source": [ "# Create a copy to use for assessing and cleaning\n", "df_twitter_clean = df_twitter.copy()" ] }, { "cell_type": "code", "execution_count": 795, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>created_at</th>\n", " <th>retweet_count</th>\n", " <th>favorite_count</th>\n", " <th>tweet_full_text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>892420643555336193</td>\n", " <td>Tue Aug 01 16:23:56 +0000 2017</td>\n", " <td>8204</td>\n", " <td>37636</td>\n", " <td>This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>892177421306343426</td>\n", " <td>Tue Aug 01 00:17:27 +0000 2017</td>\n", " <td>6071</td>\n", " <td>32337</td>\n", " <td>This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>891815181378084864</td>\n", " <td>Mon Jul 31 00:18:03 +0000 2017</td>\n", " <td>4011</td>\n", " <td>24363</td>\n", " <td>This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>891689557279858688</td>\n", " <td>Sun Jul 30 15:58:51 +0000 2017</td>\n", " <td>8366</td>\n", " <td>40959</td>\n", " <td>This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>891327558926688256</td>\n", " <td>Sat Jul 29 16:00:24 +0000 2017</td>\n", " <td>9063</td>\n", " <td>39161</td>\n", " <td>This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id created_at retweet_count \\\n", "0 892420643555336193 Tue Aug 01 16:23:56 +0000 2017 8204 \n", "1 892177421306343426 Tue Aug 01 00:17:27 +0000 2017 6071 \n", "2 891815181378084864 Mon Jul 31 00:18:03 +0000 2017 4011 \n", "3 891689557279858688 Sun Jul 30 15:58:51 +0000 2017 8366 \n", "4 891327558926688256 Sat Jul 29 16:00:24 +0000 2017 9063 \n", "\n", " favorite_count \\\n", "0 37636 \n", "1 32337 \n", "2 24363 \n", "3 40959 \n", "4 39161 \n", "\n", " tweet_full_text \n", "0 This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU \n", "1 This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV \n", "2 This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB \n", "3 This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ \n", "4 This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f " ] }, "execution_count": 795, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the dataframe\n", "df_twitter_clean.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, We've got three DataFrames for the next assessment and cleaning activities: \n", "* `df_archive_clean` : WeRateDogs twitter enhanced archive. We know that the ratings are probably not all correct, same for the dog names and dog stages.\n", "* `df_image_clean` : the tweets images prediction, from `image-predictions.tsv` which we gathered from an URL.\n", "* `df_twitter_clean`: additional information - retweet counts, favorite counts - gathered from twitter because missing from `df_archive_clean`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='assessing'></a>\n", "### Assessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We focus first on missing data, completness, format as quality issues. Then we examine tidiness. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='weratedogstwitter'></a>\n", "#### 1. The WeRateDogs twitter archive" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are the information we already know about `df_archive_clean` : the ratings are probably not all correct, same for the dog names and dog stages. So we'll need to assess those columns." ] }, { "cell_type": "code", "execution_count": 796, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>in_reply_to_status_id</th>\n", " <th>in_reply_to_user_id</th>\n", " <th>timestamp</th>\n", " <th>source</th>\n", " <th>text</th>\n", " <th>retweeted_status_id</th>\n", " <th>retweeted_status_user_id</th>\n", " <th>retweeted_status_timestamp</th>\n", " <th>expanded_urls</th>\n", " <th>rating_numerator</th>\n", " <th>rating_denominator</th>\n", " <th>name</th>\n", " <th>doggo</th>\n", " <th>floofer</th>\n", " <th>pupper</th>\n", " <th>puppo</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>2147</th>\n", " <td>669753178989142016</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2015-11-26 05:42:55 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>Meet Chester. He just ate a lot and now he can't move. 10/10 that's going to be me in about 17 hours https://t.co/63jh1tYZa5</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/669753178989142016/photo/1</td>\n", " <td>10</td>\n", " <td>10</td>\n", " <td>Chester</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>603</th>\n", " <td>798628517273620480</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2016-11-15 20:47:30 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>RT @dog_rates: This a Norwegian Pewterschmidt named Tickles. Ears for days. 12/10 I care deeply for Tickles https://t.co/0aDF62KVP7</td>\n", " <td>6.675094e+17</td>\n", " <td>4.196984e+09</td>\n", " <td>2015-11-20 01:06:48 +0000</td>\n", " <td>https://twitter.com/dog_rates/status/667509364010450944/photo/1,https://twitter.com/dog_rates/status/667509364010450944/photo/1</td>\n", " <td>12</td>\n", " <td>10</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>2308</th>\n", " <td>666817836334096384</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2015-11-18 03:18:55 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Jeph. He is a German Boston Shuttlecock. Enjoys couch. Lost body during French Revolution. True hero 9/10 https://t.co/8whlkYw3mO</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/666817836334096384/photo/1</td>\n", " <td>9</td>\n", " <td>10</td>\n", " <td>Jeph</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>468</th>\n", " <td>817056546584727552</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2017-01-05 17:13:55 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Chloe. She fell asleep at the wheel. Absolute menace on the roadways. Sneaky tongue slip tho. 11/10 https://t.co/r6SLVN2VUH</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/817056546584727552/photo/1</td>\n", " <td>11</td>\n", " <td>10</td>\n", " <td>Chloe</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " <tr>\n", " <th>726</th>\n", " <td>782598640137187329</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>2016-10-02 15:10:30 +0000</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Timmy. He's quite large. According to a trusted source it's actually a dog wearing a dog suit. 11/10 https://t.co/BIUchFwHqn</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>https://twitter.com/dog_rates/status/782598640137187329/photo/1</td>\n", " <td>11</td>\n", " <td>10</td>\n", " <td>Timmy</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>None</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id in_reply_to_status_id in_reply_to_user_id \\\n", "2147 669753178989142016 NaN NaN \n", "603 798628517273620480 NaN NaN \n", "2308 666817836334096384 NaN NaN \n", "468 817056546584727552 NaN NaN \n", "726 782598640137187329 NaN NaN \n", "\n", " timestamp \\\n", "2147 2015-11-26 05:42:55 +0000 \n", "603 2016-11-15 20:47:30 +0000 \n", "2308 2015-11-18 03:18:55 +0000 \n", "468 2017-01-05 17:13:55 +0000 \n", "726 2016-10-02 15:10:30 +0000 \n", "\n", " source \\\n", "2147 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "603 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "2308 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "468 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "726 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "\n", " text \\\n", "2147 Meet Chester. He just ate a lot and now he can't move. 10/10 that's going to be me in about 17 hours https://t.co/63jh1tYZa5 \n", "603 RT @dog_rates: This a Norwegian Pewterschmidt named Tickles. Ears for days. 12/10 I care deeply for Tickles https://t.co/0aDF62KVP7 \n", "2308 This is Jeph. He is a German Boston Shuttlecock. Enjoys couch. Lost body during French Revolution. True hero 9/10 https://t.co/8whlkYw3mO \n", "468 This is Chloe. She fell asleep at the wheel. Absolute menace on the roadways. Sneaky tongue slip tho. 11/10 https://t.co/r6SLVN2VUH \n", "726 This is Timmy. He's quite large. According to a trusted source it's actually a dog wearing a dog suit. 11/10 https://t.co/BIUchFwHqn \n", "\n", " retweeted_status_id retweeted_status_user_id \\\n", "2147 NaN NaN \n", "603 6.675094e+17 4.196984e+09 \n", "2308 NaN NaN \n", "468 NaN NaN \n", "726 NaN NaN \n", "\n", " retweeted_status_timestamp \\\n", "2147 NaN \n", "603 2015-11-20 01:06:48 +0000 \n", "2308 NaN \n", "468 NaN \n", "726 NaN \n", "\n", " expanded_urls \\\n", "2147 https://twitter.com/dog_rates/status/669753178989142016/photo/1 \n", "603 https://twitter.com/dog_rates/status/667509364010450944/photo/1,https://twitter.com/dog_rates/status/667509364010450944/photo/1 \n", "2308 https://twitter.com/dog_rates/status/666817836334096384/photo/1 \n", "468 https://twitter.com/dog_rates/status/817056546584727552/photo/1 \n", "726 https://twitter.com/dog_rates/status/782598640137187329/photo/1 \n", "\n", " rating_numerator rating_denominator name doggo floofer pupper puppo \n", "2147 10 10 Chester None None None None \n", "603 12 10 None None None None None \n", "2308 9 10 Jeph None None None None \n", "468 11 10 Chloe None None None None \n", "726 11 10 Timmy None None None None " ] }, "execution_count": 796, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the dataset\n", "df_archive_clean.sample(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Elements from a first visual observation:\n", "* \"source\" column contains html tags. We do not consider this as an issue regarding the analysis we plan to conduct.\n", "* \"expanded_urls\" contains some duplicated values. " ] }, { "cell_type": "code", "execution_count": 797, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2356, 17)" ] }, "execution_count": 797, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the dataset size\n", "df_archive_clean.shape" ] }, { "cell_type": "code", "execution_count": 798, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 798, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have duplicates ?\n", "sum(df_archive_clean.duplicated())" ] }, { "cell_type": "code", "execution_count": 799, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "tweet_id 0 \n", "in_reply_to_status_id 2278\n", "in_reply_to_user_id 2278\n", "timestamp 0 \n", "source 0 \n", "text 0 \n", "retweeted_status_id 2175\n", "retweeted_status_user_id 2175\n", "retweeted_status_timestamp 2175\n", "expanded_urls 59 \n", "rating_numerator 0 \n", "rating_denominator 0 \n", "name 0 \n", "doggo 0 \n", "floofer 0 \n", "pupper 0 \n", "puppo 0 \n", "dtype: int64" ] }, "execution_count": 799, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# What about missing data ?\n", "df_archive_clean.isnull().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Basically, the rows with data in the \"retweeted_status\" columns are the ones related to a retweet. As not having retweet is a prerequisite, I will delete all the rows with values in the \"retweeted_status*\" columns. I will do the same for the \"reply_to\" columns. Following to that, I will delete those columns because those will not be useful anymore." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 1 : The WeRateDgos twitter archive enhanced contains retweets, which could not be part or our study " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe 59 missing expanded_urls. \n", "#### Quality Issue 2 : The WeRateDgos twitter archive enhanced has 59 missing value from the \"expanded_urls\" column" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's check the unique values for some columns, the ones we are most likely to use further." ] }, { "cell_type": "code", "execution_count": 800, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "array([ 13, 12, 14, 5, 17, 11, 10, 420, 666, 6, 15,\n", " 182, 960, 0, 75, 7, 84, 9, 24, 8, 1, 27,\n", " 3, 4, 165, 1776, 204, 50, 99, 80, 45, 60, 44,\n", " 143, 121, 20, 26, 2, 144, 88])" ] }, "execution_count": 800, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the unique values for rating numerator, as we knew we might have issues there\n", "df_archive_clean.rating_numerator.unique()" ] }, { "cell_type": "code", "execution_count": 801, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>rating_numerator</th>\n", " <th>rating_denominator</th>\n", " <th>text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>315</th>\n", " <td>0</td>\n", " <td>10</td>\n", " <td>When you're so blinded by your systematic plagiarism that you forget what day it is. 0/10 https://t.co/YbEJPkg4Ag</td>\n", " </tr>\n", " <tr>\n", " <th>1016</th>\n", " <td>0</td>\n", " <td>10</td>\n", " <td>PUPDATE: can't see any. Even if I could, I couldn't reach them to pet. 0/10 much disappointment https://t.co/c7WXaB2nqX</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " rating_numerator rating_denominator \\\n", "315 0 10 \n", "1016 0 10 \n", "\n", " text \n", "315 When you're so blinded by your systematic plagiarism that you forget what day it is. 0/10 https://t.co/YbEJPkg4Ag \n", "1016 PUPDATE: can't see any. Even if I could, I couldn't reach them to pet. 0/10 much disappointment https://t.co/c7WXaB2nqX " ] }, "execution_count": 801, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# is the 0 value a normal situation ?\n", "df_archive_clean.query('rating_numerator == 0')[['rating_numerator', 'rating_denominator', 'text']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've got some very high values ! let's check the context to see if this situation really makes sense." ] }, { "cell_type": "code", "execution_count": 802, "metadata": {}, "outputs": [], "source": [ "# Set the column width to max, so we can easily view all the cells text data\n", "pd.set_option('display.max_colwidth', -1)" ] }, { "cell_type": "code", "execution_count": 803, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>rating_numerator</th>\n", " <th>rating_denominator</th>\n", " <th>text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>313</th>\n", " <td>960</td>\n", " <td>0</td>\n", " <td>@jonnysun @Lin_Manuel ok jomny I know you're excited but 960/00 isn't a valid rating, 13/10 is tho</td>\n", " </tr>\n", " <tr>\n", " <th>342</th>\n", " <td>11</td>\n", " <td>15</td>\n", " <td>@docmisterio account started on 11/15/15</td>\n", " </tr>\n", " <tr>\n", " <th>433</th>\n", " <td>84</td>\n", " <td>70</td>\n", " <td>The floofs have been released I repeat the floofs have been released. 84/70 https://t.co/NIYC820tmd</td>\n", " </tr>\n", " <tr>\n", " <th>516</th>\n", " <td>24</td>\n", " <td>7</td>\n", " <td>Meet Sam. She smiles 24/7 &amp; secretly aspires to be a reindeer. \\nKeep Sam smiling by clicking and sharing this link:\\nhttps://t.co/98tB8y7y7t https://t.co/LouL5vdvxx</td>\n", " </tr>\n", " <tr>\n", " <th>784</th>\n", " <td>9</td>\n", " <td>11</td>\n", " <td>RT @dog_rates: After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https:/…</td>\n", " </tr>\n", " <tr>\n", " <th>902</th>\n", " <td>165</td>\n", " <td>150</td>\n", " <td>Why does this never happen at my front door... 165/150 https://t.co/HmwrdfEfUE</td>\n", " </tr>\n", " <tr>\n", " <th>1068</th>\n", " <td>9</td>\n", " <td>11</td>\n", " <td>After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https://t.co/XAVDNDaVgQ</td>\n", " </tr>\n", " <tr>\n", " <th>1120</th>\n", " <td>204</td>\n", " <td>170</td>\n", " <td>Say hello to this unbelievably well behaved squad of doggos. 204/170 would try to pet all at once https://t.co/yGQI3He3xv</td>\n", " </tr>\n", " <tr>\n", " <th>1165</th>\n", " <td>4</td>\n", " <td>20</td>\n", " <td>Happy 4/20 from the squad! 13/10 for all https://t.co/eV1diwds8a</td>\n", " </tr>\n", " <tr>\n", " <th>1202</th>\n", " <td>50</td>\n", " <td>50</td>\n", " <td>This is Bluebert. He just saw that both #FinalFur match ups are split 50/50. Amazed af. 11/10 https://t.co/Kky1DPG4iq</td>\n", " </tr>\n", " <tr>\n", " <th>1228</th>\n", " <td>99</td>\n", " <td>90</td>\n", " <td>Happy Saturday here's 9 puppers on a bench. 99/90 good work everybody https://t.co/mpvaVxKmc1</td>\n", " </tr>\n", " <tr>\n", " <th>1254</th>\n", " <td>80</td>\n", " <td>80</td>\n", " <td>Here's a brigade of puppers. All look very prepared for whatever happens next. 80/80 https://t.co/0eb7R1Om12</td>\n", " </tr>\n", " <tr>\n", " <th>1274</th>\n", " <td>45</td>\n", " <td>50</td>\n", " <td>From left to right:\\nCletus, Jerome, Alejandro, Burp, &amp; Titson\\nNone know where camera is. 45/50 would hug all at once https://t.co/sedre1ivTK</td>\n", " </tr>\n", " <tr>\n", " <th>1351</th>\n", " <td>60</td>\n", " <td>50</td>\n", " <td>Here is a whole flock of puppers. 60/50 I'll take the lot https://t.co/9dpcw6MdWa</td>\n", " </tr>\n", " <tr>\n", " <th>1433</th>\n", " <td>44</td>\n", " <td>40</td>\n", " <td>Happy Wednesday here's a bucket of pups. 44/40 would pet all at once https://t.co/HppvrYuamZ</td>\n", " </tr>\n", " <tr>\n", " <th>1598</th>\n", " <td>4</td>\n", " <td>20</td>\n", " <td>Yes I do realize a rating of 4/20 would've been fitting. However, it would be unjust to give these cooperative pups that low of a rating</td>\n", " </tr>\n", " <tr>\n", " <th>1634</th>\n", " <td>143</td>\n", " <td>130</td>\n", " <td>Two sneaky puppers were not initially seen, moving the rating to 143/130. Please forgive us. Thank you https://t.co/kRK51Y5ac3</td>\n", " </tr>\n", " <tr>\n", " <th>1635</th>\n", " <td>121</td>\n", " <td>110</td>\n", " <td>Someone help the girl is being mugged. Several are distracting her while two steal her shoes. Clever puppers 121/110 https://t.co/1zfnTJLt55</td>\n", " </tr>\n", " <tr>\n", " <th>1662</th>\n", " <td>7</td>\n", " <td>11</td>\n", " <td>This is Darrel. He just robbed a 7/11 and is in a high speed police chase. Was just spotted by the helicopter 10/10 https://t.co/7EsP8LmSp5</td>\n", " </tr>\n", " <tr>\n", " <th>1663</th>\n", " <td>20</td>\n", " <td>16</td>\n", " <td>I'm aware that I could've said 20/16, but here at WeRateDogs we are very professional. An inconsistent rating scale is simply irresponsible</td>\n", " </tr>\n", " <tr>\n", " <th>1779</th>\n", " <td>144</td>\n", " <td>120</td>\n", " <td>IT'S PUPPERGEDDON. Total of 144/120 ...I think https://t.co/ZanVtAtvIq</td>\n", " </tr>\n", " <tr>\n", " <th>1843</th>\n", " <td>88</td>\n", " <td>80</td>\n", " <td>Here we have an entire platoon of puppers. Total score: 88/80 would pet all at once https://t.co/y93p6FLvVw</td>\n", " </tr>\n", " <tr>\n", " <th>2335</th>\n", " <td>1</td>\n", " <td>2</td>\n", " <td>This is an Albanian 3 1/2 legged Episcopalian. Loves well-polished hardwood flooring. Penis on the collar. 9/10 https://t.co/d9NcXFKwLv</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " rating_numerator rating_denominator \\\n", "313 960 0 \n", "342 11 15 \n", "433 84 70 \n", "516 24 7 \n", "784 9 11 \n", "902 165 150 \n", "1068 9 11 \n", "1120 204 170 \n", "1165 4 20 \n", "1202 50 50 \n", "1228 99 90 \n", "1254 80 80 \n", "1274 45 50 \n", "1351 60 50 \n", "1433 44 40 \n", "1598 4 20 \n", "1634 143 130 \n", "1635 121 110 \n", "1662 7 11 \n", "1663 20 16 \n", "1779 144 120 \n", "1843 88 80 \n", "2335 1 2 \n", "\n", " text \n", "313 @jonnysun @Lin_Manuel ok jomny I know you're excited but 960/00 isn't a valid rating, 13/10 is tho \n", "342 @docmisterio account started on 11/15/15 \n", "433 The floofs have been released I repeat the floofs have been released. 84/70 https://t.co/NIYC820tmd \n", "516 Meet Sam. She smiles 24/7 & secretly aspires to be a reindeer. \\nKeep Sam smiling by clicking and sharing this link:\\nhttps://t.co/98tB8y7y7t https://t.co/LouL5vdvxx \n", "784 RT @dog_rates: After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https:/… \n", "902 Why does this never happen at my front door... 165/150 https://t.co/HmwrdfEfUE \n", "1068 After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https://t.co/XAVDNDaVgQ \n", "1120 Say hello to this unbelievably well behaved squad of doggos. 204/170 would try to pet all at once https://t.co/yGQI3He3xv \n", "1165 Happy 4/20 from the squad! 13/10 for all https://t.co/eV1diwds8a \n", "1202 This is Bluebert. He just saw that both #FinalFur match ups are split 50/50. Amazed af. 11/10 https://t.co/Kky1DPG4iq \n", "1228 Happy Saturday here's 9 puppers on a bench. 99/90 good work everybody https://t.co/mpvaVxKmc1 \n", "1254 Here's a brigade of puppers. All look very prepared for whatever happens next. 80/80 https://t.co/0eb7R1Om12 \n", "1274 From left to right:\\nCletus, Jerome, Alejandro, Burp, & Titson\\nNone know where camera is. 45/50 would hug all at once https://t.co/sedre1ivTK \n", "1351 Here is a whole flock of puppers. 60/50 I'll take the lot https://t.co/9dpcw6MdWa \n", "1433 Happy Wednesday here's a bucket of pups. 44/40 would pet all at once https://t.co/HppvrYuamZ \n", "1598 Yes I do realize a rating of 4/20 would've been fitting. However, it would be unjust to give these cooperative pups that low of a rating \n", "1634 Two sneaky puppers were not initially seen, moving the rating to 143/130. Please forgive us. Thank you https://t.co/kRK51Y5ac3 \n", "1635 Someone help the girl is being mugged. Several are distracting her while two steal her shoes. Clever puppers 121/110 https://t.co/1zfnTJLt55 \n", "1662 This is Darrel. He just robbed a 7/11 and is in a high speed police chase. Was just spotted by the helicopter 10/10 https://t.co/7EsP8LmSp5 \n", "1663 I'm aware that I could've said 20/16, but here at WeRateDogs we are very professional. An inconsistent rating scale is simply irresponsible \n", "1779 IT'S PUPPERGEDDON. Total of 144/120 ...I think https://t.co/ZanVtAtvIq \n", "1843 Here we have an entire platoon of puppers. Total score: 88/80 would pet all at once https://t.co/y93p6FLvVw \n", "2335 This is an Albanian 3 1/2 legged Episcopalian. Loves well-polished hardwood flooring. Penis on the collar. 9/10 https://t.co/d9NcXFKwLv " ] }, "execution_count": 803, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the cases with a suspicious denominator so we can observe them visually\n", "df_denominator_issues = df_archive_clean.query('rating_denominator != 10')[['rating_numerator', 'rating_denominator', 'text']]\n", "df_denominator_issues" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe :\n", "* One case where the extracted information - 24/7 - is not a rating \n", "* Normal situations, as previously observed : the denominator is high but inline with the numerator value\n", "* Other situations where the first \"rating like\" values encountered have been extracted instead of the second ones. For example we see a line where 50/50 have been extracted instead of 11/10, which is the real rating within the same text message. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 4 : WeRateDgos twitter archive - in some cases, the relevant rating information, consequently rating_numerator and rating_denominator, have not been extracted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We continue to check unique values for some columns. \n", "Visually, we saw \"none\" as dog names. Let's dig in that." ] }, { "cell_type": "code", "execution_count": 804, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>name</th>\n", " <th>text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>1928</th>\n", " <td>None</td>\n", " <td>Herd of wild dogs here. Not sure what they're trying to do. No real goals in life. 3/10 find your purpose puppers https://t.co/t5ih0VrK02</td>\n", " </tr>\n", " <tr>\n", " <th>2013</th>\n", " <td>None</td>\n", " <td>Exotic underwater dog here. Very shy. Wont return tennis balls I toss him. Never been petted. 5/10 I bet he's soft https://t.co/WH7Nzc5IBA</td>\n", " </tr>\n", " <tr>\n", " <th>1783</th>\n", " <td>None</td>\n", " <td>Endangered triangular pup here. Could be a wizard. Caught mid-laugh. No legs. Just fluff. Probably a wizard. 9/10 https://t.co/GFVIHIod0Z</td>\n", " </tr>\n", " <tr>\n", " <th>2067</th>\n", " <td>None</td>\n", " <td>Neat pup here. Enjoys lettuce. Long af ears. Short lil legs. Hops surprisingly high for dog. 9/10 still very petable https://t.co/HYR611wiA4</td>\n", " </tr>\n", " <tr>\n", " <th>494</th>\n", " <td>None</td>\n", " <td>We only rate dogs. Please don't send in other things like this very good Christmas tree. Thank you... 13/10 https://t.co/rvSANEsQZJ</td>\n", " </tr>\n", " <tr>\n", " <th>1408</th>\n", " <td>None</td>\n", " <td>ERMAHGERD 12/10 please enjoy https://t.co/7WrAWKdBac</td>\n", " </tr>\n", " <tr>\n", " <th>212</th>\n", " <td>None</td>\n", " <td>RT @eddie_coe98: Thanks @dog_rates completed my laptop. 10/10 would buy again https://t.co/bO0rThDlXI</td>\n", " </tr>\n", " <tr>\n", " <th>179</th>\n", " <td>None</td>\n", " <td>@Marc_IRL pixelated af 12/10</td>\n", " </tr>\n", " <tr>\n", " <th>2131</th>\n", " <td>None</td>\n", " <td>\"Hi yes this is dog. I can't help with that s- sir please... the manager isn't in right n- well that was rude\"\\n10/10 https://t.co/DuQXATW27f</td>\n", " </tr>\n", " <tr>\n", " <th>1935</th>\n", " <td>None</td>\n", " <td>This pup is sad bc he didn't get to be the toy car. Also he has shitty money management skills. 10/10 still cute tho https://t.co/PiSXXZjDSJ</td>\n", " </tr>\n", " <tr>\n", " <th>268</th>\n", " <td>None</td>\n", " <td>Here we have some incredible doggos for #K9VeteransDay. All brave as h*ck. Salute your dog in solidarity. 14/10 for all https://t.co/SVNMdFqKDL</td>\n", " </tr>\n", " <tr>\n", " <th>1901</th>\n", " <td>None</td>\n", " <td>Two gorgeous dogs here. Little waddling dog is a rebel. Refuses to look at camera. Must be a preteen. 5/10 &amp; 8/10 https://t.co/YPfw7oahbD</td>\n", " </tr>\n", " <tr>\n", " <th>189</th>\n", " <td>None</td>\n", " <td>@s8n You tried very hard to portray this good boy as not so good, but you have ultimately failed. His goodness shines through. 666/10</td>\n", " </tr>\n", " <tr>\n", " <th>1068</th>\n", " <td>None</td>\n", " <td>After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https://t.co/XAVDNDaVgQ</td>\n", " </tr>\n", " <tr>\n", " <th>493</th>\n", " <td>None</td>\n", " <td>Here's a doggo who has concluded that Christmas is entirely too bright. Requests you tone it down a notch. 11/10 https://t.co/cD967DjnIn</td>\n", " </tr>\n", " <tr>\n", " <th>2089</th>\n", " <td>None</td>\n", " <td>Two obedient dogs here. Left one has extra leg sticking out of its back. They each get 9/10. Would pet both at once https://t.co/RGcNPsmAfY</td>\n", " </tr>\n", " <tr>\n", " <th>1532</th>\n", " <td>None</td>\n", " <td>\"I'm the only one that ever does anything in this household\" 10/10 https://t.co/V8HcVIh4jt</td>\n", " </tr>\n", " <tr>\n", " <th>1248</th>\n", " <td>None</td>\n", " <td>\"Please, no puparazzi\" 11/10 https://t.co/nJIXSPfedK</td>\n", " </tr>\n", " <tr>\n", " <th>1234</th>\n", " <td>None</td>\n", " <td>Please don't send in any more polar bears. We only rate dogs. Thank you... 10/10 https://t.co/83RGhdIQz2</td>\n", " </tr>\n", " <tr>\n", " <th>568</th>\n", " <td>None</td>\n", " <td>RT @ChinoChinako: They're good products, Brent\\n\\nMug holds drinks; hoodie is comfy af. 13/10 \\n\\nPuppy Aika h*cking agrees. @dog_rates https:/…</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " name \\\n", "1928 None \n", "2013 None \n", "1783 None \n", "2067 None \n", "494 None \n", "1408 None \n", "212 None \n", "179 None \n", "2131 None \n", "1935 None \n", "268 None \n", "1901 None \n", "189 None \n", "1068 None \n", "493 None \n", "2089 None \n", "1532 None \n", "1248 None \n", "1234 None \n", "568 None \n", "\n", " text \n", "1928 Herd of wild dogs here. Not sure what they're trying to do. No real goals in life. 3/10 find your purpose puppers https://t.co/t5ih0VrK02 \n", "2013 Exotic underwater dog here. Very shy. Wont return tennis balls I toss him. Never been petted. 5/10 I bet he's soft https://t.co/WH7Nzc5IBA \n", "1783 Endangered triangular pup here. Could be a wizard. Caught mid-laugh. No legs. Just fluff. Probably a wizard. 9/10 https://t.co/GFVIHIod0Z \n", "2067 Neat pup here. Enjoys lettuce. Long af ears. Short lil legs. Hops surprisingly high for dog. 9/10 still very petable https://t.co/HYR611wiA4 \n", "494 We only rate dogs. Please don't send in other things like this very good Christmas tree. Thank you... 13/10 https://t.co/rvSANEsQZJ \n", "1408 ERMAHGERD 12/10 please enjoy https://t.co/7WrAWKdBac \n", "212 RT @eddie_coe98: Thanks @dog_rates completed my laptop. 10/10 would buy again https://t.co/bO0rThDlXI \n", "179 @Marc_IRL pixelated af 12/10 \n", "2131 \"Hi yes this is dog. I can't help with that s- sir please... the manager isn't in right n- well that was rude\"\\n10/10 https://t.co/DuQXATW27f \n", "1935 This pup is sad bc he didn't get to be the toy car. Also he has shitty money management skills. 10/10 still cute tho https://t.co/PiSXXZjDSJ \n", "268 Here we have some incredible doggos for #K9VeteransDay. All brave as h*ck. Salute your dog in solidarity. 14/10 for all https://t.co/SVNMdFqKDL \n", "1901 Two gorgeous dogs here. Little waddling dog is a rebel. Refuses to look at camera. Must be a preteen. 5/10 & 8/10 https://t.co/YPfw7oahbD \n", "189 @s8n You tried very hard to portray this good boy as not so good, but you have ultimately failed. His goodness shines through. 666/10 \n", "1068 After so many requests, this is Bretagne. She was the last surviving 9/11 search dog, and our second ever 14/10. RIP https://t.co/XAVDNDaVgQ \n", "493 Here's a doggo who has concluded that Christmas is entirely too bright. Requests you tone it down a notch. 11/10 https://t.co/cD967DjnIn \n", "2089 Two obedient dogs here. Left one has extra leg sticking out of its back. They each get 9/10. Would pet both at once https://t.co/RGcNPsmAfY \n", "1532 \"I'm the only one that ever does anything in this household\" 10/10 https://t.co/V8HcVIh4jt \n", "1248 \"Please, no puparazzi\" 11/10 https://t.co/nJIXSPfedK \n", "1234 Please don't send in any more polar bears. We only rate dogs. Thank you... 10/10 https://t.co/83RGhdIQz2 \n", "568 RT @ChinoChinako: They're good products, Brent\\n\\nMug holds drinks; hoodie is comfy af. 13/10 \\n\\nPuppy Aika h*cking agrees. @dog_rates https:/… " ] }, "execution_count": 804, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the dog names, as we might have issues there. We get 20 rows for a visual observation\n", "df_name_issues = df_archive_clean.query('name == \"None\"')[['name', 'text']]\n", "df_name_issues.sample(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that sometimes we have names in the text, so we still have the possibility to extract them. For example, at index 72, we could have \"Martha\", at index 2237, we have \"Oliver\". \n", "The \"None\" here as a string could be confusing. We do not consider this as an issue. Basically we just want to be able to distinguish when we do have a name, from when we don't. \n", "#### Quality Issue 5 : WeRateDgos twitter archive - We have \"None\" as name even if, sometimes, there is an available name in the text. So few names are missing and could be retrieved." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe \"None\" values in the dog stages \"doggo, floofer, pupper, puppo\" columns." ] }, { "cell_type": "code", "execution_count": 805, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1976, 5)" ] }, "execution_count": 805, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get all the rows where the dog stage has not been identified, meaning set to \"None\"\n", "df_dogtionary_issue = df_archive_clean.query('doggo == \"None\" and floofer == \"None\" and pupper == \"None\" and puppo == \"None\"')[['text', 'doggo', 'floofer', 'pupper', 'puppo']]\n", "df_dogtionary_issue.shape" ] }, { "cell_type": "code", "execution_count": 806, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 1969\n", "True 7 \n", "Name: text, dtype: int64" ] }, "execution_count": 806, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have any puppo in the associated text content ? meaning not identified ?\n", "df_dogtionary_issue['text'].apply(lambda x: ('puppo' in x)).value_counts()" ] }, { "cell_type": "code", "execution_count": 807, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 1966\n", "True 10 \n", "Name: text, dtype: int64" ] }, "execution_count": 807, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have any doggo in the associated text content ? meaning not identified ?\n", "df_dogtionary_issue['text'].apply(lambda x: ('doggo' in x)).value_counts()" ] }, { "cell_type": "code", "execution_count": 808, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 1976\n", "Name: text, dtype: int64" ] }, "execution_count": 808, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have any floofer in the associated text content ? meaning not identified ?\n", "df_dogtionary_issue['text'].apply(lambda x: ('floofer' in x)).value_counts()" ] }, { "cell_type": "code", "execution_count": 809, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 1952\n", "True 24 \n", "Name: text, dtype: int64" ] }, "execution_count": 809, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have any pupper in the associated text content ? meaning not identified ?\n", "df_dogtionary_issue['text'].apply(lambda x: ('pupper' in x)).value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a conclusion, we have a quality issue. Clearly we have the possibility to have several dog stages within the same text. So the stage extrated might not be the right one, sometimes. We do not consider this as an issue, because of the potential low number of rows impacted. \n", "#### Quality Issue 6 : WeRateDgos twitter archive - We have missing dog stages, meaning stages not properly extracted. This is the case for \"puppo\", \"doggo\" and \"pupper\"." ] }, { "cell_type": "code", "execution_count": 810, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 1658\n", "True 639 \n", "Name: expanded_urls, dtype: int64" ] }, "execution_count": 810, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the duplicated expanded_urls we observed previously\n", "df_archive_clean['expanded_urls'].str.contains(',').value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 7: WeRateDgos twitter archive - \"expanded_urls\" column contains duplicated urls" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we check the column types. " ] }, { "cell_type": "code", "execution_count": 811, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "tweet_id int64 \n", "in_reply_to_status_id float64\n", "in_reply_to_user_id float64\n", "timestamp object \n", "source object \n", "text object \n", "retweeted_status_id float64\n", "retweeted_status_user_id float64\n", "retweeted_status_timestamp object \n", "expanded_urls object \n", "rating_numerator int64 \n", "rating_denominator int64 \n", "name object \n", "doggo object \n", "floofer object \n", "pupper object \n", "puppo object \n", "dtype: object" ] }, "execution_count": 811, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Examine the columns type\n", "df_archive_clean.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the previous investigations, we already know that \"source\", \"text\", \"name\" and dog stages are all string typed." ] }, { "cell_type": "code", "execution_count": 812, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 812, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# So we get more detailed visibility on timestamp. \n", "type(df_archive_clean.timestamp[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 8: WeRateDgos twitter archive - timestamp is using string type." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From observation: the dog stages have been spread as differents columns. This is a tidiness issue.\n", "#### Tidiness Issue 1 : WeRateDgos twitter archive - Dog stages have been spread as columns." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='tweetimagepreductions'></a>\n", "#### 2. The tweet image predictions" ] }, { "cell_type": "code", "execution_count": 813, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>jpg_url</th>\n", " <th>img_num</th>\n", " <th>p1</th>\n", " <th>p1_conf</th>\n", " <th>p1_dog</th>\n", " <th>p2</th>\n", " <th>p2_conf</th>\n", " <th>p2_dog</th>\n", " <th>p3</th>\n", " <th>p3_conf</th>\n", " <th>p3_dog</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>666020888022790149</td>\n", " <td>https://pbs.twimg.com/media/CT4udn0WwAA0aMy.jpg</td>\n", " <td>1</td>\n", " <td>Welsh_springer_spaniel</td>\n", " <td>0.465074</td>\n", " <td>True</td>\n", " <td>collie</td>\n", " <td>0.156665</td>\n", " <td>True</td>\n", " <td>Shetland_sheepdog</td>\n", " <td>0.061428</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>666029285002620928</td>\n", " <td>https://pbs.twimg.com/media/CT42GRgUYAA5iDo.jpg</td>\n", " <td>1</td>\n", " <td>redbone</td>\n", " <td>0.506826</td>\n", " <td>True</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.074192</td>\n", " <td>True</td>\n", " <td>Rhodesian_ridgeback</td>\n", " <td>0.072010</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>666033412701032449</td>\n", " <td>https://pbs.twimg.com/media/CT4521TWwAEvMyu.jpg</td>\n", " <td>1</td>\n", " <td>German_shepherd</td>\n", " <td>0.596461</td>\n", " <td>True</td>\n", " <td>malinois</td>\n", " <td>0.138584</td>\n", " <td>True</td>\n", " <td>bloodhound</td>\n", " <td>0.116197</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>666044226329800704</td>\n", " <td>https://pbs.twimg.com/media/CT5Dr8HUEAA-lEu.jpg</td>\n", " <td>1</td>\n", " <td>Rhodesian_ridgeback</td>\n", " <td>0.408143</td>\n", " <td>True</td>\n", " <td>redbone</td>\n", " <td>0.360687</td>\n", " <td>True</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.222752</td>\n", " <td>True</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>666049248165822465</td>\n", " <td>https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg</td>\n", " <td>1</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.560311</td>\n", " <td>True</td>\n", " <td>Rottweiler</td>\n", " <td>0.243682</td>\n", " <td>True</td>\n", " <td>Doberman</td>\n", " <td>0.154629</td>\n", " <td>True</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id jpg_url \\\n", "0 666020888022790149 https://pbs.twimg.com/media/CT4udn0WwAA0aMy.jpg \n", "1 666029285002620928 https://pbs.twimg.com/media/CT42GRgUYAA5iDo.jpg \n", "2 666033412701032449 https://pbs.twimg.com/media/CT4521TWwAEvMyu.jpg \n", "3 666044226329800704 https://pbs.twimg.com/media/CT5Dr8HUEAA-lEu.jpg \n", "4 666049248165822465 https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg \n", "\n", " img_num p1 p1_conf p1_dog p2 \\\n", "0 1 Welsh_springer_spaniel 0.465074 True collie \n", "1 1 redbone 0.506826 True miniature_pinscher \n", "2 1 German_shepherd 0.596461 True malinois \n", "3 1 Rhodesian_ridgeback 0.408143 True redbone \n", "4 1 miniature_pinscher 0.560311 True Rottweiler \n", "\n", " p2_conf p2_dog p3 p3_conf p3_dog \n", "0 0.156665 True Shetland_sheepdog 0.061428 True \n", "1 0.074192 True Rhodesian_ridgeback 0.072010 True \n", "2 0.138584 True bloodhound 0.116197 True \n", "3 0.360687 True miniature_pinscher 0.222752 True \n", "4 0.243682 True Doberman 0.154629 True " ] }, "execution_count": 813, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the dataframe\n", "df_image_clean.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observations: we have several predictions and their confidences columns. A column to inform if the prediction is a dog or not is not necessary assuming that we only need dog's prediction here. \n", "#### Quality issue 11 : Tweets images predictions - predictions and the associated confidences are spread over several columns. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observations: we have tweets informations here also. So tweets informations are spread across several files. This is a tidiness issue.\n", "#### Tidiness Issue 2 : Tweets information spreaded over several files and dataframes. " ] }, { "cell_type": "code", "execution_count": 814, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2075, 12)" ] }, "execution_count": 814, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the dataset size\n", "df_image_clean.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Smaller than the twitter archive dataset. " ] }, { "cell_type": "code", "execution_count": 815, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 815, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the duplicated rows\n", "sum(df_image_clean.duplicated())" ] }, { "cell_type": "code", "execution_count": 816, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tweet_id 0\n", "jpg_url 0\n", "img_num 0\n", "p1 0\n", "p1_conf 0\n", "p1_dog 0\n", "p2 0\n", "p2_conf 0\n", "p2_dog 0\n", "p3 0\n", "p3_conf 0\n", "p3_dog 0\n", "dtype: int64" ] }, "execution_count": 816, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have missing data somewhere ?\n", "df_image_clean.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 817, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tweet_id int64 \n", "jpg_url object \n", "img_num int64 \n", "p1 object \n", "p1_conf float64\n", "p1_dog bool \n", "p2 object \n", "p2_conf float64\n", "p2_dog bool \n", "p3 object \n", "p3_conf float64\n", "p3_dog bool \n", "dtype: object" ] }, "execution_count": 817, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the types\n", "df_image_clean.dtypes" ] }, { "cell_type": "code", "execution_count": 818, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(True 1532\n", " False 543 \n", " Name: p1_dog, dtype: int64, True 1553\n", " False 522 \n", " Name: p2_dog, dtype: int64, True 1553\n", " False 522 \n", " Name: p2_dog, dtype: int64)" ] }, "execution_count": 818, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the distinct values for p1_dog, p2_dog and p3_dog\n", "df_image_clean.p1_dog.value_counts(), df_image_clean.p2_dog.value_counts(), df_image_clean.p2_dog.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 9 : Tweets images predictions - We have rows which are not dogs images predictions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='datafromtwitter'></a>\n", "#### 3. Data retrieved via twitter API" ] }, { "cell_type": "code", "execution_count": 819, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>created_at</th>\n", " <th>retweet_count</th>\n", " <th>favorite_count</th>\n", " <th>tweet_full_text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>892420643555336193</td>\n", " <td>Tue Aug 01 16:23:56 +0000 2017</td>\n", " <td>8204</td>\n", " <td>37636</td>\n", " <td>This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>892177421306343426</td>\n", " <td>Tue Aug 01 00:17:27 +0000 2017</td>\n", " <td>6071</td>\n", " <td>32337</td>\n", " <td>This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>891815181378084864</td>\n", " <td>Mon Jul 31 00:18:03 +0000 2017</td>\n", " <td>4011</td>\n", " <td>24363</td>\n", " <td>This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>891689557279858688</td>\n", " <td>Sun Jul 30 15:58:51 +0000 2017</td>\n", " <td>8366</td>\n", " <td>40959</td>\n", " <td>This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>891327558926688256</td>\n", " <td>Sat Jul 29 16:00:24 +0000 2017</td>\n", " <td>9063</td>\n", " <td>39161</td>\n", " <td>This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id created_at retweet_count \\\n", "0 892420643555336193 Tue Aug 01 16:23:56 +0000 2017 8204 \n", "1 892177421306343426 Tue Aug 01 00:17:27 +0000 2017 6071 \n", "2 891815181378084864 Mon Jul 31 00:18:03 +0000 2017 4011 \n", "3 891689557279858688 Sun Jul 30 15:58:51 +0000 2017 8366 \n", "4 891327558926688256 Sat Jul 29 16:00:24 +0000 2017 9063 \n", "\n", " favorite_count \\\n", "0 37636 \n", "1 32337 \n", "2 24363 \n", "3 40959 \n", "4 39161 \n", "\n", " tweet_full_text \n", "0 This is Phineas. He's a mystical boy. Only ever appears in the hole of a donut. 13/10 https://t.co/MgUWQ76dJU \n", "1 This is Tilly. She's just checking pup on you. Hopes you're doing ok. If not, she's available for pats, snugs, boops, the whole bit. 13/10 https://t.co/0Xxu71qeIV \n", "2 This is Archie. He is a rare Norwegian Pouncing Corgo. Lives in the tall grass. You never know when one may strike. 12/10 https://t.co/wUnZnhtVJB \n", "3 This is Darla. She commenced a snooze mid meal. 13/10 happens to the best of us https://t.co/tD36da7qLQ \n", "4 This is Franklin. He would like you to stop calling him \"cute.\" He is a very fierce shark and should be respected as such. 12/10 #BarkWeek https://t.co/AtUZn91f7f " ] }, "execution_count": 819, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view in the information gathered vi twitter API\n", "df_twitter_clean.head()" ] }, { "cell_type": "code", "execution_count": 820, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2337, 5)" ] }, "execution_count": 820, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the size\n", "df_twitter_clean.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is 19 rows smaller than `df_archive_clean` which is the WeRateDogs twitter archive. " ] }, { "cell_type": "code", "execution_count": 821, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 821, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the duplicated rows\n", "sum(df_twitter_clean.duplicated())" ] }, { "cell_type": "code", "execution_count": 822, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "tweet_id 0\n", "created_at 0\n", "retweet_count 0\n", "favorite_count 0\n", "tweet_full_text 0\n", "dtype: int64" ] }, "execution_count": 822, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have missing data somewhere ? - normally no, considering the way we collected the data\n", "df_twitter_clean.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 823, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tweet_id int64 \n", "created_at object\n", "retweet_count int64 \n", "favorite_count int64 \n", "tweet_full_text object\n", "dtype: object" ] }, "execution_count": 823, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get a view on the types\n", "df_twitter_clean.dtypes" ] }, { "cell_type": "code", "execution_count": 824, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 824, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Inspect the type for created_at which should be timestamp\n", "type(df_twitter_clean.created_at[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality Issue 10 : Data retrieved via twitter API - \"created_at\" column type is not timestamp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='assesssynthesis'></a>\n", "#### 4. Synthesis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Tidiness issues identified :\n", "1. WeRateDgos twitter archive - Dog stages have been spread as columns.\n", "2. Tweets information spreaded over several files and dataframes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quality issues identified :\n", "1. The WeRateDgos twitter archive enhanced contains retweets, which could not be part or our study\n", "2. The WeRateDgos twitter archive enhanced has 59 missing value from the \"expanded_urls\" column\n", "3. REMOVED!\n", "4. WeRateDgos twitter archive - in some cases, the relevant rating information, consequently rating_numerator and rating_denominator, have not been extracted.\n", "5. WeRateDgos twitter archive - We have \"None\" as name even if, sometimes, there is an available name in the text. So few names are missing and could be retrieved.\n", "6. WeRateDgos twitter archive - We have missing dog stages, meaning stages not properly extracted. This is the case for \"puppo\", \"doggo\" and \"pupper\".\n", "7. WeRateDgos twitter archive - \"expanded_urls\" column contains duplicated urls.\n", "8. WeRateDgos twitter archive - timestamp is using string type.\n", "9. Tweets images predictions - We have rows which are not dogs images predictions.\n", "10. Data retrieved via twitter API - \"created_at\" column type is not timestamp.\n", "11. Tweets images predictions - predictions and the associated confidences are spread over several columns." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='cleaning'></a>\n", "### Cleaning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Approach\n", "1. First, we address the missing data and completness issues (Quality issues 1, 2, 4, 5, 6, 9)\n", "2. Then we resolve the tidiness problems we identified.\n", "3. Finally we will correct the quality issues (Quality issues 7, 8, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 1 : The WeRateDgos twitter archive enhanced contains retweets, which could not be part or our study" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We found out previously that we have lines with values in retweeted_status_id, retweeted_status_user_id and retweeted_status_timestamp columns. We checked their meaning from the doc here : https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object.html \n", "The requirements we have are regarding retweets only. For simplification, we make the choice to remove the replys also." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define : we remove the rows with existing values in \"retweeted_status_id\" and \"in_reply_to_status_id\"" ] }, { "cell_type": "code", "execution_count": 825, "metadata": {}, "outputs": [], "source": [ "# Code : It is more easy to keep the rows with NaN. \n", "# Use value != value as an isnan check, \n", "# my source (from internet search) : https://stackoverflow.com/questions/26535563/querying-for-nan-and-other-names-in-pandas\n", "df_archive_clean = df_archive_clean.query('retweeted_status_id != retweeted_status_id and in_reply_to_status_id != in_reply_to_status_id')" ] }, { "cell_type": "code", "execution_count": 826, "metadata": {}, "outputs": [], "source": [ "# Test : the number of null values is the number of rows\n", "assert df_archive_clean.shape[0] == df_archive_clean.retweeted_status_id.isnull().sum()\n", "assert df_archive_clean.shape[0] == df_archive_clean.in_reply_to_status_id.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 827, "metadata": {}, "outputs": [], "source": [ "# Closure : the following columns are not needed anymore : in_reply_to_status_id, in_reply_to_user_id\n", "# retweeted_status_id, retweeted_status_user_id and retweeted_status_timestamp\n", "df_archive_clean.drop('in_reply_to_status_id', axis=1, inplace=True)\n", "df_archive_clean.drop('in_reply_to_user_id', axis=1, inplace=True)\n", "df_archive_clean.drop('retweeted_status_id', axis=1, inplace=True)\n", "df_archive_clean.drop('retweeted_status_user_id', axis=1, inplace=True)\n", "df_archive_clean.drop('retweeted_status_timestamp', axis=1, inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 2 : The WeRateDgos twitter archive enhanced has 59 missing value from the \"expanded_urls\" column" ] }, { "cell_type": "code", "execution_count": 828, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 828, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We still have missing value\n", "df_archive_clean.expanded_urls.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 829, "metadata": {}, "outputs": [], "source": [ "# Define and Code : we drop the rows with missing values\n", "df_archive_clean.dropna(inplace=True)" ] }, { "cell_type": "code", "execution_count": 830, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 830, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : do we still have missing values ?\n", "df_archive_clean.isnull().sum().any()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 4 : WeRateDgos twitter archive - in some cases, the relevant rating information, consequently rating_numerator and rating_denominator, have not been extracted." ] }, { "cell_type": "code", "execution_count": 831, "metadata": {}, "outputs": [], "source": [ "# Define : for all the 'text' cells, we find all the ratings and always take the last one. \n", "# Then we split in 2 parts to get the numerator and the denominator. \n", "\n", "# for the findall syntax: https://docs.python.org/3/library/re.html#re.findall\n", "# for the regex, we use https://regex101.com/ with few examples\n", "\n", "# Code : Extract numerator rating or return nothing, meaning we do not change the current rating\n", "# The new regular expression has been provided by the reviewer\n", "def extract_numerator_rating(row):\n", " match = re.findall('((?:\\d+\\.)?\\d+)\\/(\\d+)', row['text'])\n", " if match:\n", " return float(match[-1][0])\n", " else:\n", " return\n", "\n", "# Extract denominator rating or return nothing, meaning we do not change the current rating\n", "def extract_denominator_rating(row):\n", " match = re.findall('((?:\\d+\\.)?\\d+)\\/(\\d+)', row['text'])\n", " if match:\n", " return float(match[-1][1])\n", " else:\n", " return" ] }, { "cell_type": "code", "execution_count": 832, "metadata": {}, "outputs": [], "source": [ "# Code : apply the previous fonctions to all the rows in the dataframe\n", "# Source : looking for \"function every row pandas\" on a search engine leads to \n", "# http://jonathansoma.com/lede/foundations/classes/pandas%20columns%20and%20functions/apply-a-function-to-every-row-in-a-pandas-dataframe/\n", "df_archive_clean['rating_numerator'] = df_archive_clean.apply(extract_numerator_rating, axis=1)\n", "df_archive_clean['rating_denominator'] = df_archive_clean.apply(extract_denominator_rating, axis=1)" ] }, { "cell_type": "code", "execution_count": 833, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>rating_numerator</th>\n", " <th>rating_denominator</th>\n", " <th>text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>433</th>\n", " <td>820690176645140481</td>\n", " <td>84.0</td>\n", " <td>70.0</td>\n", " <td>The floofs have been released I repeat the floofs have been released. 84/70 https://t.co/NIYC820tmd</td>\n", " </tr>\n", " <tr>\n", " <th>516</th>\n", " <td>810984652412424192</td>\n", " <td>24.0</td>\n", " <td>7.0</td>\n", " <td>Meet Sam. She smiles 24/7 &amp; secretly aspires to be a reindeer. \\nKeep Sam smiling by clicking and sharing this link:\\nhttps://t.co/98tB8y7y7t https://t.co/LouL5vdvxx</td>\n", " </tr>\n", " <tr>\n", " <th>902</th>\n", " <td>758467244762497024</td>\n", " <td>165.0</td>\n", " <td>150.0</td>\n", " <td>Why does this never happen at my front door... 165/150 https://t.co/HmwrdfEfUE</td>\n", " </tr>\n", " <tr>\n", " <th>1120</th>\n", " <td>731156023742988288</td>\n", " <td>204.0</td>\n", " <td>170.0</td>\n", " <td>Say hello to this unbelievably well behaved squad of doggos. 204/170 would try to pet all at once https://t.co/yGQI3He3xv</td>\n", " </tr>\n", " <tr>\n", " <th>1228</th>\n", " <td>713900603437621249</td>\n", " <td>99.0</td>\n", " <td>90.0</td>\n", " <td>Happy Saturday here's 9 puppers on a bench. 99/90 good work everybody https://t.co/mpvaVxKmc1</td>\n", " </tr>\n", " <tr>\n", " <th>1254</th>\n", " <td>710658690886586372</td>\n", " <td>80.0</td>\n", " <td>80.0</td>\n", " <td>Here's a brigade of puppers. All look very prepared for whatever happens next. 80/80 https://t.co/0eb7R1Om12</td>\n", " </tr>\n", " <tr>\n", " <th>1274</th>\n", " <td>709198395643068416</td>\n", " <td>45.0</td>\n", " <td>50.0</td>\n", " <td>From left to right:\\nCletus, Jerome, Alejandro, Burp, &amp; Titson\\nNone know where camera is. 45/50 would hug all at once https://t.co/sedre1ivTK</td>\n", " </tr>\n", " <tr>\n", " <th>1351</th>\n", " <td>704054845121142784</td>\n", " <td>60.0</td>\n", " <td>50.0</td>\n", " <td>Here is a whole flock of puppers. 60/50 I'll take the lot https://t.co/9dpcw6MdWa</td>\n", " </tr>\n", " <tr>\n", " <th>1433</th>\n", " <td>697463031882764288</td>\n", " <td>44.0</td>\n", " <td>40.0</td>\n", " <td>Happy Wednesday here's a bucket of pups. 44/40 would pet all at once https://t.co/HppvrYuamZ</td>\n", " </tr>\n", " <tr>\n", " <th>1635</th>\n", " <td>684222868335505415</td>\n", " <td>121.0</td>\n", " <td>110.0</td>\n", " <td>Someone help the girl is being mugged. Several are distracting her while two steal her shoes. Clever puppers 121/110 https://t.co/1zfnTJLt55</td>\n", " </tr>\n", " <tr>\n", " <th>1779</th>\n", " <td>677716515794329600</td>\n", " <td>144.0</td>\n", " <td>120.0</td>\n", " <td>IT'S PUPPERGEDDON. Total of 144/120 ...I think https://t.co/ZanVtAtvIq</td>\n", " </tr>\n", " <tr>\n", " <th>1843</th>\n", " <td>675853064436391936</td>\n", " <td>88.0</td>\n", " <td>80.0</td>\n", " <td>Here we have an entire platoon of puppers. Total score: 88/80 would pet all at once https://t.co/y93p6FLvVw</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id rating_numerator rating_denominator \\\n", "433 820690176645140481 84.0 70.0 \n", "516 810984652412424192 24.0 7.0 \n", "902 758467244762497024 165.0 150.0 \n", "1120 731156023742988288 204.0 170.0 \n", "1228 713900603437621249 99.0 90.0 \n", "1254 710658690886586372 80.0 80.0 \n", "1274 709198395643068416 45.0 50.0 \n", "1351 704054845121142784 60.0 50.0 \n", "1433 697463031882764288 44.0 40.0 \n", "1635 684222868335505415 121.0 110.0 \n", "1779 677716515794329600 144.0 120.0 \n", "1843 675853064436391936 88.0 80.0 \n", "\n", " text \n", "433 The floofs have been released I repeat the floofs have been released. 84/70 https://t.co/NIYC820tmd \n", "516 Meet Sam. She smiles 24/7 & secretly aspires to be a reindeer. \\nKeep Sam smiling by clicking and sharing this link:\\nhttps://t.co/98tB8y7y7t https://t.co/LouL5vdvxx \n", "902 Why does this never happen at my front door... 165/150 https://t.co/HmwrdfEfUE \n", "1120 Say hello to this unbelievably well behaved squad of doggos. 204/170 would try to pet all at once https://t.co/yGQI3He3xv \n", "1228 Happy Saturday here's 9 puppers on a bench. 99/90 good work everybody https://t.co/mpvaVxKmc1 \n", "1254 Here's a brigade of puppers. All look very prepared for whatever happens next. 80/80 https://t.co/0eb7R1Om12 \n", "1274 From left to right:\\nCletus, Jerome, Alejandro, Burp, & Titson\\nNone know where camera is. 45/50 would hug all at once https://t.co/sedre1ivTK \n", "1351 Here is a whole flock of puppers. 60/50 I'll take the lot https://t.co/9dpcw6MdWa \n", "1433 Happy Wednesday here's a bucket of pups. 44/40 would pet all at once https://t.co/HppvrYuamZ \n", "1635 Someone help the girl is being mugged. Several are distracting her while two steal her shoes. Clever puppers 121/110 https://t.co/1zfnTJLt55 \n", "1779 IT'S PUPPERGEDDON. Total of 144/120 ...I think https://t.co/ZanVtAtvIq \n", "1843 Here we have an entire platoon of puppers. Total score: 88/80 would pet all at once https://t.co/y93p6FLvVw " ] }, "execution_count": 833, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test: Observe all the rows with denominator != 10\n", "df_archive_clean.query('rating_denominator != 10')[['tweet_id', 'rating_numerator', 'rating_denominator', 'text']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have one line with a wrong value 24/7. As there is no rating within the associated text, we simply delete the line." ] }, { "cell_type": "code", "execution_count": 834, "metadata": {}, "outputs": [], "source": [ "# Delete the line with 24/7 as rating\n", "df_archive_clean.drop([516], inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 5 : WeRateDgos twitter archive - We have \"None\" as name even if, sometimes, there is an available name in the text. So few names are missing and could be retrieved." ] }, { "cell_type": "code", "execution_count": 835, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>name</th>\n", " <th>text</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>5</th>\n", " <td>891087950875897856</td>\n", " <td>None</td>\n", " <td>Here we have a majestic great white breaching off South Africa's coast. Absolutely h*ckin breathtaking. 13/10 (IG: tucker_marlo) #BarkWeek https://t.co/kQ04fDDRmh</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", " <td>890729181411237888</td>\n", " <td>None</td>\n", " <td>When you watch your owner call another dog a good boy but then they turn back to you and say you're a great boy. 13/10 https://t.co/v0nONBcwxq</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", " <td>889665388333682689</td>\n", " <td>None</td>\n", " <td>Here's a puppo that seems to be on the fence about something haha no but seriously someone help her. 13/10 https://t.co/BxvuXk0UCm</td>\n", " </tr>\n", " <tr>\n", " <th>24</th>\n", " <td>887343217045368832</td>\n", " <td>None</td>\n", " <td>You may not have known you needed to see this today. 13/10 please enjoy (IG: emmylouroo) https://t.co/WZqNqygEyV</td>\n", " </tr>\n", " <tr>\n", " <th>25</th>\n", " <td>887101392804085760</td>\n", " <td>None</td>\n", " <td>This... is a Jubilant Antarctic House Bear. We only rate dogs. Please only send dogs. Thank you... 12/10 would suffocate in floof https://t.co/4Ad1jzJSdp</td>\n", " </tr>\n", " <tr>\n", " <th>35</th>\n", " <td>885518971528720385</td>\n", " <td>None</td>\n", " <td>I have a new hero and his name is Howard. 14/10 https://t.co/gzLHboL7Sk</td>\n", " </tr>\n", " <tr>\n", " <th>37</th>\n", " <td>885167619883638784</td>\n", " <td>None</td>\n", " <td>Here we have a corgi undercover as a malamute. Pawbably doing important investigative work. Zero control over tongue happenings. 13/10 https://t.co/44ItaMubBf</td>\n", " </tr>\n", " <tr>\n", " <th>41</th>\n", " <td>884441805382717440</td>\n", " <td>None</td>\n", " <td>I present to you, Pup in Hat. Pup in Hat is great for all occasions. Extremely versatile. Compact as h*ck. 14/10 (IG: itselizabethgales) https://t.co/vvBOcC2VdC</td>\n", " </tr>\n", " <tr>\n", " <th>42</th>\n", " <td>884247878851493888</td>\n", " <td>None</td>\n", " <td>OMG HE DIDN'T MEAN TO HE WAS JUST TRYING A LITTLE BARKOUR HE'S SUPER SORRY 13/10 WOULD FORGIVE IMMEDIATE https://t.co/uF3pQ8Wubj</td>\n", " </tr>\n", " <tr>\n", " <th>47</th>\n", " <td>883117836046086144</td>\n", " <td>None</td>\n", " <td>Please only send dogs. We don't rate mechanics, no matter how h*ckin good. Thank you... 13/10 would sneak a pat https://t.co/Se5fZ9wp5E</td>\n", " </tr>\n", " <tr>\n", " <th>59</th>\n", " <td>880872448815771648</td>\n", " <td>None</td>\n", " <td>Ugh not again. We only rate dogs. Please don't send in well-dressed floppy-tongued street penguins. Dogs only please. Thank you... 12/10 https://t.co/WiAMbTkDPf</td>\n", " </tr>\n", " <tr>\n", " <th>62</th>\n", " <td>880095782870896641</td>\n", " <td>None</td>\n", " <td>Please don't send in photos without dogs in them. We're not @porch_rates. Insubordinate and churlish. Pretty good porch tho 11/10 https://t.co/HauE8M3Bu4</td>\n", " </tr>\n", " <tr>\n", " <th>72</th>\n", " <td>878604707211726852</td>\n", " <td>None</td>\n", " <td>Martha is stunning how h*ckin dare you. 13/10 https://t.co/9uABQXgjwa</td>\n", " </tr>\n", " <tr>\n", " <th>83</th>\n", " <td>876537666061221889</td>\n", " <td>None</td>\n", " <td>I can say with the pupmost confidence that the doggos who assisted with this search are heroic as h*ck. 14/10 for all https://t.co/8yoc1CNTsu</td>\n", " </tr>\n", " <tr>\n", " <th>88</th>\n", " <td>875097192612077568</td>\n", " <td>None</td>\n", " <td>You'll get your package when that precious man is done appreciating the pups. 13/10 for everyone https://t.co/PFp4MghzBW</td>\n", " </tr>\n", " <tr>\n", " <th>89</th>\n", " <td>875021211251597312</td>\n", " <td>None</td>\n", " <td>Guys please stop sending pictures without any dogs in th- oh never mind hello excuse me sir. 12/10 stealthy as h*ck https://t.co/brCQoqc8AW</td>\n", " </tr>\n", " <tr>\n", " <th>93</th>\n", " <td>874057562936811520</td>\n", " <td>None</td>\n", " <td>I can't believe this keeps happening. This, is a birb taking a bath. We only rate dogs. Please only send dogs. Thank you... 12/10 https://t.co/pwY9PQhtP2</td>\n", " </tr>\n", " <tr>\n", " <th>96</th>\n", " <td>873580283840344065</td>\n", " <td>None</td>\n", " <td>We usually don't rate Deck-bound Saskatoon Black Bears, but this one is h*ckin flawless. Sneaky tongue slip too. 13/10 would hug firmly https://t.co/mNuMH9400n</td>\n", " </tr>\n", " <tr>\n", " <th>99</th>\n", " <td>872967104147763200</td>\n", " <td>None</td>\n", " <td>Here's a very large dog. He has a date later. Politely asked this water person to check if his breath is bad. 12/10 good to go doggo https://t.co/EMYIdoblMR</td>\n", " </tr>\n", " <tr>\n", " <th>100</th>\n", " <td>872820683541237760</td>\n", " <td>None</td>\n", " <td>Here are my favorite #dogsatpollingstations \\nMost voted for a more consistent walking schedule and to increase daily pats tenfold. All 13/10 https://t.co/17FVMl4VZ5</td>\n", " </tr>\n", " <tr>\n", " <th>103</th>\n", " <td>872486979161796608</td>\n", " <td>None</td>\n", " <td>We. Only. Rate. Dogs. Do not send in other things like this fluffy floor shark clearly ready to attack. Get it together guys... 12/10 https://t.co/BZHiKx3FpQ</td>\n", " </tr>\n", " <tr>\n", " <th>110</th>\n", " <td>871102520638267392</td>\n", " <td>None</td>\n", " <td>Never doubt a doggo 14/10 https://t.co/AbBLh2FZCH</td>\n", " </tr>\n", " <tr>\n", " <th>112</th>\n", " <td>870804317367881728</td>\n", " <td>None</td>\n", " <td>Real funny guys. Sending in a pic without a dog in it. Hilarious. We'll rate the rug tho because it's giving off a very good vibe. 11/10 https://t.co/GCD1JccCyi</td>\n", " </tr>\n", " <tr>\n", " <th>125</th>\n", " <td>868622495443632128</td>\n", " <td>None</td>\n", " <td>Here's a h*ckin peaceful boy. Unbothered by the comings and goings. 13/10 please reveal your wise ways https://t.co/yeaH8Ej5eM</td>\n", " </tr>\n", " <tr>\n", " <th>127</th>\n", " <td>867900495410671616</td>\n", " <td>None</td>\n", " <td>Unbelievable. We only rate dogs. Please don't send in non-canines like the \"I\" from Pixar's opening credits. Thank you... 12/10 https://t.co/JMhDNv5wXZ</td>\n", " </tr>\n", " <tr>\n", " <th>131</th>\n", " <td>867051520902168576</td>\n", " <td>None</td>\n", " <td>Oh my this spooked me up. We only rate dogs, not happy ghosts. Please send dogs only. It's a very simple premise. Thank you... 13/10 https://t.co/M5Rz0R8SIQ</td>\n", " </tr>\n", " <tr>\n", " <th>133</th>\n", " <td>866720684873056260</td>\n", " <td>None</td>\n", " <td>He was providing for his family 13/10 how dare you https://t.co/Q8mVwWN3f4</td>\n", " </tr>\n", " <tr>\n", " <th>141</th>\n", " <td>864873206498414592</td>\n", " <td>None</td>\n", " <td>We only rate dogs. Please don't send in Jesus. We're trying to remain professional and legitimate. Thank you... 14/10 https://t.co/wr3xsjeCIR</td>\n", " </tr>\n", " <tr>\n", " <th>154</th>\n", " <td>862096992088072192</td>\n", " <td>None</td>\n", " <td>We only rate dogs. Please don't send perfectly toasted marshmallows attempting to drive. Thank you... 13/10 https://t.co/nvZyyrp0kd</td>\n", " </tr>\n", " <tr>\n", " <th>157</th>\n", " <td>861288531465048066</td>\n", " <td>None</td>\n", " <td>HI. MY. NAME. IS. BOOMER. AND. I. WANT. TO. SAY. IT'S. H*CKIN. RIDICULOUS. THAT. DOGS. CAN'T VOTE. ABSOLUTE. CODSWALLUP. THANK. YOU. 13/10 https://t.co/SqKJPwbQ2g</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>2288</th>\n", " <td>667176164155375616</td>\n", " <td>None</td>\n", " <td>These are strange dogs. All have toupees. Long neck for dogs. In a shed of sorts? Work in groups? 4/10 still petable https://t.co/PZxSarAfSN</td>\n", " </tr>\n", " <tr>\n", " <th>2294</th>\n", " <td>667138269671505920</td>\n", " <td>None</td>\n", " <td>Extremely intelligent dog here. Has learned to walk like human. Even has his own dog. Very impressive 10/10 https://t.co/0DvHAMdA4V</td>\n", " </tr>\n", " <tr>\n", " <th>2299</th>\n", " <td>667065535570550784</td>\n", " <td>None</td>\n", " <td>Here we have a Hufflepuff. Loves vest. Eyes wide af. Flaccid tail. Matches carpet. Always a little blurry. 8/10 https://t.co/7JdgVqDnvR</td>\n", " </tr>\n", " <tr>\n", " <th>2301</th>\n", " <td>667044094246576128</td>\n", " <td>None</td>\n", " <td>12/10 gimme now https://t.co/QZAnwgnOMB</td>\n", " </tr>\n", " <tr>\n", " <th>2305</th>\n", " <td>666837028449972224</td>\n", " <td>None</td>\n", " <td>My goodness. Very rare dog here. Large. Tail dangerous. Kinda fat. Only eats leaves. Doesn't come when called 3/10 https://t.co/xYGdBrMS9h</td>\n", " </tr>\n", " <tr>\n", " <th>2306</th>\n", " <td>666835007768551424</td>\n", " <td>None</td>\n", " <td>These are Peruvian Feldspars. Their names are Cupit and Prencer. Both resemble Rand Paul. Sick outfits 10/10 &amp; 10/10 https://t.co/ZnEMHBsAs1</td>\n", " </tr>\n", " <tr>\n", " <th>2307</th>\n", " <td>666826780179869698</td>\n", " <td>None</td>\n", " <td>12/10 simply brilliant pup https://t.co/V6ZzG45zzG</td>\n", " </tr>\n", " <tr>\n", " <th>2310</th>\n", " <td>666786068205871104</td>\n", " <td>None</td>\n", " <td>Unfamiliar with this breed. Ears pointy af. Won't let go of seashell. Won't eat kibble. Not very fast. Bad dog 2/10 https://t.co/EIn5kElY1S</td>\n", " </tr>\n", " <tr>\n", " <th>2316</th>\n", " <td>666649482315059201</td>\n", " <td>None</td>\n", " <td>Cool dog. Enjoys couch. Low monotone bark. Very nice kicks. Pisses milk (must be rare). Can't go down stairs. 4/10 https://t.co/vXMKrJC81s</td>\n", " </tr>\n", " <tr>\n", " <th>2320</th>\n", " <td>666437273139982337</td>\n", " <td>None</td>\n", " <td>Here we see a lone northeastern Cumberbatch. Half ladybug. Only builds with bricks. Very confident with body. 7/10 https://t.co/7LtjBS0GPK</td>\n", " </tr>\n", " <tr>\n", " <th>2321</th>\n", " <td>666435652385423360</td>\n", " <td>None</td>\n", " <td>\"Can you behave? You're ruining my wedding day\"\\nDOG: idgaf this flashlight tastes good as hell\\n\\n10/10 https://t.co/GlFZPzqcEU</td>\n", " </tr>\n", " <tr>\n", " <th>2322</th>\n", " <td>666430724426358785</td>\n", " <td>None</td>\n", " <td>Oh boy what a pup! Sunglasses take this one to the next level. Weirdly folds front legs. Pretty big. 6/10 https://t.co/yECbFrSArM</td>\n", " </tr>\n", " <tr>\n", " <th>2323</th>\n", " <td>666428276349472768</td>\n", " <td>None</td>\n", " <td>Here we have an Austrian Pulitzer. Collectors edition. Levitates (?). 7/10 would garden with https://t.co/NMQq6HIglK</td>\n", " </tr>\n", " <tr>\n", " <th>2324</th>\n", " <td>666421158376562688</td>\n", " <td>None</td>\n", " <td>*internally screaming* 12/10 https://t.co/YMcrXC2Y6R</td>\n", " </tr>\n", " <tr>\n", " <th>2328</th>\n", " <td>666396247373291520</td>\n", " <td>None</td>\n", " <td>Oh goodness. A super rare northeast Qdoba kangaroo mix. Massive feet. No pouch (disappointing). Seems alert. 9/10 https://t.co/Dc7b0E8qFE</td>\n", " </tr>\n", " <tr>\n", " <th>2329</th>\n", " <td>666373753744588802</td>\n", " <td>None</td>\n", " <td>Those are sunglasses and a jean jacket. 11/10 dog cool af https://t.co/uHXrPkUEyl</td>\n", " </tr>\n", " <tr>\n", " <th>2330</th>\n", " <td>666362758909284353</td>\n", " <td>None</td>\n", " <td>Unique dog here. Very small. Lives in container of Frosted Flakes (?). Short legs. Must be rare 6/10 would still pet https://t.co/XMD9CwjEnM</td>\n", " </tr>\n", " <tr>\n", " <th>2331</th>\n", " <td>666353288456101888</td>\n", " <td>None</td>\n", " <td>Here we have a mixed Asiago from the Galápagos Islands. Only one ear working. Big fan of marijuana carpet. 8/10 https://t.co/tltQ5w9aUO</td>\n", " </tr>\n", " <tr>\n", " <th>2332</th>\n", " <td>666345417576210432</td>\n", " <td>None</td>\n", " <td>Look at this jokester thinking seat belt laws don't apply to him. Great tongue tho 10/10 https://t.co/VFKG1vxGjB</td>\n", " </tr>\n", " <tr>\n", " <th>2336</th>\n", " <td>666273097616637952</td>\n", " <td>None</td>\n", " <td>Can take selfies 11/10 https://t.co/ws2AMaNwPW</td>\n", " </tr>\n", " <tr>\n", " <th>2337</th>\n", " <td>666268910803644416</td>\n", " <td>None</td>\n", " <td>Very concerned about fellow dog trapped in computer. 10/10 https://t.co/0yxApIikpk</td>\n", " </tr>\n", " <tr>\n", " <th>2338</th>\n", " <td>666104133288665088</td>\n", " <td>None</td>\n", " <td>Not familiar with this breed. No tail (weird). Only 2 legs. Doesn't bark. Surprisingly quick. Shits eggs. 1/10 https://t.co/Asgdc6kuLX</td>\n", " </tr>\n", " <tr>\n", " <th>2339</th>\n", " <td>666102155909144576</td>\n", " <td>None</td>\n", " <td>Oh my. Here you are seeing an Adobe Setter giving birth to twins!!! The world is an amazing place. 11/10 https://t.co/11LvqN4WLq</td>\n", " </tr>\n", " <tr>\n", " <th>2340</th>\n", " <td>666099513787052032</td>\n", " <td>None</td>\n", " <td>Can stand on stump for what seems like a while. Built that birdhouse? Impressive. Made friends with a squirrel. 8/10 https://t.co/Ri4nMTLq5C</td>\n", " </tr>\n", " <tr>\n", " <th>2341</th>\n", " <td>666094000022159362</td>\n", " <td>None</td>\n", " <td>This appears to be a Mongolian Presbyterian mix. Very tired. Tongue slip confirmed. 9/10 would lie down with https://t.co/mnioXo3IfP</td>\n", " </tr>\n", " <tr>\n", " <th>2342</th>\n", " <td>666082916733198337</td>\n", " <td>None</td>\n", " <td>Here we have a well-established sunblockerspaniel. Lost his other flip-flop. 6/10 not very waterproof https://t.co/3RU6x0vHB7</td>\n", " </tr>\n", " <tr>\n", " <th>2343</th>\n", " <td>666073100786774016</td>\n", " <td>None</td>\n", " <td>Let's hope this flight isn't Malaysian (lol). What a dog! Almost completely camouflaged. 10/10 I trust this pilot https://t.co/Yk6GHE9tOY</td>\n", " </tr>\n", " <tr>\n", " <th>2344</th>\n", " <td>666071193221509120</td>\n", " <td>None</td>\n", " <td>Here we have a northern speckled Rhododendron. Much sass. Gives 0 fucks. Good tongue. 9/10 would caress sensually https://t.co/ZoL8kq2XFx</td>\n", " </tr>\n", " <tr>\n", " <th>2351</th>\n", " <td>666049248165822465</td>\n", " <td>None</td>\n", " <td>Here we have a 1949 1st generation vulpix. Enjoys sweat tea and Fox News. Cannot be phased. 5/10 https://t.co/4B7cOc1EDq</td>\n", " </tr>\n", " <tr>\n", " <th>2355</th>\n", " <td>666020888022790149</td>\n", " <td>None</td>\n", " <td>Here we have a Japanese Irish Setter. Lost eye in Vietnam (?). Big fan of relaxing on stair. 8/10 would pet https://t.co/BLDqew2Ijj</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>600 rows × 3 columns</p>\n", "</div>" ], "text/plain": [ " tweet_id name \\\n", "5 891087950875897856 None \n", "7 890729181411237888 None \n", "12 889665388333682689 None \n", "24 887343217045368832 None \n", "25 887101392804085760 None \n", "35 885518971528720385 None \n", "37 885167619883638784 None \n", "41 884441805382717440 None \n", "42 884247878851493888 None \n", "47 883117836046086144 None \n", "59 880872448815771648 None \n", "62 880095782870896641 None \n", "72 878604707211726852 None \n", "83 876537666061221889 None \n", "88 875097192612077568 None \n", "89 875021211251597312 None \n", "93 874057562936811520 None \n", "96 873580283840344065 None \n", "99 872967104147763200 None \n", "100 872820683541237760 None \n", "103 872486979161796608 None \n", "110 871102520638267392 None \n", "112 870804317367881728 None \n", "125 868622495443632128 None \n", "127 867900495410671616 None \n", "131 867051520902168576 None \n", "133 866720684873056260 None \n", "141 864873206498414592 None \n", "154 862096992088072192 None \n", "157 861288531465048066 None \n", "... ... ... \n", "2288 667176164155375616 None \n", "2294 667138269671505920 None \n", "2299 667065535570550784 None \n", "2301 667044094246576128 None \n", "2305 666837028449972224 None \n", "2306 666835007768551424 None \n", "2307 666826780179869698 None \n", "2310 666786068205871104 None \n", "2316 666649482315059201 None \n", "2320 666437273139982337 None \n", "2321 666435652385423360 None \n", "2322 666430724426358785 None \n", "2323 666428276349472768 None \n", "2324 666421158376562688 None \n", "2328 666396247373291520 None \n", "2329 666373753744588802 None \n", "2330 666362758909284353 None \n", "2331 666353288456101888 None \n", "2332 666345417576210432 None \n", "2336 666273097616637952 None \n", "2337 666268910803644416 None \n", "2338 666104133288665088 None \n", "2339 666102155909144576 None \n", "2340 666099513787052032 None \n", "2341 666094000022159362 None \n", "2342 666082916733198337 None \n", "2343 666073100786774016 None \n", "2344 666071193221509120 None \n", "2351 666049248165822465 None \n", "2355 666020888022790149 None \n", "\n", " text \n", "5 Here we have a majestic great white breaching off South Africa's coast. Absolutely h*ckin breathtaking. 13/10 (IG: tucker_marlo) #BarkWeek https://t.co/kQ04fDDRmh \n", "7 When you watch your owner call another dog a good boy but then they turn back to you and say you're a great boy. 13/10 https://t.co/v0nONBcwxq \n", "12 Here's a puppo that seems to be on the fence about something haha no but seriously someone help her. 13/10 https://t.co/BxvuXk0UCm \n", "24 You may not have known you needed to see this today. 13/10 please enjoy (IG: emmylouroo) https://t.co/WZqNqygEyV \n", "25 This... is a Jubilant Antarctic House Bear. We only rate dogs. Please only send dogs. Thank you... 12/10 would suffocate in floof https://t.co/4Ad1jzJSdp \n", "35 I have a new hero and his name is Howard. 14/10 https://t.co/gzLHboL7Sk \n", "37 Here we have a corgi undercover as a malamute. Pawbably doing important investigative work. Zero control over tongue happenings. 13/10 https://t.co/44ItaMubBf \n", "41 I present to you, Pup in Hat. Pup in Hat is great for all occasions. Extremely versatile. Compact as h*ck. 14/10 (IG: itselizabethgales) https://t.co/vvBOcC2VdC \n", "42 OMG HE DIDN'T MEAN TO HE WAS JUST TRYING A LITTLE BARKOUR HE'S SUPER SORRY 13/10 WOULD FORGIVE IMMEDIATE https://t.co/uF3pQ8Wubj \n", "47 Please only send dogs. We don't rate mechanics, no matter how h*ckin good. Thank you... 13/10 would sneak a pat https://t.co/Se5fZ9wp5E \n", "59 Ugh not again. We only rate dogs. Please don't send in well-dressed floppy-tongued street penguins. Dogs only please. Thank you... 12/10 https://t.co/WiAMbTkDPf \n", "62 Please don't send in photos without dogs in them. We're not @porch_rates. Insubordinate and churlish. Pretty good porch tho 11/10 https://t.co/HauE8M3Bu4 \n", "72 Martha is stunning how h*ckin dare you. 13/10 https://t.co/9uABQXgjwa \n", "83 I can say with the pupmost confidence that the doggos who assisted with this search are heroic as h*ck. 14/10 for all https://t.co/8yoc1CNTsu \n", "88 You'll get your package when that precious man is done appreciating the pups. 13/10 for everyone https://t.co/PFp4MghzBW \n", "89 Guys please stop sending pictures without any dogs in th- oh never mind hello excuse me sir. 12/10 stealthy as h*ck https://t.co/brCQoqc8AW \n", "93 I can't believe this keeps happening. This, is a birb taking a bath. We only rate dogs. Please only send dogs. Thank you... 12/10 https://t.co/pwY9PQhtP2 \n", "96 We usually don't rate Deck-bound Saskatoon Black Bears, but this one is h*ckin flawless. Sneaky tongue slip too. 13/10 would hug firmly https://t.co/mNuMH9400n \n", "99 Here's a very large dog. He has a date later. Politely asked this water person to check if his breath is bad. 12/10 good to go doggo https://t.co/EMYIdoblMR \n", "100 Here are my favorite #dogsatpollingstations \\nMost voted for a more consistent walking schedule and to increase daily pats tenfold. All 13/10 https://t.co/17FVMl4VZ5 \n", "103 We. Only. Rate. Dogs. Do not send in other things like this fluffy floor shark clearly ready to attack. Get it together guys... 12/10 https://t.co/BZHiKx3FpQ \n", "110 Never doubt a doggo 14/10 https://t.co/AbBLh2FZCH \n", "112 Real funny guys. Sending in a pic without a dog in it. Hilarious. We'll rate the rug tho because it's giving off a very good vibe. 11/10 https://t.co/GCD1JccCyi \n", "125 Here's a h*ckin peaceful boy. Unbothered by the comings and goings. 13/10 please reveal your wise ways https://t.co/yeaH8Ej5eM \n", "127 Unbelievable. We only rate dogs. Please don't send in non-canines like the \"I\" from Pixar's opening credits. Thank you... 12/10 https://t.co/JMhDNv5wXZ \n", "131 Oh my this spooked me up. We only rate dogs, not happy ghosts. Please send dogs only. It's a very simple premise. Thank you... 13/10 https://t.co/M5Rz0R8SIQ \n", "133 He was providing for his family 13/10 how dare you https://t.co/Q8mVwWN3f4 \n", "141 We only rate dogs. Please don't send in Jesus. We're trying to remain professional and legitimate. Thank you... 14/10 https://t.co/wr3xsjeCIR \n", "154 We only rate dogs. Please don't send perfectly toasted marshmallows attempting to drive. Thank you... 13/10 https://t.co/nvZyyrp0kd \n", "157 HI. MY. NAME. IS. BOOMER. AND. I. WANT. TO. SAY. IT'S. H*CKIN. RIDICULOUS. THAT. DOGS. CAN'T VOTE. ABSOLUTE. CODSWALLUP. THANK. YOU. 13/10 https://t.co/SqKJPwbQ2g \n", "... ... \n", "2288 These are strange dogs. All have toupees. Long neck for dogs. In a shed of sorts? Work in groups? 4/10 still petable https://t.co/PZxSarAfSN \n", "2294 Extremely intelligent dog here. Has learned to walk like human. Even has his own dog. Very impressive 10/10 https://t.co/0DvHAMdA4V \n", "2299 Here we have a Hufflepuff. Loves vest. Eyes wide af. Flaccid tail. Matches carpet. Always a little blurry. 8/10 https://t.co/7JdgVqDnvR \n", "2301 12/10 gimme now https://t.co/QZAnwgnOMB \n", "2305 My goodness. Very rare dog here. Large. Tail dangerous. Kinda fat. Only eats leaves. Doesn't come when called 3/10 https://t.co/xYGdBrMS9h \n", "2306 These are Peruvian Feldspars. Their names are Cupit and Prencer. Both resemble Rand Paul. Sick outfits 10/10 & 10/10 https://t.co/ZnEMHBsAs1 \n", "2307 12/10 simply brilliant pup https://t.co/V6ZzG45zzG \n", "2310 Unfamiliar with this breed. Ears pointy af. Won't let go of seashell. Won't eat kibble. Not very fast. Bad dog 2/10 https://t.co/EIn5kElY1S \n", "2316 Cool dog. Enjoys couch. Low monotone bark. Very nice kicks. Pisses milk (must be rare). Can't go down stairs. 4/10 https://t.co/vXMKrJC81s \n", "2320 Here we see a lone northeastern Cumberbatch. Half ladybug. Only builds with bricks. Very confident with body. 7/10 https://t.co/7LtjBS0GPK \n", "2321 \"Can you behave? You're ruining my wedding day\"\\nDOG: idgaf this flashlight tastes good as hell\\n\\n10/10 https://t.co/GlFZPzqcEU \n", "2322 Oh boy what a pup! Sunglasses take this one to the next level. Weirdly folds front legs. Pretty big. 6/10 https://t.co/yECbFrSArM \n", "2323 Here we have an Austrian Pulitzer. Collectors edition. Levitates (?). 7/10 would garden with https://t.co/NMQq6HIglK \n", "2324 *internally screaming* 12/10 https://t.co/YMcrXC2Y6R \n", "2328 Oh goodness. A super rare northeast Qdoba kangaroo mix. Massive feet. No pouch (disappointing). Seems alert. 9/10 https://t.co/Dc7b0E8qFE \n", "2329 Those are sunglasses and a jean jacket. 11/10 dog cool af https://t.co/uHXrPkUEyl \n", "2330 Unique dog here. Very small. Lives in container of Frosted Flakes (?). Short legs. Must be rare 6/10 would still pet https://t.co/XMD9CwjEnM \n", "2331 Here we have a mixed Asiago from the Galápagos Islands. Only one ear working. Big fan of marijuana carpet. 8/10 https://t.co/tltQ5w9aUO \n", "2332 Look at this jokester thinking seat belt laws don't apply to him. Great tongue tho 10/10 https://t.co/VFKG1vxGjB \n", "2336 Can take selfies 11/10 https://t.co/ws2AMaNwPW \n", "2337 Very concerned about fellow dog trapped in computer. 10/10 https://t.co/0yxApIikpk \n", "2338 Not familiar with this breed. No tail (weird). Only 2 legs. Doesn't bark. Surprisingly quick. Shits eggs. 1/10 https://t.co/Asgdc6kuLX \n", "2339 Oh my. Here you are seeing an Adobe Setter giving birth to twins!!! The world is an amazing place. 11/10 https://t.co/11LvqN4WLq \n", "2340 Can stand on stump for what seems like a while. Built that birdhouse? Impressive. Made friends with a squirrel. 8/10 https://t.co/Ri4nMTLq5C \n", "2341 This appears to be a Mongolian Presbyterian mix. Very tired. Tongue slip confirmed. 9/10 would lie down with https://t.co/mnioXo3IfP \n", "2342 Here we have a well-established sunblockerspaniel. Lost his other flip-flop. 6/10 not very waterproof https://t.co/3RU6x0vHB7 \n", "2343 Let's hope this flight isn't Malaysian (lol). What a dog! Almost completely camouflaged. 10/10 I trust this pilot https://t.co/Yk6GHE9tOY \n", "2344 Here we have a northern speckled Rhododendron. Much sass. Gives 0 fucks. Good tongue. 9/10 would caress sensually https://t.co/ZoL8kq2XFx \n", "2351 Here we have a 1949 1st generation vulpix. Enjoys sweat tea and Fox News. Cannot be phased. 5/10 https://t.co/4B7cOc1EDq \n", "2355 Here we have a Japanese Irish Setter. Lost eye in Vietnam (?). Big fan of relaxing on stair. 8/10 would pet https://t.co/BLDqew2Ijj \n", "\n", "[600 rows x 3 columns]" ] }, "execution_count": 835, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# List the rows with missing names.\n", "df_nametofind = df_archive_clean.query('name == \"None\"')[['tweet_id', 'name', 'text']]\n", "df_nametofind" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From a visual observation within the \"text\", we identify 3 situations: \n", "* Two cases where the follows \"name is\" and \"IS.\" \n", "* One case where the name \"Martha\" starts the text line\n", "* All the other cases, the name was really missing within the text \n", "Over all the 600 rows impacted here, as the name is really missing for 597 rows, we do not see the benefit of having a huge regular expression to detect the name. Thus we do not clean this issue. This cleaning will not bring any added value to our further analysis and insights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 6 : WeRateDgos twitter archive - We have missing dog stages, meaning stages not properly extracted. This is the case for \"puppo\", \"doggo\" and \"pupper\"." ] }, { "cell_type": "code", "execution_count": 836, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "None 2069\n", "puppo 24 \n", "Name: puppo, dtype: int64\n", "None 2010\n", "doggo 83 \n", "Name: doggo, dtype: int64\n", "None 1864\n", "pupper 229 \n", "Name: pupper, dtype: int64\n", "None 2083\n", "floofer 10 \n", "Name: floofer, dtype: int64\n" ] } ], "source": [ "# First we count the missing stages\n", "print(df_archive_clean.puppo.value_counts())\n", "print(df_archive_clean.doggo.value_counts())\n", "print(df_archive_clean.pupper.value_counts())\n", "print(df_archive_clean.floofer.value_counts())" ] }, { "cell_type": "code", "execution_count": 837, "metadata": {}, "outputs": [], "source": [ "# Define : For each non identified stage, we do through the associated text to find the stage\n", "\n", "# Code : function which extract \"puppo\" from the text\n", "def extract_puppo(row):\n", " found = row['text'].lower().find(\"puppo\")\n", " if found != -1:\n", " return \"puppo\"\n", " else:\n", " return\n", "\n", "# Code : function which extract \"doggo\" from the text\n", "def extract_doggo(row):\n", " found = row['text'].lower().find(\"doggo\")\n", " if found != -1:\n", " return \"doggo\"\n", " else:\n", " return\n", "\n", "# Code : function which extract \"pupper\" from the text\n", "def extract_pupper(row):\n", " found = row['text'].lower().find(\"pupper\")\n", " if found != -1:\n", " return \"pupper\"\n", " else:\n", " return" ] }, { "cell_type": "code", "execution_count": 838, "metadata": {}, "outputs": [], "source": [ "# Code : apply the detection on the dataset\n", "df_archive_clean['puppo'] = df_archive_clean.apply(extract_puppo, axis=1)\n", "df_archive_clean['doggo'] = df_archive_clean.apply(extract_doggo, axis=1)\n", "df_archive_clean['pupper'] = df_archive_clean.apply(extract_pupper, axis=1)" ] }, { "cell_type": "code", "execution_count": 839, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "puppo 30\n", "Name: puppo, dtype: int64\n", "doggo 91\n", "Name: doggo, dtype: int64\n", "pupper 254\n", "Name: pupper, dtype: int64\n" ] } ], "source": [ "# Test: we count the missing stages, again\n", "print(df_archive_clean.puppo.value_counts())\n", "print(df_archive_clean.doggo.value_counts())\n", "print(df_archive_clean.pupper.value_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality issue 9 : Tweets images predictions - We have rows which are not dogs images predictions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This cleaning include the correction for the \n", "#### Quality issue 11 : Tweets images predictions - predictions and the associated confidences are spread over several columns. \n", "Define : if the p1_dog is not a dog, we get the first from p2 and p3 which are dog prediction. In case, none of them is a dog prediction, we get the most highest confidence prediction, whatever it is. We know we are looking for dogs, so even with a lower confidence, we take the dog detection." ] }, { "cell_type": "code", "execution_count": 840, "metadata": {}, "outputs": [], "source": [ "# Code : set prediction - for p1, p2 and p3, we get the prediction from the 1st which is a dog, \n", "# otherwise we stay on p1 which used to have the highest confidence\n", "def set_prediction(row):\n", " prediction = row['p1']\n", " if(row['p1_dog'] == False):\n", " if(row['p2_dog'] == True):\n", " prediction = row['p2']\n", " else:\n", " if(row['p3_dog'] == True):\n", " prediction = row['p3']\n", " \n", " return prediction\n", "\n", "# Code: set confidence - se stay on p1_conf unless we find a dog on p2 or p3,\n", "# and in that case we take the associated confidence\n", "def set_confidence(row):\n", " confidence = row['p1_conf']\n", " if(row['p1_dog'] == False):\n", " if(row['p2_dog'] == True):\n", " confidence = row['p2_conf']\n", " else:\n", " if(row['p3_dog'] == True):\n", " confidence = row['p3_conf']\n", " \n", " return confidence\n", "\n", "# Code: set the type - As we might not know all the predictions which are not dogs, \n", "# we still need to know easily if we have a dog or something else\n", "def set_detectiontype(row):\n", " detected_type = \"dog\"\n", " if(row['p1_dog'] == False):\n", " if(row['p2_dog'] == False):\n", " if(row['p3_dog'] == False):\n", " detected_type = \"other\"\n", " \n", " return detected_type" ] }, { "cell_type": "code", "execution_count": 841, "metadata": {}, "outputs": [], "source": [ "# Code : create the new columns with the values\n", "df_image_clean['prediction'] = df_image_clean.apply(set_prediction, axis=1)\n", "df_image_clean['confidence'] = df_image_clean.apply(set_confidence, axis=1)\n", "df_image_clean['detectiontype'] = df_image_clean.apply(set_detectiontype, axis=1)" ] }, { "cell_type": "code", "execution_count": 842, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>p1</th>\n", " <th>p1_conf</th>\n", " <th>p1_dog</th>\n", " <th>p2</th>\n", " <th>p2_conf</th>\n", " <th>p2_dog</th>\n", " <th>p3</th>\n", " <th>p3_conf</th>\n", " <th>p3_dog</th>\n", " <th>prediction</th>\n", " <th>confidence</th>\n", " <th>detectiontype</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>132</th>\n", " <td>shopping_basket</td>\n", " <td>0.398361</td>\n", " <td>False</td>\n", " <td>hamper</td>\n", " <td>0.363222</td>\n", " <td>False</td>\n", " <td>bassinet</td>\n", " <td>0.084173</td>\n", " <td>False</td>\n", " <td>shopping_basket</td>\n", " <td>0.398361</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1979</th>\n", " <td>home_theater</td>\n", " <td>0.168290</td>\n", " <td>False</td>\n", " <td>sandbar</td>\n", " <td>0.098040</td>\n", " <td>False</td>\n", " <td>television</td>\n", " <td>0.079729</td>\n", " <td>False</td>\n", " <td>home_theater</td>\n", " <td>0.168290</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1097</th>\n", " <td>alp</td>\n", " <td>0.320126</td>\n", " <td>False</td>\n", " <td>lawn_mower</td>\n", " <td>0.080808</td>\n", " <td>False</td>\n", " <td>viaduct</td>\n", " <td>0.065321</td>\n", " <td>False</td>\n", " <td>alp</td>\n", " <td>0.320126</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1902</th>\n", " <td>pencil_box</td>\n", " <td>0.662183</td>\n", " <td>False</td>\n", " <td>purse</td>\n", " <td>0.066505</td>\n", " <td>False</td>\n", " <td>pillow</td>\n", " <td>0.044725</td>\n", " <td>False</td>\n", " <td>pencil_box</td>\n", " <td>0.662183</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>453</th>\n", " <td>seashore</td>\n", " <td>0.352321</td>\n", " <td>False</td>\n", " <td>promontory</td>\n", " <td>0.131753</td>\n", " <td>False</td>\n", " <td>wreck</td>\n", " <td>0.095597</td>\n", " <td>False</td>\n", " <td>seashore</td>\n", " <td>0.352321</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1036</th>\n", " <td>espresso</td>\n", " <td>0.430135</td>\n", " <td>False</td>\n", " <td>coffee_mug</td>\n", " <td>0.418483</td>\n", " <td>False</td>\n", " <td>cup</td>\n", " <td>0.088391</td>\n", " <td>False</td>\n", " <td>espresso</td>\n", " <td>0.430135</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1142</th>\n", " <td>doormat</td>\n", " <td>0.359586</td>\n", " <td>False</td>\n", " <td>china_cabinet</td>\n", " <td>0.053901</td>\n", " <td>False</td>\n", " <td>passenger_car</td>\n", " <td>0.052665</td>\n", " <td>False</td>\n", " <td>doormat</td>\n", " <td>0.359586</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1937</th>\n", " <td>lakeside</td>\n", " <td>0.312299</td>\n", " <td>False</td>\n", " <td>dock</td>\n", " <td>0.159842</td>\n", " <td>False</td>\n", " <td>canoe</td>\n", " <td>0.070795</td>\n", " <td>False</td>\n", " <td>lakeside</td>\n", " <td>0.312299</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>45</th>\n", " <td>snail</td>\n", " <td>0.999888</td>\n", " <td>False</td>\n", " <td>slug</td>\n", " <td>0.000055</td>\n", " <td>False</td>\n", " <td>acorn</td>\n", " <td>0.000026</td>\n", " <td>False</td>\n", " <td>snail</td>\n", " <td>0.999888</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>832</th>\n", " <td>washbasin</td>\n", " <td>0.272451</td>\n", " <td>False</td>\n", " <td>doormat</td>\n", " <td>0.165871</td>\n", " <td>False</td>\n", " <td>bathtub</td>\n", " <td>0.066368</td>\n", " <td>False</td>\n", " <td>washbasin</td>\n", " <td>0.272451</td>\n", " <td>other</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " p1 p1_conf p1_dog p2 p2_conf p2_dog \\\n", "132 shopping_basket 0.398361 False hamper 0.363222 False \n", "1979 home_theater 0.168290 False sandbar 0.098040 False \n", "1097 alp 0.320126 False lawn_mower 0.080808 False \n", "1902 pencil_box 0.662183 False purse 0.066505 False \n", "453 seashore 0.352321 False promontory 0.131753 False \n", "1036 espresso 0.430135 False coffee_mug 0.418483 False \n", "1142 doormat 0.359586 False china_cabinet 0.053901 False \n", "1937 lakeside 0.312299 False dock 0.159842 False \n", "45 snail 0.999888 False slug 0.000055 False \n", "832 washbasin 0.272451 False doormat 0.165871 False \n", "\n", " p3 p3_conf p3_dog prediction confidence \\\n", "132 bassinet 0.084173 False shopping_basket 0.398361 \n", "1979 television 0.079729 False home_theater 0.168290 \n", "1097 viaduct 0.065321 False alp 0.320126 \n", "1902 pillow 0.044725 False pencil_box 0.662183 \n", "453 wreck 0.095597 False seashore 0.352321 \n", "1036 cup 0.088391 False espresso 0.430135 \n", "1142 passenger_car 0.052665 False doormat 0.359586 \n", "1937 canoe 0.070795 False lakeside 0.312299 \n", "45 acorn 0.000026 False snail 0.999888 \n", "832 bathtub 0.066368 False washbasin 0.272451 \n", "\n", " detectiontype \n", "132 other \n", "1979 other \n", "1097 other \n", "1902 other \n", "453 other \n", "1036 other \n", "1142 other \n", "1937 other \n", "45 other \n", "832 other " ] }, "execution_count": 842, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : Visual verification\n", "df_image_clean.query('detectiontype == \"other\"')[['p1', 'p1_conf', 'p1_dog', 'p2', 'p2_conf', 'p2_dog', 'p3', 'p3_conf', 'p3_dog', 'prediction', 'confidence', 'detectiontype']].sample(10)" ] }, { "cell_type": "code", "execution_count": 843, "metadata": {}, "outputs": [], "source": [ "# Clean the p columns\n", "df_image_clean.drop('p1', axis=1, inplace=True)\n", "df_image_clean.drop('p1_conf', axis=1, inplace=True)\n", "df_image_clean.drop('p1_dog', axis=1, inplace=True)\n", "df_image_clean.drop('p2', axis=1, inplace=True)\n", "df_image_clean.drop('p2_conf', axis=1, inplace=True)\n", "df_image_clean.drop('p2_dog', axis=1, inplace=True)\n", "df_image_clean.drop('p3', axis=1, inplace=True)\n", "df_image_clean.drop('p3_conf', axis=1, inplace=True)\n", "df_image_clean.drop('p3_dog', axis=1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 844, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>jpg_url</th>\n", " <th>img_num</th>\n", " <th>prediction</th>\n", " <th>confidence</th>\n", " <th>detectiontype</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>689</th>\n", " <td>684188786104872960</td>\n", " <td>https://pbs.twimg.com/media/CX66EiJWkAAVjA-.jpg</td>\n", " <td>1</td>\n", " <td>kelpie</td>\n", " <td>0.537782</td>\n", " <td>dog</td>\n", " </tr>\n", " <tr>\n", " <th>972</th>\n", " <td>706644897839910912</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/706644797256241152/pu/img/NTqvmIUQExGmKFSR.jpg</td>\n", " <td>1</td>\n", " <td>Chihuahua</td>\n", " <td>0.132928</td>\n", " <td>dog</td>\n", " </tr>\n", " <tr>\n", " <th>233</th>\n", " <td>670420569653809152</td>\n", " <td>https://pbs.twimg.com/media/CU3P82RWEAAIVrE.jpg</td>\n", " <td>1</td>\n", " <td>bow_tie</td>\n", " <td>0.268759</td>\n", " <td>other</td>\n", " </tr>\n", " <tr>\n", " <th>1867</th>\n", " <td>843856843873095681</td>\n", " <td>https://pbs.twimg.com/media/C7X7Ui0XgAA3m19.jpg</td>\n", " <td>1</td>\n", " <td>Labrador_retriever</td>\n", " <td>0.922540</td>\n", " <td>dog</td>\n", " </tr>\n", " <tr>\n", " <th>488</th>\n", " <td>675517828909424640</td>\n", " <td>https://pbs.twimg.com/media/CV_r3v4VAAALvwg.jpg</td>\n", " <td>1</td>\n", " <td>Scottish_deerhound</td>\n", " <td>0.240591</td>\n", " <td>dog</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id \\\n", "689 684188786104872960 \n", "972 706644897839910912 \n", "233 670420569653809152 \n", "1867 843856843873095681 \n", "488 675517828909424640 \n", "\n", " jpg_url \\\n", "689 https://pbs.twimg.com/media/CX66EiJWkAAVjA-.jpg \n", "972 https://pbs.twimg.com/ext_tw_video_thumb/706644797256241152/pu/img/NTqvmIUQExGmKFSR.jpg \n", "233 https://pbs.twimg.com/media/CU3P82RWEAAIVrE.jpg \n", "1867 https://pbs.twimg.com/media/C7X7Ui0XgAA3m19.jpg \n", "488 https://pbs.twimg.com/media/CV_r3v4VAAALvwg.jpg \n", "\n", " img_num prediction confidence detectiontype \n", "689 1 kelpie 0.537782 dog \n", "972 1 Chihuahua 0.132928 dog \n", "233 1 bow_tie 0.268759 other \n", "1867 1 Labrador_retriever 0.922540 dog \n", "488 1 Scottish_deerhound 0.240591 dog " ] }, "execution_count": 844, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# View on the dataset\n", "df_image_clean.sample(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"detectiontype\" column is not really necessary here. We added it to have a quick and easy understanding about the prediction, if it is a kind of dog or not. It might be useful for the analysis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Clean Tidiness issue 1: WeRateDgos twitter archive - Dog stages have been spread as columns." ] }, { "cell_type": "code", "execution_count": 845, "metadata": {}, "outputs": [], "source": [ "# Define : for each doggo, floofer, pupper and puppo columns, we get the stage we encounter\n", "# In case we got a stage earlier, we add collect them separated by a \",\"\n", "# Code : Get the stage from each column\n", "def set_stage(row):\n", " stage = None\n", " \n", " # Collect doggo and any other stage encoutered separated by a \",\"\n", " if(row['doggo'] == \"doggo\"):\n", " if stage != None:\n", " stage = stage + \",\" + \"floofer\"\n", " print(\"more floofer : \" + stage)\n", " else:\n", " stage = \"doggo\"\n", " \n", " # Collect floofer and any other stage encoutered separated by a \",\"\n", " if(row['floofer'] == \"floofer\"):\n", " \n", " if stage != None:\n", " stage = stage + \",\" + \"floofer\"\n", " print(\"more floofer : \" + stage)\n", " else:\n", " stage = \"floofer\"\n", " \n", " # Collect pupper and any other stage encoutered separated by a \",\"\n", " if(row['pupper'] == \"pupper\"):\n", " \n", " if stage != None:\n", " stage = stage + \",\" + \"pupper\"\n", " print(\"more pupper : \" + stage)\n", " else:\n", " stage = \"pupper\"\n", " \n", " # Collect puppo and any other stage encoutered separated by a \",\"\n", " if(row['puppo'] == \"puppo\"):\n", " \n", " if stage != None:\n", " stage = stage + \",\" + \"puppo\"\n", " print(\"more puppo : \" + stage)\n", " else:\n", " stage = \"puppo\"\n", " \n", " return stage" ] }, { "cell_type": "code", "execution_count": 846, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "more puppo : doggo,puppo\n", "more puppo : doggo,puppo\n", "more floofer : doggo,floofer\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n", "more pupper : doggo,pupper\n" ] } ], "source": [ "# Code : set the new column using the previous functions\n", "df_archive_clean['stage'] = df_archive_clean.apply(set_stage, axis=1)" ] }, { "cell_type": "code", "execution_count": 847, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([None, 'doggo', 'puppo', 'pupper', 'floofer', 'doggo,puppo',\n", " 'doggo,floofer', 'doggo,pupper'], dtype=object)" ] }, "execution_count": 847, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : get the unique values from \"stage\" column\n", "df_archive_clean['stage'].unique()" ] }, { "cell_type": "code", "execution_count": 848, "metadata": {}, "outputs": [], "source": [ "# Clean the non useful columns\n", "df_archive_clean.drop('puppo', axis=1, inplace=True)\n", "df_archive_clean.drop('doggo', axis=1, inplace=True)\n", "df_archive_clean.drop('floofer', axis=1, inplace=True)\n", "df_archive_clean.drop('pupper', axis=1, inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 7 : WeRateDgos twitter archive - \"expanded_urls\" column contains duplicated urls." ] }, { "cell_type": "code", "execution_count": 849, "metadata": {}, "outputs": [], "source": [ "# Define : we keep only the 1st url in \"expanded_urls\". \n", "# The reason: From previous observation, we have rare cases where the urls are differents for the same tweet.\n", "# We do not plan to use the 2nd or the 3rd urls for our analysis\n", "\n", "# Code : function to split the current \"expanded_urls\" content and keep the 1st part\n", "def split_expanded_urls(row):\n", " retrieved_url = None\n", " found_urls = row['expanded_urls'].split(',')\n", " retrieved_url = found_urls[0]\n", " \n", " return retrieved_url" ] }, { "cell_type": "code", "execution_count": 850, "metadata": {}, "outputs": [], "source": [ "# Code : apply the function above\n", "df_archive_clean['expanded_urls'] = df_archive_clean.apply(split_expanded_urls, axis=1)" ] }, { "cell_type": "code", "execution_count": 851, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False 2093\n", "Name: expanded_urls, dtype: int64" ] }, "execution_count": 851, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : Do we still have multiple urls ?\n", "df_archive_clean['expanded_urls'].str.contains(',').value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 8 : WeRateDgos twitter archive - timestamp is using string type." ] }, { "cell_type": "code", "execution_count": 852, "metadata": {}, "outputs": [], "source": [ "# Define and Code: Convert timestamp to datetime using pd.to_datetime function\n", "df_archive_clean['timestamp'] = pd.to_datetime(df_archive_clean['timestamp'])" ] }, { "cell_type": "code", "execution_count": 853, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas._libs.tslibs.timestamps.Timestamp" ] }, "execution_count": 853, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test: get the \"timestamp\" column type\n", "type(df_archive_clean['timestamp'][0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning - Quality Issue 10 : Data retrieved via twitter API - \"created_at\" column type is not timestamp." ] }, { "cell_type": "code", "execution_count": 854, "metadata": {}, "outputs": [], "source": [ "# Define and Code: Convert timestamp to datetime using pd.to_datetime function\n", "df_twitter_clean['created_at'] = pd.to_datetime(df_twitter_clean['created_at'])" ] }, { "cell_type": "code", "execution_count": 855, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas._libs.tslibs.timestamps.Timestamp" ] }, "execution_count": 855, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test: get the \"created_at\" column type\n", "type(df_twitter_clean['created_at'][0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Requirement : we do not keep the tweets beyond August 1st 2017, because we won't be able to have the associated images predictions" ] }, { "cell_type": "code", "execution_count": 856, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>timestamp</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>892420643555336193</td>\n", " <td>2017-08-01 16:23:56</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>892177421306343426</td>\n", " <td>2017-08-01 00:17:27</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id timestamp\n", "0 892420643555336193 2017-08-01 16:23:56\n", "1 892177421306343426 2017-08-01 00:17:27" ] }, "execution_count": 856, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# twitter enhanced archive : Which lines are beyond August 1st 2017\n", "df_archive_clean.query('timestamp > \"2017-08-01 00:00:00\"')[['tweet_id', 'timestamp']]" ] }, { "cell_type": "code", "execution_count": 857, "metadata": {}, "outputs": [], "source": [ "# Delete the line\n", "df_archive_clean.drop([0], inplace=True)\n", "df_archive_clean.drop([1], inplace=True)" ] }, { "cell_type": "code", "execution_count": 858, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>timestamp</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ "Empty DataFrame\n", "Columns: [tweet_id, timestamp]\n", "Index: []" ] }, "execution_count": 858, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : ensure the removal\n", "df_archive_clean.query('timestamp > \"2017-08-01 00:00:00\"')[['tweet_id', 'timestamp']]" ] }, { "cell_type": "code", "execution_count": 859, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>created_at</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>892420643555336193</td>\n", " <td>2017-08-01 16:23:56</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>892177421306343426</td>\n", " <td>2017-08-01 00:17:27</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id created_at\n", "0 892420643555336193 2017-08-01 16:23:56\n", "1 892177421306343426 2017-08-01 00:17:27" ] }, "execution_count": 859, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Dataframe from twitter AP : Which lines are beyond August 1st 2017\n", "df_twitter_clean.query('created_at > \"2017-08-01 00:00:00\"')[['tweet_id', 'created_at']]" ] }, { "cell_type": "code", "execution_count": 860, "metadata": {}, "outputs": [], "source": [ "# Delete the line\n", "df_twitter_clean.drop([0], inplace=True)\n", "df_twitter_clean.drop([1], inplace=True)" ] }, { "cell_type": "code", "execution_count": 861, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>created_at</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ "Empty DataFrame\n", "Columns: [tweet_id, created_at]\n", "Index: []" ] }, "execution_count": 861, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check the removal\n", "df_twitter_clean.query('created_at > \"2017-08-01 00:00:00\"')[['tweet_id', 'created_at']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Cleaning Tidiness issue 2 : Merging the twitter enhanced archive dataframe, the twitter dataframe built from the APIs and the images predictions dataframe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Merge `df_archive_clean` with `df_twitter_clean`, and then merge the result with `df_image_clean`" ] }, { "cell_type": "code", "execution_count": 862, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2091, 9), (2335, 5), (2075, 6))" ] }, "execution_count": 862, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the sizes of off the dataframes to merge\n", "df_archive_clean.shape, df_twitter_clean.shape, df_image_clean.shape" ] }, { "cell_type": "code", "execution_count": 863, "metadata": {}, "outputs": [], "source": [ "# This approach does the job, but some rows disappeared (1962 rows as result) during the merge and we don't understand why\n", "# so we abandon it\n", "# https://stackoverflow.com/questions/23668427/pandas-three-way-joining-multiple-dataframes-on-columns\n", "# Merge 3 dataframes \n", "\n", "# Import the python reduce function from the functools package\n", "#from functools import reduce\n", "\n", "# Set the list of the dataframes we want to merge\n", "#datasets_list = [df_image_clean, df_twitter_clean[['tweet_id', 'retweet_count', 'favorite_count']], df_archive_clean]\n", "\n", "# Merge to create df_master\n", "#df_master = reduce(lambda left,right: pd.merge(left,right,on='tweet_id'), datasets_list)\n", "\n", "# Check the size\n", "#df_master.shape" ] }, { "cell_type": "code", "execution_count": 864, "metadata": {}, "outputs": [], "source": [ "# Code : Merge df_archive_clean and df_twitter_clean\n", "df_temp_tweets = df_archive_clean.merge(df_twitter_clean[['tweet_id', 'retweet_count', 'favorite_count']], how='left', on='tweet_id')" ] }, { "cell_type": "code", "execution_count": 865, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2091, 11)" ] }, "execution_count": 865, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test : we should have the same number of rows as df_archive_clean\n", "df_temp_tweets.shape" ] }, { "cell_type": "code", "execution_count": 866, "metadata": {}, "outputs": [], "source": [ "# Code : merge the temporary dataframe with df_image_clean\n", "df_master = df_image_clean.merge(df_temp_tweets, how='left', on='tweet_id')" ] }, { "cell_type": "code", "execution_count": 867, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(2075, 16)" ] }, "execution_count": 867, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test: check the size\n", "df_master.shape" ] }, { "cell_type": "code", "execution_count": 868, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "tweet_id int64 \n", "jpg_url object \n", "img_num int64 \n", "prediction object \n", "confidence float64 \n", "detectiontype object \n", "timestamp datetime64[ns]\n", "source object \n", "text object \n", "expanded_urls object \n", "rating_numerator float64 \n", "rating_denominator float64 \n", "name object \n", "stage object \n", "retweet_count float64 \n", "favorite_count float64 \n", "dtype: object" ] }, "execution_count": 868, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check df_master's columns names and types\n", "df_master.dtypes" ] }, { "cell_type": "code", "execution_count": 869, "metadata": {}, "outputs": [], "source": [ "# For our analysis, we prefer to have only one column for the rating\n", "\n", "# Calculate the rating by rating_numerator / rating_denominator, as a float\n", "def calculate_rating(row):\n", " return float(row['rating_numerator']/row['rating_denominator'])\n", "\n", "# Apply the rating function to each row\n", "df_master['rating'] = df_master.apply(calculate_rating, axis=1)" ] }, { "cell_type": "code", "execution_count": 870, "metadata": {}, "outputs": [], "source": [ "# Remove rating numerator and denominator columns\n", "df_master.drop('rating_numerator', axis=1, inplace=True)\n", "df_master.drop('rating_denominator', axis=1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 871, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>jpg_url</th>\n", " <th>img_num</th>\n", " <th>prediction</th>\n", " <th>confidence</th>\n", " <th>detectiontype</th>\n", " <th>timestamp</th>\n", " <th>source</th>\n", " <th>text</th>\n", " <th>expanded_urls</th>\n", " <th>name</th>\n", " <th>stage</th>\n", " <th>retweet_count</th>\n", " <th>favorite_count</th>\n", " <th>rating</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>617</th>\n", " <td>680206703334408192</td>\n", " <td>https://pbs.twimg.com/media/CXCUYcRW8AAObYM.jpg</td>\n", " <td>1</td>\n", " <td>Christmas_stocking</td>\n", " <td>0.149758</td>\n", " <td>other</td>\n", " <td>2015-12-25 02:01:30</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>I hope everyone enjoys this picture as much as I do. This is Toby. 12/10 https://t.co/vHnu1g9EJm</td>\n", " <td>https://twitter.com/dog_rates/status/680206703334408192/photo/1</td>\n", " <td>Toby</td>\n", " <td>None</td>\n", " <td>1246.0</td>\n", " <td>2941.0</td>\n", " <td>1.2</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>666049248165822465</td>\n", " <td>https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg</td>\n", " <td>1</td>\n", " <td>miniature_pinscher</td>\n", " <td>0.560311</td>\n", " <td>dog</td>\n", " <td>2015-11-16 00:24:50</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>Here we have a 1949 1st generation vulpix. Enjoys sweat tea and Fox News. Cannot be phased. 5/10 https://t.co/4B7cOc1EDq</td>\n", " <td>https://twitter.com/dog_rates/status/666049248165822465/photo/1</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>42.0</td>\n", " <td>105.0</td>\n", " <td>0.5</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id jpg_url \\\n", "617 680206703334408192 https://pbs.twimg.com/media/CXCUYcRW8AAObYM.jpg \n", "4 666049248165822465 https://pbs.twimg.com/media/CT5IQmsXIAAKY4A.jpg \n", "\n", " img_num prediction confidence detectiontype \\\n", "617 1 Christmas_stocking 0.149758 other \n", "4 1 miniature_pinscher 0.560311 dog \n", "\n", " timestamp \\\n", "617 2015-12-25 02:01:30 \n", "4 2015-11-16 00:24:50 \n", "\n", " source \\\n", "617 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "4 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "\n", " text \\\n", "617 I hope everyone enjoys this picture as much as I do. This is Toby. 12/10 https://t.co/vHnu1g9EJm \n", "4 Here we have a 1949 1st generation vulpix. Enjoys sweat tea and Fox News. Cannot be phased. 5/10 https://t.co/4B7cOc1EDq \n", "\n", " expanded_urls name \\\n", "617 https://twitter.com/dog_rates/status/680206703334408192/photo/1 Toby \n", "4 https://twitter.com/dog_rates/status/666049248165822465/photo/1 None \n", "\n", " stage retweet_count favorite_count rating \n", "617 None 1246.0 2941.0 1.2 \n", "4 None 42.0 105.0 0.5 " ] }, "execution_count": 871, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Observe the new dataframe\n", "df_master.sample(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='storing'></a>\n", "### Storing Cleaned Data" ] }, { "cell_type": "code", "execution_count": 872, "metadata": {}, "outputs": [], "source": [ "# Store cleaned data into csv files\n", "df_master.to_csv('twitter_archive_master.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Store the dataframes into SQLite database. \n", "We've learnt the way to do from here : https://stackoverflow.com/questions/50803109/how-to-store-pandas-dataframe-in-sqlite-db#50803252" ] }, { "cell_type": "code", "execution_count": 873, "metadata": {}, "outputs": [], "source": [ "# in case the databse already exists\n", "!rm weratedogs.sqlite" ] }, { "cell_type": "code", "execution_count": 874, "metadata": {}, "outputs": [], "source": [ "# Import the required package\n", "from sqlalchemy import create_engine\n", "\n", "# Create the engine - in memory\n", "engine = create_engine('sqlite:///weratedogs.sqlite', echo=False)\n", "\n", "# Store our dataframes into 2 tables\n", "df_master.to_sql('twitter_archive_master', con=engine)" ] }, { "cell_type": "code", "execution_count": 875, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "None 42.0\n", "Atticus 177.6\n" ] } ], "source": [ "# Test: select information from the tables\n", "# Send the request\n", "my_request = engine.execute(\"SELECT twitter_archive_master.name, twitter_archive_master.rating FROM twitter_archive_master WHERE twitter_archive_master.rating > 1.4\")\n", "\n", "# Display the response\n", "for name, rating in my_request:\n", " print(name, rating)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<a id='analysis'></a>\n", "### Analyzing and Visualizing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We would like to develop an understanding of what make a dog picture to be a success. \n", "We use categorical plots, as discovered from here : https://seaborn.pydata.org/tutorial/categorical.html#categorical-scatterplots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we would like to understand the most successful stages" ] }, { "cell_type": "code", "execution_count": 876, "metadata": {}, "outputs": [], "source": [ "# make a copy of the master dataset\n", "df_stages = df_master.copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each cell in the `stage` column contains several values separated by a ,\" character. We need to have one stage per line. Here is the approach we use:\n", "\n", "1. for each cell we remove any \",\" character at the begining or at the end\n", "2. we split the content according to the \",\" character we encounter, in order to have one column per stage\n", "3. we stack all the stages columns into one single column. So for each stage, we get additional lines into the dataset\n", "4. we rename the new column to `stacked_stages`\n", "5. we add this new column to the original dataset\n", "\n", "This way of slipping and stacking has been obtained from the Udacity's student forum, while working on a previous project.\n" ] }, { "cell_type": "code", "execution_count": 877, "metadata": {}, "outputs": [], "source": [ "# stack the copy on stage column, and get all the stages in a new column\n", "df_stages = df_stages.join(df_stages.stage.str.strip(',').str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('stacked_stages'))" ] }, { "cell_type": "code", "execution_count": 878, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pupper 233\n", "doggo 79 \n", "puppo 29 \n", "floofer 8 \n", "Name: stacked_stages, dtype: int64" ] }, "execution_count": 878, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Do we have unique stage into df_stages ?\n", "df_stages.stacked_stages.value_counts()" ] }, { "cell_type": "code", "execution_count": 879, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 576x576 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot favourite_count per stage, in swarn\n", "\n", "# visibility\n", "myplot = sns.catplot(x=\"stacked_stages\", y=\"favorite_count\", kind=\"swarm\", data=df_stages, height=8)\n", "# Set the titles\n", "myplot.set(title='Popular stages along with favourites counts', xlabel='Dogs Stages', ylabel='Number of favourites');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Insight 1 :\n", "Beyond 80 000 favourites count, we have more doggo(3) than puppo(1) and pupper(1). So it seems that it is better be a doggo to the road to the success here ! \n" ] }, { "cell_type": "code", "execution_count": 880, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pupper 73\n", "Name: stacked_stages, dtype: int64" ] }, "execution_count": 880, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Most stages in 2015\n", "df_stages.query('timestamp > \"2015-01-01 00:00:00\" and timestamp <= \"2016-01-01 00:00:00\"')['stacked_stages'].value_counts()" ] }, { "cell_type": "code", "execution_count": 881, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "pupper 138\n", "doggo 46 \n", "puppo 13 \n", "floofer 6 \n", "Name: stacked_stages, dtype: int64" ] }, "execution_count": 881, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Most stages in 2016\n", "df_stages.query('timestamp > \"2016-01-01 00:00:00\" and timestamp <= \"2017-01-01 00:00:00\"')['stacked_stages'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Doggo stage appears in 2015, but the majority of the stages were still pupper." ] }, { "cell_type": "code", "execution_count": 882, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "doggo 33\n", "pupper 22\n", "puppo 16\n", "floofer 2 \n", "Name: stacked_stages, dtype: int64" ] }, "execution_count": 882, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Most stages in 2017\n", "df_stages.query('timestamp > \"2017-01-01 00:00:00\"')['stacked_stages'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then doggo is on the rise." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Insight 2 :\n", "Clearly we have more pupper pictures posted, because pupper pictures have been posted during 2015. This is strange, but might be linked to people awareness regarding the WeRateDogs twitter account, at the beginning." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Does the rating correlated to the most favorited ?" ] }, { "cell_type": "code", "execution_count": 883, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.3 7\n", "1.2 2\n", "1.4 1\n", "Name: rating, dtype: int64" ] }, "execution_count": 883, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the rating of the most favorited\n", "df_most_favorited = df_stages.query('favorite_count > 80000')\n", "df_most_favorited.rating.value_counts()" ] }, { "cell_type": "code", "execution_count": 884, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>img_num</th>\n", " <th>confidence</th>\n", " <th>retweet_count</th>\n", " <th>favorite_count</th>\n", " <th>rating</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>count</th>\n", " <td>2.075000e+03</td>\n", " <td>2075.000000</td>\n", " <td>2075.000000</td>\n", " <td>1964.000000</td>\n", " <td>1964.000000</td>\n", " <td>1968.000000</td>\n", " </tr>\n", " <tr>\n", " <th>mean</th>\n", " <td>7.384514e+17</td>\n", " <td>1.203855</td>\n", " <td>0.547955</td>\n", " <td>2625.843177</td>\n", " <td>8642.184318</td>\n", " <td>1.163556</td>\n", " </tr>\n", " <tr>\n", " <th>std</th>\n", " <td>6.785203e+16</td>\n", " <td>0.561875</td>\n", " <td>0.297842</td>\n", " <td>4693.838058</td>\n", " <td>12689.882348</td>\n", " <td>4.090735</td>\n", " </tr>\n", " <tr>\n", " <th>min</th>\n", " <td>6.660209e+17</td>\n", " <td>1.000000</td>\n", " <td>0.000010</td>\n", " <td>11.000000</td>\n", " <td>77.000000</td>\n", " <td>0.000000</td>\n", " </tr>\n", " <tr>\n", " <th>25%</th>\n", " <td>6.764835e+17</td>\n", " <td>1.000000</td>\n", " <td>0.299295</td>\n", " <td>584.750000</td>\n", " <td>1854.750000</td>\n", " <td>1.000000</td>\n", " </tr>\n", " <tr>\n", " <th>50%</th>\n", " <td>7.119988e+17</td>\n", " <td>1.000000</td>\n", " <td>0.541780</td>\n", " <td>1259.000000</td>\n", " <td>3911.000000</td>\n", " <td>1.100000</td>\n", " </tr>\n", " <tr>\n", " <th>75%</th>\n", " <td>7.932034e+17</td>\n", " <td>1.000000</td>\n", " <td>0.820962</td>\n", " <td>3004.250000</td>\n", " <td>10806.750000</td>\n", " <td>1.200000</td>\n", " </tr>\n", " <tr>\n", " <th>max</th>\n", " <td>8.924206e+17</td>\n", " <td>4.000000</td>\n", " <td>1.000000</td>\n", " <td>82678.000000</td>\n", " <td>162549.000000</td>\n", " <td>177.600000</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id img_num confidence retweet_count favorite_count \\\n", "count 2.075000e+03 2075.000000 2075.000000 1964.000000 1964.000000 \n", "mean 7.384514e+17 1.203855 0.547955 2625.843177 8642.184318 \n", "std 6.785203e+16 0.561875 0.297842 4693.838058 12689.882348 \n", "min 6.660209e+17 1.000000 0.000010 11.000000 77.000000 \n", "25% 6.764835e+17 1.000000 0.299295 584.750000 1854.750000 \n", "50% 7.119988e+17 1.000000 0.541780 1259.000000 3911.000000 \n", "75% 7.932034e+17 1.000000 0.820962 3004.250000 10806.750000 \n", "max 8.924206e+17 4.000000 1.000000 82678.000000 162549.000000 \n", "\n", " rating \n", "count 1968.000000 \n", "mean 1.163556 \n", "std 4.090735 \n", "min 0.000000 \n", "25% 1.000000 \n", "50% 1.100000 \n", "75% 1.200000 \n", "max 177.600000 " ] }, "execution_count": 884, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# How is this rating positionned among all the others ?\n", "df_master.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Insight 3 :\n", "The most favorited tweets (meaning images) are rated high, more than the rating and in the last quartile up to the highest rate. \n", "So, basically the most favorited tweets are highly rated, which is a normal expected situation here." ] }, { "cell_type": "code", "execution_count": 885, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jlcossi/anaconda/lib/python3.6/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n", " return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 360x360 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Are they part of the most retweeted ?\n", "retweetplot = sns.catplot(x=\"stacked_stages\", y=\"retweet_count\", kind=\"bar\", data=df_most_favorited)\n", "retweetplot.set(title='Retweet count for the most favorited tweets', xlabel='Dogs Stages', ylabel='Number of retweets');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Insight 4 : \n", "We observe this plot along with the statistics summary above. We confirm that the most favorited are well positioned within the most retweeted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What are the breeds associated to the success ?" ] }, { "cell_type": "code", "execution_count": 886, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 1093x1008 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Observe the breeds\n", "breedplot = sns.catplot(x=\"prediction\", y=\"favorite_count\", hue=\"stacked_stages\", kind=\"bar\", data=df_most_favorited, height=14);\n", "breedplot.set(title='Favorited tweets and their breeds', xlabel='Dogs predicted breeds', ylabel='Number of favorited');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We do not have all the stages for the identified breeds here. \n", "Even with this small limitation, we can conclude that being a Labrador_retriever, an Eskimo_dog, a standard_poodle and a doggo might lead to a chance to be part of the most favorited by WeRateDogs members. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe in the dataset, that 2 of the 3 successful doggos were shared as videos. So this is an important factor because videos transmit emotions. \n", "So there might me other elements which are not in the scope of this study: colors and the quality of the images or videos." ] }, { "cell_type": "code", "execution_count": 887, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>tweet_id</th>\n", " <th>jpg_url</th>\n", " <th>img_num</th>\n", " <th>prediction</th>\n", " <th>confidence</th>\n", " <th>detectiontype</th>\n", " <th>timestamp</th>\n", " <th>source</th>\n", " <th>text</th>\n", " <th>expanded_urls</th>\n", " <th>name</th>\n", " <th>stage</th>\n", " <th>retweet_count</th>\n", " <th>favorite_count</th>\n", " <th>rating</th>\n", " <th>stacked_stages</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>571</th>\n", " <td>678399652199309312</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/678399528077250560/pu/img/BOjUNHRsYLeSo0hl.jpg</td>\n", " <td>1</td>\n", " <td>Bedlington_terrier</td>\n", " <td>0.015047</td>\n", " <td>dog</td>\n", " <td>2015-12-20 02:20:55</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This made my day. 12/10 please enjoy https://t.co/VRTbo3aAcm</td>\n", " <td>https://twitter.com/dog_rates/status/678399652199309312/video/1</td>\n", " <td>None</td>\n", " <td>None</td>\n", " <td>33355.0</td>\n", " <td>81543.0</td>\n", " <td>1.2</td>\n", " <td>NaN</td>\n", " </tr>\n", " <tr>\n", " <th>1186</th>\n", " <td>739238157791694849</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/739238016737267712/pu/img/-tLpyiuIzD5zR1et.jpg</td>\n", " <td>1</td>\n", " <td>Eskimo_dog</td>\n", " <td>0.503372</td>\n", " <td>dog</td>\n", " <td>2016-06-04 23:31:25</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>Here's a doggo blowing bubbles. It's downright legendary. 13/10 would watch on repeat forever (vid by Kent Duryee) https://t.co/YcXgHfp1EC</td>\n", " <td>https://twitter.com/dog_rates/status/739238157791694849/video/1</td>\n", " <td>None</td>\n", " <td>doggo</td>\n", " <td>61211.0</td>\n", " <td>120128.0</td>\n", " <td>1.3</td>\n", " <td>doggo</td>\n", " </tr>\n", " <tr>\n", " <th>1221</th>\n", " <td>744234799360020481</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/744234667679821824/pu/img/1GaWmtJtdqzZV7jy.jpg</td>\n", " <td>1</td>\n", " <td>Labrador_retriever</td>\n", " <td>0.825333</td>\n", " <td>dog</td>\n", " <td>2016-06-18 18:26:18</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>Here's a doggo realizing you can stand in a pool. 13/10 enlightened af (vid by Tina Conrad) https://t.co/7wE9LTEXC4</td>\n", " <td>https://twitter.com/dog_rates/status/744234799360020481/video/1</td>\n", " <td>None</td>\n", " <td>doggo</td>\n", " <td>82678.0</td>\n", " <td>162549.0</td>\n", " <td>1.3</td>\n", " <td>doggo</td>\n", " </tr>\n", " <tr>\n", " <th>1641</th>\n", " <td>807106840509214720</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/807106774843039744/pu/img/8XZg1xW35Xp2J6JW.jpg</td>\n", " <td>1</td>\n", " <td>Chihuahua</td>\n", " <td>0.505370</td>\n", " <td>dog</td>\n", " <td>2016-12-09 06:17:20</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Stephan. He just wants to help. 13/10 such a good boy https://t.co/DkBYaCAg2d</td>\n", " <td>https://twitter.com/dog_rates/status/807106840509214720/video/1</td>\n", " <td>Stephan</td>\n", " <td>None</td>\n", " <td>60299.0</td>\n", " <td>125650.0</td>\n", " <td>1.3</td>\n", " <td>NaN</td>\n", " </tr>\n", " <tr>\n", " <th>1715</th>\n", " <td>819004803107983360</td>\n", " <td>https://pbs.twimg.com/media/C12whDoVEAALRxa.jpg</td>\n", " <td>1</td>\n", " <td>standard_poodle</td>\n", " <td>0.351308</td>\n", " <td>dog</td>\n", " <td>2017-01-11 02:15:36</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Bo. He was a very good First Doggo. 14/10 would be an absolute honor to pet https://t.co/AdPKrI8BZ1</td>\n", " <td>https://twitter.com/dog_rates/status/819004803107983360/photo/1</td>\n", " <td>Bo</td>\n", " <td>doggo</td>\n", " <td>39660.0</td>\n", " <td>91294.0</td>\n", " <td>1.4</td>\n", " <td>doggo</td>\n", " </tr>\n", " <tr>\n", " <th>1744</th>\n", " <td>822872901745569793</td>\n", " <td>https://pbs.twimg.com/media/C2tugXLXgAArJO4.jpg</td>\n", " <td>1</td>\n", " <td>Lakeland_terrier</td>\n", " <td>0.196015</td>\n", " <td>dog</td>\n", " <td>2017-01-21 18:26:02</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>Here's a super supportive puppo participating in the Toronto #WomensMarch today. 13/10 https://t.co/nTz3FtorBc</td>\n", " <td>https://twitter.com/dog_rates/status/822872901745569793/photo/1</td>\n", " <td>None</td>\n", " <td>puppo</td>\n", " <td>47136.0</td>\n", " <td>138899.0</td>\n", " <td>1.3</td>\n", " <td>puppo</td>\n", " </tr>\n", " <tr>\n", " <th>1932</th>\n", " <td>859196978902773760</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/859196962498805762/pu/img/-yBpr4-o4GJZECYE.jpg</td>\n", " <td>1</td>\n", " <td>malamute</td>\n", " <td>0.216163</td>\n", " <td>dog</td>\n", " <td>2017-05-02 00:04:57</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>We only rate dogs. This is quite clearly a smol broken polar bear. We'd appreciate if you only send dogs. Thank you... 12/10 https://t.co/g2nSyGenG9</td>\n", " <td>https://twitter.com/dog_rates/status/859196978902773760/video/1</td>\n", " <td>quite</td>\n", " <td>None</td>\n", " <td>30403.0</td>\n", " <td>89782.0</td>\n", " <td>1.2</td>\n", " <td>NaN</td>\n", " </tr>\n", " <tr>\n", " <th>1961</th>\n", " <td>866450705531457537</td>\n", " <td>https://pbs.twimg.com/media/DAZAUfBXcAAG_Nn.jpg</td>\n", " <td>2</td>\n", " <td>French_bulldog</td>\n", " <td>0.905334</td>\n", " <td>dog</td>\n", " <td>2017-05-22 00:28:40</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Jamesy. He gives a kiss to every other pupper he sees on his walk. 13/10 such passion, much tender https://t.co/wk7TfysWHr</td>\n", " <td>https://twitter.com/dog_rates/status/866450705531457537/photo/1</td>\n", " <td>Jamesy</td>\n", " <td>pupper</td>\n", " <td>35037.0</td>\n", " <td>120747.0</td>\n", " <td>1.3</td>\n", " <td>pupper</td>\n", " </tr>\n", " <tr>\n", " <th>1977</th>\n", " <td>870374049280663552</td>\n", " <td>https://pbs.twimg.com/media/DBQwlFCXkAACSkI.jpg</td>\n", " <td>1</td>\n", " <td>golden_retriever</td>\n", " <td>0.841001</td>\n", " <td>dog</td>\n", " <td>2017-06-01 20:18:38</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Zoey. She really likes the planet. Would hate to see willful ignorance and the denial of fairly elemental science destroy it. 13/10 https://t.co/T1xlgaPujm</td>\n", " <td>https://twitter.com/dog_rates/status/870374049280663552/photo/1</td>\n", " <td>Zoey</td>\n", " <td>None</td>\n", " <td>25805.0</td>\n", " <td>81213.0</td>\n", " <td>1.3</td>\n", " <td>NaN</td>\n", " </tr>\n", " <tr>\n", " <th>2014</th>\n", " <td>879415818425184262</td>\n", " <td>https://pbs.twimg.com/ext_tw_video_thumb/879415784908390401/pu/img/cX7XI1TnUsseGET5.jpg</td>\n", " <td>1</td>\n", " <td>English_springer</td>\n", " <td>0.383404</td>\n", " <td>dog</td>\n", " <td>2017-06-26 19:07:24</td>\n", " <td><a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a></td>\n", " <td>This is Duddles. He did an attempt. 13/10 someone help him (vid by Georgia Felici) https://t.co/UDT7ZkcTgY</td>\n", " <td>https://twitter.com/dog_rates/status/879415818425184262/video/1</td>\n", " <td>Duddles</td>\n", " <td>None</td>\n", " <td>42962.0</td>\n", " <td>103018.0</td>\n", " <td>1.3</td>\n", " <td>NaN</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " tweet_id \\\n", "571 678399652199309312 \n", "1186 739238157791694849 \n", "1221 744234799360020481 \n", "1641 807106840509214720 \n", "1715 819004803107983360 \n", "1744 822872901745569793 \n", "1932 859196978902773760 \n", "1961 866450705531457537 \n", "1977 870374049280663552 \n", "2014 879415818425184262 \n", "\n", " jpg_url \\\n", "571 https://pbs.twimg.com/ext_tw_video_thumb/678399528077250560/pu/img/BOjUNHRsYLeSo0hl.jpg \n", "1186 https://pbs.twimg.com/ext_tw_video_thumb/739238016737267712/pu/img/-tLpyiuIzD5zR1et.jpg \n", "1221 https://pbs.twimg.com/ext_tw_video_thumb/744234667679821824/pu/img/1GaWmtJtdqzZV7jy.jpg \n", "1641 https://pbs.twimg.com/ext_tw_video_thumb/807106774843039744/pu/img/8XZg1xW35Xp2J6JW.jpg \n", "1715 https://pbs.twimg.com/media/C12whDoVEAALRxa.jpg \n", "1744 https://pbs.twimg.com/media/C2tugXLXgAArJO4.jpg \n", "1932 https://pbs.twimg.com/ext_tw_video_thumb/859196962498805762/pu/img/-yBpr4-o4GJZECYE.jpg \n", "1961 https://pbs.twimg.com/media/DAZAUfBXcAAG_Nn.jpg \n", "1977 https://pbs.twimg.com/media/DBQwlFCXkAACSkI.jpg \n", "2014 https://pbs.twimg.com/ext_tw_video_thumb/879415784908390401/pu/img/cX7XI1TnUsseGET5.jpg \n", "\n", " img_num prediction confidence detectiontype \\\n", "571 1 Bedlington_terrier 0.015047 dog \n", "1186 1 Eskimo_dog 0.503372 dog \n", "1221 1 Labrador_retriever 0.825333 dog \n", "1641 1 Chihuahua 0.505370 dog \n", "1715 1 standard_poodle 0.351308 dog \n", "1744 1 Lakeland_terrier 0.196015 dog \n", "1932 1 malamute 0.216163 dog \n", "1961 2 French_bulldog 0.905334 dog \n", "1977 1 golden_retriever 0.841001 dog \n", "2014 1 English_springer 0.383404 dog \n", "\n", " timestamp \\\n", "571 2015-12-20 02:20:55 \n", "1186 2016-06-04 23:31:25 \n", "1221 2016-06-18 18:26:18 \n", "1641 2016-12-09 06:17:20 \n", "1715 2017-01-11 02:15:36 \n", "1744 2017-01-21 18:26:02 \n", "1932 2017-05-02 00:04:57 \n", "1961 2017-05-22 00:28:40 \n", "1977 2017-06-01 20:18:38 \n", "2014 2017-06-26 19:07:24 \n", "\n", " source \\\n", "571 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1186 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1221 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1641 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1715 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1744 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1932 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1961 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "1977 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "2014 <a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a> \n", "\n", " text \\\n", "571 This made my day. 12/10 please enjoy https://t.co/VRTbo3aAcm \n", "1186 Here's a doggo blowing bubbles. It's downright legendary. 13/10 would watch on repeat forever (vid by Kent Duryee) https://t.co/YcXgHfp1EC \n", "1221 Here's a doggo realizing you can stand in a pool. 13/10 enlightened af (vid by Tina Conrad) https://t.co/7wE9LTEXC4 \n", "1641 This is Stephan. He just wants to help. 13/10 such a good boy https://t.co/DkBYaCAg2d \n", "1715 This is Bo. He was a very good First Doggo. 14/10 would be an absolute honor to pet https://t.co/AdPKrI8BZ1 \n", "1744 Here's a super supportive puppo participating in the Toronto #WomensMarch today. 13/10 https://t.co/nTz3FtorBc \n", "1932 We only rate dogs. This is quite clearly a smol broken polar bear. We'd appreciate if you only send dogs. Thank you... 12/10 https://t.co/g2nSyGenG9 \n", "1961 This is Jamesy. He gives a kiss to every other pupper he sees on his walk. 13/10 such passion, much tender https://t.co/wk7TfysWHr \n", "1977 This is Zoey. She really likes the planet. Would hate to see willful ignorance and the denial of fairly elemental science destroy it. 13/10 https://t.co/T1xlgaPujm \n", "2014 This is Duddles. He did an attempt. 13/10 someone help him (vid by Georgia Felici) https://t.co/UDT7ZkcTgY \n", "\n", " expanded_urls \\\n", "571 https://twitter.com/dog_rates/status/678399652199309312/video/1 \n", "1186 https://twitter.com/dog_rates/status/739238157791694849/video/1 \n", "1221 https://twitter.com/dog_rates/status/744234799360020481/video/1 \n", "1641 https://twitter.com/dog_rates/status/807106840509214720/video/1 \n", "1715 https://twitter.com/dog_rates/status/819004803107983360/photo/1 \n", "1744 https://twitter.com/dog_rates/status/822872901745569793/photo/1 \n", "1932 https://twitter.com/dog_rates/status/859196978902773760/video/1 \n", "1961 https://twitter.com/dog_rates/status/866450705531457537/photo/1 \n", "1977 https://twitter.com/dog_rates/status/870374049280663552/photo/1 \n", "2014 https://twitter.com/dog_rates/status/879415818425184262/video/1 \n", "\n", " name stage retweet_count favorite_count rating stacked_stages \n", "571 None None 33355.0 81543.0 1.2 NaN \n", "1186 None doggo 61211.0 120128.0 1.3 doggo \n", "1221 None doggo 82678.0 162549.0 1.3 doggo \n", "1641 Stephan None 60299.0 125650.0 1.3 NaN \n", "1715 Bo doggo 39660.0 91294.0 1.4 doggo \n", "1744 None puppo 47136.0 138899.0 1.3 puppo \n", "1932 quite None 30403.0 89782.0 1.2 NaN \n", "1961 Jamesy pupper 35037.0 120747.0 1.3 pupper \n", "1977 Zoey None 25805.0 81213.0 1.3 NaN \n", "2014 Duddles None 42962.0 103018.0 1.3 NaN " ] }, "execution_count": 887, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The favorited tweets, including the breeds\n", "df_most_favorited" ] }, { "cell_type": "code", "execution_count": 888, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 888, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate the HTML version of this notebook\n", "from subprocess import call\n", "call(['python', '-m', 'nbconvert', 'Wrangle_act.ipynb'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }