Статьи

BaDaS Arsenal: от grep до графика менее чем за 5 минут с Pyplot

BaDaS = Большой и Данные и Наука

В наши дни BaDaS в моде. И чтобы преуспеть в этом, вам нужен арсенал оружия, чтобы быстро понять огромное количество данных. И все больше и больше, я верю, что питон — это швейцарский армейский нож, используемый в полевых условиях. И если вы читали мой предыдущий блог , я считаю, что iPython Notebook (он же Jupyter) — отличный способ сотрудничать с другими людьми при проведении анализа данных.

Так…

Недавно, когда я анализировал пропускную способность / масштабируемость Kinesis и хотел отобразить график результатов, вместо того, чтобы обратиться к Excel для создания графика, я запустил старый iPython Notebook. (по общему признанию, я был также вдохновлен превосходным блогом @ AustinRochford о байесовском выводе )

Я был просто потрясен. Мне удалось перейти от файла журнала к видимому графику за считанные минуты. Вот как я это сделал …

После пары минут поиска в Google, я понял, что секретный соус был в matplotlib . Точнее, это был Pyplot FTW!

Чтобы приступить к работе, я сначала grep’d файлы журналов для каждого из моих прогонов, и создал файл журнала для каждого. Мне довелось поиграть с RecordBufferSizes в библиотеке Kinesis Producer (KPL), и я провел эксперимент с буфером 10 мс, 25 мс, 50 ​​мс и 100 мс.

Затем я запустил верный ноутбук и начал взламывать.

Сначала я импортировал pyplot:

1
from matplotlib import pyplot as plt

Затем я импортировал csv и dateutil для обработки данных…

1
2
3
import csv
 
import dateutil

Наконец, все, что мне нужно было сделать, это написать некоторый Python для анализа каждого файла данных и создать репрезентативный набор данных. Пиплот позаботился обо всем остальном.

В приведенном ниже коде я перебираю каждый CSV-файл и собираю набор данных для этого файла. Набор данных — это словарь данных . Словарь содержит два списка, один для отметок времени, который станет осью y, и один для пропускной способности (aka recordsPerSecond), которая станет осью x.

Первый элемент каждой строки в CSV содержит время эпохи. Но поскольку я хотел график временных рядов, я не хотел использовать абсолютную метку времени. Вместо этого я просто вычисляю дельту по первой отметке времени, которую вижу. (Neato!)

В конце я помещаю каждый из словарей данных в общий словарь, который отображает имя файла в словарь данных, представляющий данные для этого файла.

Последние несколько строк указывают pyplot на график каждого из наборов данных. Там есть вуду, чтобы установить цвет (подсказка: «r» = красный, «y» = желтый и т. Д.)

В конце концов, вы нажимаете «Выполнить» в ячейке, и SHAZAM — это графически.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
%matplotlib inline
files = ['10ms.csv', '25ms.csv', '50ms.csv', '100ms.csv']
 
datasets = {}
 
for filename in files:
    data = {
        "timestamp": [],
        "recordsPerSecond": []
    }
    with open(filename, 'rb') as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        starttime = None
        for row in reader:
            timestamp = dateutil.parser.parse(row[0])
            if (starttime is None):
                starttime = timestamp
            delta = (timestamp - starttime).total_seconds()
            data["timestamp"].append(delta)
            data["recordsPerSecond"].append(row[1])
        datasets[filename] = data
 
plt.plot(
    datasets["10ms.csv"]["timestamp"],
    datasets["10ms.csv"]["recordsPerSecond"],
    'r', label='10ms')
plt.plot(datasets["25ms.csv"]["timestamp"],
    datasets["25ms.csv"]["recordsPerSecond"],
    'b', label="25ms")
plt.plot(datasets["50ms.csv"]["timestamp"],
    datasets["50ms.csv"]["recordsPerSecond"],
    'g', label="50ms")
plt.plot(datasets["100ms.csv"]["timestamp"],
    datasets["100ms.csv"]["recordsPerSecond"],
    'y', label="100ms")
plt.ylabel('Records / Second')
plt.xlabel('Seconds')
plt.legend()
plt.show
<function matplotlib.pyplot.show>

график

И FWIW, весь этот пост был написан изнутри Jupyter!

Если я доберусь до этого, я надеюсь опубликовать, каковы были реальные результаты, когда мы играли с размерами буфера с Kinesis. (СОВЕТ: будьте осторожны — размеры буфера определяют объем агрегации, который не только влияет на пропускную способность, но и на стоимость!)