簡體   English   中英

將結果保存為表格格式,而不是python中的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM