汇总统计Numba主程序如列表6所示。
import time import numpy as np from class_summary_statistics_numba import SummaryStatisticsNumba def main(one_dimensional_array): # 创建类汇总统计numba类对象 class_summary_statistics_numba = SummaryStatisticsNumba() # 计算观测数 number_observation = class_summary_statistics_numba.calculate_number_observation(one_dimensional_array) print("Number of Observation: {} ".format(number_observation)) # 计算算术平均值 arithmetic_mean = class_summary_statistics_numba.calcuate_arithmetic_mean(one_dimensional_array, number_observation) print("Arithmetic Mean: {} ".format(arithmetic_mean)) # 计算中值 median = class_summary_statistics_numba.calculate_median(one_dimensional_array, number_observation) print("Median: {} ".format(median)) # 计算样本标准差 sample_standard_deviation = class_summary_statistics_numba.calculate_sample_standard_deviation(one_dimensional_array, number_observation, arithmetic_mean) print("Sample Standard Deviation: {} ".format(sample_standard_deviation)) if __name__ == '__main__': start_time = time.clock() one_dimensional_array = np.arange(1000000000, dtype=np.float64) main(one_dimensional_array) end_time = time.clock() print("Program Runtime: {} seconds".format(round(end_time - start_time, 1)))列表6. 汇总统计Numba主程序
当行数达到十亿时,汇总统计Numba主程序将得到以下结果。
观测数: 1000000000 算术平均值: 499999999.067109 中值: 499999999.5 样本标准差: 288675134.73899055 程序运行时间: 40.2秒NumPy数组达到十亿行时,计算在40.2秒内就完成了,这真是一个激动人心的结果。我认为现在是时候在大数据项目中更多地使用Numba库和NumPy数组了。当然某些特殊场景可能还需要进一步研究和测试。
笔记本硬件参数
下面是我运行上面这些Python程序所使用的笔记本电脑硬件参数:
Windows 10 64位操作系统
英特尔酷睿™i7-2670QM CPU @2.20 GHz
16 GB 内存
程序运行时间对比
表1显示了数据行数为100万、1000万、1亿和10亿时不同程序的运行时间。
表1: 程序运行时间对比
结论
单独使用NumPy数组与结合asyncio异步库的NumPy数组之间没有明显差别。由于本次计算量不足以证明Python数据科学项目中asyncio异步库的性能,因此可能需要进行更多的研究来找到它适合的应用场景。
与单独使用NumPy数组或结合asyncio异步库的NumPy数组相比,将NumPy数组与Numba库组合具有最佳的数据操作和分析性能。当Numpy数组中有十亿行数据时,执行时间竟然只需要40.2秒,令我印象深刻。我怀疑目前的R程序是否也可以达到这样的速度。如果不能,也许现在就是R程序的程序员学习Python及其数据生态系统库的时候了。除此之外,请务必采用持续集成软件开发和部署实践,使用面向对象编程方法论来为实际的生产环境编写Python程序。