Размер файла категорий категорий xlsxwriter - PullRequest
0 голосов
/ 27 декабря 2018

Следующий код принимает CSV в качестве ввода и вывода XLSX, содержащего гистограмму:

import pandas
import sys
import openpyxl
from openpyxl.chart import BarChart, Reference

# ---- Data preparation ----
path = sys.argv[1]
df = pandas.read_csv(path, sep = "\t")
df = df[pandas.notnull(df['response_time'])]
df.loc[:, "datetime"].replace(to_replace = r"(.*T)", value = r"", inplace = True, regex = True)
df = pandas.pivot(df.datetime, df.name + '-' + df.type, df.response_time)

# ---- Prepare writer, workbook and worksheet ----
writer = pandas.ExcelWriter("test.xlsx", engine = 'xlsxwriter')
df.to_excel(writer, sheet_name = "graph")
workbook = writer.book
worksheet = writer.sheets["graph"]

# ---- USING OPENPYXL ----
chart1 = BarChart()
chart1.x_axis_title = "DateTime"
chart1.x_axis_title = "Response time"
data = Reference(workbook.active, min_col = 2, min_row = 1, max_col = len(df.columns) + 1, max_row = workbook.active.max_row)
xval = Reference(workbook.active, min_col = 1, min_row = 2, max_row = workbook.active.max_row)
chart1.add_data(data, titles_from_data = True)
chart1.set_categories(xval)
workbook.active.add_chart(chart1, "D4")
workbook.save("test.xlsx")

# ---- USING XLSXWRITER ----
chart = workbook.add_chart({'type' : 'column'})
for i in range(1, len(df.columns) + 1):
    chart.add_series({
        'name' : ['graph', 0, i],
        'values' : ['graph', 1, i, len(df.index), i],
        'categories': ['graph', 1, 0, len(df.index), 0],
    })
chart.set_x_axis({'name' : 'DateTime'})
chart.set_y_axis({'name' : 'Response Time'})
worksheet.insert_chart('D4', chart)
writer.save()

Выходной график:

enter image description here

Обе версии openpyxl и xlsxwriter выдают один и тот же график.Проблема заключается в том, что выходной граф версии xlsxwriter составляет 10 МБ, а openpyxl - только 3 МБ.

После исследования я обнаружил, что запись 'category' в версии xlsxwriter значительно увеличивает вес.

Когда я это комментирую, моя ось X теперь является серией от 1 до n, но объем выходного файла составляет всего 1,6 МБ, как это возможно?Как сделать вывод более легким с помощью xlsxwriter?

1 Ответ

0 голосов
/ 27 декабря 2018

Файл XlsxWriter, вероятно, больше из-за того, что в нем хранятся категория диаграммы и значения данных для диаграммы, а также для рабочего листа, как это делает Excel.Это обеспечивает лучшую точность воспроизведения файлов, созданных в Excel, что является целью XlsxWriter, а также вызывает меньше проблем, когда диаграммы встроены в другие приложения, такие как PowerPoint.

Я думаю, из вашего анализа, что openpyxl не хранит дополнительные данные.

Если вы сохраните файл XlsxWriter или openpyxl в Excel, я ожидаю, что в результате вы получите размер файла, примерно равный файлу XlsxWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...