def main(args): if not os.path.exists(args.savepath): os.makedirs(args.savepath) traffic = Traffic.from_file(args.data) list_features = ["track_unwrapped", "longitude", "latitude", "altitude"] nb_samples = len(traffic[0]) nb_features = len(list_features) algo_clustering = AutoencoderTSNE( gpu=args.gpu, model=Autoencoder((nb_samples * nb_features, 32, 8, 2)), learning_rate=args.learning_rate, weight_decay=args.learning_rate, lambda_kl=args.lambda_kl, nb_iterations=args.nb_iterations, batch_size=args.batch_size, algo_clustering=DBSCAN(eps=0.06, min_samples=20), distance_trajectory="euclidean", # delta_max savepath=f"{args.savepath}/model.pth", ) t_tsne = traffic.clustering( nb_samples=None, # nb_samples, features=list_features, clustering=algo_clustering, transform=MinMaxScaler(feature_range=(-1, 1)), ).fit_predict() t_tsne.to_parquet(f"{args.savepath}/t_tsne.parquet")
def get_flight(inf, calls=['*'], landing=False, takeoff=False): flist = [] try: fdata = Traffic.from_file(inf).clean_invalid() fdata = fdata.filter().eval() except: return flist for flight in fdata: if (flight.callsign[0:7] == 'WILDLIF'): continue if (flight.callsign[0:7] == 'FOLOWME'): continue if (flight.callsign[0:5] == 'RADAR'): continue if (flight.callsign[0:7] == 'FIRETEN'): continue if (flight.callsign[0:8] == 'DUTYOFIR'): continue if (np.nanmax(flight.data['altitude'].values) < 300): continue if (flight.callsign[0:3] not in calls): continue if (landing): if (np.nanmean(flight.data['vertical_rate'].values) > 200): continue if (takeoff): if (np.nanmean(flight.data['vertical_rate'].values) < -200): continue if (flight.typecode is None): flist.append(flight) return flist
def get_flight(inf): """Load a series of flights from a file using Xavier's 'traffic' library. Input: - inf, the input filename Returns: - a list of flights """ flist = [] # try: fdata = Traffic.from_file(inf).query("latitude == latitude") fdata = fdata.clean_invalid().filter().eval() # except: # return flist for flight in fdata: pos = flight.callsign.find(CNS.search_call) if (pos < 0): continue f_data = flight.data f_data = f_data.drop_duplicates('timestamp') f_data = f_data.drop_duplicates('longitude') f_data = f_data.drop_duplicates('latitude') f_data = f_data.query('altitude<10000') f_data = f_data.dropna() flight.data = f_data flist.append(flight) return flist
def openFile(self, *args, **kwargs) -> None: options = { "caption": "Open file", "filter": ("Pandas DataFrame (*.pkl);;" "CSV files (*.csv);;" "Sqlite3 files (*.db)"), # "filter": "Data files (*.csv *.pkl)", "directory": os.path.expanduser("~"), } self.filename = QFileDialog.getOpenFileName(self, **options)[0] if self.filename == "": return self.filename = Path(self.filename) self._traffic = Traffic.from_file(self.filename) assert self._traffic is not None self._tview = self._traffic.sort_values("timestamp") assert self._tview is not None self.open_dropdown.setItemText(0, self.filename.name) self.map_plot.default_plot(self._tview) self.identifier_select.clear() for callsign in sorted(cast(Set[str], self._tview.callsigns)): self.identifier_select.addItem(callsign) self.set_time_range() self.set_float_columns()
def loadFlights(start_day, end_day): filename = getFlightsFilename(start_day, end_day) flights = Traffic.from_file(filename) if logLvl >= 1: print("Loaded " + str(len(flights)) + " flights") return flights
def loadFlights(start_day, end_day, callsign): filename = recordings_folder + getFlightsFilename(start_day, end_day, callsign) flights = Traffic.from_file(filename) print("Loaded " + str(len(flights)) + " flights") return flights
def load_flights(): flights=list() for file in files: flights.extend(Traffic.from_file(file)) callsigns=dict() for flight in flights: if flight.callsign not in callsigns: callsigns[flight.callsign]=0 callsigns[flight.callsign]+=1 print(callsigns) filtered=set() for c in callsigns: if callsigns[c]>monthly_flights: filtered.add(c) print(filtered)
def pretrained_clust( traffic_file, list_features, algo_clustering, model, pretrained_path, to_pickle, gpu=0, ): t = Traffic.from_file(traffic_file) ae_tsne = AutoencoderTSNE( gpu=gpu, model=model, pretrained_path=pretrained_path, algo_clustering=algo_clustering, ) t_c = t.clustering( nb_samples=None, features=list_features, clustering=ae_tsne, transform=MinMaxScaler(feature_range=(-1, 1)), ).fit_predict() re, scores = ae_tsne.score_samples() t_c_re = pd.DataFrame.from_records( [dict(flight_id=f.flight_id, re=re) for f, re in zip(t_c, re)]) t_c = t_c.merge(t_c_re, on="flight_id") d = {"flight_id": "nunique", "re": ["mean", "min", "max"]} if scores is not None: t_c_scores = pd.DataFrame.from_records([ dict(flight_id=f.flight_id, score=score) for f, score in zip(t_c, scores) ]) t_c = t_c.merge(t_c_scores, on="flight_id") d["score"] = ["mean", "min", "max"] print(t_c.groupby(["cluster"]).agg(d)) t_c.to_pickle(to_pickle) return ae_tsne, t_c
def icaos_monthly_frequency(): all_icaos=set() for file in files: flights=Traffic.from_file(file) icaos=dict() for flight in flights: if flight.icao24 not in icaos: icaos[flight.icao24]=0 icaos[flight.icao24]+=1 #print(icaos) filtered=set() for c in icaos: if icaos[c]>monthly_flights: filtered.add((c, icaos[c])) all_icaos.add(c) print(file[len(recording_folder)+5:len(recording_folder)+12], filtered) return all_icaos
def callsign_monthly_frequency(): all_callsigns=set() for file in files: flights=Traffic.from_file(file) callsigns=dict() for flight in flights: if flight.callsign not in callsigns: callsigns[flight.callsign]=0 callsigns[flight.callsign]+=1 #print(callsigns) filtered=set() for c in callsigns: if callsigns[c]>monthly_flights: filtered.add((c, callsigns[c])) all_callsigns.add(c) print(file[len(recording_folder)+5:len(recording_folder)+12], filtered) return all_callsigns
def get_flight_basic(inf): flist = [] try: fdata = Traffic.from_file(inf) except: return flist for flight in fdata: if (flight.callsign[0:7] == 'WILDLIF'): continue if (flight.callsign[0:7] == 'FOLOWME'): continue if (flight.callsign[0:5] == 'RADAR'): continue if (flight.callsign[0:7] == 'FIRETEN'): continue if (flight.callsign[0:8] == 'DUTYOFIR'): continue if (flight.typecode is None): flist.append(flight) return flist
from traffic.data import opensky from traffic.core import Traffic import pandas as pd """ t_dcm = opensky.history( "2020-02-26 00:00", "2020-02-26 23:59", callsign="DCM%", ) """ t_dcm = Traffic.from_file("test.parquet") #t_dcm = pd.read_parquet("test.parquet") print(len(t_dcm)) unique_callsigns = set() for f in t_dcm: unique_callsigns.add(f.callsign) print(len(unique_callsigns)) by_callsign = {} for c in t_dcm: if c.callsign in by_callsign: by_callsign[c.callsign].append(c) else: by_callsign[c.callsign] = [c] for c in by_callsign: if len(by_callsign[c]) == 1:
for p in processes: p.join() # Move on to the next block of times start_dt = start_dt + timedelta(hours=nummer) # If we have reached the end of the block then exit if (start_dt >= end_dt): break files = glob(odir + '*.pkl') files.sort() first = True for inf in files: if first: fdata = Traffic.from_file(inf).query("latitude == latitude") fdata = fdata.clean_invalid().filter().eval() first = False else: tdata = Traffic.from_file(inf).query("latitude == latitude") tdata = tdata.clean_invalid().filter().eval() fdata = fdata + tdata print(len(fdata)) figsize = (20, 20) projparm = ccrs.PlateCarree(central_longitude=(bounds[2] - bounds[0]) / 2) alt_cut = 500 fig, ax = plt.subplots(1, 1,
from traffic.data import opensky from traffic.core import Traffic, Flight import pandas as pd start = "2020-02-26" end = "2020-02-26" filename = start + "_" + end + "_DCM_recordings.parquet" if __name__ == "__main__": t_dcm = Traffic.from_file(filename) print(len(t_dcm.callsigns)) flight = t_dcm[8]
typer = 'loiter' col = 'cyan' plt.plot(lons, lats, color=col, linewidth=0.3) return outf1 = '/home/proud/Desktop/test.svg' outf2 = '/home/proud/Desktop/test.png' count = 0 aclist = {} for inf in files: print(inf) # try: indata = Traffic.from_file(inf) for flight in indata: try: acft = aircraft[flight.icao24] typ = acft.typecode.values[0] if (typ in aclist): aclist[typ][0] = aclist[typ][0] + 1 else: aclist[typ] = [1, acft.model.values[0]] except KeyboardInterrupt: continue except Exception as e: print("OH", e) continue continue proc_flight(flight)
def loadFlights(start_day, end_day): filename = getFlightsFilename(start_day, end_day) return Traffic.from_file(filename)