货币供应量M1M2与上证综合指数之间的相关性图示

发布于: 雪球转发:0回复:0喜欢:2

通过baostock数据平台获取了货币供应量M1和M2的历史数据,并且获取了相同时间内上证综合指数的数据,来分析两者是不是存在关联。

绘制出图像如下,可以看出两者几乎没有什么相关性,货币供应量一直稳定地在增长,从80万亿一直增长到160万亿。几乎是一条直线,而上证指数的波动就比较大,时常有图上的暴涨暴跌。

代码如下:

import baostock as bs

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import datetime

def get_szzs_his_data(startDate, endDate):

"""获取历史上证指数数据"""

# 登陆系统

lg = bs.login()

# 显示登陆返回信息

print('login respond error_code:' + lg.error_code)

print('login respond error_msg:' + lg.error_msg)

# 获取上增指数

rs = bs.query_history_k_data_plus("sh.000001",

"date,close",

start_date=startDate, end_date=endDate,

frequency="d", adjustflag="3")

print('query_history_k_data respond error_code:' + rs.error_code)

print('query_history_k_data respond error_msg:' + rs.error_msg)

# 打印结果集

data_list = []

while (rs.error_code == '0') & rs.next():

# 获取一条记录,将记录合并在一起

data_list.append(rs.get_row_data())

result = pd.DataFrame(data_list, columns=rs.fields)

# 登出系统

bs.logout()

return result

def get_money_supply(startDate, endDate):

# 获取货币供应量

# 登陆系统

lg = bs.login()

# 显示登陆返回信息

print('login respond error_code:'+lg.error_code)

print('login respond error_msg:'+lg.error_msg)

# 获取货币供应量

rs = bs.query_money_supply_data_month(

start_date=startDate, end_date=endDate)

print('query_money_supply_data_month respond error_code:'+rs.error_code)

print('query_money_supply_data_month respond error_msg:'+rs.error_msg)

# 打印结果集

data_list = []

while (rs.error_code == '0') & rs.next():

# 获取一条记录,将记录合并在一起

data_list.append(rs.get_row_data())

result = pd.DataFrame(data_list, columns=rs.fields)

# 登出系统

bs.logout()

return result

def plot_two_curve_line(tradingDateList, y1, y2, titletext='pic', y1name=u'y1', y2name=u'y2'):

"""根据日期,画出相同时间序列的两个值的曲线"""

# 将不同量纲的两个值转化为相似的数量级

multi_num = y1[-1] / y2[-1]

y2 = [y * multi_num for y in y2]

x1 = range(len(tradingDateList))

datelable = []

for i_days in range(len(tradingDateList)):

tradingdate = tradingDateList[i_days]

date = int(tradingdate[8:])

# print date

# if date %10 == 0:

if date == 1:

datelable.append(tradingdate)

else:

datelable.append("")

x1 = np.array(x1)

y1 = np.array(y1)

y2 = np.array(y2)

fig, ax = plt.subplots()

plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

plt.xticks(x1, datelable, rotation=30)

ax.plot(x1, y1, color='r', label=y1name)

ax.plot(x1, y2, color='y', label=y2name)

plt.title(titletext)

# plt.legend((y1name, y2name))

# 显示在右上角

ax.legend(loc=1)

plt.show()

def plot_money_supply_and_szzs():

""" 画出szzs和货币供应量之间的相关指数 """

startdate = "2012-01-05"

endate = "2018-07-02"

szzsData = get_szzs_his_data(startdate, endate)

datelist = szzsData.loc[:, 'date']

close = szzsData.loc[:, 'close']

money_suppy_data = get_money_supply("2012-01", "2018-08")

money_supply_yearlist = money_suppy_data.loc[:, 'statYear'].astype('int')

money_supply_monthlist = money_suppy_data.loc[:, 'statMonth'].astype('int')

money_supply_data = money_suppy_data.loc[:, 'm2Month']

print(len(datelist), len(money_supply_yearlist), len(money_supply_data))

modified_datelist = []

modified_szzslist = []

modified_money_supply_hisdata = []

i = 0

j = 0

# 对其日期 将不同时间序列的数据 转化为同一时间序列的数据。

while True:

if i == len(datelist) and j == len(money_supply_yearlist):

break

szzs_stat_year = datetime.datetime.strptime(datelist[i], "%Y-%m-%d").year

szzs_stat_month = datetime.datetime.strptime(datelist[i], "%Y-%m-%d").month

# 如果szzs的日期和货币供应的年,月相等,则提取该值。

if szzs_stat_year == money_supply_yearlist[j] and szzs_stat_month == money_supply_monthlist[j]:

print(szzs_stat_year, money_supply_yearlist[j], szzs_stat_month, money_supply_monthlist[j])

modified_datelist.append(datelist[i])

modified_szzslist.append(float(close[i]))

modified_money_supply_hisdata.append(float(money_supply_data[j]))

i += 1

j += 1

elif szzs_stat_year < money_supply_yearlist[j] or (szzs_stat_year == money_supply_yearlist[j] and szzs_stat_month < money_supply_monthlist[j]):

i += 1

elif szzs_stat_year > money_supply_yearlist[j] or (szzs_stat_year == money_supply_yearlist[j] and szzs_stat_month > money_supply_monthlist[j]):

j += 1

else:

print(szzs_stat_year, money_supply_yearlist[j], szzs_stat_month, money_supply_monthlist[j])

print("error")

print(len(modified_datelist), len(

modified_money_supply_hisdata), len(modified_szzslist))

plot_two_curve_line(modified_datelist, modified_money_supply_hisdata, modified_szzslist, titletext=u'货币供应量和上证指数历史走势图', y1name=u'货币供应量M2(单位:亿元)',

y2name=u'上证指数')

if __name__ == '__main__':

plot_money_supply_and_szzs()