下载数据
下载的数据分别是沪深三百2021年数据:
- import baostock as bs
- import pandas as pd
-
- if __name__ == '__main__':
- #### 登陆系统 ####
- lg = bs.login()
- # 显示登陆返回信息
- print('login respond error_code:' + lg.error_code)
- print('login respond error_msg:' + lg.error_msg)
-
- #### 获取历史K线数据 ####
- # 详细指标参数,参见“历史行情指标参数”章节
- rs = bs.query_history_k_data_plus("000300.SH",
- "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
- start_date='2021-01-01', end_date='2021-12-31') # frequency="d"取日k线,adjustflag="3"默认不复权
- print('query_history_k_data_plus respond error_code:' + rs.error_code)
- print('query_history_k_data_plus 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)
- #### 结果集输出到csv文件 ####
- result.to_csv("D:/stock/000300.SH.csv", encoding="gbk", index=False)
- print(result)
-
- #### 登出系统 ####
- bs.logout()
-
- pass
茅台2021年数据:
- import baostock as bs
- import pandas as pd
-
- if __name__ == '__main__':
- #### 登陆系统 ####
- lg = bs.login()
- # 显示登陆返回信息
- print('login respond error_code:' + lg.error_code)
- print('login respond error_msg:' + lg.error_msg)
-
- #### 获取历史K线数据 ####
- # 详细指标参数,参见“历史行情指标参数”章节
- rs = bs.query_history_k_data_plus("600519.SH",
- "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
- start_date='2021-01-01', end_date='2021-12-31') # frequency="d"取日k线,adjustflag="3"默认不复权
- print('query_history_k_data_plus respond error_code:' + rs.error_code)
- print('query_history_k_data_plus 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)
- #### 结果集输出到csv文件 ####
- result.to_csv("D:/stock/600519.SH.csv", encoding="gbk", index=False)
- print(result)
-
- #### 登出系统 ####
- bs.logout()
-
- pass
Python分析数据
- # -*- coding: utf-8 -*-
-
- import pandas as pd
-
-
- if __name__ == '__main__':
- hs300 = pd.read_csv("000300.SH.csv", index_col="date")
- maoTai = pd.read_csv("600519.SH.csv", index_col="date")
-
- stock_list = [maoTai, hs300]
- df = pd.concat([stock.pctChg for stock in stock_list], axis=1)
- df.columns = ['maoTai', 'hs300']
- df = df.sort_index(ascending=True)
- print(df.describe())
-
- # 填充数据
- df = df.fillna(0) # 这个可以去掉
- returns = (df + 1).product() - 1
- print('累计收益率\n', returns)
-
- import seaborn as sns
- import matplotlib.pyplot as plt
- import matplotlib as mpl
-
- sns.set()
- mpl.rcParams['font.family'] = 'sans-serif'
- mpl.rcParams['font.sans-serif'] = 'SimHei'
-
- plt.figure(figsize=(10, 5))
- for col in df.columns:
- plt.plot(df[col], label=col)
- plt.title('日收益率时序图(2021)', fontsize=20)
- plt.legend()
- plt.show()
-
- pass
后台打印如下:
- D:\python\content\python.exe D:/PythonProject/demo/demo22.py
- maoTai hs300
- count 243.000000 243.000000
- mean 0.000420 -0.000151
- std 0.023567 0.011708
- min -0.069911 -0.035325
- 25% -0.012650 -0.006741
- 50% 0.000323 0.000398
- 75% 0.014569 0.006918
- max 0.095041 0.031595
- 累计收益率
- maoTai 0.035688
- hs300 -0.051986
- dtype: float64
日收益时序图如下:

相关解释:
①df.descibe()打印如下信息:
- maoTai hs300
- count 243.000000 243.000000
- mean 0.000420 -0.000151
- std 0.023567 0.011708
- min -0.069911 -0.035325
- 25% -0.012650 -0.006741
- 50% 0.000323 0.000398
- 75% 0.014569 0.006918
- max 0.095041 0.031595
代表的含义:
count:每一列数据有多少行;
mean:改列的平均值;
std:标准偏差(方差开根号);
min:最小值;
25%:有25%的样本比这个值高;
50%:有50%的样本比这个值高(这个值是中位数);
75%:有75%的样本比这个值高;
max:最大值;
②product()这个函数是计算这一列的乘积,代码里面是这样的:
- returns = (df + 1).product() - 1
- print('累计收益率\n', returns)
这里,原始的df是这样的:

这些都是当天的收益率,+1,后把这些列都乘起来再-1,算出累计收益率。



















