python 数据预处理1

短命女 2023-05-30 04:59 35阅读 0赞

通过Tushare或者Tushare pro获取股票清单,但是有3707家企业,怎么挑选股票,我自己瞎琢磨。
1 根据各板块选择龙头股票
mysql分组排序取最大、最小、最新、前N条记录,下图是根据行业、总市值来判断。

  1. select st1.code,st1.name,sb1.industry,st1.mktcap,sb1.market,st1.trade,st1.per,st1.pb
  2. from stock_today st1
  3. inner join stock_basic sb1 on sb1.symbol=st1.code
  4. where 3> (
  5. select count(*)
  6. from stock_today st2
  7. inner join stock_basic sb2 on sb2.symbol=st2.code
  8. where sb1.industry=sb2.industry and sb1.market=sb2.market and st2.mktcap>st1.mktcap
  9. )
  10. order by sb1.industry,st1.mktcap

2 市盈率Matplotlib作图
参考Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解,python中matplotlib的颜色及线条控制的示例,使用sklearn预处理数据之标准化、归一化、正则化

  1. import numpy as np
  2. from matplotlib import pyplot as plt
  3. from sklearn.preprocessing import StandardScaler
  4. import pandas as pd
  5. def get_outlier(x,y,upper,lower):
  6. o_x = []
  7. o_y = []
  8. for i in range(0,len(x)):
  9. if y[i]< lower or y[i]>upper:
  10. o_x.append(x[i])
  11. o_y.append(y[i])
  12. else:
  13. continue
  14. return o_x,o_y
  15. # figsize:指定figure的宽和高,单位为英寸, 1英寸等于2.5cm,A4纸是 21*30cm的纸张
  16. # dpi参数指定绘图对象的分辨率,dpi默认为80
  17. fig = plt.figure(figsize=(15,15),dpi=60)
  18. # 数据
  19. per=[35.676,33.163,53.553,38.374,36.239,18.501,43.831,16.49,32.333,42.884,21.019,32.684,50.282,53.996,23.175,34.972,21.294,24.31]
  20. per=np.array(per)
  21. mean = round(per.mean(),2)
  22. x = np.arange(1,19,1)
  23. # 散点图
  24. # add_subplot,参数顺序:行数、列数,位置,221,也可以协程2,2,1
  25. ax = fig.add_subplot(221)
  26. ax.scatter(x, per, marker = 'o', color = 'green', s = 40, label = 'per')
  27. ax.axhline(y=mean,label=str(mean))
  28. ax.legend(loc='best')
  29. # z-score标准化
  30. ss = StandardScaler()
  31. # fit:用于计算训练数据的均值和方差, 后面就会用均值和方差来转换训练数据
  32. # transform:很显然,它只是进行转换,只是把训练数据转换成标准的正态分布
  33. # fit_transform:不仅计算训练数据的均值和方差,还会基于计算出来的均值和方差来转换训练数据,从而把数据转换成标准的正太分布
  34. # reshape中-1代表行数未知,列数为1
  35. ss_per = ss.fit_transform(per.reshape(-1,1))
  36. ax = fig.add_subplot(222)
  37. # sklearn中二维数组结构,numpy https://www.zhangshengrong.com/p/bYXxZKwlaZ/,减少内存消耗,需要做一下转换
  38. ax.scatter(x,ss_per.reshape(1,-1)[0], marker = 'o', color = 'green', s = 40, label = 'Third')
  39. # 箱型图
  40. ax = fig.add_subplot(223)
  41. ax.boxplot(per, showmeans=True)
  42. df_per = pd.DataFrame(per)
  43. # pandas.DataFrame.describe,返回数据的统计特征
  44. # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html
  45. statistics = df_per.describe()
  46. # https://www.cnblogs.com/linux-wangkun/p/5903380.html
  47. IQR = statistics.loc['75%']-statistics.loc['25%']
  48. QL = statistics.loc['25%']
  49. QU = statistics.loc['75%']
  50. threshold_upper = QL - 1.5 * IQR
  51. threshold_lower = QU + 1.5 * IQR
  52. # https://www.cnblogs.com/linux-wangkun/p/5903380.html
  53. # 注意pandas 数据结构之Series
  54. o_x,o_y = get_outlier(x,per,QU[0],QL[0])
  55. ax = fig.add_subplot(224)
  56. ax.plot(x,per,marker='+')
  57. ax.axhline(y=threshold_upper[0])
  58. ax.axhline(y=QL[0],color='r')
  59. ax.axhline(y=QU[0],color='c')
  60. ax.axhline(y=threshold_lower[0])
  61. # ax.plot(o_x,o_y)
  62. for i in range(len(o_x)):
  63. ax.annotate(o_y[i],xy=(o_x[i],o_y[i]),xytext=(o_x[i],o_y[i]))
  64. # 显示
  65. plt.show()

从下图可以看到matplotlib虽然可以画箱型图,但是图形意义只是直观,而作用并不大,至少还需要pandas分析。
数据标准化后,数据的分布并不会发生变化。
1
待续。。

发表评论

表情:
评论列表 (有 0 条评论,35人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python 数据预处理1

    通过[Tushare][]或者[Tushare pro][]获取股票清单,但是有3707家企业,怎么挑选股票,我自己瞎琢磨。 1 根据各板块选择龙头股票 [mysql分

    相关 数据预处理

      我们已经知道,将数据输入神经网络之前,应该将数据格式化为经过预处理的浮点数张量。现在,数据以JPEG文件的形式保存在硬盘中,所以数据预处理步骤大致如下。 读取图像文