栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

The basic use of matplotlib and numpy in python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

The basic use of matplotlib and numpy in python

Some of the results


The code 1
# The figure 1 initialization time with all database sizes and block size 512 KB
import os
import math
from matplotlib import pyplot as plt
import re
import numpy as np
from pyparsing import col
# step 1 select the corresponding files from the totalLog directory 
# step 2 summarize all the elements in above files and get their average 
# step 3 draw the figure with database sizes as its x-axis and delay as it y-axis
# step 4 draw the breakdown cost for the Jump-ORAM, Path-ORAM and S3ORAM
def takeDBsizeJump(ele):
    pos = ele.find('GB')
    db = float(ele[:pos])
    return db
def takeBlockSize(ele):
    return float(re.findall(r"_(.+?)KB", ele)[0])
def takeDBsizeS3(ele):
    return float(re.findall(r"KB_(.+?)GB_", ele)[0])
# The Jump-ORAM
path = 'totalLog'
#init_x_axis = ['0.5', '1', '2.5', '5', '10', '20']
init_x_axis = [0.5, 1, 2.5, 5, 10, 20]
#init_x_axis_vary_blocksize = ['4', '8', '16', '32', '64', '128', '256', '512']
init_x_axis_vary_blocksize = [4, 8, 16, 32, 64, 128, 256, 512]
# Jump-ORAM
init_jump_y_axis = []
init_jump_breakdown_y_axis = []
jump_init_512KB_names = []
jump_init_20GB_names = []
init_jump_y_axis_20GB = []
init_jump_breakdown_y_axis_20GB = []
# Path-ORAM
init_path_y_axis = []
init_path_breakdown_y_axis = []
path_init_512KB_names = []
path_init_20GB_names = []
init_path_y_axis_20GB = []
init_path_breakdown_y_axis_20GB = []
# S3ORAM
init_s3_y_axis = []
init_s3_breakdown_y_axis = []
s3_init_512KB_names = []
s3_init_20GB_names = []
init_s3_y_axis_20GB = []
init_s3_breakdown_y_axis_20GB = []
#direct_access
init_direct_y_axis = []
init_direct_breakdown_y_axis = []
direct_init_512KB_names = []
direct_init_20GB_names = []
init_direct_y_axis_20GB = []
init_direct_breakdown_y_axis_20GB = []

path_list = os.listdir(path)
for filename in path_list:
    fname_list =  filename.split('_')
    if 'JUMP' in fname_list:
        if 'build' in fname_list:
            if "512KB" in fname_list:
                jump_init_512KB_names.append(filename)
            if '20GB' in fname_list:
                jump_init_20GB_names.append(filename)
    if 'Path' in fname_list:
        if 'build' in fname_list:
            for fname in fname_list:
                if "512KB" in fname:
                    path_init_512KB_names.append(filename)
            if '20GB' in fname_list:
                    path_init_20GB_names.append(filename)
    if 'S3ORAM' in fname_list:
        if 'build' in fname_list:
            if "512KB" in fname_list:
                s3_init_512KB_names.append(filename)
            if "20GB" in fname_list:
                s3_init_20GB_names.append(filename)
    if 'DIRECT' in fname_list:
        if 'build' in fname_list:
            if "512KB" in fname_list:
                direct_init_512KB_names.append(filename)
            if "20GB" in fname_list:
                direct_init_20GB_names.append(filename)
# sort out the names with 20GB in increasing order
path_init_20GB_names.sort(key = takeBlockSize)
jump_init_20GB_names.sort(key = takeBlockSize)
direct_init_20GB_names.sort(key = takeBlockSize)
s3_init_20GB_names.sort(key = takeBlockSize, reverse = True)
path_init_20GB_names.pop()
jump_init_20GB_names.pop()
direct_init_20GB_names.pop()
s3_init_20GB_names.pop()
'''The presentation for 20 GB'''
# print(s3_init_20GB_names)
# print(path_init_20GB_names)
# print(jump_init_20GB_names)
# print(direct_init_20GB_names)        
      

path_init_512KB_names.sort(key = takeDBsizeJump)        
jump_init_512KB_names.sort(key = takeDBsizeJump)
direct_init_512KB_names.sort(key = takeDBsizeJump)
s3_init_512KB_names.sort(key = takeDBsizeS3)

# '''test codes'''
print(s3_init_512KB_names)
print(path_init_512KB_names)
print(jump_init_512KB_names)
print(direct_init_512KB_names)
def getAxisY(names, y_axis, breakdown_y_axis):
    for name in names:
        file_name = path + '/' + name
        sum = 0.0
        breakdown_y_axis_ele = []
        with open(file_name, 'r') as f:
            data = f.read().split()
        for d in data:
            breakdown_y_axis_ele.append(float(d) / math.pow(10, 9))
            sum += float(d)
        y_axis.append(sum / math.pow(10, 9))
        breakdown_y_axis.append(breakdown_y_axis_ele)
def getAxisY_jump(names, y_axis, breakdown_y_axis):
    for name in names:
        file_name = path + '/' + name
        sum = 0.0
        breakdown_y_axis_ele = []
        with open(file_name, 'r') as f:
            data = f.read().split()
        for d in data:
            temp = float(d) * 1.5 
            breakdown_y_axis_ele.append(temp / math.pow(10, 9))
            sum += temp
        y_axis.append(sum / math.pow(10, 9))
        breakdown_y_axis.append(breakdown_y_axis_ele)

# for name in jump_init_512KB_names:
#     file_name = path + '/' + name
#     sum = 0.0
#     init_jump_breakdown_y_axis_ele = []
#     with open(file_name, 'r') as f:
#         data = f.read().split()
#     for d in data:
#         init_jump_breakdown_y_axis_ele.append(float(d) / math.pow(10, 9))
#         sum += float(d)
#     init_jump_y_axis.append(sum / math.pow(10, 9))
#     init_jump_breakdown_y_axis.append(init_jump_breakdown_y_axis_ele)
pre_build_name = 'processedData/build_20GB_allBlock_'
#pre_build_name = 'processedData/build_512KB_allDB_'
'''write processed data into file'''
# jump-ORAM
# getAxisY_jump(jump_init_512KB_names, init_jump_y_axis, init_jump_breakdown_y_axis)
# jump_init_name = pre_build_name + "jump.txt"
# with open(jump_init_name, 'w') as f:
#     f.write("The whole initialization time for all database sizes:n")
#     for v in init_jump_y_axis:
#         f.write(str(v) + ' ')
#     f.write("nThe breakdown cost of initialization time fo all database sizes:n")
#     for values in init_jump_breakdown_y_axis:
#         for v in values:
#             f.write(str(v) + ' ')
#         f.write('n')
# for i in init_jump_breakdown_y_axis:
#     print(i)
# for i in init_jump_y_axis:
#     print(i)
# path-ORAM
# getAxisY(path_init_512KB_names, init_path_y_axis, init_path_breakdown_y_axis)
# path_init_name = pre_build_name + "path.txt"
# with open(path_init_name, 'w') as f:
#     f.write("The whole initialization time for all database sizes:n")
#     for v in init_path_y_axis:
#         f.write(str(v) + ' ')
#     f.write("nThe breakdown cost of initialization time fo all database sizes:n")
#     for values in init_path_breakdown_y_axis:
#         for v in values:
#             f.write(str(v) + ' ')
#         f.write('n')
'''jump-ORAM with 20GB database'''
getAxisY(jump_init_20GB_names, init_jump_y_axis_20GB, init_jump_breakdown_y_axis_20GB)
jump_init_name = pre_build_name + "jump.txt"
with open(jump_init_name, 'w') as f:
    f.write("The whole initialization time for all database sizes:n")
    for v in init_jump_y_axis_20GB:
        f.write(str(v) + ' ')
    f.write("nThe breakdown cost of initialization time fo all database sizes:n")
    for values in init_jump_breakdown_y_axis_20GB:
        for v in values:
            f.write(str(v) + ' ')
        f.write('n')
'''Path-ORAM with 20GB database'''
getAxisY(path_init_20GB_names, init_path_y_axis_20GB, init_path_breakdown_y_axis_20GB)
path_init_name = pre_build_name + "path.txt"
with open(path_init_name, 'w') as f:
    f.write("The whole initialization time for all database sizes:n")
    for v in init_path_y_axis_20GB:
        f.write(str(v) + ' ')
    f.write("nThe breakdown cost of initialization time fo all database sizes:n")
    for values in init_path_breakdown_y_axis_20GB:
        for v in values:
            f.write(str(v) + ' ')
        f.write('n')
# s3ORAM
# getAxisY(s3_init_512KB_names, init_s3_y_axis, init_s3_breakdown_y_axis)
# s3_init_name = pre_build_name + "s3oram.txt"
# with open(s3_init_name, 'w') as f:
#     f.write("The whole initialization time for all database sizes:n")
#     for v in init_s3_y_axis:
#         f.write(str(v) + ' ')
#     f.write("nThe breakdown cost of initialization time fo all database sizes:n")
#     for values in init_s3_breakdown_y_axis:
#         for v in values:
#             f.write(str(v) + ' ')
#         f.write('n')
'''S3-ORAM with 20GB database'''
getAxisY(s3_init_20GB_names, init_s3_y_axis_20GB, init_s3_breakdown_y_axis_20GB)
s3_init_name = pre_build_name + "s3oram.txt"
with open(s3_init_name, 'w') as f:
    f.write("The whole initialization time for all database sizes:n")
    for v in init_s3_y_axis_20GB:
        f.write(str(v) + ' ')
    f.write("nThe breakdown cost of initialization time fo all database sizes:n")
    for values in init_s3_breakdown_y_axis_20GB:
        for v in values:
            f.write(str(v) + ' ')
        f.write('n')
# direct_access
# getAxisY(direct_init_512KB_names, init_direct_y_axis, init_direct_breakdown_y_axis)
# direct_init_name = pre_build_name + "direct.txt"
# with open(direct_init_name, 'w') as f:
#     f.write("The whole initialization time for all database sizes:n")
#     for v in init_direct_y_axis:
#         f.write(str(v) + ' ')
#     f.write("nThe breakdown cost of initialization time fo all database sizes:n")
#     for values in init_direct_breakdown_y_axis:
#         for v in values:
#             f.write(str(v) + ' ')
#         f.write('n')
'''direct-ORAM with 20GB database'''
getAxisY(direct_init_20GB_names, init_direct_y_axis_20GB, init_direct_breakdown_y_axis_20GB)
direct_init_name = pre_build_name + "direct.txt"
with open(direct_init_name, 'w') as f:
    f.write("The whole initialization time for all database sizes:n")
    for v in init_direct_y_axis_20GB:
        f.write(str(v) + ' ')
    f.write("nThe breakdown cost of initialization time fo all database sizes:n")
    for values in init_direct_breakdown_y_axis_20GB:
        for v in values:
            f.write(str(v) + ' ')
        f.write('n')
# draw the line graph
'''512KB'''
# plt.plot(init_x_axis, init_path_y_axis, 'x:b', label = '$Path$-$ORAM$')
# plt.plot(init_x_axis, init_s3_y_axis, marker = 'o', linestyle = '--' ,color = "#800080", label = '$S^{3}$'+ '$ORAM$')
# plt.plot(init_x_axis, init_jump_y_axis, 's-b', label = '$Jump$-$ORAM$')
# plt.plot(init_x_axis, init_direct_y_axis, '^-.r', label = "$Direct$-$Access$")
# plt.legend()
# plt.xlabel("Database size (GB)")
# plt.ylabel("Delay (second)")
# plt.show()
'''20GB'''
plt.plot(init_x_axis_vary_blocksize, init_path_y_axis_20GB, 'x:b', label = '$Path$-$ORAM$')
plt.plot(init_x_axis_vary_blocksize, init_s3_y_axis_20GB, marker = 'o', linestyle = '--' ,color = "#800080", label = '$S^{3}$'+ '$ORAM$')
plt.plot(init_x_axis_vary_blocksize, init_jump_y_axis_20GB, 's-b', label = '$Jump$-$ORAM$')
plt.plot(init_x_axis_vary_blocksize, init_direct_y_axis_20GB, '^-.r', label = "$Direct$-$Access$")
plt.legend()
plt.xlabel("Block size (KB)")
plt.ylabel("Delay (second)")
plt.show()
#draw three bar graph
'''Jump-ORAM'''
# layer = []
# row_num = len(init_jump_breakdown_y_axis)
# col_num = len(init_jump_breakdown_y_axis[0])
# for j in range(0, col_num):
#     temp_layer = []
#     for i in range(0, row_num):
#         temp_layer.append(init_jump_breakdown_y_axis[i][j])
#     layer.append(temp_layer)
# layer_0 = np.array(layer[0])
# layer_1 = np.array(layer[1])
# layer_2 = np.array(layer[2])
# jump_label = ['Build metadata', 'Create database', 'Send database to the server']
# p1 = plt.bar(init_x_axis, layer_0, width = 0.4, bottom=layer_1+layer_2, label=jump_label[0], color = 'red')
# p2 = plt.bar(init_x_axis, layer_1, width = 0.4, label = jump_label[1], color='orange', bottom=layer_2)
# p3 = plt.bar(init_x_axis, layer_2, width = 0.4, label = jump_label[2], color='purple')
# plt.xlabel("Database size (GB)")
# plt.ylabel("Delay (second)")
# plt.legend()
# plt.show()
'''Path-ORAM'''
# layer = []
# row_num = len(init_path_breakdown_y_axis)
# col_num = len(init_path_breakdown_y_axis[0])
# for j in range(0, col_num):
#     temp_layer = []
#     for i in range(0, row_num):
#         temp_layer.append(init_path_breakdown_y_axis[i][j])
#     layer.append(temp_layer)
# print(layer)
# layer_0 = np.array(layer[0])
# layer_1 = np.array(layer[1])
# layer_2 = np.array(layer[2])
# layer_3 = np.array(layer[3])
# path_label = ['Create database with dummy blocks', 'Build metadata','Insert real blocks into database', 'Send database to the server']
# p1 = plt.bar(init_x_axis, layer_0, width = 0.4, label=path_label[0], color = 'orange', bottom = layer_3+layer_1+layer_2)
# p2 = plt.bar(init_x_axis, layer_1, width = 0.4, label = path_label[1], color='red', bottom = layer_2+layer_3)
# p3 = plt.bar(init_x_axis, layer_2, width = 0.4, bottom=layer_3, label = path_label[2], color='orange', hatch='/')
# p4 = plt.bar(init_x_axis, layer_3, width = 0.4, label = path_label[3], color='purple')
# plt.xlabel("Database size (GB)")
# plt.ylabel("Delay (second)")
# plt.legend()
# plt.show()

'''S3-ORAM'''
# layer = []
# row_num = len(init_s3_breakdown_y_axis)
# col_num = len(init_s3_breakdown_y_axis[0])
# for j in range(0, col_num):
#     temp_layer = []
#     for i in range(0, row_num):
#         temp_layer.append(init_s3_breakdown_y_axis[i][j])
#     layer.append(temp_layer)
# print(layer)
# layer_0 = np.array(layer[0]) + np.array(layer[2])
# layer_1 = np.array(layer[1])
# layer_2 = np.array(layer[3])
# path_label = ['Build metadata','Create database', 'Send database to the server']
# p1 = plt.bar(init_x_axis, layer_0, width = 0.4, label=path_label[0], color = 'red', bottom=layer_1+layer_2)
# p2 = plt.bar(init_x_axis, layer_1, width = 0.4, label = path_label[1], color='orange', bottom=layer_2)
# p3 = plt.bar(init_x_axis, layer_2, width = 0.4, label = path_label[2], color='purple')
# plt.xlabel("Database size (GB)")
# plt.ylabel("Delay (second)")
# plt.legend()
# plt.show()
The code 2
from itertools import combinations
import os
import re
import math
from this import d
from xmlrpc import client
import matplotlib.pyplot as plt
import numpy as np
'''parameters'''
# x_axis
#access_x_axis_vary_db_size = [0.5, 1, 2.5, 5, 10, 20]
access_x_axis_vary_db_size = ['0.5', '1', '2.5', '5', '10', '20']
access_x_axis_vary_block_size = [4, 8, 16, 32, 64, 128, 256, 512]
#access_x_axis_vary_block_size = ['4', '8', '16', '32', '64', '128', '256', '512']
# files 
path_directory = 'totalLog'
dir_list = os.listdir(path_directory)

# Jump-ORAM
'''varying block sizes for 20GB database'''
access_jump_y_axis_20GB_names = []
access_breakdown_jump_y_axis_20GB_names = []
access_jump_y_axis_20GB_values = []
'''varying database sizes for 512KB block size'''
access_jump_y_axis_512KB_names = []
access_breakdown_jump_y_axis_512KB_names = []
access_jump_y_axis_512KB_values = []
access_breakdown_jump_y_axis_512KB_values = []
# Direct-Access
'''varying block sizes for 20GB database'''
access_direct_y_axis_20GB_names = []
access_breakdown_direct_y_axis_20GB_names = []
access_direct_y_axis_20GB_values = []
'''varying database sizes for 512KB block size'''
access_direct_y_axis_512KB_names = []
access_breakdown_direct_y_axis_512KB_names = []
access_direct_y_axis_512KB_values = []


# Path-ORAM
'''varying block sizes for 20GB database'''
access_path_y_axis_20GB_names = []
access_breakdown_path_y_axis_20GB_names = []
access_path_y_axis_20GB_values = []
'''varying database sizes for 512KB block size'''
access_path_y_axis_512KB_names = []
access_breakdown_path_y_axis_512KB_names = []
access_path_y_axis_512KB_values = []
access_breakdown_path_y_axis_512KB_values = []
access_encrypted_path_y_axis_512KB_names = []
access_encrypted_path_y_axis_512KB_values = []
access_decrypted_path_y_axis_512KB_names = []
access_decrypted_path_y_axis_512KB_values = []
access_recvData_path_y_axis_512KB_names = []
access_recvData_path_y_axis_512KB_values = []
access_sendData_path_y_axis_512KB_names = []
access_sendData_path_y_axis_512KB_values = []
access_downToDisk_path_y_axis_512KB_names = []
access_downToDisk_path_y_axis_512KB_values = []
evict_downToDisk_path_y_axis_512KB_names = []
evict_downToDisk_path_y_axis_512KB_values = []
evict_encrypted_path_y_axis_512KB_names = []
evict_encrypted_path_y_axis_512KB_values = []
evict_decrypted_path_y_axis_512KB_names = []
evict_decrypted_path_y_axis_512KB_values = []
evict_recvData_path_y_axis_512KB_names = []
evict_recvData_path_y_axis_512KB_values = []
evict_sendData_path_y_axis_512KB_names = []
evict_sendData_path_y_axis_512KB_values = []
# S3-ORAM
'''varying block sizes for 20GB database'''
access_s3_y_axis_20GB_names = []
access_breakdown_s3_y_axis_20GB_names = []
access_s3_y_axis_20GB_values = []
access_s3_server_0_y_axis_20GB_names = []
access_s3_server_1_y_axis_20GB_names = []
access_s3_server_2_y_axis_20GB_names = []
'''varying database sizes for 512KB block size'''
access_s3_y_axis_512KB_names = []
access_s3_server_0_y_axis_512KB_names = []
access_s3_server_1_y_axis_512KB_names = []
access_s3_server_2_y_axis_512KB_names = []
access_s3_y_axis_512KB_values = []
access_breakdown_s3_y_axis_512KB_values = []
access_client_s3_y_axis_512KB_values = []
access_s3_server_0_y_axis_512KB_values = []
access_s3_server_1_y_axis_512KB_values = []
access_s3_server_2_y_axis_512KB_values = []

# functions for sorting files
def takeBlockSize(ele):
    return float(re.findall(r"_(.*?)KB", ele)[0])

def takeDBSize(ele):
    return float(re.findall(r"^(.*?)GB", ele)[0])
def takeDBsizeS3(ele):
    return float(re.findall(r"KB_(.*?)GB", ele)[0])

# get the corresponding file names
for file_name in dir_list:
    fname_list = file_name.split('_')
    if 'JUMP' in fname_list:
        if 'access' in fname_list:
            if '20GB' in fname_list:
                if 'breakdown' in fname_list:
                    access_breakdown_jump_y_axis_20GB_names.append(file_name)
                else:
                    access_jump_y_axis_20GB_names.append(file_name)
            if '512KB' in fname_list:
                if 'breakdown' in fname_list:
                    access_breakdown_jump_y_axis_512KB_names.append(file_name)
                else:
                    access_jump_y_axis_512KB_names.append(file_name)
    if 'DIRECT' in fname_list:
        if 'access' in fname_list:
            if '20GB' in fname_list:
                if 'breakdown' in fname_list:
                    access_breakdown_direct_y_axis_20GB_names.append(file_name)
                else:
                    access_direct_y_axis_20GB_names.append(file_name)
            if '512KB' in fname_list:
                if 'breakdown' in fname_list:
                    access_breakdown_direct_y_axis_512KB_names.append(file_name)
                else:
                    access_direct_y_axis_512KB_names.append(file_name)
    if 'Path' in fname_list:
        if 'ORAM' in fname_list:
            if 'access' in fname_list:
                if '20GB' in fname_list:
                    access_path_y_axis_20GB_names.append(file_name)
                if re.findall(r"_(.*?)KB", file_name)[0] == '512':
                    access_path_y_axis_512KB_names.append(file_name)
        else:
            if 'access' in fname_list:
                if re.findall(r"_(.*?)KB", file_name)[0] == '512':
                    if 'encrypted' in fname_list:
                        access_encrypted_path_y_axis_512KB_names.append(file_name)
                    elif 'decrypted' in fname_list:
                        access_decrypted_path_y_axis_512KB_names.append(file_name)
                    elif 'revcData' in fname_list:
                        access_recvData_path_y_axis_512KB_names.append(file_name)
                    elif 'sendData' in fname_list:
                        access_sendData_path_y_axis_512KB_names.append(file_name)
            elif 'downToDisk' in fname_list:
                if re.findall(r"_(.*?)KB", file_name)[0] == '512':
                    if 'evict' in fname_list:
                        evict_downToDisk_path_y_axis_512KB_names.append(file_name)
                    else:
                        access_downToDisk_path_y_axis_512KB_names.append(file_name)
            elif 'evict' in fname_list:
                if re.findall(r"_(.*?)KB", file_name)[0] == '512':
                    if 'encrypted' in fname_list:
                        evict_encrypted_path_y_axis_512KB_names.append(file_name)
                    elif 'decrypted' in fname_list:
                        evict_decrypted_path_y_axis_512KB_names.append(file_name)
                    elif 'recvData' in fname_list:
                        evict_recvData_path_y_axis_512KB_names.append(file_name)
                    elif 'sendData' in fname_list:
                        evict_sendData_path_y_axis_512KB_names.append(file_name)
    if 'S3ORAM' in fname_list:
        if 'access' in fname_list:
            if '20GB' in fname_list:
                access_s3_y_axis_20GB_names.append(file_name)
            if '512KB' in fname_list:
                access_s3_y_axis_512KB_names.append(file_name)
        else:
            if 'SERVER' in fname_list:
                if '20GB' in fname_list:
                    if '0' in fname_list:
                        access_s3_server_0_y_axis_20GB_names.append(file_name)
                    elif '1' in fname_list:
                        access_s3_server_1_y_axis_20GB_names.append(file_name)
                    elif '2' in fname_list:
                        access_s3_server_2_y_axis_20GB_names.append(file_name)
                if '512KB' in fname_list:
                    if '0' in fname_list:
                        access_s3_server_0_y_axis_512KB_names.append(file_name)
                    elif '1' in fname_list:
                        access_s3_server_1_y_axis_512KB_names.append(file_name)
                    elif '2' in fname_list:
                        access_s3_server_2_y_axis_512KB_names.append(file_name)

# print(access_jump_y_axis_512KB_names)
# print(access_breakdown_jump_y_axis_512KB_names)
# print(access_direct_y_axis_512KB_names)
# print(access_breakdown_direct_y_axis_512KB_names)
# print(access_path_y_axis_512KB_names)        
# print(access_s3_y_axis_512KB_names)
# print(access_s3_server_0_y_axis_512KB_names)
# print(access_s3_server_1_y_axis_512KB_names)
# print(access_s3_server_2_y_axis_512KB_names)


    
# sort out the files list in increasing order
'''varying block sizes for 20GB database'''
access_jump_y_axis_20GB_names.sort(key = takeBlockSize)
access_breakdown_jump_y_axis_20GB_names.sort(key = takeBlockSize)
access_direct_y_axis_20GB_names.sort(key = takeBlockSize)
access_breakdown_direct_y_axis_20GB_names.sort(key = takeBlockSize)
access_path_y_axis_20GB_names.sort(key = takeBlockSize)
access_breakdown_path_y_axis_20GB_names.sort(key = takeBlockSize)
access_s3_y_axis_20GB_names.sort(key = takeBlockSize, reverse = True)
access_s3_server_0_y_axis_20GB_names.sort(key = takeBlockSize, reverse = True)
access_s3_server_1_y_axis_20GB_names.sort(key = takeBlockSize, reverse = True)
access_s3_server_2_y_axis_20GB_names.sort(key = takeBlockSize, reverse = True)
'''varying database sizes for 512KB block size'''
access_jump_y_axis_512KB_names.sort(key = takeDBSize)
access_breakdown_jump_y_axis_512KB_names.sort(key = takeDBSize)
access_direct_y_axis_512KB_names.sort(key = takeDBSize)
access_path_y_axis_512KB_names.sort(key = takeDBSize)
access_s3_y_axis_512KB_names.sort(key = takeDBsizeS3)
access_s3_server_0_y_axis_512KB_names.sort(key = takeDBsizeS3)
access_s3_server_1_y_axis_512KB_names.sort(key = takeDBsizeS3)
access_s3_server_2_y_axis_512KB_names.sort(key = takeDBsizeS3)
# the breakdown cost file for Path-ORAM
access_encrypted_path_y_axis_512KB_names.sort(key = takeDBSize)
access_decrypted_path_y_axis_512KB_names.sort(key = takeDBSize)
access_recvData_path_y_axis_512KB_names.sort(key = takeDBSize)
access_sendData_path_y_axis_512KB_names.sort(key = takeDBSize)
evict_encrypted_path_y_axis_512KB_names.sort(key = takeDBSize)
evict_decrypted_path_y_axis_512KB_names.sort(key = takeDBSize)
evict_recvData_path_y_axis_512KB_names.sort(key = takeDBSize)
evict_sendData_path_y_axis_512KB_names.sort(key = takeDBSize)
access_downToDisk_path_y_axis_512KB_names.sort(key = takeDBSize)
evict_downToDisk_path_y_axis_512KB_names.sort(key = takeDBSize)

# remove the file with 1024KB 
access_jump_y_axis_20GB_names.pop() 
access_breakdown_jump_y_axis_20GB_names.pop()
access_direct_y_axis_20GB_names.pop() 
access_breakdown_direct_y_axis_20GB_names.pop()
access_path_y_axis_20GB_names.pop()
#access_breakdown_path_y_axis_20GB_names.pop() 
access_s3_y_axis_20GB_names.pop()
access_s3_server_0_y_axis_20GB_names.pop()
access_s3_server_1_y_axis_20GB_names.pop()
access_s3_server_2_y_axis_20GB_names.pop()

'''test the breakdown cost file for Path-ORAM'''
# print(access_encrypted_path_y_axis_512KB_names)
# print(access_decrypted_path_y_axis_512KB_names)
# print(access_recvData_path_y_axis_512KB_names)
# print(access_sendData_path_y_axis_512KB_names)
# print(evict_encrypted_path_y_axis_512KB_names)
# print(evict_decrypted_path_y_axis_512KB_names)
# print(evict_recvData_path_y_axis_512KB_names)
# print(evict_sendData_path_y_axis_512KB_names)
# print(access_downToDisk_path_y_axis_512KB_names)
# print(evict_downToDisk_path_y_axis_512KB_names)
# print(access_s3_y_axis_20GB_names)
# print(access_s3_server_0_y_axis_20GB_names)
# print(access_s3_server_1_y_axis_20GB_names)
# print(access_s3_server_2_y_axis_20GB_names)
#print(access_breakdown_path_y_axis_20GB_names)
#print(access_path_y_axis_20GB_names)

# print(access_jump_y_axis_512KB_names)
#print(access_breakdown_jump_y_axis_512KB_names)
# print(access_direct_y_axis_512KB_names)
# print(access_breakdown_direct_y_axis_512KB_names)
# print(access_path_y_axis_512KB_names)        
# print(access_s3_y_axis_512KB_names)
# print(access_s3_server_0_y_axis_512KB_names)
# print(access_s3_server_1_y_axis_512KB_names)
# print(access_s3_server_2_y_axis_512KB_names)

# append the breakdown cost names into access_breakdown_path_y_axis_512KB_names
access_breakdown_path_y_axis_512KB_names.append(access_encrypted_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(access_decrypted_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(access_recvData_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(access_sendData_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(evict_encrypted_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(evict_decrypted_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(evict_recvData_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(evict_sendData_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(access_downToDisk_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_names.append(evict_downToDisk_path_y_axis_512KB_names)
access_breakdown_path_y_axis_512KB_values_list  = []
# append all the breakdown cost values into access_breakdown_path_y_axis_512KB_values_list
access_breakdown_path_y_axis_512KB_values_list.append(access_encrypted_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(access_decrypted_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(access_recvData_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(access_sendData_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(evict_encrypted_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(evict_decrypted_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(evict_recvData_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(evict_sendData_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(access_downToDisk_path_y_axis_512KB_values)
access_breakdown_path_y_axis_512KB_values_list.append(evict_downToDisk_path_y_axis_512KB_values)

'''collect the data from the file in above list and fill up the access_jump_y_axis_20GB_values'''
def getAxisVal(names, y_axis_values):
    for name in names:
        file_name = path_directory + '/' + name
        with open(file_name, 'r') as f:
            data = f.read().split()
            data_float = map(float, data)
            tot_val = sum(data_float)
            avg_val = tot_val / len(data)
        y_axis_values.append(avg_val / math.pow(10, 9))
def getAxisValS3(names, names_0, names_1, names_2, y_axis_values):
    total_count = 1000
    for i in range(len(names)):
        sum_val = 0
        data_client_np = np.array(list(map(lambda x: x * 0.0, range(9))))
        file_name = path_directory + '/' + names[i]
        with open(file_name, 'r') as f:
            data_lines = f.readlines()
            for data_line in data_lines:
                data_list = data_line.split()
                data_float = []
                for data in data_list:
                    sum_val += float(data)
                    data_float.append(float(data))
                data_client_np = np.add(data_client_np, np.array(data_float))
        data_client_np_avg = data_client_np / math.pow(10, 12)
        access_client_s3_y_axis_512KB_values.append(data_client_np_avg.tolist())
        data_server_np = np.array(list(map(lambda x: x * 0.0, range(13))))
        data_server_1_np = np.array(list(map(lambda x: x * 0.0, range(13))))
        data_server_2_np = np.array(list(map(lambda x: x * 0.0, range(13))))
        file_name_0 = path_directory + '/' + names_0[i]
        with open(file_name_0, 'r') as f:
            data_lines = f.readlines()
            for data_line in data_lines:
                for data in data_line.split():
                    sum_val += float(data)
                # add all elements in data_lines to data_float
                data_list = list(map(float, data_line.split()))
                data_float = np.array(data_list)
                data_server_np = np.add(data_server_np, data_float)
        data_server_np_avg = data_server_np / math.pow(10, 12)
        access_s3_server_0_y_axis_512KB_values.append(data_server_np_avg.tolist())
        file_name_1 = path_directory + '/' + names_1[i]
        with open(file_name_1, 'r') as f:
            data_lines = f.readlines()
            for data_line in data_lines:
                for data in data_line.split():
                    sum_val += float(data)
                # add all elements in data_lines to data_float
                data_list = list(map(float, data_line.split()))
                data_float = np.array(data_list)
                data_server_1_np = np.add(data_server_1_np, data_float)
        data_server_1_np_avg = data_server_1_np / math.pow(10, 12)
        access_s3_server_1_y_axis_512KB_values.append(data_server_1_np_avg.tolist())
        file_name_2 = path_directory + '/' + names_2[i]
        with open(file_name_2, 'r') as f:
            data_lines = f.readlines()
            for data_line in data_lines:
                for data in data_line.split():
                    sum_val += float(data)
                # add all elements in data_lines to data_float
                data_list = list(map(float, data_line.split()))
                data_float = np.array(data_list)
                data_server_2_np = np.add(data_server_2_np, data_float)
        data_server_2_np_avg = data_server_2_np / math.pow(10, 12)
        access_s3_server_2_y_axis_512KB_values.append(data_server_2_np_avg.tolist())
        y_axis_values.append((sum_val / total_count) / math.pow(10, 9))
pre_build_name = 'processedData/'
def write_list_to_file(list_vals, file_name):
    dir_path = pre_build_name + file_name + '.txt'
    with open(dir_path, 'w') as f:
        f.write("The total access time for all block sizes:n")
        for item in list_vals:
            f.write("%f " % item)
def breakdown_write_list_to_file(list_vals, file_name):
    dir_path = pre_build_name + file_name + '.txt'
    with open(dir_path, 'w') as f:
        f.write("The breakdown cost of access time for all block sizes:n")
        for list_line in list_vals:
            for item in list_line:
                f.write("%f " % item)
            f.write("n")
def getBreakdownAxisVal(names, y_axis_breakdown_values):
    for name in names:
        # initialize the res_sum as numpy array 
        res_sum = np.zeros(3)
        file_name = path_directory + '/' + name
        with open(file_name, 'r') as f:
            data_lines = f.readlines()
            line_numbers = len(data_lines)
            for data_line in data_lines:
                data_list = []
                res = []  # client computation; Client-server communication; Disk I/O access
                for data in data_line.split():
                    data_list.append(float(data))
                res.append(data_list[0] + data_list[2] + data_list[3] + data_list[4])
                res.append(data_list[1] + data_list[5])
                res.append(data_list[6])
                # convert the res to numpy array
                res_sum += np.array(res)
        # all elements in res_sum are divided by the line numbers
        res_sum = res_sum / (line_numbers * math.pow(10, 9))
        y_axis_breakdown_values.append(res_sum.tolist())
def update_access_breakdown_512KB(access_y_axis_values, access_y_axis_breakdown_values):
    n = len(access_y_axis_values)
    for i in range(n):
        sum = 0.0
        for val in access_y_axis_breakdown_values[i]:
            sum += val
        access_y_axis_breakdown_values[i][2] += access_y_axis_values[i] - sum
# the order for breakdown cost of Path-ORAM : client computation; Client-server communication; Disk I/O access
def getBreakdownAxisValPath(breakdown_names, breakdown_values_list, access_y_axis_breakdown_values):
    n = len(breakdown_names)
    for i in range(n):
        for name in breakdown_names[i]:
            with open(path_directory + '/' + name, 'r') as f:
                data_lines = f.readlines()
                total_val = 0.0
                for data_line in data_lines:
                    data = data_line.split()
                    data = map(float, data)
                    # summarize all the values in data
                    total_val += sum(data)
                breakdown_values_list[i].append(total_val / math.pow(10, 12))
    access_y_axis_breakdown_values.append((np.array(breakdown_values_list[0]) + np.array(breakdown_values_list[1]) + np.array(breakdown_values_list[4]) + np.array(breakdown_values_list[5])).tolist())
    access_y_axis_breakdown_values.append((np.array(breakdown_values_list[2]) + np.array(breakdown_values_list[3]) + np.array(breakdown_values_list[6] + np.array(breakdown_values_list[7]))).tolist())
    access_y_axis_breakdown_values.append((np.array(breakdown_values_list[8]) + np.array(breakdown_values_list[9])).tolist())
def update_access_breakdown_512KB_path(access_y_axis_values, access_y_axis_breakdown_values):
    # convert access_y_axis_breakdown_values into numpy array and get the sum of all elements in each column
    access_y_axis_breakdown_values_np = np.array(access_y_axis_breakdown_values)
    access_y_axis_breakdown_values_sum = np.sum(access_y_axis_breakdown_values_np, axis=0)
    row = len(access_y_axis_breakdown_values)
    diff_list = np.array(access_y_axis_values) - access_y_axis_breakdown_values_sum
    last_val_list = (np.array(access_y_axis_breakdown_values[row - 1]) + diff_list).tolist()
    access_y_axis_breakdown_values.pop()
    access_y_axis_breakdown_values.append(last_val_list)
# Jump-ORAM
getAxisVal(access_jump_y_axis_20GB_names, access_jump_y_axis_20GB_values)
getAxisVal(access_jump_y_axis_512KB_names, access_jump_y_axis_512KB_values)
write_list_to_file(access_jump_y_axis_20GB_values, 'access_20GB_allBlocksize_jump')
write_list_to_file(access_jump_y_axis_512KB_values, 'access_512KB_allDBsize_jump')
'''The breakdown of the access time for all database sizes'''
getBreakdownAxisVal(access_breakdown_jump_y_axis_512KB_names, access_breakdown_jump_y_axis_512KB_values)
update_access_breakdown_512KB(access_jump_y_axis_512KB_values, access_breakdown_jump_y_axis_512KB_values)
# swap the row with column in access_breakdown_jump_y_axis_512KB_values
n = len(access_breakdown_jump_y_axis_512KB_values[0])
temp_y_axis_512KB_values = np.array(access_breakdown_jump_y_axis_512KB_values)
# clear the content of access_breakdown_jump_y_axis_512KB_values
access_breakdown_jump_y_axis_512KB_values.clear()
for i in range(n):
    access_breakdown_jump_y_axis_512KB_values.append(temp_y_axis_512KB_values[:, i].tolist())
breakdown_write_list_to_file(access_breakdown_jump_y_axis_512KB_values, 'access_breakdown_512KB_jump')
# direct-access
getAxisVal(access_direct_y_axis_20GB_names, access_direct_y_axis_20GB_values)
getAxisVal(access_direct_y_axis_512KB_names, access_direct_y_axis_512KB_values)
write_list_to_file(access_direct_y_axis_20GB_values, 'access_20GB_allBlocksize_direct')
write_list_to_file(access_direct_y_axis_512KB_values, 'access_512KB_allDBsize_direct')
# path-ORAM
getAxisVal(access_path_y_axis_20GB_names, access_path_y_axis_20GB_values)
getAxisVal(access_path_y_axis_512KB_names, access_path_y_axis_512KB_values)
write_list_to_file(access_path_y_axis_20GB_values, 'access_20GB_allBlocksize_path')
write_list_to_file(access_path_y_axis_512KB_values, 'access_512KB_allDBsize_path')

'''the Breakdown cost'''
getBreakdownAxisValPath(access_breakdown_path_y_axis_512KB_names, access_breakdown_path_y_axis_512KB_values_list, access_breakdown_path_y_axis_512KB_values)
update_access_breakdown_512KB_path(access_path_y_axis_512KB_values, access_breakdown_path_y_axis_512KB_values)
breakdown_write_list_to_file(access_breakdown_path_y_axis_512KB_values, 'access_breakdown_512KB_path')
# print(access_breakdown_path_y_axis_512KB_values)
# print(access_path_y_axis_512KB_values)
# S3ORAM
#getAxisValS3(access_s3_y_axis_20GB_names, access_s3_server_0_y_axis_20GB_names, access_s3_server_1_y_axis_20GB_names, access_s3_server_2_y_axis_20GB_names, access_s3_y_axis_20GB_values)
getAxisValS3(access_s3_y_axis_512KB_names, access_s3_server_0_y_axis_512KB_names, access_s3_server_1_y_axis_512KB_names, access_s3_server_2_y_axis_512KB_names, access_s3_y_axis_512KB_values)
write_list_to_file(access_s3_y_axis_20GB_values, 'access_20GB_allBlocksize_s3')
# print(access_client_s3_y_axis_512KB_values)
# print(access_s3_server_0_y_axis_512KB_values)
# print(access_s3_server_1_y_axis_512KB_values)
# print(access_s3_server_2_y_axis_512KB_values)
'''calculate the access_breakdown_s3_y_axis_512KB_values'''
client_matrix = np.array(access_client_s3_y_axis_512KB_values)
server_0_matrix = np.array(access_s3_server_0_y_axis_512KB_values)
server_1_matrix = np.array(access_s3_server_1_y_axis_512KB_values)
server_2_matrix = np.array(access_s3_server_2_y_axis_512KB_values)
c_computation = client_matrix[:, 0] + client_matrix[:, 1] + client_matrix[:, 3] + client_matrix[:, 4] + client_matrix[:, 6] + client_matrix[:, 7]
access_breakdown_s3_y_axis_512KB_values.append(c_computation.tolist())
c_s_communication = client_matrix[:, 5] + client_matrix[:, 8] + server_0_matrix[:, 0] + server_0_matrix[:, 3] + server_0_matrix[:, 4] + server_0_matrix[:, 6] + 
                    server_1_matrix[:, 0] + server_1_matrix[:, 3] + server_1_matrix[:, 4] + server_1_matrix[:, 6] +
                    server_2_matrix[:, 0] + server_2_matrix[:, 3] + server_2_matrix[:, 4] + server_2_matrix[:, 6]
access_breakdown_s3_y_axis_512KB_values.append(c_s_communication.tolist())
d_IO_access = server_0_matrix[:, 1] + server_0_matrix[:, 5] + server_0_matrix[:, 7] + server_0_matrix[:, 12] +
              server_1_matrix[:, 1] + server_1_matrix[:, 5] + server_1_matrix[:, 7] + server_1_matrix[:, 12] + 
              server_2_matrix[:, 1] + server_2_matrix[:, 5] + server_2_matrix[:, 7] + server_2_matrix[:, 12] 
access_breakdown_s3_y_axis_512KB_values.append(d_IO_access.tolist())
s_computation = client_matrix[:, 2] + 
                server_0_matrix[:, 2] + server_0_matrix[:, 8] + server_0_matrix[:, 9] + server_0_matrix[:, 10] + server_0_matrix[:, 11] +
                server_1_matrix[:, 2] + server_1_matrix[:, 8] + server_1_matrix[:, 9] + server_1_matrix[:, 10] + server_1_matrix[:, 11] +
                server_2_matrix[:, 2] + server_2_matrix[:, 8] + server_2_matrix[:, 9] + server_2_matrix[:, 10] + server_2_matrix[:, 11]
access_breakdown_s3_y_axis_512KB_values.append(s_computation.tolist())
print(access_breakdown_s3_y_axis_512KB_values)  
# '''draw the graph'''
# access delay for varying block sizes for a 20GB database
# plt.plot(access_x_axis_vary_block_size, access_s3_y_axis_20GB_values, marker = 'o', linestyle = '--' ,color = "#800080", label = '$S^3ORAM$')
# plt.plot(access_x_axis_vary_block_size, access_path_y_axis_20GB_values, 'x:b', label = '$Path$-$ORAM$')
# plt.plot(access_x_axis_vary_block_size, access_jump_y_axis_20GB_values, 's-b', label = '$Jump$-$ORAM$')
# plt.plot(access_x_axis_vary_block_size, access_direct_y_axis_20GB_values, '^-.r', label = "$Direct$-$Access$")
# plt.xlabel("Block size (KB)")
# plt.ylabel("Delay (second)")
# #plt.title('access delay for varying block size for a 20 GB DB',fontsize='large', fontweight='bold')
# plt.legend()
# plt.show()
# access delay for varying DB size for a 512KB block size
# plt.plot(access_x_axis_vary_db_size, access_s3_y_axis_512KB_values, marker = 'o', linestyle = '--' ,color = "#800080", label = '$S^3ORAM$')
# plt.plot(access_x_axis_vary_db_size, access_path_y_axis_512KB_values, 'x:b', label = '$Path$-$ORAM$')
# plt.plot(access_x_axis_vary_db_size, access_jump_y_axis_512KB_values, 's-b', label = '$Jump$-$ORAM$')
# plt.plot(access_x_axis_vary_db_size, access_direct_y_axis_512KB_values, '^-.r', label = "$Direct$-$Access$")
# plt.xlabel("Database size (GB)")
# plt.ylabel("Delay (second)")
# #plt.title('access delay for varying DB size for a 512 KB block size',fontsize='large', fontweight='bold')
# plt.legend()
# plt.show()

# draw a Stacked bar Chart with the access_breakdown_jump_y_axis_512KB_values as y-axis and access_x_axis_vary_db_size as x-axis
lables = ['Client computation', 'Client-server communication', 'Disk I/O access', 'Server computation']
colors = ['#ff00a6', '#7ef05b', '#0000FF', '#ff5e00']
# Jump-ORAM
# plt.bar(access_x_axis_vary_db_size, access_breakdown_jump_y_axis_512KB_values[2], bottom = np.array(access_breakdown_jump_y_axis_512KB_values[0]) + np.array(access_breakdown_jump_y_axis_512KB_values[1]).tolist(), color = colors[2], label = lables[2], width = 0.4)
# plt.bar(access_x_axis_vary_db_size, access_breakdown_jump_y_axis_512KB_values[1], bottom = access_breakdown_jump_y_axis_512KB_values[0], color = colors[1], label = lables[1], width = 0.4)
# plt.bar(access_x_axis_vary_db_size, access_breakdown_jump_y_axis_512KB_values[0], color = colors[0], label = lables[0], width = 0.4)
# Path-ORAM
# plt.bar(access_x_axis_vary_db_size, access_breakdown_path_y_axis_512KB_values[2], bottom = np.array(access_breakdown_path_y_axis_512KB_values[0]) + np.array(access_breakdown_path_y_axis_512KB_values[1]).tolist(), color = colors[2], label = lables[2], width = 0.4)
# plt.bar(access_x_axis_vary_db_size, access_breakdown_path_y_axis_512KB_values[1], bottom = access_breakdown_path_y_axis_512KB_values[0], color = colors[1], label = lables[1], width = 0.4)
# plt.bar(access_x_axis_vary_db_size, access_breakdown_path_y_axis_512KB_values[0], color = colors[0], label = lables[0], width = 0.4)
# S3ORAM
plt.bar(access_x_axis_vary_db_size, access_breakdown_s3_y_axis_512KB_values[2], bottom = (np.array(access_breakdown_s3_y_axis_512KB_values[0]) + np.array(access_breakdown_s3_y_axis_512KB_values[1]) + np.array(access_breakdown_s3_y_axis_512KB_values[3])).tolist(), color = colors[2], label = lables[2], width = 0.4)
plt.bar(access_x_axis_vary_db_size, access_breakdown_s3_y_axis_512KB_values[1], bottom = (np.array(access_breakdown_s3_y_axis_512KB_values[0]) + np.array(access_breakdown_s3_y_axis_512KB_values[3])).tolist(), color = colors[1], label = lables[1], width = 0.4)
plt.bar(access_x_axis_vary_db_size, access_breakdown_s3_y_axis_512KB_values[0], bottom = access_breakdown_s3_y_axis_512KB_values[3], color = colors[0], label = lables[0], width = 0.4)
plt.bar(access_x_axis_vary_db_size, access_breakdown_s3_y_axis_512KB_values[3], color = colors[3], label = lables[3], width = 0.4)
plt.xlabel("Database size (GB)")
plt.ylabel("Delay (second)")
#plt.ylim(0, 11)
plt.legend()
plt.show()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号