如何使用 LLM實(shí)現(xiàn)電子表格規(guī)范化
一、如何使用 LLM實(shí)現(xiàn)電子表格規(guī)范化
請觀察以下電子表格:
圖片
從“為什么”開始
圖片
讓我們看一下這個(gè)Excel電子表格,其中包含電影獎(jiǎng)項(xiàng)的信息。這是一個(gè)典型的、常見的電子表格,每個(gè)人都可能在日常工作中使用它。但它有什么問題呢?
要回答這個(gè)問題,我們首先要回顧一下使用數(shù)據(jù)的最終目標(biāo):獲得洞察力,指導(dǎo)我們在個(gè)人或商業(yè)生活中的決策。這個(gè)過程至少需要兩個(gè)關(guān)鍵要素:
可靠的數(shù)據(jù):干凈的數(shù)據(jù),沒有問題、不一致、重復(fù)、缺失值等。
整潔的數(shù)據(jù):一個(gè)規(guī)范化的數(shù)據(jù)表,便于處理和操作。
第二點(diǎn)是任何分析的主要基礎(chǔ),包括處理數(shù)據(jù)質(zhì)量。
回到我們的例子,假設(shè)我們要執(zhí)行以下操作:
1. 對于每部獲得多個(gè)獎(jiǎng)項(xiàng)的電影,列出其相關(guān)的獎(jiǎng)項(xiàng)和年份。
2. 對于每一位獲得多個(gè)獎(jiǎng)項(xiàng)的演員/女演員,列出他們相關(guān)的電影和獎(jiǎng)項(xiàng)。
3. 檢查所有演員/女演員的姓名是否正確且規(guī)范。
當(dāng)然,如果我們將其結(jié)構(gòu)化,這個(gè)示例數(shù)據(jù)集足夠小,可以通過目測或手動(dòng)獲取這些洞察。但現(xiàn)在想象一下,如果數(shù)據(jù)集包含整個(gè)獎(jiǎng)項(xiàng)歷史記錄;如果沒有自動(dòng)化,這將非常耗時(shí)、痛苦且容易出錯(cuò)。
機(jī)器讀取此電子表格并直接理解其結(jié)構(gòu)非常困難,因?yàn)樗环狭己玫臄?shù)據(jù)排列規(guī)范。正因如此,整理數(shù)據(jù)才如此重要。通過確保數(shù)據(jù)以機(jī)器友好的方式構(gòu)建,我們可以簡化解析、自動(dòng)化質(zhì)量檢查并增強(qiáng)業(yè)務(wù)分析——所有這些都無需更改數(shù)據(jù)集的實(shí)際內(nèi)容。
重塑此數(shù)據(jù)的示例
圖片
現(xiàn)在,任何人都可以使用低代碼/無代碼工具或基于代碼的查詢(SQL、Python 等)輕松地與該數(shù)據(jù)集進(jìn)行交互并獲得見解。
主要的挑戰(zhàn)是如何將美觀且看起來舒適的電子表格轉(zhuǎn)變?yōu)闄C(jī)器可讀的整潔版本。
接下來是什么?整潔數(shù)據(jù)指南
什么是整潔數(shù)據(jù)?一個(gè)結(jié)構(gòu)良好的數(shù)據(jù)表?
整潔數(shù)據(jù)這個(gè)術(shù)語在 Hadley Wickham 于 2014 年發(fā)表在《統(tǒng)計(jì)軟件雜志》上的一篇著名文章《整潔數(shù)據(jù)》中有所描述。以下是更好地理解其基本概念所需的關(guān)鍵引述。
數(shù)據(jù)整潔
“構(gòu)建數(shù)據(jù)集以方便操作、可視化和建模?!?/span>
“整潔數(shù)據(jù)集提供了一種標(biāo)準(zhǔn)化的方式,將數(shù)據(jù)集的結(jié)構(gòu)其物理布局與其語義或含義聯(lián)系起來。”
數(shù)據(jù)結(jié)構(gòu)
大多數(shù)統(tǒng)計(jì)數(shù)據(jù)集都是由行和列組成的矩形表格。列幾乎總是帶有標(biāo)簽,行有時(shí)也帶有標(biāo)簽。
數(shù)據(jù)語義
數(shù)據(jù)集是值的集合,通常是數(shù)字(如果是定量的)或字符串(如果是定性的)。值以兩種方式組織。每個(gè)值既屬于一個(gè)變量,也屬于一個(gè)觀測值。變量包含跨單位測量相同基礎(chǔ)屬性(例如高度、溫度或持續(xù)時(shí)間)的所有值。觀測值包含跨屬性測量同一單位(例如,一個(gè)人、一天或一場比賽)的所有值。
在給定的分析中,可能存在多個(gè)層次的觀察。例如,在一種新的過敏藥物的試驗(yàn)中,我們可能會有三種類型的觀察結(jié)果:
收集每個(gè)人的人口統(tǒng)計(jì)數(shù)據(jù)(年齡、性別、種族),
每天從每個(gè)人收集的醫(yī)療數(shù)據(jù)(打噴嚏的次數(shù)、眼睛發(fā)紅的情況),以及
每天收集的氣象數(shù)據(jù)(溫度、花粉數(shù)量)?!?/span>
整潔數(shù)據(jù)
整潔數(shù)據(jù)是將數(shù)據(jù)集的含義映射到其結(jié)構(gòu)的標(biāo)準(zhǔn)方法。數(shù)據(jù)集的整潔程度取決于其行、列和表格與觀測值、變量和類型的對應(yīng)關(guān)系。在整潔數(shù)據(jù)中:
每個(gè)變量形成一列。
每個(gè)觀察結(jié)果形成一行。
每種類型的觀察單元都形成一個(gè)表格?!?/span>
混亂數(shù)據(jù)集的常見問題
列標(biāo)題可能是值而不是變量名。
混亂的示例:表格中的列標(biāo)題是年份(2019、2020、2021)而不是“年份”列。
整潔版本:一個(gè)帶有“年份”列的表格,每行代表給定年份的觀察結(jié)果。
一列中可能存儲多個(gè)變量。
混亂的例子:名為“Age_Gender”的列包含諸如 28_Female 之類的值
整潔版本: “年齡”和“性別”單獨(dú)列
變量可能存儲在行和列中。
混亂的例子:跟蹤學(xué)生考試成績的數(shù)據(jù)集,其中科目(數(shù)學(xué)、科學(xué)、英語)存儲為列標(biāo)題并在行中重復(fù),而不是使用單個(gè)“科目”列。
整潔版本:一個(gè)包含“學(xué)號”、“科目”和“分?jǐn)?shù)”列的表格,其中每一行代表一名學(xué)生一門科目的分?jǐn)?shù)。
多種類型的觀察單元可能存儲在同一張表中。
混亂的示例:在同一個(gè)表中同時(shí)包含客戶信息和商店庫存的銷售數(shù)據(jù)集。
整潔版本:為“客戶”和“庫存”設(shè)置單獨(dú)的表格。
單個(gè)觀察單元可能存儲在多個(gè)表中。
混亂的例子:患者的醫(yī)療記錄分散在多個(gè)表(診斷表、藥物表)中,而沒有通用的患者 ID 將它們關(guān)聯(lián)起來。
整潔版本:使用唯一“患者 ID”的單個(gè)表或正確鏈接的表。
現(xiàn)在我們對整潔數(shù)據(jù)有了更好的理解,讓我們看看如何將雜亂的數(shù)據(jù)集轉(zhuǎn)換為整潔的數(shù)據(jù)集。
思考如何做?
“整潔的數(shù)據(jù)集都相似,但每個(gè)混亂的數(shù)據(jù)集都有其自身的混亂?!薄?Hadley Wickham
雖然這些指導(dǎo)原則在理論上聽起來很清晰,但在實(shí)踐中卻很難推廣到任何類型的數(shù)據(jù)集。換句話說,從雜亂的數(shù)據(jù)開始,并不存在簡單或確定性的流程或算法來重塑數(shù)據(jù)。這主要源于每個(gè)數(shù)據(jù)集的奇異性。事實(shí)上,通常來說,精確定義變量和觀測值,然后在不丟失內(nèi)容的情況下自動(dòng)轉(zhuǎn)換數(shù)據(jù),難度之大令人難以置信。正因如此,盡管過去十年數(shù)據(jù)處理技術(shù)取得了巨大進(jìn)步,但數(shù)據(jù)清理和格式化仍然大部分時(shí)間都是“手動(dòng)”完成的。
因此,當(dāng)復(fù)雜且難以維護(hù)的基于規(guī)則的系統(tǒng)不適用時(shí)(即無法通過預(yù)先描述決策來精確處理所有情境),機(jī)器學(xué)習(xí)模型或許能帶來一些優(yōu)勢。這賦予系統(tǒng)更大的自由度,使其能夠通過泛化訓(xùn)練過程中學(xué)到的知識來適應(yīng)任何數(shù)據(jù)。許多大型語言模型 (LLM) 已經(jīng)經(jīng)歷了大量的數(shù)據(jù)處理實(shí)例,使其能夠分析輸入數(shù)據(jù)并執(zhí)行諸如電子表格結(jié)構(gòu)分析、表格模式估計(jì)和代碼生成等任務(wù)。
然后,讓我們描述一個(gè)由代碼和基于 LLM 的模塊以及業(yè)務(wù)邏輯組成的工作流程,以重塑電子表格。
圖片
電子表格編碼器
此模塊旨在將電子表格數(shù)據(jù)中所需的主要信息序列化為文本。僅保留表格布局所需的單元格子集,從而刪除非必要或過度重復(fù)的格式信息。通過僅保留必要信息,此步驟可最大限度地減少令牌使用量、降低成本并增強(qiáng)模型性能。當(dāng)前版本是一種確定性算法,其靈感來自論文《SpreadsheetLLM:用于大型語言模型的電子表格編碼》,該算法依賴于啟發(fā)式算法。
表結(jié)構(gòu)分析
在繼續(xù)下一步之前,讓大型語言模型(LLM)提取電子表格結(jié)構(gòu)是構(gòu)建后續(xù)行動(dòng)的關(guān)鍵一步。以下是一些示例問題:
有多少個(gè)表格,它們在電子表格中的位置(區(qū)域)是什么?
什么定義了每個(gè)表的邊界(例如,空行/列,特定標(biāo)記)?
哪些行/列用作標(biāo)題,以及是否有任何表格有多級標(biāo)題?
是否有需要過濾或單獨(dú)處理的元數(shù)據(jù)部分、匯總統(tǒng)計(jì)數(shù)據(jù)或注釋?
是否有合并單元格?如果有,該如何處理?
表模式估算
電子表格結(jié)構(gòu)分析完成后,就該開始考慮理想的目標(biāo)表模式了。這需要讓 LLM 進(jìn)行以下迭代處理:
- 識別所有潛在列(多行標(biāo)題、元數(shù)據(jù)等)
- 根據(jù)列名和數(shù)據(jù)語義比較列的域相似性
- 對相關(guān)列進(jìn)行分組
- 該模塊輸出最終模式,其中包含每個(gè)保留列的名稱和簡短描述。
- 用于格式化電子表格的代碼生成
考慮到之前的結(jié)構(gòu)分析和表格模式,最后一個(gè)基于 LLM 的模塊應(yīng)該編寫代碼,將電子表格轉(zhuǎn)換為符合表格模式的適當(dāng)數(shù)據(jù)表。此外,不得省略任何有用的內(nèi)容(例如,聚合值或計(jì)算值仍然可以從其他變量中導(dǎo)出)。
由于在第一次迭代時(shí)從頭開始生成運(yùn)行良好的代碼具有挑戰(zhàn)性,因此添加了兩個(gè)內(nèi)部迭代過程以在需要時(shí)修改代碼:
代碼檢查:每當(dāng)代碼無法編譯或執(zhí)行時(shí),就會向模型提供跟蹤錯(cuò)誤以更新其代碼。
數(shù)據(jù)驗(yàn)證:檢查創(chuàng)建的數(shù)據(jù)表的元數(shù)據(jù)(例如列名、第一行和最后一行以及每列的統(tǒng)計(jì)信息),以驗(yàn)證表是否符合預(yù)期。否則,將相應(yīng)地修改代碼。
將數(shù)據(jù)表轉(zhuǎn)換為 Excel 文件
最后,如果所有數(shù)據(jù)都能正確地放入單個(gè)表格中,則會根據(jù)該數(shù)據(jù)表創(chuàng)建一個(gè)符合表格格式的工作表。最終返回的資源是一個(gè) Excel 文件,其活動(dòng)工作表包含整齊的電子表格數(shù)據(jù)。充分利用新整理的數(shù)據(jù)集,一切分析皆有可能。
關(guān)于工作流的最后說明
為什么提出使用工作流程而不是代理來實(shí)現(xiàn)該目的?
在撰寫本文時(shí),我們認(rèn)為基于LLM的精確子任務(wù)工作流比自主性更強(qiáng)的代理更健壯、穩(wěn)定、可迭代且易于維護(hù)。代理可能具有以下優(yōu)勢:在執(zhí)行任務(wù)時(shí)擁有更大的自由度和自主性。然而,在實(shí)踐中,它們可能仍然難以處理;例如,如果目標(biāo)不夠明確,它們可能會很快出現(xiàn)偏差。我相信我們的情況就是這樣,但這并不意味著該模型在未來不適用。
二、基于 LLM 的自動(dòng)表格數(shù)據(jù)驗(yàn)證工作流
清潔數(shù)據(jù),清晰洞察:無需人工干預(yù)即可檢測和糾正數(shù)據(jù)質(zhì)量問題。
圖片
什么是數(shù)據(jù)有效性?
數(shù)據(jù)有效性是指數(shù)據(jù)符合預(yù)期的格式、類型和值范圍。單列內(nèi)的標(biāo)準(zhǔn)化可確保數(shù)據(jù)根據(jù)隱含或顯式要求保持一致。
與數(shù)據(jù)有效性相關(guān)的常見問題包括:
- 不適當(dāng)?shù)淖兞款愋停翰贿m合分析需要的列數(shù)據(jù)類型,例如文本格式的溫度值。
- 具有混合數(shù)據(jù)類型的列:包含數(shù)字和文本數(shù)據(jù)的單個(gè)列。
- 不符合預(yù)期格式:例如,無效的電子郵件地址或 URL。
- 超出范圍的值:超出允許范圍或正常范圍的列值,例如,負(fù)的年齡值或高中生的年齡大于 30 歲。
- 時(shí)區(qū)和日期時(shí)間格式問題:數(shù)據(jù)集內(nèi)的日期格式不一致或異構(gòu)。
- 缺乏測量標(biāo)準(zhǔn)化或統(tǒng)一尺度:對同一變量使用的測量單位存在差異,例如混合使用攝氏度和華氏度值作為溫度。
- 數(shù)字字段中的特殊字符或空格:數(shù)字?jǐn)?shù)據(jù)被非數(shù)字元素污染。
諸如此類的例子還有很多。
重復(fù)記錄或?qū)嶓w以及缺失值等錯(cuò)誤類型不屬于此類別。
但是識別此類數(shù)據(jù)有效性問題的典型策略是什么?
數(shù)據(jù)滿足預(yù)期。
數(shù)據(jù)清理雖然非常復(fù)雜,但通常可以分為兩個(gè)關(guān)鍵階段:
1. 檢測數(shù)據(jù)錯(cuò)誤2. 糾正這些錯(cuò)誤。
數(shù)據(jù)清理的核心是識別和解決數(shù)據(jù)集中的差異。具體來說,違反預(yù)定義約束的值,這些約束來自對數(shù)據(jù)的期望。
必須承認(rèn)一個(gè)基本事實(shí)——在現(xiàn)實(shí)世界中,幾乎不可能徹底識別所有潛在的數(shù)據(jù)錯(cuò)誤——數(shù)據(jù)問題的來源幾乎無窮無盡——從人為輸入錯(cuò)誤到系統(tǒng)故障——因此不可能完全預(yù)測。然而,我們可以做的是定義我們認(rèn)為數(shù)據(jù)中合理的規(guī)律模式,即數(shù)據(jù)預(yù)期——即對“正確”數(shù)據(jù)應(yīng)該是什么樣子的合理假設(shè)。例如:
如果使用高中生數(shù)據(jù)集,我們可能預(yù)計(jì)年齡在 14 歲到 18 歲之間。
客戶數(shù)據(jù)庫可能要求電子郵件地址遵循標(biāo)準(zhǔn)格式(例如,user@domain.com)。
通過建立這些期望,我們創(chuàng)建了一個(gè)用于檢測異常的結(jié)構(gòu)化框架,使數(shù)據(jù)清理過程易于管理和可擴(kuò)展。
這些預(yù)期源自語義分析和統(tǒng)計(jì)分析。我們理解,“年齡”這一列名指的是眾所周知的“生長時(shí)間”概念。其他列名可能取自高中的詞匯領(lǐng)域,而列統(tǒng)計(jì)數(shù)據(jù)(例如最小值、最大值、平均值等)則提供了對數(shù)值分布和范圍的洞察。綜合起來,這些信息有助于確定我們對該列的預(yù)期:
年齡值應(yīng)為整數(shù)
值應(yīng)介于 14 到 18 之間
預(yù)期的準(zhǔn)確性往往與分析數(shù)據(jù)集所花費(fèi)的時(shí)間一樣高。當(dāng)然,如果團(tuán)隊(duì)每天都會定期使用某個(gè)數(shù)據(jù)集,那么發(fā)現(xiàn)細(xì)微數(shù)據(jù)問題(從而改進(jìn)預(yù)期)的可能性就會顯著增加。即便如此,在大多數(shù)環(huán)境中,即使是簡單的預(yù)期也很少得到系統(tǒng)性的檢查,這通常是由于時(shí)間限制,或者僅僅是因?yàn)樗⒎谴k事項(xiàng)清單上最令人愉快或優(yōu)先級最高的任務(wù)。
一旦我們定義了期望,下一步就是檢查數(shù)據(jù)是否真正滿足這些期望。這意味著應(yīng)用數(shù)據(jù)約束并查找違規(guī)行為。對于每個(gè)期望,可以定義一個(gè)或多個(gè)約束。這些數(shù)據(jù)質(zhì)量規(guī)則可以轉(zhuǎn)換為返回二元決策的編程函數(shù)——一個(gè)布爾值,指示給定值是否違反了測試的約束。
這種策略在許多數(shù)據(jù)質(zhì)量管理工具中很常見,這些工具提供了基于定義的約束檢測數(shù)據(jù)集中所有數(shù)據(jù)錯(cuò)誤的方法。然后,一個(gè)迭代過程開始解決每個(gè)問題,直到滿足所有預(yù)期,即不再存在違規(guī)行為。
這一策略在理論上看似簡單易行。然而,實(shí)踐往往并非如此——數(shù)據(jù)質(zhì)量仍然是許多組織面臨的一項(xiàng)重大挑戰(zhàn),也是一項(xiàng)耗時(shí)的任務(wù)。
基于 LLM 的工作流程,用于生成數(shù)據(jù)預(yù)期、檢測違規(guī)并解決它們。
圖片
此驗(yàn)證工作流程分為兩個(gè)主要部分:列數(shù)據(jù)類型的驗(yàn)證和是否符合預(yù)期。有人可能會同時(shí)處理這兩項(xiàng),但在我們的實(shí)驗(yàn)中,事先在數(shù)據(jù)表中正確轉(zhuǎn)換每列的值是至關(guān)重要的準(zhǔn)備步驟。通過將整個(gè)過程分解為一系列連續(xù)的操作,可以簡化數(shù)據(jù)清理工作,從而提高性能、理解力和可維護(hù)性。當(dāng)然,這種策略有些主觀,但它傾向于盡可能避免一次性處理所有數(shù)據(jù)質(zhì)量問題。
為了說明和理解整個(gè)過程的每個(gè)步驟,我們將考慮這個(gè)生成的示例:
圖片
數(shù)據(jù)有效性問題的示例遍布整個(gè)表格。每一行都刻意地隱藏了一個(gè)或多個(gè)問題:
第 1 行:使用非標(biāo)準(zhǔn)日期格式和無效的 URL 方案(不符合預(yù)期格式)。
第 2 行:包含文本(“二十”)的價(jià)格值而不是數(shù)字值(不合適的變量類型)。
第 3 行:評級為“4 星”,但其他地方的評級為數(shù)字(混合數(shù)據(jù)類型)。
第4行:評分值為“10”,如果評分預(yù)期在1到5之間,則該值超出范圍(超出范圍值)。此外,“Food”一詞存在拼寫錯(cuò)誤。
第 5 行:使用帶有貨幣符號的價(jià)格(“20€”)和帶有額外空格的評級(“5”),表明缺乏測量標(biāo)準(zhǔn)化和特殊字符/空格問題。
驗(yàn)證列數(shù)據(jù)類型
估計(jì)列數(shù)據(jù)類型
這里的任務(wù)是根據(jù)列的語義含義和統(tǒng)計(jì)屬性,為數(shù)據(jù)框中的每一列確定最合適的數(shù)據(jù)類型。分類僅限于以下選項(xiàng):字符串、整數(shù)、浮點(diǎn)數(shù)、日期時(shí)間和布爾值。這些類別足夠通用,可以涵蓋大多數(shù)常見的數(shù)據(jù)類型。有多種方法可以執(zhí)行此分類,包括確定性方法。這里選擇的方法利用大型語言模型 (LLM),并提供有關(guān)每一列和整個(gè)數(shù)據(jù)框上下文的信息來指導(dǎo)其決策:
列名列表
數(shù)據(jù)集中隨機(jī)抽取的代表行
描述每列的列統(tǒng)計(jì)信息(例如唯一值的數(shù)量、最大值的比例等)
例子
1.列名:date描述:表示與每條記錄相關(guān)的日期和時(shí)間信息。建議的數(shù)據(jù)類型:datetime
2.列名:category描述:包含定義項(xiàng)目類型或分類的分類標(biāo)簽。建議的數(shù)據(jù)類型:string
3.列名:price描述:保存以貨幣表示的項(xiàng)目數(shù)值價(jià)格。建議的數(shù)據(jù)類型:float
4.列名:image _url描述:存儲指向項(xiàng)目圖像的網(wǎng)址 (URL)。建議的數(shù)據(jù)類型:string
5. 列名:rating描述:使用數(shù)值分?jǐn)?shù)表示對項(xiàng)目的評估或評級。建議的數(shù)據(jù)類型:int
將列值轉(zhuǎn)換為估計(jì)數(shù)據(jù)類型
一旦預(yù)測了每列的數(shù)據(jù)類型,就可以開始值的轉(zhuǎn)換。根據(jù)所使用的表框架,此步驟可能略有不同,但底層邏輯基本相同。例如,在CleanMyExcel.io服務(wù)中,Pandas 被用作核心數(shù)據(jù)框架引擎。然而,在 Python 生態(tài)系統(tǒng)中,Polars 或 PySpark 等其他庫也同樣強(qiáng)大。所有不可轉(zhuǎn)換的值都留待進(jìn)一步研究。
分析不可轉(zhuǎn)換的值并提出替代方案
此步驟可視為一項(xiàng)插補(bǔ)任務(wù)。先前標(biāo)記的不可轉(zhuǎn)換值違反了列的預(yù)期數(shù)據(jù)類型。由于潛在原因多種多樣,此步驟可能頗具挑戰(zhàn)性。LLM 再次提供了一種有益的權(quán)衡,可以解釋轉(zhuǎn)換錯(cuò)誤并提出可能的替代方案。有時(shí),更正方法很簡單——例如,將年齡值 20 轉(zhuǎn)換為整數(shù) 20。在許多其他情況下,替代方案并不那么明顯,使用標(biāo)記(占位符)值標(biāo)記該值是更好的選擇。例如,在 Pandas 中,特殊對象 pd.NA 就適用于這種情況。
例子
{
"violations": [
{
"index": 2,
"column_name": "rating",
"value": "4 stars",
"violation": "Contains non-numeric text in a numeric rating field.",
"substitute": "4"
},
{
"index": 1,
"column_name": "price",
"value": "twenty",
"violation": "Textual representation that cannot be directly converted to a number.",
"substitute": "20"
},
{
"index": 4,
"column_name": "price",
"value": "20€",
"violation": "Price value contains an extraneous currency symbol.",
"substitute": "20"
}
]
}
替換不可轉(zhuǎn)換的值
此時(shí),將應(yīng)用程序函數(shù)將有問題的值替換為建議的替代值。然后再次測試該列,以確保所有值現(xiàn)在都可以轉(zhuǎn)換為預(yù)估的數(shù)據(jù)類型。如果成功,工作流程將進(jìn)入預(yù)期模塊。否則,將重復(fù)上述步驟,直到該列通過驗(yàn)證。
驗(yàn)證列數(shù)據(jù)預(yù)期
生成所有列的期望
提供了以下元素:
數(shù)據(jù)字典:列名、簡短描述和預(yù)期數(shù)據(jù)類型
數(shù)據(jù)集中隨機(jī)抽取的代表行
列統(tǒng)計(jì)信息,例如唯一值的數(shù)量和頂部值的比例
根據(jù)每列的語義含義和統(tǒng)計(jì)屬性,目標(biāo)是定義驗(yàn)證規(guī)則和期望,以確保數(shù)據(jù)質(zhì)量和完整性。這些期望應(yīng)屬于以下與標(biāo)準(zhǔn)化相關(guān)的類別之一:
有效范圍或間隔
預(yù)期格式(例如電子郵件或電話號碼)
允許的值(例如分類字段)
列數(shù)據(jù)標(biāo)準(zhǔn)化(例如 'Mr', 'Mister', 'Mrs', 'Mrs.' 變?yōu)?['Mr', 'Mrs'])
例子
列名:date
? 期望:值必須是有效的日期時(shí)間。-原因:該列表示日期和時(shí)間信息,因此每個(gè)條目應(yīng)遵循標(biāo)準(zhǔn)日期時(shí)間格式(例如,ISO 8601)。
? 期望:日期時(shí)間值應(yīng)包含時(shí)區(qū)信息(最好是 UTC)。-原因:提供的示例時(shí)間戳包含明確的 UTC 時(shí)區(qū)信息。這可確?;跁r(shí)間的分析的一致性。
────────────────────────────────
列名:category
? 期望:允許的值應(yīng)標(biāo)準(zhǔn)化為預(yù)定義集合。-原因:根據(jù)語義,有效類別可能包括“書籍”、“電子產(chǎn)品”、“食品”、“服裝”和“家具”。 (注意:示例中包含“Fod”,可能需要更正為“Food”。)
? 期望:條目應(yīng)遵循標(biāo)準(zhǔn)化的文本格式(例如,標(biāo)題大小寫)。-原因:一致的大寫和拼寫將改進(jìn)下游分析并減少數(shù)據(jù)清理問題。
──────────────────────────────
列名:price
? 期望:值必須是浮點(diǎn)數(shù)。-原因:由于此列存儲的是金額,因此為了計(jì)算準(zhǔn)確,條目應(yīng)存儲為數(shù)值(浮點(diǎn)數(shù))。
? 期望:價(jià)格值應(yīng)在有效的非負(fù)數(shù)字區(qū)間內(nèi)(例如,price ≥ 0)。-原因:在定價(jià)環(huán)境中,負(fù)價(jià)通常沒有意義。即使樣本中觀察到的最小值是 9.99,對于定價(jià)數(shù)據(jù)來說,允許零或正值也更為現(xiàn)實(shí)。
────────────────────────────────
列名:image _url
? 期望:值必須是具有預(yù)期格式的有效 URL。- 原因:由于此列存儲的是圖片網(wǎng)址,因此每個(gè) URL 都應(yīng)遵循標(biāo)準(zhǔn) URL 格式模式(例如,包括正確的協(xié)議模式)。
? 期望:URL 應(yīng)以“https://”開頭。- 原因:示例顯示一個(gè) URL 使用“htp://”,這可能是拼寫錯(cuò)誤。強(qiáng)制執(zhí)行安全 (https) URL 標(biāo)準(zhǔn)可提高數(shù)據(jù)可靠性和用戶安全性。
────────────────────────────────
列名:rating
? 期望:值必須是整數(shù)。
- 原因:評估分?jǐn)?shù)是數(shù)字,并且如樣本所示,評級存儲為整數(shù)。?期望:評級值應(yīng)在有效區(qū)間內(nèi),例如 1 到 5 之間。
- 原因:在許多情況下,評級通常采用 1 到 5 的等級。盡管樣本包含值 10,但這可能是數(shù)據(jù)質(zhì)量問題。強(qiáng)制執(zhí)行此范圍可使評估尺度標(biāo)準(zhǔn)化。生成驗(yàn)證代碼
定義預(yù)期后,目標(biāo)就是創(chuàng)建結(jié)構(gòu)化代碼,根據(jù)這些約束檢查數(shù)據(jù)。代碼格式可能因所選的驗(yàn)證庫而異,例如Pandera(用于CleanMyExcel.io)、Pydantic、Great Expectations、Soda等。為了簡化調(diào)試,驗(yàn)證代碼應(yīng)逐元素應(yīng)用檢查,以便在發(fā)生故障時(shí)能夠清楚地識別行索引和列名。這有助于有效地查明和解決問題。
分析違規(guī)行為并提出替代方案
一旦檢測到違規(guī),就必須予以解決。每個(gè)問題都會被標(biāo)記,并附上簡短的解釋和精確的位置(行索引 + 列名)。LLM 用于根據(jù)違規(guī)描述估算最佳的替換值。由于數(shù)據(jù)問題的多樣性和不可預(yù)測性,這種方法同樣非常有用。如果合適的替代方案不明確,則會根據(jù)所使用的數(shù)據(jù)框包應(yīng)用標(biāo)記值。
例子
{
"violations": [
{
"index": 3,
"column_name": "category",
"value": "Fod",
"violation": "category should be one of ['Books', 'Electronics', 'Food', 'Clothing', 'Furniture']",
"substitute": "Food"
},
{
"index": 0,
"column_name": "image_url",
"value": "htp://imageexample.com/pic.jpg",
"violation": "image_url should start with 'https://'",
"substitute": "https://imageexample.com/pic.jpg"
},
{
"index": 3,
"column_name": "rating",
"value": "10",
"violation": "rating should be between 1 and 5",
"substitute": "5"
}
]
}
其余步驟與驗(yàn)證列數(shù)據(jù)類型時(shí)使用的迭代過程類似。一旦所有違規(guī)行為都得到解決,并且沒有檢測到其他問題,數(shù)據(jù)框就完全驗(yàn)證了。
小結(jié)
期望有時(shí)可能缺乏領(lǐng)域?qū)I(yè)知識,整合人的輸入可以幫助實(shí)現(xiàn)更加多樣化、具體和可靠的期望。關(guān)鍵挑戰(zhàn)在于解決流程的自動(dòng)化。人機(jī)交互方法可以提高透明度,尤其是在選擇替代值或估計(jì)值時(shí)。