为数据分析构建Python代码
我为一个数据分析项目编写了代码,但它变得越来越笨拙,我想找到一种更好的方法来组织它,以便与其他人共享 为了简洁起见,我有如下内容:为数据分析构建Python代码,python,python-3.x,Python,Python 3.x,我为一个数据分析项目编写了代码,但它变得越来越笨拙,我想找到一种更好的方法来组织它,以便与其他人共享 为了简洁起见,我有如下内容: def process_raw_text(txt_file): # do stuff return token_text def tag_text(token_text): # do stuff return tagged def bio_tag(tagged): # do stuff return bio_tag
def process_raw_text(txt_file):
# do stuff
return token_text
def tag_text(token_text):
# do stuff
return tagged
def bio_tag(tagged):
# do stuff
return bio_tagged
def restructure(bio_tagged):
# do stuff
return(restructured)
print(restructured)
class Calculator():
def add(x, y):
return x + y
def subtract(x, y):
return x - y
基本上,我希望程序按顺序运行所有函数并打印输出
在研究如何构建这一点时,我阅读了如下课程:
def process_raw_text(txt_file):
# do stuff
return token_text
def tag_text(token_text):
# do stuff
return tagged
def bio_tag(tagged):
# do stuff
return bio_tagged
def restructure(bio_tagged):
# do stuff
return(restructured)
print(restructured)
class Calculator():
def add(x, y):
return x + y
def subtract(x, y):
return x - y
当构建一个允许单独调用单个函数的项目时,这似乎很有用,例如带有计算器的add
函数。add(x,y)
,但我不确定这是否是我想要的
对于连续运行的函数(用于构造数据流并提供可读性),我是否应该研究一些东西?理想情况下,我希望所有函数都位于我可以调用一次的“某物”中,这样就可以运行其中的所有内容。您可以使用模块和函数实现一个简单的动态管道
my_module.py
def 01_process_raw_text(txt_file):
# do stuff
return token_text
def 02_tag_text(token_text):
# do stuff
return tagged
import my_module
if __name__ == '__main__':
funcs = sorted([x in my_module.__dict__.iterkeys() if re.match('\d*.*', x)])
data = initial_data
for f in funcs:
data = my_module.__dict__[f](data)
my_runner.py
def 01_process_raw_text(txt_file):
# do stuff
return token_text
def 02_tag_text(token_text):
# do stuff
return tagged
import my_module
if __name__ == '__main__':
funcs = sorted([x in my_module.__dict__.iterkeys() if re.match('\d*.*', x)])
data = initial_data
for f in funcs:
data = my_module.__dict__[f](data)
您可以只使用模块和函数实现一个简单的动态管道
my_module.py
def 01_process_raw_text(txt_file):
# do stuff
return token_text
def 02_tag_text(token_text):
# do stuff
return tagged
import my_module
if __name__ == '__main__':
funcs = sorted([x in my_module.__dict__.iterkeys() if re.match('\d*.*', x)])
data = initial_data
for f in funcs:
data = my_module.__dict__[f](data)
my_runner.py
def 01_process_raw_text(txt_file):
# do stuff
return token_text
def 02_tag_text(token_text):
# do stuff
return tagged
import my_module
if __name__ == '__main__':
funcs = sorted([x in my_module.__dict__.iterkeys() if re.match('\d*.*', x)])
data = initial_data
for f in funcs:
data = my_module.__dict__[f](data)
将每个函数的输出链接在一起,作为下一个函数的输入:
def main():
print restructure(bio_tag(tag_text(process_raw_text(txt_file))
if __name__ == '__main__':
main()
@斯文马纳奇提出了一个很好的建议。一个更普遍的解决方案是认识到重复使用输出作为序列中下一个的输入的想法正是函数所做的。我们想从一些输入txt\u文件开始:
def main():
pipeline = [process_raw_text, tag_text, bio_tag, restructure]
print reduce(apply, pipeline, txt_file)
将每个函数的输出链接在一起,作为下一个函数的输入:
def main():
print restructure(bio_tag(tag_text(process_raw_text(txt_file))
if __name__ == '__main__':
main()
@斯文马纳奇提出了一个很好的建议。一个更普遍的解决方案是认识到重复使用输出作为序列中下一个的输入的想法正是函数所做的。我们想从一些输入txt\u文件开始:
def main():
pipeline = [process_raw_text, tag_text, bio_tag, restructure]
print reduce(apply, pipeline, txt_file)
没有任何东西可以阻止您创建一个类(或一组类),该类表示您希望使用按顺序调用所需函数的实现来管理的类
class DataAnalyzer():
# ...
def your_method(self, **kwargs):
# call sequentially, or use the 'magic' proposed by others
# but internally to your class and not visible to clients
pass
函数本身可以在模块中保持私有,这似乎是实现细节。没有任何东西阻止您创建一个类(或一组类),该类表示您希望通过按顺序调用所需函数的实现来管理的函数
class DataAnalyzer():
# ...
def your_method(self, **kwargs):
# call sequentially, or use the 'magic' proposed by others
# but internally to your class and not visible to clients
pass
函数本身可以在模块中保持私有,这似乎是实现细节。为什么不将它们封装在像main()
这样的函数中,只按顺序调用它们呢?这是模糊的一面。有各种各样的方法可以创建一个模块或程序,将非结构化的功能组合转化为一个集成的解决方案,但您没有提供任何关于您试图解决的问题类型的想法。您是否正在尝试创建一个类似于math
的库,而只是尝试创建一个名称空间?如果没有,那又怎样?我建议使用工作流管理框架,如。它有助于您声明任务的完整依赖关系图,可能比您需要的要多一些,但它将产生更结构化、可读性和可扩展的代码。@JohnColeman,我正在尝试为命名实体识别器创建一个解决方案。它将接收原始文本并生成结构化命名实体。我的想法是,将代码结构化为处理
,标记
,等等将有助于可读性,但我无法以这种方式实现它。这有帮助吗?为什么不将它们封装在一个像main()
这样的函数中,只按顺序调用它们呢?这是模糊的一面。有各种各样的方法可以创建一个模块或程序,将非结构化的功能组合转化为一个集成的解决方案,但您没有提供任何关于您试图解决的问题类型的想法。您是否正在尝试创建一个类似于math
的库,而只是尝试创建一个名称空间?如果没有,那又怎样?我建议使用工作流管理框架,如。它有助于您声明任务的完整依赖关系图,可能比您需要的要多一些,但它将产生更结构化、可读性和可扩展的代码。@JohnColeman,我正在尝试为命名实体识别器创建一个解决方案。它将接收原始文本并生成结构化命名实体。我的想法是,将代码结构化为处理
,标记
,等等将有助于可读性,但我无法以这种方式实现它。这有帮助吗?要使函数名按从左到右的顺序排列,您还可以执行reduce(应用,[process\u raw\u text,tag\u text,bio\u tag,restructure],txt\u file)
。要使函数名按从左到右的顺序排列,您还可以执行reduce(应用,[process\u raw\u text,tag\u text,bio\u tag,restructure],txt\u file)
。哦,等等。。。不能以数字开头python函数的名称。。。。好吧,你明白了——把它们命名为process\u 01\u foo()
,等等。。。不能以数字开头python函数的名称。。。。好吧,你明白了——把它们命名为process\u 01\u foo()
等等