In [1]:
import pandas as pd

%matplotlib inline
import matplotlib.pyplot as plt


pd.set_option('display.mpl_style', 'default') # Make the graphs a bit prettier
plt.rcParams['figure.figsize'] = (15, 5)

In [2]:
raw_data = pd.read_csv('../data/2014_BAB_S.txt', sep=";")

In [14]:
data = raw_data
data[['Strklas', 'Strnum', 'Zst']] = data[['Strklas', 'Strnum', 'Zst']].astype(str)
data["Str"] = data['Strklas']+data['Strnum']

In [5]:
def get_data_slice( data=data,
                    zst_set=False, 
                    mask=False, 
                    date=False):
    
    # check if one or more zsts are given
    if zst_set: 
        if type(zst_set) is int:
            zst_set = set([zst_set])
        data = data[data["Zst"].isin(zst_set)]

    # check if one or more dates are given
    if date: 
        if type(date) is int:
            data = data[data["Datum"]==date]
        else:
            data = data[data["Datum"].isin(date)]
    
    # check if you a mask for columns is given
    if mask:
        return data[mask]
    else:
        return data
    
def get_hourly_normalized_lkw_numbers(date, hour, zst, direction=False):
    df = get_data_slice(date=date)
    df = df[df["Stunde"] == hour]
    d = df.set_index("Zst")
    
    # sum
    if not direction:
        d["result"] = d[["Lkw_R1", "Lkw_R2"]].sum(axis=1)
    else:
        d["result"] = d.loc[:, ["Lkw_"+direction]]
        
    r = d["result"]
    r_max = r.max()
    r_min = r.min()

    #normalize
    n = (r-r_min)/(r_max-r_min)
    return n[zst]


# usage: date, hour, zst, [direction]
print get_hourly_normalized_lkw_numbers( 140315, 2, "9008" ) # aggregation
print get_hourly_normalized_lkw_numbers( 140315, 2, "9008", "R1")
print get_hourly_normalized_lkw_numbers( 140315, 2, "9008", "R2")

In [154]:
zsts_dict = {
    "71: TH - Werntal": "9167",
    "7: HE - Schweinfurt": "9152",
    "70: Werntal - Schweinfurt": "9203",
    "7: Schweinfurt - Biebelried": "9020",
    "3: Seligenstädt - Würzburg-West": "9510",
    "7: Biebelried - Feuchtwangen": "9534",
    "7: Feuchtwangen - BW": "9568",
    "6: Feuchtwangen - Nürnberg Süd": "9525",
    "3: Biebelried - Fürth": "9041",
    "70: Bamberg - Werntal": "9545",
    "73: TH - Bamberg": "9306",
    "73: Bamberg - Fürth": "9585",
    "70: Bayreuth - Bamberg": "9068",
    "9: SN - Vogtland": "9903",
    "72: SN - Vogtland": "9094",
    "9: Vogtland - Bayreuth": "9620",
    "93: Hochfranken - Oberpfälzer Wald": "9099",
    "9: Bayreuth - Nürnberg": "9536",
    "6: Oberpfälzer Wald - CZ": "9008",
    "6: Nürnberg Ost - Altdorf": "9018",
    "73: Fürth - Nürnberg": "9111",
    "3: Fürth - Nürnberg": "9520",
    "3: Altdorf - Regensburg": "9060",
    "9: Nürnberg - Nürnberg-Ost": "9040",
    "9: Nürnberg Ost - Nürnberg Feucht": "9754",
    "73: Nürnberg-Hafen - Nürnberg-Süd": "9004",
    "9: Nürnberg Feucht - Holledau": "9539",
    "3: Nürnberg - Altdorf": "9081",
    "93: Oberpfälzer Wald - Regensburg": "9902",
    "93: Regensburg - Holledau": "9030",
    "3: Regensburg - Deggendorf": "9077",
    "92: Deggendorf - Neufahrn": "9017",
    "Holledau - Neufarn": "9058",
    "3: Deggendorf - AT": "9628",
    "94: Heldenstein - Burghausen": "9984",
    "8: Inntal - AT": "9028",
    "8: München-Süd - Inntal": "9171",
    "93: Inntal - AT": "9629",
    "95: Starnberg - Eschenlohe": "9161",
    "96: München-Süd-West - Memmingen": "9136",
    "8: BW - Eschenried": "9965",
    "7: Ulm - Allgäu": "9016",
    "94: München-Ost - Pastetten": "9213"
}

print "zst_json = {"
for zst in zsts_dict.keys():
    print '    "'+zst+'": "'+zsts_dict[zst]+'"'
print "};"


zst_json = {
    "7: Ulm - Allgäu": "9016"
    "93: Hochfranken - Oberpfälzer Wald": "9099"
    "6: Nürnberg Ost - Altdorf": "9018"
    "6: Feuchtwangen - Nürnberg Süd": "9525"
    "8: BW - Eschenried": "9965"
    "3: Altdorf - Regensburg": "9060"
    "7: Biebelried - Feuchtwangen": "9534"
    "93: Oberpfälzer Wald - Regensburg": "9902"
    "7: Schweinfurt - Biebelried": "9020"
    "7: HE - Schweinfurt": "9152"
    "95: Starnberg - Eschenlohe": "9161"
    "3: Nürnberg - Altdorf": "9081"
    "73: Fürth - Nürnberg": "9111"
    "94: München-Ost - Pastetten": "9213"
    "8: Inntal - AT": "9028"
    "73: Nürnberg-Hafen - Nürnberg-Süd": "9004"
    "72: SN - Vogtland": "9094"
    "3: Biebelried - Fürth": "9041"
    "73: TH - Bamberg": "9306"
    "71: TH - Werntal": "9167"
    "9: Vogtland - Bayreuth": "9620"
    "9: Bayreuth - Nürnberg": "9536"
    "3: Fürth - Nürnberg": "9520"
    "Holledau - Neufarn": "9058"
    "92: Deggendorf - Neufahrn": "9017"
    "94: Heldenstein - Burghausen": "9984"
    "93: Regensburg - Holledau": "9030"
    "3: Seligenstädt - Würzburg-West": "9510"
    "9: Nürnberg - Nürnberg-Ost": "9040"
    "70: Bayreuth - Bamberg": "9068"
    "8: München-Süd - Inntal": "9171"
    "3: Deggendorf - AT": "9628"
    "9: Nürnberg Ost - Nürnberg Feucht": "9754"
    "6: Oberpfälzer Wald - CZ": "9008"
    "93: Inntal - AT": "9629"
    "70: Werntal - Schweinfurt": "9203"
    "70: Bamberg - Werntal": "9545"
    "73: Bamberg - Fürth": "9585"
    "9: SN - Vogtland": "9903"
    "96: München-Süd-West - Memmingen": "9136"
    "7: Feuchtwangen - BW": "9568"
    "9: Nürnberg Feucht - Holledau": "9539"
    "3: Regensburg - Deggendorf": "9077"
};

In [155]:
# usage for zsts at 2pm
print "zst_usage ={"
for route in zsts_dict.keys():
    zst = zsts_dict[route]
    usage_percent = get_hourly_normalized_lkw_numbers(140315, 14, zst)
    print '     "'+route+'": "'+str(usage_percent)+'"'
print "};"


zst_usage ={
     "7: Ulm - Allgäu": "0.0523627075351"
     "93: Hochfranken - Oberpfälzer Wald": "0.0996168582375"
     "6: Nürnberg Ost - Altdorf": "0.275862068966"
     "6: Feuchtwangen - Nürnberg Süd": "0.577266922095"
     "8: BW - Eschenried": "0.297573435504"
     "3: Altdorf - Regensburg": "0.546615581098"
     "7: Biebelried - Feuchtwangen": "0.0893997445722"
     "93: Oberpfälzer Wald - Regensburg": "0.136653895275"
     "7: Schweinfurt - Biebelried": "0.183908045977"
     "7: HE - Schweinfurt": "0.187739463602"
     "95: Starnberg - Eschenlohe": "0.0395913154534"
     "3: Nürnberg - Altdorf": "0.41251596424"
     "73: Fürth - Nürnberg": "0.102171136654"
     "94: München-Ost - Pastetten": "0.597701149425"
     "8: Inntal - AT": "0.197956577267"
     "73: Nürnberg-Hafen - Nürnberg-Süd": "0.126436781609"
     "72: SN - Vogtland": "0.191570881226"
     "3: Biebelried - Fürth": "0.610472541507"
     "73: TH - Bamberg": "0.0651340996169"
     "71: TH - Werntal": "0.0280970625798"
     "9: Vogtland - Bayreuth": "0.515964240102"
     "9: Bayreuth - Nürnberg": "0.365261813538"
     "3: Fürth - Nürnberg": "0.575989782886"
     "Holledau - Neufarn": "0.542784163474"
     "92: Deggendorf - Neufahrn": "0.0945083014049"
     "94: Heldenstein - Burghausen": "0.095785440613"
     "93: Regensburg - Holledau": "0.0727969348659"
     "3: Seligenstädt - Würzburg-West": "0.353767560664"
     "9: Nürnberg - Nürnberg-Ost": "0.319284802043"
     "70: Bayreuth - Bamberg": "0.0523627075351"
     "8: München-Süd - Inntal": "0.58748403576"
     "3: Deggendorf - AT": "0.489144316731"
     "9: Nürnberg Ost - Nürnberg Feucht": "0.32183908046"
     "6: Oberpfälzer Wald - CZ": "0.23754789272"
     "93: Inntal - AT": "0.507024265645"
     "70: Werntal - Schweinfurt": "0.117496807152"
     "70: Bamberg - Werntal": "0.0855683269476"
     "73: Bamberg - Fürth": "0.150702426564"
     "9: SN - Vogtland": "0.319284802043"
     "96: München-Süd-West - Memmingen": "0.137931034483"
     "7: Feuchtwangen - BW": "0.13282247765"
     "9: Nürnberg Feucht - Holledau": "0.37037037037"
     "3: Regensburg - Deggendorf": "0.458492975734"
};

In [157]:
kurz = "9627"
lang = "9629"

print "kurz", get_hourly_normalized_lkw_numbers(140315, 14, kurz)
print "lang", get_hourly_normalized_lkw_numbers(140315, 14, lang)


kurz 0.546615581098
lang 0.507024265645

In [159]:
df = get_data_slice(date=140315)
df = df[df["Stunde"] == 14]
d = df.set_index("Zst")

direction =False
# sum
if not direction:
    d["result"] = d[["Lkw_R1", "Lkw_R2"]].sum(axis=1)
else:
    d["result"] = d.loc[:, ["Lkw_"+direction]]

r = d["result"]
r_max = r.max()
r_min = r.min()

print 'max', r_max
print 'min', r_min


max 783
min 0

In [ ]: