<jupyter_start><jupyter_text>Ajustes do notebook 🔧 **Montando** o drive para acesso dos arquivos<jupyter_code># from google.colab import drive
# drive.mount('/content/drive')<jupyter_output><empty_output><jupyter_text>Importando as **bibliotecas**<jupyter_code>import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np<jupyter_output><empty_output><jupyter_text>Importando **dados** > Os teste foram realizados utilizando um conjunto de **dados** coletados por **1 minuto** de uma aplicação simples, onde é enviado do dispositivo NodeMCU apenas o dado de medição de apenas um sensor de humidade para um servidor dentro da rede. A escolha dessa aplicação, é justamente deixar o cenário mais simples e didático possível.> A **coleta**, **filtro** e **exportação** de dados foi utilizando o software [Wireshark](https://www.wireshark.org/).> O **filtro** foi apenas para manter os pacotes que são de interesse do estudo, que no nosso caso ou são os pacotes dos protocolos **HTTP** ou **MQTT**, o que gera dois arquivos distintos. Importando dados do teste com **HTTP**<jupyter_code>packets_http_csv = pd.read_csv('https://raw.githubusercontent.com/ThazSobral/mqtt-vs-http-experiment/main/data/packet-http-one-minute.csv')
# packets_http_json = pd.read_json('/content/drive/My Drive/FACUL CC/FACUL CC 8º SEM/API 8º sem/analyse/data-http/packet-http-one-minute.json')

#filtrar os que utilizam somente o protocolo HTTP
packets_http_csv = packets_http_csv[packets_http_csv['Protocol'] == 'HTTP']

# packets_http_csv
# packets_http_json<jupyter_output><empty_output><jupyter_text>Importando dados do teste com **MQTT**<jupyter_code>packets_mqtt_csv = pd.read_csv('https://raw.githubusercontent.com/ThazSobral/mqtt-vs-http-experiment/main/data/packet-mqtt-one-minute.csv')
# packets_mqtt_json = pd.read_json('/content/drive/My Drive/FACUL CC/FACUL CC 8º SEM/API 8º sem/analyse/data-mqtt/packet-mqtt-one-minute.json')

# packets_mqtt_csv
# packets_mqtt_json<jupyter_output><empty_output><jupyter_text>Perguntas ❓  **Quantos** dados **trafegaram** na rede, tanto **http** quanto **mqtt**?<jupyter_code>#definir quantidade de dados para cada tipo de pacote
number_of_http = len(packets_http_csv)
number_of_mqtt = len(packets_mqtt_csv)

#definir variaveis
labels = 'HTTP', 'MQTT'
sizes = [number_of_http, number_of_mqtt]
explode = (0, 0.1)

#criar
fig, ax = plt.subplots()
#configurar subplots
ax.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
ax.axis('equal')
fig.suptitle('HTTP vs MQTT', size=20)

#mostrar plot
plt.show()<jupyter_output><empty_output><jupyter_text>> Segundo o gráfico, o protocolo que **mais movimenta pacotes** na rede é o **HTTP**.  Quais o **diferentes tamanhos** de pacotes há entre **http** e **mqtt**? E **quantos** pacotes foram **enviados** de cada tipo?<jupyter_code>#definir váriaveis
figsize=(12, 5)

#criar subplots
fig, ax = plt.subplots(1, 2, figsize=figsize)
#definir titulo superior
fig.suptitle('HTTP vs MQTT', size=30)

#definir labels para os subplots
x_label_ = 'Frames size'
y_label_ = 'Number of frames'

#criar e definir plot na posição 0
length_packets_http_csv = pd.value_counts(packets_http_csv['Length'])
ax_ = ax[0]
length_packets_http_csv.plot(kind="bar", ax=ax_)
ax_.set_xlabel(x_label_)
ax_.set_ylabel(y_label_)
ax_.set_title('Frames HTTP')

#criar e definir plot na posição 1
length_packets_mqtt_csv = pd.value_counts(packets_mqtt_csv['Length'])
ax_ = ax[1]
length_packets_mqtt_csv.plot(kind="bar", ax=ax_)
ax_.set_xlabel(x_label_)
ax_.set_ylabel(y_label_)
ax_.set_title('Frames MQTT')

#mostrar plot
plt.show()<jupyter_output><empty_output><jupyter_text>> De acordo com o gráfico gerado, o protocolo **MQTT** é o que têm **mais variedade** de tamanho de **pacotes**, porém o **maior pacote** gerado comparando os protocolos é gerado pelo protocolo **HTTP**, ou seja, os pacotes gerados pelo protocolo MQTT em média são menores.   Qual a **média** (em **bytes**) desses **dados**, tanto **http** quanto **mqtt**?<jupyter_code>sum_packets_http = packets_http_csv['Length'].sum()
sum_packets_mqtt = packets_mqtt_csv['Length'].sum()
mean_packets_http = sum_packets_http/len(packets_http_csv)
mean_packets_mqtt =  sum_packets_mqtt/len(packets_mqtt_csv)
# print(f'Soma quadros HTTP: {sum_packets_http} bytes\nSoma quadros MQTT: {sum_packets_mqtt} bytes')

sum_datas = [sum_packets_http, sum_packets_mqtt]
mean_datas = [mean_packets_http, mean_packets_mqtt]

labels = ['HTTP', 'MQTT']
x = np.arange(len(labels))
width = 0.35
figsize = (6.5,5)

fig, ax = plt.subplots(figsize=figsize)
rects_sum = ax.bar(x - width/2, sum_datas, width, label='Soma')
rects_mean = ax.bar(x + width/2, mean_datas, width, label='Média')

ax.set_ylabel('size (bytes)')
ax.set_title('HTTP vs MQTT', size=20)
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()

def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.annotate('%.2f bytes'%height,
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects_sum)
autolabel(rects_mean)

fig.tight_layout()

plt.show()<jupyter_output><empty_output><jupyter_text>> De acordo com o gráfico gerado, tem **mais bytes** trafegando na rede com o protocolo **HTTP** do que com o protocolo MQTT.  **Quanto** é **enviado** e **recebido** pela rede, tanto **http** quanto **mqtt**? (tanto em quantidade quanto em bytes)<jupyter_code># packets_http_csv
device_data_http = packets_http_csv[packets_http_csv['Source'] == '192.168.0.117']
length_device_data_http = device_data_http['Length'].sum()
server_data_http = packets_http_csv[packets_http_csv['Source'] == '192.168.0.109']
length_server_data_http = server_data_http['Length'].sum()

# packets_mqtt_csv
device_data_mqtt = packets_mqtt_csv[packets_mqtt_csv['Source'] == '192.168.0.117']
length_device_data_mqtt = device_data_mqtt['Length'].sum()
server_data_mqtt = packets_mqtt_csv[packets_mqtt_csv['Source'] == '192.168.0.109']
length_server_data_mqtt = server_data_mqtt['Length'].sum()

# print(f'''
# HTTP\n{legth_device_data_http} bytes send to server\n{legth_server_data_http} bytes send to device\n
# {len(device_data_http)} frames send to server\n{len(server_data_http)} frames send to device\n
# MQTT\n{legth_device_data_mqtt} bytes send to server\n{legth_server_data_mqtt} bytes send to device\n
# {len(device_data_http)} frames send to server\n{len(server_data_http)} frames send to device\n
# ''')
labels = ['HTTP', 'MQTT']
men_means = [len(device_data_http), len(device_data_mqtt)]
women_means = [len(server_data_http), len(server_data_mqtt)]

width = 0.35

fig, ax = plt.subplots()

ax.bar(labels, men_means, width, label='device', )
ax.bar(labels, women_means, width, bottom=men_means, label='server')

ax.set_ylabel('Quantidade')
ax.set_title('Quantidade de pacotes enviados')
ax.legend()

plt.show()<jupyter_output><empty_output><jupyter_text>> De acordo com o gráfico gerado, o trafego no protocolo **HTTP** é mais **balanceado** na questão da comunicação entre dispositivo e servidor, já no protocolo **MQTT** o **device manda mais pacotes** para o servidor do que o inverso.<jupyter_code>labels = ['HTTP', 'MQTT']
men_means = [length_device_data_http, length_device_data_mqtt]
women_means = [length_server_data_http, length_server_data_mqtt]

width = 0.35

fig, ax = plt.subplots()

ax.bar(labels, men_means, width, label='device', )
ax.bar(labels, women_means, width, bottom=men_means, label='server')

ax.set_ylabel('Quantidade (bytes)')
ax.set_title('Quantidade de pacotes enviados em bytes')
ax.legend()

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1314776808619805, 'fraction_numerical': 0.01090302719343253, 'mean_word_length': 6.390521327014218, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 44, 'https://': 3, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '464562', 'license': 'MIT', 'n_tokens_mistral': 3028, 'n_tokens_neox': 2929, 'n_words': 667, 'path': 'analyse_mqtt_vs_http.ipynb', 'repo_name': 'ThazSobral/mqtt-vs-http-experiment', 'size': '7796'}