最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python股票開源庫akshare的具體使用

 更新時間:2024年04月01日 10:23:23   作者:數(shù)據(jù)人阿多  
AKShare是一個開源財(cái)經(jīng)數(shù)據(jù)接口庫,本文主要介紹了Python股票開源庫akshare的具體使用,具有一定的參考價值,感興趣的可以了解一下

背景

從小編真實(shí)接觸股票已經(jīng)有10年之久了,因?yàn)榇髮W(xué)的專業(yè)就是數(shù)據(jù)與應(yīng)用數(shù)據(jù)(金融學(xué)方向),大三、大四學(xué)期時學(xué)習(xí)了很多涉及金融相關(guān)的課程,特別是在大四時,老師還專門給每位同學(xué)開通了模擬炒股的賬戶,讓全班同學(xué)一起模擬炒股,但小編用真金白銀炒股的時間大概是2018年,距現(xiàn)在也有5年時間,一直是韭菜中

最近大家也看到了曾任《環(huán)球時報(bào)》總編輯的胡錫進(jìn),也開始入市炒股,并且每天都會發(fā)博文,分享當(dāng)天的炒股感受

于是小編就試著獲取股票的數(shù)據(jù)來研究一下,經(jīng)過查找與對比,小編決定用akshare這個庫,因?yàn)樵搸煲恢庇懈?,并且文檔是中文,而且比較詳細(xì),

各種數(shù)據(jù)

akshare文檔地址:https://www.akshare.xyz/

akshare

AKShare是一個開源財(cái)經(jīng)數(shù)據(jù)接口庫,所采集的數(shù)據(jù)皆來自公開的數(shù)據(jù)源,本文目的是當(dāng)上市公司發(fā)布財(cái)報(bào)時,在同花順上獲取其關(guān)鍵指標(biāo)并輸出摘要,可以用來寫行研的日報(bào)等。

選擇AKShare的原因:免費(fèi)且能迅速獲得數(shù)據(jù),tushare、baostock等庫一般不能獲得當(dāng)天發(fā)的財(cái)報(bào)數(shù)據(jù),而AKShare可以獲得各大權(quán)威財(cái)經(jīng)網(wǎng)站的數(shù)據(jù)。

股票各種數(shù)據(jù)獲取方法

導(dǎo)入akshare庫

import akshare as ak
import pandas as pd

1、股票的基本信息數(shù)據(jù)

ak.stock_individual_info_em(symbol="000651")

基本信息

2、實(shí)時數(shù)據(jù),當(dāng)日的成交數(shù)據(jù)

單次返回所有滬深京 A 股上市公司的實(shí)時行情數(shù)據(jù)

ak.stock_zh_a_spot_em()   

實(shí)時數(shù)據(jù)

3、歷史數(shù)據(jù),歷史的成交數(shù)據(jù)

ak.stock_zh_a_hist(symbol="000651", 
                   period="daily", 
                   start_date="20230701", 
                   end_date='20230725', 
                   adjust=""   #不復(fù)權(quán)
                  )  

歷史數(shù)據(jù)

4、資金流向數(shù)據(jù)

限量: 單次獲取指定市場和股票的近 100 個交易日的資金流數(shù)據(jù)

ak.stock_individual_fund_flow(stock="000651", market="sz")

資金流向數(shù)據(jù)

5、行情報(bào)價,買賣各5檔

ak.stock_bid_ask_em(symbol="000651")

行情報(bào)價

根據(jù)數(shù)據(jù)生成摘要

函數(shù)如下,注意參數(shù)和后面的函數(shù)要對應(yīng)。這里的代碼稍顯麻煩,主要是在描述同比漲跌幅時公司有要求,具體生成的格式大家可按自己的要求進(jìn)行更改。

def generate_summary(name, period_desc, revenue, revenue_change, profit, profit_change, pre_profit):
    if revenue_change > 0:
        revenue_desc = f"同比上升{revenue_change:.2f}%"
    elif revenue_change < 0:
        revenue_desc = f"同比下降{abs(revenue_change):.2f}%"
    else:
        revenue_desc = "同比持平"
 
    if profit >= 0 and pre_profit >= 0:
        if profit > pre_profit:
            profit_decs = f"同比上升{profit_change:.2f}%"
        elif profit < pre_profit:
            profit_decs = f"同比下降{abs(profit_change):.2f}%"
        else:
            profit_decs = "同比持平"
    elif profit > 0 > pre_profit:
        profit_decs = "扭虧為盈"
    elif profit < 0 < pre_profit:
        profit_decs = "轉(zhuǎn)盈為虧"
    else:  # 連年虧損
        if abs(profit) > abs(pre_profit):
            profit_decs = "虧損擴(kuò)大"
        elif abs(profit) < abs(pre_profit):
            profit_decs = "虧損減少"
        else:
            profit_decs = "同比持平"
    # 轉(zhuǎn)化為億元、萬元的單位
    revenue = get_unit(revenue)
    profit = get_unit(profit)
 
    summary = f"【{name}】{period_desc}實(shí)現(xiàn)營業(yè)總收入{revenue},{revenue_desc};" \
              f"歸母凈利潤{profit},{profit_decs}。"
    return summary

獲取摘要

需要輸入報(bào)告期和股票代碼。(這里只獲取營收和利潤數(shù)據(jù),注意同花順上這個凈利潤實(shí)際上是指歸母凈利潤)

date_mapping_1 = {
    "03-31": "季度報(bào)告:",
    "06-30": "半年度報(bào)告:",
    "09-30": "季度報(bào)告:",
    "12-31": "年度報(bào)告:"
}
date_mapping_2 = {
    "03-31": "Q1",
    "06-30": "H1",
    "09-30": "前三季度",
    "12-31": "年"
}
 
 
def get_summary():
    period = period_entry.get()
    code_list = code_list_entry.get().split(',')
    try:
        results = []  # 輸出結(jié)果
 
        title = date_mapping_1.get(period[5:], "未知")  # 摘要標(biāo)題
        if title == "未知":
            messagebox.showerror("報(bào)告期錯誤")
            return  # 結(jié)束函數(shù)的運(yùn)行
        quarter = date_mapping_2.get(period[5:], "未知")  # 季度描述
 
        # 獲取去年同期的報(bào)告期字符串
        year = period[:4]  # 獲取前四個字符
        int_year = int(year) - 1  # 將前四個字符轉(zhuǎn)換為數(shù)字并減去1
        last_year = str(int_year).zfill(4)  # 將得到的數(shù)字轉(zhuǎn)換為字符串,補(bǔ)齊至四位
        yoy_period = period.replace(year, last_year, 1)  # 替換字符串的前四個字符,得到去年同期的報(bào)告期
 
        period_desc = f"{title}公司{year}{quarter}"
 
        # 對每個輸入的code取數(shù)據(jù)
        for code in code_list:
            # 檢查code能否匹配公司
            try:
                company = ak.stock_individual_info_em(symbol=code)
                name = company.iloc[5][1]
            except KeyError:
                results.append(f"[code]:無法匹配\n")
                continue
            # 從同花順獲取關(guān)鍵財(cái)務(wù)指標(biāo)
            try:
                data = ak.stock_financial_abstract_ths(symbol=code, indicator="按報(bào)告期")
                data = data.set_index(data.columns[0])
            except KeyError:
                results.append(f"[code]:{name}獲取財(cái)報(bào)數(shù)據(jù)失敗\n")
                continue
            # 判斷是否存在數(shù)據(jù)
            try:
                revenue = remove_unit(data.loc[period, "營業(yè)總收入"])
                revenue_change = str2percentage(data.loc[period, "營業(yè)總收入同比增長率"])
                profit = remove_unit(data.loc[period, "凈利潤"])
                profit_change = str2percentage(data.loc[period, "凈利潤同比增長率"])
                # 獲取去年歸母凈利潤數(shù)據(jù)
                pre_profit = remove_unit(data.loc[yoy_period, "凈利潤"])
            except KeyError:
                results.append(f"[code]:{name}報(bào)告未更新\n")
                continue
 
            # 調(diào)用函數(shù)獲取財(cái)報(bào)摘要,并保存在輸出列表中
            summary = generate_summary(name, period_desc, revenue, revenue_change, profit, profit_change, pre_profit)
            results.append(f"{summary}\n")
        result_text.config(state='normal')  # 將輸出區(qū)域狀態(tài)更改為可編輯
        result_text.delete('1.0', tk.END)  # 清空區(qū)域
        result_text.insert(tk.END, "\n".join(results))  # 將輸出列表中的內(nèi)容以換行符分隔,添加到輸出區(qū)域中
        result_text.config(state='disabled')  # 將輸出區(qū)域狀態(tài)更改為不可編輯
    except Exception as e:
        messagebox.showerror("Error", f"獲取摘要時出錯:{str(e)}")
 
 
# 創(chuàng)建主窗口
root = tk.Tk()
root.title("日報(bào)-財(cái)務(wù)報(bào)告摘要akshare")
 
# 添加標(biāo)簽和輸入框
period_label = tk.Label(root, text="請輸入報(bào)告期(如2023-06-30)")
period_label.pack()
 
period_entry = tk.Entry(root)
period_entry.pack()
 
code_list_label = tk.Label(root, text="請輸入公司code(多個則以英文逗號分隔)")
code_list_label.pack()
 
code_list_entry = tk.Entry(root, width=100)
code_list_entry.pack()
 
# 添加按鈕
run_button = tk.Button(root, text="運(yùn)行", command=get_summary)
run_button.pack()
 
# 添加結(jié)果顯示區(qū)域
result_text = tk.Text(root, height=30, width=120, state='disabled')
result_text.pack()
 
# 啟動 GUI 循環(huán)
root.mainloop()

每日特定股票數(shù)據(jù)匯總案例

下面展示每日獲取特定股票數(shù)據(jù),可以做成定時任務(wù),在15:00閉市后獲取

"""
===========================
@Time : 2023/7/26 20:13
@File : stock_day
@Software: PyCharm
@Platform: Win10
@Author : DataShare
===========================
"""
import akshare as ak
import pandas as pd
import datetime
import sys

def stock_to_excel(stock_code, stock_name):
    if stock_code[0] == '6':
        market = 'sh'
    elif stock_code[0] == '0':
        market = 'sz'

    df1 = ak.stock_zh_a_spot_em()
    df2 = df1[df1['代碼'] == stock_code]

    dt = str(datetime.date.today())   #當(dāng)日
    df3 = ak.stock_individual_fund_flow(stock=stock_code, market=market) #在15:00之后獲取
    df4 = df3[df3['日期'] == dt]

    result = {
        "日期": dt,
        "股票代碼": stock_code,
        "股票名稱": stock_name,
        "前一日收盤價": df2['昨收'].to_list()[0],
        "開盤": df2['今開'].to_list()[0],
        "收盤": df2['最新價'].to_list()[0],
        "最高": df2['最高'].to_list()[0],
        "最低": df2['最低'].to_list()[0],
        "成交量": df2['成交量'].to_list()[0],
        "成交額": df2['成交額'].to_list()[0],
        "振幅": df2['振幅'].to_list()[0],
        "漲跌幅": df2['漲跌幅'].to_list()[0],
        "漲跌額": df2['漲跌額'].to_list()[0],
        "換手率": df2['換手率'].to_list()[0],
        "量比": df2['量比'].to_list()[0],
        "市盈率-動態(tài)": df2['市盈率-動態(tài)'].to_list()[0],
        "市凈率": df2['市凈率'].to_list()[0],
        "60日漲跌幅": df2['60日漲跌幅'].to_list()[0],
        "主力凈流入-凈額": df4['主力凈流入-凈額'].to_list()[0],
        "主力凈流入-凈占比": df4['主力凈流入-凈占比'].to_list()[0],
        "超大單凈流入-凈額": df4['超大單凈流入-凈額'].to_list()[0],
        "超大單凈流入-凈占比": df4['超大單凈流入-凈占比'].to_list()[0],
        "大單凈流入-凈額": df4['大單凈流入-凈額'].to_list()[0],
        "大單凈流入-凈占比": df4['大單凈流入-凈占比'].to_list()[0],
        "中單凈流入-凈額": df4['中單凈流入-凈額'].to_list()[0],
        "中單凈流入-凈占比": df4['中單凈流入-凈占比'].to_list()[0],
        "小單凈流入-凈額": df4['小單凈流入-凈額'].to_list()[0],
        "小單凈流入-凈占比": df4['小單凈流入-凈占比'].to_list()[0]
    }

    return result


if __name__ == '__main__':
    stocks_code = {'000651': '格力電器',
                   '002241': '歌爾股份',
                   '002739': '萬達(dá)電影',
                   '600956': '新天綠能',
                   '600031': '三一重工',
                   '600703': '三安光電',
                   '002027': '分眾傳媒',
                   '600030': '中信證券',
                   '002939': '長城證券',
                   }   #小編買過的股票
    
    dt = str(datetime.date.today())
    results=[]
    for stock_code, stock_name in stocks_code.items():
        print(f'{stock_name}:{stock_code}')
        try:
            results.append(stock_to_excel(stock_code, stock_name))
        except Exception as e:
            print("運(yùn)行中出錯",e)
            sys.exit(-1)
    
    pd.DataFrame.from_dict(results).to_excel(f'./data/{dt}.xlsx', index=False)

 到此這篇關(guān)于Python股票開源庫akshare的具體使用的文章就介紹到這了,更多相關(guān)Python akshare內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3.6中@property裝飾器的使用方法示例

    python3.6中@property裝飾器的使用方法示例

    這篇文章主要介紹了python3.6中@property裝飾器的使用方法,結(jié)合實(shí)例形式分析了python3.6中@property裝飾器的功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • python如何使用騰訊云發(fā)送短信

    python如何使用騰訊云發(fā)送短信

    這篇文章主要介紹了python如何使用騰訊云發(fā)送短信,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Django同時連接多種數(shù)據(jù)庫的實(shí)現(xiàn)

    Django同時連接多種數(shù)據(jù)庫的實(shí)現(xiàn)

    在開發(fā)Django項(xiàng)目的時候,很多時候都是使用一個數(shù)據(jù)庫,即settings 中只有default數(shù)據(jù)庫,但是有一些項(xiàng)目確實(shí)也需要使用多個數(shù)據(jù)庫,本文主要介紹了Django同時連接多種數(shù)據(jù)庫的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • python利用正則表達(dá)式搜索單詞示例代碼

    python利用正則表達(dá)式搜索單詞示例代碼

    正則表達(dá)式本身是一種小型的、高度專業(yè)化的編程語言,下面這篇文章主要給大家介紹了關(guān)于python利用正則表達(dá)式實(shí)現(xiàn)搜索單詞的相關(guān)資料,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Python中使用Minio實(shí)現(xiàn)圖像或視頻文件存儲的步驟

    Python中使用Minio實(shí)現(xiàn)圖像或視頻文件存儲的步驟

    本文章向大家介紹了Minio這一款簡易的云存儲服務(wù)器,并講述了如何在Python中去使用Minio,實(shí)現(xiàn)了視頻文件的上傳和獲取,感興趣的朋友一起看看吧
    2025-02-02
  • Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解

    Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解

    這篇文章主要介紹了Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用python調(diào)用llama3進(jìn)行對話的操作步驟

    使用python調(diào)用llama3進(jìn)行對話的操作步驟

    Meta?已將最新的?LLaMa3?進(jìn)行了開源,因此,我們也可以方便的使用?Python?進(jìn)行?LLaMa3?模型的調(diào)用和開發(fā),本文給大家介紹了如何使用?python?調(diào)用?llama3?進(jìn)行對話,需要的朋友可以參考下
    2024-09-09
  • python中l(wèi)ogging包的使用總結(jié)

    python中l(wèi)ogging包的使用總結(jié)

    本篇文章給大家詳細(xì)講述了python中l(wèi)ogging包的使用的相關(guān)知識點(diǎn)以及原理分析,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-02-02
  • PyCharm中鼠標(biāo)懸停在函數(shù)上時顯示函數(shù)和幫助的解決方法

    PyCharm中鼠標(biāo)懸停在函數(shù)上時顯示函數(shù)和幫助的解決方法

    這篇文章主要介紹了PyCharm中鼠標(biāo)懸停在函數(shù)上時顯示函數(shù)和幫助,本文給大家分享問題解決方法,對PyCharm鼠標(biāo)懸停函數(shù)上顯示函數(shù)的解決方法感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python重試庫Retrying和Tenacity的實(shí)現(xiàn)

    Python重試庫Retrying和Tenacity的實(shí)現(xiàn)

    本文詳細(xì)介紹了在Python中使用Retrying和Tenacity庫進(jìn)行任務(wù)重試,包括設(shè)置最大嘗試次數(shù)、重試間隔策略、自定義異常處理和返回條件,具有一定的參考價值,感興趣的可以了解一下
    2025-09-09

最新評論

获嘉县| 平江县| 诏安县| 中卫市| 周宁县| 东明县| 临漳县| 满城县| 宾阳县| 高陵县| 青海省| 湘西| 乃东县| 合阳县| 迭部县| 潜江市| 琼海市| 沾化县| 繁昌县| 逊克县| 根河市| 酉阳| 神农架林区| 南溪县| 陕西省| 永修县| 逊克县| 云安县| 新建县| 平安县| 安丘市| 开鲁县| 兰考县| 堆龙德庆县| 康定县| 温州市| 罗甸县| 莒南县| 历史| 泗阳县| 布尔津县|