akshare 1.14.49__py3-none-any.whl → 1.17.99__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- akshare/__init__.py +595 -129
- akshare/air/air_hebei.py +77 -54
- akshare/air/air_zhenqi.py +0 -4
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/article/cons.py +1 -0
- akshare/article/epu_index.py +4 -3
- akshare/article/ff_factor.py +19 -8
- akshare/article/fred_md.py +4 -1
- akshare/article/risk_rv.py +3 -8
- akshare/bank/bank_cbirc_2020.py +11 -11
- akshare/bank/cons.py +7 -6
- akshare/bond/bond_buy_back_em.py +228 -0
- akshare/bond/bond_cb_sina.py +1 -0
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_cbond.py +19 -14
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +1 -1
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +4 -0
- akshare/bond/cons.py +14 -11
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/crypto/__init__.py +1 -1
- akshare/crypto/crypto_bitcoin_cme.py +9 -7
- akshare/crypto/crypto_hold.py +4 -2
- akshare/currency/currency.py +1 -0
- akshare/currency/currency_china_bank_sina.py +11 -6
- akshare/data/__init__.py +1 -1
- akshare/data/cninfo.js +1 -1
- akshare/datasets.py +10 -21
- akshare/economic/cons.py +10 -3
- akshare/economic/macro_australia.py +74 -69
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_canada.py +92 -81
- akshare/economic/macro_china.py +97 -105
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +7 -5
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_japan.py +0 -1
- akshare/economic/macro_other.py +1 -6
- akshare/economic/macro_swiss.py +2 -3
- akshare/economic/macro_uk.py +1 -1
- akshare/economic/macro_usa.py +7 -9
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +0 -1
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/forex/__init__.py +0 -0
- akshare/forex/cons.py +192 -0
- akshare/forex/forex_em.py +149 -0
- akshare/fortune/fortune_500.py +1 -37
- akshare/fortune/fortune_bloomberg.py +6 -3
- akshare/fortune/fortune_forbes_500.py +3 -6
- akshare/fortune/fortune_hurun.py +2 -1
- akshare/fortune/fortune_xincaifu_500.py +17 -14
- akshare/fund/fund_announcement_em.py +145 -0
- akshare/fund/fund_aum_em.py +49 -35
- akshare/fund/fund_em.py +251 -220
- akshare/fund/fund_etf_em.py +44 -35
- akshare/fund/fund_etf_sina.py +75 -27
- akshare/fund/fund_etf_ths.py +2 -0
- akshare/fund/fund_fee_em.py +172 -0
- akshare/fund/fund_fhsp_em.py +42 -32
- akshare/fund/fund_init_em.py +8 -5
- akshare/fund/fund_lof_em.py +12 -19
- akshare/fund/fund_manager.py +25 -11
- akshare/fund/fund_overview_em.py +42 -0
- akshare/fund/fund_portfolio_em.py +23 -21
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +2 -5
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_scale_em.py +24 -13
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +3 -2
- akshare/futures/cons.py +135 -39
- akshare/futures/cot.py +55 -56
- akshare/futures/futures_basis.py +49 -11
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +1 -1
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +66 -59
- akshare/futures/futures_foreign.py +14 -8
- akshare/futures/futures_hf_em.py +215 -61
- akshare/futures/futures_hist_em.py +191 -0
- akshare/futures/futures_hq_sina.py +5 -3
- akshare/futures/futures_index_ccidx.py +24 -82
- akshare/futures/futures_inventory_99.py +70 -272
- akshare/futures/futures_inventory_em.py +14 -11
- akshare/futures/futures_news_shmet.py +2 -2
- akshare/futures/futures_roll_yield.py +11 -24
- akshare/futures/futures_rule.py +7 -3
- akshare/futures/futures_rule_em.py +38 -0
- akshare/futures/futures_settlement_price_sgx.py +21 -6
- akshare/futures/futures_stock_js.py +0 -1
- akshare/futures/futures_to_spot.py +5 -6
- akshare/futures/futures_warehouse_receipt.py +48 -47
- akshare/futures/futures_zh_sina.py +3 -3
- akshare/futures/receipt.py +298 -165
- akshare/futures/requests_fun.py +16 -3
- akshare/futures/symbol_var.py +32 -13
- akshare/futures_derivative/cons.py +100 -103
- akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
- akshare/futures_derivative/futures_contract_info_czce.py +2 -0
- akshare/futures_derivative/futures_contract_info_dce.py +43 -17
- akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
- akshare/futures_derivative/futures_cot_sina.py +8 -6
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/fx_c_swap_cm.py +62 -0
- akshare/fx/fx_quote.py +3 -2
- akshare/fx/fx_quote_baidu.py +2 -1
- akshare/hf/__init__.py +1 -1
- akshare/hf/hf_sp500.py +8 -7
- akshare/index/cons.py +132 -28
- akshare/index/index_cni.py +7 -7
- akshare/index/index_cons.py +2 -2
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +20 -20
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_eri.py +1 -0
- akshare/index/index_global_em.py +167 -0
- akshare/index/index_global_sina.py +82 -0
- akshare/index/index_kq_fz.py +17 -14
- akshare/index/index_kq_ss.py +1 -0
- akshare/index/index_option_qvix.py +351 -16
- akshare/index/index_research_sw.py +21 -21
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +5 -9
- akshare/index/index_stock_zh.py +111 -24
- akshare/index/index_stock_zh_csindex.py +3 -367
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +10 -2
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +0 -1
- akshare/movie/jm.js +0 -1
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -222
- akshare/news/news_stock.py +49 -16
- akshare/option/cons.py +2 -2
- akshare/option/option_commodity.py +341 -220
- akshare/option/option_commodity_sina.py +22 -26
- akshare/option/option_contract_info_ctp.py +63 -0
- akshare/option/option_current_sse.py +61 -0
- akshare/option/option_current_szse.py +84 -0
- akshare/option/option_czce.py +37 -9
- akshare/option/option_daily_stats_sse_szse.py +0 -1
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +7 -7
- akshare/option/option_lhb_em.py +0 -1
- akshare/option/option_margin.py +62 -0
- akshare/option/option_premium_analysis_em.py +58 -53
- akshare/option/option_risk_analysis_em.py +11 -8
- akshare/option/option_risk_indicator_sse.py +3 -4
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/pro/__init__.py +0 -1
- akshare/pro/client.py +6 -4
- akshare/pro/cons.py +3 -2
- akshare/pro/data_pro.py +6 -5
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/qhkc/__init__.py +1 -6
- akshare/qhkc/qhkc_api.py +64 -22
- akshare/qhkc_web/__init__.py +1 -6
- akshare/qhkc_web/qhkc_fund.py +10 -6
- akshare/qhkc_web/qhkc_index.py +28 -14
- akshare/qhkc_web/qhkc_tool.py +62 -59
- akshare/rate/__init__.py +1 -1
- akshare/rate/repo_rate.py +36 -32
- akshare/reits/__init__.py +1 -1
- akshare/reits/reits_basic.py +149 -13
- akshare/request.py +117 -0
- akshare/spot/__init__.py +1 -1
- akshare/spot/spot_hog_soozhu.py +165 -3
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +8 -8
- akshare/stock/stock_ask_bid_em.py +3 -78
- akshare/stock/stock_board_concept_em.py +160 -35
- akshare/stock/stock_board_industry_em.py +163 -70
- akshare/stock/stock_dividend_cninfo.py +31 -17
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +72 -64
- akshare/stock/stock_fund_hold.py +1 -2
- akshare/stock/stock_gsrl_em.py +1 -0
- akshare/stock/stock_hk_comparison_em.py +175 -0
- akshare/stock/stock_hk_famous.py +4 -5
- akshare/stock/stock_hk_fhpx_ths.py +2 -1
- akshare/stock/stock_hk_hot_rank_em.py +1 -0
- akshare/stock/stock_hk_sina.py +84 -36
- akshare/stock/stock_hold_control_cninfo.py +82 -0
- akshare/stock/stock_hold_control_em.py +0 -2
- akshare/stock/stock_hot_rank_em.py +4 -1
- akshare/stock/stock_hot_search_baidu.py +32 -19
- akshare/stock/stock_hot_up_em.py +4 -1
- akshare/stock/stock_hsgt_em.py +155 -0
- akshare/stock/stock_industry.py +1 -0
- akshare/stock/stock_industry_cninfo.py +1 -2
- akshare/stock/stock_info.py +6 -4
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +4 -78
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +7 -7
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +6 -5
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +7 -5
- akshare/stock/stock_share_hold.py +24 -20
- akshare/stock/stock_stop.py +6 -6
- akshare/stock/stock_summary.py +153 -417
- akshare/stock/stock_us_famous.py +5 -6
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +7 -3
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +24 -22
- akshare/stock/stock_zh_a_sina.py +8 -5
- akshare/stock/stock_zh_a_special.py +240 -243
- akshare/stock/stock_zh_a_tick_tx.py +11 -3
- akshare/stock/stock_zh_ah_tx.py +23 -26
- akshare/stock/stock_zh_b_sina.py +2 -2
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_a/__init__.py +0 -0
- akshare/stock_a/stock_board_concept_name_em.py +170 -0
- akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
- akshare/stock_a/stock_zh_a_spot.py +212 -0
- akshare/stock_feature/cons.py +1 -0
- akshare/stock_feature/stock_a_indicator.py +9 -54
- akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
- akshare/stock_feature/stock_account_em.py +0 -1
- akshare/stock_feature/stock_all_pb.py +2 -1
- akshare/stock_feature/stock_analyst_em.py +36 -30
- akshare/stock_feature/stock_board_concept_ths.py +328 -0
- akshare/stock_feature/stock_board_industry_ths.py +57 -2
- akshare/stock_feature/stock_buffett_index_lg.py +10 -8
- akshare/stock_feature/stock_classify_sina.py +3 -6
- akshare/stock_feature/stock_comment_em.py +81 -144
- akshare/stock_feature/stock_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
- akshare/stock_feature/stock_dxsyl_em.py +121 -74
- akshare/stock_feature/stock_ebs_lg.py +5 -4
- akshare/stock_feature/stock_esg_sina.py +29 -7
- akshare/stock_feature/stock_fhps_em.py +2 -1
- akshare/stock_feature/stock_fhps_ths.py +15 -7
- akshare/stock_feature/stock_fund_flow.py +30 -22
- akshare/stock_feature/stock_gddh_em.py +19 -11
- akshare/stock_feature/stock_gdfx_em.py +226 -113
- akshare/stock_feature/stock_gdhs.py +75 -50
- akshare/stock_feature/stock_gdzjc_em.py +21 -10
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_gxl_lg.py +3 -2
- akshare/stock_feature/stock_hist_em.py +137 -234
- akshare/stock_feature/stock_hist_tx.py +13 -10
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hot_xq.py +4 -6
- akshare/stock_feature/stock_hsgt_em.py +269 -97
- akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
- akshare/stock_feature/stock_hsgt_min_em.py +13 -16
- akshare/stock_feature/stock_info.py +7 -80
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lhb_em.py +119 -3
- akshare/stock_feature/stock_margin_em.py +0 -1
- akshare/stock_feature/stock_margin_sse.py +0 -2
- akshare/stock_feature/stock_pankou_em.py +71 -35
- akshare/stock_feature/stock_qsjy_em.py +13 -4
- akshare/stock_feature/stock_report_em.py +151 -7
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +122 -77
- akshare/stock_feature/stock_tfp_em.py +2 -1
- akshare/stock_feature/stock_three_report_em.py +21 -5
- akshare/stock_feature/stock_ttm_lyr.py +18 -9
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_yjbb_em.py +58 -32
- akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
- akshare/stock_feature/stock_yjyg_em.py +1 -1
- akshare/stock_feature/stock_yzxdr_em.py +24 -22
- akshare/stock_feature/stock_zdhtmx_em.py +20 -6
- akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
- akshare/stock_feature/stock_ztb_em.py +39 -24
- akshare/stock_fundamental/__init__.py +1 -1
- akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
- akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
- akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
- akshare/stock_fundamental/stock_finance_ths.py +524 -57
- akshare/stock_fundamental/stock_finance_us_em.py +268 -0
- akshare/stock_fundamental/stock_gbjg_em.py +80 -0
- akshare/stock_fundamental/stock_hold.py +26 -17
- akshare/stock_fundamental/stock_ipo_declare.py +1 -0
- akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
- akshare/stock_fundamental/stock_kcb_sse.py +26 -25
- akshare/stock_fundamental/stock_notice.py +12 -3
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
- akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
- akshare/stock_fundamental/stock_recommend.py +20 -4
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2009 -1338
- akshare/utils/func.py +49 -2
- akshare/utils/multi_decrypt.py +53 -0
- akshare/utils/token_process.py +6 -5
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fund/fund_announcement.py +0 -56
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -78
- akshare/index/index_investing.py +0 -232
- akshare/sport/__init__.py +0 -6
- akshare/sport/sport_olympic.py +0 -27
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare-1.14.49.dist-info/RECORD +0 -387
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/2/11 16:00
|
|
5
5
|
Desc: 东方财富网-数据中心-股东大会
|
|
6
6
|
https://data.eastmoney.com/gddh/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
from tqdm import
|
|
11
|
+
from akshare.utils.tqdm import get_tqdm
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def stock_gddh_em() -> pd.DataFrame:
|
|
@@ -24,7 +25,9 @@ def stock_gddh_em() -> pd.DataFrame:
|
|
|
24
25
|
"pageSize": "500",
|
|
25
26
|
"pageNumber": "1",
|
|
26
27
|
"reportName": "RPT_GENERALMEETING_DETAIL",
|
|
27
|
-
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,MEETING_TITLE,START_ADJUST_DATE,EQUITY_RECORD_DATE,
|
|
28
|
+
"columns": "SECURITY_CODE,SECURITY_NAME_ABBR,MEETING_TITLE,START_ADJUST_DATE,EQUITY_RECORD_DATE,"
|
|
29
|
+
"ONSITE_RECORD_DATE,DECISION_NOTICE_DATE,NOTICE_DATE,WEB_START_DATE,"
|
|
30
|
+
"WEB_END_DATE,SERIAL_NUM,PROPOSAL",
|
|
28
31
|
"filter": '(IS_LASTDATE="1")',
|
|
29
32
|
"source": "WEB",
|
|
30
33
|
"client": "WEB",
|
|
@@ -33,6 +36,7 @@ def stock_gddh_em() -> pd.DataFrame:
|
|
|
33
36
|
data_json = r.json()
|
|
34
37
|
total_page = data_json["result"]["pages"]
|
|
35
38
|
big_df = pd.DataFrame()
|
|
39
|
+
tqdm = get_tqdm()
|
|
36
40
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
37
41
|
params.update(
|
|
38
42
|
{
|
|
@@ -42,7 +46,7 @@ def stock_gddh_em() -> pd.DataFrame:
|
|
|
42
46
|
r = requests.get(url, params=params)
|
|
43
47
|
data_json = r.json()
|
|
44
48
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
45
|
-
big_df = pd.concat([big_df, temp_df], axis=0, ignore_index=True)
|
|
49
|
+
big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)
|
|
46
50
|
big_df.rename(
|
|
47
51
|
columns={
|
|
48
52
|
"SECURITY_CODE": "代码",
|
|
@@ -76,13 +80,17 @@ def stock_gddh_em() -> pd.DataFrame:
|
|
|
76
80
|
"提案",
|
|
77
81
|
]
|
|
78
82
|
]
|
|
79
|
-
big_df[
|
|
80
|
-
big_df[
|
|
81
|
-
big_df[
|
|
82
|
-
big_df[
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
big_df[
|
|
83
|
+
big_df["召开开始日"] = pd.to_datetime(big_df["召开开始日"], errors="coerce").dt.date
|
|
84
|
+
big_df["股权登记日"] = pd.to_datetime(big_df["股权登记日"], errors="coerce").dt.date
|
|
85
|
+
big_df["现场登记日"] = pd.to_datetime(big_df["现场登记日"], errors="coerce").dt.date
|
|
86
|
+
big_df["网络投票时间-开始日"] = pd.to_datetime(
|
|
87
|
+
big_df["网络投票时间-开始日"], errors="coerce"
|
|
88
|
+
).dt.date
|
|
89
|
+
big_df["网络投票时间-结束日"] = pd.to_datetime(
|
|
90
|
+
big_df["网络投票时间-结束日"], errors="coerce"
|
|
91
|
+
).dt.date
|
|
92
|
+
big_df["决议公告日"] = pd.to_datetime(big_df["决议公告日"], errors="coerce").dt.date
|
|
93
|
+
big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
|
|
86
94
|
big_df["提案"] = big_df["提案"].str.replace("\r\n2", "").str.replace("\r\n3", "")
|
|
87
95
|
return big_df
|
|
88
96
|
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/3/26 21:15
|
|
5
5
|
Desc: 东方财富网-数据中心-股东分析
|
|
6
6
|
https://data.eastmoney.com/gdfx/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
from akshare.utils.tqdm import get_tqdm
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
def stock_gdfx_free_holding_statistics_em(
|
|
14
|
-
|
|
16
|
+
date: str = "20210630",
|
|
15
17
|
) -> pd.DataFrame:
|
|
16
18
|
"""
|
|
17
19
|
东方财富网-数据中心-股东分析-股东持股统计-十大流通股东
|
|
@@ -37,12 +39,13 @@ def stock_gdfx_free_holding_statistics_em(
|
|
|
37
39
|
data_json = r.json()
|
|
38
40
|
total_page = data_json["result"]["pages"]
|
|
39
41
|
big_df = pd.DataFrame()
|
|
42
|
+
tqdm = get_tqdm()
|
|
40
43
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
41
44
|
params.update({"pageNumber": page})
|
|
42
45
|
r = requests.get(url, params=params)
|
|
43
46
|
data_json = r.json()
|
|
44
47
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
45
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
48
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
46
49
|
big_df.reset_index(inplace=True)
|
|
47
50
|
big_df["index"] = big_df.index + 1
|
|
48
51
|
big_df.columns = [
|
|
@@ -83,15 +86,33 @@ def stock_gdfx_free_holding_statistics_em(
|
|
|
83
86
|
]
|
|
84
87
|
]
|
|
85
88
|
big_df["统计次数"] = pd.to_numeric(big_df["统计次数"])
|
|
86
|
-
big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
big_df["公告日后涨幅统计-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
big_df["公告日后涨幅统计-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
|
|
90
|
+
big_df["公告日后涨幅统计-10个交易日-平均涨幅"]
|
|
91
|
+
)
|
|
92
|
+
big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(
|
|
93
|
+
big_df["公告日后涨幅统计-10个交易日-最大涨幅"]
|
|
94
|
+
)
|
|
95
|
+
big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(
|
|
96
|
+
big_df["公告日后涨幅统计-10个交易日-最小涨幅"]
|
|
97
|
+
)
|
|
98
|
+
big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(
|
|
99
|
+
big_df["公告日后涨幅统计-30个交易日-平均涨幅"]
|
|
100
|
+
)
|
|
101
|
+
big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(
|
|
102
|
+
big_df["公告日后涨幅统计-30个交易日-最大涨幅"]
|
|
103
|
+
)
|
|
104
|
+
big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(
|
|
105
|
+
big_df["公告日后涨幅统计-30个交易日-最小涨幅"]
|
|
106
|
+
)
|
|
107
|
+
big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(
|
|
108
|
+
big_df["公告日后涨幅统计-60个交易日-平均涨幅"]
|
|
109
|
+
)
|
|
110
|
+
big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(
|
|
111
|
+
big_df["公告日后涨幅统计-60个交易日-最大涨幅"]
|
|
112
|
+
)
|
|
113
|
+
big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(
|
|
114
|
+
big_df["公告日后涨幅统计-60个交易日-最小涨幅"]
|
|
115
|
+
)
|
|
95
116
|
return big_df
|
|
96
117
|
|
|
97
118
|
|
|
@@ -120,6 +141,7 @@ def stock_gdfx_holding_statistics_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
120
141
|
data_json = r.json()
|
|
121
142
|
total_page = data_json["result"]["pages"]
|
|
122
143
|
big_df = pd.DataFrame()
|
|
144
|
+
tqdm = get_tqdm()
|
|
123
145
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
124
146
|
params.update({"pageNumber": page})
|
|
125
147
|
r = requests.get(url, params=params)
|
|
@@ -167,15 +189,33 @@ def stock_gdfx_holding_statistics_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
167
189
|
]
|
|
168
190
|
]
|
|
169
191
|
big_df["统计次数"] = pd.to_numeric(big_df["统计次数"])
|
|
170
|
-
big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
big_df["公告日后涨幅统计-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
big_df["公告日后涨幅统计-
|
|
177
|
-
|
|
178
|
-
|
|
192
|
+
big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
|
|
193
|
+
big_df["公告日后涨幅统计-10个交易日-平均涨幅"]
|
|
194
|
+
)
|
|
195
|
+
big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(
|
|
196
|
+
big_df["公告日后涨幅统计-10个交易日-最大涨幅"]
|
|
197
|
+
)
|
|
198
|
+
big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(
|
|
199
|
+
big_df["公告日后涨幅统计-10个交易日-最小涨幅"]
|
|
200
|
+
)
|
|
201
|
+
big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(
|
|
202
|
+
big_df["公告日后涨幅统计-30个交易日-平均涨幅"]
|
|
203
|
+
)
|
|
204
|
+
big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(
|
|
205
|
+
big_df["公告日后涨幅统计-30个交易日-最大涨幅"]
|
|
206
|
+
)
|
|
207
|
+
big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(
|
|
208
|
+
big_df["公告日后涨幅统计-30个交易日-最小涨幅"]
|
|
209
|
+
)
|
|
210
|
+
big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(
|
|
211
|
+
big_df["公告日后涨幅统计-60个交易日-平均涨幅"]
|
|
212
|
+
)
|
|
213
|
+
big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(
|
|
214
|
+
big_df["公告日后涨幅统计-60个交易日-最大涨幅"]
|
|
215
|
+
)
|
|
216
|
+
big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(
|
|
217
|
+
big_df["公告日后涨幅统计-60个交易日-最小涨幅"]
|
|
218
|
+
)
|
|
179
219
|
return big_df
|
|
180
220
|
|
|
181
221
|
|
|
@@ -204,12 +244,13 @@ def stock_gdfx_free_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
204
244
|
data_json = r.json()
|
|
205
245
|
total_page = data_json["result"]["pages"]
|
|
206
246
|
big_df = pd.DataFrame()
|
|
247
|
+
tqdm = get_tqdm()
|
|
207
248
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
208
249
|
params.update({"pageNumber": page})
|
|
209
250
|
r = requests.get(url, params=params)
|
|
210
251
|
data_json = r.json()
|
|
211
252
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
212
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
253
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
213
254
|
|
|
214
255
|
big_df.reset_index(inplace=True)
|
|
215
256
|
big_df["index"] = big_df.index + 1
|
|
@@ -232,6 +273,8 @@ def stock_gdfx_free_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
232
273
|
"流通市值统计",
|
|
233
274
|
"持有个股",
|
|
234
275
|
"-",
|
|
276
|
+
"-",
|
|
277
|
+
"-",
|
|
235
278
|
]
|
|
236
279
|
big_df = big_df[
|
|
237
280
|
[
|
|
@@ -247,12 +290,22 @@ def stock_gdfx_free_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
247
290
|
"持有个股",
|
|
248
291
|
]
|
|
249
292
|
]
|
|
250
|
-
big_df["期末持股只数统计-总持有"] = pd.to_numeric(
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
big_df["
|
|
254
|
-
|
|
255
|
-
|
|
293
|
+
big_df["期末持股只数统计-总持有"] = pd.to_numeric(
|
|
294
|
+
big_df["期末持股只数统计-总持有"], errors="coerce"
|
|
295
|
+
)
|
|
296
|
+
big_df["期末持股只数统计-新进"] = pd.to_numeric(
|
|
297
|
+
big_df["期末持股只数统计-新进"], errors="coerce"
|
|
298
|
+
)
|
|
299
|
+
big_df["期末持股只数统计-增加"] = pd.to_numeric(
|
|
300
|
+
big_df["期末持股只数统计-增加"], errors="coerce"
|
|
301
|
+
)
|
|
302
|
+
big_df["期末持股只数统计-不变"] = pd.to_numeric(
|
|
303
|
+
big_df["期末持股只数统计-不变"], errors="coerce"
|
|
304
|
+
)
|
|
305
|
+
big_df["期末持股只数统计-减少"] = pd.to_numeric(
|
|
306
|
+
big_df["期末持股只数统计-减少"], errors="coerce"
|
|
307
|
+
)
|
|
308
|
+
big_df["流通市值统计"] = pd.to_numeric(big_df["流通市值统计"], errors="coerce")
|
|
256
309
|
return big_df
|
|
257
310
|
|
|
258
311
|
|
|
@@ -281,12 +334,13 @@ def stock_gdfx_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
281
334
|
data_json = r.json()
|
|
282
335
|
total_page = data_json["result"]["pages"]
|
|
283
336
|
big_df = pd.DataFrame()
|
|
337
|
+
tqdm = get_tqdm()
|
|
284
338
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
285
339
|
params.update({"pageNumber": page})
|
|
286
340
|
r = requests.get(url, params=params)
|
|
287
341
|
data_json = r.json()
|
|
288
342
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
289
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
343
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
290
344
|
|
|
291
345
|
big_df.reset_index(inplace=True)
|
|
292
346
|
big_df["index"] = big_df.index + 1
|
|
@@ -309,6 +363,8 @@ def stock_gdfx_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
309
363
|
"-",
|
|
310
364
|
"持有个股",
|
|
311
365
|
"流通市值统计",
|
|
366
|
+
"-",
|
|
367
|
+
"-",
|
|
312
368
|
]
|
|
313
369
|
big_df = big_df[
|
|
314
370
|
[
|
|
@@ -334,7 +390,7 @@ def stock_gdfx_holding_change_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
334
390
|
|
|
335
391
|
|
|
336
392
|
def stock_gdfx_free_top_10_em(
|
|
337
|
-
|
|
393
|
+
symbol: str = "sh688686", date: str = "20240930"
|
|
338
394
|
) -> pd.DataFrame:
|
|
339
395
|
"""
|
|
340
396
|
东方财富网-个股-十大流通股东
|
|
@@ -384,14 +440,16 @@ def stock_gdfx_free_top_10_em(
|
|
|
384
440
|
"变动比率",
|
|
385
441
|
]
|
|
386
442
|
]
|
|
387
|
-
temp_df["持股数"] = pd.to_numeric(temp_df["持股数"])
|
|
388
|
-
temp_df["占总流通股本持股比例"] = pd.to_numeric(
|
|
389
|
-
|
|
443
|
+
temp_df["持股数"] = pd.to_numeric(temp_df["持股数"], errors="coerce")
|
|
444
|
+
temp_df["占总流通股本持股比例"] = pd.to_numeric(
|
|
445
|
+
temp_df["占总流通股本持股比例"], errors="coerce"
|
|
446
|
+
)
|
|
447
|
+
temp_df["变动比率"] = pd.to_numeric(temp_df["变动比率"], errors="coerce")
|
|
390
448
|
return temp_df
|
|
391
449
|
|
|
392
450
|
|
|
393
451
|
def stock_gdfx_top_10_em(
|
|
394
|
-
|
|
452
|
+
symbol: str = "sh688686", date: str = "20210630"
|
|
395
453
|
) -> pd.DataFrame:
|
|
396
454
|
"""
|
|
397
455
|
东方财富网-个股-十大股东
|
|
@@ -468,6 +526,7 @@ def stock_gdfx_free_holding_detail_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
468
526
|
data_json = r.json()
|
|
469
527
|
total_page = data_json["result"]["pages"]
|
|
470
528
|
big_df = pd.DataFrame()
|
|
529
|
+
tqdm = get_tqdm()
|
|
471
530
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
472
531
|
params.update({"pageNumber": page})
|
|
473
532
|
r = requests.get(url, params=params)
|
|
@@ -477,24 +536,27 @@ def stock_gdfx_free_holding_detail_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
477
536
|
|
|
478
537
|
big_df.reset_index(inplace=True)
|
|
479
538
|
big_df["index"] = big_df.index + 1
|
|
480
|
-
big_df.rename(
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
539
|
+
big_df.rename(
|
|
540
|
+
columns={
|
|
541
|
+
"index": "序号",
|
|
542
|
+
"HOLDER_NAME": "股东名称",
|
|
543
|
+
"HOLDER_TYPE": "股东类型",
|
|
544
|
+
"SHARES_TYPE": "股份类型",
|
|
545
|
+
"HOLDER_RANK": "股东排名",
|
|
546
|
+
"SECURITY_CODE": "股票代码",
|
|
547
|
+
"SECURITY_NAME_ABBR": "股票简称",
|
|
548
|
+
"HOLD_NUM": "期末持股-数量",
|
|
549
|
+
"FREE_HOLDNUM_RATIO": "期末持股-持股占流通股比",
|
|
550
|
+
"XZCHANGE": "期末持股-数量变化",
|
|
551
|
+
"CHANGE_RATIO": "期末持股-数量变化比例",
|
|
552
|
+
"HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
|
|
553
|
+
"HOLDER_MARKET_CAP": "期末持股-流通市值",
|
|
554
|
+
"END_DATE": "报告期",
|
|
555
|
+
"UPDATE_DATE": "公告日",
|
|
556
|
+
"REPORT_DATE_NAME": "报告名称",
|
|
557
|
+
},
|
|
558
|
+
inplace=True,
|
|
559
|
+
)
|
|
498
560
|
|
|
499
561
|
big_df = big_df[
|
|
500
562
|
[
|
|
@@ -515,13 +577,21 @@ def stock_gdfx_free_holding_detail_em(date: str = "20210930") -> pd.DataFrame:
|
|
|
515
577
|
big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
|
|
516
578
|
big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
|
|
517
579
|
big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
|
|
518
|
-
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
519
|
-
|
|
520
|
-
|
|
580
|
+
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
581
|
+
big_df["期末持股-数量变化"], errors="coerce"
|
|
582
|
+
)
|
|
583
|
+
big_df["期末持股-数量变化比例"] = pd.to_numeric(
|
|
584
|
+
big_df["期末持股-数量变化比例"], errors="coerce"
|
|
585
|
+
)
|
|
586
|
+
big_df["期末持股-流通市值"] = pd.to_numeric(
|
|
587
|
+
big_df["期末持股-流通市值"], errors="coerce"
|
|
588
|
+
)
|
|
521
589
|
return big_df
|
|
522
590
|
|
|
523
591
|
|
|
524
|
-
def stock_gdfx_holding_detail_em(
|
|
592
|
+
def stock_gdfx_holding_detail_em(
|
|
593
|
+
date: str = "20230331", indicator: str = "个人", symbol: str = "新进"
|
|
594
|
+
) -> pd.DataFrame:
|
|
525
595
|
"""
|
|
526
596
|
东方财富网-数据中心-股东分析-股东持股明细-十大股东
|
|
527
597
|
https://data.eastmoney.com/gdfx/HoldingAnalyse.html
|
|
@@ -534,11 +604,14 @@ def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个
|
|
|
534
604
|
:return: 十大股东
|
|
535
605
|
:rtype: pandas.DataFrame
|
|
536
606
|
"""
|
|
607
|
+
import warnings
|
|
608
|
+
|
|
609
|
+
warnings.filterwarnings(action="ignore", category=FutureWarning)
|
|
537
610
|
url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
|
|
538
611
|
params = {
|
|
539
612
|
"sortColumns": "NOTICE_DATE,SECURITY_CODE,RANK",
|
|
540
613
|
"sortTypes": "-1,1,1",
|
|
541
|
-
"pageSize": "
|
|
614
|
+
"pageSize": "50",
|
|
542
615
|
"pageNumber": "1",
|
|
543
616
|
"reportName": "RPT_DMSK_HOLDERS",
|
|
544
617
|
"columns": "ALL",
|
|
@@ -550,31 +623,34 @@ def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个
|
|
|
550
623
|
data_json = r.json()
|
|
551
624
|
total_page = data_json["result"]["pages"]
|
|
552
625
|
big_df = pd.DataFrame()
|
|
626
|
+
tqdm = get_tqdm()
|
|
553
627
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
554
628
|
params.update({"pageNumber": page})
|
|
555
629
|
r = requests.get(url, params=params)
|
|
556
630
|
data_json = r.json()
|
|
557
631
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
558
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
632
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
559
633
|
|
|
560
634
|
big_df.reset_index(inplace=True)
|
|
561
635
|
big_df["index"] = big_df.index + 1
|
|
562
|
-
big_df.rename(
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
636
|
+
big_df.rename(
|
|
637
|
+
columns={
|
|
638
|
+
"index": "序号",
|
|
639
|
+
"HOLDER_NAME": "股东名称",
|
|
640
|
+
"HOLDER_NEWTYPE": "股东类型",
|
|
641
|
+
"RANK": "股东排名",
|
|
642
|
+
"SECURITY_CODE": "股票代码",
|
|
643
|
+
"SECURITY_NAME_ABBR": "股票简称",
|
|
644
|
+
"END_DATE": "报告期",
|
|
645
|
+
"HOLD_NUM": "期末持股-数量",
|
|
646
|
+
"HOLD_NUM_CHANGE": "期末持股-数量变化",
|
|
647
|
+
"HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
|
|
648
|
+
"HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
|
|
649
|
+
"HOLDER_MARKET_CAP": "期末持股-流通市值",
|
|
650
|
+
"NOTICE_DATE": "公告日",
|
|
651
|
+
},
|
|
652
|
+
inplace=True,
|
|
653
|
+
)
|
|
578
654
|
|
|
579
655
|
big_df = big_df[
|
|
580
656
|
[
|
|
@@ -596,9 +672,15 @@ def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个
|
|
|
596
672
|
big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
|
|
597
673
|
big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
|
|
598
674
|
big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
|
|
599
|
-
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
600
|
-
|
|
601
|
-
|
|
675
|
+
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
676
|
+
big_df["期末持股-数量变化"], errors="coerce"
|
|
677
|
+
)
|
|
678
|
+
big_df["期末持股-数量变化比例"] = pd.to_numeric(
|
|
679
|
+
big_df["期末持股-数量变化比例"], errors="coerce"
|
|
680
|
+
)
|
|
681
|
+
big_df["期末持股-流通市值"] = pd.to_numeric(
|
|
682
|
+
big_df["期末持股-流通市值"], errors="coerce"
|
|
683
|
+
)
|
|
602
684
|
big_df["股东排名"] = pd.to_numeric(big_df["股东排名"], errors="coerce")
|
|
603
685
|
return big_df
|
|
604
686
|
|
|
@@ -628,32 +710,36 @@ def stock_gdfx_free_holding_analyse_em(date: str = "20230930") -> pd.DataFrame:
|
|
|
628
710
|
data_json = r.json()
|
|
629
711
|
total_page = data_json["result"]["pages"]
|
|
630
712
|
big_df = pd.DataFrame()
|
|
713
|
+
tqdm = get_tqdm()
|
|
631
714
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
632
715
|
params.update({"pageNumber": page})
|
|
633
716
|
r = requests.get(url, params=params)
|
|
634
717
|
data_json = r.json()
|
|
635
718
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
636
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
719
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
637
720
|
|
|
638
721
|
big_df.reset_index(inplace=True)
|
|
639
722
|
big_df["index"] = big_df.index + 1
|
|
640
|
-
big_df.rename(
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
723
|
+
big_df.rename(
|
|
724
|
+
columns={
|
|
725
|
+
"index": "序号",
|
|
726
|
+
"HOLDER_NAME": "股东名称",
|
|
727
|
+
"HOLDER_TYPE": "股东类型",
|
|
728
|
+
"SECURITY_CODE": "股票代码",
|
|
729
|
+
"SECURITY_NAME_ABBR": "股票简称",
|
|
730
|
+
"END_DATE": "报告期",
|
|
731
|
+
"HOLD_NUM": "期末持股-数量",
|
|
732
|
+
"XZCHANGE": "期末持股-数量变化",
|
|
733
|
+
"HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
|
|
734
|
+
"HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
|
|
735
|
+
"HOLDER_MARKET_CAP": "期末持股-流通市值",
|
|
736
|
+
"UPDATE_DATE": "公告日",
|
|
737
|
+
"D10_ADJCHRATE": "公告日后涨跌幅-10个交易日",
|
|
738
|
+
"D30_ADJCHRATE": "公告日后涨跌幅-30个交易日",
|
|
739
|
+
"D60_ADJCHRATE": "公告日后涨跌幅-60个交易日",
|
|
740
|
+
},
|
|
741
|
+
inplace=True,
|
|
742
|
+
)
|
|
657
743
|
big_df = big_df[
|
|
658
744
|
[
|
|
659
745
|
"序号",
|
|
@@ -676,12 +762,24 @@ def stock_gdfx_free_holding_analyse_em(date: str = "20230930") -> pd.DataFrame:
|
|
|
676
762
|
big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
|
|
677
763
|
big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
|
|
678
764
|
big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
|
|
679
|
-
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
big_df["
|
|
683
|
-
|
|
684
|
-
|
|
765
|
+
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
766
|
+
big_df["期末持股-数量变化"], errors="coerce"
|
|
767
|
+
)
|
|
768
|
+
big_df["期末持股-数量变化比例"] = pd.to_numeric(
|
|
769
|
+
big_df["期末持股-数量变化比例"], errors="coerce"
|
|
770
|
+
)
|
|
771
|
+
big_df["期末持股-流通市值"] = pd.to_numeric(
|
|
772
|
+
big_df["期末持股-流通市值"], errors="coerce"
|
|
773
|
+
)
|
|
774
|
+
big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(
|
|
775
|
+
big_df["公告日后涨跌幅-10个交易日"], errors="coerce"
|
|
776
|
+
)
|
|
777
|
+
big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(
|
|
778
|
+
big_df["公告日后涨跌幅-30个交易日"], errors="coerce"
|
|
779
|
+
)
|
|
780
|
+
big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(
|
|
781
|
+
big_df["公告日后涨跌幅-60个交易日"], errors="coerce"
|
|
782
|
+
)
|
|
685
783
|
return big_df
|
|
686
784
|
|
|
687
785
|
|
|
@@ -710,15 +808,16 @@ def stock_gdfx_holding_analyse_em(date: str = "20230331") -> pd.DataFrame:
|
|
|
710
808
|
data_json = r.json()
|
|
711
809
|
total_page = data_json["result"]["pages"]
|
|
712
810
|
big_df = pd.DataFrame()
|
|
811
|
+
tqdm = get_tqdm()
|
|
713
812
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
714
813
|
params.update({"pageNumber": page})
|
|
715
814
|
r = requests.get(url, params=params)
|
|
716
815
|
data_json = r.json()
|
|
717
816
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
718
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
817
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
719
818
|
|
|
720
819
|
big_df.reset_index(inplace=True)
|
|
721
|
-
big_df[
|
|
820
|
+
big_df["index"] = big_df["index"] + 1
|
|
722
821
|
big_df.rename(
|
|
723
822
|
columns={
|
|
724
823
|
"index": "序号",
|
|
@@ -766,12 +865,24 @@ def stock_gdfx_holding_analyse_em(date: str = "20230331") -> pd.DataFrame:
|
|
|
766
865
|
big_df["公告日"] = pd.to_datetime(big_df["公告日"]).dt.date
|
|
767
866
|
big_df["报告期"] = pd.to_datetime(big_df["报告期"]).dt.date
|
|
768
867
|
big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
|
|
769
|
-
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
big_df["
|
|
773
|
-
|
|
774
|
-
|
|
868
|
+
big_df["期末持股-数量变化"] = pd.to_numeric(
|
|
869
|
+
big_df["期末持股-数量变化"], errors="coerce"
|
|
870
|
+
)
|
|
871
|
+
big_df["期末持股-数量变化比例"] = pd.to_numeric(
|
|
872
|
+
big_df["期末持股-数量变化比例"], errors="coerce"
|
|
873
|
+
)
|
|
874
|
+
big_df["期末持股-流通市值"] = pd.to_numeric(
|
|
875
|
+
big_df["期末持股-流通市值"], errors="coerce"
|
|
876
|
+
)
|
|
877
|
+
big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(
|
|
878
|
+
big_df["公告日后涨跌幅-10个交易日"], errors="coerce"
|
|
879
|
+
)
|
|
880
|
+
big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(
|
|
881
|
+
big_df["公告日后涨跌幅-30个交易日"], errors="coerce"
|
|
882
|
+
)
|
|
883
|
+
big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(
|
|
884
|
+
big_df["公告日后涨跌幅-60个交易日"], errors="coerce"
|
|
885
|
+
)
|
|
775
886
|
return big_df
|
|
776
887
|
|
|
777
888
|
|
|
@@ -801,12 +912,13 @@ def stock_gdfx_free_holding_teamwork_em(symbol: str = "社保") -> pd.DataFrame:
|
|
|
801
912
|
data_json = r.json()
|
|
802
913
|
total_page = data_json["result"]["pages"]
|
|
803
914
|
big_df = pd.DataFrame()
|
|
915
|
+
tqdm = get_tqdm()
|
|
804
916
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
805
917
|
params.update({"pageNumber": page})
|
|
806
918
|
r = requests.get(url, params=params)
|
|
807
919
|
data_json = r.json()
|
|
808
920
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
809
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
921
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
810
922
|
|
|
811
923
|
big_df.reset_index(inplace=True)
|
|
812
924
|
big_df["index"] = big_df.index + 1
|
|
@@ -863,12 +975,13 @@ def stock_gdfx_holding_teamwork_em(symbol: str = "社保") -> pd.DataFrame:
|
|
|
863
975
|
data_json = r.json()
|
|
864
976
|
total_page = data_json["result"]["pages"]
|
|
865
977
|
big_df = pd.DataFrame()
|
|
978
|
+
tqdm = get_tqdm()
|
|
866
979
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
867
980
|
params.update({"pageNumber": page})
|
|
868
981
|
r = requests.get(url, params=params)
|
|
869
982
|
data_json = r.json()
|
|
870
983
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
871
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
984
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
872
985
|
|
|
873
986
|
big_df.reset_index(inplace=True)
|
|
874
987
|
big_df["index"] = big_df.index + 1
|
|
@@ -931,7 +1044,7 @@ if __name__ == "__main__":
|
|
|
931
1044
|
)
|
|
932
1045
|
print(stock_gdfx_free_holding_detail_em_df)
|
|
933
1046
|
|
|
934
|
-
stock_gdfx_holding_detail_em_df = stock_gdfx_holding_detail_em(date="
|
|
1047
|
+
stock_gdfx_holding_detail_em_df = stock_gdfx_holding_detail_em(date="20230331")
|
|
935
1048
|
print(stock_gdfx_holding_detail_em_df)
|
|
936
1049
|
|
|
937
1050
|
stock_gdfx_free_holding_analyse_em_df = stock_gdfx_free_holding_analyse_em(
|