#24 Wx、Eyを算出
今日は、データを保存しているcsvファイルの列名を変更したり、業種名(sector)を統一したりといった、細々なデータ操作から始めていました。
x産業の廃棄物発生量Wxを推計
次に、産業連関表の金額フローを物質フローに変換し、廃棄物発生量Wxを推計しました。
投稿#16にて、産業を1つに固定して算出した例を紹介しましたが、今回は全187産業において廃棄物発生量Wxを算出しました。
尚、算出式は下記のようになります。
for x in range(len(df_price_per_ton.index)):
# 投入量を計算
input = 0 # 投入分
output = 0 # 産出分
fuel = 0 # 燃料使用分
waste = 0 # 廃棄物発生量
for i in range(187):
for k in range(len(df_price_per_ton.index)):
if df_price_per_ton.iat[k, 0] == 0:
continue
if df_price_per_ton.index[k] == df_iotable.index[i]:
input += df_iotable.iat[i, x] * 1000000 // df_price_per_ton.iat[k, 0]
# 燃料使用分を計算
if df_price_per_ton.index[k] == '2121': # 石炭製品の燃料使用分
fuel += df_iotable.iat[i, x] * 1000000 // df_price_per_ton.iat[k, 0]
# 石油化学系基礎製品への石油製品の投入ではない場合
if df_price_per_ton.index[k] == '2111':
if df_iotable.columns[x] != '2031':
fuel += df_iotable.iat[i, x] * 1000000 // df_price_per_ton.iat[k, 0] # 石油製品の燃料使用分
# 産出量を計算
for i in range(187):
if i == x:
continue
if df_price_per_ton.iat[x, 0] == 0:
output = 0
else:
output += df_iotable.iat[x, i] * 1000000 // df_price_per_ton.iat[x, 0]
waste = input - output - fuel
df_estimate.iat[x, 0] = waste
df_estimate.iat[x, 1] = input
df_estimate.iat[x, 2] = output
df_estimate.iat[x, 3] = fuel
df_estimate.head()
上記のコードを実行すると、計算が終了するまでに5分程度かかるのがネックに感じています。なので、コードの改良が必要かと思いますが、それはおいおいやろうと思います^^;
計算結果の最初の5行は下記のようになります。
groupbyで、28分類の廃棄物発生量推計値Eyを計算
続いて、産業連関表の187分類の廃棄物発生量Wxを、廃棄物実態調査の28分類Eyに対応させてみました。
for sector, group in df_estimate.groupby('sector'):
print(sector + ':' + str(group['Wx'].sum()))
sectorの順序が整っていませんが、28分類ごとの廃棄物発生量Eyを、groupbyメソッドを使って算出できました。
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪