Skip to main content

Runfeng Yin Portfolio1

Page 1


SEDIMENTS OF CAPITAL

A FORENSIC AUDIT OF THE CHILEAN COPPER METABOLIC RIFT

Workshop2 rework with the help of ai and python for collectiong data.

Team member: Runfeng Yin ,Yuyang Ding

Reworked by Runfeng Yin

Abstract:

The global imperative for decarbonization has paradoxically intensified the extractive pressure on the Global South, re-inscribing colonial patterns of unequal exchange under the guise of the "Green Transition." This project investigates the socio-ecological collateral damage of copper mining in Chile, focusing on the operations of Anglo American in the Los Bronces district. By synthesizing historical archives from the Allende era with contemporary financial and geological data, the research exposes the systemic asymmetry between the mobility of capital and the immobility of toxic waste.

Methodologically, the project employs a counter-forensic approach. It challenges the corporate narrative of "sustainable mining" by reconstructing the material reality of extraction. Through mass balance algorithms and geospatial simulation, the research reveals how the privatization of natural resources—cemented during the post-1973 neoliberal shift—has transformed Chile into a repository of global industrial risk.

The investigation is visualized through five scalar evidences:

1. Planetary Displacement: Mapping the geopolitical shift of tailings dam failures from the Global North to the South, proving the phenomenon of "environmental arbitrage."

2. The Extraction Arteries: A flow analysis tracing the diversion of copper (material) and profits (capital) to foreign centers, contrasted with the permanent accumulation of toxic tailings in the local landscape.

3. Continental Asymmetry: A hydro-social risk simulation across South America, demonstrating how localized private footprints threaten vast public river networks.

4. The Tectonic Gamble: A spatiotemporal overlay of seismic activity (USGS data) and tailings storage, exposing the engineering hubris of accumulating fluid waste within the "Ring of Fire."

5. Recursive Trauma: A comparative reconstruction of the 1965 El Cobre disaster and the looming threat of the El Torito dam, visualizing the exponential growth of risk and the historical recurrence of negligence.

This project asserts that the tailings dam is not merely an engineering byproduct, but a monument to the "negative value" left behind by global capitalism—a geological debt that the Chilean territory is forced to bear in perpetuity.

Technical Toolkit:

Data Mining & Cleaning: Python (Pandas/Geopy) via Google Colab.

Geospatial Analysis: QGIS, Natural Earth Data, USGS Earthquake API.

Data Visualization: Kepler.gl (WebGL-based large-scale geospatial mapping).

AI-Assisted Rendering: Midjourney (Texture generation), Nano Banana (Style transfer & Structure preservation), Jimeng/Runway (Motion simulation).

uploaded = files.upload()

# 获取文件名

filename = next(iter(uploaded))

print(f" 正在读取 : {filename} ...")

# 读取 Excel

try:

df = pd.read_excel(io.BytesIO(uploaded[filename]))

print(" 读取成功!开始法医级清洗 ...")

except Exception as e: print(f" 读取失败 : {e}")

# ==========================================

# 核心逻辑:提取与换算函数 # ==========================================

def clean_volume_m3(text):

"""

提取体积,统一转换为 立方米 (m3)。

处理 : million, >, ?

""" if pd.isna(text): return -1 text = str(text).lower().replace(',', '') # 去逗号 if '?' in text and not re.search(r'\d', text): return -1 # 只有问号没有数字

# 提取基础数字

# 优先找 "million" 结构 million_match = re.search(r'([>~]?\s*)?(\d+\.?\d*)\s*million', text) if million_match: return float(million_match.group(2)) * 1_000_000

# 找普通数字 ( 假设单位是 m3)

# 排除掉年份 ( 如 2025) 的干扰,通常体积数字会带有 m3, cubic 等关键词,或者数字很大 nums = re.findall(r'(\d+\.?\d*)', text) if nums: # 取最大的数字作为体积估计 ( 防止取到日期 )

# 这是一个启发式策略 vals = [float(n) for n in nums] best_val = max(vals) if best_val < 2030 and best_val > 1900: # 可能是年份,忽略 return -1 return best_val return -1 def clean_area_km2(text):

"""

从 Impacts 描述中提取受污染面积,统一转换为 平方公里 (km2)。 支持 : km2, sq km, acres, hectares

""" if pd.isna(text): return 0 text = str(text).lower().replace(',', '')

# 1. 找 km2 / square km km_match = re.search(r'(\d+\.?\d*)\s*(?:km2|sq\s*km|square\s*kilometers)', text) if km_match:

&

This visualization is constructed from the WISE Uranium Project's historical database of major tailings dam

Due to the unstructured nature of the original archives, a custom Python script was deployed to scrape, parse, and clean the dataset. Ambiguous location data was reconstructed using Google Geocoding API to achieve precise geospatial coordinates, while missing volumetric data was standardized through cross-referencing industry reports.

Conclusion:

1.Geopolitical Displacement: The map reveals a distinct temporal shift. Prior to 2000, accidents were concentrated in the Global North (Europe/USA). Post-2000, the epicenter of risk has migrated aggressively to the Global South (Latin America & Africa), confirming the hypothesis of "Environmental Arbitrage"—where strict regulations in core nations push high-risk extraction to the periphery.

2.The Scale of Disaster: There is an inverse correlation between ore grades and accident magnitude. As global copper grades decline (approaching 0.6%), the volume of waste required to extract the same amount of metal increases exponentially. Consequently, modern failures in the Global South involve volumes of toxic sludge orders of magnitude larger than historical accidents in the North.

Global Statistics Chart on Tailings Accidents

On this map, the pale blue indicates events from a distant past, while orange and red denote those closer to the present. The size of the circles represents the scale of the incidents. However, it should be noted that the consequences of some incidents have not been statistically

Consequently, I separated the base image into a background layer and column-specific layers, applying distinct style transfers to each before compositing the elements. This approach succeeded.For the column chart, employed cast metal columns to symbolise antiquity, while flaming columns signify more recent periods. The height of each column correlates with the severity of the incident's consequences. As you can see, I ultimately produced this image, which I subsequently imported into AI video software to animate and add sound.

Style Transfer Based on Nano Banana
Style Transfer Based on Nano Banana
Base map from Kepler
Style Transfer Based on Nano Banana
On this page, the original base image underwent Midjourney stylisation rather than improvisation. Even so, some terrain distortion remains visible, prompting my decision to split layers for batch stylisation processing.
On this page, the original base image underwent Midjourney stylisation rather than improvisation. Even so, some terrain distortion remains visible, prompting my decision

Map 02: The Extraction Arteries

<

locs = { "Mine": {"lat": -33.142, "lon": -70.275}, "Santiago": {"lat": -33.448, "lon": -70.669}, } columns = []

# ==========================================

# 组 A: 真正留下的 (矮子) # ==========================================

columns.append({ "Lat": locs["Santiago"]["lat"], "Lon": locs["Santiago"]["lon"], "Type": "Local_Retention", "Label": "Local Tax ($1.0B)", "Value": 10, # 高度基准 "Color": "#00BFFF" # 蓝

<Python script> # /// HYDRO-SOCIAL RISK ALGORITHM ///

# Source: Rico et al. (2008)

def calculate_risk(volume_m3):

# Convert to Mm3 v_mm3 = volume_m3 / 1_000_000

# Run-out Distance Formula

# L_max = 1.6 * V^0.42 runout_km = 1.6 * (v_mm3 ** 0.42)

# Inundation Area Formula

# S = 0.12 * V^0.7 area_km2 = 0.12 * (v_mm3 ** 0.7) return runout_km, area_km2

# STATUS: EXECUTED

# TARGET: CONTINENTAL SCALE

[ QUANTITATIVE DATA SUMMARY ]

> TOTAL PRIVATE FOOTPRINT 428.28 km² (0.7x Santiago)

> TOTAL RIVER NETWORK THREAT 2,353.73 km (0.5x Chile Length)

> ASYMMETRY RATIO 1 : 5.5

Visual Strategy: The Red Infection

Abandoning the traditional point-data representation, this map utilizes Red Circles of varying radii to represent the "Active Threat Zone." In Kepler.gl, these red zones are overlaid onto the cyan river arteries. The visual language is medical: the tailings dams are not static infrastructure, but viral loads infecting the circulatory system of the continent.

Accumulation by Dispossession in the Ring of Fire

import requests import pandas as pd import io from google.colab import files

# ==========================================

# 智利地震历史数据抓取器 (USGS API)

# 范围: 智利全境

# 时间: 1960-01-01 (瓦尔迪维亚大地震年份) -> 2024-01-01

# 震级: Magnitude 4.5+ (有破坏力的)

# ==========================================

print("�� 连接 USGS 地震数据库...")

# 1. 构建 API 请求 base_url = "https://earthquake.usgs.gov/fdsnws/event/1/query"

params = { "format": "csv", "starttime": "1960-01-01", "endtime": "2024-01-01", "minmagnitude": 4.5, # 只看 4.5 以上的,否则数据量太大浏览器跑不

动 "minlatitude": -56.0, "maxlatitude": -17.0, "minlongitude": -76.0, "maxlongitude": -66.0, "orderby": "time"

}

# 2. 发送请求 try: response = requests.get(base_url, params=params) if response.status_code == 200: print(" �� 数据下载成功!正在解析...")

# 读取 CSV df_quakes = pd.read_csv(io.StringIO(response.text))

# 3. 简单清洗

# 保留关键列

df_clean = df_quakes[['time', 'latitude', 'longitude', 'depth', 'mag', 'place']]

# 提取年份

df_clean['year'] = df_clean['time'].str[:4].astype(int)

# 4. 导出 output_file = "chile_earthquakes_1960_2024.csv" df_clean.to_csv(output_file, index=False)

print("\n" + "="*30)

print(f" �� 抓取统计:")

print(f" - 总地震次数 (Mag 4.5+): {len(df_clean)}")

print(f" - 最大震级: {df_clean['mag'].max()}")

print(f" �� 文件名 {output_file}")

print(" �� 请拖入 Kepler.gl:")

print(" - 做成 Heatmap (热力图) 或者 Point Layer (大小随震级变 化)")

print(" - 颜色建议: 亮黄色/白色 (像电火花),对比尾矿的黑色")

files.download(output_file)

else: print(f" �� API 请求失败: {response.status_code}")

except Exception as e: print(f" �� 发生错误: {e}")

Design Intent: The Intersection of Geological Time and Capital Time This visualization exposes the fundamental contradiction of Chilean mining: the accumulation of fluid waste (Tailings) in a zone of hyper-active tectonics (Earthquakes). By utilizing Midjourney to generate a "cracked earth" texture and Nano Banana for style transfer, we created a base map that feels geologically unstable. Upon this, USGS seismic data (yellow sparks) and tailings accumulation (black towers) interact dynamically, framing the mining industry not as engineering, but as a high-stakes gamble against geological time.

Technical Forensics: The API Evidence

Seismic Crawling: A custom Python script was developed to query the USGS Earthquake Hazards Program API, retrieving 64 years of data (1960–2024, Magnitude 4.5+).

3D Spatiotemporal Mapping: In Kepler.gl, tailings dams are rendered as red area, while earthquakes are rendered as fleeting, high-frequency Heatmap Flashes.

The Narrative: The visualization proves that the "stability" claimed in corporate sustainability reports is a statistical fiction. The black towers are surrounded by a sea of fire; it is not a matter of if they will fail, but when the tectonic stress exceeds the structural limit—echoing the 1965 El Cobre tragedy.

This image aims to simulate the cracking earth during an earthquake. While the material texture was successfully simulated, I'm still pondering how best to depict the continuous nature of seismic activity. No satisfactory inspiration has emerged yet.

Visual reference image for Midjourney

1. The Metabolic Rift Value is dematerialized and accelerated towards the Global North, while entropy—in the form of toxic mass—is solidified and accumulated in the Global South.

2. The Asymmetry

For every dollar of profit extracted, Chile inherits a geological debt that exceeds the lifespan of the corporation. Modern efficiency is subsidized by local expendability.

3. The Recursive Trauma

The ghost of 1965 has not been exorcised; it has been scaled up. The El Torito dam is not infrastructure; it is a ticking time bomb built on the tectonic fault line of neoliberalism.

Turn static files into dynamic content formats.

Create a flipbook