Skip to content

Instantly share code, notes, and snippets.

@dannguyen
Last active July 13, 2018 23:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dannguyen/7213b16b7de79ad9c89fc2297d0c822d to your computer and use it in GitHub Desktop.
Save dannguyen/7213b16b7de79ad9c89fc2297d0c822d to your computer and use it in GitHub Desktop.
List of my follower characteristics, sorted by # of followers -- as of 2018-07-11 that were not my followers on 2018-07-13

My Twitter followers who were "purged" between July 11 and July 13. 2018

tl;dr: The file below, purged-users.csv, contains a data table of stats from my Twitter followers who appear to have been "purged" on 2018-07-12 from my followers count. As Twitter said in its announcement, only follower counts have been adjusted. The actual user accounts who constitute the purged followers counts were not deleted, nor does their list of "followings" reflect the change. This makes sense because the "purged" accounts aren't necessarily fake, but they've been "locked" for suspicious behavior and have been inactive since.

Background

Sometime on July 12, 2018, Twitter conducted a mass purge of user accounts suspected to be fake. Via the Twitter blog, Confidence in follower counts (emphasis added):

Over the years, we’ve locked accounts when we detected sudden changes in account behavior. In these situations, we reach out to the owners of the accounts and unless they validate the account and reset their passwords, we keep them locked with no ability to log in. This week, we’ll be removing these locked accounts from follower counts across profiles globally. As a result, the number of followers displayed on many profiles may go down.

Creating the snapshots of followers with t

On July 11, I did a snapshot of my followers using the sferik/t command-line tool:

$ t followers --csv > 20180711.csv

I took a second snapshot on the afternoon of July 13:

$ t followers --csv > 20180713.csv

(Note: Unless you have a time machine, or you took a snapshot of your followers before July 12, you won't be able to do this analysis yourself)

Doing a left join to find the difference

Then, with grep and csvkit's csvcut, I did the equivalent of a LEFT OUTER JOIN and filtered for user IDs that appeared on the earlier list that did not exist in the latter list:

$ csvcut -c ID followers-20180711.csv \
    | grep -v --file <(csvcut -c ID followers-20180713.csv) \
    | sed '1i\
ID
' > /tmp/missing-ids.txt

Creating the list of purged users

Finally, using csvjoin, I joined this list back to the 2018-07-11 followers list (which has all the profile data, such as name, follower count, etc):

$ csvjoin -c ID followers-20180711.csv /tmp/missing-ids.txt \
   | csvcut -c 'Verified,Protected,Followers,Following,Listed,Tweets,Favorites,Since,Last tweeted at' \
   | csvsort -c Followers -r \
> /tmp/purged-users.csv

The resulting CSV file is the file attached to this gist, purged-users.csv, which amounts to about 110 user accounts.

An important caveat: there's no way for me to know which followers I've lost from July 11 to July 13 to the purge, versus followers who I've lost because of natural reasons -- e.g. they're tired of my shitty tweets. There was one user who I know unfollowed me, because I unfollowed him first for being a dick, and so I've removed his record from purged-users.csv.

Because I have no way of knowing which of the remaining accounts also quit me out of principle rather than computational purge, the purged-users.csv file deliberately leaves out identifying information.

Accounts "purged" from follower counts are, for now, still around

I didn't read the Twitter blog post before today, so I had assumed the "Great Twitter Purge of 2018" meant that actual user accounts were going to be deleted. When I skimmed my list, I noticed "purged" accounts that had followed me for a long time and had no personal beef with me (because they were brand accounts that followed everyone). When I checked to see if their accounts had been deleted, I was surprised to see they were still active, and still following thousands of other accounts.

I manually checked some of my "purged" followers that most definitely seem like sham accounts, such as a user named Peter Heckman, who has 0 followers and 0 tweets and has been around since 2011.

Lo and behold, Mr. Heckman's account has not been deleted:

peter

Well, the Twitter blog post did say that it was follower counts that would be changed, not that the locked/fake accounts would actually be deleted from the system:

This week, we’ll be removing these locked accounts from follower counts across profiles globally. As a result, the number of followers displayed on many profiles may go down.

And I guess the data on who those accounts follow -- i.e. their "Following" count/list -- would not be changed either. For example, I'm still listed as someone whom Mr. Heckman's twitter account follows:

https://i.imgur.com/9kIyaDJ.jpg

Difference between "locked" accounts, and accounts suspended or deleted for being spam/malicious

To be clear, it makes sense why accounts that no longer contribute to "follower counts" are not yet deleted or suspended. Again, from Twitter's blog post:

Why does an account get locked?

If we detect sudden changes in account behavior, we may lock the account and contact the owner to confirm they still have control of it. These sudden changes in account behavior could include Tweeting a large volume of unsolicited replies or mentions, Tweeting misleading links, or if a large number of accounts block the account after mentioning them. We sometimes lock an account if we see email and password combinations from other services posted online and believe that information could put the security of an account at risk — so we require accounts to change of their passwords for protection. Until we confirm that everything is ok with the account, we lock it, which makes them unable to Tweet or see ads.

How are these accounts different from spam or bots?

In most cases, these accounts were created by real people but we cannot confirm that the original person who opened the account still has control and access to it.

In other words, these accounts may or may not be actually "bad". They currently are just in limbo, because they may still represent genuine users whose accounts have been compromised, and Twitter doesn't want to delete those users since the actual (human) owners may eventually log back on.

Twitter's blog post was more or less upfront that this so-called purge wouldn't delete total Twitter accounts, or affect their Monthly Active Users (MAUs), because by definition, these locked accounts could not be "active":

Will this change affect your Monthly Active User (MAU) or Daily Active User (DAU) metrics?

No, it will not. Removing locked accounts from followers doesn't impact MAU or DAU. Locked accounts that have not reset their password in more than one month are not included in MAU or DAU.


Anyway, you can look at the purged-users.csv file to see the characteristics of the "purged". Again, I've removed the identifying fields from the data, and I have no way to tell which of these users manually unfollowed me, and which of them are "locked". Remember that "locked" is different from being suspended, and there's no way to tell when visiting an account page to tell that it has been "locked".

Verified Protected Followers Following Listed Tweets Favorites Since Last tweeted at
False False 1729757 649724 1646 3640 16246 2014-11-11 18:56:44 +0000 2018-07-06 10:00:29 +0000
True False 38017 15643 1476 107716 53545 2008-04-04 09:50:59 +0000 2018-07-11 16:30:20 +0000
False False 22987 29156 309 2077 3 2010-08-02 19:56:23 +0000 2012-12-11 18:59:07 +0000
False False 19050 18920 75 1505 3 2011-03-17 18:58:27 +0000
False False 16196 2819 189 3493 11255 2010-02-09 16:05:48 +0000 2016-07-29 19:21:02 +0000
False False 3500 3638 205 829 1393 2016-01-24 06:44:06 +0000 2018-07-09 19:21:03 +0000
False False 1767 1931 4 2834 19 2012-12-10 03:35:51 +0000 2016-07-30 03:54:52 +0000
False False 1282 1664 0 207 792 2016-06-25 16:38:10 +0000 2018-07-05 05:14:44 +0000
False False 1257 1911 14 158 1 2009-10-06 11:00:33 +0000
False False 1232 1507 46 6098 2 2011-03-08 16:40:52 +0000 2012-04-11 23:42:32 +0000
False False 1208 1535 97 2548 70 2009-05-28 20:19:37 +0000 2017-01-18 18:29:46 +0000
False False 996 2293 260 23498 15907 2010-05-26 15:18:39 +0000 2018-07-11 14:58:57 +0000
False False 948 5076 65 1045 40318 2015-01-17 17:54:25 +0000 2018-03-31 16:35:38 +0000
False False 923 1825 90 60394 133573 2011-03-18 06:09:04 +0000
False False 765 1896 2 3709 0 2011-10-23 09:01:34 +0000 2016-08-24 03:10:26 +0000
False True 661 1666 51 2247 55 2010-05-29 06:43:52 +0000
False False 643 1730 0 715 4 2011-07-22 17:36:23 +0000
False False 624 1879 6 1770 0 2009-04-23 19:09:48 +0000 2014-06-02 04:44:48 +0000
False False 617 446 43 2332 670 2011-03-02 00:57:10 +0000 2018-07-07 11:12:23 +0000
False False 610 570 48 38595 2 2007-05-07 20:56:04 +0000 2013-07-02 00:22:16 +0000
False False 579 1077 7 23113 0 2010-03-28 07:21:04 +0000 2011-05-23 17:22:58 +0000
False False 557 4316 2 22 2121 2016-05-25 12:42:33 +0000 2016-09-21 15:52:51 +0000
False False 506 2504 16 7425 79 2015-10-25 07:27:15 +0000 2016-01-07 16:26:31 +0000
False False 488 1718 0 2 0 2015-07-27 08:30:56 +0000
False False 481 1912 4 1460 40 2010-02-09 16:43:05 +0000
False False 475 750 4 1332 16374 2015-05-24 21:26:03 +0000
False False 428 1742 2 28 0 2009-08-24 05:32:20 +0000 2013-05-09 13:47:50 +0000
False False 394 1879 3 2684 0 2009-04-05 03:43:46 +0000 2011-02-24 17:32:46 +0000
False False 370 1888 2 181 2 2009-11-16 01:30:45 +0000
False False 354 1217 36 1211 8 2010-09-29 09:53:18 +0000 2013-08-05 21:27:21 +0000
False False 354 2319 3 20 0 2015-08-05 04:08:35 +0000 2016-06-27 12:36:07 +0000
False False 353 1812 4 199 2 2012-09-03 05:32:28 +0000 2014-08-12 11:25:13 +0000
False True 329 1118 0 507 26 2010-04-05 17:15:03 +0000
False False 287 1916 0 1596 0 2010-07-24 04:01:07 +0000 2013-08-01 13:13:28 +0000
False False 278 3389 0 1158 0 2016-04-17 05:16:36 +0000
False False 275 995 15 1242 7 2008-09-13 23:24:03 +0000 2017-05-13 15:43:45 +0000
False True 270 1868 5 790 155 2010-10-16 09:28:26 +0000
False True 255 2086 3 2627 46 2012-03-15 13:15:45 +0000
False False 228 1447 2 0 0 2016-04-22 00:17:16 +0000
False False 226 1435 98 50837 3 2010-12-30 01:49:33 +0000 2016-06-13 20:31:14 +0000
False False 222 666 3 249 0 2010-09-22 13:56:16 +0000
False False 222 1342 2 26 0 2012-02-18 19:37:49 +0000 2012-03-17 17:24:05 +0000
False False 219 1762 11 47 0 2011-11-23 05:21:39 +0000 2011-12-01 11:48:21 +0000
False False 216 1672 0 7 0 2011-12-06 20:09:05 +0000
False False 211 584 2 18 0 2010-04-03 04:32:32 +0000
False False 206 516 12 2194 137 2011-01-11 17:47:10 +0000 2014-04-10 04:43:35 +0000
False False 203 1859 2 207 0 2010-08-12 10:03:55 +0000 2012-07-27 16:43:22 +0000
False False 199 1884 1 1969 118 2013-06-16 20:24:12 +0000
False True 197 1929 1 1995 1 2009-05-17 12:27:51 +0000
False False 186 4462 0 1357 0 2016-04-14 13:13:07 +0000 2016-07-24 22:43:04 +0000
False False 178 1765 4 72 0 2011-12-13 09:38:52 +0000 2012-03-07 09:41:03 +0000
False False 146 1227 1 549 6 2011-08-15 02:25:12 +0000
False False 140 1097 1 983 0 2011-02-20 08:04:39 +0000 2017-10-20 23:30:56 +0000
False False 137 486 4 1716 6410 2012-08-17 09:50:05 +0000 2018-07-11 08:22:51 +0000
False False 131 1203 3 1 0 2010-09-21 08:52:18 +0000
False False 128 30 0 9 1 2012-08-16 14:01:37 +0000
False False 122 857 4 34 6 2011-08-10 23:15:27 +0000 2017-09-26 17:07:07 +0000
False True 114 686 1 79 166 2010-09-01 15:47:23 +0000
False False 110 1575 0 161 19 2013-08-08 02:57:50 +0000 2015-01-28 23:15:43 +0000
False False 100 185 4 181 0 2011-07-28 15:08:48 +0000
False False 98 1818 0 6 0 2013-06-01 07:15:16 +0000 2015-08-18 05:51:42 +0000
False False 96 292 0 547 7 2012-10-20 00:41:55 +0000
False False 94 993 3 2706 2 2013-03-08 20:21:40 +0000
False False 90 4069 0 11 15 2009-05-24 09:36:35 +0000 2016-06-19 10:04:36 +0000
False False 89 494 0 34 0 2009-06-22 06:18:25 +0000 2010-07-10 12:32:10 +0000
False False 89 1249 0 58 53 2015-04-02 04:51:36 +0000 2015-06-05 02:38:20 +0000
False False 81 549 0 166 810 2010-12-04 04:02:19 +0000
False False 79 1111 0 118 49 2015-01-23 20:36:40 +0000
False False 78 558 1 27 0 2011-06-30 20:28:08 +0000 2017-03-15 20:30:54 +0000
False False 71 2955 0 3 0 2016-10-27 08:10:59 +0000 2016-10-30 11:08:16 +0000
False False 68 177 0 77 6 2009-11-12 14:31:54 +0000
False False 66 475 5 169 35 2015-07-20 18:44:09 +0000 2016-10-07 18:56:27 +0000
False False 64 831 0 60 0 2014-01-19 13:08:17 +0000 2014-04-11 22:29:49 +0000
False False 64 971 0 71 1 2009-06-10 05:57:59 +0000
False False 60 169 1 42 0 2011-02-10 12:41:58 +0000 2012-03-09 17:34:53 +0000
False False 60 1926 0 1 0 2013-03-22 17:37:42 +0000 2014-04-21 14:56:29 +0000
False False 57 849 0 18 0 2015-08-30 14:51:58 +0000 2015-09-02 13:35:14 +0000
False True 52 270 0 130 0 2009-09-29 03:34:17 +0000
False False 50 775 0 73 1 2014-01-03 12:31:30 +0000 2014-08-22 00:03:47 +0000
False False 46 1020 0 183 754 2014-05-18 08:32:42 +0000 2017-08-12 12:30:27 +0000
False False 28 190 0 55 2 2012-05-19 23:31:13 +0000
False False 28 237 0 4 0 2009-07-01 16:10:30 +0000
False False 24 393 0 7856 0 2011-11-08 05:51:34 +0000 2016-06-20 09:11:37 +0000
False False 24 914 0 21 0 2016-04-11 21:52:09 +0000
False False 23 79 0 52 0 2012-12-23 01:49:23 +0000 2013-10-01 23:56:23 +0000
False False 23 328 10 1218 1224 2016-06-18 12:11:58 +0000 2016-12-05 15:12:38 +0000
False False 23 268 1 7 0 2010-05-24 07:00:59 +0000 2012-12-16 08:57:28 +0000
False False 22 419 1 60 0 2011-04-20 16:55:21 +0000 2014-03-29 15:08:53 +0000
False False 20 448 0 13 1 2011-09-18 14:58:50 +0000 2013-06-04 13:42:36 +0000
False False 15 33 0 19 4 2012-03-11 10:00:22 +0000 2012-11-06 17:20:40 +0000
False False 14 49 0 23 0 2011-09-07 19:24:42 +0000 2011-11-30 20:00:53 +0000
False False 13 73 0 16 2 2012-04-20 07:47:51 +0000 2013-06-10 05:58:38 +0000
False True 12 839 0 3 27 2008-11-26 00:05:10 +0000
False False 11 24 0 10 0 2009-05-29 01:12:05 +0000 2017-09-25 01:10:33 +0000
False False 10 781 0 5 0 2013-06-01 19:00:30 +0000
False False 10 139 0 6 1 2013-04-07 04:13:47 +0000 2014-01-21 20:03:15 +0000
False False 8 28 0 1 0 2009-04-01 22:56:36 +0000 2009-04-01 23:48:19 +0000
False False 6 169 0 36 42 2012-01-07 01:06:59 +0000 2017-04-07 14:38:15 +0000
False False 4 5 0 1 0 2013-03-30 04:33:03 +0000
False False 4 28 0 7 0 2013-01-19 16:23:41 +0000
False False 3 48 0 0 18 2013-01-03 12:40:30 +0000
False False 2 58 0 25 3 2013-05-11 13:53:42 +0000 2015-01-06 14:03:20 +0000
False False 2 12 0 1 34 2014-12-26 05:01:13 +0000 2014-12-26 05:03:09 +0000
False True 2 115 0 11 0 2012-12-20 21:57:25 +0000
False True 1 101 0 23 31 2009-09-27 13:08:11 +0000
False False 1 249 0 96 0 2014-05-09 06:48:46 +0000 2014-10-22 07:11:16 +0000
False False 1 306 0 0 0 2010-12-09 07:23:12 +0000
False False 0 1 0 0 0 2010-12-09 04:35:21 +0000
False False 0 59 0 7 149 2011-12-11 06:04:29 +0000
False True 0 2167 1 0 0 2012-02-25 01:32:02 +0000
False False 0 4 0 0 0 2011-09-28 22:28:03 +0000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment