Steem Active Users
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.
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.
The first step was to gather the list of all the Steem users so I used
get_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:
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.
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:
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 :)