<jupyter_start><jupyter_text>0 Setup<jupyter_code>import pandas as pd
import numpy as np
import os<jupyter_output><empty_output><jupyter_text>1 データの準備  1.1 CSVから読み込み<jupyter_code>#元データ読み込み
raw_df = pd.read_csv(
    'jiro-nutrition-facts.csv', header = 8, 
    #必要な列を読み込む
    usecols = ['食品番号','食品名','エネルギー（kcal）','たんぱく質','脂   質','炭水化物','カリウム','カルシウム','ビタミンB1','ビタミンB2','ビタミンC','飽和脂肪酸','食塩相当量'],
    #以下の２項目は現段階でデータ型を明示しておいたほうが何かと都合が良い。
    dtype = {'食品番号': str, '食品名': str}
)

#雰囲気を確認するとこんな感じ
#お掃除の方針
#→カッコに入った数値、i.e. (0.28)とか(0)とか、は、推定値を表すので、カッコを外して算入することにしたい。
#→Trや - は 0.0 にしておいた方が安心（NaNにするとあとで面倒くさいので）。
raw_df<jupyter_output><empty_output><jupyter_text>1.2 お掃除<jupyter_code>#数値のカッコを外し、文字は 0 に。
clean_df = raw_df.replace(
    ['\((\d+\.*\d*)\)', '\(Tr\)', 'Tr', '-'], 
    [r'\1', 0.0, 0.0, 0.0], regex=True)
#データタイプを float に揃えておく（これをやっておかないとあとの計算で原因不意の error でハマることが多い。）
clean_df.iloc[:,2:] = clean_df.iloc[:,2:].astype(float)

#確認
clean_df
#様子を見る　→ 良さげ
clean_df.info()
#ダメだった時の犯人探し用
#for i in range(0, clean_df.shape[0]):
#    for j in  range(1,clean_df.shape[1]):
#        print(i,j, clean_df.iloc[i,j], type(clean_df.iloc[i,j]))<jupyter_output><empty_output><jupyter_text>2 計算  2.1 計算用に空のDataframeを作る<jupyter_code>#新たに calc_df を作る　← clean_df をcopy()して改造する方針。
calc_df = clean_df.copy()
#2列目の右に「食材重量(100g)」欄を挿入。初期値は 0.0
calc_df.insert(2,'食材重量(100g)', 0.0)
#全体的に数値はすべて 0.0 で初期化しておく。
calc_df.iloc[:,2:] = 0.0

#確認
calc_df<jupyter_output><empty_output><jupyter_text>2.2 食材重量を設定<jupyter_code>#食材重量設定の例

#めん重量設定（100g 単位）
calc_df.iloc[0,2] = 2.8 #めん
#キャベツ重量設定（100g 単位）
calc_df.iloc[1,2] = 0.4 #キャベツ
#もやし重量設定（100g 単位）
calc_df.iloc[2,2] = 0.3 #もやし
#ぶた重量設定（100g 単位）
calc_df.iloc[3,2] = 1.1 #ぶた
#植物油脂重量設定（100g 単位）
calc_df.iloc[4,2] = 0.0 #植物油脂
#動物脂類重量設定（100g 単位）
calc_df.iloc[5,2] = 0.2936 #動物脂類
#しょうゆ重量設定（100g 単位）
calc_df.iloc[6,2] = 0.0 #しょうゆ
#鳥がらだし量設定（100g 単位）
calc_df.iloc[7,2] = 0.0 #鳥がらだし
#中華だし重量設定（100g 単位）
calc_df.iloc[8,2] = 0.0 #中華だし
#洋風だし重量設定（100g 単位）
calc_df.iloc[9,2] = 2.0 #洋風だし<jupyter_output><empty_output><jupyter_text>2.3 計算<jupyter_code>#表計算操作（一行ずつ計算。ちょっと頭悪そう…）
for k in range(calc_df.shape[0]):
    calc_df.iloc[k,3:] = clean_df.iloc[k,2:] * calc_df.iloc[k,2]
    
#確認 → 良さげ :)
calc_df
#項目ごとの合計値を確認
calc_df.iloc[:,3:].sum()
#合計の行を calc_df の最後に無理やり（calc_df.iloc[:,3:].sum()）加えて summary_df を作る。
summary_df = calc_df.append(calc_df.sum(), ignore_index=True)
#それだけだとカッコ悪いのでちょっと整える。
summary_df.iloc[10,[0,1]] = (np.nan, '合計')
#確認
summary_df<jupyter_output><empty_output><jupyter_text>CSVに保存<jupyter_code>summary_df.to_csv('jiroCalc-sumary.csv')
os.system('open .')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.19162826420890938, 'fraction_numerical': 0.05261136712749616, 'mean_word_length': 6.550724637681159, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 29, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '331781', 'license': 'MIT', 'n_tokens_mistral': 1805, 'n_tokens_neox': 1782, 'n_words': 179, 'path': 'jiroCalc-01.ipynb', 'repo_name': 'ggcurrs/gota2-observatory2', 'size': '2604'}