社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python技术】提取新闻联播热点内容分析并让大模型给出投资建议

灵度智能 • 2 月前 • 133 次点击  

不废话,直接附上完整代码:
import akshare as ak
import streamlit as st
import jieba
import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from datetime import datetime, timedelta
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
import re


# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['STHeiti']  # 苹果系统字体
#plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False
is_mac = True

# 初始化智谱 AI
zhipu_api_key = "XXXX"
llm = ChatOpenAI(
    temperature=0.95,
    model="glm-4-flash",
    openai_api_key=zhipu_api_key,
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

# 停用词列表
stop_words = set([
    '的''了''在''是''我''有''和''就''不''人''都''一''一个''上''也''很''到''说''要',
    '去''你',
    '会''着''没有''看''好''自己''这''么''个''什么''那''他''吗''把''给''让''但''还',
    '可以''这个' ,
    '啊''呢''吧''啦''嗯''哦''哈''呀''哎''唉''嘿''嗨''哇''呵''嘛''喂''诶''哼''咦',
    '呜''哟',
    ',''。''、'':'';''!''?''"''"'''', ''''('')''【''】''《''》''…''—''-''~',
    '·''「''」''『''』''〈''〉''﹏''′''°''℃''$''¥''%''@''&''#''*''‰''※''±''∶',
    '∵''∴''∷''∽''≈''≌''≠''≤''≥''∞''∝''∫''∮''∑''∏''∈''∋''∩''∪''∨''∧''∀''∃',
    '∇''∅''∆''∇''∉''∋''∏' '∑''∗''∝''∞''∠''∡''∢''∣''∤''∥''∦''∧''∨''∩''∪''∫',
    '∬''∭''∮''∯''∰''∱''∲''∳''∴''∵''∶''∷''∸''∹''∺''∻''∼''∽''∾''∿''≀''≁''≂',
    '≃''≄''≅''≆''≇''≈''≉''≊''≋''≌''≍''≎''≏''≐''≑''≒''≓''≔''≕''≖''≗''≘''≙',
    '≚''≛''≜''≝''≞''≟''≠''≡''≢''≣''≤''≥''≦''≧''≨''≩''≪''≫''≬''≭''≮''≯''≰',
    '≱''≲''≳''≴''≵''≶''≷''≸''≹''≺''≻' '≼''≽''≾''≿''⊀''⊁''⊂''⊃''⊄''⊅''⊆''⊇',
    '⊈''⊉''⊊''⊋''⊌''⊍''⊎''⊏''⊐''⊑''⊒''⊓''⊔''⊕''⊖''⊗''⊘''⊙''⊚''⊛''⊜''⊝''⊞',
    '⊟''⊠''⊡''⊢''⊣''⊤''⊥''⊦''⊧''⊨''⊩''⊪''⊫''⊬''⊭''⊮''⊯''⊰''⊱''⊲''⊳''⊴''⊵',
    '⊶''⊷''⊸''⊹''⊺''⊻''⊼''⊽''⊾''⊿''⋀''⋁''⋂''⋃''⋄''⋅''⋆''⋇''⋈''⋉''⋊''⋋''⋌',
    '⋍''⋎''⋏''⋐''⋑''⋒''⋓''⋔''⋕''⋖''⋗''⋘''⋙''⋚''⋛' '⋜''⋝''⋞''⋟''⋠''⋡''⋢''⋣',
    '⋤''⋥''⋦''⋧''⋨''⋩''⋪''⋫''⋬''⋭''⋮''⋯''⋰''⋱''⋲''⋳''⋴''⋵''⋶''⋷''⋸''⋹''⋺',
    '⋻''⋼''⋽''⋾''⋿'
])


# 获取新闻数据
@st.cache_data
def get_news_data(date):
    news_data = ak.news_cctv(date)
    return news_data


# 分词和统计
def process_news(news_data):
    all_words = []
    for content in news_data['content']:
        # 使用正则表达式去除标点符号
        content = re.sub(r'[^\w\s]''', content)
        words = jieba.cut(content)
        # 过滤停用词
        words = [word for word in words if word not in stop_words and len(word) > 1]
        all_words.extend(words)

    word_count = Counter(all_words)
    return word_count


# 生成词云图
def generate_wordcloud(word_count):
    if is_mac:
        wc = WordCloud(font_path="/System/Library/fonts/PingFang.ttc", width=800, height=400, background_color='white')
    else:
        wc = WordCloud(width=800, height=400, background_color='white')

    wc.generate_from_frequencies(word_count)

    fig, ax = plt.subplots(figsize=(10, 5))
    ax.imshow(wc, interpolation='bilinear')
    ax.axis('off')
    return fig




# 使用 LangChain 和智谱 GLM-4-flash 生成投资建议
def generate_investment_advice(news_content):
    prompt = PromptTemplate(
        input_variables=["news"],
        template="基于以下新闻内容,给出3-5条具体的股票投资建议:\n{news}\n\n投资建议:"
    )

    chain = LLMChain(llm=llm, prompt=prompt)

    response = chain.run(news=news_content)

    # 将建议拆分成列表
    advice_list = response.strip().split("\n")
    return  advice_list


# Streamlit应用
def main():
    st.title("新闻联播股票热点分析")

    # 日期选择
    yesterday = datetime.now() - timedelta(days=1)
    selected_date = st.date_input("选择新闻日期", value=yesterday)
    date_str = selected_date.strftime("%Y%m%d")

    news_data = get_news_data(date_str)
    word_count = process_news(news_data)


    st.subheader("热点词云")
    wordcloud_fig = generate_wordcloud(word_count)
    st.pyplot(wordcloud_fig)


    st.subheader("投资建议")
    news_content = "\n".join(news_data['content'].tolist())
    advice = generate_investment_advice(news_content)
    for item in advice:
        st.write(item)

    st.subheader("热点词汇Top 10")
    top_words = pd.DataFrame(word_count.most_common(10), columns=['词汇''频次'])
    st.table(top_words)


if __name__ == "__main__":
    main()

我这里用的免费智谱AI模型 glm-4-flash, 换成其他的大模型一样可以用的。  
代码比较简单,用到了akshare 、streamlit 、wordcloud、matplotlib、 langchain等。这里简单介绍下,主要功能包括:

1、通过akshare获取指定日期的新闻数据。

2、对新闻内容进行分词处理并统计词频。

3、生成热点词云图。

4、使用AI模型根据新闻内容生成投资建议。

5、展示热点词汇Top 10。


看了下新闻内容以及投资建议。 这段时间如果真的看新闻联播炒股, 可能输的裤衩都不剩了。 反正我只相信人工智能AI, 不管是软件(应用、游戏、传媒等),还是硬件(机器人、 眼镜、玩具、 消费电子等)、还是基础设施(数据中心、算力、配件、 液冷等)。 貌似也比新闻联播的靠谱, 你说是不是。

说下我写这篇文章的背景。 昨天休息的时候,逛了逛小H书,发现有个账号专门针对新闻联播的内容进行商机洞察和投资建议,貌似关注量还可以。  晚上的时候我在想, 这个用Python实现貌似不难, 春节期间玩得开心了, 最近都没怎么写代码了, 有点玩物丧志的感觉,要不撸一下代码试一下。  毕竟作为程序员,还是不要忘了自己的主业。 2025年开门红,这2天小试牛刀赚了一小笔, 有点感觉上班没啥意思的念头,突然有全职炒股的想法,打住。

可能会有同学会说,炒股这么赚钱, 你还做其他的干嘛。 全职炒股不就好了。  这里说明一下, 我买股看重大盘情绪,出手讲究高胜率,不到买点可能就不出手了, 实际出手机会没想象的那么多。 再加上资金量小, 小打小闹。这样有个好处,不管市场怎么样,心态平和。 坏处当然有,很难赚大钱。

最后打个广告,现在A股行情火爆,找我开户费率有优惠, 入金一定门槛开通QMT量化交易软件。 这里说明一下,量化程序我不代写, 有问题可以拉进编程、投资群里沟通答疑, 通过下面二维码可以加入, 写下备注。有些时候自己在忙,没及时回复见谅。




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178920
 
133 次点击