Exemplo n.º 1
0
def example_trajs():
    print('Generowanie i zapisywanie przykładowych trajektorii...')
    path = 'data/part0/example_traj'
    dirmake(path)
    logg('Generowanie przykładowych trajektorii - start')
    AD = andi.andi_datasets()
    for model in range(5):
        try:
            dataset = AD.create_dataset(100, 1, [0.7], [model], 2)
        except:
            dataset = AD.create_dataset(100, 1, [1.7], [model], 2)

        x = dataset[0][2:102]
        y = dataset[0][102:]
        plt.figure(figsize=(2, 2))
        plt.cla()
        plt.gca().spines['top'].set_visible(False)
        plt.gca().spines['right'].set_visible(False)
        plt.xlabel('x')
        plt.ylabel('y')
        plt.title(AD.avail_models_name[model], loc='left')
        plt.plot(x, y, color=colors[model], linewidth=2, alpha=0.5)
        plt.scatter(x,
                    y,
                    c=range(len(x)),
                    cmap=color_maps[model],
                    marker='.',
                    s=100)
        plt.savefig(path + '/' + str(AD.avail_models_name[model]) + '.pdf',
                    transparent=True,
                    bbox_inches='tight',
                    dpi=300)
    logg('Generowanie przykładowych trajektorii - stop')
    print(' --- ZAKOŃCZONO')
Exemplo n.º 2
0
def TAMSD_estimation(trajectories, exps, part, Model):
    global liczydlo
    if part == 0:
        D, real_exp, est_exp, tamsds = TAMSD_estimation_traj(
            0, 1, [exps, trajectories])
        return D, real_exp, est_exp, tamsds
    if part >= 1:
        print('Obliczanie estymacji TAMSDS...')
        if part in [1, 2, 3, 4, 5, 6]:
            trajectories = trajectories[:-number_to_learn]
        else:
            trajectories = trajectories[:-floor(10**(part - 6))]
        liczydlo = 0
        traj_num = len(trajectories)
        traj_info = pd.DataFrame(columns=['D', 'expo', 'expo_est', 'tamsds'],
                                 index=range(traj_num))
        # 2 argumenty iterwane do poola
        give = []
        logg('TAMSD - estymacja - start')
        start = datetime.now()
        for i in range(traj_num):
            give.append([exps[i], trajectories[i]])
        with mp.Pool(3) as pool:
            temp = partial(TAMSD_estimation_traj, part, traj_num)
            result = pool.map(temp, give)
            pool.close()
            pool.join()
        print(' --- ZAKOŃCZONO')
        print('Translacja wyników TAMSD...')
        liczydlo = 0
        for i in result:
            traj_info.loc[liczydlo] = i
            liczydlo += 1
            if liczydlo % 500 == 0:
                print(f'TAMSD - translacja - {liczydlo}/{traj_num}')
        stop = datetime.now()
        logg(f'TAMSD - estymacja - koniec {stop - start}')
        print(' --- ZAKOŃCZONO')
        path = f'data/part{part}/model{Model}/TAMSD/'
        dirmake(path)
        fname = path + str('estimated.csv')
        print(f'Zapisywanie wyników do pliku {fname}')
        traj_info.to_csv(fname)
        print(' --- ZAKOŃCZONO')
Exemplo n.º 3
0
def get_features(trajectories, exps, part, Model):
    if part >= 1:
        print('Wyciąganie parametrów z trajektorji...')
        global l_t
        ### odczyt danych z trajektorii
        l_t = 0
        traj_num = len(trajectories)
        # 2 argumenty iterwane do poola
        give = []
        logg('ML - wyciąganie danych - start')
        start = datetime.now()
        for i in range(traj_num):
            give.append([exps[i], trajectories[i]])
        with mp.Pool(3) as pool:
            temp = partial(get_info, 5, traj_num)
            result = pool.map(temp, give)
            pool.close()
            pool.join()
        ### zapis do pandas
        traj_info = pd.DataFrame(columns=[
            'alpha', 'diffusivity', 'efficiency', 'slowdown', 'MSD_ratio1',
            'MSD_ratio5', 'antigaussinity1', 'antigaussinity5', 'straigthness',
            'autocorrelation1', 'autocorrelation5', 'max_distance',
            'trappedness', 'fractal_dim'
        ],
                                 index=range(traj_num))
        l_t = 0
        for traj in result:
            traj_info.loc[l_t] = traj
            l_t += 1
            if l_t % 500 == 0:
                print(f'translacja - {l_t}/{traj_num}')
        stop = datetime.now()
        logg(f'ML - wyciąganie danych - koniec {stop - start}')
        # zapis do pliku
        path = f'data/part{part}/model{Model}/ML'
        dirmake(path)
        fname = f'data/part{part}/model{Model}/ML/features.csv'
        print(f'Zapisywanie danych do pliku {fname}')
        traj_info.to_csv(fname)
        print(' --- ZAKOŃCZONO')
        return traj_info
Exemplo n.º 4
0
from plotting import plot_traj, plot_TAMSD
from TAMSD import TAMSD_estimation
from get_features import get_features
from ML import linear_regression, decision_tree, random_forest, gradient_boosting
from os import remove
from datetime import datetime
from part0 import example_trajs, example_TAMSD

remove('log.txt')

with open('log.txt', 'w') as f:
    f.write(f'[{datetime.now()}] START programu...\n')

colors = ['darkorange', 'darkgreen', 'royalblue', 'pink', 'red', 'magenta'] # kolory do rysowania plotów
part = int(input("Jaką część projektu chcesz uruchomić: "))
logg(f'Starting part {part}.')
if part == 0:
    Q_trajectories = input("Czy chcesz wygenerować przykłady trajektorii? (Y/n): ")
    Q_TAMSD = input("Czy chcesz wygenerować przykładowe i prerfekcyjne TAMSD? (Y/n): ")
    logg(f'Wybrane decyzje: {Q_trajectories}.')
    print(64 * '-')
    if Q_trajectories == 'Y':
        example_trajs()
        print(64 * '-')
    if Q_TAMSD == 'Y':
        example_TAMSD()
    
 if part in [1,2,3,4,5,6,7,8,9,10]:
    Model = input('Jaki model chcesz uruchomić? (A/B/C): ')
    
    logg(f'Wybrany model: {Model}.')
Exemplo n.º 5
0
def estimate(test_data,
             test_label,
             part,
             Model,
             Model_test,
             model,
             learning_number=100000,
             part_test=None):
    if part_test == None:
        part_test = part
        path_estimations = f'data/part{part}/estimations/model{Model}/test{Model_test}/{model}.csv'
        dirmake(f'data/part{part}/estimations/model{Model}/test{Model_test}/')
    elif part_test >= 3:
        path_estimations = f'data/part1-6/estimations/part{part_test}/{model}.csv'
        dirmake(f'data/part1-6/estimations/part{part_test}/')
    elif part_test == 1:
        if part == 3:
            path_estimations = f'data/part3-1/estimations/part{part_test}/{model}.csv'
            dirmake(f'data/part3-1/estimations/part{part_test}/')
        elif part in [1, 7, 8, 9, 10]:
            path_estimations = f'data/part7-10/estimations/part{part}/{model}.csv'
            dirmake(f'data/part7-10/estimations/part{part}/')
    if isfile(path_estimations):
        results = pd.read_csv(path_estimations, index_col='Unnamed: 0')
    else:
        if model == 'TAMSD':
            print('Obliczanie estymacji TAMSDS...')
            logg('TAMSD - estymacja - start')
            start = datetime.now()
            traj_num = len(test_label)
            give = []
            for i in range(traj_num):
                give.append([test_label[i], test_data[i]])

            with mp.Pool(3) as pool:
                temp = partial(TAMSD_estimation_traj, part, traj_num)
                result = pool.map(temp, give)
                pool.close()
                pool.join()
            stop = datetime.now()
            logg(f'TAMSD - estymacja - koniec {stop - start}')
            print(' --- ZAKOŃCZONO')

            print('Translacja wyników TAMSD...')
            results = pd.DataFrame(columns=['D', 'expo', 'expo_est', 'tamsds'],
                                   index=range(traj_num))
            liczydlo = 0
            for i in result:
                results.loc[liczydlo] = i
                liczydlo += 1
            print(' --- ZAKOŃCZONO')
            results.to_csv(path_estimations)
        else:
            path_model = f'data/part{part}/model{Model}/ML/{model}/model.pk1'
            print('Ładowanie modelu ...')
            model = load_model(path_model)
            print(' --- ZAKOŃCZONO')
            print(f'Testowanie modelu {model}...')
            logg(f'ML - {model} - przewidywanie - start')
            start = datetime.now()
            predicted_labels = model.predict(test_data)
            stop = datetime.now()
            logg(f'ML - {model} - przewidywanie - koniec {stop - start}')
            print(' --- ZAKOŃCZONO')
            print('Translacja przewidywań...')
            print(len(test_label))
            results = pd.DataFrame({
                'expo': test_label,
                'expo_est': predicted_labels
            })
            print(' --- ZAKOŃCZONO')
            print(f'Zapisywanie wstymacji wyników do pliku - model {model}...')
            results.to_csv(path_estimations)
            print(' --- ZAKOŃCZONO')
            print(64 * '-')
    results = results.dropna()
    return list(results['expo_est']), list(results['expo'])
Exemplo n.º 6
0
def example_TAMSD():
    print('Generowanie i zapisywanie przykładowych TAMSD...')
    path = 'data/part0/example_TAMSD'
    dirmake(path)
    logg('Generowanie przykładowych TAMSD - start')

    AD = andi.andi_datasets()
    dataset = AD.create_dataset(200, 1, [0.7], [2], 2)
    x = dataset[0][2:202]
    y = dataset[0][202:]
    trajectory = [x, y]
    D, expo, expo_est, tamsds = TAMSD_estimation(trajectory, 0.7, 0, 'A')
    tamsds = tamsds[:100]
    t = range(1, len(tamsds) + 1)
    expo_est = estimate_expo(t, tamsds, D, 100)

    plt.cla()
    plt.figure(figsize=(3, 3))
    plt.plot(t, tamsds, '.', label='punkty TAMSD')
    plt.plot(t, [4 * D * i**expo_est for i in t],
             'b',
             label=r'Wyestymowana krzywa wzorcowa')
    plt.plot(t, [4 * D * i**expo for i in t],
             'r',
             label=r'Prawdziwa krzywa wzorcowa')
    plt.xlabel('t')
    plt.ylabel(r'$\rho(t)$')
    plt.title('c', loc='left')
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['right'].set_visible(False)
    plt.savefig(path + '/TAMSD.pdf',
                transparent=True,
                bbox_inches='tight',
                dpi=300)

    plt.cla()
    plt.loglog(t, tamsds, '.', label='punkty TAMSD')
    plt.loglog(t, [4 * D * i**expo_est for i in t],
               'b',
               label=r'Wyestymowana krzywa TAMSD')
    plt.loglog(t, [4 * D * i**expo for i in t],
               'r',
               label=r'Prawdziwa krzywa wzorcowa')
    plt.xlabel('t')
    plt.ylabel(r'$\rho(t)$')
    plt.legend(loc='lower left', bbox_to_anchor=(1.05, 1))
    plt.title('d', loc='left')
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['right'].set_visible(False)
    plt.savefig(path + '/TAMSD_loglog.pdf',
                transparent=True,
                bbox_inches='tight',
                dpi=300)

    # perfekcyjne tamsd
    plt.cla()
    D = 0.3
    t = [0.1 * i for i in range(101)]
    exps = [0.7, 1, 1.3]
    label = ['superdyfuzja', 'dyfuzja normalna', 'subdyfuzja']
    for expo in exps:
        plt.plot(t, [4 * D * i**expo for i in t],
                 color=colors[exps.index(expo)],
                 label=r'$\alpha=\ $' + str(expo) + ' - ' +
                 label[-exps.index(expo) - 1])
    plt.xlabel('t')
    plt.ylabel(r'$\rho(t)$')
    plt.legend(loc='lower left', bbox_to_anchor=(1.05, 1), ncol=3)
    plt.title('a', loc='left')
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['right'].set_visible(False)
    plt.savefig(path + '/perfect_TAMSD.pdf',
                transparent=True,
                bbox_inches='tight',
                dpi=300)

    # perfekcyjne tamsd - loglog
    plt.cla()
    D = 1
    t = [0.1 * i for i in range(101)]
    exps = [0.7, 1, 1.3]
    for expo in exps:
        plt.loglog(t, [4 * D * i**expo for i in t],
                   color=colors[exps.index(expo)],
                   label=r'$\alpha=\ $' + str(expo))
    plt.xlabel('t')
    plt.ylabel(r'$\rho(t)$')
    plt.title('b', loc='left')
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['right'].set_visible(False)
    plt.savefig(path + '/perfect_TAMSD_loglog.pdf',
                transparent=True,
                bbox_inches='tight',
                dpi=300)

    logg('Generowanie przykładowych TAMSD - stop')
    print(' --- ZAKOŃCZONO')