Кластеризация значений в фрейме данных в python - PullRequest
0 голосов
/ 27 марта 2020

У меня есть датафрейм с 76 столбцами. 1-й столбец содержит значения дат, а остальные 75 столбцов представляют уровни подземных вод из 75 различных скважин. Я хочу сгруппировать скважины на основе тренда (скважины, которые следуют той же схеме, сгруппированы вместе). Как я могу сделать это в python?

Вот пример моего фрейма данных

df = pd.DataFrame({
'Date': [1980, 1985, 1990, 1995, 2000],
'borehole1': [53, 43, 33, 22, 18],
'borehole2': [50, 40, 30, 50, 40],
'borehole3': [22, 32, 42, 32, 13],
'borehole4': [60, 65, 82, 72, 60],
'borehole5': [80, 70, 60, 80, 70],
'borehole6': [43, 33, 22, 18, 13]
}) 

df.plot()

В этом примере у меня будет 3 кластера:

  • скважина 1 и скважина 6 >> кластер 1
  • скважина 2 и скважина 5 >> кластер 2
  • скважина 4 и скважина 3 >> кластер 3

1 Ответ

1 голос
/ 05 апреля 2020

K-Means al go идеально подходит для этого! Вот образец (ниже). Просто наведите X и y на ваш указанный c набор данных и установите для «K» значение 3 (уже сделано для вас в этом примере).

# K-MEANS CLUSTERING
# Importing Modules
from sklearn import datasets
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# Loading dataset
iris_df = datasets.load_iris()

# Declaring Model
model = KMeans(n_clusters=3)

# Fitting Model
model.fit(iris_df.data)

# Predicitng a single input
predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]])

# Prediction on the entire data
all_predictions = model.predict(iris_df.data)

# Printing Predictions
print(predicted_label)
print(all_predictions)


# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :3]  # we only take the first two features.
y = iris.target


fig = plt.figure(figsize=(10,10))
plt = fig.add_subplot(111, projection='3d')
plt.scatter(X[:,0],X[:,1],X[:,2], 
            c=all_predictions, edgecolor='red', s=40, alpha = 0.5)
plt.set_title("First three PCA directions")
plt.set_xlabel("Educational_Degree")
plt.set_ylabel("Gross_Monthly_Salary")
plt.set_zlabel("Claim_Rate")
plt.dist = 10
plt

enter image description here

См. Эту ссылку для получения дополнительной информации.

https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html

...