全文共字,预计学习时长7分钟
作为数据科学家,敲出最优的Python代码非常非常重要。别无他法,杂乱低效的代码笔记本会消耗你的时间,也会浪费大量项目资金。经验丰富的数据科学家和专业人士都很清楚,这样是没办法和客户合作的。
本文将列出4个可行的Python代码优化方法,以便大家日后应用到自己的数据科学项目中。
什么是最优化?
首先来看一个直观的例子,然后定义什么是最优化。
问题是这样的:
假设有一个数组,其中每个指数代表一个城市,指数的值代表该城市和下一个城市之间的距离。已知两个指数,求这两个指数间的距离。简单来讲,就是求任意两个指数间的总值。
大家肯定首先会想到这里可以用for循环。但是如果一共有十几万个城市,每秒会收到五万多个查询需求呢?这种情况下,for循环还是这个问题的最优解吗?
不是了吧。此时就该挥动优化代码的仙女棒了。
代码最优化,简单来讲,就是在保证结果正确的前提下尽可能减少执行任务的运算量。
来算算for循环完成任务所需的运算量吧:
首先计算出上面数组中指数1和3代表的城市间的距离。
指数1和3代表城市之间的距离=(0+20+6+10)=36=3次算术运算。
如果数组大小为,需求数量为呢?
数组总大小为。
需求总数为。
假设两指数间的平均差异为。
完成该任务的算术运算总量近似值为*=000
这个数量非常庞大。如果数据和查询量不断增加,for循环将会花费更多的时间。如果想减少计算量,同时又想得到正确的结果,应该采取什么优化方法呢?
这里,使用前缀数组来计算距离是一种可能的优化方案。它是这样运算的:
大家能理解这里的做法吗?这样只需一次计算就得到了同样的城市距离!这一方法最棒的地方就是,不管指数间的差距是1还是,只需一次计算就能算出任意两个指数间的距离。是不是很神奇?
我们用10万的数组和5万查询量创建了一个样本数据集。在下面的在线编程窗口中比较两种方法所需的时间。
注意:数据集总查询量为5万,你可以改变execute_queries参数,执行不超过5万的任一查询数量,看看每种方法完成任务所花费的时间。
最优化不仅能节省时间,大大加快完成速度,还能节省计算能力!
这些要怎么应用于数据科学项目呢?大家可能已经注意到了,很多时候需要对大量数据点进行相同查询,尤其是数据预处理阶段。
所以,在编程中运用最优化方法,从而尽可能快速有效地完成任务至关重要。以下就来分享几个提升优化Python代码的方法。
1.Pandas.apply()–特征工程瑰宝
Pandas库已经非常优化了,但是大部分人都没有发挥它的最大作用。想想它一般会用于数据科学项目中的哪些地方。
一般首先能想到的就是特征工程,即用已有特征创造新特征。其中最高效的方法之一就是Pandas.apply(),即Pandas中的apply函数。
在Pandas.apply()中,可以传递用户定义功能并将其应用到PandasSeries的所有数据点中。这个函数是Pandas库最好的扩展功能之一,它能根据所需条件分隔数据。之后便能将其有效应用到数据处理任务中。
试着用推特的情感分析数据来计算每条推文的字数吧。可以使用dataframeiterrows函数、NumPy程序库和apply函数等方法,再在下面的在线编程窗口中进行比较。
数据集可在此处下载: