Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为数据分析构建Python代码_Python_Python 3.x - Fatal编程技术网

为数据分析构建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()
等等