【问题标题】:Getting stats from a group of instances in python从python中的一组实例中获取统计信息
【发布时间】:2022-01-03 21:23:37
【问题描述】:

我正在用 python 做一些数据分析。我有几个数据点(~300),其中每个点都有自己的全局属性(int 或 float 值)和网格值(即具有 4 列以上的数组)。 为了便于阅读、处理和分析每个点,我创建了一个类如下(这是一个最小示例):

class SimulationPoint:
    def __init__(self, path, scalar1, scalar2):
        self.scalar1 = scalar1
        self.mesh = pd.read_csv(path+'mesh.csv')

    def normalize_input(self):
        return func1(self.scalar1)

    def spot_centers(self, nbr_spots=5):
        points_mesh = self.mesh[self.mesh.value >= self.mesh.value.quantile(0.9)].copy()
        xyz_mesh = points_mesh.drop(['value'], axis=1).to_numpy()
        result = func2(xyz_mesh, n_clusters=nbr_spots)
        return result

所以我的问题是,是否有一些简单的方法可以从此类的多个实例中获取统计信息? 例如,绘制直方图或获取基本统计数据(均值、标准差、峰度等...)。

目前我的解决方案是:

# Read data into dict.
path = '../path_to_data/'
full_data = {}
for dp in os.listdir(path):
    dp_path = os.path.join(path,dp)
    full_data[dp] = SimulationPoint(dp_path)
# Loop over dict values.
for key in full_data.keys() :
    x = full_data[key].normalize_input()

我想知道是否有更优雅/有效/(放置有用的词)来做到这一点?

附:我有更多的类的方法/属性,这就是我决定创建它的原因。 顺便说一句,我是 OOP 的新手,请不要犹豫对代码实现进行更广泛的评论。

谢谢!

【问题讨论】:

    标签: python pandas numpy class statistics


    【解决方案1】:

    我更喜欢pathlib 而不是os.listdir 等。此外,有时列表推导或字典推导可以使代码更整洁。最后,您可以考虑使用 dict.items() 迭代键值对。

    就像这个问题一样,我实际上并没有运行下面的代码,但这些代码可能与问题中的示例相同。

    from pathlib import Path
    
    path = Path("../path_to_data")
    
    full_data = {file.stem: SimulationPoint(file) for file in path.iterdir()}
    
    normed = {k: data.normalize_input() for k, data in full_data.items()}
    

    【讨论】:

    • 有什么特别的理由选择pathlib 而不是os.listdir 吗?
    • 我发现它通常更容易和更直观,尤其是使用“/”运算符构建路径的能力,例如Path(myStartPath) / "subfolder" / "file.txt".
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2023-04-09
    • 2015-11-16
    相关资源
    最近更新 更多