<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python搭建一個股票輿情分析系統(tǒng)

          共 7804字,需瀏覽 16分鐘

           ·

          2021-04-24 20:22

          寫在前面

          下面的這篇文章將手把手教大家搭建一個簡單的股票輿情分析系統(tǒng),其中將先通過金融界網(wǎng)站爬取指定股票在一段時間的新聞,然后通過百度情感分析接口,用于評估指定股票的正面和反面新聞的占比,以此確定該股票是處于利好還是利空的狀態(tài)。

          1
          環(huán)境準備


          本地環(huán)境:

          Python 3.7IDE:Pycharm

          庫版本:

          re 2.2.1lxml 4.6.3requests 2.24.0aip 4.15.5matplotlib 3.2.1

          其中用到了百度的ai接口,通過pip安裝的方式如下:

          pip install baidu-aip
          然后,導入需要用到的所有庫:
          import requestsimport matplotlib.pyplot as pltimport pandas as pdfrom lxml import etreefrom aip import AipNlp

          2
          代碼實現(xiàn)


          1、獲取新聞數(shù)據(jù)

          首先,我們需要通過金融界(http://stock.jrj.com.cn/share)的網(wǎng)站爬取股票的新聞信息。獲取指定股票的新聞資訊的接口形式是:

          http://stock.jrj.com.cn/share,股票代碼,ggxw.shtml如:http://stock.jrj.com.cn/share,600381,ggxw.shtml

          如600381股票的新聞資訊如下圖所示:

          需要注意的是,當獲取后面幾頁的新聞時,其接口需要加一個后綴,形式如下:

          http://stock.jrj.com.cn/share,600381,ggxw_page.shtml如獲取第二頁,http://stock.jrj.com.cn/share,600381,ggxw_2.shtml

          首先,我們定義一個函數(shù),傳入一個股票代碼的列表,表示用于下載到本地的股票新聞的代碼。然后將每個股票的代碼拼接到api中,然后調(diào)用parse_pages()函數(shù)用于爬取該api下網(wǎng)頁中的數(shù)據(jù)。

          # 下載指定的股票的新聞數(shù)據(jù)def download_news(codes):    for code in codes:        print(code)        url = "http://stock.jrj.com.cn/share," + str(code) + ",ggxw.shtml"        parse_pages(url, code)

          接下來,我們實現(xiàn)上面的parse_pages()函數(shù)。其中需要先獲取每一頁新聞數(shù)據(jù)的總的頁數(shù),然后針對每一頁拼接對應(yīng)的api接口,最后再對每一頁的新聞數(shù)據(jù)進行下載。

          # 解析每個頁面的數(shù)據(jù)def parse_pages(url, code):    max_page = get_max_page(url)    for i in range(1, max_page + 1):        if i != 1:            url = "http://stock.jrj.com.cn/share," + str(code) + ",ggxw_" + str(i) + ".shtml"        download_page(url, code)

          獲取最大頁數(shù)的函數(shù)如下,其中用到了lxml下的etree模塊來解析html代碼,然后通過正則表達式獲取最大頁數(shù)。

          # 獲取url下的最大page數(shù)def get_max_page(url):    page_data = requests.get(url).content.decode("gbk")    data_tree = etree.HTML(page_data)    if page_data.find("page_newslib"):        max_page = data_tree.xpath("http://*[@class=\"page_newslib\"]//a[last()-1]/text()")        return int(max_page[0])    else:        return 1

          接下來實現(xiàn)download_page()函數(shù),它的作用通過正則表達式匹配頁面中的新聞標題,并將獲取的標題數(shù)據(jù)保存到本地文件中。

          # 解析指定頁面的數(shù)據(jù)并保存至本地def download_page(url, code):    try:        page_data = requests.get(url).content.decode("gbk")        data_tree = etree.HTML(page_data)        titles = data_tree.xpath("http://*[@class = \"newlist\"]//li/span/a/text()")        for title in titles:            title = title + "\r\n"            with open(str(code) + ".txt", "a") as file:                file.write(title)                file.flush()        return    except:        print("服務(wù)器超時")

          接下來,通過調(diào)用上面的download_news()函數(shù),并傳入需要爬取新聞的股票代碼列表,就可以將新聞數(shù)據(jù)爬取到本地了。

          codes = [600381, 600284, 600570, 600519, 600258, 601179]download_news(codes)

          得到的新聞數(shù)據(jù)形式如下圖所示:

          2、新聞情緒分析以及統(tǒng)計

          在獲取了股票的新聞數(shù)據(jù)之后,我們接下來需要對每支股票的所有新聞進行情感分析了。其中用到了百度人工智能接口aip下的aipNLP用于對所有新聞數(shù)據(jù)進行自然語言處理,并進行情感分析。需要注意的是,在通過百度人工智能接口進行情感分析之前需要先注冊并獲取APP_ID、API_KEY以及SECRET_KEY。獲取的方式如下:

          首先,登錄并注冊百度人工智能平臺(https://ai.baidu.com/):

          然后,在自己的控制臺中找到自然語言處理,并創(chuàng)建應(yīng)用,如下圖所示:

          創(chuàng)建完成之后就可以得到自己的APP_ID、API_KEY以及SECRET_KEY,如下圖所示:

          接下來通過一個函數(shù)來實現(xiàn)對指定的股票進行情感分析并保存到本地:

          # 對指定的股票進行情感分析并保存到本地def analyze_stocks(codes):    df = pd.DataFrame()    for code in codes:        print(code)        stock_dict = analyze(code)        df = df.append(stock_dict, ignore_index=True)    df.to_csv('./stocks.csv')

          其中的analyze()函數(shù)實現(xiàn)如下,其中需要將前面申請的APP_ID、API_KEY以及SECRET_KEY進行定義。之后讀取包含每個股票的所有新聞的文件,其中每一行表示一個新聞標題。然后通過aipNLP對每個標題進行情感分析,進而基于得到的分析結(jié)果來統(tǒng)計積極新聞和消極新聞的個數(shù),最后將針對每支股票的分析結(jié)果返回:

          # 對指定股票的所有新聞數(shù)據(jù)進行情感分析并進行統(tǒng)計def analyze(code):    APP_ID = 'your app id'    API_KEY = 'your api key'    SECRET_KEY = 'your secret key'    positive_nums = 0    nagative_nums = 0    count = 0    aipNlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)    lines = open(str(code) + '.txt').readlines()    for line in lines:        if not line.isspace():            line = line.strip()            try:                result = aipNlp.sentimentClassify(line)                positive_prob = result['items'][0]['positive_prob']                nagative_prob = result['items'][0]['negative_prob']                count += 1                if positive_prob >= nagative_prob:                    positive_nums += 1                else:                    nagative_nums += 1            except:                pass    avg_positive = positive_nums / count    avg_nagative = nagative_nums / count    print('股票代碼:',code, '消極比例:', avg_nagative, '積極比例:',avg_positive)    return {'股票代碼':code, '消極比例':avg_nagative, '積極比例':avg_positive}

          調(diào)用下面的代碼進行分析,并生成統(tǒng)計結(jié)果:

          codes = [600381, 600284, 600570, 600519, 600258, 601179]analyze_stocks(codes)

          3、數(shù)據(jù)可視化

          最后我們將得到的結(jié)果進行可視化,可以直觀地看到每支股票的消極新聞和積極新聞所占的比例。

          def show():    matplotlib.rcParams['font.sans-serif'] = ['SimHei']    matplotlib.rcParams['axes.unicode_minus'] = False    df = pd.read_csv('./stocks.csv', index_col='股票代碼', usecols=['股票代碼', '消極比例','積極比例'])    df.plot(kind='barh', figsize=(10, 8))    plt.show()

          效果圖如下所示:


          3
          總結(jié)


          在這篇文章中,我們介紹了如何基于python搭建一個簡單的股票輿情分析系統(tǒng),其中將先通過金融界網(wǎng)站爬取指定股票在一段時間的新聞,然后通過百度情感分析接口對新聞進行情感分析,最后統(tǒng)計股票的正面和反面新聞的占比,以此確定該股票是處于利好還是利空的狀態(tài)。基于此系統(tǒng),大家可以進行進一步的進行擴展以應(yīng)用。

          公眾號后臺回復“080”關(guān)鍵字獲取完整代碼。本文內(nèi)容僅僅是技術(shù)探討和學習,并不構(gòu)成任何投資建議。

          Chrome 靈魂插件!


          谷歌工程師開源:Python 調(diào)試神器 Cyberbrain


          哈哈哈哈,這個勒索軟件笑死我了!


          讓我知道你在看

          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级做aA片毛片久久久 | 午夜一级805o | 国产肏屄网站 | 人妻3P真实偷拍 | 围产精品久久久久久久久久久久 |