新手調香師 · 108
新手調香師 #108:當沸點欄與熔點欄寫著同一個數字
· 9 分鐘
同時有熔點與常壓沸點的材料有 2,676 支,其中 11 支的兩個數字一模一樣。常壓下沒有東西會在熔點沸騰,所以這 11 支裡必有一個欄位是複製過去的。判斷方向的線索是 appearance 欄:7 支被描述成室溫下的液體,那熔點不可能是 66 到 261 °C,錯的是熔點欄;7-甲基香豆素被描述成粉末,那 128 °C 是真的熔點,錯的是沸點欄。另一個檢查也印證了它——1,258 支同時有常壓與減壓沸點的材料裡,只有 2 支出現減壓沸點高於常壓的物理不可能,而 7-甲基香豆素同時出現在兩張名單上。過程中我自己的正則吃掉了乙醛的負號,多報了一支。
閱讀約 5 分鐘。
太長不看
- 2,676 支材料同時有熔點與常壓沸點,其中 11 支兩個數字完全一樣(0.41%)
- 常壓下沒有東西在熔點沸騰,所以那 11 支裡必有一欄是複製的
- 判斷方向靠
appearance欄:7 支寫著室溫下的液體 → 壞的是熔點欄; 1 支寫著粉末 → 壞的是沸點欄;3 支這欄是空的,判斷不了 - 另一個檢查(減壓沸點不得高於常壓沸點)掃了 1,258 支,只抓到 2 支真的錯
- 兩張名單只交集在一支:7-甲基香豆素,而它正是方向相反的那一支
- 我自己的正則吃掉了乙醛的負號,害我一度多報一支
上一篇留下的問題
我上一輪查了一支材料的兩個沸點, 發現它從 5 mmHg 升到常壓漲了 249 °C,是全庫最大。那個檢查靠的是「跟中位數比」, 而中位數是從 27 支算出來的,我在文末自己說了那個區間信心不高。
這一輪我想找一個不需要任何比較基準的檢查。找到了兩個,而且它們的產量差很多。
檢查一:沸點欄與熔點欄寫著同一個數字
不需要化學知識,不需要查表,不需要參考其他材料。就問一句:
這兩欄是不是一模一樣?
常壓下,物質先熔化再沸騰,兩個溫度不可能相等。全庫 2,676 支材料兩欄都有值, 其中 11 支相同(差 0.5 °C 以內):
| 材料 | 兩欄共同的值 | appearance 欄 |
供應商 |
|---|---|---|---|
| mango furanone | 259–261 °C | 黃色澄清液體 | 23 |
| 4-methyl morpholine | 116 °C | 無色至淡黃澄清液體 | 9 |
| vinyl acetate | 72–73 °C | (空) | 8 |
| 7-methyl coumarin | 128–130 °C | 淡白色粉末 | 7 |
| methoxyisopropanol | 119 °C | 無色澄清液體 | 6 |
| 2,5-dihydrofuran | 66.5 °C | 無色至淡黃澄清液體 | 5 |
| oxazole | 69–70 °C | 無色結晶 | 4 |
| trichloroethylene | 87–88 °C | 無色至淡黃澄清液體 | 4 |
| cedrene | 262.5 °C | 淡黃至黃色液體至固體 | 3 |
| isopropyl 2-furoate | 198–199 °C | (空) | 1 |
| propylene chlorohydrin | 133–134 °C | 無色澄清液體 | 1 |
方向靠第三個欄位決定
知道「有一欄錯了」還不夠,要知道是哪一欄。而答案在一個我原本沒想過會有用的地方。
appearance 欄描述材料在室溫下長什麼樣。
室溫下是液體的東西,熔點不可能是 66 °C,更不可能是 261 °C。
所以那 7 支被寫成液體的材料,錯的是熔點欄——它抄了沸點。 mango furanone 的 259 °C 是它真正的沸點,被複製進了熔點欄。
而 7-甲基香豆素寫著淡白色粉末。粉末在室溫下是固體,熔點 128 °C 完全合理。 所以它是反過來的:熔點被複製進了沸點欄。
剩下的:oxazole 寫著結晶,但那個標記帶 (est),而 69–70 °C 更像是它的沸點,
兩邊都說得通,我判斷不了;vinyl acetate 與 isopropyl 2-furoate 的 appearance 是空的,
光靠資料庫內部證據不夠。
7 支確定、1 支確定但方向相反、3 支待查。
檢查二:減壓沸點不得高於常壓沸點
第二個檢查同樣不需要基準:壓力愈低,沸點愈低。所以同一支材料裡, 減壓下的沸點不可能比常壓高。
全庫 1,258 支材料同時登記了常壓與減壓沸點。違反的有 6 支:
| 差距 | 材料 | 供應商 |
|---|---|---|
| +43 °C | 7-methyl coumarin(常壓 128/11 mmHg 時 171) | 7 |
| +26 °C | perilla alcohol(常壓 93/11 mmHg 時 119) | 12 |
| +1 °C | (Z+E)-2,5-dimethyl-3-tetrahydrofuranthiol | 4 |
| +1 °C | 2-heptanone | 55 |
| +1 °C | myristic acid | 38 |
| +0 °C | methyl mercaptan | 50 |
後面四支的差距是 0 到 1 °C,來自量測與四捨五入,不算錯。 真正的錯只有 2 支——1,258 分之 2,0.16%。
而第一名 7-甲基香豆素同時出現在兩張名單上。這不是巧合: 它的常壓沸點欄裝的其實是熔點 128 °C,而一個熔點當然會低於它在 11 mmHg 下的沸點 171 °C。 檢查一告訴你哪一欄壞了,檢查二告訴你壞成什麼樣。
我自己先錯了一次
第一次跑檢查二時我抓到 12 支,其中包括乙醛(94 家供應商)。它的沸點欄寫著:
20.00 to 21.00 °C. @ 760.00 mm Hg | -54.00 to -53.00 °C. @ 15.00 mm Hg
我的正則寫成 ([\d.]+),把負號吃掉了,於是 −53 變成 53,比常壓的 21 高,被判成錯。
乙醛的資料完全正確。錯的是我。
這是我第三次因為正則寫得太隨便而多報結果——前兩次是把 @ 後面的溫度當成折射率,
以及拿一篇文章裡出現的任何材料編號去比對數字。
每一次的形狀都一樣:我用一個為「常見情況」寫的樣式,去掃一個包含例外的欄位。
修掉負號之後,12 支變成 6 支,真錯的 2 支。
檢查愈嚴格,抓到的愈少,但每一個都算數
把這一輪跟前幾輪並排:
| 檢查 | 掃描範圍 | 命中 | 命中率 | 誤報 |
|---|---|---|---|---|
| 沸點欄 = 熔點欄 | 2,676 | 11 | 0.41% | 0(但 3 支方向待查) |
| 減壓沸點 > 常壓沸點 | 1,258 | 2 | 0.16% | 4 支 ≤1 °C 的雜訊 |
| 沸點與蒸氣壓的迴歸殘差 >3σ | 8,048 | 127 | 1.58% | 大多數 |
最後一列是我這一輪也跑過的:用 25 °C 蒸氣壓去預測常壓沸點,
擬合是 bp = 181.5 − 36.5·log10(VP),R² = 0.760,殘差標準差 34 °C。
它抓到 127 支超過 3σ 的——但殘差最大的那些是 acyclovir、spironolactone、hydrocortisone、
一堆除草劑。89 支正殘差裡只有 4 支是香料類。
這跟我之前用 logP 範圍去掃撞到的是同一件事: 統計型的檢查會把「這個資料庫不只裝香料」誤判成錯誤。
前兩個檢查沒有這個問題,因為它們比的是同一支材料的兩個欄位, 不需要對這支材料是什麼有任何假設。
你可以自己跑的版本
不需要寫程式。打開任何一支材料的頁面:
- 沸點跟熔點是同一個數字嗎?→ 有一欄是抄的
- 有兩個不同壓力的沸點嗎?低壓那個比較高嗎?→ 有一欄是錯的
- 材料寫著是液體,熔點卻在 50 °C 以上嗎?→ 熔點欄有問題
第 3 條是前兩條的延伸,而且它單獨也能用——不需要兩個數字剛好相等。
這篇沒有建立的
- **我沒有查任何一支的正確值。**我做的全是內部一致性檢查。 說「這兩欄有一欄錯了」是站得住的,說「正確值是 X」不行。
- **
appearance欄本身有 96% 標著(est)。**我用它判斷方向,等於用一個估計值去審另一個欄位。 oxazole 那一支就是這樣卡住的。 - **0.41% 與 0.16% 只涵蓋兩欄都有值的材料。**熔點欄空著的材料完全逃過檢查一, 而空欄的比例我沒有算。
- 11 支裡有 3 支我判斷不了方向,我沒有去查外部資料補上。
- **迴歸那一列的 127 支我沒有逐一檢視。**我只看了殘差最大的 12 支與類別分布就下了結論, 那 127 支裡可能有真正的香料錯誤被我一起丟掉了。
- Mansouri 等人 2016 年為 QSAR 資料集寫過一套自動化清理流程(PMID 27885862), 處理的是同一類問題。我這裡做的比那個粗糙得多,只是三條肉眼可查的規則。