예제 #1
0
def crashrat():
    raceratings = da.getraceratings()
    results = da.results()
    raceresults = pd.merge(raceratings, results, how='right', on="raceId")
    raceresults = raceresults.dropna(subset=["rating"])
    crashers = raceresults[(raceresults["statusId"] > 1) & (
        (raceresults["statusId"] < 10) | (raceresults["statusId"] > 14))]
    ccount = crashers.groupby("raceId").count()
    rmean = raceresults.groupby("raceId").mean()
    racecrash = raceresults.drop_duplicates(subset=["raceId"])
    cols = np.delete(ccount.columns.to_numpy(), 24)
    ccount = ccount.drop(columns=cols)
    ccount.columns = ["crashcount"]
    racecrash = pd.merge(racecrash, ccount, how="left", on="raceId")
    cols = np.delete(rmean.columns.to_numpy(), 4)
    rmean = rmean.drop(columns=cols)
    rmean.columns = ["averagerating"]
    racecrash = pd.merge(racecrash, rmean, how="left", on="raceId")
    racecrash = racecrash.fillna(0)
    cmp = makecmp(
        raceratings,
        raceresults.drop_duplicates(subset=["raceId"]).name.to_numpy())
    plt.scatter(racecrash["crashcount"],
                racecrash["averagerating"],
                alpha=0.8,
                color=cmp.colors)
    plt.ylabel("Score")
    plt.xlabel("DNF's")
    plt.title("Rating (1-10) compared to DNF's per race")
    plt.tight_layout()
    #plt.show()

    plt.savefig("D:\Semester3\ADS-A\Challenge\Charts\CrashRatRace.png")
def getdata():
    raceratings = da.getraceratings()
    raceratings = raceratings.drop(
        columns=['year', 'round', 'circuitId', 'date', 'time', 'race'])
    results = da.results()
    raceresults = pd.merge(raceratings, results, how='right', on="raceId")
    crashers = raceresults[(raceresults["statusId"] > 1) & (
        (raceresults["statusId"] < 10) | (raceresults["statusId"] > 14))]
    ccount = crashers.groupby("raceId").count()
    cols = np.delete(ccount.columns.to_numpy(), 18)
    ccount = ccount.drop(columns=cols)
    ccount.columns = ["crashcount"]
    ccount = ccount.fillna(0)
    raceratings = pd.merge(raceratings, ccount, how="right", on="raceId")
    raceratings["crashcount"] = raceratings["crashcount"].fillna(0)
    stops = da.pitstops()
    racestops = pd.merge(raceratings, stops, how='left', on="raceId")
    racestopsraceavg = racestops.groupby(["raceId", "driverId"
                                          ]).count().groupby("raceId").mean()
    racestopsraceavg = racestopsraceavg.drop(columns=[
        'name', 'rating', 'crashcount', 'lap', 'time', 'duration',
        'milliseconds'
    ])
    racestopsraceavg.columns = ["averagestops"]
    raceratings = pd.merge(raceratings,
                           racestopsraceavg,
                           how="right",
                           on="raceId")
    laptimes = da.laptimes()
    racelapratings = pd.merge(raceratings, laptimes, how="right", on="raceId")
    racelapratings = racelapratings.dropna(subset=[
        "rating",
    ])
    avglaptimerace = racelapratings.groupby(
        ["raceId", "driverId"]).mean().groupby("raceId").mean()
    avgbestlaptime = racelapratings.groupby(["raceId", "driverId"
                                             ]).min().groupby("raceId").mean()
    avgdeltarace = (avglaptimerace["milliseconds"] -
                    avgbestlaptime["milliseconds"])
    raceratings = pd.merge(raceratings, avgdeltarace, how="left", on="raceId")
    raceratings.columns = [
        'raceId', 'name', 'rating', 'crashcount', 'averagestops', 'delta'
    ]
    raceratings = raceratings.drop(columns=['raceId'])
    return raceratings.dropna()