Python笔记-沪深三百与茅台简单分析(2021年数据)

x33g5p2x  于2022-02-28 转载在 Python  
字(3.4k)|赞(0)|评价(0)|浏览(365)

下载数据

下载的数据分别是沪深三百2021年数据:

  1. import baostock as bs
  2. import pandas as pd
  3. if __name__ == '__main__':
  4. #### 登陆系统 ####
  5. lg = bs.login()
  6. # 显示登陆返回信息
  7. print('login respond error_code:' + lg.error_code)
  8. print('login respond error_msg:' + lg.error_msg)
  9. #### 获取历史K线数据 ####
  10. # 详细指标参数,参见“历史行情指标参数”章节
  11. rs = bs.query_history_k_data_plus("000300.SH",
  12. "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
  13. start_date='2021-01-01', end_date='2021-12-31') # frequency="d"取日k线,adjustflag="3"默认不复权
  14. print('query_history_k_data_plus respond error_code:' + rs.error_code)
  15. print('query_history_k_data_plus respond error_msg:' + rs.error_msg)
  16. #### 打印结果集 ####
  17. data_list = []
  18. while (rs.error_code == '0') & rs.next():
  19. # 获取一条记录,将记录合并在一起
  20. data_list.append(rs.get_row_data())
  21. result = pd.DataFrame(data_list, columns=rs.fields)
  22. #### 结果集输出到csv文件 ####
  23. result.to_csv("D:/stock/000300.SH.csv", encoding="gbk", index=False)
  24. print(result)
  25. #### 登出系统 ####
  26. bs.logout()
  27. pass

茅台2021年数据:

  1. import baostock as bs
  2. import pandas as pd
  3. if __name__ == '__main__':
  4. #### 登陆系统 ####
  5. lg = bs.login()
  6. # 显示登陆返回信息
  7. print('login respond error_code:' + lg.error_code)
  8. print('login respond error_msg:' + lg.error_msg)
  9. #### 获取历史K线数据 ####
  10. # 详细指标参数,参见“历史行情指标参数”章节
  11. rs = bs.query_history_k_data_plus("600519.SH",
  12. "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
  13. start_date='2021-01-01', end_date='2021-12-31') # frequency="d"取日k线,adjustflag="3"默认不复权
  14. print('query_history_k_data_plus respond error_code:' + rs.error_code)
  15. print('query_history_k_data_plus respond error_msg:' + rs.error_msg)
  16. #### 打印结果集 ####
  17. data_list = []
  18. while (rs.error_code == '0') & rs.next():
  19. # 获取一条记录,将记录合并在一起
  20. data_list.append(rs.get_row_data())
  21. result = pd.DataFrame(data_list, columns=rs.fields)
  22. #### 结果集输出到csv文件 ####
  23. result.to_csv("D:/stock/600519.SH.csv", encoding="gbk", index=False)
  24. print(result)
  25. #### 登出系统 ####
  26. bs.logout()
  27. pass

Python分析数据

  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. if __name__ == '__main__':
  4. hs300 = pd.read_csv("000300.SH.csv", index_col="date")
  5. maoTai = pd.read_csv("600519.SH.csv", index_col="date")
  6. stock_list = [maoTai, hs300]
  7. df = pd.concat([stock.pctChg for stock in stock_list], axis=1)
  8. df.columns = ['maoTai', 'hs300']
  9. df = df.sort_index(ascending=True)
  10. print(df.describe())
  11. # 填充数据
  12. df = df.fillna(0) # 这个可以去掉
  13. returns = (df + 1).product() - 1
  14. print('累计收益率\n', returns)
  15. import seaborn as sns
  16. import matplotlib.pyplot as plt
  17. import matplotlib as mpl
  18. sns.set()
  19. mpl.rcParams['font.family'] = 'sans-serif'
  20. mpl.rcParams['font.sans-serif'] = 'SimHei'
  21. plt.figure(figsize=(10, 5))
  22. for col in df.columns:
  23. plt.plot(df[col], label=col)
  24. plt.title('日收益率时序图(2021)', fontsize=20)
  25. plt.legend()
  26. plt.show()
  27. pass

后台打印如下:

  1. D:\python\content\python.exe D:/PythonProject/demo/demo22.py
  2. maoTai hs300
  3. count 243.000000 243.000000
  4. mean 0.000420 -0.000151
  5. std 0.023567 0.011708
  6. min -0.069911 -0.035325
  7. 25% -0.012650 -0.006741
  8. 50% 0.000323 0.000398
  9. 75% 0.014569 0.006918
  10. max 0.095041 0.031595
  11. 累计收益率
  12. maoTai 0.035688
  13. hs300 -0.051986
  14. dtype: float64

日收益时序图如下:

相关解释:

①df.descibe()打印如下信息:

  1. maoTai hs300
  2. count 243.000000 243.000000
  3. mean 0.000420 -0.000151
  4. std 0.023567 0.011708
  5. min -0.069911 -0.035325
  6. 25% -0.012650 -0.006741
  7. 50% 0.000323 0.000398
  8. 75% 0.014569 0.006918
  9. max 0.095041 0.031595

代表的含义:

count:每一列数据有多少行;

mean:改列的平均值;

std:标准偏差(方差开根号);

min:最小值;

25%:有25%的样本比这个值高;

50%:有50%的样本比这个值高(这个值是中位数);

75%:有75%的样本比这个值高;

max:最大值;

②product()这个函数是计算这一列的乘积,代码里面是这样的:

  1. returns = (df + 1).product() - 1
  2. print('累计收益率\n', returns)

这里,原始的df是这样的:

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

相关文章