pandas / python

时间:2016-08-24 20:56:18

标签: python pandas k-means

我有一个可以从下面的dict重建的数据帧。

数据框代表全球各个城市的23 statistics (X1-X23)。每个城市在数据框中占据一行,23个统计信息作为单独的列。

我的实际df有~6 million个城市,所以它的数据框很大。

我想做的是:

第1步:根据23 statistics (X1-X23)确定城市群。

第2步:鉴于第1步中已确定的群集,我想构建一个城市组合,以便:

a)从任何给定群集中选择的城市数量有限(每个群集的限制可能不同)

b)完全避免某些群集

c)对投资组合选择应用其他标准,以便最大限度地减少投资组合中城市之间恶劣天气的相关性,并最大限度地提高城市之间良好天气的相关性。

我的问题集是K for a K-means algo会非常大,但我不确定那个值是多少。

我一直在阅读有关群集的内容:

Cluster analysis in R: determine the optimal number of clusters

How do I determine k when using k-means clustering?

X-means: Extending K-means...

但是,很多文献对我来说都很陌生,需要几个月才能理解。我不是数据科学家,也没有时间参加机器学习课程。

此时我有数据框,现在我的拇指摆弄着。

如果您可以帮助我在实例中使用示例数据集在pandas中实现Steps#1 to Steps#2,我将不胜感激。

下面的字典可以通过pd.DataFrame(x)重建为数据框,其中x是下面的字典:

输出df.head()。to_dict('rec'):

[{'X1': 123.40000000000001,
  'X2': -67.900000000000006,
  'X3': 172.0,
  'X4': -2507.1999999999998,
  'X5': 80.0,
  'X6': 1692.0999999999999,
  'X7': 13.5,
  'X8': 136.30000000000001,
  'X9': -187.09999999999999,
  'X10': 50.0,
  'X11': -822.0,
  'X12': 13.0,
  'X13': 260.80000000000001,
  'X14': 14084.0,
  'X15': -944.89999999999998,
  'X16': 224.59999999999999,
  'X17': -23.100000000000001,
  'X18': -16.199999999999999,
  'X19': 1825.9000000000001,
  'X20': 710.70000000000005,
  'X21': -16.199999999999999,
  'X22': 1825.9000000000001,
  'X23': 66.0,
  'city': 'SFO'},
 {'X1': -359.69999999999999,
  'X2': -84.299999999999997,
  'X3': 86.0,
  'X4': -1894.4000000000001,
  'X5': 166.0,
  'X6': 882.39999999999998,
  'X7': -19.0,
  'X8': -133.30000000000001,
  'X9': -84.799999999999997,
  'X10': 27.0,
  'X11': -587.29999999999995,
  'X12': 36.0,
  'X13': 332.89999999999998,
  'X14': 825.20000000000005,
  'X15': -3182.5,
  'X16': -210.80000000000001,
  'X17': 87.400000000000006,
  'X18': -443.69999999999999,
  'X19': -3182.5,
  'X20': 51.899999999999999,
  'X21': -443.69999999999999,
  'X22': -722.89999999999998,
  'X23': -3182.5,
  'city': 'YYZ'},
 {'X1': -24.800000000000001,
  'X2': -34.299999999999997,
  'X3': 166.0,
  'X4': -2352.6999999999998,
  'X5': 87.0,
  'X6': 1941.3,
  'X7': 56.600000000000001,
  'X8': 120.2,
  'X9': -65.400000000000006,
  'X10': 44.0,
  'X11': -610.89999999999998,
  'X12': 19.0,
  'X13': 414.80000000000001,
  'X14': 4891.1999999999998,
  'X15': -2396.0999999999999,
  'X16': 181.59999999999999,
  'X17': 177.0,
  'X18': -92.900000000000006,
  'X19': -2396.0999999999999,
  'X20': 805.60000000000002,
  'X21': -92.900000000000006,
  'X22': -379.69999999999999,
  'X23': -2396.0999999999999,
  'city': 'DFW'},
 {'X1': -21.300000000000001,
  'X2': -47.399999999999999,
  'X3': 166.0,
  'X4': -2405.5999999999999,
  'X5': 85.0,
  'X6': 1836.8,
  'X7': 55.700000000000003,
  'X8': 130.80000000000001,
  'X9': -131.09999999999999,
  'X10': 47.0,
  'X11': -690.60000000000002,
  'X12': 16.0,
  'X13': 297.30000000000001,
  'X14': 5163.3999999999996,
  'X15': -2446.4000000000001,
  'X16': 182.30000000000001,
  'X17': 83.599999999999994,
  'X18': -36.0,
  'X19': -2446.4000000000001,
  'X20': 771.29999999999995,
  'X21': -36.0,
  'X22': -378.30000000000001,
  'X23': -2446.4000000000001,
  'city': 'PDX'},
 {'X1': -22.399999999999999,
  'X2': -9.0,
  'X3': 167.0,
  'X4': -2405.5999999999999,
  'X5': 86.0,
  'X6': 2297.9000000000001,
  'X7': 41.0,
  'X8': 109.7,
  'X9': 64.900000000000006,
  'X10': 42.0,
  'X11': -558.29999999999995,
  'X12': 21.0,
  'X13': 753.10000000000002,
  'X14': 5979.6999999999998,
  'X15': -2370.1999999999998,
  'X16': 187.40000000000001,
  'X17': 373.10000000000002,
  'X18': -224.30000000000001,
  'X19': -2370.1999999999998,
  'X20': 759.5,
  'X21': -224.30000000000001,
  'X22': -384.39999999999998,
  'X23': -2370.1999999999998,
  'city': 'EWR'}]

1 个答案:

答案 0 :(得分:2)

我不知道“进一步处理”是什么意思,但这里有一个非常简单的解释来帮助你入门。

1)将数据放入数据框(pandas)中,顶部(​​列标题)中的变量(x1-x23)和每行代表不同的城市(以便你的df.head()显示x1-x23为列标题)。

2)标准化变量

3)在使用Kmeans之前决定是否使用PCA

4)使用kmeans- scikit learn makes this part easy同时检查and this

5)尝试使用此silhouette analysis来选择要开始的群集数量

好的参考:
Hastie and Tibshirani book

Hastie and Tibshirani free course, but use R

Udacity,Coursera,EDX机器学习课程

编辑:忘记提及,在测试流程时不要使用整个数据集。使用更小的数据部分(例如100K个城市),这样处理时间就会少得多,直到你把所有事情做好。