在R中使用多个变量对长期数据进行聚类

5

我有一个数据集,其中包含30个人的观测结果,每个人都进行了20个实验。假设我的数据如下所示:

ID   trial  reaction   response   prop_1   prop_2
"s1"   1      2.12        0        0.52     0.48
"s1"   2      1.32        1        0.12     0.88
"s1"   3       NA         1         NA       NA
"s2"   1      2.33        1        0.65     0.35
"s2"   2      2.56        0        0.43     0.57
"s2"   3       NA         1         NA       NA

我想使用这些变量来对参与者进行聚类。我研究了traj、latrend和kml等包,但它们都只使用一个变量来聚类数据。那么,如何使用多个变量来聚类这样的纵向数据呢?
欢迎任何简单的帮助或指导。

Python解决方案可以吗? - ASH
@ASH 我认为如果有方法的话,在 R 中也可以找到。对吧? - Mina
很可能是的。我不知道如何在R中做这件事。我多年前使用过R,但几年前我完全转向了Python。 - ASH
@ASH,我认为如果您能提供一个Python的解决方案,那将会是非常有帮助的。 - Mina
@Mina,你找到R语言的解决方案了吗? - jrcalabrese
2个回答

2
这是一种方法。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import seaborn as sns; sns.set()
import csv


df = pd.read_csv('C:\\business.csv')
df.dropna(axis=0,how='any',subset=['latitude','longitude'],inplace=True)


K_clusters = range(1,10)

kmeans = [KMeans(n_clusters=i) for i in K_clusters]
Y_axis = df[['latitude']]
X_axis = df[['longitude']]

score = [kmeans[i].fit(Y_axis).score(Y_axis) for i in range(len(kmeans))]# Visualize

plt.plot(K_clusters, score)
plt.xlabel('Number of Clusters')
plt.ylabel('Score')
plt.title('Elbow Curve')
plt.show()

X = df[['longitude', 'latitude']].copy()
kmeans = KMeans(n_clusters = 5, init ='k-means++')
kmeans.fit(X[X.columns[1:2]]) # Compute k-means clustering

X['cluster_label'] = kmeans.fit_predict(X[X.columns[1:3]])
centers = kmeans.cluster_centers_ # Coordinates of cluster centers
labels = kmeans.predict(X[X.columns[1:2]]) # Labels of each point

X.head(10)


X.plot.scatter(x = 'latitude', y = 'longitude', c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)

在这里输入图像描述

这里还有一个想法。

# import necessary modules
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from collections import Counter


df = pd.read_csv('C:\\properties_2017.csv')
# df.head(10)
df = df.head(10000)


list(df)
df.shape

df.shape

df = df.sample(frac=0.2, replace=True, random_state=1)
df.shape


df = df.fillna(0)
df.isna().sum()


df['regionidzip']=df['regionidzip'].fillna(97000)
df.dropna(axis=0,how='any',subset=['latitude','longitude'],inplace=True)
X=df.loc[:,['latitude','longitude']]
zp=df.regionidzip



id_n=8
kmeans = KMeans(n_clusters=id_n, random_state=0).fit(X)
id_label=kmeans.labels_


#plot result
ptsymb = np.array(['b.','r.','m.','g.','c.','k.','b*','r*','m*','r^']);
plt.figure(figsize=(12,12))
plt.ylabel('Longitude', fontsize=12)
plt.xlabel('Latitude', fontsize=12)
for i in range(id_n):
    cluster=np.where(id_label==i)[0]
    plt.plot(X.latitude[cluster].values,X.longitude[cluster].values,ptsymb[i])
plt.show()

enter image description here

#revise the clustering based on zipcode
uniq_zp=np.unique(zp)
for i in uniq_zp:
    a=np.where(zp==i)[0]
    c = Counter(id_label[a])
    c.most_common(1)[0][0]
    id_label[a]=c.most_common(1)[0][0]

#plot result (revised)
plt.figure(figsize=(12,12))
plt.ylabel('Longitude', fontsize=12)
plt.xlabel('Latitude', fontsize=12)
for i in range(id_n):
    cluster=np.where(id_label==i)[0]
    plt.plot(X.latitude[cluster].values,X.longitude[cluster].values,ptsymb[i])
plt.show()

这里输入图片描述

此处 提供了一个关于经纬度k均值聚类的案例,相关内容涉及it技术。

此处 提供了有关房价预测的数据集,相关内容涉及it技术。

另外,可以查看此处提供的内容,了解如何对地理位置信息进行聚类分析。

此处提供了一个数据存储的csv文件,相关内容涉及it技术。


0
你可能想看一下kml3d包,它是由与kml相同团队开发的(你已经找到了kml)。

https://cran.r-project.org/web/packages/kml3d/index.html

和DOI:10.1016/j.cmpb.2012.08.016

这个是用于多个变量的K-means,即联合纵向数据。

我已经有一段时间没有使用它了,但我计划再次使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接