我有一个可以从下面的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?
但是,很多文献对我来说都很陌生,需要几个月才能理解。我不是数据科学家,也没有时间参加机器学习课程。
此时我有数据框,现在我的拇指摆弄着。
如果您可以帮助我在实例中使用示例数据集在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'}]
答案 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个城市),这样处理时间就会少得多,直到你把所有事情做好。