コード例 #1
0
ファイル: clust_test.py プロジェクト: xoolive/artefact
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")
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
ファイル: layout.py プロジェクト: traffic-viz/traffic_qtgui
    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()
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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)
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
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
コード例 #12
0
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:
コード例 #13
0
    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,
コード例 #14
0
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]
コード例 #15
0
        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)
コード例 #16
0
def loadFlights(start_day, end_day):
    filename = getFlightsFilename(start_day, end_day)
    return Traffic.from_file(filename)