Algorithmically predict public sentiment on a topic using VADER sentiment analysis
Project description
abraham
Algorithmically predict public sentiment on a topic using VADER sentiment analysis.
Installation
Installation is simple; just install via pip.
$ pip3 install abraham3k
Basic Usage
You can run one command to execute the main function sentiment_summary
.
from abraham3k.prophets import Isaiah
darthvader = Isaiah(news_source="google")
scores = darthvader.sentiment_summary(["amd",
"microsoft",
"tesla",
"theranos"],
window=2)
print(scores)
'''
{'amd': {'avg': 0.32922767,
'desc_avg': 0.40470959,
'info': {'news_source': 'google',
'splitting': False,
'weights': {'desc': 0.1, 'text': 0.8, 'title': 0.1}},
'nice': 'positive',
'text_avg': 0.31924348,
'title_avg': 0.3336193},
'microsoft': {'avg': 0.22709808,
'desc_avg': 0.35126282,
'info': {'news_source': 'google',
'splitting': False,
'weights': {'desc': 0.1, 'text': 0.8, 'title': 0.1}},
'nice': 'positive',
'text_avg': 0.22539444,
'title_avg': 0.1165625},
'tesla': {'avg': -0.20538455,
'desc_avg': -0.22413444,
'info': {'news_source': 'google',
'splitting': False,
'weights': {'desc': 0.1, 'text': 0.8, 'title': 0.1}},
'nice': 'negative',
'text_avg': -0.19356265,
'title_avg': -0.28120986},
'theranos': {'avg': -0.036198,
'desc_avg': 0.03842,
'info': {'news_source': 'google',
'splitting': False,
'weights': {'desc': 0.1, 'text': 0.8, 'title': 0.1}},
'nice': 'neutral',
'text_avg': -0.08745,
'title_avg': 0.2992}}
'''
You can also run a separate function, summary
to get the raw scores. This will return a nested dictionary with keys for each topic.
from abraham3k.prophets import Isaiah
darthvader = Isaiah(news_source="google")
scores = darthvader.sentiment(["amd",
"microsoft",
"tesla",
"theranos"],
window=2)
print(scores['tesla']['text'])
'''
[87 rows x 6 columns]
neg neu pos compound sentence datetime
0 0.200 0.800 0.000 -0.7184 This weekend two men aged 59 69 died Tesla Mod... 2021-04-20T01:12:33Z
1 0.113 0.714 0.172 0.1027 The National Highway Transportation Safety Adm... 2021-04-19T17:11:20Z
2 0.211 0.789 0.000 -0.5859 Tesla working vehicle tailored Chinese consume... 2021-04-20T09:31:36Z
3 0.000 0.702 0.298 0.7003 Amazon told Bloomberg thatit canned Lord Rings... 2021-04-19T11:30:30Z
4 0.128 0.769 0.103 -0.1779 The first fatal incident involve Tesla one dri... 2021-04-19T15:42:47Z
.. ... ... ... ... ... ...
76 0.349 0.509 0.142 -0.7717 Two people killed fiery crash Tesla authority ... 2021-04-19T04:02:56Z
77 0.094 0.906 0.000 -0.3818 LiveUpdated April 20, 2021, 11:51 a.m. ET Apri... 2021-04-20T15:36:21Z
78 0.087 0.837 0.076 -0.0754 Though SpaceX‘s new Starlink satellite current... 2021-04-19T08:25:20Z
79 0.275 0.725 0.000 -0.8225 Over weekend, Tesla Model S involved accident ... 2021-04-20T09:50:12Z
80 0.332 0.514 0.154 -0.7096 My heart sink I write AI going wrong. Behind e... 2021-04-20T10:39:02Z
'''
Changing News Sources
Isaiah
supports two news sources: Google News and NewsAPI. Default is Google News, but you can change it to NewsAPI by passing Isaiah(news_source='newsapi', api_key='<your api key')
when instantiating. I'd highly recommend using NewsAPI. It's much better than the Google News API. Setup is really simple, just head to the register page and sign up to get your API key.
Detailed Usage
Currently, there are a couple extra options you can use to tweak the output.
When instatiating the class, you can pass up to five optional keyword arguments: news_source
and api_key
(as explained above), splitting
, and weights
.
loud
:bool
- Whether or not the classifier prints out each individual average or not. Default:False
.splitting
:bool
- Recursively splits a large text into sentences and analyzes each sentence individually, rather than examining the article as a block. Default:False
.weights
:dict
- This chooses what each individual category (text
,title
,desc
) is weighted as (must add up to 1). Default:weights={"title": 0.1, "desc": 0.1, "text": 0.8}
.
When running the main function, sentiment
, there is one requred argument, topics
, and two optional keyword arguments: window
and up_to
.
topics
:list
- The list of the topics (each astr
) to search for.up_to
:str
- The latest day to search for, in formatYYYY-MM-DD
. Default: current date.window
:int
- How many days back fromup_to
to search for. Default2
.
Updates
I'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"
where 1.2.0
is the version and "update install requirements"
is the git commit message. It will update to PyPi and to the github repository.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file abraham3k-1.2.4.tar.gz
.
File metadata
- Download URL: abraham3k-1.2.4.tar.gz
- Upload date:
- Size: 5.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d82b0510ff3544cfc45684ee549a2c67a0f3aabbd697e9d1e42ad9d2c14896c2 |
|
MD5 | 5dfcb29738468485ec49bde7c87f6c9a |
|
BLAKE2b-256 | afbd28762147276441782aa669f54867eb2e39ab1601f5c8d5e1aafc16a500b9 |
File details
Details for the file abraham3k-1.2.4-py3-none-any.whl
.
File metadata
- Download URL: abraham3k-1.2.4-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 942ed4fcbae704cc4b4caabe5f1d124a6e243768ba0bf10189798c00e7e42fbe |
|
MD5 | b6e331d257940f6cd021f1f106d1cbde |
|
BLAKE2b-256 | 3d389dab0b9cc0cc781e075f9f9869cb57ad39efab01360d2adfc0f7aad07274 |