The dataset files
The dataset page offers the data as an Excel workbook and as a CSV table. Both contain the same table, built for analysis: one row per electrospinning run, one column per value, every number in a fixed unit.
What's in the Excel workbook
| Sheet | Contents |
|---|---|
| README | Version, date, number of runs and publications, license, how to cite, and how to read the data. |
| Runs | The data. The header row and record_id stay in view while you scroll, and every column has a filter. Hover over a column header to see its description and unit. |
| Publications | One row per publication: DOI, link, title, abstract, device and number of runs. |
| Dictionary | Every column of Runs: group, unit, type and description, and the bulk-upload column it corresponds to. |
The CSV is the Runs sheet. It is UTF-8 encoded with a byte-order mark, so Excel shows µ, ° and accents correctly, and it is comma separated.
How to read the data
- Units are in the column names.
voltage_kVis always in kV,flow_rate_mL_hin mL/h,fiber_diameter_nmin nm. Values entered in another unit (V, µL/min, µm, mm, K, GPa, …) were converted. - A run without a recorded unit is in the contribution form's default unit, which is the one in the column name.
- Empty means "not reported". There are no placeholders such as
-or0. - Several values in one cell (
morphology,instabilities) are separated by;. - Polymers, solvents and additives are listed together (
polymers:PCL + GELATIN) and one per numbered column:polymer_1,polymer_1_mw_kDa,polymer_1_share_wt_pct, …solvent_1,solvent_1_share_vv_pct, …additive_1,additive_1_amount,additive_1_amount_unit(wt% or mg/mL),additive_1_amount_basis(what the amount is relative to:polymer,solutionorsolvent), …
- Copolymers have
polymer_N_monomersandpolymer_N_composition, e.g.LA:GAand75:25, inpolymer_N_composition_unit.polymer_typeishomopolymer,copolymer,blendorcore/shell. - Mixed and core/shell solutions (see Solution preparation):
solution_preparationsays which (single,mixed,core/shell), andsolution_descriptionsummarises the solutions.- The full structure is in the JSON download and the API.
- Coaxial runs have
flow_rate_core_mL_handflow_rate_shell_mL_h, andflow_rate_mL_his their total.
- Fiber diameter:
fiber_diameter_qualifierisexact,approximateorrange. For a range,fiber_diameter_nmis the midpoint andfiber_diameter_min_nm/fiber_diameter_max_nmare the bounds. - Concentration keeps its unit (
concentration,concentration_unit, mostly wt%). wt% and mg/mL cannot be converted into each other without the solution's density. unit_noteslists any value whose unit could not be converted; such values are left empty instead of being guessed.completeness_score(0–100) shows how much of the important information a run has.record_ididentifies a run and stays the same across dataset versions.
Column groups
| Group | Columns |
|---|---|
| Run | record_id, completeness_score |
| Publication | doi, publication_url, publication_title, data_origin, extraction_method, source_location |
| Polymers / Additives / Solvents | polymer_type, polymers, polymer_N_…, additives, additive_N_…, solvents, solvent_N_… |
| Solution | solution_preparation, solution_description, concentration, concentration_unit, viscosity_cP, surface_tension_mN_m, conductivity_mS_cm, evaporation_rate_mg_cm2_h, ph |
| Needle | needle_type, needle_gauge_G, needle_diameter_mm, needle_inner_gauge_G, needle_inner_diameter_mm, needle_middle_gauge_G, needle_middle_diameter_mm, needle_outer_gauge_G, needle_outer_diameter_mm, needle_material. A needle size is either a gauge or an inner diameter in mm, as reported; gauges are not converted to mm. |
| Collector & device | collector_type, collector_material, collector_…_cm / _rpm / _mm, device_manufacturer, device_model, custom_device |
| Process | voltage_kV, flow_rate_mL_h (+ _core_ / _middle_ / _shell_), tip_collector_distance_cm, spinning_duration_min, temperature_C, relative_humidity_pct, formation_stable, instabilities |
| Fibers | fiber_diameter_nm, fiber_diameter_sd_nm, fiber_diameter_qualifier, fiber_diameter_min_nm, fiber_diameter_max_nm, diameter_method, diameter_n, morphology, product_weight_mg |
| Properties | tensile_strength_MPa, youngs_modulus_MPa, elongation_at_break_pct, fracture_behaviour, specific_surface_area_m2_g, porosity_pct, permeability_nm2, water_contact_angle_deg, electrical_conductivity_S_m, thermal_conductivity_W_mK, application fields |
| Quality | unit_notes |
The Dictionary sheet is the complete, authoritative list. The numbered columns start at three per component and grow if a run has more.
Loading the data
import pandas as pd
runs = pd.read_csv("electrospinning_dataset.csv")
# or: pd.read_excel("electrospinning_dataset.xlsx", sheet_name="Runs")
pan = runs[runs["polymers"] == "PAN"]
pan.plot.scatter(x="voltage_kV", y="fiber_diameter_nm")
runs <- read.csv("electrospinning_dataset.csv", fileEncoding = "UTF-8-BOM")
summary(runs$fiber_diameter_nm)
Correcting or extending the data
The downloaded file (Excel or CSV) can be uploaded on the bulk upload page, and the web form's Import from Excel reads it too.
- New runs: the rows are uploaded as new runs. Use this to add your own runs in the same layout.
- Corrections: to correct a run that is already published, edit it in My Submissions or contact us.
- Mixed and core/shell runs are re-uploaded as one solution; describe them on the Solutions sheet to keep their structure.
The image dataset
The Image dataset (.zip) download (and format=zip on the export endpoints) holds the fiber images of the runs, with their metadata:
README.md version, license, citation, counts, how to load it
images.csv one row per image
runs.csv the runs that have images, in the same columns as the main dataset
images/{record_id}/{image_id}_{type}.{ext}
- Files: images are grouped by run. The extension is the file's real format (png, jpg, tif, ...), detected from the file itself.
- images.csv:
image_id,file(path in the archive),record_id,image_type(SEM, FESEM, Cross-sectional SEM, Microscopy, Simple Image),file_format,width_px,height_px,file_size_bytes,sha256,scale_bar_nm,magnification_x,staining,description,other_metadata, followed by key values of the run (doi,polymers,solvents,concentration,voltage_kV,flow_rate_mL_h,tip_collector_distance_cm,fiber_diameter_nm,morphology, ...). For everything else, join with runs.csv onrecord_id. - A version's zip is made from the same runs as its tables, so its values match the Excel and CSV of that version.
import pandas as pd
from PIL import Image
images = pd.read_csv("images.csv")
sem = images[images.image_type == "SEM"].dropna(subset=["fiber_diameter_nm"])
for row in sem.itertuples():
img = Image.open(row.file)
target = row.fiber_diameter_nm
Dataset versions published before October 2026 keep the layout they were released with.