Package: abraham3k
abrahamAlgorithmically predict public sentiment on a topic using flair sentiment analysis.InstallationInstallation is simple; just install via pip.$pip3installabraham3kBasic UsageThe most simple way of use is to use the_summaryfunctions.fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedeltawatched=["amd","tesla"]darthvader=Abraham(news_source="newsapi",newsapi_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",bearer_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",weights={"desc":0.33,"text":0.33,"title":0.34},)scores=darthvader.news_summary(watched,start_time=datetime.now()-timedelta(days=1)end_time=datetime.now(),)print(scores)'''{'amd': (56.2, 43.8), 'tesla': (40.4, 59.6)} # returns a tuple (positive count : negative count)'''scores=darthvader.twitter_summary(watched,start_time=datetime.now()-timedelta(days=1)end_time=datetime.now(),)print(scores)'''{'amd': (57, 43), 'tesla': (42, 58)} # returns a tuple (positive count : negative count)'''You can run the functionnews_sentimentto get the raw scores for the news. This will return a nested dictionary with keys for each topic.fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedeltadarthvader=Abraham(news_source="google")scores=darthvader.news_sentiment(["amd","microsoft","tesla","theranos"],)print(scores['tesla']['text'])'''desc              datetime  probability sentiment0   The latest PassMark ranking show AMD Intel swi...  2021-04-22T18:45:03Z     0.999276  NEGATIVE1   The X570 chipset AMD offer advanced feature se...  2021-04-22T14:33:07Z     0.999649  POSITIVE2   Apple released first developer beta macOS 11.4...  2021-04-21T19:10:02Z     0.990774  POSITIVE3   Prepare terror PC. The release highly anticipa...  2021-04-22T18:00:02Z     0.839055  POSITIVE4   Stressing ex x86 Canadian AI chip startup Tens...  2021-04-22T13:00:07Z     0.759295  POSITIVE..                                                ...                   ...          ...       ...95  Orthopaedic Medical Group Tampa Bay (OMG) exci...  2021-04-21T22:46:00Z     0.979155  POSITIVE96  OtterBox appointed Leader, proudly 100% Austra...  2021-04-21T23:00:00Z     0.992927  POSITIVE97  WATG, world's leading global destination hospi...  2021-04-21T22:52:00Z     0.993889  POSITIVE98  AINQA Health Pte. Ltd. (Headquartered Singapor...  2021-04-22T02:30:00Z     0.641172  POSITIVE99  Press Release Nokia publish first-quarter repo...  2021-04-22T05:00:00Z     0.894449  NEGATIVE'''The same way works for the twitter API (see below for integrating twitter usage).fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedeltadarthvader=Abraham(news_source="google")scores=darthvader.twitter_sentiment(["amd","microsoft","tesla","theranos"])You can also just use a one-off function to get the sentiment from both the news and twitter combined.fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedeltadarthvader=Abraham(news_source="google")scores=darthvader.summary(["tesla","amd"],weights={"news":0.5,"twitter":0.5})print(scores)'''{'amd': (59.0, 41.0), 'tesla': (46.1, 53.9)}'''There's also a built-in function for building a dataset of past sentiments. This follows the same format as the non-interval functions (twitter_summary_interval,news_summary_interval,summary_interval).fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedelta# this works best using the offical twitter api rather than twintdarthvader=Abraham(bearer_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")scores=twitter_summary_interval(self,["tesla","amd"],oldest=datetime.now()-timedelta(days=1),newest=datetime.now(),interval=timedelta(hours=12),offset=timedelta(hours=1),size=100,)print(scores)'''timestamp  positive  negative             lag0  2021-05-08 11:46:57.033549      61.0      39.0 0 days 12:00:001  2021-05-08 10:46:57.033549      54.0      46.0 0 days 12:00:002  2021-05-08 09:46:57.033549      68.0      32.0 0 days 12:00:003  2021-05-08 08:46:57.033549      78.0      22.0 0 days 12:00:004  2021-05-08 07:46:57.033549      71.0      29.0 0 days 12:00:005  2021-05-08 06:46:57.033549      74.0      26.0 0 days 12:00:006  2021-05-08 05:46:57.033549      63.0      37.0 0 days 12:00:007  2021-05-08 04:46:57.033549      74.0      26.0 0 days 12:00:008  2021-05-08 03:46:57.033549      53.5      46.5 0 days 12:00:009  2021-05-08 02:46:57.033549      51.0      49.0 0 days 12:00:0010 2021-05-08 01:46:57.033549      61.0      39.0 0 days 12:00:0011 2021-05-08 00:46:57.033549      46.9      53.1 0 days 12:00:0012 2021-05-07 23:46:57.033549      54.0      46.0 0 days 12:00:0013 2021-05-07 22:46:57.033549      52.0      48.0 0 days 12:00:0014 2021-05-07 21:46:57.033549      58.0      42.0 0 days 12:00:0015 2021-05-07 20:46:57.033549      46.0      54.0 0 days 12:00:0016 2021-05-07 19:46:57.033549      40.0      60.0 0 days 12:00:0017 2021-05-07 18:46:57.033549      40.0      60.0 0 days 12:00:0018 2021-05-07 17:46:57.033549      51.0      49.0 0 days 12:00:0019 2021-05-07 16:46:57.033549      21.0      79.0 0 days 12:00:0020 2021-05-07 15:46:57.033549      52.5      47.5 0 days 12:00:0021 2021-05-07 14:46:57.033549      36.0      64.0 0 days 12:00:0022 2021-05-07 13:46:57.033549      42.0      58.0 0 days 12:00:0023 2021-05-07 12:46:57.033549      40.0      60.0 0 days 12:00:0024 2021-05-07 11:46:57.033549      32.0      68.0 0 days 12:00:00'''Google trends is also in the process of being added. Currently, there's support for interest over time. You can access it like this.fromabraham3k.prophetsimportAbrahamfromdatetimeimportdatetime,timedeltadarthvader=Abraham()results=darthvader.interest_interval(["BTC USD","buy bitcoin"],start_time=(datetime.now()-timedelta(days=52)),end_time=datetime.now())print(results)'''BTC USD  buy bitcoindate2021-03-24       62           182021-03-25       68           162021-03-26       58           122021-03-27       47           152021-03-28       48           15...2021-05-08       48           272021-05-09       38           252021-05-10       43           202021-05-11       44           242021-05-12       38           20'''Numbers represent search interest relative to the highest point on the chart for the given region and time. A value of 100 is the peak popularity for the term. A value of 50 means that the term is half as popular. A score of 0 means there was not enough data for this term.Changing News SourcesAbrahamsupports two news sources:Google NewsandNewsAPI. Default isGoogle News, but you can change it toNewsAPIby passingAbraham(news_source='newsapi', api_key='<your api key')when instantiating. I'd highly recommend usingNewsAPI. It's much better than theGoogle NewsAPI. Setup is really simple, just head to theregisterpage and sign up to get your API key.Twitter FunctionalityI'd highly recommend integrating twitter. It's really simple; just head toTwitter Developerto sign up and get your bearer token. If you don't want to sign up, you can actually use it free with the twint API (no keys needed). This is the default.UpdatesI've made it pretty simple (at least for me) to push updates. Once I'm in the directory, I can run$ ./build-push 1.2.0 "update install requirements"where1.2.0is the version and"update install requirements"is the git commit message. It will update to PyPi and to the github repository.NotesCurrently, there's another algorithm in progress (SALT), includingsalt.pyandsalt.ipynbin theabraham3k/directory and the entiremodels/directory. They're not ready for use yet, so don't worry about importing them or anything.ContributionsPull requests welcome!Detailed UsageComing soon. However, there is heavy documentation in the actual code.