食品成分表のデータ取り扱いについて考える時期がやってきました。
2023年4月,『日本食品標準成分表2020年版(八訂)』の2023年更新データが公表される予定です。2021年12月に大量の正誤表が公表されて以来,久しぶりの更新データになります。既存食品への分析値の追加や,新規食品の収載等が予定されています。
このタイミングで,(何度目になるかわかりませんが)食品成分表のデータ取り扱い(データクレンジング)について考えておきたいと思います。
文科省公表 成分表データの特徴
文部科学省から公表される成分表データには,下記の特徴があります:
- 印刷を前提にしたExcelファイルで公表される → データとして取り扱える形式に整形が必要
- 複数のExcelファイルに成分値が掲載されている → 複数のExcelファイルを結合する必要がある
- データ量はわりと多い → 合計2,400行・150列ほどのデータがある
- ほぼ毎年データが更新される → 毎年データをダウンロードし,加工する必要がある
- そのままの状態では栄養計算に使用できない → 栄養計算可能な形式に修正が必要
少なくとも,データの形式で提供していただけるため,紙だけでの公表よりはマシです(七訂より前は紙だけでの公表でした)。とはいえ,そのままの状態で利用できるほど単純ではなく,いくらかの手間が必要になります。
成分表データを計算可能な形式にするための作業
文科省から公表された成分表データを計算可能な形式にするためには,下記作業が必要です。
- データの抽出(文科省Webサイトからダウンロード)
- データの結合(本表 + 別表)
- データの変換・加工(不要な列や行の削除,計算可能な値に変換)
- データの書き出し(成分値データ,メタデータ)
- 書式設定(利便性向上のため,データに特定の書式を設定する)
下記に,過去の作業方法(七訂~八訂2020)および八訂2023で行う予定の作業方法を示します。
七訂2015 | 八訂2020 | 八訂2023 | |
---|---|---|---|
1. データの抽出 | 手動 | PowerQuery | PowerQuery |
2. データの結合 | VBA | PowerQuery | PowerQuery |
3. データの変換・加工 | VBA | VBA | PowerQuery,Excel関数 |
4. データの書き出し | VBA | VBA | PowerQuery,Excel関数 |
5. 書式設定 | VBA | VBA | VBA |
七訂2015では,ほとんどの作業をVBAで行っていました。当時はこれが最適解だったと思います。しかし,問題は,成分表のデータ形式は一定ではなく,自由自在に変化してくるということです。一度作成したコードは,次年度にはそのまま使えません。そのため,更新データが公表される度にコード修正やそれに伴うテストに時間を要していました。
八訂2020では,PowerQueryを導入しました。特にデータ抽出・結合といった部分は,かなり容易になりました。しかし,データの変換・加工等については,やや複雑な作業があるため,VBAを使用していました。しかし,七訂同様に,VBAコードのメンテナンスには手間がかかっていました。
八訂2023では,さらに踏み込んでPowerQueryを使おうと思っています。よくよく勉強してみると,PowerQueryでもVBAで行っている作業の多くのことが代替できることに気がつきました。加えて,この間に公表されたExcelの新関数(LAMDA関数など)も,脱VBAを助けてくれそうです。幸い,それらを活用できる環境でもあります。書式設定については,どうしてもVBAに頼らざるを得ないところです。Excelに特有の事項であるため,しかたないことでしょう。
PowerQueryとExcel関数を活用する上での注意すること
八訂2023では,PowerQueryとExcel関数を積極的に使用していこうと考えています。それらを活用する上では下記に注意が必要でしょう。
- M言語を編集しない:PowerQueryは,内部ではM言語を使用し,データ操作等を行っています。このM言語を直接編集することで,より様々なことが可能になります。一方で,これは諸刃の剣であり,M言語が読めない人には扱えなくなるという,VBAと同じ問題を含んでいます。
- Excel関数をちりばめない:Excel関数を複数のセルにちりばめてしまえば,関数のレビューが困難になりますし,メンテナンス性も低下します。解決策としては,たとえばスピルを活用し,関数を入力するセルを最小限にすること等があげられます。ただし,あまりにもスピルが多くなりすぎると計算に時間がかかりすぎてしまいますので,あまり多くなりすぎないようにする必要があります。
- Excel関数をシンプルに保つ:言われるまでもないことですが,関数はシンプルな方が望ましいです。このためには,新関数の使用を検討する必要があります。たとえば,複数条件による分岐処理を行う際,以前はIF関数をネストしていましたが,現在であれば,IFS関数を使用した方がシンプルに記述できます。
まとめ
今回は,食品標準成分表のデータクレンジングについて考えてみました。
振り返ってみると,七訂2015の頃と比べてExcel側の環境も変化してきたように感じます。加えて,今後は文科省から公表される成分表データも,データベース構築等,より利用しやすいシステムに更新される可能性もあるそうです(Ref)。
その時々の状況に合わせ,最適な手法を選んでいきたいものです。