Kaggle Dataset ”Open Food Facts”の探索的解析(EDA)(1)
カテゴリー: データサイエンス
作成日: 2023-01-23
Kaggleは世界最大級のデータサイエンスコンペティションプラットホームです。Kaggleは企業や行政などの組織とデータサイエンティスト/機械学習エンジニアを結びつけるプラットホームとなっていて、コンペティションの他に、約20万弱のdatasetとそれらdatasetの解析や機械学習モデルのプログラムcodeが投稿されています。どのようなデータが公開されているかを知ることができ、さらにデータ解析や機械学習モデル作成するためのアルゴリズムの知識を深め、そのプログラミングをトレーニングすることができます。 まずダウンロードしたデータの概要から詳細までを解析します。これを探索的データ解析:EDA(Exploratory data analysis)と言います。
dataset "Open Food Facts"について
"food"で検索すると2,833のdatasetがヒットしました。検索されたdatasetのなかから、最も多い1,100以上のVotes(いいね)がついている"Open Food Facts"とそのデータ解析を数回に分けて紹介します。
Open Food Factsは、非営利団体による世界中の食品の成分、アレルゲン、栄養成分、製品ラベルに記載されているあらゆる情報を含む、フリーでオープンなデータベースです。Android、iPhonなどのアプリやカメラを使ってバーコードスキャンし、商品やラベルの画像をアップロードすることで、5000人以上の協力者が150カ国から600,000以上の商品を追加しています。
Open Food Factsのdatasetへのアクティビティ
非常に多くのアクセスとダウンロードがされていて、500を超えるデータ解析プログラムのNotebookも投稿されています。
- Votes(いいね): 1,108
- Views: 398,079
- Downloads: 56,919
- Notebooks(プログラムコード): 504
Open Food Factsのdatasetの構成
datasetには、1 つの表がtsv形式で格納されています。ファイル容量は約1GBです。
- ファイル形式: tsv
- ファイル容量: 1.0 GB
- 列数(データ項目): 163
- 行数(データ数): 356,027
今回のデータ解析手順
Pythonで作成したプログラムにて下記の手順で解析しました。
- ダウンロードしたzipファイルの解凍
- データファイルの読み込み
- 列名(項目名)の確認
- 日本の商品データの抽出
- 商品名「どん兵衛きつねうどん」のデータを確認
データ項目(列名)
項目数(列数)は163あります。データ登録に関するデータ、商品名や商品パッケージ、ブランドに関するデータ、原料や製造場所、購入場所、国、に関する情報、原材料、栄養成分に関するデータなどの項目があります。 項目数、食品データ数が多いので、調べたり使いたいデータを絞り込む必要があります。
試しに日本の食品データを抽出してみます
列”countries_en"で"Japan"または"日本"を含むデータを抽出してみました。データ数(行数)は357でした。"product name"が欠損しているデータを削除すると132件が残りました。これらのprodct name の一部を書き出します。日本語が多いですが、英語他での表記もあります。馴染みの商品も多いです。
'だし醤油', '低塩だし醤油', 'Vinaigre de riz pour sushi (すし酢) Mizkan',
'味道楽', '蒟蒻ゼリー メロン', 'Nutella',
'Orangina',
'Cook Do 麻婆茄子', 'ザ.チャーハン', 'Magic Salt', 'なっとくのチキンドリアソース',
'ゴチュジャン炒め', 'Glico チキンライス', 'Glico ガーリックライス', '鶏ごぼう', '緑茶',
'伊藤園 - お〜いお茶 - 京都 - 宇治 - 抹茶入 - 水出', 'わかめ醤油らぁめん', 'Kiri クリームチーズ',
'Twinings Earl Grey', 'Van Houten chocolate pudding', 'タコライスソース',
'チキンドリア', '日の出 本みりん', 'かっぱえびせん'、
などなど、こんな感じです。
「日清のどん兵衛 きつねうどん」のデータを抽出して表示する
列"product name"で"どん兵衛 きつねうどん"を含むデータの原材料表示と栄養成分表示を下表に記しました。
product_name | quantity | countries | ingredients_text | energy _100g |
fat _100g |
carbo hydrates _100g |
proteins _100g |
salt _100g |
sodium _100g |
---|---|---|---|---|---|---|---|---|---|
日清のどん兵衛 きつねうどん [西] | 95g | 日本 | 油揚げめん(小麦粉、植物油脂、食塩、植物性たん白、大豆食物繊維)、かやく(味付油揚げ、かまぼこ)、スープ(食塩、魚介エキス、醤油、魚粉、昆布エキス、七味唐辛子、ねぎ、糖類、昆布パウダー、魚介調味油、香味油)、加工でん粉、調味料(アミノ酸等)、増粘剤(アラビアガム)、リン酸塩(Na)、炭酸Ca、カラメル色素、pH調整剤、乳化剤、酸化防止剤(ビタミンE)、香料、香辛料抽出物、パプリカ色素、クチナシ色素、ビタミンB2、ベニコウジ色素、ビタミンB1、(原材料の一部に乳成分、さば、ごま、ゼラチンを含む) | 1699 | 16.2 | 56. | 9.2 | 5.842 | 2.3 |
Pythonによるプログラムのコード
実際に解析に用いたプログラムのコードです。あくまで参考です。自己責任で適当に編集して試してください。
開発・実行環境:Google Colaboratory
ダウンロードしたzipファイルの解凍
datasetのあるサイトページからダウンロードするとzipファイルでダウンロードされますので、解凍します。tsvファイルが保存されます。
# Import
import shutil
# unpack
filename = 'en.openfoodfacts.org.products.tsv.zip'
shutil.unpack_archive(filename, 'unzip')
データの読み込みと抽出
# Import
import pandas as pd
# tsvデータの読み込み
filename = 'en.openfoodfacts.org.products.tsv'
df = pd.read_csv(filename, delimiter='\t', encoding='utf-8')
# 列名を表示して、国名と商品名が記載されている列を探す
print(df.columns.values)
# 列'product_name'のデータ型を文字型に変換
df.product_name = df.product_name.astype(str)
# 列'countries_en'の値を確認。'Japan'、'日本'が含まれているデータあり。
print(df['countries_en'].unique())
# 列'countries_en'に'Japan'または'日本'が含まれている行を抽出。362データが抽出されました。
df_jen01 = df[df['countries_en'].str.contains('Japan|日本', na=False)]
print(df_jen.shape) #行数、列数表示
# 列'product_name'の要素が欠損値の行を削除. 136行残る
df_jen02 = df_jen01[df_jen01['product_name'][ !='nan']
print(df_jen02.shape)
# 列'product_name'の値を確認.
print(df_jen02['product_name'].values)
# 列’product_name'に'どん兵衛'を含む行を抽出。3行抽出される。
df_donbe01 = df[df['product_name'].str.contains('どん兵衛')]
print(df_donbe01.shape)
# 3行とも欠損値の列を削除
num_l = []
for i, value in enumerate(df_donbe01.isna().all()):
if value == False:
num_l.append(i)
df_donbe02 = df_donbe01.iloc[:, num_l]
df_donbe02.shape
次回もこのデータの探索的解析(EDA)を続けてみます。
ページトップへ戻る