理解Numpy
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算;当然Numpy也能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题(不过有其弊端,后面会通过具体例子说明)。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务:
- 机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。
- 图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。
- 数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。
理解pandas
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
实例简述区别
# 通过numpy创建一个符合正太分布的10个股票5天的涨跌幅数据
stock_change = np.random.normal(0, 1, (10, 5))
array([[-0.06544031, -1.30931491, -1.45451514, 0.57973008, 1.48602405],
[-1.73216741, -0.83413717, 0.45861517, -0.80391793, -0.46878575],
[ 0.21805567, 0.19901371, 0.7134683 , 0.5484263 , 0.38623412],
[-0.42207879, -0.33702398, 0.42328531, -1.23079202, 1.32843773],
[-1.72530711, 0.07591832, -1.91708358, -0.16535818, 1.07645091],
[-0.81576845, -0.28675278, 1.20441981, 0.73365951, -0.06214496],
[-0.98820861, -1.01815231, -0.95417342, -0.81538991, 0.50268175],
[-0.10034128, 0.61196204, -0.06850331, 0.74738433, 0.143011 ],
[ 1.00026175, 0.34241958, -2.2529711 , 0.93921064, 1.14080312],
[ 2.52064693, 1.55384756, 1.72252984, 0.61270132, 0.60888092]])
但是这样的数据形式很难看到存储的是什么的样的数据,并也很难获取相应的数据,比如需要获取某个指定股票的数据,就很难去获取!!
问题:如何让数据更有意义的显示?处理刚才的股票数据
# 使用Pandas中的数据结构
stock_day_rise = pd.DataFrame(stock_change)
给股票涨跌幅数据增加行列索引,显示效果更佳
- 增加行索引
# 构造行索引序列
stock_code = ['股票' + str(i) for i in range(stock_day_rise.shape[0])]
# 添加行索引
data = pd.DataFrame(stock_day_rise, index=stock_code)
- 增加列索引
股票的日期是一个时间的序列,我们要实现从前往后的时间还要考虑每月的总天数等,不方便。使用pd.date_range():用于生成一组连续的时间序列
# 生成一个时间的序列,略过周末非交易日
date = pd.date_range('2017-01-01', periods=stock_day_rise.shape[1], freq='B')
# index代表行索引,columns代表列索引
data = pd.DataFrame(stock_change, index=stock_index, columns=date)
如图所示:
可以发现,同numpy相比,pandas在进行数据处理能力方面更便捷!!!