akshare是一个很好用的财经数据api接口,完全免费!!和Tushare不一样。
除了我标题显示的数据外,他还提供各种股票数据,债券数据,外汇,期货,宏观经济,基金,银行,货币等等。
基本上我找经济类数据都优先用这个,本次就展示一下怎么获取标题上的这几个数据。
代码获取
先导入包:
import numpy as np
import pandas as pd
import akshare as ak
import warnings
warnings.filterwarnings('ignore')
获取美团对人民币汇率:(这里原本是可以返回很多国家对人民币的汇率的,我只取出了美国,并且原数据是日度的,我重采样为了月度数据)
currency_boc_safe_df = ak.currency_boc_safe().iloc[:,:2]
currency_boc_safe_df=currency_boc_safe_df.set_index('日期')
currency_boc_safe_df.index=pd.to_datetime(currency_boc_safe_df.index)
currency_boc_safe_df.rename(columns={'美元':'汇率'},inplace=True)
currency_boc_safe_df=currency_boc_safe_df.resample('M').mean()
currency_boc_safe_df
没什么问题,现在人民币汇率大概是7点多。数据时间口径也是月度。
获取外汇储备
#外汇储备
macro_china_fx_reserves_yearly_df = ak.macro_china_fx_reserves_yearly().rename("外汇储备")
macro_china_fx_reserves_yearly_df
这个数据本来就是月度的,所以就不需要额外处理,2014年是半年一个,可能原因是那个时候公布数据可能只是半年一次吧。到2016年就正常了。
获取广义货币量M2:
#M2
macro_china_m2_yearly_df = ak.macro_china_m2_yearly().rename("M2")
macro_china_m2_yearly_df
美国CPI:
#美国CPI
macro_usa_cpi_monthly_se = ak.macro_usa_cpi_monthly().rename("美国CPI")
macro_usa_cpi_monthly_se
国债利率:
#国债利率
import datetime
start_date = datetime.date(2016, 1, 1)
end_date = datetime.date(2023, 12, 31)
all_data_formatted = pd.DataFrame()
current_date_formatted = start_date
while current_date_formatted <= end_date:
year_end_date_formatted = min(datetime.date(current_date_formatted.year + 1, 1, 1) - datetime.timedelta(days=1), end_date)
start_date_str = current_date_formatted.strftime('%Y%m%d')
end_date_str = year_end_date_formatted.strftime('%Y%m%d')
year_data_formatted = ak.bond_china_yield(start_date=start_date_str, end_date=end_date_str)
all_data_formatted = pd.concat([all_data_formatted, year_data_formatted])
current_date_formatted = year_end_date_formatted + datetime.timedelta(days=1)
all_data_formatted.head()
国债这个接口每次只能返回一年的数据,所以需要获取很多次,然后还需要把自己需要的1年期的国债利率取出来。
bond_china_yield_df = all_data_formatted[['曲线名称', '日期', '1年']].query('曲线名称=="中债国债收益率曲线"')
bond_china_yield_df=bond_china_yield_df.drop(columns='曲线名称').set_index('日期').rename(columns={'1年':"国债利率"})
bond_china_yield_df.index=pd.to_datetime(bond_china_yield_df.index)
bond_china_yield_df=bond_china_yield_df.resample('M').mean()
bond_china_yield_df
贸易顺差:
macro_china_trade_balance_df = ak.macro_china_trade_balance().rename("贸易顺差")
macro_china_trade_balance_df.tail()
是不是都很方便,几行代码有的甚至一行代码就能获取你去统计年鉴翻遍的数据。
最后把数据都进行合并;
merged_df = pd.concat([currency_boc_safe_df, macro_china_fx_reserves_yearly_df, macro_china_m2_yearly_df,
macro_usa_cpi_monthly_se, bond_china_yield_df, macro_china_trade_balance_df], axis=1).loc['2016-01-01':,:].resample('M').mean()
merged_df.index = merged_df.index.to_period('M')
merged_df
除了几个月的某些指标没有数据外,其他数据都是整整齐齐的,很不错。很方便,这样就可以进行自己的下一步研究了。
当然我这是选择了几个需要的指标,方便我下一篇进行建模分析。
akshare还有超级多的种类的经济数据,可以自己去查看官方文档怎么获取。