学习目标

  • 目标
    • 应用add等实现数据间的加、减法运算
    • 应用逻辑运算符号实现数据的逻辑筛选
    • 应用isin, query实现数据的筛选
    • 使用describe完成综合统计
    • 使用max, min, mean, std完成统计计算
    • 使用idxmin、idxmax完成最大值最小值的索引
    • 使用cumsum等实现累计分析
    • 应用apply函数实现数据的自定义处理

1 算术运算

  • add(other)

比如进行数学运算加上具体的一个数字

  1. data['open'].add(1)
  2. 2018-02-27 24.53
  3. 2018-02-26 23.80
  4. 2018-02-23 23.88
  5. 2018-02-22 23.25
  6. 2018-02-14 22.49
  • sub(other)’

    2 逻辑运算

    2.1 逻辑运算符号

  • 例如筛选data[“open”] > 23的日期数据

    • data[“open”] > 23返回逻辑结果 ```python data[“open”] > 23

2018-02-27 True 2018-02-26 False 2018-02-23 False 2018-02-22 False 2018-02-14 False

  1. ```python
  2. # 逻辑判断的结果可以作为筛选的依据
  3. data[data["open"] > 23].head()

逻辑举例1.png

  • 完成多个逻辑判断,

    1. data[(data["open"] > 23) & (data["open"] < 24)].head()

    逻辑举例2.png

    2.2 逻辑运算函数

  • query(expr)

    • expr:查询字符串

通过query使得刚才的过程更加方便简单

  1. data.query("open<24 & open>23").head()
  • isin(values)

例如判断’open’是否为23.53和23.85

  1. # 可以指定值进行一个判断,从而进行筛选操作
  2. data[data["open"].isin([23.53, 23.85])]

isin.png

3 统计运算

3.1 describe

综合分析: 能够直接得出很多统计结果,count, mean, std, min, max

  1. # 计算平均值、标准差、最大值、最小值
  2. data.describe()

describe结果.png

3.2 统计函数

Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)结果:

count Number of non-NA observations
sum Sum of values
mean Mean of values
median Arithmetic median of values
min Minimum
max Maximum
mode Mode
abs Absolute Value
prod Product of values
std Bessel-corrected sample standard deviation
var Unbiased variance
idxmax compute the index labels with the maximum
idxmin compute the index labels with the minimum

对于单个函数去进行统计的时候,坐标轴还是按照默认列“columns” (axis=0, default),如果要对行“index” 需要指定(axis=1)

  • max()、min() ```python

    使用统计函数:0 代表列求结果, 1 代表行求统计结果

    data.max(0)

open 34.99 high 36.35 close 35.21 low 34.01 volume 501915.41 price_change 3.03 p_change 10.03 turnover 12.56 my_price_change 3.41 dtype: float64

  1. - std()、var()
  2. ```python
  3. # 方差
  4. data.var(0)
  5. open 1.545255e+01
  6. high 1.662665e+01
  7. close 1.554572e+01
  8. low 1.437902e+01
  9. volume 5.458124e+09
  10. price_change 8.072595e-01
  11. p_change 1.664394e+01
  12. turnover 4.323800e+00
  13. my_price_change 6.409037e-01
  14. dtype: float64
  15. # 标准差
  16. data.std(0)
  17. open 3.930973
  18. high 4.077578
  19. close 3.942806
  20. low 3.791968
  21. volume 73879.119354
  22. price_change 0.898476
  23. p_change 4.079698
  24. turnover 2.079375
  25. my_price_change 0.800565
  26. dtype: float64
  • median():中位数

中位数为将数据从小到大排列,在最中间的那个数为中位数。如果没有中间数,取中间两个数的平均值。

  1. df = pd.DataFrame({'COL1' : [2,3,4,5,4,2],
  2. 'COL2' : [0,1,2,3,4,2]})
  3. df.median()
  4. COL1 3.5
  5. COL2 2.0
  6. dtype: float64
  • idxmax()、idxmin() ```python

    求出最大值的位置

    data.idxmax(axis=0)

open 2015-06-15 high 2015-06-10 close 2015-06-12 low 2015-06-12 volume 2017-10-26 price_change 2015-06-09 p_change 2015-08-28 turnover 2017-10-26 my_price_change 2015-07-10 dtype: object

求出最小值的位置

data.idxmin(axis=0)

open 2015-03-02 high 2015-03-02 close 2015-09-02 low 2015-03-02 volume 2016-07-06 price_change 2015-06-15 p_change 2015-09-01 turnover 2016-07-06 my_price_change 2015-06-15 dtype: object

  1. <a name="ZdCJr"></a>
  2. ### 3.3 累计统计函数
  3. | **函数** | **作用** |
  4. | --- | --- |
  5. | cumsum | **计算前1/2/3/…/n个数的和** |
  6. | cummax | 计算前1/2/3/…/n个数的最大值 |
  7. | cummin | 计算前1/2/3/…/n个数的最小值 |
  8. | cumprod | 计算前1/2/3/…/n个数的积 |
  9. **那么这些累计统计函数怎么用?**![cumsum1.png](https://cdn.nlark.com/yuque/0/2022/png/21879589/1655974692451-49785879-79be-4292-96c1-06d689b2f9c5.png#clientId=uce373df9-168f-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ub0ac85f4&margin=%5Bobject%20Object%5D&name=cumsum1.png&originHeight=844&originWidth=1250&originalType=binary&ratio=1&rotation=0&showTitle=false&size=397047&status=done&style=none&taskId=ub4ce004d-a271-409a-b28d-43f825e990c&title=)<br />以上这些函数可以对series和dataframe操作<br />这里我们按照时间的从前往后来进行累计
  10. - 排序
  11. ```python
  12. # 排序之后,进行累计求和
  13. data = data.sort_index()
  • 对p_change进行求和 ```python stock_rise = data[‘p_change’]

    plot方法集成了前面直方图、条形图、饼图、折线图

    stock_rise.cumsum()

2015-03-02 2.62 2015-03-03 4.06 2015-03-04 5.63 2015-03-05 7.65 2015-03-06 16.16 2015-03-09 16.37 2015-03-10 18.75 2015-03-11 16.36 2015-03-12 15.03 2015-03-13 17.58 2015-03-16 20.34 2015-03-17 22.42 2015-03-18 23.28 2015-03-19 23.74 2015-03-20 23.48 2015-03-23 23.74

  1. **那么如何让这个连续求和的结果更好的显示呢?**![cumsum.png](https://cdn.nlark.com/yuque/0/2022/png/21879589/1655974727252-26360478-de71-4633-9c70-519a2c8aa6c0.png#clientId=uce373df9-168f-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ub37efd8b&margin=%5Bobject%20Object%5D&name=cumsum.png&originHeight=518&originWidth=838&originalType=binary&ratio=1&rotation=0&showTitle=false&size=90173&status=done&style=none&taskId=ucbdc5160-d09b-47d3-9f44-d7b16c7bb36&title=)<br />如果要使用plot函数,需要导入matplotlib.
  2. ```python
  3. import matplotlib.pyplot as plt
  4. # plot显示图形
  5. stock_rise.cumsum().plot()
  6. # 需要调用show,才能显示出结果
  7. plt.show()

关于plot,稍后会介绍API的选择

4 自定义运算

  • apply(func, axis=0)
    • func:自定义函数
    • axis=0:默认是列,axis=1为行进行运算
  • 定义一个对列,最大值-最小值的函数 ```python data[[‘open’, ‘close’]].apply(lambda x: x.max() - x.min(), axis=0)

open 22.74 close 22.85 dtype: float64 ```

5 小结

  • 算术运算【知道】
  • 逻辑运算【知道】
    • 1.逻辑运算符号
    • 2.逻辑运算函数
      • 对象.query()
      • 对象.isin()
  • 统计运算【知道】
    • 1.对象.describe()
    • 2.统计函数
    • 3.累积统计函数
  • 自定义运算【知道】
    • apply(func, axis=0)