当前位置:   article > 正文

用50行Python代码对股市新闻进行情感分析_python开发股票情绪指标

python开发股票情绪指标

用 Python 进行股票新闻情绪分析

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

情感分析是一种用于从文本中提取主观信息的技术。在股票新闻的上下文中,情绪分析可用于了解有关特定股票的新闻文章的整体情绪,这可以帮助您做出更明智的决策。

在本教程中,我们将使用 Python 和一些流行的库对股票新闻进行情绪分析。

第 1 步:收集数据

第一步是收集数据。有多种 API 提供对财经新闻的访问,例如 NewsAPI、Bloomberg API 和 Yahoo Finance API。在本教程中,我们将使用 NewsAPI。

要使用 NewsAPI,您需要在他们的网站上注册一个 API 密钥。https://newsapi.org/。它是免费的,大约需要 30 秒。拥有 API 密钥后,您可以使用requestsPython 中的库向 API 发出请求并检索新闻文章。

以下是如何使用 NewsAPI 检索有关 Apple 的新闻文章的示例:

  1. import requests
  2. api_key = 'YOUR API KEY'
  3. url = f'https://newsapi.org/v2/everything?q=Apple&apiKey={api_key}'
  4. response = requests.get(url)
  5. data = response.json()
  6. articles = data['articles']
  7. print(articles)

此代码检索有关股票“Apple”的新闻文章并将它们存储在articles变量中,然后以 json 格式输出文章。您可以修改q参数以搜索有关不同股票的新闻文章。

第 2 步:预处理数据

现在我们知道如何检索新闻文章,您需要在执行情感分析之前对数据进行预处理。这涉及将文本转换为小写并从新闻文章中删除任何不相关的信息,例如停用词和标点符号。

我们将使用该nltk库执行预处理。在使用之前,您需要安装该库并下载停用词语料库。

此函数将新闻文章作为输入并返回文本的预处理版本:

  1. import nltk
  2. nltk.download('stopwords')
  3. from nltk.corpus import stopwords
  4. from nltk.tokenize import word_tokenize
  5. import string
  6. def preprocess_text(text):
  7.     # Convert to lowercase
  8.     text = text.lower()
  9.     # Remove punctuation
  10.     text = text.translate(str.maketrans(''''string.punctuation))
  11.     # Tokenize text
  12.     tokens = word_tokenize(text)
  13.     # Remove stop words
  14.     stop_words = set(stopwords.words('english'))
  15.     tokens = [token for token in tokens if token not in stop_words]
  16.     # Rejoin tokens into a string
  17.     text = ' '.join(tokens)
  18.     return text

第 3 步:进行情绪分析

一旦数据经过预处理,我们就可以对新闻文章进行情感分析。我们将使用该vaderSentiment库执行情绪分析。该库专为社交媒体文本的情感分析而设计,已被证明在推文和新闻标题等简短的非正式文本上表现良好。

您需要在使用之前安装该库:

!pip install vaderSentiment

此函数将经过预处理的新闻文章作为输入,并返回介于 -1(负面情绪)和 1(正面情绪)之间的情绪分数:

  1. from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
  2. def get_sentiment(text):
  3.     analyzer = SentimentIntensityAnalyzer()
  4.     scores = analyzer.polarity_scores(text)
  5.     sentiment = scores['compound']
  6.     return sentiment

第 4 步:分析数据

现在我们有了收集和预处理新闻文章文本并执行情感分析的函数,我们可以使用这些函数来检索新闻文章,对其进行预处理并执行情感分析:

  1. def get_stock_news_sentiment(api_key, stock):
  2.     # Make request to NewsAPI
  3.     url = f'https://newsapi.org/v2/everything?q={stock}&apiKey={api_key}'
  4.     response = requests.get(url)
  5.     data = response.json()
  6.     sentiments = []
  7.     for article in data['articles']:
  8.         # Preprocess text
  9.         text = article['title'+ ' ' + article['description']
  10.         text = preprocess_text(text)
  11.         
  12.         # Perform sentiment analysis
  13.         sent = get_sentiment(text)
  14.         sentiments.append(sent)
  15.     # Calculate average sentiment
  16.     if len(sentiments) > 0:
  17.         avg_sentiment = sum(sentiments) / len(sentiments)
  18.     else:
  19.         avg_sentiment = 0
  20.     return avg_sentiment

此代码检索有关 Apple 和 Google 的新闻文章,对其进行预处理,执行情绪分析,并打印平均情绪分数:

  1. api_key = 'YOUR_API_KEY'
  2. apple_sentiment = get_news_sentiment(api_key'AAPL')
  3. google_sentiment = get_news_sentiment(api_key'GOOGL')
  4. print(f'Average sentiment for Apple: {apple_sentiment:.2f}')
  5. print(f'Average sentiment for Google: {google_sentiment:.2f}')

示例输出:Apple 的平均情绪:0.23 Google 的平均情绪:0.19

请注意,情绪分数介于 -1 和 1 之间,其中负分表示负面情绪,正分表示正面情绪,接近 0 的分数表示中性情绪。

以下是完整代码:

  1. import requests
  2. import nltk
  3. nltk.download('stopwords')
  4. from nltk.corpus import stopwords
  5. from nltk.tokenize import word_tokenize
  6. import string
  7. def preprocess_text(text):
  8.     # Convert to lowercase
  9.     text = text.lower()
  10.     # Remove punctuation
  11.     text = text.translate(str.maketrans(''''string.punctuation))
  12.     # Tokenize text
  13.     tokens = word_tokenize(text)
  14.     # Remove stop words
  15.     stop_words = set(stopwords.words('english'))
  16.     tokens = [token for token in tokens if token not in stop_words]
  17.     # Rejoin tokens into a string
  18.     text = ' '.join(tokens)
  19.     return text
  20. from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
  21. def get_sentiment(text):
  22.     analyzer = SentimentIntensityAnalyzer()
  23.     scores = analyzer.polarity_scores(text)
  24.     sentiment = scores['compound']
  25.     return sentiment
  26. def get_stock_news_sentiment(api_key, stock):
  27.     # Make request to NewsAPI
  28.     url = f'https://newsapi.org/v2/everything?q={stock}&apiKey={api_key}'
  29.     response = requests.get(url)
  30.     data = response.json()
  31.     sentiments = []
  32.     for article in data['articles']:
  33.         # Preprocess text
  34.         text = article['title'+ ' ' + article['description']
  35.         text = preprocess_text(text)
  36.         
  37.         # Perform sentiment analysis
  38.         sent = get_sentiment(text)
  39.         sentiments.append(sent)
  40.     # Calculate average sentiment
  41.     if len(sentiments) > 0:
  42.         avg_sentiment = sum(sentiments) / len(sentiments)
  43.     else:
  44.         avg_sentiment = 0
  45.     return avg_sentiment
  46. api_key = 'YOUR API KEY'
  47. apple_sentiment = get_stock_news_sentiment(api_key'AAPL')
  48. google_sentiment = get_stock_news_sentiment(api_key'GOOGL')
  49. print(f'Average sentiment for Apple: {apple_sentiment:.2f}')
  50. print(f'Average sentiment for Google: {google_sentiment:.2f}')

结论

尽管有关特定股票的新闻文章的整体情绪可能会有所帮助,但我不建议您仅以此为基础做出投资决定。

推荐书单

《Pandas1.x实例精解》

《Pandas1.x实例精解》详细阐述了与Pandas相关的基本解决方案,主要包括Pandas基础,DataFrame基本操作,创建和保留DataFrame,开始数据分析,探索性数据分析,选择数据子集,过滤行,对齐索引,分组以进行聚合、过滤和转换,将数据重组为规整形式,组合Pandas对象,时间序列分析,使用Matplotlib、Pandas和Seaborn进行可视化,调试和测试等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

《Pandas1.x实例精解》([美]马特·哈里森,等)【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《Pandas1.x实例精解》在线选购,本书作者:,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N4P3https://item.jd.com/13255935.html

精彩回顾

【第1篇】利用Pandas操作DataFrame的列与行

【第2篇】Pandas如何对DataFrame排序和统计

【第3篇】Pandas如何使用DataFrame方法链

【第4篇】Pandas如何比较缺失值以及转置方向?

【第5篇】DataFrame如何玩转多样性数据

【第6篇】如何进行探索性数据分析?

【第7篇】使用Pandas处理分类数据

【第8篇】使用Pandas处理连续数据

【第9篇】使用Pandas比较连续值和连续列

【第10篇】如何比较分类值以及使用Pandas分析库

微信搜索关注《Python学研大本营》

访问【IT今日热榜】,发现每日技术热点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/893903
推荐阅读
相关标签
  

闽ICP备14008679号