In [ ]:
%matplotlib inline

import matplotlib.pyplot as plt
import pandas as pd
import re

filename = '221_133_245_231_CU'
file = 'data/' + filename + '.log'

timestamp = []
download = []
upload = []
state = [0, 1, 2]

pattern_t = re.compile(r'(\d+-\d+-\d+ \d+:\d+:\d+)')
pattern_d = re.compile(r'Download: (.*) Mbit/s')
pattern_u = re.compile(r'Upload: (.*) Mbit/s')
with open(file) as f:
    s = state[2]
    for line in f:
        if s == state[2] and pattern_t.match(line):
            timestamp.append(pd.to_datetime(pattern_t.match(line)[1]))
            s = state[0]
        if s == state[0] and pattern_d.match(line):
            download.append(float(pattern_d.match(line)[1]))
            s = state[1]
        if s == state[1] and pattern_u.match(line):
            upload.append(float(pattern_u.match(line)[1]))
            s = state[2]
    if s == state[1]:
        timestamp.pop()
        download.pop()
    elif s == state[0]:
        timestamp.pop()

data = pd.DataFrame({'timestamp': timestamp, 'download': download, 'upload': upload})

fig = plt.figure(figsize=(15,5))
plt.title("{}\n[Download] Mean Value={:.3} Variance={:.3}\n[Upload] Mean Value={:.3} Variance={:.3}"
          .format(filename,
                  data['download'].mean(), data['download'].var(),
                  data['upload'].mean(), data['upload'].var()))
plt.xlabel("Test Times")
plt.ylabel("Through Mbit/s")
plt.grid(True)
d = plt.scatter(data.index, data['download'], s=3, c='r', label='Download Through')
u = plt.scatter(data.index, data['upload'], s=3, c='b', label='Upload Through')
plt.legend( loc='upper left', fontsize=12)
plt.show()

fig.savefig('data/' + filename + '.png', dpi=fig.dpi)
data.to_csv('data/' + filename + '.csv')