R语言笔记④——数值摘要、缺失值、数据标准化、线性回归、多元线性回归和主成分分析

数据摘要

反映集中程度的函数

下面是R中反映中程度的函数

  • mean():均值
  • median():中位数
  • quantile():分位数
> a <- c(1,5,6,9,7,5,6,7,2,6)
> mean(a)
[1] 5.4
> median(a)
[1] 6
> quantile(a)
  0%  25%  50%  75% 100% 
1.00 5.00 6.00 6.75 9.00 

反映数据分散程度的函数

下面是R中反映数据分散程度的函数

  • range():极值
  • var():反差
  • sd():标准差
> a <- c(1,5,6,9,7,5,6,7,2,6)
> range(a)
[1] 1 9
> var(a)
[1] 5.6
> sd(a)
[1] 2.366432

数值摘要表

通过summary()函数我们可以得到一张表,从这张表中我们可以直接得到数据的极值、分位数、中位数、均值。

> summary(a)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    5.00    6.00    5.40    6.75    9.00 

缺失值

NA缺失值

在R语言中NA表示缺失值,也就是不存在的值,或者说未知的值。

任何值与NA计算结果都是NA

> 1+NA
[1] NA
> 1*NA
[1] NA

在如果我们想将NA排除在外,可以将函数中的na.rm属性设置为TRUE

> a <- c(NA,1:49)
> a
 [1] NA  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
[39] 38 39 40 41 42 43 44 45 46 47 48 49
> sum(a)
[1] NA
> mean(a)
[1] NA
> sum(a,na.rm = T)
[1] 1225
> mean(a,na.rm = T)
[1] 25

可以通用is.na函数查找缺失的值

> is.na(a)
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[20] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[39] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

我们可以通过complete.cases()函数找到缺失的值

> a <- matrix(c(1:6,NA,8,9),nrow = 3)
> a
     [,1] [,2] [,3]
[1,]    1    4   NA
[2,]    2    5    8
[3,]    3    6    9
> complete.cases(a)
[1] FALSE  TRUE  TRUE
> b <- c(1,6,NA)
> complete.cases(b)
[1]  TRUE  TRUE FALSE

可以通过下面的方式把缺失的行去除

> a[complete.cases(a)]
[1] 2 3 5 6 8 9
> a[complete.cases(a),]
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9

还可以直接通过na.omit()函数得到去除缺失值后的数据

> na.omit(a)
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
attr(,"na.action")
[1] 1
attr(,"class")
[1] "omit"

下面是R语言中缺失值的解决方法
在这里插入图片描述

其他缺失值

  1. 缺失数据NaN,代表不可能的值;
  2. Inf表示无穷,分为正无穷Inf和负无穷Inf,代表无穷大或者无穷小。

下面是上面两种缺失值与NA缺失值的区别:

  1. NA是存在的值,但是不知道是多少;
  2. NaN是不存在的;
  3. Inf存在,是无穷大,-Inf是无穷小,表示的是不可能的值。

下面就是典型的NaN和Inf值

> 1/0
[1] Inf
> -1/0
[1] -Inf
> 0/0
[1] NaN

我们可以用is.infiniteis.nan函数判断这两种缺失值

> is.infinite(1/0)
[1] TRUE
> is.nan(0/0)
[1] TRUE

缺失值填充

一般通过如下的步骤实现缺失值的填充:

  1. 计算相关性
  2. 构建回归模型(lm(y~x))
  3. 带入回归模型预测

数据标准化

数据分析时经常需要数据标准化处理,常见的比如:回归、主成分、因子分析等,在神经网络、聚类分析中也会经常用到数据标准化预处理,甚至感觉一切的数据分析好像都需要标准化预处理。

数据标准化的作用主要时消除变量间的量纲关系,从而使数据具有可比性。

最大-最小规范化(线性变换)

y = x − m i n ( x ) m a x ( x ) − m i n ( x ) y=\frac{x-min(x)}{max(x)-min(x)}y=max(x)min(x)xmin(x)
这样标准化后的数据范围为0<=y<=1,可以取值0和1,分别是当x取最值的时候。这是一个线性变换,因为它本身就是一个线性关系式。

z-score规范化

y = x − x ˉ σ x y=\frac{x-\bar{x}}{\sigma\scriptscriptstyle x}y=σxxxˉ
这是用每个数据首先减去均值再除以标准差,处理后序列正负值得分布反映了数据得峰度偏度。比如:处理后序列负值居多,表明数据小于均值较多,那么均值水平就是为数不多得几个异常较大的值撑起来的。这种方法最常见,用的最多。

对数Logistic模式

y = 1 1 + e − x y=\frac{1}{1+e^{-x}}y=1+ex1

线性回归

线性拟合的目的在于找出两个变量之间的线性关系,进而通过一个变量预测另外一个变量。下面是线性回归后方程的一般形式。
y = α + β x + ε y=\alpha+\beta x+\varepsilony=α+βx+ε

再R语言中我们线性回归一般会有如下几个步骤

  1. 标准化(scale)
  2. 线性拟合(lm)

下面是一个简单示例,数据集是iris中的Sepal.Length和Petal.Width,首先是使用scale函数将这两列数据归一化。

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> sl <- scale(iris[,1])
> pw <- scale(iris[,4])

接着将这两列归一化的数据使用lm函数实现线性拟合,拟合完之后通过summary函数检测拟合的线性回归模型,从下面的分析中的Coefficients中我们发现常数项的Pr是1,这种级别是不合格的,Estimate更是一个过于小的数值,所以模型的常数项是不合格的,我们完全可以减去这个常数项。

> model <- lm(pw~sl)
> summary(model)

Call:
lm(formula = pw ~ sl)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.26825 -0.47146 -0.02345  0.37243  1.61799 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.403e-15  4.713e-02     0.0        1    
sl          8.179e-01  4.729e-02    17.3   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.5772 on 148 degrees of freedom
Multiple R-squared:  0.669,	Adjusted R-squared:  0.6668 
F-statistic: 299.2 on 1 and 148 DF,  p-value: < 2.2e-16

下面是去除常数项的模型,我们发现这个模型就已经合格了

> model <- lm(pw~sl-1)
> summary(model)

Call:
lm(formula = pw ~ sl - 1)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.26825 -0.47146 -0.02345  0.37243  1.61799 

Coefficients:
   Estimate Std. Error t value Pr(>|t|)    
sl  0.81794    0.04713   17.36   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.5753 on 149 degrees of freedom
Multiple R-squared:  0.669,	Adjusted R-squared:  0.6668 
F-statistic: 301.2 on 1 and 149 DF,  p-value: < 2.2e-16

所以iris中Sepal.Length和Petal.Width的线性关系大致如下
y = 0.81794 x y=0.81794 xy=0.81794x
我们可以将iris中Sepal.Length和Petal.Width的散点图发出来检查一下

> plot(pw,sl)

在这里插入图片描述

多元线性回归

对于一组变量数据,如果我们不管是通过画散点图还是其他方法,知道了一个变量与其他变量呈很强线性关系。我们就需要知道,到底是什么样的关系,关系系数是多少。

通过是用经典的最小二乘法,因为这样算出的缺失是最优的系数,可以保证残差平方和最小的优化目标。

下面就是多元线性回归后的标准模型
y = β 0 + β 1 x 1 + . . . + β k x k + ε y=\beta_0+\beta_1 x_1 +...+\beta_k x_k +\varepsilony=β0+β1x1+...+βkxk+ε
至于在R语言中多元线性回归的步骤一般如下:

  1. 数据标准化,scale()函数;
  2. 模型拟合,lm()函数;
  3. 残差图,plot()函数;
  4. 得出结果。

下面是对于R提供的iris数据集进行多元线性回归,首先还是通过scale函数实现数据标准化

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> sl <- scale(iris[,1])
> sw <- scale(iris[,2])
> pl <- scale(iris[,3])
> pw <- scale(iris[,4])

接着通过lm函数进行线性拟合,通过summary分析拟合后的函数,同样发现常数项的pr值是不合格的,于是可以去除这个常数项

> model <- lm(sl~sw+pl+pw)
> summary(model)

Call:
lm(formula = sl ~ sw + pl + pw)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.00012 -0.26555  0.02264  0.23802  1.02129 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.176e-16  3.102e-02   0.000        1    
sw           3.426e-01  3.508e-02   9.765  < 2e-16 ***
pl           1.512e+00  1.209e-01  12.502  < 2e-16 ***
pw          -5.122e-01  1.174e-01  -4.363 2.41e-05 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.3799 on 146 degrees of freedom
Multiple R-squared:  0.8586,	Adjusted R-squared:  0.8557 
F-statistic: 295.5 on 3 and 146 DF,  p-value: < 2.2e-16

去除常数项后的模型就合格了,其中R-squared也是达到了0.8586,证明拟合的还算不错

> model <- lm(sl~sw+pl+pw-1)
> summary(model)

Call:
lm(formula = sl ~ sw + pl + pw - 1)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.00012 -0.26555  0.02264  0.23802  1.02129 

Coefficients:
   Estimate Std. Error t value Pr(>|t|)    
sw  0.34258    0.03496   9.799  < 2e-16 ***
pl  1.51175    0.12050  12.545  < 2e-16 ***
pw -0.51224    0.11701  -4.378 2.26e-05 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 0.3786 on 147 degrees of freedom
Multiple R-squared:  0.8586,	Adjusted R-squared:  0.8557 
F-statistic: 297.6 on 3 and 147 DF,  p-value: < 2.2e-16

最后通过plot函数画出残差图,其中第二参数‘1’就是指定了图的类型是残差图,从下面的图中可以看出136、107、85这三个异常点。

plot(model,1,col = 'red')

在这里插入图片描述
通过下面的方式画出Q-Q图

plot(model,2,col = 'red')

在这里插入图片描述
那么最后我们就可以求出线性模型如下
s l = 0.34258 s w + 1.51175 p l − 0.51224 p w sl=0.34258sw+1.51175pl-0.51224pwsl=0.34258sw+1.51175pl0.51224pw

主成分分析

在数据分析中,我们常常会遇到高维的数据集,这时就需要降维方法,它要求被分析的变量之间具有相关性,否则就是去主成分分析的原有意义呢。

比如在学生成绩看综合评估、地区发展综合评估、运动员综合能力评估等,往往会有许多评估指标,这时候就需要进行数据降维,用较少的几个新变量代替原本的变量而尽可能保留原有的信息,计算出综合得分,进而给出综合评价结果。

主成分分析步骤如下:

  1. 构建原始数据矩阵;
  2. 消除量纲——数据标准化;
  3. 建立协方差矩阵(就是相关系数矩阵);
  4. 求出特征值、特征向量;
  5. 根据方差、累积方差贡献率确定主成分个数;
  6. 求出综合得分,给出现实意义的解释。

下面通过R提供的数据集进行了主成分分析的示例,分析的数据集是swiss数据集,这个数据集包含了瑞士的47个城市在6个评价指标上的数据。

首先还是标准化数据

> head(swiss)
             Fertility Agriculture Examination Education Catholic Infant.Mortality
Courtelary        80.2        17.0          15        12     9.96             22.2
Delemont          83.1        45.1           6         9    84.84             22.2
Franches-Mnt      92.5        39.7           5         5    93.40             20.2
Moutier           85.8        36.5          12         7    33.77             20.3
Neuveville        76.9        43.5          17        15     5.16             20.6
Porrentruy        76.1        35.3           9         7    90.57             26.6
> sc <- scale(swiss)
> head(sc)
             Fertility Agriculture Examination  Education   Catholic Infant.Mortality
Courtelary   0.8051305  -1.4820682 -0.18668632  0.1062125 -0.7477267       0.77503669
Delemont     1.0372847  -0.2447942 -1.31480509 -0.2057867  1.0477479       0.77503669
Franches-Mnt 1.7897846  -0.4825622 -1.44015162 -0.6217858  1.2529998       0.08838778
Moutier      1.2534283  -0.6234617 -0.56272591 -0.4137863 -0.1768099       0.12272023
Neuveville   0.5409551  -0.3152440  0.06400674  0.4182118 -0.8628212       0.22571757
Porrentruy   0.4769125  -0.6762990 -0.93876550 -0.4137863  1.1851420       2.28566429

接着通过princomp函数进行主成分分析

> pri <- princomp(sc,cor = TRUE)
> summary(pri,loadings = TRUE)
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4     Comp.5     Comp.6
Standard deviation     1.7887865 1.0900955 0.9206573 0.66251693 0.45225403 0.34765292
Proportion of Variance 0.5332928 0.1980514 0.1412683 0.07315478 0.03408895 0.02014376
Cumulative Proportion  0.5332928 0.7313442 0.8726125 0.94576729 0.97985624 1.00000000

Loadings:
                 Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
Fertility         0.457  0.322  0.174  0.536  0.383  0.473
Agriculture       0.424 -0.412        -0.643  0.375  0.309
Examination      -0.510  0.125                0.814 -0.224
Education        -0.454  0.179 -0.532                0.681
Catholic          0.350  0.146 -0.807         0.183 -0.402
Infant.Mortality  0.150  0.811  0.160 -0.527 -0.105 

通过screeplot函数画出碎石图确定主成分个数

screeplot(pri,type = 'line')

在这里插入图片描述
通过predict可以查看每一个城市在每一个主成分上的得分

> predict(pri)
                  Comp.1      Comp.2     Comp.3       Comp.4      Comp.5      Comp.6
Courtelary   -0.36355156  1.39942043  0.8597075  0.910963605 -0.63161039  0.28337042
Delemont      1.63417550  1.02604695 -0.5478672  0.505921909 -0.64635832  0.09123058
Franches-Mnt  2.10420020  0.74602360 -0.4726831  1.501911294 -0.40765420  0.08720438
Moutier       0.74760789  0.59589165  0.5791595  1.072298689 -0.22992758  0.30997471
Neuveville   -0.38152761  0.44884479  0.6282612  0.246077409 -0.07112802  0.76731497
Porrentruy    1.36921903  2.29187838 -0.3505274 -0.307782719 -0.83653932 -0.70933512
Broye         1.72432731  1.12775240 -0.4321727 -0.467113882  0.82572488 -0.07841113
Glane         2.18253588  1.76414415 -0.3982893 -0.249441795  0.81038447  0.27042035
Gruyere       1.51766939  0.62257236 -0.7079726  0.470324290  0.20333070 -0.23034770
Sarine        0.96155561  1.89512185 -0.6647708 -0.001973985  0.30001246 -0.03329330
Veveyse       2.01128901  1.54135700 -0.4058252 -0.287603102  0.62698878 -0.12467771
Aigle        -0.80506589 -1.35892381  0.3373395 -0.077269309  0.43968807  0.27674183
Aubonne       0.17520904 -0.88187440  0.8329215 -0.504185854 -0.18845018  0.29393399
Avenches     -0.23562425  0.48914597  0.8083984 -0.961529850  0.11736633  0.37875429
Cossonay     -0.42035821 -1.07192701  0.9281662 -0.741320000  0.53774346 -0.24555932
Echallens     0.59889560 -0.30086168  0.8578256 -0.896887294  0.41147631 -0.32192730
Grandson     -0.46581609  0.18010264  0.9661629  0.469430116 -0.32477593 -0.02954850
Lausanne     -2.78442448  0.63703185 -0.4103685 -0.088366571 -0.25421374  0.24241992
La Vallee    -3.42909196 -2.07525184 -0.2448720  1.712934307  0.50503356 -0.24296878
Lavaux       -0.15436533 -0.65730064  0.7829503 -0.957702534  0.31825529  0.27298746
Morges       -0.71390686 -0.89333076  0.6319530 -0.222216266  0.49554378  0.12182041
Moudon        0.25236121  0.15735119  1.1905959 -0.788599650 -0.53396422 -0.34277056
Nyone        -1.29000159 -1.25551410  0.1440459 -0.112175353  0.14726464 -0.26088870
Orbe         -0.94982763 -1.87067448  0.5986589  0.135712308  0.06640493 -0.41608229
Oron          0.96765998 -0.41301362  1.3210597 -0.639169876 -0.18274004  0.13599047
Payerne       0.48915287  0.83286698  1.0989038 -0.781155988 -0.28389870  0.36523538
Paysd'enhaut  0.94131433 -1.18635377  0.9760593  0.129231998 -0.85124791  0.40058569
Rolle        -0.55958462 -1.60672774  0.3474346 -0.109333221 -0.18906898  0.13423051
Vevey        -1.96390503  0.60351152  0.0204286 -0.201054029 -0.08290364 -0.25217038
Yverdon      -0.12335657  0.41402839  0.9121602 -0.683585317 -0.54601214 -0.09292530
Conthey       2.40893922 -2.04463449 -1.0525424  0.435254058 -0.13443293 -0.01610155
Entremont     1.95527998 -0.72627044 -1.0539122 -0.732645507 -0.13130720 -0.21572130
Herens        2.58674740 -1.13381204 -0.8384683 -0.193564929  0.07632329 -0.03741754
Martigwy      1.52334927 -0.60823624 -0.9759511 -0.452038974  0.32125628 -0.38639558
Monthey       2.10281914 -0.04580606 -0.6590874  0.231413249 -0.15043867 -0.31480419
St Maurice    1.24475999 -1.15053479 -1.3427985 -0.341854259 -0.16118089 -0.28819025
Sierre        3.01438790 -1.22991180 -0.7999096  0.965963131  0.30940289  0.64810996
Sion          1.07917226 -0.32825283 -1.2372365  0.515352351  0.43036016  0.26994007
Boudry       -1.16783772  0.37614158  0.7918458  0.134884925  0.60627472 -0.01839639
La Chauxdfnd -1.98754750  0.92983063  0.7201498  0.782338582  0.29429897 -0.86160681
Le Locle     -1.30711318  0.41467405  0.5717183  1.142289944 -0.02910645 -0.06177060
Neuchatel    -3.08273842  1.91976852 -0.3432797 -0.263154993  0.80372214  0.46212052
Val de Ruz    0.01142719  0.22331275  1.0431698  0.650169028 -0.27322389  0.21462817
ValdeTravers -1.35578566  0.33954785  0.9506714  0.788888804  0.16757825 -0.73452003
V. De Geneve -5.65565803  0.56333827 -2.6557725 -0.321439701 -0.03847105  0.43944741
Rive Droite  -1.85826599 -0.71488255 -1.6434878 -0.826611433 -0.93783867  0.22876851
Rive Gauche  -2.54870102  0.01438935 -1.6619528 -0.591583605 -0.69794132 -0.37939969
> pre <- predict(pri)
> summary(pre)
     Comp.1             Comp.2            Comp.3            Comp.4            Comp.5        
 Min.   :-5.65566   Min.   :-2.0753   Min.   :-2.6558   Min.   :-0.9615   Min.   :-0.93784  
 1st Qu.:-1.05883   1st Qu.:-0.8876   1st Qu.:-0.6619   1st Qu.:-0.4856   1st Qu.:-0.26372  
 Median : 0.01143   Median : 0.1801   Median : 0.1440   Median :-0.1122   Median :-0.03847  
 Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000  
 3rd Qu.: 1.44344   3rd Qu.: 0.6298   3rd Qu.: 0.8207   3rd Qu.: 0.4699   3rd Qu.: 0.31976  
 Max.   : 3.01439   Max.   : 2.2919   Max.   : 1.3211   Max.   : 1.7129   Max.   : 0.82572  
     Comp.6       
 Min.   :-0.8616  
 1st Qu.:-0.2489  
 Median :-0.0184  
 Mean   : 0.0000  
 3rd Qu.: 0.2717  
 Max.   : 0.7673  

通过eigen函数求出特征值

> y <- eigen(cor(sc))
> y
eigen() decomposition
$values
[1] 3.1997570 1.1883082 0.8476098 0.4389287 0.2045337 0.1208626

$vectors
           [,1]       [,2]        [,3]        [,4]        [,5]        [,6]
[1,]  0.4569876  0.3220284  0.17376638  0.53555794  0.38308893  0.47295441
[2,]  0.4242141 -0.4115132 -0.03834472 -0.64291822  0.37495215  0.30870058
[3,] -0.5097327  0.1250167  0.09123696 -0.05446158  0.81429082 -0.22401686
[4,] -0.4543119  0.1790495 -0.53239316 -0.09738818 -0.07144564  0.68081610
[5,]  0.3501111  0.1458730 -0.80680494  0.09947244  0.18317236 -0.40219666
[6,]  0.1496668  0.8111645  0.16010636 -0.52677184 -0.10453530 -0.07457754

最后算出最终得分

> scores <- (y$values[1]*pre[,1]+y$values[2]*pre[,2]+y$values[3]*pre[,3]+y$values[4]*pre[,4])/sum(y$values[1:4])
> scores
   Courtelary      Delemont  Franches-Mnt       Moutier    Neuveville    Porrentruy         Broye 
 0.2869294213  1.0936288874  1.3882936724  0.7157910349 -0.0082646920  1.1758391149  1.1077782013 
        Glane       Gruyere        Sarine       Veveyse         Aigle       Aubonne      Avenches 
 1.5213133496  0.9167750940  0.8396005716  1.3740209884 -0.6941135000 -0.0004619647  0.0159445934 
     Cossonay     Echallens      Grandson      Lausanne     La Vallee        Lavaux        Morges 
-0.3802005799  0.3334569108 -0.0443212193 -1.5047941538 -2.2722291113 -0.1818160506 -0.5124178520 
       Moudon         Nyone          Orbe          Oron       Payerne  Paysd'enhaut         Rolle 
 0.2920905295 -0.9774729513 -0.8273984483  0.6070348886  0.5539493267  0.4381388293 -0.6085575824 
        Vevey       Yverdon       Conthey     Entremont        Herens      Martigwy       Monthey 
-0.9935132584  0.1005168014  0.8066227226  0.7363513573  1.0809547212  0.5508643287  1.0955837231 
   St Maurice        Sierre          Sion        Boudry  La Chauxdfnd      Le Locle     Neuchatel 
 0.2339406861  1.3974142570  0.3948350736 -0.4510347744 -0.7579290047 -0.4764572464 -1.4078887244 
   Val de Ruz  ValdeTravers  V. De Geneve   Rive Droite   Rive Gauche 
 0.2593145665 -0.4903660180 -3.4926597035 -1.5069528518 -1.7281339644 

版权声明:本文为qq_35262405原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。