In [ ]:
ipfix_file = "../test/mawi-0330-3hours-100ms.ipfix"

In [ ]:
import ipfix
import qof
import pandas as pd
import numpy as np

ipfix.ie.use_iana_default() # loads IANA default IEs from module core definitions
ipfix.ie.use_5103_default() # loads reverse IEs for RFC5103 biflows
ipfix.ie.use_specfile("qof.iespec") # loads enterprise-specific IEs for QoF

ipfix.types.use_integer_ipv4() # accelerate dataframe processing of per-IP stuff

In [ ]:
df = qof.dataframe_from_ipfix(ipfix_file, ("flowStartMilliseconds", "flowEndMilliseconds",
                                           "packetDeltaCount", "reversePacketDeltaCount", 
                                           "transportPacketDeltaCount", "reverseTransportPacketDeltaCount",
                                           "octetDeltaCount", "reverseOctetDeltaCount",
                                           "transportOctetDeltaCount", "reverseTransportOctetDeltaCount",
                                           "tcpSequenceCount", "reverseTcpSequenceCount",
                                           "tcpSequenceLossCount", "reverseTcpSequenceLossCount"))

In [ ]:
print ("Total flows:         "+str(len(df)))

In [ ]:
df["lossy"] = (df["tcpSequenceLossCount"] > 0) | (df["reverseTcpSequenceLossCount"] > 0)

In [ ]:
print ("Lossy flows:         "+str(len(df[df["lossy"]])))

In [ ]:
(df["tcpSequenceLossCount"] / (ldf["transportOctetDeltaCount"] + \
                               ldf["tcpSequenceLossCount"])).resample("5min").dropna().plot()

In [ ]:
lossy_count = np.where(df["lossy"], 1, 0)
lossy_count.index = df["flowEndMilliseconds"]
total_count = pd.Series(1, index=lossy_count.index)

lossy_count.resample("5min", how="sum")
total_count.resample("5min", how="sum")
(lossy_count / total_count).plot()

In [ ]: