Package: py-misinfo-exposure
py_misinfo_exposureA Python package that can be used to calculate misinformation-exposure scores for a user based on the falsity scores of public figures they follow on Twitter.The falsity score is based on PolitiFact fact-checks of the public figures.🚨 Notes 🚨:This package replicatesMohsen Mosleh's R packagewhich does the same thing and is based on Mosleh and Rand's paper (2021).PaperDatalast retrieved on: 2021/01/15This package requires you have a Twitter developer account _with access toTwitter's V2 APIContentsInstallationQuick startUnderstanding the package and more controlRate limitsCalculating scores for a large list of usersVerbosityExample scriptInstallationThis package has been uploaded to the PyPi index so it can be installed via the command line via...pipinstallpy_misinfo_exposureQuick startfrompy_misinfo_exposureimportPyMisinfoExposure# Set your personal Twitter bearer tokenbearer="YOUR TWITTER BEARER TOKEN"# Initialize the PyMisinfoExposure class with your bearer tokenpme=PyMisinfoExposure(bearer_token=bearer)# Under the hood, py_misinfo_exposure utilizes Tweepy to access Twitter data# This function authorizes your access to Twitter with the earlier provided bearer tokenpme.tweepy_bearer_authorization()# Create a list of unique Twitter user IDs that you would like misinformation exposure scores foruser_test_list=["1312850357555539972","1260526934678740993"]# Get misinformation exposure scoresmisinfo_scores,missing_users=pme.get_misinfo_exposure_score(user_test_list)# Where `misinfo_scores` is the below pandas.DataFrameusermisinfo_score01260526934678740993NaN# NaN means this user does not follow any of the tracked political elites113128503575555399720.675167Note thatpme.get_misinfo_exposure_scorereturns a tuple.In the tuple above,misinfo_scoresrepresents apandas dataframeobject andmissing_userswill return a set of users for whom no friends were found. This may happen, for example, if the account has been suspended or it does not exist. If there are no missing users,missing_usersis returned asNone.Understanding the package and more controlHow the package worksThe package works by taking the list of user IDs that you provide and then asking Twitter to provide all of their friends on Twitter (the people that they follow). After this has been done, the mean "falsity" score is taken from all of the friends that a user follows that are present within thePolitiFact data.Rate limitspy_misinfo_exposureuses thetweepypackage under the hood to gather Twitter data and, with the Twitter bearer token that you provide, initializes atweepyclient that will automatically wait the proper amount of time when Twitter rate limits have been hit.Calculating scores for a large list of usersThe default way thatpy_misinfo_exposureworks is to download all of the friends data from Twitter and hold it in your machine's working memory. This becomes problematic when calculating scores for a large list of users because your machine may crash from holding too much data at once.To solve this problem you can simply setsave_friends_to_disk=Truewhen you initialize thePyMisinfoExposureclass like so:pme=PyMisinfoExposure(bearer_token=bearer,save_friends_to_disk=True# <---------- Add this to save friends data to your machine)Then, when you callpme.get_misinfo_exposure_score(users), friends data will be downloaded into a folder within your current working directory. By default, this folder will be calledpy_misinfo_friend_data, however, you can again manually control the name of this folder by setting theoutput_dirparameter when you initialize thePyMisinfoExposureclass in the following way.pme=PyMisinfoExposure(bearer_token=bearer,save_friends_to_disk=True,# <---------- Add this to save friends data to your machineoutput_dir='myoutputdirectory'# <---------- Add this to save friends data into the 'myoutputdirectory' folder)VerbosityIf you would like misinformation exposure scores for a large set of users, it may take some time to retrieve all of the friends for all of the users you are interested in.Note: How long it will take is explicitly determined by Twitter's API rate limits. For more information, you can see Twitter's APIdocumentationfor the endpoint utilized bypy_misinfo_exposure.TLDR: You can retrieveup to15,000 friends every 15 minutes.In reality, the number of friends you can retrieve from Twitter in 15 minutes will likely be less because rate limits are based on thenumber of API callsmade to Twitter and not the number of friends returned.To print updates for a long-running script, you can utilize the otherPyMisinfoExposurearguments:verboseandupdate_on.For example, if you want thePyMisinfoExposureclass to let you know every time another 500 users have been processed, you can initialize the class in the following way:pme=PyMisinfoExposure(bearer_token=bearer,verbose=True,update_on=500# default value = 100)Example scriptThis repository also includes an example script calledget_users_misinfo_exposure_scores.pythat takes in a file which contains one Twitter user ID on each line and returns a CSV file containing all of those users misinformation-exposure scores. I suggest first executing the below line of code from your command line...python3get_users_misinfo_exposure_scores.py-h...which will display what the script does and all of the command line flags that are available.For a quick start, it can be run in the following way...python3get_users_misinfo_exposure_scores.py--input_filepy_misinfo_exposure/data/randomusers.txt--output_file'my_output_filename'--bearer_token$TWITTER_BEARER_TOKEN... where$TWITTER_BEARER_TOKENshould be replaced with your Twitter developer bearer token.Note: The parameters set inside of this script forPyMisinfoExposurewill likely need to be updated for more practical use. For example, this script provides updates after every 2 users, which is quite fast (to provide feedback for testing quickly).