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')
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')
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
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}.')
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'])
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')