She visited Hideo’s house, a modest wooden home at the edge of the river. The garden was overgrown, but a single, meticulously pruned bonsai tree stood at the center—a pine that had survived the fire, its roots clinging stubbornly to the soil.
An elderly neighbor, Mrs. Kondo, opened the door.
“He was a good man,” she said, eyes glistening. “He saved my grandson’s life that night. He ran into the burning hall with a bucket of water, but the flames were too strong. He… he left the next morning, never to return.”
Mrs. Kondo handed Chiharu a folded piece of paper. It was a handwritten note, dated 12 April 2021, the night of the last blaze. kansai enkou 45 chiharu 2021 2021
“If this is read, I am gone. The smoke you see is not fire but a veil. Follow the river upstream. You’ll find the truth in the old tunnel. – H.”
The river upstream led to a disused railway tunnel that had been sealed after a landslide in 1998. The tunnel was rumored to be a hideout for smugglers during the 1970s, but no one had entered it in decades.
These features give the race its “Enkō” (far‑reaching light) character: the terrain is physically demanding but visually uplifting, encouraging runners to keep moving toward the light at the end. She visited Hideo’s house, a modest wooden home
In the months that followed, Kansai Enkō 45 became more than a race; it became a symbol of resilience. The city’s official report listed a 35 % increase in participation compared to the pre‑pandemic year, despite the limited crowd. Local businesses reported a surge in sales, and the story of Chiharu’s run was featured on national television, inspiring countless others to lace up their shoes and find their own circles of light.
Two years later, in 2023, Chiharu found herself standing at the starting line again—this time for the 47th edition of Kansai Enkō. The crowd was larger, the energy louder, and the world had begun to heal. Yet the core remained unchanged: a line of runners, each a tiny ray, together forming a luminous halo that wrapped the city in hope.
She glanced at the indigo bib hanging from her neck, feeling the weight of the past and the promise of the future. The race was more than a distance; it was a story—one she had helped write, one that would continue to be written by every runner who dared to step onto the pavement, to feel the wind, and to become a part of Kansai’s endless circle of light. “He was a good man,” she said, eyes glistening
And so, the story of Kansai Enkō 45 and Chiharu’s first run became a thread woven into the fabric of Osaka—a reminder that even when the world seems divided, the rhythm of feet hitting the ground can still bring us together, one step at a time.
Important Clarification:
Who is "Chiharu"?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Create a feature from the fields:
- region (e.g. "kansai")
- sponsor (e.g. "enkou")
- number (e.g. 45)
- name (e.g. "chiharu")
- year_1 (e.g. 2021)
- year_2 (e.g. 2021)
The script demonstrates two typical derived features:
1. A concatenated identifier (string)
2. A numeric flag that tells whether the two year columns are equal.
"""
import pandas as pd
def build_features(df: pd.DataFrame) -> pd.DataFrame:
"""
Add derived columns to *df* and return the enriched DataFrame.
Parameters
----------
df : pd.DataFrame
Must contain the columns:
['region', 'sponsor', 'number', 'name', 'year_1', 'year_2']
Returns
-------
pd.DataFrame
The original DataFrame plus:
* ``event_id`` – a readable, URL‑friendly identifier.
* ``same_year`` – 1 if ``year_1`` == ``year_2`` else 0.
"""
# ---- 1️⃣ String identifier ----------------------------------------------
# Example output: "kansai-enkou-45-chiharu-2021"
# We drop the duplicated year (keep only the first) to keep it tidy.
df["event_id"] = (
df["region"].astype(str).str.lower()
+ "-" + df["sponsor"].astype(str).str.lower()
+ "-" + df["number"].astype(str)
+ "-" + df["name"].astype(str).str.lower()
+ "-" + df["year_1"].astype(str)
)
# ---- 2️⃣ Numeric flag (same‑year?) ----------------------------------------
df["same_year"] = (df["year_1"] == df["year_2"]).astype(int)
# (Optional) you could also add a *duration* column if you have a start/end year:
# df["duration_years"] = (df["year_2"] - df["year_1"]).abs()
return df
# --------------------------------------------------------------------------- #
if __name__ == "__main__":
# ------------------- Sample data ----------------------------------------
# In a real project you would load your own CSV / database table.
sample_data =
"region": ["kansai", "kansai", "kansai"],
"sponsor": ["enkou", "enkou", "enkou"],
"number": [45, 46, 45],
"name": ["chiharu", "satoshi", "chiharu"],
"year_1": [2021, 2020, 2021],
"year_2": [2021, 2020, 2022], # note the last row has a different year
df = pd.DataFrame(sample_data)
print("=== Original DataFrame ===")
print(df, "\n")
df_enriched = build_features(df)
print("=== After feature creation ===")
print(df_enriched)