Steem Active Users
Introduction:
These are regularly updated lists of active Steem users. These were initially made for the My Steemversary bot but anyone is allowed to use this data for his own project/Dapp on the Steem blockchain. Each time a different filter was used on the previous list thus 3 filtered lists were gathered.
I made this list public because the initial list of Steem user contain over 1 million accounts and the majority of them are inactive so it would take quite a long time and energy to go through them all. It's hard to define what's meant by an active user so I made my own criteria (if you have a better suggestion, please let me know). I encountered this problem in both of my projects (My Steemversary and Steem Voice) because I don't have a server. Using multiprocessing, I manged to cut the time to almost 3 hours for each filter.
Scope:
These lists were collected over 3 days starting on December/21. Each day I used a different filter and I left the code running overnight.
Findings:
The first step was to gather the list of all the Steem users so I used steem-python
'sget_all_usernames
tool to do so which left me with this list.
Then, I applied the first filter which removes the users whom didn't comment in the last two months. Here's the second list.
Next, I used @themarkymark's Global Blacklist API to gather all the blacklisted users from the following communities:
- BuildAWhale
- SteemCleaners
- Utopian-IO
- Redeemer
- MinnowBooster
- Actifit
I removed those from the list. Here's the third list.
Finally, I applied another filter to the list. This filter removes users whom didn't upvote a post/comment in this month. Here's the final list.
Results:
The initial list started with 1184109 users. The first filter left me with 600772 users almost 50.7% that of the initial list.
The second filter left me with 577491 users which is 96% of the second list meaning that 23281 of those users are blacklisted which is almost 2% of the initial list.
The third filter removed 277242 users leaving me with just 300249 active users that's hardly 25.4% of the total users!
I made a graph showing the different numbers:

Conclusion:
Besides the usage of these lists in a project, these results could also give us an idea about the future of Steem. People are abandoning Steem now more than ever. There's is hardly 25% active users. If we want Steem to succeed we have to bring more people to the platform. I started this bot to reward users for staying and I encourage you to do something for Steem. Make a project, create an app or simply tell everyone you know about Steem. Any help would be appreciated.
Tools and Scripts:
The following python code was used to generate the lists:
from steem import Steem
from steem.account import Account
import json, time
import threading, psutil
s = Steem()
def filter(lastvt):
intdate = '2018-11-18T00:00:00'
intdate = time.strptime(intdate, "%Y-%m-%dT%H:%M:%S")
date = time.strptime(lastvt, "%Y-%m-%dT%H:%M:%S")
return(date>intdate)
def work(listusers,v):
localdata = s.get_accounts(listusers)
for i in range(len(listusers)):
if not(filter(localdata[i]["last_post"])):
v.append(localdata[i]['name'])
return v
with open('allusers.json', 'r') as f:
users = json.load(f)
print('Done Importing')
jobs =[]
if __name__ == "__main__":
count = len(users)
print (count)
fifs = int(count/10000)
other = count%10000
c = 0
c2 = 0
c3 = 0
for j in range(fifs):
start_time = time.time()
a1=[]
a2=[]
a3=[]
a4=[]
a=[]
jobs.append(threading.Thread(target=work, args=(users[c:c+2500],a1,)))
c=c+2500
jobs.append(threading.Thread(target=work, args=(users[c:c+2500],a2,)))
c=c+2500
jobs.append(threading.Thread(target=work, args=(users[c:c+2500],a3,)))
c=c+2500
jobs.append(threading.Thread(target=work, args=(users[c:c+2500],a4,)))
c=c+2500
for i in range(4):
jobs[c2].start()
c2 = c2+1
for i in range(4):
jobs[c3].join()
c3 = c3+1
a = a1+a2+a3+a4
for x in a:
users.remove(x)
print(count-c,' Users are left')
print("--- %s seconds ---" % (time.time() - start_time))
for j in range(other/227):
start_time = time.time()
a1=[]
jobs.append(threading.Thread(target=work, args=(users[c:c+227],a1,)))
c=c+227
jobs[c2].start()
c2 = c2+1
jobs[c3].join()
c3 = c3+1
for x in a1:
users.remove(x)
print(count-c,' Users are left')
print("--- %s seconds ---" % (time.time() - start_time))
with open('finaluserss.json', 'w+') as d:
json.dump(users,d)
Microsoft Office Excel was also used to generate the chart.
Proof of Authorship:
I think that the code above is enough proof :)