「駅すぱあと」でCO2排出量を調べてみる

駅すぱあとでCO2排出量を調べる

駅すぱあとでCO2排出量を調べる

「SDGs」という言葉がありますね。ひと昔前の言葉で言うと「エコ」です。
「ウチの会社はSDGsに配慮しています」だと、それはつまり、「ウチの会社はエコです」ということ。

会社でSDGsを担当されている方のオンラインコンサルをしました。「通勤で排出するCO2量を計算する」という案件でした。

  1. 「駅すぱあと」のサイトに接続して、「○○駅」から「△△駅」まで列車で移動した場合のCO2(二酸化炭素)排出量を調べる
  2. 「会社」と「自宅」の住所から距離を調べる

上記2点、あわせて1時間もかかりませんでした。
本文にてソースコードを公開しています。

「自分もSDGs担当で、ちょうど、CO2排出量の計算のことで困っていました!」という方はなかなかいないかなとは思いますが...「こんなこともできるよ」ということで、ひとつの参考としてください。
Pythonを使ったデータ収集・処理がいかに強力かを示す好例です。日々のデータ分析や業務効率化のヒントになるかと思います。

「数百人いる従業員の通勤で排出するCO2」をどうやって調べるか

最近Pythonデータ分析ゼミに参加された方から、以下のような話がありました。

  • 実は、会社で、SDGs担当だ
  • 従業員の通勤で排出するCO2(二酸化炭素)の量を計算するという仕事をちょうど任されたところだ
  • とはいえ、数百人いる従業員の通勤で排出するCO2を手作業で調べてエクセルに記入していくのは現実的ではない

そんな課題を1時間で解決した事例をご紹介します。

こういう仕事は、手作業でははっきり言って苦痛。エクセルマクロでもかなり面倒です。
ですが、Pythonなら一発です。

ということで、土曜日にオンラインコンサルをしました。

「交通費計算」も「CO2排出量計算」も、Pythonで一発でできる

「『○○駅』から『△△駅』まで列車で移動した場合の交通費は?」といったことならば、Pythonで一発で計算できます。(手作業一切不要です)

「CO2排出量の計算」なんかも、上に紹介した動画の方法の応用で、一瞬で片付く案件です。

  1. エクセルで通勤経路を表にする(「○○駅」から「△△駅」までという表を作る)
  2. Pythonがエクセル表を読みこむ
  3. 通勤ルートごとに、CO2排出量をPythonが調べてエクセルに書き込む(品川駅から川崎駅なら193グラム!等々)

「CO2排出量計算アプリ」のソースコード

上記の仕組みのアプリをオンラインコンサルの場で実際に僕が作りました。
所要時間は、だいたい30分くらいでした。以下のようなプログラムです。(以下で、「API_KEY」のところは、駅すぱあとの運営会社にリクエストして受け取る必要があります)

import os
import requests
from dotenv import load_dotenv
import openpyxl

load_dotenv()
api_key = os.getenv('EKISPERT_API_KEY')

base_url = 'https://api.ekispert.jp/v1/json/search/course/plain?key={API_KEY}&from={station_from}&to={station_to}'

# Excelファイルを開く
wb = openpyxl.load_workbook('通勤経路.xlsx')
ws = wb.active

# 2-11行のデータを処理
for row in range(2, 12):
    station_from = ws[f'D{row}'].value  # D列:最寄り駅
    station_to = ws[f'E{row}'].value  # E列:出勤先駅

    print(row, station_from, station_to)

    # APIリクエスト
    url = base_url.format(API_KEY=api_key, station_from=station_from, station_to=station_to)
    response = requests.get(url)
    data = response.json()

    # 最初の経路を取得
    course = data['ResultSet']['Course'][0]
    co2_emission = course['Route']['exhaustCO2']

    # F列にCO2排出量を書き込み
    ws[f'F{row}'] = int(co2_emission)

    print(f"{station_from} → {station_to}: {co2_emission}g")

# Excelファイルを保存
wb.save('通勤経路.xlsx')
print("CO2排出量をExcelファイルに保存しました!")

「CO2排出量計算アプリ」の実行結果

実行結果の例は、以下のとおり。エクセルファイルのF列に、CO2排出量が書き込まれています。

駅すぱあとでCO2排出量を調べる

駅すぱあとでCO2排出量を調べる

ここまで、だいたい30分です。

ついでに...2つの住所の間の距離を調べてみた

ついでに、通勤経路が車の場合も考慮して、「2つの住所の間の距離を調べる」というプログラムもその場で書いてみました。
これは、国土地理院が用意したプログラムを使います。以下の例では、東京駅から有楽町駅までの距離を調べてみました。

これもソースコードをお見せします。以下の要領。

import requests
import urllib.parse


def gsi_geocoding(address):
    """国土地理院APIで住所から緯度経度を取得"""
    encoded_address = urllib.parse.quote(address)
    url = f"https://msearch.gsi.go.jp/address-search/AddressSearch?q={encoded_address}"

    response = requests.get(url)
    data = response.json()

    if data and len(data) > 0:
        result = data[0]
        return {
            'lat': result['geometry']['coordinates'][1],
            'lon': result['geometry']['coordinates'][0],
            'address': result['properties']['title']
        }
    return None


def gsi_distance(lat1, lon1, lat2, lon2):
    """国土地理院APIで2点間距離を計算"""
    url = "http://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/bl2st_calc.pl"
    params = {
        'outputType': 'json',  # JSON出力
        'ellipsoid': 'GRS80',  # 測地系
        'latitude1': lat1,  # 出発点緯度
        'longitude1': lon1,  # 出発点経度
        'latitude2': lat2,  # 到着点緯度
        'longitude2': lon2  # 到着点経度
    }

    response = requests.get(url, params=params)
    data = response.json()
    return float(data['OutputData']['geoLength'])  # メートル単位

# 使用例
loc_from = gsi_geocoding("東京都千代田区丸の内1-1")
print(f"緯度: {loc_from['lat']}, 経度: {loc_from['lon']}")

loc_to=gsi_geocoding("東京都千代田区有楽町二丁目9-17")
print(f"緯度: {loc_to['lat']}, 経度: {loc_to['lon']}")

distance = gsi_distance(loc_from['lat'], loc_from['lon'], loc_to['lat'], loc_to['lon'])
print(f"距離: {distance:.2f}m")

実行結果は以下のとおり。「東京駅-有楽町駅間の距離は、1077メートル」と算出されました。

緯度: 35.684559, 経度: 139.761765
緯度: 35.674961, 経度: 139.763565
距離: 1077.32m

二つの住所の間の距離を計算するPythonプログラム

二つの住所の間の距離を計算するPythonプログラム

ここまで、20分くらいです。

ということで、Python初心者の受講生さんに解説しつつ上記2つのプログラムを書いて、1時間かかりませんでした。

今回お見せしたプログラムは、すべて、以下からダウンロードできます。
https://github.com/k-brahma/eki-co2/archive/refs/heads/main.zip

「Pythonを使いこなせるか」&「アイデアの引き出しに解決策はあるか」

「Pythonを使いこなせない/使いこなせる」の違いは圧倒的です。
できない人には何週間かけてもできない。できる人は1時間もかからないでやり遂げられる。そんな大きな隔たりがあります。

あと、「アイデアの引き出し」に入っているものの量も圧倒的に違いますね。
今回サポートを受けられた受講生さんは、僕に相談するまで、「PythonがあればCO2排出量の計算は自動化できる」なんて、思いもよらなかったそうです。一方、僕からすると至極当然です。こういう、「発想・アイデアの差」も大きいですね。

「Pythonデータ分析ゼミ」では、「実務コンサル」を重視しています

「Pythonデータ分析ゼミ」では、「実務コンサル」を重視しています。

教科書的なお行儀のよい知識を学んでも、それだけでは役に立たないです。
ライブコンサルでは、僕の「アイデアの引き出し」の中身も惜しまず晒していますし、プログラムの書き方の指導の際にも、実際に実務に役立つプログラムを書くときならではの、「生のノウハウ」をすべて晒しています。

コンサルの様子は収録して「Pythonデータ分析ゼミ」参加者のみなさんにシェアしています。

Pythonデータ分析ゼミ8-9月の説明会のご案内

Pythonデータ分析ゼミ生は以下より説明会への優先案内を受け付けています。AIフル活用で最短・最速で学習します。

説明会に参加するだけでも、あなたの「Pythonについての知識」やPythonでできることについての「アイデアの引き出し」をかなり増やせるでしょう。
アイデアが湧くだけでも世界は楽しくなりますし、そのアイデアを実現できるだけのスキルを手に入れると、さらに世界は楽しくなります。

8月-9月の説明会日程をご案内しています。今すぐご登録ください。
https://forum.pc5bai.com/toiawase/request/python-data-priority-invitation/

公開日時: 2025/08/19 15:30