Skip to content

Instantly share code, notes, and snippets.

@jrjames83
Created June 18, 2018 14:11
Show Gist options
  • Save jrjames83/eb4b3db3b0e94a1847802193ba5d8ff8 to your computer and use it in GitHub Desktop.
Save jrjames83/eb4b3db3b0e94a1847802193ba5d8ff8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from config import * # YOUR DATA WILL NOT EXIST, SEE BELOW to get your tokens\n",
"import pandas as pd\n",
"import tweepy\n",
"\n",
"\n",
"# Signup for twitter, make sure you add your cell phone\n",
"# login at apps.twitter.com, register an application \n",
"# get the consumer secrets and application sccrets (4 total tokens)\n",
"# I am importing * from config, which contains 4 variables, which I use below in def authenticate\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def authenticate():\n",
" auth = tweepy.OAuthHandler(consumer_key, consumer_secret)\n",
" auth.set_access_token(access_token, access_secret)\n",
" api = tweepy.API(auth)\n",
" return api"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"api = authenticate()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"trump_tweets = []\n",
"\n",
"tweets = api.user_timeline(screen_name=\"realDonaldTrump\",count=20)\n",
"for info in tweets:\n",
" trump_tweets.append(info)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"20"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(trump_tweets)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'contributors': None,\n",
" 'coordinates': None,\n",
" 'created_at': 'Mon Jun 18 12:46:07 +0000 2018',\n",
" 'entities': {'hashtags': [],\n",
" 'symbols': [],\n",
" 'urls': [{'display_url': 'twitter.com/i/web/status/1…',\n",
" 'expanded_url': 'https://twitter.com/i/web/status/1008692333771132929',\n",
" 'indices': [117, 140],\n",
" 'url': 'https://t.co/UxvDtVF6cS'}],\n",
" 'user_mentions': []},\n",
" 'favorite_count': 3782,\n",
" 'favorited': False,\n",
" 'geo': None,\n",
" 'id': 1008692333771132929,\n",
" 'id_str': '1008692333771132929',\n",
" 'in_reply_to_screen_name': None,\n",
" 'in_reply_to_status_id': None,\n",
" 'in_reply_to_status_id_str': None,\n",
" 'in_reply_to_user_id': None,\n",
" 'in_reply_to_user_id_str': None,\n",
" 'is_quote_status': False,\n",
" 'lang': 'en',\n",
" 'place': None,\n",
" 'retweet_count': 1102,\n",
" 'retweeted': False,\n",
" 'source': '<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>',\n",
" 'text': 'Why don’t the Democrats give us the votes to fix the world’s worst immigration laws? Where is the outcry for the ki… https://t.co/UxvDtVF6cS',\n",
" 'truncated': True,\n",
" 'user': {'contributors_enabled': False,\n",
" 'created_at': 'Wed Mar 18 13:46:38 +0000 2009',\n",
" 'default_profile': False,\n",
" 'default_profile_image': False,\n",
" 'description': '45th President of the United States of America🇺🇸',\n",
" 'entities': {'description': {'urls': []},\n",
" 'url': {'urls': [{'display_url': 'Instagram.com/realDonaldTrump',\n",
" 'expanded_url': 'http://www.Instagram.com/realDonaldTrump',\n",
" 'indices': [0, 23],\n",
" 'url': 'https://t.co/OMxB0xp8tD'}]}},\n",
" 'favourites_count': 25,\n",
" 'follow_request_sent': False,\n",
" 'followers_count': 52854927,\n",
" 'following': False,\n",
" 'friends_count': 46,\n",
" 'geo_enabled': True,\n",
" 'has_extended_profile': False,\n",
" 'id': 25073877,\n",
" 'id_str': '25073877',\n",
" 'is_translation_enabled': True,\n",
" 'is_translator': False,\n",
" 'lang': 'en',\n",
" 'listed_count': 89411,\n",
" 'location': 'Washington, DC',\n",
" 'name': 'Donald J. Trump',\n",
" 'notifications': False,\n",
" 'profile_background_color': '6D5C18',\n",
" 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png',\n",
" 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png',\n",
" 'profile_background_tile': True,\n",
" 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/25073877/1528585804',\n",
" 'profile_image_url': 'http://pbs.twimg.com/profile_images/874276197357596672/kUuht00m_normal.jpg',\n",
" 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/874276197357596672/kUuht00m_normal.jpg',\n",
" 'profile_link_color': '1B95E0',\n",
" 'profile_sidebar_border_color': 'BDDCAD',\n",
" 'profile_sidebar_fill_color': 'C5CEC0',\n",
" 'profile_text_color': '333333',\n",
" 'profile_use_background_image': True,\n",
" 'protected': False,\n",
" 'screen_name': 'realDonaldTrump',\n",
" 'statuses_count': 37896,\n",
" 'time_zone': None,\n",
" 'translator_type': 'regular',\n",
" 'url': 'https://t.co/OMxB0xp8tD',\n",
" 'utc_offset': None,\n",
" 'verified': True}}"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trump_tweets[0]._json # since the Status class will nto be a traditional dict, we can use the ._json property"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# What if we need more than 20 tweets? Keep in mind there are rate limits and absolute limits\n",
"# Let's get at least 2000, if you try and get a very high number, you'll hit a rate limit\n",
"more_tweets = []\n",
"\n",
"for tweet in tweepy.Cursor(api.user_timeline,id='realDonaldTrump').items(2000):\n",
" more_tweets.append(tweet)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2000"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(more_tweets)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Analysze typical time between tweets\n",
"from datetime import datetime"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>contributors</th>\n",
" <th>coordinates</th>\n",
" <th>created_at</th>\n",
" <th>entities</th>\n",
" <th>extended_entities</th>\n",
" <th>favorite_count</th>\n",
" <th>favorited</th>\n",
" <th>geo</th>\n",
" <th>id</th>\n",
" <th>id_str</th>\n",
" <th>...</th>\n",
" <th>quoted_status</th>\n",
" <th>quoted_status_id</th>\n",
" <th>quoted_status_id_str</th>\n",
" <th>retweet_count</th>\n",
" <th>retweeted</th>\n",
" <th>retweeted_status</th>\n",
" <th>source</th>\n",
" <th>text</th>\n",
" <th>truncated</th>\n",
" <th>user</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>Mon Jun 18 13:02:43 +0000 2018</td>\n",
" <td>{'hashtags': [], 'symbols': [], 'user_mentions...</td>\n",
" <td>NaN</td>\n",
" <td>17</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" <td>1008696508697513985</td>\n",
" <td>1008696508697513985</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>18</td>\n",
" <td>False</td>\n",
" <td>NaN</td>\n",
" <td>&lt;a href=\"http://twitter.com/download/iphone\" r...</td>\n",
" <td>The people of Germany are turning against thei...</td>\n",
" <td>True</td>\n",
" <td>{'id': 25073877, 'id_str': '25073877', 'name':...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>Mon Jun 18 12:46:07 +0000 2018</td>\n",
" <td>{'hashtags': [], 'symbols': [], 'user_mentions...</td>\n",
" <td>NaN</td>\n",
" <td>13364</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" <td>1008692333771132929</td>\n",
" <td>1008692333771132929</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>3837</td>\n",
" <td>False</td>\n",
" <td>NaN</td>\n",
" <td>&lt;a href=\"http://twitter.com/download/iphone\" r...</td>\n",
" <td>Why don’t the Democrats give us the votes to f...</td>\n",
" <td>True</td>\n",
" <td>{'id': 25073877, 'id_str': '25073877', 'name':...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2 rows × 29 columns</p>\n",
"</div>"
],
"text/plain": [
" contributors coordinates created_at \\\n",
"0 None None Mon Jun 18 13:02:43 +0000 2018 \n",
"1 None None Mon Jun 18 12:46:07 +0000 2018 \n",
"\n",
" entities extended_entities \\\n",
"0 {'hashtags': [], 'symbols': [], 'user_mentions... NaN \n",
"1 {'hashtags': [], 'symbols': [], 'user_mentions... NaN \n",
"\n",
" favorite_count favorited geo id id_str \\\n",
"0 17 False None 1008696508697513985 1008696508697513985 \n",
"1 13364 False None 1008692333771132929 1008692333771132929 \n",
"\n",
" ... quoted_status \\\n",
"0 ... NaN \n",
"1 ... NaN \n",
"\n",
" quoted_status_id quoted_status_id_str retweet_count retweeted \\\n",
"0 NaN NaN 18 False \n",
"1 NaN NaN 3837 False \n",
"\n",
" retweeted_status source \\\n",
"0 NaN <a href=\"http://twitter.com/download/iphone\" r... \n",
"1 NaN <a href=\"http://twitter.com/download/iphone\" r... \n",
"\n",
" text truncated \\\n",
"0 The people of Germany are turning against thei... True \n",
"1 Why don’t the Democrats give us the votes to f... True \n",
"\n",
" user \n",
"0 {'id': 25073877, 'id_str': '25073877', 'name':... \n",
"1 {'id': 25073877, 'id_str': '25073877', 'name':... \n",
"\n",
"[2 rows x 29 columns]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.DataFrame([x._json for x in more_tweets]) # since we have a list of dictionaries\n",
"# why not use pandas\n",
"df.head(2)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mon Jun 18 13:02:43 +0000 2018\n"
]
},
{
"data": {
"text/plain": [
"datetime.datetime(2018, 6, 18, 13, 2, 43)"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# How do we get this into a date? Since it's a string\n",
"\n",
"print(df.iloc[0].created_at) # The date we're given (it is a string)\n",
"# https://stackoverflow.com/questions/7703865/going-from-twitter-date-to-python-datetime-date\n",
"\n",
"# Convert it to a datetime object\n",
"datetime.strptime(df.iloc[0].created_at,'%a %b %d %H:%M:%S +0000 %Y')"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"# Write a function to handle this \n",
"\n",
"def convert_twitter_created_at_to_datetime(string_time):\n",
" return datetime.strptime(string_time,'%a %b %d %H:%M:%S +0000 %Y')"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>contributors</th>\n",
" <th>coordinates</th>\n",
" <th>created_at</th>\n",
" <th>entities</th>\n",
" <th>extended_entities</th>\n",
" <th>favorite_count</th>\n",
" <th>favorited</th>\n",
" <th>geo</th>\n",
" <th>id</th>\n",
" <th>id_str</th>\n",
" <th>...</th>\n",
" <th>quoted_status_id</th>\n",
" <th>quoted_status_id_str</th>\n",
" <th>retweet_count</th>\n",
" <th>retweeted</th>\n",
" <th>retweeted_status</th>\n",
" <th>source</th>\n",
" <th>text</th>\n",
" <th>truncated</th>\n",
" <th>user</th>\n",
" <th>created_date</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>Mon Jun 18 13:02:43 +0000 2018</td>\n",
" <td>{'hashtags': [], 'symbols': [], 'user_mentions...</td>\n",
" <td>NaN</td>\n",
" <td>17</td>\n",
" <td>False</td>\n",
" <td>None</td>\n",
" <td>1008696508697513985</td>\n",
" <td>1008696508697513985</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>18</td>\n",
" <td>False</td>\n",
" <td>NaN</td>\n",
" <td>&lt;a href=\"http://twitter.com/download/iphone\" r...</td>\n",
" <td>The people of Germany are turning against thei...</td>\n",
" <td>True</td>\n",
" <td>{'id': 25073877, 'id_str': '25073877', 'name':...</td>\n",
" <td>2018-06-18 13:02:43</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1 rows × 30 columns</p>\n",
"</div>"
],
"text/plain": [
" contributors coordinates created_at \\\n",
"0 None None Mon Jun 18 13:02:43 +0000 2018 \n",
"\n",
" entities extended_entities \\\n",
"0 {'hashtags': [], 'symbols': [], 'user_mentions... NaN \n",
"\n",
" favorite_count favorited geo id id_str \\\n",
"0 17 False None 1008696508697513985 1008696508697513985 \n",
"\n",
" ... quoted_status_id quoted_status_id_str retweet_count \\\n",
"0 ... NaN NaN 18 \n",
"\n",
" retweeted retweeted_status \\\n",
"0 False NaN \n",
"\n",
" source \\\n",
"0 <a href=\"http://twitter.com/download/iphone\" r... \n",
"\n",
" text truncated \\\n",
"0 The people of Germany are turning against thei... True \n",
"\n",
" user created_date \n",
"0 {'id': 25073877, 'id_str': '25073877', 'name':... 2018-06-18 13:02:43 \n",
"\n",
"[1 rows x 30 columns]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['created_date'] = df.created_at.map(convert_twitter_created_at_to_datetime)\n",
"df.head(1)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(Timestamp('2018-06-18 13:02:43'), Timestamp('2018-06-18 12:46:07')),\n",
" (Timestamp('2018-06-18 12:46:07'), Timestamp('2018-06-18 01:03:52')),\n",
" (Timestamp('2018-06-18 01:03:52'), Timestamp('2018-06-18 00:49:01')),\n",
" (Timestamp('2018-06-18 00:49:01'), Timestamp('2018-06-18 00:42:04')),\n",
" (Timestamp('2018-06-18 00:42:04'), Timestamp('2018-06-18 00:25:53')),\n",
" (Timestamp('2018-06-18 00:25:53'), Timestamp('2018-06-17 16:55:13')),\n",
" (Timestamp('2018-06-17 16:55:13'), Timestamp('2018-06-17 14:54:53')),\n",
" (Timestamp('2018-06-17 14:54:53'), Timestamp('2018-06-17 14:37:03')),\n",
" (Timestamp('2018-06-17 14:37:03'), Timestamp('2018-06-17 14:36:44')),\n",
" (Timestamp('2018-06-17 14:36:44'), Timestamp('2018-06-17 14:36:35'))]"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Typical time between tweets? could use df.shift, but let's be more bare metal\n",
"\n",
"tweet_time_diffs = list(zip(df.created_date.tolist()[0:], df.created_date.tolist()[1:] ))\n",
"tweet_time_diffs[:10]\n"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 days 00:16:36\n",
"0 days 11:42:15\n",
"0 days 00:14:51\n",
"0 days 00:06:57\n",
"0 days 00:16:11\n",
"0 days 07:30:40\n",
"0 days 02:00:20\n",
"0 days 00:17:50\n",
"0 days 00:00:19\n",
"0 days 00:00:09\n"
]
}
],
"source": [
"# How let's get the time difference between each one\n",
"for curtime, nextime in tweet_time_diffs[:10]:\n",
" print(curtime - nextime)\n",
" # Now, how to convert this to a number of hours"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"16\n",
"702\n",
"14\n",
"6\n",
"16\n",
"450\n",
"120\n",
"17\n",
"0\n",
"0\n"
]
}
],
"source": [
"# How let's get the time difference between each one\n",
"for curtime, nextime in tweet_time_diffs[:10]:\n",
" print((curtime - nextime).seconds // 60) # the diff returns a TimeDelta object, seconds // 60 == minutes!"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# So now let's track all the diffs\n",
"all_diffs = []\n",
"\n",
"# How let's get the time difference between each one\n",
"for curtime, nextime in tweet_time_diffs:\n",
" time_dif = (curtime - nextime).seconds // 60\n",
" all_diffs.append(time_dif)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"# Analyze the distribution of the time differences\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x11437c1d0>"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nkQj5/yu2EnoeQum0AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x114486f98>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.distplot(np.array(all_diffs))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment