[英]save results in tabular format instead of list in python
我有一個小的ml模型,根據它的預測,我正在計算其性能指標並將其附加到列表中,如下所示:
results_to_save = []
results_to_save.append(('Filename:', required_filename,'Accuracy:',accuracy, 'Specificity:',specificity,'Precision',precision, 'Recall:',recall,'F-Score:',f_score))
with open('./metrics/results.txt', 'a') as outfile:
json.dump(results_to_save, outfile)
outfile.write("\n\n")
logger.info("SAVED METRICS ")
因此,如果模型對三個文件進行預測,則上面的代碼塊將執行三次,並且^(的輸出非常討厭)的輸出將保存到txt文件,如下所示:
[["Filename:", "ab", "Accuracy:", 0.6662763466042154, "Specificity:", 0.8047138047138047, "Precision", 0.7075630252100841, "Recall:", 0.5152998776009792, "F-Score:", 0.5963172804532577]]
[["Filename:", "abc", "Accuracy:", 0.9545746535743783, "Specificity:", 0.9743440233236151, "Precision", 0.5875, "Recall:", 0.6194398682042833, "F-Score:", 0.603047313552526]]
[["Filename:", "abcd", "Accuracy:", 0.8568113251334416, "Specificity:", 0.9985740767146728, "Precision", 0.9744245524296675, "Recall:", 0.23738317757009345, "F-Score:", 0.3817635270541082]]
因此,如果我想比較兩個這樣的文件,它將變得非常耗時。
有什么方法可以將結果保存為R數據框之類的結構化表格形式,但是使用Python?
這樣結果將以更易讀的格式保存,如下所示:
filename | param1 | param2 | param3 | param4
... ... ... ... ...
... ... ... ... ...
即每一行將屬於一個特定的文件
謝謝。
您可以使用Pandas或csv模塊,這將為您完成此操作。 實際上,我建議您使用csv。
不過,更籠統的答案是,您真正想要做的是在將字符串寫入文件之前對其進行格式化。 像這樣:
with open(output_path, "w") as fh:
for result in results:
parts = [part.replace("|", "\|") for part in results]
line = "|".join(parts)
fh.write(line)
這將獲取每個結果,替換每個轉義符的每個豎線字符(始終使您轉義分隔符的字符),將各部分合並為一行,然后將其寫入文件。
或者,您可以不使用任何模塊而寫入制表符分隔值 (TSV)格式。 例如,像這樣:
results_to_save = []
results_to_save.append(('Filename:', 'ab', 'Accuracy:', 0.6662763466042154, 'Specificity:', 0.8047138047138047, 'Precision', 0.7075630252100841, 'Recall:', 0.5152998776009792, 'F-Score:', 0.5963172804532577))
results_to_save.append(('Filename:', 'abc', 'Accuracy:', 0.9545746535743783, 'Specificity:', 0.9743440233236151, 'Precision', 0.5875, 'Recall:', 0.6194398682042833, 'F-Score:', 0.603047313552526))
results_to_save.append(('Filename:', 'abcd', 'Accuracy:', 0.8568113251334416, 'Specificity:', 0.9985740767146728, 'Precision', 0.9744245524296675, 'Recall:', 0.23738317757009345, 'F-Score:', 0.3817635270541082))
with open('./metrics/results.tsv', 'a') as outfile:
# Print the column headers
first = results_to_save[0]
keys = [first[i].rstrip(':') for i in range(0,len(first),2)]
outfile.write('\t'.join(keys)+'\n')
# Print data for each row
for row in results_to_save:
values = [row[i] for i in range(1,len(row),2)]
outfile.write('\t'.join(map(str,values))+'\n')
logger.info("SAVED METRICS ")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.