请教大家,我想把一堆坐标点(坐标已知,经纬度精度为0.5°)中相邻(上下左右斜对角相邻的都算)的所有点全部归为一类,其他相邻的归为另一类,依次类推。不知大家有没有什么好的思路。
我目前已经尝试过K均值聚类和K中心聚类。存在两个问题:1、中心点数量需要自己定义;2、会把本来是相邻的点也分割成不同类别。

下面是坐标点样本:
78.75 31.25
78.75 33.75
100.25 38.75
100.75 38.25
100.25 38.25
99.25 38.25
100.75 37.75
100.25 37.75
99.75 37.75
99.25 37.75
103.25 37.25
102.25 37.25
101.25 37.25
99.75 37.25
99.25 37.25
98.75 37.25
98.75 36.75
97.25 36.75
96.75 36.25
96.25 35.75
94.25 35.25
93.75 35.25
84.25 35.25
83.75 35.25
81.25 35.25
81.25 34.75
80.75 34.75
80.25 34.75
81.75 34.25
81.25 34.25
80.75 34.25
80.25 34.25
80.75 33.75
79.75 33.75
79.25 33.75
103.75 33.25
103.25 33.25
103.75 32.75
103.25 32.75
102.75 32.75
103.25 32.25
102.25 32.25
79.25 31.75
78.75 31.75
112.75 39.25
111.25 39.25
113.75 38.75
111.25 38.75
114.25 38.25
110.75 38.25
110.25 38.25
110.25 37.75
109.75 37.75
110.25 37.25
109.25 37.25
108.25 37.25
107.75 37.25
101.75 37.25
108.75 36.75
108.25 36.75
107.75 36.75
107.25 36.75
103.25 36.75
102.75 36.75
102.25 36.75
108.75 36.25
107.75 36.25
104.25 36.25
103.75 36.25
107.25 35.75
103.25 35.75
104.25 35.25
104.75 34.75
109.25 34.25
108.75 34.25
104.25 31.75
103.75 31.25
120.25 40.25
74.75 37.75
74.75 38.25
86.75 42.75
87.75 42.25
87.25 42.25
85.75 42.25
85.25 42.25
84.75 42.25
84.25 42.25
83.75 42.25
83.25 42.25
108.25 41.75
107.75 41.75
90.75 41.75
90.25 41.75
88.25 41.75
87.25 41.75
86.75 41.75
86.25 41.75
85.75 41.75
85.25 41.75
84.75 41.75
84.25 41.75
83.75 41.75
83.25 41.75
81.75 41.75
109.25 41.25
107.75 41.25
90.75 41.25
90.25 41.25
89.75 41.25
89.25 41.25
88.25 41.25
87.75 41.25
87.25 41.25
86.75 41.25
86.25 41.25
85.75 41.25
84.75 41.25
84.25 41.25
83.75 41.25
83.25 41.25
82.25 41.25
81.75 41.25
81.25 41.25
80.25 41.25
79.25 41.25
109.25 40.75
108.75 40.75
107.25 40.75
103.75 40.75
103.25 40.75
91.75 40.75
90.25 40.75
89.75 40.75
89.25 40.75
88.25 40.75
87.25 40.75
86.75 40.75
86.25 40.75
85.75 40.75
85.25 40.75
84.75 40.75
84.25 40.75
82.25 40.75
81.75 40.75
81.25 40.75
80.75 40.75
80.25 40.75
79.75 40.75
79.25 40.75
103.75 40.25
103.25 40.25
91.25 40.25
88.25 40.25
87.75 40.25
87.25 40.25
86.75 40.25
85.75 40.25
85.25 40.25
84.75 40.25
82.25 40.25
81.75 40.25
81.25 40.25
80.75 40.25
81.25 38.25
79.75 38.25
77.75 38.25
77.25 38.25
76.75 38.25
76.25 38.25
75.25 38.25
108.25 37.75
104.75 37.75
104.25 37.75
103.75 37.75
103.25 37.75
102.75 37.75
101.75 37.75
101.25 37.75
88.25 37.75
87.75 37.75
82.75 37.75
82.25 37.75
81.75 37.75
81.25 37.75
79.75 37.75
78.75 37.75
77.75 37.75
77.25 37.75
76.75 37.75
76.25 37.75
75.75 37.75
75.25 37.75
103.75 37.25
82.75 37.25
82.25 37.25
80.75 37.25
79.75 37.25
79.25 37.25
78.75 37.25
78.25 37.25
77.75 37.25
77.25 37.25
76.75 37.25
76.25 37.25
75.25 37.25
85.25 36.75
84.75 36.75
80.75 36.75
79.75 36.75
79.25 36.75
78.75 36.75
78.25 36.75
77.75 36.75
76.25 36.75
75.75 36.75
83.25 36.25
82.75 36.25
82.25 36.25
78.75 36.25
78.25 36.25
77.75 36.25
76.75 36.25
82.25 35.75
81.75 35.75
80.25 35.75
79.25 35.75
78.75 35.75
78.25 35.75
76.75 35.75
80.25 35.25
79.75 34.75
79.25 34.75
116.75 47.75
116.25 47.75
118.25 44.75
116.75 44.75
118.25 44.25
117.75 44.25
116.75 44.25
116.25 44.25
115.75 44.25
115.25 44.25
113.25 44.25
117.25 43.75
116.25 43.75
115.75 43.75
114.75 43.75
113.75 43.75
112.75 43.75
117.25 43.25
116.75 43.25

tctcab 今天仔细研究了一下版主推荐的这个方法,完美解决我的问题。感谢之于也感慨,我自己琢磨的半个月,做了半个月的无用功,大牛一句话就解决了。给版主点赞,我也要好好向各位大牛学习

    tctcab 再次请教版主最后一个问题。
    如本话题所描述的,我有400个坐标点,是2000年的数据。利用版主推荐的DBSCAN包,分成了10“堆”不同的区域点。然后1999年,也有同样不同类别的点,1998年也有,依次类推(每年的坐标数目都不一定相同,但具体数量是已知的)。

    我现在想实现的目标是:如果2000年已分成的10“堆”点中某一“堆”,与1999年中某一“堆”数据点,存在重叠(或者重叠比例最大的那一“堆”)则把他们又归为一类。最后,按时间顺序,把所有存在重叠(或重叠比列最大的)且年份前后相邻的“堆”,再次划分为一类。最好能统计出,新识别出的每一类,各自延续了多少年。

    不知道版主有没有什么思路,或者相关的包可以推荐的。

      Barton

      看你的描述有点复杂,如果能提供更多背景信息就好了

      目前看来的话,我觉得可以把所有年份的数据拿到一起来聚类,在所有坐标点的分类都清楚的情况下再去做时序分析

        tctcab 无法插入图片着实苦恼。只能用文字描述一下我的数据结构。整个矩阵共有4列,具体结构如下:
        Year Longitude Latitude cluster
        2000 108.25 41.75 5
        2000 107.75 41.75 5
        2000 90.75 41.75 6
        2000 90.25 41.75 6
        2000 88.25 41.75 4
        ……
        1999 87.25 41.75 4
        1999 86.75 41.75 4
        1999 86.25 41.75 4
        1999 85.75 41.75 4
        1999 85.25 41.75 4
        ……
        每一年的坐标点有差不多500个,总计是从1951-2000年的数据。
        目前,我已经通过DBSCAN,分别把每一年的坐标点聚类分组,不同组的点用“cluster”区别开。换句话说,2000年的500多个点,经过DBSCAN聚类,被分成了11个不同的类别(离群点已经删除),矩阵最后一列的“cluster”就是类别编号,500多个点根据聚类结果分别编号1-11。1999-1951年的数据操作同2000年,但每年的类别总数不一定相同,1999年有可能有15个类别,1997年的数据有可能有7个类别。
        然后,现在我想要做的是:把2000年中cluster等于1的所有点,看成一个类别1。从1999年的15个(假定)类别中,识别出一个类别,与2000年的整类别1有部分点重合,或者重合的点数是1999年15个类别中最大的,假定是1999年类别3。这样就把2000年的类别1和1999年的类别3,归类为同一个事件1,接着再找出1998年的类别中的一个,如果1998年中没有类别与1999年的类别3重合。则事件1就定义为历时两年(1999-2000).按照这个思路把每一年所有的类别都分类成不同的事件,并统计出每个事件的起止年份。

        不知道这样描述是否会清楚一点,如果能发送图片,一张图版主应该就会明白。

          Barton
          如何贴图看置顶,
          我的建议上面已经说了,把五十年的点放在一起做一次聚类,这样你不需要重新计算不同年份之间的点的分类的对应关系了。

            看上去要用视觉计算里面的目标追踪,但是这么复杂的过程是不是自己编辑一下就好了,

              Barton GIS最常用的 clustering的方法就是 dbscan (基于密度)和 kmeans(基于最小组内方差,组间最大方差)。

              这两种方法在实际过程中通常要用其他方法来辅助决定超参数。

              kmeans 的 k,通常可以用 canopy 算法来大致估计。

              调参数的过程比较痛苦,这类问题往往没有直接的 groud truth,但是目前没有更好的方法。

              tctcab 感谢版主的帮助,我尝试过这个建议,将所有年份的数据全部放在一起聚类有两个问题,一个是计算机内存远远不够(换好电脑依然不够);仅用部分数据点进行试验发现整体聚类的效果远不如逐年聚类的效果

              legion 请问能否说的更详细一点呢?完全没有接触过这个概念

              tctcab
              谢谢分享。
              没用过这个clustering method。DBScan适合每个point有权重的数据吗?
              谢谢。

                tctcab 版主您好。再次请教
                根据您之前的指导,目前我已按照您的思路把所有数据放在一起进行聚类分析。
                得到的数据如下(数据截选所有类别中的某一类)
                Year X Y
                1950 86.02 40.81
                1950 76.98 38.70
                1951 83.16 40.54
                1951 89.95 41.60
                1951 76.66 38.69
                1952 81.01 39.67
                1953 81.04 39.46
                1954 82.30 41.33
                1954 84.75 41.75
                1954 83.55 38.90
                1954 77.31 38.69
                1954 81.05 38.15
                1955 83.61 41.96
                1955 81.61 41.11
                1955 83.83 39.08
                1955 77.25 38.75
                1955 80.65 38.15
                1957 79.38 39.75
                1958 83.50 41.50
                1959 82.84 41.34
                1960 90.50 42.00
                1960 76.72 39.15
                1960 79.58 39.58
                1962 87.82 39.49
                1964 85.06 41.62
                1967 85.25 41.49
                1967 76.25 39.92
                1967 77.39 38.75
                1968 85.51 41.36
                1969 85.92 41.14
                1969 76.75 39.45
                1970 83.33 40.58
                1971 83.69 40.28
                1972 87.12 42.21
                1972 79.08 39.92
                1972 76.46 39.25
                1972 83.25 39.08
                1972 81.50 37.00
                1973 76.04 39.13
                1973 84.64 40.82
                1974 75.84 39.43
                1975 76.53 39.00
                1976 84.79 41.89
                1977 84.53 41.92
                1978 79.54 38.63
                1979 83.58 40.25
                1980 83.03 39.63
                1981 76.20 38.62
                1981 79.95 37.05
                1982 75.58 38.88
                1984 81.19 40.39
                1984 83.08 39.08
                1985 80.73 38.64
                1986 85.51 40.44
                1987 83.50 41.63
                1987 80.58 40.42
                1987 76.62 39.05
                1988 87.25 41.08
                1988 76.75 39.20
                1989 83.35 41.75
                1990 78.89 39.29
                1990 87.45 41.05
                1991 87.45 41.05
                1992 83.86 41.86
                1992 87.75 40.68
                1992 81.25 40.75
                1992 79.14 39.58
                1992 76.58 39.75
                1993 79.45 39.35
                1994 85.00 40.96
                1994 79.25 39.03
                1995 80.48 39.78
                1995 86.45 40.85
                1995 83.38 38.63
                1996 84.46 41.38
                1996 81.00 40.50
                1996 79.89 38.25
                1997 78.92 38.97
                1997 86.39 40.89
                1998 83.33 39.29
                1999 76.41 38.51
                1999 87.00 41.00
                1999 81.08 40.25
                1999 79.70 38.25
                2000 78.07 38.77
                2000 85.99 41.15
                2000 90.03 41.19
                2000 88.36 38.31
                2000 82.25 37.93
                然后现在的问题是:想请教版主如何简便的提取出连续的时段。例如1993-1999,1995-2000,1964-1971等。如上表所示,当遇到年份相同的不同坐标点,就把距离最近的且前后相邻的点看成连续时段。同时,识别出各连续时段的起止年份。

                最后一步了,望版主指导,不胜感激

                  Barton

                  有意思的问题,查到了这个答案
                  不过只是相近,只能提取第一个序列,所以自己改了改, 现在可以多个连续年份的时间段了。
                  思路跟上面的答案类似,diff() 查出相邻元素的差,差值为1就表示相邻元素连续,然后提取即可。

                  代码:

                  mydate = c(1950L, 1950L, 1951L, 1951L, 1951L, 1952L, 1953L, 1954L, 1954L, 
                  1954L, 1954L, 1954L, 1955L, 1955L, 1955L, 1955L, 1955L, 1957L, 
                  1958L, 1959L, 1960L, 1960L, 1960L, 1962L, 1964L, 1967L, 1967L, 
                  1967L, 1968L, 1969L, 1969L, 1970L, 1971L, 1972L, 1972L, 1972L, 
                  1972L, 1972L, 1973L, 1973L, 1974L, 1975L, 1976L, 1977L, 1978L, 
                  1979L, 1980L, 1981L, 1981L, 1982L, 1984L, 1984L, 1985L, 1986L, 
                  1987L, 1987L, 1987L, 1988L, 1988L, 1989L, 1990L, 1990L, 1991L, 
                  1992L, 1992L, 1992L, 1992L, 1992L, 1993L, 1994L, 1994L, 1995L, 
                  1995L, 1995L, 1996L, 1996L, 1996L, 1997L, 1997L, 1998L, 1999L, 
                  1999L, 1999L, 1999L, 2000L, 2000L, 2000L, 2000L, 2000L)
                  
                  
                  get_start_ed = function(vdate){
                    vdateuni = unique(sort(vdate)) # combine adjacent years and sort
                    mydiff = diff(vdateuni) # difference between adjacent elements
                    myrle = rle(mydiff) # run length encoding
                    
                    # get sequence start / end
                    # + 1 to include the next adjacent element
                    ed = cumsum(myrle$lengths) + 1
                    start = c(1,ed)[1:length(ed)]
                    
                    
                    # extract sequences based on start and end.
                    df = data.frame(s = start, e = ed, v = myrle$values, l = myrle$lengths)
                    dfseqs = df[which(df$v == 1),]
                    sequences = lapply(1:nrow(dfseqs), function(i){
                      return(vdateuni[dfseqs$s[i]: (dfseqs$e[i])])
                  })
                    return(sequences)
                  }
                  
                  unique(sort(mydate))
                  #>  [1] 1950 1951 1952 1953 1954 1955 1957 1958 1959 1960 1962 1964 1967 1968
                  #> [15] 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982
                  #> [29] 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997
                  #> [43] 1998 1999 2000
                  
                  # results
                  get_start_ed(mydate)
                  #> [[1]]
                  #> [1] 1950 1951 1952 1953 1954 1955
                  #> 
                  #> [[2]]
                  #> [1] 1957 1958 1959 1960
                  #> 
                  #> [[3]]
                  #>  [1] 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980
                  #> [15] 1981 1982
                  #> 
                  #> [[4]]
                  #>  [1] 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997
                  #> [15] 1998 1999 2000

                  <sup>Created on 2019-01-03 by the reprex package (v0.2.1)</sup>

                    MGC

                    啊我没试过,不了解,不过试试无妨。

                    tctcab 首先请教版主一个很简单的题外问题,2000L,后面的L有啥意义嘛?
                    感觉已经很接近了
                    版主用unique()把重复的年份直接删除了。我想把重复的年份也保存下来
                    为此,我把unique()这个函数删除了,但是结果还是差一点意思,不知道版主能否改进一点

                      Barton
                      第一个问题, 看这里,基本上就是告诉R“这是个长整型数”。
                      其实加不加都可以,这里有L是因为我dput()了一下时间那一列,输出就有L。

                      第二个问题, 重复的年份保存下来的话,如果只是要删除非连续年份的话那就有比上面代码更简单的做法,除去读取,实际应该就一行代码:

                      
                      df = data.table::fread(
                      "1950   86.02 40.81 
                      1950    76.98 38.70 
                      1951    83.16 40.54 
                      1951    89.95 41.60 
                      1951    76.66 38.69 
                      1952    81.01 39.67 
                      1953    81.04 39.46 
                      1954    82.30 41.33 
                      1954    84.75 41.75 
                      1954    83.55 38.90 
                      1954    77.31 38.69 
                      1954    81.05 38.15 
                      1955    83.61 41.96 
                      1955    81.61 41.11 
                      1955    83.83 39.08 
                      1955    77.25 38.75 
                      1955    80.65 38.15 
                      1957    79.38 39.75 
                      1958    83.50 41.50 
                      1959    82.84 41.34 
                      1960    90.50 42.00 
                      1960    76.72 39.15 
                      1960    79.58 39.58 
                      1962    87.82 39.49 
                      1964    85.06 41.62 
                      1967    85.25 41.49 
                      1967    76.25 39.92 
                      1967    77.39 38.75 
                      1968    85.51 41.36 
                      1969    85.92 41.14 
                      1969    76.75 39.45 
                      1970    83.33 40.58 
                      1971    83.69 40.28 
                      1972    87.12 42.21 
                      1972    79.08 39.92 
                      1972    76.46 39.25 
                      1972    83.25 39.08 
                      1972    81.50 37.00 
                      1973    76.04 39.13 
                      1973    84.64 40.82 
                      1974    75.84 39.43 
                      1975    76.53 39.00 
                      1976    84.79 41.89 
                      1977    84.53 41.92 
                      1978    79.54 38.63 
                      1979    83.58 40.25 
                      1980    83.03 39.63 
                      1981    76.20 38.62 
                      1981    79.95 37.05 
                      1982    75.58 38.88 
                      1984    81.19 40.39 
                      1984    83.08 39.08 
                      1985    80.73 38.64 
                      1986    85.51 40.44 
                      1987    83.50 41.63 
                      1987    80.58 40.42 
                      1987    76.62 39.05 
                      1988    87.25 41.08 
                      1988    76.75 39.20 
                      1989    83.35 41.75 
                      1990    78.89 39.29 
                      1990    87.45 41.05 
                      1991    87.45 41.05 
                      1992    83.86 41.86 
                      1992    87.75 40.68 
                      1992    81.25 40.75 
                      1992    79.14 39.58 
                      1992    76.58 39.75 
                      1993    79.45 39.35 
                      1994    85.00 40.96 
                      1994    79.25 39.03 
                      1995    80.48 39.78 
                      1995    86.45 40.85 
                      1995    83.38 38.63 
                      1996    84.46 41.38 
                      1996    81.00 40.50 
                      1996    79.89 38.25 
                      1997    78.92 38.97 
                      1997    86.39 40.89 
                      1998    83.33 39.29 
                      1999    76.41 38.51 
                      1999    87.00 41.00 
                      1999    81.08 40.25 
                      1999    79.70 38.25 
                      2000    78.07 38.77 
                      2000    85.99 41.15 
                      2000    90.03 41.19 
                      2000    88.36 38.31 
                      2000    82.25 37.93"
                      )
                      
                      
                      df.filt =df[-(which(diff(df$V1) > 1) + 1),]
                      
                      df.filt
                      #>       V1          V2
                      #>  1: 1950 86.02 40.81
                      #>  2: 1950 76.98 38.70
                      #>  3: 1951 83.16 40.54
                      #>  4: 1951 89.95 41.60
                      #>  5: 1951 76.66 38.69
                      #>  6: 1952 81.01 39.67
                      #>  7: 1953 81.04 39.46
                      #>  8: 1954 82.30 41.33
                      #>  9: 1954 84.75 41.75
                      #> 10: 1954 83.55 38.90
                      #> 11: 1954 77.31 38.69
                      #> 12: 1954 81.05 38.15
                      #> 13: 1955 83.61 41.96
                      #> 14: 1955 81.61 41.11
                      #> 15: 1955 83.83 39.08
                      #> 16: 1955 77.25 38.75
                      #> 17: 1955 80.65 38.15
                      #> 18: 1958 83.50 41.50
                      #> 19: 1959 82.84 41.34
                      #> 20: 1960 90.50 42.00
                      #> 21: 1960 76.72 39.15
                      #> 22: 1960 79.58 39.58
                      #> 23: 1967 76.25 39.92
                      #> 24: 1967 77.39 38.75
                      #> 25: 1968 85.51 41.36
                      #> 26: 1969 85.92 41.14
                      #> 27: 1969 76.75 39.45
                      #> 28: 1970 83.33 40.58
                      #> 29: 1971 83.69 40.28
                      #> 30: 1972 87.12 42.21
                      #> 31: 1972 79.08 39.92
                      #> 32: 1972 76.46 39.25
                      #> 33: 1972 83.25 39.08
                      #> 34: 1972 81.50 37.00
                      #> 35: 1973 76.04 39.13
                      #> 36: 1973 84.64 40.82
                      #> 37: 1974 75.84 39.43
                      #> 38: 1975 76.53 39.00
                      #> 39: 1976 84.79 41.89
                      #> 40: 1977 84.53 41.92
                      #> 41: 1978 79.54 38.63
                      #> 42: 1979 83.58 40.25
                      #> 43: 1980 83.03 39.63
                      #> 44: 1981 76.20 38.62
                      #> 45: 1981 79.95 37.05
                      #> 46: 1982 75.58 38.88
                      #> 47: 1984 83.08 39.08
                      #> 48: 1985 80.73 38.64
                      #> 49: 1986 85.51 40.44
                      #> 50: 1987 83.50 41.63
                      #> 51: 1987 80.58 40.42
                      #> 52: 1987 76.62 39.05
                      #> 53: 1988 87.25 41.08
                      #> 54: 1988 76.75 39.20
                      #> 55: 1989 83.35 41.75
                      #> 56: 1990 78.89 39.29
                      #> 57: 1990 87.45 41.05
                      #> 58: 1991 87.45 41.05
                      #> 59: 1992 83.86 41.86
                      #> 60: 1992 87.75 40.68
                      #> 61: 1992 81.25 40.75
                      #> 62: 1992 79.14 39.58
                      #> 63: 1992 76.58 39.75
                      #> 64: 1993 79.45 39.35
                      #> 65: 1994 85.00 40.96
                      #> 66: 1994 79.25 39.03
                      #> 67: 1995 80.48 39.78
                      #> 68: 1995 86.45 40.85
                      #> 69: 1995 83.38 38.63
                      #> 70: 1996 84.46 41.38
                      #> 71: 1996 81.00 40.50
                      #> 72: 1996 79.89 38.25
                      #> 73: 1997 78.92 38.97
                      #> 74: 1997 86.39 40.89
                      #> 75: 1998 83.33 39.29
                      #> 76: 1999 76.41 38.51
                      #> 77: 1999 87.00 41.00
                      #> 78: 1999 81.08 40.25
                      #> 79: 1999 79.70 38.25
                      #> 80: 2000 78.07 38.77
                      #> 81: 2000 85.99 41.15
                      #> 82: 2000 90.03 41.19
                      #> 83: 2000 88.36 38.31
                      #> 84: 2000 82.25 37.93
                      #>       V1          V2

                      <sup>Created on 2019-01-03 by the reprex package (v0.2.1)</sup>

                        tctcab 第二个问题可能我没说清楚。我感觉主体还是在get_start_ed这个函数里面改动
                        版主之前的get_start_ed()这个函数,最后的结果是:
                        1:1950,1951
                        2:1951,1952,1953,1954
                        3:1954,1955
                        4:1957,1958,1959,1960
                        ……
                        而我想最终识别出来的结果是
                        1:1950,1951,1952,1953,1954,1955
                        2:1950,1951
                        3:1954,1955
                        4:1954,1955
                        5:1954,1955
                        6:1954,1955
                        7:1957,1958,1959,1960
                        8:1967,1968,1969
                        ……
                        也就是当存在多个并列的连续时段时(并列时段可以是包含或者相交的关系),将他们都识别出来。并统计起止年份

                          Barton

                          这包含或者相交的描述很让人困惑啊,加上预期输出结果还是看不懂,‘

                          比如, 假设数据为
                          1950,1951,1952
                          那么是不是要穷举输出

                          1950,1951
                          1951,1952
                          1950,1951,1952

                          这样的组合?