How does @realDonaldTrump (Donald J. Trump) tweet? Before the President-elect became the president-elect, I didn’t pay much attention to his tweets, but I did know that he seemed to have a unique style of writing them. To me, it felt like he tweeted like he spoke in public. But what was that tone or Trump brand?
From a quick glance of his account, the usage of exclamation points seemed prominent. I wondered if that was consistent, and I wondered what else I could find. So I ran an analysis Trump’s tweets as well as @HillaryClinton, @CNN and @FoxNews’ for some comparison.
My strategy for selecting the accounts:
- Find another individual user’s account with opposing views, but who had some similar goals over the last year + (to be come President of the United States)
- Compare the individual users’ accounts with “objective” news sources’ Twitter accounts. Since source objectivity is always a topic of hot debate (or a hot topic of debate), I took @CNN and @FoxNews.
The Method
- Pull as many of Trump’s Tweets as I could via Twitter API. The best service to perform this operation is /user_timeline. You can only get the last 3,200 tweets from any particular user handle, which is unfortunate because plenty of accounts have authored far more than 3,200 tweets (e.g. Trump has written over 30,000 tweets).
- Take the tweets and do some Natural Language Processing with Python’s NLTK.
- Get the parts of speech tags for every word in every tweet
- Do word frequency counts
- Classify the sentiment of the tweets
Classify the reading level or difficulty of each word. Determine the reading level of the account.- I didn’t implement this. I started, but then I got distracted.
- Pull out an aggregate view of some other interesting tweet data, like #HASHTAG usage.
- Compare data.
And Now, The Data
Punctuation! Punctuation! Punctuation! Trumpunctuation?
If you’ve seen Trump speak, you probably may have noticed his strong intonations and general emphatic demeanor. His tweets seem to capture this partially through punctuation alone. His words are sprinkled with the strongest punctuation mark in the English language, the exclamation mark.
“!” occurs 2336 times over 3200 Trump tweets.
And “!” occurs at least once 1954 times over 3200 Trump tweets.
Which means that 61% of Trump’s tweets contain an exclamation mark (based on my 3200 tweet dataset). This seemed astonishingly high; when I first pulled this I thought my code was incorrect. So I opened my file of tweets and eyeballed it to confirm. I figured if 60+ % of tweets contained an exclamation mark, then it would be easy to confirm my sanity (or lack thereof) from the text file.
The highest frequency of “!” in a single tweet was five. And that occurred in the following tweet:
“#WheresHillary? Sleeping!!!!!”
Which was Retweeted 27,158 times and Favorited 61,084 times. Created on August 20, 2016.
Here’s the !!!! comparison among the entire group:
@realDonaldTrump Absolute Count (!) | @HillaryClinton Absolute Count (!) | @CNN Absolute Count (!) | @FoxNews Absolute Count (!) |
---|---|---|---|
2336 | 171 | 43 | 134 |
Adjectives Are Very Great
Trump’s top twenty favorite adjectives are listed below, along with the top 20 adjectives from the comparison group. It’s not really a surprise that “great” was number one for Trump because, among other things, his campaign’s slogan was “Make America Great Again.” Notably, I removed stopwords and only grabbed lowercase words to help filter out some noise from the data. Relative frequency is the percentage relative to the other adjectives in the dataset.
trump_word | abs_frequency | rel_frequency |
---|---|---|
great | 211 | 4.953052 |
bad | 81 | 1.901408 |
many | 81 | 1.901408 |
big | 77 | 1.807512 |
last | 66 | 1.549296 |
new | 56 | 1.314554 |
good | 50 | 1.173709 |
much | 34 | 0.798122 |
amazing | 32 | 0.751174 |
total | 30 | 0.704225 |
wonderful | 30 | 0.704225 |
nice | 27 | 0.633803 |
massive | 25 | 0.586854 |
first | 25 | 0.586854 |
presidential | 23 | 0.539906 |
Below is the list of top 20 adjectives from @realDonaldTrump, @HillaryClinton, @CNN, @FoxNews from their last 3200 tweets.
General Sentiment of Tweets
To calculate the sentiment of the tweets, I used a function in the nltk library called demo_liu_hu_lexicon() which classifies each word of the sentence as Positive, Negative, or Neutral, and then does a basic count of each word-classification category. Whichever group has the highest count is how the text will get assigned. There are definitely better ways to do this. I considered an integration with IBM’s Watson, but time was doing its thing, being time, and being of the essence and such.
@realDonaldTrump | @HillaryClinton | @CNN | @FoxNews | |
---|---|---|---|---|
Positive | 0.463750 | 0.468750 | 0.304688 | 0.235625 |
Neutral | 0.285313 | 0.401875 | 0.425938 | 0.455937 |
Negative | 0.250937 | 0.129375 | 0.269375 | 0.308437 |
Top Hashtags
This section contains a top 5 hashtag summary table for the entire analysis group, and also has the top 20 hashtags for each account listed afterward. You can infer what you will from this data.
I did find it interesting that the top-used hashtag by Trump was one of self-promotion, and Hillary Clinton used a lot of hashtags relating to the debates. Just looking at the hashtag data makes me think that Trump’s social media strategy was much stronger throughout the campaign.
In addition, all four Twitter accounts had at least one hashtag with “Trump” in it. From a marketing perspective, that’s good brand awareness.
Top 5 Hashtag Summaries
@realDonaldTrump Top 5 Hashtags | @HillaryClinton Top 5 Hashtags | @CNN Top 5 Hashtags | @FoxNews Top 5 Hashtags |
---|---|---|---|
#Trump2016, #MakeAmericaGreatAgain, #MAGA, #AmericaFirst, #DrainTheSwamp | #DebateNight, #DemsInPhilly, #VPDebate, #RNCinCLE, #debate | #CNNHeroes, #CNNSOTU, #Aleppo, #CNNNYE, #JadonAndAnias | #KellyFile, #Trump, #FoxNews2017, #Hannity, #Christmas |
@realDonaldTrump Hashtags
abs_frequency | hashtag | rel_frequency_pct |
---|---|---|
238 | Trump2016 | 15.130324 |
202 | MakeAmericaGreatAgain | 12.841704 |
111 | MAGA | 7.056580 |
79 | AmericaFirst | 5.022250 |
78 | DrainTheSwamp | 4.958678 |
57 | ImWithYou | 3.623649 |
57 | BigLeagueTruth | 3.623649 |
53 | VoteTrump | 3.369358 |
38 | CrookedHillary | 2.415766 |
36 | Debate | 2.288620 |
35 | TrumpTrain | 2.225048 |
34 | TrumpPence16 | 2.161475 |
24 | Debates2016 | 1.525747 |
22 | ICYMI | 1.398601 |
20 | SuperTuesday | 1.271456 |
18 | VPDebate | 1.144310 |
15 | RNCinCLE | 0.953592 |
14 | Debates | 0.890019 |
13 | WIPrimary | 0.826446 |
12 | ThankYouTour2016 | 0.762873 |
Below are the top hashtags for the entire group.
It’s also worth sharing how many total hashtags were used in the last 3200 tweets of each Twitter account in the dataset group:
@realDonaldTrump | @HillaryClinton | @CNN | @FoxNews | |
---|---|---|---|---|
total_hashtags_used | 1573 | 482 | 143 | 810 |
Top Favorited Tweets
Top Favorited of @realDonaldTrump
text | favorite_count | created_at |
---|---|---|
Such a beautiful and important evening! The forgotten man and woman will never be forgotten again. We will all come together as never before | 639428 | Wed Nov 09 11:36:58 +0000 2016 |
TODAY WE MAKE AMERICA GREAT AGAIN! | 577008 | Tue Nov 08 11:43:14 +0000 2016 |
How long did it take your staff of 823 people to think that up–and where are your 33,000 emails that you deleted? https://t.co/gECLNtQizQ | 296236 | Thu Jun 09 20:40:32 +0000 2016 |
The media is spending more time doing a forensic analysis of Melania\’s speech than the FBI spent on Hillary\’s emails. | 248370 | Wed Jul 20 15:36:06 +0000 2016 |
Just had a very open and successful presidential election. Now professional protesters, incited by the media, are protesting. Very unfair! | 234619 | Fri Nov 11 02:19:44 +0000 2016 |
Love the fact that the small groups of protesters last night have passion for our great country. We will all come together and be proud! | 224497 | Fri Nov 11 11:14:20 +0000 2016 |
Nobody should be allowed to burn the American flag – if they do, there must be consequences – perhaps loss of citizenship or year in jail! | 216064 | Tue Nov 29 11:55:13 +0000 2016 |
Fidel Castro is dead! | 212487 | Sat Nov 26 13:08:11 +0000 2016 |
This will prove to be a great time in the lives of ALL Americans. We will unite and we will win, win, win! | 204239 | Sat Nov 12 15:05:33 +0000 2016 |
A fantastic day in D.C. Met with President Obama for first time. Really good meeting, great chemistry. Melania liked Mrs. O a lot! | 194927 | Fri Nov 11 02:10:46 +0000 2016 |
Top Favorited of @HillaryClinton
text | favorite_count | created_at |
---|---|---|
“I never said that.” \u2014Donald Trump, who said that. #debatenight https://t.co/6T8qV2HCbL | 160098 | Tue Sep 27 01:19:47 +0000 2016 |
Where was this kind of comedy last night? https://t.co/71JhLG55G5 | 134956 | Fri Oct 21 17:51:34 +0000 2016 |
“Trump just criticized me for preparing for this debate. You know what else I prepared for? Being president.” #DebateNight | 112647 | Tue Sep 27 02:01:59 +0000 2016 |
Women have the power to stop Trump.\\n\\nhttps://t.co/tTgeqy51PU\\nhttps://t.co/VH3woeAf9Q https://t.co/NjvbkPsjPR | 111546 | Fri Oct 07 23:54:35 +0000 2016 |
“Nobody respects women more than me.” \u2014Donald Trump earlier tonight\\n\\n”Such a nasty woman.” \u2014Donald Trump just now #DebateNight | 108114 | Thu Oct 20 02:36:56 +0000 2016 |
Don\’t stand still. Vote today: https://t.co/jfd3CXLD1s #ElectionDay #MannequinChallenge https://t.co/4KAv2zu0rd | 95882 | Tue Nov 08 11:47:18 +0000 2016 |
Happy birthday to this future president. https://t.co/JT3HiBjYdj | 94281 | Wed Oct 26 13:03:18 +0000 2016 |
RT if you\u2019re proud of Hillary tonight. #DebateNight #SheWon https://t.co/H7CJep7APX | 93121 | Thu Oct 20 02:37:43 +0000 2016 |
RT this if you\’re proud to be standing with Hillary tonight. #debatenight https://t.co/91tBmKxVMs | 92721 | Tue Sep 27 02:45:44 +0000 2016 |
This is horrific. We cannot allow this man to become president. https://t.co/RwhW7yeFI2 | 91471 | Fri Oct 07 20:55:13 +0000 2016 |
Top Favorited of @CNN
text | favorite_count | created_at |
---|---|---|
At least 60 people have been hurt in an explosion at a fireworks market near Mexico City, local media report.\u2026 https://t.co/2UWK6ECpsf | 22570 | Tue Dec 20 22:49:24 +0000 2016 |
This little boy is the newest face of OshKosh B\’gosh\’s holiday ads after initially being turned down by a talent ag\u2026 https://t.co/bdc1Zig7lE | 22506 | Sat Dec 10 07:01:29 +0000 2016 |
“We\’ve been friends for a long time”: Kanye West and President-elect Trump appear together at Trump Tower\u2026 https://t.co/KIdFwkVTGr | 19082 | Tue Dec 13 14:59:55 +0000 2016 |
This little boy is the newest face of OshKosh B\’gosh\’s holiday ads after initially being turned down by a talent ag\u2026 https://t.co/8ppZdDs3Te | 12099 | Sat Dec 10 23:45:25 +0000 2016 |
Clinton jokes at Reid portrait unveiling: “After a few weeks of taking selfies in the woods, I thought it would be\u2026 https://t.co/zpVwUAnjId | 11868 | Thu Dec 08 22:23:56 +0000 2016 |
BREAKING: President Obama vows retaliatory action against Russia for its meddling in the US presidential election\u2026 https://t.co/SJPGxWQB8d | 9767 | Fri Dec 16 01:36:31 +0000 2016 |
More Americans voted for Hillary Clinton than any other losing presidential candidate in US history https://t.co/6TBbQi3Nsn | 9273 | Wed Dec 21 23:28:00 +0000 2016 |
This little boy is the newest face of OshKosh B\’gosh\’s holiday ads after initially being turned down by a talent ag\u2026 https://t.co/LG0rdFFVkc | 9117 | Mon Dec 12 00:42:57 +0000 2016 |
Mariah Carey, Adele, Elton John and Lady Gaga bring the holiday spirit in special Christmas-themed \’Carpool Karaoke\u2026 https://t.co/8aQ5BDIbKt | 7475 | Mon Dec 19 05:30:24 +0000 2016 |
\’Dear world, why are you silent?\’: Desperate pleas from inside Aleppo https://t.co/1RvPlSDB7a https://t.co/XYwbJibFTD | 7355 | Wed Dec 14 19:00:04 +0000 2016 |
Top Favorited of @FoxNews
text | favorite_count | created_at |
---|---|---|
JUST IN: President-elect #Trump announces @Sprint will bring 5,000 jobs back to the U.S., and OneWeb will hire 3,00\u2026 https://t.co/CVWrTyuFNR | 18974 | Wed Dec 28 22:17:35 +0000 2016 |
.@JudgeJeanine: “Michelle, you may not realize it, but Americans rejected you and everything you stand for.”\u2026 https://t.co/tGrzIlZjxN | 15054 | Sun Dec 18 17:17:51 +0000 2016 |
#Breaking News: President-elect @realDonaldTrump has garnered the 270 #ElectoralCollege votes needed to become pres\u2026 https://t.co/5CDoiZCs4d | 11164 | Mon Dec 19 22:35:53 +0000 2016 |
Peters: “Without the least exaggeration, we can say that President Obama has been the worst foreign policy presiden\u2026 https://t.co/JbIGCpwKUk | 10263 | Sat Dec 31 03:32:46 +0000 2016 |
.@realDonaldTrump: “Michelle Obama said yesterday that there\’s no hope, but I assume she was talking about the past\u2026 https://t.co/V1BuKztapK | 10021 | Sat Dec 17 22:43:31 +0000 2016 |
.@realDonaldTrump: “We have to protect Israel. Israel, to me, is very, very important. We have to protect Israel.” https://t.co/R8CZWsGfvX | 10021 | Sun Jan 01 03:26:17 +0000 2017 |
Giuliani: \u201cThe U.S. Constitution doesn\u2019t give anyone in this world the right to come to the U.S. That\u2019s a privilege\u2026 https://t.co/TyKS7REAPR | 8885 | Wed Dec 21 03:41:24 +0000 2016 |
.@KatrinaPierson: This president is the divider-in-chief. His entire political career revolved around racism, sexis\u2026 https://t.co/vQP27Mxc1B | 8700 | Fri Dec 30 01:43:04 +0000 2016 |
.@GovMikeHuckabee: Can you name me one Muslim country that welcomes Christians to build & protect churches? No, you\u2026 https://t.co/baLyxGAkL6 | 8419 | Thu Dec 29 01:39:42 +0000 2016 |
DJT: “I think the Democrats are putting it out because they suffered 1 of the greatest defeats in the history of po\u2026 https://t.co/2bBtHDwqu3 | 8175 | Sun Dec 11 19:08:47 +0000 2016 |
About the Data
If you would like to access some of the code/data, it is publicly available on my GitHub repo. I’ve also included all four files that contain all of the tweets on which I ran the analysis in the data/ directory.
I had plans to include Date/Time data analysis in this post and many other things (if you’d like to see more data, let me know), but you have to stop somewhere great!!!!!! #MakeCodingProjectsSmallAgain