akshare 1.12.99__py3-none-any.whl → 1.15.73__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.
Potentially problematic release.
This version of akshare might be problematic. Click here for more details.
- akshare/__init__.py +442 -138
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +29 -43
- akshare/air/sunrise_tad.py +32 -17
- akshare/bank/bank_cbirc_2020.py +12 -9
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_zh_cov.py +1 -1
- akshare/bond/bond_zh_sina.py +57 -51
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/currency/currency_safe.py +7 -6
- akshare/data/cninfo.js +15 -0
- akshare/datasets.py +10 -21
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_china.py +772 -1024
- akshare/economic/macro_china_hk.py +65 -243
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_constitute.py +17 -12
- akshare/economic/macro_euro.py +13 -6
- akshare/economic/macro_finance_ths.py +133 -0
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +5 -4
- akshare/economic/macro_other.py +12 -9
- akshare/economic/macro_usa.py +376 -1940
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -125
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/fortune/fortune_500.py +15 -48
- akshare/fund/fund_amac.py +157 -75
- akshare/fund/fund_em.py +191 -184
- akshare/fund/fund_etf_em.py +16 -15
- akshare/fund/fund_etf_sina.py +71 -23
- akshare/fund/fund_etf_ths.py +93 -0
- akshare/fund/fund_fee_em.py +98 -0
- akshare/fund/fund_portfolio_em.py +60 -50
- akshare/fund/fund_rank_em.py +91 -82
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +139 -109
- akshare/futures/cons.py +8 -31
- akshare/futures/cot.py +185 -137
- akshare/futures/futures_basis.py +97 -32
- akshare/futures/futures_comm_ctp.py +37 -0
- akshare/futures/futures_comm_qihuo.py +74 -45
- akshare/futures/futures_daily_bar.py +121 -184
- akshare/futures/futures_hf_em.py +66 -61
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +6 -3
- akshare/futures/futures_inventory_99.py +61 -272
- akshare/futures/futures_news_shmet.py +4 -2
- akshare/futures/futures_roll_yield.py +12 -25
- akshare/futures/futures_spot_stock_em.py +19 -13
- akshare/futures/futures_stock_js.py +14 -12
- akshare/futures/futures_to_spot.py +38 -33
- akshare/futures/futures_warehouse_receipt.py +75 -71
- akshare/futures/futures_zh_sina.py +5 -5
- akshare/futures/symbol_var.py +18 -13
- akshare/futures_derivative/futures_contract_info_czce.py +60 -52
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
- akshare/futures_derivative/futures_cot_sina.py +26 -19
- akshare/futures_derivative/futures_spot_sys.py +21 -8
- akshare/fx/currency_investing.py +19 -285
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +86 -88
- akshare/index/index_cons.py +26 -10
- akshare/index/index_cx.py +248 -47
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_option_qvix.py +329 -0
- akshare/index/index_research_fund_sw.py +134 -0
- akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +35 -16
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +180 -89
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +46 -23
- akshare/index/index_zh_a_scope.py +48 -0
- akshare/index/index_zh_em.py +6 -4
- akshare/interest_rate/interbank_rate_em.py +14 -9
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/news_baidu.py +78 -44
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +6 -3
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +11 -11
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +178 -51
- akshare/option/option_daily_stats_sse_szse.py +146 -0
- akshare/option/option_em.py +147 -138
- akshare/option/option_finance_sina.py +160 -137
- akshare/option/option_lhb_em.py +62 -56
- akshare/option/option_risk_indicator_sse.py +17 -14
- akshare/other/other_car_cpca.py +934 -0
- akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/request.py +117 -0
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +63 -10
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_board_concept_em.py +23 -14
- akshare/stock/stock_board_industry_em.py +40 -34
- akshare/stock/stock_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +12 -6
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +332 -84
- akshare/stock/stock_hk_famous.py +108 -0
- akshare/stock/stock_hk_sina.py +8 -7
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -3
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +2 -1
- akshare/stock/stock_hot_search_baidu.py +5 -2
- akshare/stock/stock_industry_cninfo.py +24 -18
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +9 -10
- akshare/stock/stock_info.py +25 -15
- akshare/stock/stock_info_em.py +5 -2
- akshare/stock/stock_intraday_em.py +5 -2
- akshare/stock/stock_intraday_sina.py +22 -18
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -19
- akshare/stock/stock_summary.py +54 -26
- akshare/stock/stock_us_famous.py +15 -6
- akshare/stock/stock_us_pink.py +7 -5
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_xq.py +38 -12
- akshare/stock/stock_zh_a_sina.py +53 -78
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +12 -9
- akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
- akshare/stock_feature/stock_account_em.py +58 -40
- akshare/stock_feature/stock_analyst_em.py +36 -27
- akshare/stock_feature/stock_board_industry_ths.py +136 -400
- akshare/stock_feature/stock_comment_em.py +118 -85
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_cyq_em.py +58 -54
- akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
- akshare/stock_feature/stock_esg_sina.py +216 -11
- akshare/stock_feature/stock_fhps_em.py +60 -25
- akshare/stock_feature/stock_fhps_ths.py +25 -6
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gdfx_em.py +180 -95
- akshare/stock_feature/stock_gdhs.py +73 -49
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_hist_em.py +55 -23
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hsgt_em.py +184 -452
- akshare/stock_feature/stock_info.py +52 -29
- akshare/stock_feature/stock_inner_trade_xq.py +39 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +41 -38
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +135 -71
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +102 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
- akshare/stock_feature/stock_market_legu.py +13 -8
- akshare/stock_feature/stock_pankou_em.py +72 -34
- akshare/stock_feature/stock_report_em.py +244 -54
- akshare/stock_feature/stock_research_report_em.py +48 -19
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +86 -33
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +35 -13
- akshare/stock_feature/stock_three_report_em.py +119 -77
- akshare/stock_feature/stock_ttm_lyr.py +4 -7
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_wencai.py +21 -9
- akshare/stock_feature/stock_yjyg_em.py +63 -28
- akshare/stock_feature/stock_zf_pg.py +61 -38
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_ztb_em.py +62 -40
- akshare/stock_fundamental/stock_finance.py +150 -58
- akshare/stock_fundamental/stock_finance_ths.py +116 -31
- akshare/stock_fundamental/stock_mda_ym.py +5 -3
- akshare/stock_fundamental/stock_notice.py +29 -15
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_restricted_em.py +79 -32
- akshare/stock_fundamental/stock_zygc.py +10 -8
- akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
- akshare/tool/trade_date_hist.py +4 -3
- akshare/utils/cons.py +10 -0
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2 -2
- akshare/utils/func.py +26 -0
- akshare/utils/tqdm.py +13 -3
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/METADATA +52 -69
- akshare-1.15.73.dist-info/RECORD +385 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/WHEEL +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/fortune/fortune_it_juzi.py +0 -123
- 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 -51
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -71
- akshare/index/index_investing.py +0 -232
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_board_concept_ths.py +0 -422
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.12.99.dist-info/RECORD +0 -374
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/LICENSE +0 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
akshare/index/index_cx.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/6/4 18:30
|
|
5
5
|
Desc: 财新数据-指数报告-数字经济指数
|
|
6
|
-
https://
|
|
6
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
@@ -12,11 +13,11 @@ import requests
|
|
|
12
13
|
def index_pmi_com_cx() -> pd.DataFrame():
|
|
13
14
|
"""
|
|
14
15
|
财新数据-指数报告-财新中国 PMI-综合 PMI
|
|
15
|
-
https://
|
|
16
|
+
https://yun.ccxe.com.cn/indices/pmi
|
|
16
17
|
:return: 财新中国 PMI-综合 PMI
|
|
17
18
|
:rtype: pandas.DataFrame
|
|
18
19
|
"""
|
|
19
|
-
url = "https://
|
|
20
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
20
21
|
params = {"type": "com"}
|
|
21
22
|
r = requests.get(url, params=params)
|
|
22
23
|
data_json = r.json()
|
|
@@ -29,18 +30,22 @@ def index_pmi_com_cx() -> pd.DataFrame():
|
|
|
29
30
|
"变化值",
|
|
30
31
|
]
|
|
31
32
|
]
|
|
32
|
-
temp_df["日期"] =
|
|
33
|
+
temp_df["日期"] = (
|
|
34
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
35
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
36
|
+
.dt.date
|
|
37
|
+
)
|
|
33
38
|
return temp_df
|
|
34
39
|
|
|
35
40
|
|
|
36
41
|
def index_pmi_man_cx() -> pd.DataFrame():
|
|
37
42
|
"""
|
|
38
43
|
财新数据-指数报告-财新中国 PMI-制造业 PMI
|
|
39
|
-
https://
|
|
44
|
+
https://yun.ccxe.com.cn/indices/pmi
|
|
40
45
|
:return: 财新中国 PMI-制造业 PMI
|
|
41
46
|
:rtype: pandas.DataFrame
|
|
42
47
|
"""
|
|
43
|
-
url = "https://
|
|
48
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
44
49
|
params = {"type": "man"}
|
|
45
50
|
r = requests.get(url, params=params)
|
|
46
51
|
data_json = r.json()
|
|
@@ -53,18 +58,22 @@ def index_pmi_man_cx() -> pd.DataFrame():
|
|
|
53
58
|
"变化值",
|
|
54
59
|
]
|
|
55
60
|
]
|
|
56
|
-
temp_df["日期"] =
|
|
61
|
+
temp_df["日期"] = (
|
|
62
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
63
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
64
|
+
.dt.date
|
|
65
|
+
)
|
|
57
66
|
return temp_df
|
|
58
67
|
|
|
59
68
|
|
|
60
69
|
def index_pmi_ser_cx() -> pd.DataFrame():
|
|
61
70
|
"""
|
|
62
71
|
财新数据-指数报告-财新中国 PMI-服务业 PMI
|
|
63
|
-
https://
|
|
72
|
+
https://yun.ccxe.com.cn/indices/pmi
|
|
64
73
|
:return: 财新中国 PMI-服务业 PMI
|
|
65
74
|
:rtype: pandas.DataFrame
|
|
66
75
|
"""
|
|
67
|
-
url = "https://
|
|
76
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
68
77
|
params = {"type": "ser"}
|
|
69
78
|
r = requests.get(url, params=params)
|
|
70
79
|
data_json = r.json()
|
|
@@ -77,18 +86,22 @@ def index_pmi_ser_cx() -> pd.DataFrame():
|
|
|
77
86
|
"变化值",
|
|
78
87
|
]
|
|
79
88
|
]
|
|
80
|
-
temp_df["日期"] =
|
|
89
|
+
temp_df["日期"] = (
|
|
90
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
91
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
92
|
+
.dt.date
|
|
93
|
+
)
|
|
81
94
|
return temp_df
|
|
82
95
|
|
|
83
96
|
|
|
84
97
|
def index_dei_cx() -> pd.DataFrame():
|
|
85
98
|
"""
|
|
86
99
|
财新数据-指数报告-数字经济指数
|
|
87
|
-
https://
|
|
100
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
88
101
|
:return: 数字经济指数
|
|
89
102
|
:rtype: pandas.DataFrame
|
|
90
103
|
"""
|
|
91
|
-
url = "https://
|
|
104
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
92
105
|
params = {"type": "dei"}
|
|
93
106
|
r = requests.get(url, params=params)
|
|
94
107
|
data_json = r.json()
|
|
@@ -101,18 +114,22 @@ def index_dei_cx() -> pd.DataFrame():
|
|
|
101
114
|
"变化值",
|
|
102
115
|
]
|
|
103
116
|
]
|
|
104
|
-
temp_df["日期"] =
|
|
117
|
+
temp_df["日期"] = (
|
|
118
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
119
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
120
|
+
.dt.date
|
|
121
|
+
)
|
|
105
122
|
return temp_df
|
|
106
123
|
|
|
107
124
|
|
|
108
125
|
def index_ii_cx() -> pd.DataFrame():
|
|
109
126
|
"""
|
|
110
127
|
财新数据-指数报告-产业指数
|
|
111
|
-
https://
|
|
128
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
112
129
|
:return: 产业指数
|
|
113
130
|
:rtype: pandas.DataFrame
|
|
114
131
|
"""
|
|
115
|
-
url = "https://
|
|
132
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
116
133
|
params = {"type": "ii"}
|
|
117
134
|
r = requests.get(url, params=params)
|
|
118
135
|
data_json = r.json()
|
|
@@ -125,18 +142,22 @@ def index_ii_cx() -> pd.DataFrame():
|
|
|
125
142
|
"变化值",
|
|
126
143
|
]
|
|
127
144
|
]
|
|
128
|
-
temp_df["日期"] =
|
|
145
|
+
temp_df["日期"] = (
|
|
146
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
147
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
148
|
+
.dt.date
|
|
149
|
+
)
|
|
129
150
|
return temp_df
|
|
130
151
|
|
|
131
152
|
|
|
132
153
|
def index_si_cx() -> pd.DataFrame():
|
|
133
154
|
"""
|
|
134
155
|
财新数据-指数报告-溢出指数
|
|
135
|
-
https://
|
|
156
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
136
157
|
:return: 溢出指数
|
|
137
158
|
:rtype: pandas.DataFrame
|
|
138
159
|
"""
|
|
139
|
-
url = "https://
|
|
160
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
140
161
|
params = {"type": "si"}
|
|
141
162
|
r = requests.get(url, params=params)
|
|
142
163
|
data_json = r.json()
|
|
@@ -149,18 +170,22 @@ def index_si_cx() -> pd.DataFrame():
|
|
|
149
170
|
"变化值",
|
|
150
171
|
]
|
|
151
172
|
]
|
|
152
|
-
temp_df["日期"] =
|
|
173
|
+
temp_df["日期"] = (
|
|
174
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
175
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
176
|
+
.dt.date
|
|
177
|
+
)
|
|
153
178
|
return temp_df
|
|
154
179
|
|
|
155
180
|
|
|
156
181
|
def index_fi_cx() -> pd.DataFrame():
|
|
157
182
|
"""
|
|
158
183
|
财新数据-指数报告-融合指数
|
|
159
|
-
https://
|
|
184
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
160
185
|
:return: 融合指数
|
|
161
186
|
:rtype: pandas.DataFrame
|
|
162
187
|
"""
|
|
163
|
-
url = "https://
|
|
188
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
164
189
|
params = {"type": "fi"}
|
|
165
190
|
r = requests.get(url, params=params)
|
|
166
191
|
data_json = r.json()
|
|
@@ -173,18 +198,22 @@ def index_fi_cx() -> pd.DataFrame():
|
|
|
173
198
|
"变化值",
|
|
174
199
|
]
|
|
175
200
|
]
|
|
176
|
-
temp_df["日期"] =
|
|
201
|
+
temp_df["日期"] = (
|
|
202
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
203
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
204
|
+
.dt.date
|
|
205
|
+
)
|
|
177
206
|
return temp_df
|
|
178
207
|
|
|
179
208
|
|
|
180
209
|
def index_bi_cx() -> pd.DataFrame():
|
|
181
210
|
"""
|
|
182
211
|
财新数据-指数报告-基础指数
|
|
183
|
-
https://
|
|
212
|
+
https://yun.ccxe.com.cn/indices/dei
|
|
184
213
|
:return: 基础指数
|
|
185
214
|
:rtype: pandas.DataFrame
|
|
186
215
|
"""
|
|
187
|
-
url = "https://
|
|
216
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
188
217
|
params = {"type": "bi"}
|
|
189
218
|
r = requests.get(url, params=params)
|
|
190
219
|
data_json = r.json()
|
|
@@ -197,18 +226,22 @@ def index_bi_cx() -> pd.DataFrame():
|
|
|
197
226
|
"变化值",
|
|
198
227
|
]
|
|
199
228
|
]
|
|
200
|
-
temp_df["日期"] =
|
|
229
|
+
temp_df["日期"] = (
|
|
230
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
231
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
232
|
+
.dt.date
|
|
233
|
+
)
|
|
201
234
|
return temp_df
|
|
202
235
|
|
|
203
236
|
|
|
204
237
|
def index_nei_cx() -> pd.DataFrame():
|
|
205
238
|
"""
|
|
206
239
|
财新数据-指数报告-中国新经济指数
|
|
207
|
-
https://
|
|
240
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
208
241
|
:return: 中国新经济指数
|
|
209
242
|
:rtype: pandas.DataFrame
|
|
210
243
|
"""
|
|
211
|
-
url = "https://
|
|
244
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
212
245
|
params = {"type": "nei"}
|
|
213
246
|
r = requests.get(url, params=params)
|
|
214
247
|
data_json = r.json()
|
|
@@ -221,18 +254,22 @@ def index_nei_cx() -> pd.DataFrame():
|
|
|
221
254
|
"变化值",
|
|
222
255
|
]
|
|
223
256
|
]
|
|
224
|
-
temp_df["日期"] =
|
|
257
|
+
temp_df["日期"] = (
|
|
258
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
259
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
260
|
+
.dt.date
|
|
261
|
+
)
|
|
225
262
|
return temp_df
|
|
226
263
|
|
|
227
264
|
|
|
228
265
|
def index_li_cx() -> pd.DataFrame():
|
|
229
266
|
"""
|
|
230
267
|
财新数据-指数报告-劳动力投入指数
|
|
231
|
-
https://
|
|
268
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
232
269
|
:return: 劳动力投入指数
|
|
233
270
|
:rtype: pandas.DataFrame
|
|
234
271
|
"""
|
|
235
|
-
url = "https://
|
|
272
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
236
273
|
params = {"type": "li"}
|
|
237
274
|
r = requests.get(url, params=params)
|
|
238
275
|
data_json = r.json()
|
|
@@ -245,18 +282,22 @@ def index_li_cx() -> pd.DataFrame():
|
|
|
245
282
|
"变化值",
|
|
246
283
|
]
|
|
247
284
|
]
|
|
248
|
-
temp_df["日期"] =
|
|
285
|
+
temp_df["日期"] = (
|
|
286
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
287
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
288
|
+
.dt.date
|
|
289
|
+
)
|
|
249
290
|
return temp_df
|
|
250
291
|
|
|
251
292
|
|
|
252
293
|
def index_ci_cx() -> pd.DataFrame():
|
|
253
294
|
"""
|
|
254
295
|
财新数据-指数报告-资本投入指数
|
|
255
|
-
https://
|
|
296
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
256
297
|
:return: 资本投入指数
|
|
257
298
|
:rtype: pandas.DataFrame
|
|
258
299
|
"""
|
|
259
|
-
url = "https://
|
|
300
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
260
301
|
params = {"type": "ci"}
|
|
261
302
|
r = requests.get(url, params=params)
|
|
262
303
|
data_json = r.json()
|
|
@@ -269,18 +310,22 @@ def index_ci_cx() -> pd.DataFrame():
|
|
|
269
310
|
"变化值",
|
|
270
311
|
]
|
|
271
312
|
]
|
|
272
|
-
temp_df["日期"] =
|
|
313
|
+
temp_df["日期"] = (
|
|
314
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
315
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
316
|
+
.dt.date
|
|
317
|
+
)
|
|
273
318
|
return temp_df
|
|
274
319
|
|
|
275
320
|
|
|
276
321
|
def index_ti_cx() -> pd.DataFrame():
|
|
277
322
|
"""
|
|
278
323
|
财新数据-指数报告-科技投入指数
|
|
279
|
-
https://
|
|
324
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
280
325
|
:return: 科技投入指数
|
|
281
326
|
:rtype: pandas.DataFrame
|
|
282
327
|
"""
|
|
283
|
-
url = "https://
|
|
328
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
284
329
|
params = {"type": "ti"}
|
|
285
330
|
r = requests.get(url, params=params)
|
|
286
331
|
data_json = r.json()
|
|
@@ -293,18 +338,22 @@ def index_ti_cx() -> pd.DataFrame():
|
|
|
293
338
|
"变化值",
|
|
294
339
|
]
|
|
295
340
|
]
|
|
296
|
-
temp_df["日期"] =
|
|
341
|
+
temp_df["日期"] = (
|
|
342
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
343
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
344
|
+
.dt.date
|
|
345
|
+
)
|
|
297
346
|
return temp_df
|
|
298
347
|
|
|
299
348
|
|
|
300
349
|
def index_neaw_cx() -> pd.DataFrame():
|
|
301
350
|
"""
|
|
302
351
|
财新数据-指数报告-新经济行业入职平均工资水平
|
|
303
|
-
https://
|
|
352
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
304
353
|
:return: 新经济行业入职平均工资水平
|
|
305
354
|
:rtype: pandas.DataFrame
|
|
306
355
|
"""
|
|
307
|
-
url = "https://
|
|
356
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
308
357
|
params = {"type": "neaw"}
|
|
309
358
|
r = requests.get(url, params=params)
|
|
310
359
|
data_json = r.json()
|
|
@@ -317,18 +366,22 @@ def index_neaw_cx() -> pd.DataFrame():
|
|
|
317
366
|
"变化值",
|
|
318
367
|
]
|
|
319
368
|
]
|
|
320
|
-
temp_df["日期"] =
|
|
369
|
+
temp_df["日期"] = (
|
|
370
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
371
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
372
|
+
.dt.date
|
|
373
|
+
)
|
|
321
374
|
return temp_df
|
|
322
375
|
|
|
323
376
|
|
|
324
377
|
def index_awpr_cx() -> pd.DataFrame():
|
|
325
378
|
"""
|
|
326
379
|
财新数据-指数报告-新经济入职工资溢价水平
|
|
327
|
-
https://
|
|
380
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
328
381
|
:return: 新经济入职工资溢价水平
|
|
329
382
|
:rtype: pandas.DataFrame
|
|
330
383
|
"""
|
|
331
|
-
url = "https://
|
|
384
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
332
385
|
params = {"type": "awpr"}
|
|
333
386
|
r = requests.get(url, params=params)
|
|
334
387
|
data_json = r.json()
|
|
@@ -341,18 +394,22 @@ def index_awpr_cx() -> pd.DataFrame():
|
|
|
341
394
|
"变化值",
|
|
342
395
|
]
|
|
343
396
|
]
|
|
344
|
-
temp_df["日期"] =
|
|
397
|
+
temp_df["日期"] = (
|
|
398
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
399
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
400
|
+
.dt.date
|
|
401
|
+
)
|
|
345
402
|
return temp_df
|
|
346
403
|
|
|
347
404
|
|
|
348
405
|
def index_cci_cx() -> pd.DataFrame():
|
|
349
406
|
"""
|
|
350
407
|
财新数据-指数报告-大宗商品指数
|
|
351
|
-
https://
|
|
408
|
+
https://yun.ccxe.com.cn/indices/nei
|
|
352
409
|
:return: 大宗商品指数
|
|
353
410
|
:rtype: pandas.DataFrame
|
|
354
411
|
"""
|
|
355
|
-
url = "https://
|
|
412
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
356
413
|
params = {
|
|
357
414
|
"type": "cci",
|
|
358
415
|
"code": "1000050",
|
|
@@ -369,7 +426,139 @@ def index_cci_cx() -> pd.DataFrame():
|
|
|
369
426
|
"变化值",
|
|
370
427
|
]
|
|
371
428
|
]
|
|
372
|
-
temp_df["日期"] =
|
|
429
|
+
temp_df["日期"] = (
|
|
430
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
431
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
432
|
+
.dt.date
|
|
433
|
+
)
|
|
434
|
+
return temp_df
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
def index_qli_cx() -> pd.DataFrame():
|
|
438
|
+
"""
|
|
439
|
+
财新数据-指数报告-高质量因子
|
|
440
|
+
https://yun.ccxe.com.cn/indices/qli
|
|
441
|
+
:return: 高质量因子
|
|
442
|
+
:rtype: pandas.DataFrame
|
|
443
|
+
"""
|
|
444
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
445
|
+
params = {
|
|
446
|
+
"type": "qli",
|
|
447
|
+
"code": "1000050",
|
|
448
|
+
"month": "-1",
|
|
449
|
+
}
|
|
450
|
+
r = requests.get(url, params=params)
|
|
451
|
+
data_json = r.json()
|
|
452
|
+
temp_df = pd.DataFrame(data_json["data"])
|
|
453
|
+
temp_df.columns = ["变化幅度", "高质量因子指数", "日期"]
|
|
454
|
+
temp_df = temp_df[
|
|
455
|
+
[
|
|
456
|
+
"日期",
|
|
457
|
+
"高质量因子指数",
|
|
458
|
+
"变化幅度",
|
|
459
|
+
]
|
|
460
|
+
]
|
|
461
|
+
temp_df["日期"] = (
|
|
462
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
463
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
464
|
+
.dt.date
|
|
465
|
+
)
|
|
466
|
+
return temp_df
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
def index_ai_cx() -> pd.DataFrame():
|
|
470
|
+
"""
|
|
471
|
+
财新数据-指数报告-AI策略指数
|
|
472
|
+
https://yun.ccxe.com.cn/indices/ai
|
|
473
|
+
:return: AI策略指数
|
|
474
|
+
:rtype: pandas.DataFrame
|
|
475
|
+
"""
|
|
476
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
477
|
+
params = {
|
|
478
|
+
"type": "ai",
|
|
479
|
+
"code": "1000050",
|
|
480
|
+
"month": "-1",
|
|
481
|
+
}
|
|
482
|
+
r = requests.get(url, params=params)
|
|
483
|
+
data_json = r.json()
|
|
484
|
+
temp_df = pd.DataFrame(data_json["data"])
|
|
485
|
+
temp_df.columns = ["变化幅度", "AI策略指数", "日期"]
|
|
486
|
+
temp_df = temp_df[
|
|
487
|
+
[
|
|
488
|
+
"日期",
|
|
489
|
+
"AI策略指数",
|
|
490
|
+
"变化幅度",
|
|
491
|
+
]
|
|
492
|
+
]
|
|
493
|
+
temp_df["日期"] = (
|
|
494
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
495
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
496
|
+
.dt.date
|
|
497
|
+
)
|
|
498
|
+
return temp_df
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
def index_bei_cx() -> pd.DataFrame():
|
|
502
|
+
"""
|
|
503
|
+
财新数据-指数报告-基石经济指数
|
|
504
|
+
https://yun.ccxe.com.cn/indices/bei
|
|
505
|
+
:return: 基石经济指数
|
|
506
|
+
:rtype: pandas.DataFrame
|
|
507
|
+
"""
|
|
508
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
509
|
+
params = {
|
|
510
|
+
"type": "ind",
|
|
511
|
+
"code": "930927",
|
|
512
|
+
"month": "-1",
|
|
513
|
+
}
|
|
514
|
+
r = requests.get(url, params=params)
|
|
515
|
+
data_json = r.json()
|
|
516
|
+
temp_df = pd.DataFrame(data_json["data"])
|
|
517
|
+
temp_df.columns = ["变化幅度", "基石经济指数", "日期"]
|
|
518
|
+
temp_df = temp_df[
|
|
519
|
+
[
|
|
520
|
+
"日期",
|
|
521
|
+
"基石经济指数",
|
|
522
|
+
"变化幅度",
|
|
523
|
+
]
|
|
524
|
+
]
|
|
525
|
+
temp_df["日期"] = (
|
|
526
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
527
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
528
|
+
.dt.date
|
|
529
|
+
)
|
|
530
|
+
return temp_df
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
def index_neei_cx() -> pd.DataFrame():
|
|
534
|
+
"""
|
|
535
|
+
财新数据-指数报告-新动能指数
|
|
536
|
+
https://yun.ccxe.com.cn/indices/neei
|
|
537
|
+
:return: 新动能指数
|
|
538
|
+
:rtype: pandas.DataFrame
|
|
539
|
+
"""
|
|
540
|
+
url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
|
|
541
|
+
params = {
|
|
542
|
+
"type": "ind",
|
|
543
|
+
"code": "930928",
|
|
544
|
+
"month": "1",
|
|
545
|
+
}
|
|
546
|
+
r = requests.get(url, params=params)
|
|
547
|
+
data_json = r.json()
|
|
548
|
+
temp_df = pd.DataFrame(data_json["data"])
|
|
549
|
+
temp_df.columns = ["变化幅度", "新动能指数", "日期"]
|
|
550
|
+
temp_df = temp_df[
|
|
551
|
+
[
|
|
552
|
+
"日期",
|
|
553
|
+
"新动能指数",
|
|
554
|
+
"变化幅度",
|
|
555
|
+
]
|
|
556
|
+
]
|
|
557
|
+
temp_df["日期"] = (
|
|
558
|
+
pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
|
|
559
|
+
.dt.tz_convert("Asia/Shanghai")
|
|
560
|
+
.dt.date
|
|
561
|
+
)
|
|
373
562
|
return temp_df
|
|
374
563
|
|
|
375
564
|
|
|
@@ -418,3 +607,15 @@ if __name__ == "__main__":
|
|
|
418
607
|
|
|
419
608
|
index_cci_cx_df = index_cci_cx()
|
|
420
609
|
print(index_cci_cx_df)
|
|
610
|
+
|
|
611
|
+
index_qli_cx_df = index_qli_cx()
|
|
612
|
+
print(index_qli_cx_df)
|
|
613
|
+
|
|
614
|
+
index_ai_cx_df = index_ai_cx()
|
|
615
|
+
print(index_ai_cx_df)
|
|
616
|
+
|
|
617
|
+
index_bei_cx_df = index_bei_cx()
|
|
618
|
+
print(index_bei_cx_df)
|
|
619
|
+
|
|
620
|
+
index_neei_cx_df = index_neei_cx()
|
|
621
|
+
print(index_neei_cx_df)
|
akshare/index/index_drewry.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/9/26 18:00
|
|
5
5
|
Desc: Drewry 集装箱指数
|
|
6
6
|
https://www.drewry.co.uk/supply-chain-advisors/supply-chain-expertise/world-container-index-assessed-by-drewry
|
|
7
7
|
https://infogram.com/world-container-index-1h17493095xl4zj
|
|
8
8
|
"""
|
|
9
|
+
|
|
9
10
|
import pandas as pd
|
|
10
11
|
import requests
|
|
11
12
|
from bs4 import BeautifulSoup
|
|
@@ -17,7 +18,8 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
|
|
|
17
18
|
"""
|
|
18
19
|
Drewry 集装箱指数
|
|
19
20
|
https://infogram.com/world-container-index-1h17493095xl4zj
|
|
20
|
-
:param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles",
|
|
21
|
+
:param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles",
|
|
22
|
+
"los angeles-shanghai", "shanghai-genoa", "new york-rotterdam", "rotterdam-new york"}
|
|
21
23
|
:type symbol: str
|
|
22
24
|
:return: Drewry 集装箱指数
|
|
23
25
|
:rtype: pandas.DataFrame
|
|
@@ -34,24 +36,23 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
|
|
|
34
36
|
}
|
|
35
37
|
url = "https://infogram.com/world-container-index-1h17493095xl4zj"
|
|
36
38
|
r = requests.get(url)
|
|
37
|
-
soup = BeautifulSoup(r.text, "lxml")
|
|
39
|
+
soup = BeautifulSoup(r.text, features="lxml")
|
|
38
40
|
data_text = soup.find_all("script")[-4].string.strip("window.infographicData=")[:-1]
|
|
39
41
|
data_json = demjson.decode(data_text)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
data_json_need = data_json["elements"]["content"]["content"]["entities"][
|
|
43
|
+
"7a55585f-3fb3-44e6-9b54-beea1cd20b4d"
|
|
44
|
+
]["data"][symbol_map[symbol]]
|
|
45
|
+
date_list = [item[0]["value"] for item in data_json_need[1:]]
|
|
46
|
+
try:
|
|
47
|
+
value_list = [item[1]["value"] for item in data_json_need[1:]]
|
|
48
|
+
except TypeError:
|
|
49
|
+
value_list = [item[1]["value"] for item in data_json_need[1:-1]]
|
|
50
|
+
temp_df = pd.DataFrame([date_list, value_list]).T
|
|
42
51
|
temp_df.columns = ["date", "wci"]
|
|
43
|
-
temp_df["date"] =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
month = temp_df["date"].str.split("-", expand=True).iloc[:, 1].str.strip()
|
|
47
|
-
month = month.str.replace("July", "Jul")
|
|
48
|
-
year = temp_df["date"].str.split("-", expand=True).iloc[:, 2].str.strip()
|
|
49
|
-
temp_df["date"] = day + "-" + month + "-" + year
|
|
50
|
-
# 修正数据源中日期格式的错误
|
|
51
|
-
temp_df["date"] = temp_df["date"].str.replace("Sept", "Sep")
|
|
52
|
-
temp_df["date"] = pd.to_datetime(temp_df["date"], format="%d-%b-%y").dt.date
|
|
52
|
+
temp_df["date"] = pd.to_datetime(
|
|
53
|
+
temp_df["date"], format="%d-%b-%y", errors="coerce"
|
|
54
|
+
).dt.date
|
|
53
55
|
temp_df["wci"] = pd.to_numeric(temp_df["wci"], errors="coerce")
|
|
54
|
-
temp_df.reset_index(inplace=True, drop=True)
|
|
55
56
|
return temp_df
|
|
56
57
|
|
|
57
58
|
|