【发布时间】:2017-01-01 03:41:36
【问题描述】:
我有一个可以从下面的字典重建的数据框。
数据框代表全球各个城市的23 statistics (X1-X23)。每个城市在数据框中占据一行,其中 23 个统计数据作为单独的列。
我的实际 df 有 ~6 million 城市,所以它是一个大数据框。
我想做的是:
步骤#1:根据23 statistics (X1-X23) 识别城市集群。
Step#2:鉴于在Step#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,我将不胜感激。
下面的dict可以通过pd.DataFrame(x)重构为数据帧,其中x是下面的dict:
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'}]
【问题讨论】:
-
您应该在CrossValidated 上发布这个问题,因为这实际上不是关于编程的问题,而是关于如何进行一般集群的问题。当然,请事先进行搜索 --- 我很确定以前有人问过这个问题。
-
有趣的是,在 CrossValidated 上的搜索会产生一些最终提到 StackOverflow 的帖子 --- 特别是 this answer。
-
您也可以在Data Science SE 上提问。尽管有一些方法可以确定 k 的最佳数量,但它们都有自己的标准,这些标准可能不符合您的需求。在实践中,人们通常会尝试不同的 k 值并自行判断结果。
-
@ayhan:我什至不知道 Data Science SE...谢谢指点!
-
@AlbertoGarcia-Raboso 它仍处于测试阶段,但讨论非常好。