新手調香師 · 100
第 100 篇:有四個欄位表面上填答率 100%,實際上是 12.3%、6.2%、1.7% 與 20.9%
· 7 分鐘
這是新手系列的第一百篇,而它應該留下的不是感想,是一張表。我把全庫 42,225 筆紀錄的三十個欄位逐一算了填答率——最滿的是 CAS 的 73.5%,最空的是 GHS 危害說明的 0.9%。但真正要小心的是那四個看起來 100% 的:notes、三個毒性欄。它們每一筆都有字,而那些字是`None found`與`Not determined`。扣掉佔位字串之後,notes 是 20.9%、口服毒性 12.3%、皮膚毒性 6.2%、吸入毒性 1.7%。一個 100% 滿、88% 空的欄位。這一百篇如果只留一件事,就是這件:先問這個欄位有多少筆是真的有東西。
閱讀約 5 分鐘。
這是新手系列的第一百篇。
我想留下的不是回顧,是一張我自己每次都要重查的表。
三十個欄位的填答率
| 欄位 | 有值 | 填答率 | 供應商 ≥10 家的 3,156 筆裡 |
|---|---|---|---|
| name | 42,225 | 100.0% | 100.0% |
| notes | 42,225 | 100.0% | 100.0% |
| toxicity_oral/dermal/inhalation | 42,224 | 100.0% | 100.0% |
| occurrence | 42,218 | 100.0% | 100.0% |
| cas | 31,035 | 73.5% | 87.0% |
| assay | 27,221 | 64.5% | 66.3% |
| logp | 19,667 | 46.6% | 60.6% |
| cosmetic_uses | 15,459 | 36.6% | 63.4% |
| flash_point | 14,316 | 33.9% | 73.8% |
| bp | 13,009 | 30.8% | 61.7% |
| appearance | 10,270 | 24.3% | 78.8% |
| odor_descriptions | 8,298 | 19.7% | 73.8% |
| potential_uses | 7,807 | 18.5% | 82.9% |
| odor_type | 7,001 | 16.6% | 67.0% |
| flavor | 6,919 | 16.4% | 67.0% |
| odor | 6,913 | 16.4% | 65.7% |
| taste_descriptions | 5,879 | 13.9% | 60.3% |
| specific_gravity | 5,285 | 12.5% | 52.2% |
| refractive_index | 4,609 | 10.9% | 47.7% |
| regulatory | 4,509 | 10.7% | 55.2% |
| fema | 3,617 | 8.6% | 50.4% |
| mp | 3,080 | 7.3% | 28.0% |
| odor_strength | 2,451 | 5.8% | 43.5% |
| structure_class | 2,174 | 5.1% | 27.1% |
| odor_substantivity | 2,035 | 4.8% | 38.8% |
| shelf_life | 1,303 | 3.1% | 24.8% |
| storage | 1,232 | 2.9% | 24.0% |
| ghs_hazard_statements | 369 | 0.9% | 11.0% |
**第三欄比第二欄有用。**同一個欄位在「有人在賣的材料」上填答率高得多——外觀從 24.3% 跳到 78.8%,用途從 18.5% 跳到 82.9%。
**但也有反過來的:GHS 危害說明就算在有供應商的紀錄上也只有 11.0%。**那是我在這一百篇裡看過最空的一格,而它是唯一直接講安全的那一格。
而那四個 100% 是假的
notes 與三個毒性欄,每一筆都有字。那些字是這樣的:
| 欄位 | 佔位字串 | 筆數 |
|---|---|---|
| notes | None found |
33,410 |
| toxicity_oral | Not determined |
37,039 |
| toxicity_dermal | Not determined |
39,595 |
| toxicity_inhalation | Not determined |
41,493 |
扣掉之後:
| 欄位 | 表面 | 真實 |
|---|---|---|
| notes | 100.0% | 20.9% |
| toxicity_oral | 100.0% | 12.3% |
| toxicity_dermal | 100.0% | 6.2% |
| toxicity_inhalation | 100.0% | 1.7% |
吸入毒性:42,225 筆裡有 731 筆真的有數字。
一個 100% 滿、98.3% 空的欄位。
如果你寫程式去統計「有多少材料有毒性資料」,WHERE toxicity_oral != '' 會回答你四萬兩千——而正確答案是五千。
occurrence 那一欄更微妙
它也是 100%,而它最常見的短字串是:
| 字串 | 筆數 |
|---|---|
not found in nature |
14,746 |
| can be natural | 2,932 |
| found in nature | 2,634 |
**「自然界中不存在」不是佔位字串,它是一個主張。**而主張可以是錯的——我在veramoss 那篇發現那一筆就寫錯了。
**空白告訴你「沒有人填」,一個錯的主張告訴你「有人填了,而他填錯了」。**後者比較難發現。
這一百篇我改過的東西
**一篇會出錯的部落格才有可能是對的。**我把改過的列在這裡:
- FEMA 名單的推論錯誤——我從「海狸香這一類在 FEMA 上」推論原精也在,而原精的 FEMA 欄是空的。改法:不要從群組推論個別紀錄的登記狀態。
- 總覽地圖的數字被正規表示式改壞——一個沒有邊界的數字替換把「比 DPG 低 97 倍」改成了 107 倍。改法:改用上下文字串替換。
- 保存條件的因果講法——我說羧酸「被要求」冷藏,其實那只是「哪一類紀錄來自會寫冷藏的來源」。
- 一個失敗的假設——我猜共軛酮因為光氧化才被冷藏,實測只有 1.6 倍富集,不是訊號。照實寫在文章裡。
- 留香時數的可比性——留香欄寫的是「N 小時 @ M%」,我一百篇只讀了前半段,而我自己的地圖裡有一半的「400 小時」是稀釋後量的。三語都改了。
第 5 條是最貴的一課:一個欄位的單位可能不在數字旁邊,而在同一格的後半段。
如果只留三句話
- 先問這一格是不是真的有東西。
Not determined也是字。 - **看到單位就找它的條件。**濃度、溫度、壓力、途徑——那些常常寫在同一格。
- 兩筆紀錄打架的時候,先問它們是不是同一個東西(FEMA 編號不是識別碼),再問它們是不是來自同一份文件(欄位是繼承來的)。
**這一百篇沒有教你怎麼調香。**它們做的是另一件事:把一個資料庫讀到你知道它什麼時候會騙你。
這篇沒有建立的
- 填答率是用「欄位非空」算的,而我只針對五個欄位查了佔位字串。其他二十五個欄位裡可能還有我沒發現的佔位模式。
- 「供應商 ≥10 家」是我設的門檻,換一個數字那一整欄會變。
- 佔位字串是用「短字串出現次數」找出來的,長一點的佔位敘述抓不到。
- 我沒有辦法區分「沒有人測」與「測了但這個資料庫沒收」。
Not determined兩種都涵蓋。 - 改過的那五件事是我記得的,不保證是全部。
- 這張表是 2026 年 9 月的快照。