10.4 二維數(shù)據(jù)的組織與處理
在現(xiàn)實(shí)世界中,數(shù)據(jù)往往不是一維序列,而是由多行多列組成的“表格”。
Python 的標(biāo)準(zhǔn)庫 和第三方庫 都能高效地處理這類文件。
10.4.1 二維數(shù)據(jù)的表示
二維數(shù)據(jù)可用嵌套列表或列表嵌套字典的結(jié)構(gòu)表示。
示例:
]說明:嵌套列表,更接近 的按行按列排列的數(shù)據(jù)。列表嵌套字典 ,更接近 JSON 或數(shù)據(jù)庫中的“記錄(Record)”。
10.4.2 二維數(shù)據(jù)的存儲(chǔ)
(1)寫入 CSV 文件
相關(guān)方法:
csv.writer(f)
創(chuàng)建 CSV 寫入對(duì)象。
writer.writerow(data)
一次寫入一行數(shù)據(jù)。
writer.writerows(data)
一次寫入多行數(shù)據(jù)。
示例:
print("CSV 文件寫入完成。")生成的文件內(nèi)容如下:
鞠子舟,92說明:newline="" 可避免在 Windows 系統(tǒng)中寫入空行。
(2)追加數(shù)據(jù)
示例:
writer.writerow(["爾理湴", 90])提示:在實(shí)驗(yàn)記錄或日志存儲(chǔ)中,追加模式 'a' 常用于逐步寫入新結(jié)果。
10.4.3 二維數(shù)據(jù)的讀取
(1)按行讀取
相關(guān)方法:
csv.reader(f)
按行讀取 CSV 內(nèi)容。會(huì)將所有字段讀取為字符串,必要時(shí)需自行轉(zhuǎn)換類型。
示例:
print(row)輸出:
['爾理湴', '90'](2)以字典形式讀取
相關(guān)方法:
csv.DictReader(f)
返回每行數(shù)據(jù)為字典,鍵為列名。
示例:
print(row["姓名"], row["成績"])輸出:
爾理湴 90說明:這種方式適合處理列名已知的數(shù)據(jù)表,尤其是后續(xù)需按字段篩選或統(tǒng)計(jì)的情況。
10.4.4 二維數(shù)據(jù)的處理
在讀取數(shù)據(jù)后,我們常需要進(jìn)一步篩選、統(tǒng)計(jì)或可視化。
例 10.4.1:篩選高分學(xué)生
print("高分學(xué)生:", high_scores)輸出:
高分學(xué)生: ['艾婉婷', '鞠子舟', '爾理湴']例 10.4.2:計(jì)算平均成績
print(f"平均成績:{avg:.2f}")輸出:
平均成績:91.2510.4.5 CSV 文件的進(jìn)階操作
在項(xiàng)目開發(fā)中,常需要對(duì) CSV 進(jìn)行更復(fù)雜操作,如排序、去重或多字段統(tǒng)計(jì)。
(1)按列排序
使用內(nèi)置函數(shù) 進(jìn)行排序,返回一個(gè)列表。
print(row["姓名"], row["成績"])輸出:
岳露珊 88(2)去除重復(fù)記錄
結(jié)合集合(set)與列表以達(dá)到高效數(shù)據(jù)清洗的目的。
names_seen.add(row["姓名"])例 10.4.3:AI 實(shí)驗(yàn)結(jié)果統(tǒng)計(jì)器
在機(jī)器學(xué)習(xí)實(shí)驗(yàn)中,每輪訓(xùn)練結(jié)果常以 CSV 文件保存:
3,0.44,0.87編寫程序計(jì)算平均準(zhǔn)確率與最低損失:
print(f"平均準(zhǔn)確率:{sum(accuracies)/len(accuracies):.2f}")輸出:
平均準(zhǔn)確率:0.85此示例模擬真實(shí)的 AI 訓(xùn)練日志分析過程。在科研或開發(fā)中,模型性能監(jiān)控通常依賴類似的 CSV 文件分析腳本。
10.5 高維數(shù)據(jù)的組織與處理
當(dāng)數(shù)據(jù)結(jié)構(gòu)更復(fù)雜(如嵌套列表、嵌套字典)時(shí),CSV 已難以表達(dá),此時(shí)可使用 JSON(JavaScript Object Notation) 格式。
是一種輕量級(jí)數(shù)據(jù)交換格式,兼具可讀性與層次結(jié)構(gòu)表達(dá)能力。它在 AI、Web 接口與配置文件中被廣泛使用。
(1)Python 與 JSON 的對(duì)應(yīng)關(guān)系
JSON 類型
Python 類型
對(duì)象(Object)
字典(dict)
數(shù)組(Array)
列表(list)
字符串(String)
字符串(str)
數(shù)值(Number)
int / float
布爾值(Boolean)
bool
空(null)
None
(2)寫入 JSON 文件
相關(guān)方法:
json.dump(obj, f, indent, ensure_ascii)
將 Python 對(duì)象寫入 JSON 文件。
示例:
print("模型配置文件已保存。")生成的 config.json 內(nèi)容:
}(3)讀取 JSON 文件
相關(guān)方法:
json.load(f)
從文件讀取 JSON 并轉(zhuǎn)換為 Python 對(duì)象。
示例:
print("網(wǎng)絡(luò)層配置:", cfg["layers"])輸出:
網(wǎng)絡(luò)層配置: [64, 128, 256]10.6 文件綜合示例與應(yīng)用
文件操作是 Python 應(yīng)用中最常見、也最具實(shí)用價(jià)值的技能之一。
無論是保存日志、歸檔實(shí)驗(yàn)結(jié)果,還是記錄系統(tǒng)配置與統(tǒng)計(jì)報(bào)告,都離不開對(duì)文件的讀取、寫入與格式化處理。
例 10.6.1:AI 訓(xùn)練日志歸檔器
功能描述:自動(dòng)讀取 AI 模型的訓(xùn)練日志文件,提取關(guān)鍵信息(Epoch、Loss、Accuracy),并生成結(jié)構(gòu)化 CSV 文件,便于后續(xù)分析。
示例日志文件 train.log 內(nèi)容:
Epoch 3: Loss=0.44 Accuracy=0.87示例代碼:
log_to_csv("train.log", "result.csv")生成的 result.csv 文件內(nèi)容:
3,0.44,0.87此程序模擬 AI 訓(xùn)練日志歸檔的自動(dòng)化過程,可在模型訓(xùn)練結(jié)束后快速生成分析用表格。
例 10.6.2:學(xué)生成績報(bào)告生成器
功能描述:從 CSV 成績文件讀取學(xué)生信息,計(jì)算平均分與等級(jí),并導(dǎo)出 JSON 格式的成績報(bào)告。
generate_report("成績表.csv", "report.json")生成的 report.json 文件內(nèi)容:
]該示例展示了 CSV → JSON 的數(shù)據(jù)流轉(zhuǎn)換過程,是文件格式化與數(shù)據(jù)清洗的典型應(yīng)用。類似邏輯可應(yīng)用于教學(xué)管理系統(tǒng)、考核統(tǒng)計(jì)或數(shù)據(jù)可視化項(xiàng)目。
例 10.6.3:模型配置加載與訓(xùn)練結(jié)果更新
功能描述:讀取 JSON 格式的模型配置文件,動(dòng)態(tài)更新參數(shù)并保存新的配置;同時(shí),將訓(xùn)練結(jié)果追加至文本文件以備后續(xù)可視化分析。
print("配置與結(jié)果已更新。")該程序模擬了機(jī)器學(xué)習(xí)項(xiàng)目中最常見的文件交互場景,包括配置更新與實(shí)驗(yàn)記錄。
小結(jié)
本次課講解了二維和高維數(shù)據(jù)的文件操作,包括 CSV 與 JSON 的讀寫、篩選、排序與格式轉(zhuǎn)換。通過綜合示例展示了實(shí)驗(yàn)日志歸檔、成績報(bào)告生成以及模型配置管理的實(shí)際應(yīng)用。
下一階段將進(jìn)入 Python 面向?qū)ο缶幊痰膶W(xué)習(xí),了解類、對(duì)象與方法的定義與使用,為構(gòu)建可復(fù)用的程序模塊打下基礎(chǔ)。
“點(diǎn)贊有美意,贊賞是鼓勵(lì)”
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.