【问题标题】:Python class design for data processing用于数据处理的 Python 类设计
【发布时间】:2020-11-08 14:38:37
【问题描述】:

我是 python 初学者,目前正在学习 OOP。我想创建一个类,该类将从数据库中加载数据,然后对这些数据执行转换和计算。但是,我不确定应该如何设计课程。该类将有几个方法,每个方法输入都是前一个方法的输出。但是,我发现这种方式并不优雅,我觉得它不符合 OOP 的精神。

这是使用 OOP 设计此类流程的好方法吗?或者在这种情况下创建一个类来处理数据是否更有利?

请看下面我尝试做的事情:

class Data:
      def __init__(self, arg):
          self.arg = arg (attributes necessary for the loading of data)
          
      def load_data(self):
          "load the data from somewhere and reshape it so that it can be used by method1"
          return(data)

      def method1(self, data):
          "do some transformation on the data"
          return(data1)

      def method2(self, data1):
          "do some transformation on the data1"
          return(data2)

      def method3(self, data2):
           "do some transformation on the data2"
          return(data3)

      def run(self):
           data = self.load()
           data1 = self.method1(data)
           data2 = self.method2(data1)
           data3 = self.method3(data2)
           return(data3)

提前感谢您的帮助。

【问题讨论】:

  • 这取决于你的目标。不同的编程哲学可能会建议您的代码应该以某种方式编写。您的代码完全可以接受 UNIX 哲学(一个函数只做一件事并且做得很好,并期望一个代码的输出成为另一个代码的输入)。我认为这归根结底是个人喜好。 en.wikipedia.org/wiki/Unix_philosophy

标签: python dataframe class design-patterns methods


【解决方案1】:

有多种技术(Python API)(Pandas、PySpark 等)利用数据处理操作,这些操作通过使用复杂的技术(使用 C++ 代码和矢量化等)进行了非常优化,在这些技术下可以产生极快的结果(有时比默认的 Python 代码快几万倍)。

即使我明白你的意思并且说得通,你可能永远不需要像这样的纯 Python 类。认为它就像其他人已经做了你提到的事情并且做得非常好,所以你不需要再关心它了。

但是,您可以使用这些 API 定义自己的方法和类,这些 API 将对数据集执行某些转换/操作,并且仍然利用它们优化的处理速度,但是这些函数可能会完成非常具体的工作,否则一般操作已经在我已经讨论过的 API。

对于比我更有经验/知识渊博的人,如果我提供了任何错误信息,请告诉我,以便我也可以提高自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2020-05-14
    • 2013-02-02
    • 2016-06-25
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多