【Python_pandas】CSVを読み取り、わかりやすく表示しよう!

beauty

こんばんは、Yuinaです。

Pythonでスキンケア製品の成分情報とその効能を可視化するプログラムを作ってみましたので、

メモというか日記がてらブログに載せてみます。

よろしくお願いいたします!

使用するデータ

1. 製品データ:product_ingredients.csv

製品ID,製品名,ブランド名,ビタミンC,コラーゲン,セラミド,ヒアルロン酸,グリセリン
P001,美白セラム,ABCコスメ,0.05,0.02,0.01,0.03,0.10
P002,保湿クリーム,XYZビューティー,0.01,0.08,0.03,0.05,0.15
P003,エイジングローション,DEFスキン,0.03,0.10,0.02,0.04,0.12
P004,UVプロテクター,ABCコスメ,0.00,0.00,0.00,0.02,0.08

それぞれの製品に含まれる成分の「配合比率(=濃度)」が記録されています。

2. 成分効能データ:ingredient_benefits.csv

成分名,効能
ビタミンC,抗酸化作用があり、シミやそばかすの予防、肌のトーンアップに役立ちます。コラーゲンの生成を促進する効果も期待できます。
コラーゲン,肌のハリや弾力を保つ主要な成分です。肌の潤いを高め、シワやたるみの改善に寄与します。
セラミド,肌のバリア機能を強化し、外部刺激から肌を守ります。乾燥を防ぎ、肌の潤いを閉じ込める重要な役割を担います。
ヒアルロン酸,非常に高い保水力を持つ成分で、肌の表面に潤いの膜を作り、しっとりとした感触を与えます。乾燥による小ジワを目立たなくする効果も。
グリセリン,肌に水分を引き寄せ、保湿する効果があります。多くの化粧品に配合される基本的な保湿成分です。

作ったプログラム

import pandas as pd

def load_data(product_csv_path, benefits_csv_path):

try:
# 製品データを読み込み、製品IDをキーとする辞書に変換
df_products = pd.read_csv(product_csv_path, encoding='utf-8')
products_dict = df_products.set_index('製品ID').T.to_dict('dict')

# 成分効能データを読み込み、成分名をキーとする辞書に変換
df_benefits = pd.read_csv(benefits_csv_path, encoding='utf-8')
benefits_dict = df_benefits.set_index('成分名')['効能'].to_dict()

return products_dict, benefits_dict
#例外処理
except FileNotFoundError as e:
print(f"エラー: ファイル '{e.filename}' が見つかりません。パスを確認してください。")
return None, None
except Exception as e:
print(f"データの読み込み中にエラーが発生しました: {e}")
return None, None

# CSVファイルのパスを指定
product_csv_path = 'product_ingredients.csv'
benefits_csv_path = 'ingredient_benefits.csv'

# データを読み込む
products_data, benefits_data = load_data(product_csv_path, benefits_csv_path)

if products_data and benefits_data:
# 登録されている全製品を表示
print("\n[登録されている製品一覧]")
product_ids_list = list(products_data.keys())
# 読み込まれた製品名データのindex抽出
for i, product_id in enumerate(product_ids_list):

print(f"{i+1}. {products_data[product_id]['製品名']} ({products_data[product_id]['ブランド名']})")

"""
1. 美白セラム (ABCコスメ)
2. 保湿クリーム (XYZビューティー)
3. エイジングローション (DEFスキン)
4. UVプロテクター (ABCコスメ)"
"""

# ユーザーに製品を選択してもらう
selected_product_id = None
while selected_product_id is None:
try:
choice_str = input(f"\n詳細を見たい製品の番号を入力してください (1-{len(product_ids_list)}): ")
choice_index = int(choice_str) - 1
if 0 <= choice_index < len(product_ids_list):
selected_product_id = product_ids_list[choice_index]
else:
print("無効な番号です。リストの番号から選んでください。")
except ValueError:
print("無効な入力です。数字を入力してください。")

# 選択された製品の情報を取得
selected_product_info = products_data[selected_product_id]

print(f"『{selected_product_info['製品名']}』 ({selected_product_info['ブランド名']}) の詳細")

"""
『エイジングローション』 (DEFスキン) の詳細
"""

# 美容成分の含有量と効能を表示
print("\n[主要美容成分と含有量・効能]")
for ingredient_name, amount in selected_product_info.items():
# itemsでkeyとオブジェクトを返す
# 製品名、ブランド名、製品IDなど数値でないものはスキップ
if ingredient_name in ['製品名', 'ブランド名']:
continue

# 含有量が数値の場合のみ処理
if isinstance(amount, (float, int)):
print(f"\n◆ {ingredient_name}: {amount * 100:.1f}% 配合")

'''
◆ ビタミンC: 3.0% 配合
効能: 抗酸化作用があり、シミやそばかすの予防、肌のトーンアップに役立ちます。コラーゲンの生成を促進する効果も期待できます。
◆ コラーゲン: 10.0% 配合
効能: 肌のハリや弾力を保つ主要な成分です。肌の潤いを高め、シワやたるみの改善に寄与します。
'''

# 成分の効能があれば表示
if ingredient_name in benefits_data:
print(f" 効能: {benefits_data[ingredient_name]}")
else:
print(f" 効能: この成分の効能は辞書に登録されていません。")

else:
print("データの読み込みに失敗したため、プログラムを終了します。")

以下のような挙動をします。

登録されている製品から番号を選びます。

選択した商品の美容成分の含有量と効能が表示されます。

まとめ

スキンケア商品を選ぶとき、成分を重視しています。

実際にどんな成分が含まれていて、どんな効果があるのか一目でわかると便利だなと思うので、

実用化を目指して引き続き、コーディングを進めていきたいと思います。

ありがとうございました!

タイトルとURLをコピーしました