一、任务
在jupyter内进行数据分析,大家都有一种流水线的感觉。从上往下,每一行(坨)代码会解决一个小问题,最终联合在一起解决一个大问题。
例如文本分析,这里仅以text一句话为例,完整的预处理流程
- 大写转小写
- 剔除回车
- 剔除开头结尾的空格
这个预处理任务很简单, 实现方法有以下三种
二、实现方法
- 一坨代码一锅端
- 只为你量身定做一个函数
- 可拆可组装的流水线
2.1 一坨代码一锅端
刚刚学编程,写数据分析代码都是这种style, 可阅读性差,代码扩展性最差。如果遇到的任务像今天这样简单,是最高效的解决办法。但是如果任务变复杂,可扩展性就降低了,会返回造轮子。
text = " Python is powerful, so let's go!\n "
#大写转小写
text = text.lower()
#剔除回车
text = text.replace('\n', '')
#剔除开头结尾的空格
text = text.strip()
text
Run
"python is powerful, so let's go!"
2.2 一个函数搞定
相比一坨代码,一个函数的可阅读性更高一些。代码能够复用的可能,但是遇到复杂任务时, 可扩展性依然较低。
text = " Python is powerful, so let's go!\n"
def clean(text):
#大写转小写
text = text.lower()
#剔除回车
text = text.replace('\n', '')
#剔除开头结尾的空格
text = text.strip()
return text
clean(text)
Run
"python is powerful, so let's go!"
2.3 设计成流水线
拆解成三个环节函数,并组织成一个流水线。可读性和代码可扩展性大大提高,能轻松应对不同复杂度任务。代价仅仅是多写几行代码。首先需要安装一个实现流水线功能的fastcore库。
安装命令
!pip3 install fastcore
设计的三个环节函数,使用fastcore库的Pipeline来组织成一个流水线。代码
from fastcore.transform import Pipeline
def lower(text):
#变小写
return text.lower()
def remove_(text):
#剔除回车
return text.replace('\n', '')
def strip(text):
#剔除开头结尾的空格
return text.strip()
text = " Python is powerful, so let's go!\n"
#将环节函数组织成一个流水线
pipe = Pipeline([lower, remove_, strip])
pipe(text)
Run
"python is powerful, so let's go!"
三、快速响应
如果预处理任务只需要lower和strip, 新的流水线可以快速装配需要的环节函数, 以应对新的预处理任务。
text = " Python is powerful, so let's go!"
#将环节函数组织成一个流水线
pipe2 = Pipeline([lower, strip])
pipe2(text)
Run
"python is powerful, so let's go!"