CoolFace
Datasetpublic

guanwencan/CRC_TEST_CODESPACE

Unified Seismic Soil Liquefaction Case-History Dataset I put this together because the liquefaction case histories I needed for my own work were scattered across about a dozen spreadsheets, every one of them with different units, column names and label conventions. Merging them by hand every time got old, so I cleaned everything once into a single CSV and figured other people might as well use it too. It's 1,830 field case histories from 9 public sources, all re-expressed under… See the full description on the dataset page: https://huggingface.co/datasets/guanwencan/CRC_TEST_CODESPACE.

sourceHugging Facecc-by-4.0updated 3mo agoView on Hugging Face
0likes20downloads
Dataset Card

Unified Seismic Soil Liquefaction Case-History Dataset

I put this together because the liquefaction case histories I needed for my own work were scattered across about a dozen spreadsheets, every one of them with different units, column names and label conventions. Merging them by hand every time got old, so I cleaned everything once into a single CSV and figured other people might as well use it too.

It's 1,830 field case histories from 9 public sources, all re-expressed under one schema. Each row is a soil layer that either liquefied or didn't during a real earthquake, with the seismic loading, the in-situ test index, and the soil properties you need to model triggering. It covers four test types (SPT, CPT, Vs, DPT) and 67 earthquakes, Mw 5.9 to 9.2. 318 of the rows keep the mean+std their original source reported, which is handy if you care about uncertainty.

What's in it

Total cases1,830
Liquefied / non-liquefied1,116 / 714
Test typesSPT (726), Vs (462), DPT (391), CPT (251)
Sources9
Earthquakes67
Mw range5.9 – 9.2
Rows with reported mean+std318
Columns23

[image]

[image]

What I actually changed

Nothing exotic, just the boring harmonization that nobody wants to redo:

  • —Depths to metres, stresses to kPa (the original files mix ft/psf and m/kPa).
  • —All the CSR values normalized to the usual CSR<sub>7.5,1atm</sub> reference (Mw=7.5, σ′v=1 atm), using Idriss & Boulanger's MSF and the Boulanger & Idriss (2014) Kσ.
  • —Labels collapsed to liquefied ∈ {0, 1}.
  • —Kept source, earthquake and site_name on every row so you can do proper group splits and trace any case back to where it came from.

Files

data/liquefaction_unified.csv   # the data, 1,830 rows x 23 cols
figures/dataset_overview.png    # the 6-panel overview above
figures/spt_detailed.png        # SPT subset distributions
scripts/loader_unified.py       # how I load it (sklearn group split)

Columns

ColumnUnitWhat it is
case_id—unique id, {source}_{n}
source—which dataset it came from (table below)
earthquake—earthquake name — use it for group splits
site_name—site / borehole — also use it for group splits
Mw—moment magnitude
amaxgpeak ground acceleration
CSR_7p5_1atm—CSR normalized to Mw=7.5, σ′v=1 atm
depth_mmcritical-layer depth
GWT_mmgroundwater table depth
sigma_v_kPakPatotal vertical stress
sigma_v_eff_kPakPaeffective vertical stress
test_type—SPT / CPT / Vs / DPT
N1_60cs—fines-corrected, normalized SPT count (SPT rows)
qc1Ncs—fines-corrected, normalized CPT tip resistance (CPT rows)
Vs1m/snormalized shear-wave velocity (Vs rows)
N120_corrected—normalized DPT N120 (DPT rows)
FC%fines content
GC%gravel content (gravel sources only)
D50mmmedian grain size
Vsm/sshear-wave velocity where reported
liquefiedintthe label. 0 = no, 1 = yes
data_quality—A/B/C if the source said, else B
has_uncertaintybooltrue if that row had a mean+std in the original

Heads up: because four test types live in one table, the index columns are sparse on purpose. An SPT row fills N1_60cs, a CPT row fills qc1Ncs, and so on. Filter on test_type first and you get dense features — the loader does exactly that.

Using it

python
import pandas as pd
df = pd.read_csv("data/liquefaction_unified.csv")

spt = df[df.test_type == "SPT"]
X = spt[["N1_60cs", "Mw", "amax", "CSR_7p5_1atm", "sigma_v_eff_kPa"]]
y = spt["liquefied"]

Or just use scripts/loader_unified.py, which picks the feature set per test type and does a leakage-free group split for you:

python
from scripts.loader_unified import load_subset
X_tr, X_te, y_tr, y_te, groups_te, sx, sy, y_te_raw = load_subset("SPT")

One thing about splitting

Don't do a random sample-level split. Rows from the same borehole or the same earthquake are heavily correlated, so a random split flatters your model. Split by group instead — either 8:2 by site_name, or 5-fold by earthquake with whole earthquakes held out. I report ECE / PICP / AUC under both. Reviewers will ask, so you might as well.

Where the data comes from

This is a derived dataset — I'm only sharing the cleaned columns, not the original spreadsheets. Those belong to the original authors and you should grab them from the papers below (and cite them). Counts are after my dedup/cleaning, so they won't always match the raw files exactly.

TagCasesTestSource
CETIN18208SPTCetin et al. (2018), Data in Brief, doi:10.1016/j.dib.2018.08.043
BI14_SPT230SPTBoulanger & Idriss (2014) SPT case-history database
BI14_CPT251CPTBoulanger & Idriss (2014) CPT case-history database
CHICHI288SPTChi-Chi 1999 earthquake case histories
ANDRUS_SUPP415VsAndrus & Stokoe Vs database (supplemental)
WEN08_VS47VsWenchuan 2008 Vs case histories
HU_GRAV234DPTCao et al. (2021) gravelly-soil DPT, Data in Brief, doi:10.1016/j.dib.2021.107092
NIMA_DPT110DPTExpanded DPT database (with reported std)
CAO1347DPTCao et al. (2013) DPT case histories

A couple of cleaning notes: the gravelly DPT set showed up in two of the original files, I kept one copy. Rows missing something essential (Mw, amax, sigma_v_eff, liquefied, or any in-situ index) got dropped; everything else stays as NaN.

License

Cleaned columns are CC-BY-4.0. The underlying measurements still belong to the original authors — this isn't a relicense of their files. Fair academic use, please cite the sources above.

Contact

Wencan Guan — wencan.guan@uni-weimar.de Happy to hear about bugs in the cleaning or sources I should add.

If you use it, a citation is appreciated:

bibtex
@misc{guan_liquefaction_dataset,
  author = {Guan, Wencan},
  title  = {Unified Seismic Soil Liquefaction Case-History Dataset},
  year   = {2026},
  note   = {Harmonized from 9 public sources; cleaned columns only},
  howpublished = {Hugging Face Datasets}
}