如何根据属性数量动态创建Python字典

问题描述 投票:0回答:1

我有一个CSV文件,该文件具有6个属性和1个类,可以通过Pandas进行阅读。

CsvFile = "/path/to/file.csv"
df = pd.read_csv(CsvFile)

我的CSV的前5行:

x,y,x1,y1,x2,y2,class
92,115,120,94,84,102,3
84,102,106,79,84,102,3
84,102,102,83,80,102,3
80,102,102,79,84,94,3
84,94,102,79,80,94,3

由于我有6个属性,所以我想用Python创建一个字典(6个键,每个键5个值),该字典将具有kmeans的质心。

numberOfClusters = 5
centroids = 
{
        i+1: [random.uniform(0.0, 255.0), random.uniform(0.0, 255.0), 
              random.uniform(0.0, 255.0), random.uniform(0.0, 255.0), 
              random.uniform(0.0, 255.0), random.uniform(0.0, 255.0)]
        for i in range(numberOfClusters)
}

问题1:如您所知,为了匹配CSV文件中的属性数,将random.uniform(0.0, 255.0)复制粘贴至我想要获取的随机点的次数不那么有效。 。有没有复制粘贴的方法吗?

以类似的方式,在下面的代码中,我计算了欧几里得距离。

    for i in centroids.keys():
        df['distance_from_{}'.format(i)] = (
            np.sqrt(
                (df['x'] - centroids[i][0]) ** 2
                + (df['y'] - centroids[i][1]) ** 2
                + (df['x.1'] - centroids[i][2]) ** 2
                + (df['y.1'] - centroids[i][3]) ** 2
                + (df['x.2'] - centroids[i][4]) ** 2
                + (df['y.2'] - centroids[i][5]) ** 2
            )
        )

问题2:如果我有更多属性,则必须添加更多df['x'] - centroids[i][0]) ** 2,而如果我有更少属性,则删除一个或多个。我如何才能稍微自动化该过程?

不使用scikit的kmeans的原因是我想计算每个群集的权重。

python dictionary k-means
1个回答
0
投票

如果键数是您可以使用的问题

© www.soinside.com 2019 - 2024. All rights reserved.