Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/HelenDiMo/archaios-data-Intelligence/llms.txt

Use this file to discover all available pages before exploring further.

desembarco_normandia.ipynb is the analytical heart of the A.D.I. project. It documents every step of the data pipeline — from loading the five raw THOR CSV files through exploratory statistical analysis to producing the three ADI master datasets that power the Power BI dashboards. This page walks through each notebook section, explaining what the code does, what the outputs mean, and how each step feeds the archaeological prospection model for Normandy.

Running the Notebook

1

Install dependencies

Install the required Python libraries before opening the notebook:
pip install jupyter pandas numpy matplotlib seaborn
2

Launch the notebook

From the repository root, launch Jupyter and open the analysis notebook:
jupyter notebook desembarco_normandia.ipynb
3

Verify the data paths

The notebook expects the five THOR source CSV files to be present in the data/ subdirectory. The three master output CSVs (adi_dataset_master.csv, adi_master_1_5_junio.csv, and adi_master_1943_1944_CLEAN.csv) are written directly to the repository root once you run all cells in sequence.
The notebook is in Spanish. Variable names and markdown commentary are in Spanish, consistent with the project deliverable language. The underlying CSV column names remain in English (from the original THOR database).

Notebook Structure

The notebook is organised into four major sections that mirror the analytical workflow — from raw ingestion to final enrichment.

Section I: Data Exploration and Preparation

The opening section establishes the data inventory. All five THOR source files are loaded with pd.read_csv(..., low_memory=False) and each is profiled for dimensions, column data types, null counts, and a five-row preview. This provides the foundation for deciding which datasets are suitable for the Normandy-specific analysis.
DatasetFileRecordsColumnsRole in A.D.I.
11_cleanbombww2.csv1,10921Scoped to MTO — excluded
22_operations.csv178,28146Primary analysis dataset
33_thor_wwii_aircraft_gloss.csv526Aircraft code glossary
44_thor_wwii_data_clean.csv178,28162Full-theater cleaned THOR data
55_thor_wwii_weapon_gloss.csv598Weapon and bomb type glossary
Dataset 1 — 1_cleanbombww2.csv (1,109 records, 21 columns): This file is a clean version of the MTO (Mediterranean Theater of Operations) dataset, primarily covering Italy and Sicily. When filtered to France in 1944, only one mission is returned, and its Target City coordinate resolves to [44°N 1°E] — central France, far from Normandy. The notebook concludes that this dataset carries an irrecoverable geographic bias for our purposes and excludes it from all further analysis. Dataset 2 — 2_operations.csv (178,281 records, 46 columns): This is the primary dataset for the project. It contains digitised WWII mission reports from USAAF and RAF operations, covering every theater from 1939 to 1945. Each record includes mission date, theater, country, aircraft series, target location coordinates, bomb load by type, and total weight in tons. Filtered to France (1943–1944), it yields 17,795 missions — the backbone of the A.D.I. Normandy analysis. Dataset 3 — 3_thor_wwii_aircraft_gloss.csv (52 records, 6 columns): A reference glossary with columns aircraft (short code), name, full_name, aircraft_type, and a hyperlink to a specification page. This table is joined to Dataset 2 to decode Aircraft Series short codes (e.g., B17, B26, A36) into human-readable model names (e.g., Boeing B-17 Flying Fortress) for the Power BI dashboard. Dataset 4 — 4_thor_wwii_data_clean.csv (178,281 records, 62 columns): The expanded, fully cleaned THOR WWII dataset. It contains more columns than Dataset 2, including additional target classification fields (tgt_type, tgt_industry, tgt_priority) and sighting method codes. This dataset is used to audit target-type distributions across the full France/1944 scope. Dataset 5 — 5_thor_wwii_weapon_gloss.csv (59 records, 8 columns): A weapon glossary covering all ordnance types appearing in the THOR records. Columns include weapon_name, weapon_type, weapon_class (HE, IC, FRAG), alt_weapon_name, and weapon_description. This glossary informs the weapon_type classification logic applied to the master dataset.

Section II: D-Day Statistical Analysis

Section II filters each dataset down to France-specific missions and runs descriptive statistical analysis. The code tests multiple date string formats to ensure complete capture of June 6, 1944 records (06/06/1944, 6/6/1944, 1944-06-06). Dataset 1 findings (France, 1944): As expected from the Section I profile, the filter returns exactly 1 mission. Its Target City is 44 00 N 001 00 E — a raw coordinate string placed in the city field, mapping to central France. This confirms the dataset is unsuitable and is discarded. Dataset 2 findings (France, June 6, 1944 — D-Day): 535 missions are identified. Top five target cities on D-Day by mission count:
RankTarget CityMissions
1CAEN80
2UNKNOWN38
3VIRE28
4ARROMANCHES24
5ARGENTAN23
D-Day tonnage statistics: The Total Weight (Tons) field for the 535 D-Day missions shows mean = 35.6t, median = 23t, max = 523t. The distribution is right-skewed, with high-tonnage strategic raids inflating the average. Dataset 4 findings (France, June 6, 1944): The top target types for D-Day missions, drawn from the fuller tgt_type column available in Dataset 4:
RankTarget TypeCount
1TACTICAL TARGETS111
2TACTICAL TARGET48
3MARSHALLING YARD25
4CITY AREA24
5BATTLE APEA21
For the full 1943–1944 France scope, the broader dataset reveals the most-bombed target classes: AIRDROME (2,157 hits), UNIENTIFIED TARGET + UNIDENTIFIED TARGET (1,181 + 574 = 1,755 hits combined), and CITY AREA (539 hits) — detailed in the Archaeological Findings page.

Section III: Historical Context, France 1943–1944

Section III filters Dataset 2 to the full France scope (1943–1944), producing 17,795 missions — the backbone of the A.D.I. Normandy analysis. It generates the adi_master_1943_1944_CLEAN.csv master table and contextualises the statistical findings within the military history of the Allied air campaign. Tonnage anomaly identified: The Total Weight (Tons) field shows a max of 999.0 tons — an outlier the notebook identifies as a legacy documentation placeholder (a sentinel value used when the exact figure was unknown at digitisation time). The full-period distribution is right-skewed: mean = 44.1t, median = 30t. The 999-ton value is flagged in the data governance documentation and excluded from tonnage-based heat maps. Top five target cities (France, 1943–1944):
RankTarget CityMissions
1BREST527
2ST LO404
3UNKNOWN322
4METZ279
5PAS DE CALAIS272
For the Normandy consultancy, Brest and Saint-Lô are the scientifically justified priority zones for 3D scanning and military archaeology work on bunkers and fortified positions. The aircraft type join merges Dataset 2 (filtered to France) with the Dataset 3 glossary on Aircraft Seriesaircraft, using a left join to preserve all missions even when the aircraft code has no glossary entry. A fallback column Avion_Nombre_Completo is created:
df_enriquecido['Avion_Nombre_Completo'] = (
    df_enriquecido['full_name'].fillna(df_enriquecido['Aircraft Series'])
)
Top aircraft used over France (1943–1944):
Aircraft CodeFull NameMissions
B17Boeing B-17 Flying Fortress5,278
B26Martin B-26 Marauder3,991
B24Consolidated B-24 Liberator3,625
HVYHeavy bomber (generic)1,161
GB17British B-17 variant1,113
The dominance of the B-17 and B-26 in the France theater reflects the 8th and 9th Air Force’s strategic and medium-bomber campaign: B-17s executing high-altitude strategic raids while B-26 Marauders carried out lower-altitude tactical interdiction of transport infrastructure.

Section IV: June 1–5 Pre-D-Day Analysis

The final section isolates the five days immediately before the landings to document the shift from the strategic bombing campaign to the transportation plan — the intensive targeting of French railways, coastal gun positions, and road bridges designed to isolate the Normandy beachhead from German reinforcements.
df_1_5_junio = df_2_operations[
    (df_2_operations['Target Country'].str.upper() == 'FRANCE') &
    (df_2_operations['Mission Date'] >= '1944-06-01') &
    (df_2_operations['Mission Date'] <= '1944-06-05')
]
Output: 922 missions in France across five days. Key statistics:
MetricValue
Total missions922
Mean tonnage per mission46.3t
Median tonnage36t
Max tonnage602t
Top aircraftB17 (363), GB17 (160), B24 (156)
Top targeted cities, June 1–5:
RankCityMissions
1BERCK SUR MER72
2WIMEREUX70
3BOULOGNE SUR GESSE67
4EQUIHEN63
5HARDELOT48
These coastal and near-coastal targets — concentrated along the Pas-de-Calais coast — reflect the Allied deception operation (Operation Fortitude) that bombed non-Normandy sites to mislead German intelligence. The resulting dataset is exported as adi_master_1_5_junio.csv and feeds the “1–5 June 1944” dashboard view in Power BI.

Derived Columns

A.D.I. created three enrichment columns applied to adi_dataset_master.csv by parsing and normalising the raw ordnance tonnage fields from 2_operations.csv:
# Step 1: Normalise null values to 0
df_master_dia_d['High Explosives Weight (Tons)'] = (
    df_master_dia_d['High Explosives Weight (Tons)'].fillna(0)
)
df_master_dia_d['Fragmentation Devices Weight (Tons)'] = (
    df_master_dia_d['Fragmentation Devices Weight (Tons)'].fillna(0)
)

# Step 2: Create named aliases
df_master_dia_d['he_tons']   = df_master_dia_d['High Explosives Weight (Tons)']
df_master_dia_d['frag_tons'] = df_master_dia_d['Fragmentation Devices Weight (Tons)']

# Step 3: Classify weapon type based on which ordnance categories are present
conditions = [
    (df_master_dia_d['he_tons'] > 0) & (df_master_dia_d['frag_tons'] > 0),
    (df_master_dia_d['frag_tons'] > 0),
    (df_master_dia_d['he_tons'] > 0),
]
tipos = [
    'Ataque Combinado (HE + Fragmentación)',
    'Bombardeo de Fragmentación',
    'Bombardeo Pesado HE',
]
df_master_dia_d['weapon_type'] = np.select(conditions, tipos,
                                            default='Sin Datos de Armamento')
Distribution in adi_dataset_master.csv (D-Day missions, France):
weapon_typeMissions
Bombardeo Pesado HE493
Ataque Combinado (HE + Fragmentación)33
Bombardeo de Fragmentación9
The weapon_type column is a critical input for the UXO risk map described in the Archaeological Findings page — missions classified as Ataque Combinado carry the highest probability of leaving intact unexploded ordnance in the soil.

Build docs developers (and LLMs) love