Есть ли способ кластеризации точек в зависимости от их регрессии линий? - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь рассчитать скорость по значениям Time-Depth от скважины, но проблема в том, что слои земли не согласованы, и количество слоев может варьироваться от места к другим, поэтому мне нужно разделить данные на группы, которые я пытался добавить столбец с индексом для разделения, но это не сработает для больших данных и даже не точных

входных данных

    Depth_M  Time_Msec  Layer
0         0        0.0      0
1         3        5.0      0
2         6       10.5      0
3         9       13.0      1
4        12       16.5      1
5        15       20.5      1
6        20       24.0      2
7        25       26.0      2
8        30       28.5      2
9        35       31.5      2
10       40       34.0      2

и моей попытки:

import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress

df = pd.read_csv('1HOLE.csv', sep=",")
gk = df.groupby('Layer')
fig = plt.figure(facecolor='#BAD7F2', edgecolor='#F2BAC9')
df_new = df[['Time_Msec', 'Depth_M']]

df["S1"] = (df.Depth_M.diff() / df.Time_Msec.diff())*1000
df["S2"] = (df.Depth_M.diff(2) / df.Time_Msec.diff(2))*1000
print(df)

for i, x in gk:
    slope, intercept, r_value, p_value, std_err = linregress(x.Time_Msec, x.Depth_M)
    Velocity = round((slope*1000), 2)
    print("Layer: %s | Velocity: %s" % (i, Velocity))
    plt.plot(x.Time_Msec, intercept + slope*x.Time_Msec, 'r--')
    plt.scatter(x.Time_Msec, x.Depth_M, color='b')

plt.ylim((df.Depth_M.min(), df.Depth_M.max()))
plt.xlim((df.Time_Msec.min(), df.Time_Msec.max()))
plt.gca().invert_yaxis()
plt.show()

Я получил результат

    Depth_M  Time_Msec  Layer           S1           S2
0         0        0.0      0          NaN          NaN
1         3        5.0      0   600.000000          NaN
2         6       10.5      0   545.454545   571.428571
3         9       13.0      1  1200.000000   750.000000
4        12       16.5      1   857.142857  1000.000000
5        15       20.5      1   750.000000   800.000000
6        20       24.0      2  1428.571429  1066.666667
7        25       26.0      2  2500.000000  1818.181818
8        30       28.5      2  2000.000000  2222.222222
9        35       31.5      2  1666.666667  1818.181818
10       40       34.0      2  2000.000000  1818.181818
Layer: 0 | Velocity: 571.0
Layer: 1 | Velocity: 798.82
Layer: 2 | Velocity: 1952.53

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...