Skip to content

View or edit on GitHub

This page is synchronized from trase/data/cote_divoire/cocoa/logistics/q4_2025/clean/clean_2024_csv_values.ipynb. Last modified on 2026-06-21 06:35 CEST by GitHub Actions. Please view or edit the original file there; changes should be reflected here after a midnight build (CET time), or manually triggering it with a GitHub action (link).

import pandas as pd
df = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/civ_cooperatives_update/combined_data/just_CIV_2024_columns_fixed.csv')
df.columns
Index(['DISCL_TRADER_NAME', 'DISCL_SUPPLIER_ABRVNAME', 'DISCL_AREA_NAME',
       'DISCL_CERTIFICATION_NAME', 'DISCL_NUMBER_FARMERS', 'DISCL_LONGITUDE',
       'DISCL_LATITUDE', 'DISCL_COUNTRY_NAME', 'DISCL_YEAR', 'COMPANY',
       'DISCL_SUPPLIER_FULLNAME', 'DISCL_VOLUMES', 'DISCL_VOLUMES_UNIT',
       'DISCL_CERTIFICATION_PCT', 'DISTRICT_GEOCODE', 'CAM_BUYERS',
       'IS_CAM_V3', 'IS_JRC', 'JRC_BUYER_ID', 'DISCL_SUPPLIER_TYPE'],
      dtype='object')

Valentin's code translated to Python

import re
import unicodedata

import numpy as np

# Niamh's function
def move_long_abrvname_to_fullname(row):
    abrv = row['DISCL_SUPPLIER_ABRVNAME']
    fullname = row['DISCL_SUPPLIER_FULLNAME']
    if isinstance(abrv, str) and len(abrv) > 35 and (pd.isna(fullname) or fullname == ""):
        row['DISCL_SUPPLIER_FULLNAME'] = abrv
        row['DISCL_SUPPLIER_ABRVNAME'] = np.nan
    return row

def clean_abrvname1(col_name):
    """Handle cases where a full name and abbreviated name are given in the abrv name variable."""
    if not isinstance(col_name, str):
        return col_name

    patterns = {
        r"UNITE COOPERATIVE AGRICOLE DE DANANE": "COOP UDAN",
        r"COOPERATIVE AGRICOLE BACON ESPOIR": "CABES",
        r"COOPERATIVE AGRICOLE ABOTRE DE NIABLE": "COAANI",
        r"COOPERATIVE AGRICOLE BENKADI": "COOPABENKADI",
        r"COOPERATIVE AGRICOLE D'AGNANFOUTOU": "COESAG",
        r"COOPERATIVE AGRICOLE ZEMESS TAABA DE GBABAM": "COOPAZEG",
        r"COOPERATIVE DES PRODUCTEURS DE YAKASSE ATTOBROU": "COOPROYA",
        r"SOCIETE AGRICOLE BINKADI DE BROUDOUGOU PENDA CA": "SOCABB",
        r"SCOOPAO SOCIETE COOPERATIVE DES AGRICULTEURS DE PETIT OUAGA": "SCOOPAO",
        r"SOCIETE COOPERATIVE SIMPLIFIEE AGRICOLE KAMBONOU DE ARRAH": "SCOAKA",
        r"SOCIETE COOPERATIVE ESPERENCE DE KPELEKRO": "SOCAEK",
        r"SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRATION ENTENTE DE SEGUELA": "COOP CA ES",
        r"COOPERATIVE DES PRODUCTEURS AGRICOLES DE NIABLE": "COOP CA PAN",
        r"COOPERATIVE YEYONIAN DU CANTON ANIASSUE": "COOPYCA",
        r"SOCIETE COOPERATIVE AGRICOLE DE GNATO AVEC CONSEIL D'ADMINISTRATION": "SOCAG",
        r"SOCIETE COOPERATIVE AGRICOLE DE BAYOTA": "SOCABA COOP CA",
        r"SPAD GAGNOA": "SPAD GAGNOA",
        r"SCAT I|SCAT 1": "SCAT 1",
        r"\(CA\)$": " CA ",
        r"\(COOP\)$": " COOP ",
        r"\(SCOOP\)$": " SCOOP "
    }

    for pattern, replacement in patterns.items():
        if re.search(pattern, col_name):
            return replacement
    return col_name

def clean_abrvname2(col_name):
    """Remove common characters used in abbreviated coop names."""
    if not isinstance(col_name, str):
        return col_name

    # Normalize string (equivalent to str_trim)
    cleaned_col = col_name.strip()

    # Remove specified patterns
    cleaned_col = re.sub(r"\.|[(]|[)]| WAREHOUSE$", "", cleaned_col)
    cleaned_col = re.sub(r"\n|_|/|-", " ", cleaned_col)
    cleaned_col = re.sub(r"Ô", "O", cleaned_col)

    # Remove multiple spaces (equivalent to str_squish)
    cleaned_col = " ".join(cleaned_col.split())

    return cleaned_col

def clean_abrvname3(col_name):
    """Remove generic terms like CA, COOP, SCOOP, SCOOPS, and ' - CA'."""
    if not isinstance(col_name, str):
        return col_name

    pattern = r"COOP CA | COOP CA$|COOP | COOP$|SCOOP |SCOOP$|SCOOPS |SCOOPS$|SCOOP|- CA$"
    return re.sub(pattern, "", col_name)

def clean_fullname(col_name):
    """Clean cooperative full names."""
    if not isinstance(col_name, str):
        return col_name

    # Replace various cooperative terms with standardized form
    coop_pattern = r"SOCIETE COOPERATIVE |STE COOP |COPERATIVE |COOPRATIVE |SOCIETE AGRICOLE COOPERATIVE |ENTREPRISE COOPERATIVE |ENTREPRISE AGRICOLE COOPERATIVE |ENTREP COOPERA "
    fn = re.sub(coop_pattern, "COOPERATIVE ", col_name)

    # Replace various cafe-cacao terms with standard form
    cafe_pattern = r"DU CAFE&CACAO|DU CAFE & CACAO|DU CAFE& CACAO|DU CAFE &CACAO|DE CAFE&CACAO|DE CAFE & CACAO|DE CAFE& CACAO|DE CAFE &CACAO|DU CAFE-CACAO|DU CAFE - CACAO|DU CAFE- CACAO|DU CAFE -CACAO|DE CAFE-CACAO|DE CAFE - CACAO|DE CAFE- CACAO|DE CAFE- CACAO|CAFE&CACAO|CAFE & CACAO|CAFE& CACAO|CAFE &CACAO|CAFE-CACAO|CAFE - CACAO|CAFE- CACAO|CAFE -CACAO|DU CAFE ET DU CACAO|DE CAFE ET DE CACAO|CAFE ET DU CACAO|CAFE ET DE CACAO|DU CAFE ET CACAO|DE CAFE ET CACAO|CAFE ET CACAO|DU CAFE CACAO|DE CAFE CACAO|CAFE CACAO|CAFECACAO|DU CAFE COCOA"
    fn = re.sub(cafe_pattern, "STD_CAFE_CACAO_STD", fn)

    # Replace back with readable form
    return re.sub("STD_CAFE_CACAO_STD", "CAFE ET CACAO", fn)

def clean_fullname_manual(col_name):
    """Apply manual corrections to specific cooperative names."""
    if not isinstance(col_name, str):
        return col_name

    if re.search(r"COOPERATIVE AGRICOLE SOLIDARITE DE BLOLEQUIN", col_name):
        return "ENTREPRISE COOPERATIVE AGRICOLE DE BLOLEQUIN"
    elif re.search(r"COOPERATIVE POUR L'AMELIORAT DU REVENU DU PLANTEUR DE CI", col_name):
        return "COOPERATIVE POUR L'AMELIORATION DU REVENU DU PLANTEUR"
    elif re.search(r"COOPERATIVE SABABOUGNOUMAN DAGADJI", col_name):
        return "COOPERATIVE SABABOUGNOUMAN DE DAGADJI"
    elif re.search(r"ROBERT", col_name) and re.search(r"PORTE", col_name):
        return "ENTREPRISE COOPERATIVE AGRICOLE DES PRODUCTEURS CAFE ET CACAO DE ROBERT-PORTE"
    elif re.search(r"MAN EDI ANOUANZE", col_name):
        return "SOCIETE COOPERATIVE AGRICOLE MAN EDI ANOUANZE"
    return col_name
df = df.apply(move_long_abrvname_to_fullname, axis=1)

# Apply cleaning functions to the abbreviated supplier name column
df['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = df['DISCL_SUPPLIER_ABRVNAME'].apply(clean_abrvname1)
df['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = df['DISCL_SUPPLIER_ABRVNAME_CLEANED'].apply(clean_abrvname2)
df['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = df['DISCL_SUPPLIER_ABRVNAME_CLEANED'].apply(clean_abrvname3)

# Apply full name cleaning functions to the full supplier name column
df['DISCL_SUPPLIER_FULLNAME_CLEANED'] = df['DISCL_SUPPLIER_FULLNAME'].apply(clean_fullname)
df['DISCL_SUPPLIER_FULLNAME_CLEANED'] = df['DISCL_SUPPLIER_FULLNAME_CLEANED'].apply(clean_fullname_manual)

def set_supplier_type_cooperative(row):
    if isinstance(row['DISCL_SUPPLIER_FULLNAME_CLEANED'], str) and "COOPERATIVE " in row['DISCL_SUPPLIER_FULLNAME_CLEANED']:
        row['DISCL_SUPPLIER_TYPE'] = "COOPERATIVE"
    return row

df = df.apply(set_supplier_type_cooperative, axis=1)
df
DISCL_TRADER_NAME DISCL_SUPPLIER_ABRVNAME DISCL_AREA_NAME DISCL_CERTIFICATION_NAME DISCL_NUMBER_FARMERS DISCL_LONGITUDE DISCL_LATITUDE DISCL_COUNTRY_NAME DISCL_YEAR COMPANY ... DISCL_VOLUMES_UNIT DISCL_CERTIFICATION_PCT DISTRICT_GEOCODE CAM_BUYERS IS_CAM_V3 IS_JRC JRC_BUYER_ID DISCL_SUPPLIER_TYPE DISCL_SUPPLIER_ABRVNAME_CLEANED DISCL_SUPPLIER_FULLNAME_CLEANED
0 SOCIÉTÉ AFRICAINE DE CACAO NaN AGNIBILEKROU NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AVEC CONSEIL D'ADMINISTRATION BENK...
1 SOCIÉTÉ AFRICAINE DE CACAO NaN ABENGOUROU NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AVEC CONSEIL D'ADMINISTRATION ANOU...
2 SOCIÉTÉ AFRICAINE DE CACAO NaN BONGOUANOU NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AGRICOLE AHUANOU D'ARRAH AVEC CONS...
3 SOCIÉTÉ AFRICAINE DE CACAO NaN BANGOLO NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AGRICOLE GUELANIN AVEC CONSEIL D'A...
4 SOCIÉTÉ AFRICAINE DE CACAO NaN DIVO NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AGRICOLE IMAAH, COOPERATIVE SIMPLI...
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1971 NaN SCOOPANAB COOP – CA BANGOLO NaN NaN NaN NaN IVORY_COAST 2024.0 ECOM ... NaN NaN BANGOLO NaN NaN NaN NaN COOPERATIVE ANAB – CA COOPERATIVE AGRICOLE NOUVELLE ALLIANCE DE BANGOLO
1972 NaN CAFUGO COOP CA SASSANDRA NaN NaN NaN NaN IVORY_COAST 2024.0 ECOM ... NaN NaN SASSANDRA NaN NaN NaN NaN COOPERATIVE CAFUGO COOPÉRATIVE AGRICOLE DES FRÈRES UNIS DE GOBROKO
1973 NaN COOP-CCAPUO DUEKOUE NaN NaN NaN NaN IVORY_COAST 2024.0 ECOM ... NaN NaN DUEKOUE NaN NaN NaN NaN COOPERATIVE CCAPUO COOPERATIVE AVEC CONSEIL D`ADMINISTRATION COOP...
1974 NaN COOP_CA_UDAN DANANE NaN NaN NaN NaN IVORY_COAST 2024.0 ECOM ... NaN NaN DANANE NaN NaN NaN NaN COOPERATIVE UDAN COOPERATIVE AVEC CONSEIL D’ADMINISTRATION UNIT...
1975 NaN YEBOYOKON SCOOPS DIVO NaN NaN NaN NaN IVORY_COAST 2024.0 ECOM ... NaN NaN DIVO NaN NaN NaN NaN COOPERATIVE YEBOYOKON COOPERATIVE AGRICOLE YEBOYOKON DE DAIRO-DIDIZO

1976 rows × 22 columns

df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')
/var/folders/3r/r9b5rj5s3pb069rsg5zh_1640000gn/T/ipykernel_30332/4205746199.py:1: DtypeWarning: Columns (6,8,9,10,11,19,23,24,27,31,32,34) have mixed types. Specify dtype option on import or set low_memory=False.
  df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')
df_2023.columns
Index(['COOP_ID', 'YEAR', 'SUPPLIER_ABRVNAME', 'SUPPLIER_FULLNAME', 'LATITUDE',
       'LONGITUDE', 'DISTRICT_NAME', 'DISTRICT_GEOCODE', 'DISCLOSURE_SOURCES',
       'TRADER_NAMES', 'CERTIFIED', 'CERTIFICATIONS',
       'TOTAL_FARMERS_NONTRADER', 'TOTAL_FARMERS_TRADER', 'TOTAL_FARMERS',
       'DISCL_COUNTRY_NAME', 'DISCL_AREA_NAME', 'DISCL_SUPPLIER_ABRVNAME',
       'DISCL_SUPPLIER_FULLNAME', 'DISCL_SUPPLIER_TYPE', 'DISCL_LONGITUDE',
       'DISCL_LATITUDE', 'DISCL_VOLUMES', 'DISCL_VOLUMES_UNIT',
       'DISCL_CERTIFICATION_NAME', 'DISCL_CERTIFICATION_PCT',
       'SIMPLIF_ABRVNAME', 'CCTN_COOP_ID', 'IS_ALL_CAM_V3', 'IS_ANY_CAM_V3',
       'NB_FARMERS_COMPANY_YEAR', '!NOT_RFA', 'unique_rfa_link',
       'TOTAL_FARMERS_RFA', 'LVL_4_NAME', 'REPEATED_FROM_PAST_YEAR'],
      dtype='object')
df_2023
COOP_ID YEAR SUPPLIER_ABRVNAME SUPPLIER_FULLNAME LATITUDE LONGITUDE DISTRICT_NAME DISTRICT_GEOCODE DISCLOSURE_SOURCES TRADER_NAMES ... SIMPLIF_ABRVNAME CCTN_COOP_ID IS_ALL_CAM_V3 IS_ANY_CAM_V3 NB_FARMERS_COMPANY_YEAR !NOT_RFA unique_rfa_link TOTAL_FARMERS_RFA LVL_4_NAME REPEATED_FROM_PAST_YEAR
0 1 2019 0UBE COOPERATIVE AGRICOLE OUBE DE BANOUFLA 6.878 -6.450 DALOA CI-9.1.1_1 NaN NaN ... 0UBE 0UBE_-6.4_6.9_COOPERATIVE AGRICOLE OUBE DE BAN... True True NaN NaN NaN NaN DALOA False
1 2 2019 2 AD 2 AD 6.720 -3.503 ABENGOUROU CI-3.1.1_1 NaN NaN ... 2 AD 2 AD_-3.5_6.7_2 AD True True NaN NaN NaN NaN ABENGOUROU False
2 3 2019 2A SCCOPS COOPERATIVE LES AGRICULTEURS D'AKOUPE 5.477 -4.151 ABIDJAN CI-1.1.1_1 NaN NaN ... 2A SCCOPS 2A SCCOPS_-4.2_5.5_COOPERATIVE LES AGRICULTEUR... True True NaN NaN NaN NaN ABIDJAN False
3 4 2019 2AP COOPERATIVE AGRICOLE ANOUANZE DE PARA NaN NaN NaN NaN NaN NaN ... 2AP 2AP_NA_NA_COOPERATIVE AGRICOLE ANOUANZE DE PARA True True NaN NaN NaN NaN NaN False
4 5 2019 2A 2A 5.480 -4.155 ABIDJAN CI-1.1.1_1 NaN NaN ... 2A 2A_-4.2_5.5_2A True True NaN NaN NaN NaN ABIDJAN False
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
26017 5761 2023 ZOUAN KOUALOU COOPERATIVE AGRICOLE DE ZOUAN-HOUNIEN 6.915 -8.211 NaN CI-8.3.5_1 NaN NaN ... ZOUAN KOUALOU NaN True True NaN NaN NaN NaN NaN True
26018 5762 2023 ZOUEUDO COOPERATIVE AGRICOLE ZOUEUDO DE MAHAPLEU 7.256 -8.156 NaN CI-8.3.2_1 NaN NaN ... ZOUEUDO NaN True True NaN NaN NaN NaN NaN True
26019 5763 2023 ZOUTOKEGUI COOPERATIVE AGRICOLE ZOUTOKEGUI DE GOURANE 7.734 -7.618 NaN CI-8.3.1_1 NaN NaN ... ZOUTOKEGUI NaN True True NaN NaN NaN NaN NaN True
26020 5764 2023 ZRANLEU COOPERATIVE ZRANLEU DE MAN 7.408 -7.549 NaN CI-8.3.3_1 NaN NaN ... ZRANLEU NaN True True NaN NaN NaN NaN NaN True
26021 5766 2023 ZSB ZSB 7.404 -7.554 NaN CI-8.3.3_1 NaN NaN ... ZSB NaN True True NaN NaN NaN NaN NaN True

26022 rows × 36 columns

df.DISCL_LATITUDE.notna().sum()
627
from fuzzywuzzy import fuzz, process
import numpy as np
import re

# List of common words/phrases to ignore
ignore_phrases = [
    "SOCIETE", "COOPERATIVE", "COOPÉRATIVE", "AVEC", "CONSEIL D'ADMINISTRATION", "AGRICOLE", 
    "DES","PRODUCTEURS", "COOP", "WAREHOUSE", "SAND BOX", "-CA", "COOPÉRATIVE", "SOCIÉTÉ",
    "CONSEILD'ADMINISTRATION","AGRICULTEURS", "ET", "DE"
]

def remove_ignore_phrases(text, ignore_phrases):
    if not isinstance(text, str):
        return text
    for phrase in ignore_phrases:
        text = re.sub(re.escape(phrase), '', text, flags=re.IGNORECASE)
    return ' '.join(text.split())

# Step 1: Clean names for fuzzy matching
abrv_2023 = df_2023['DISCL_SUPPLIER_ABRVNAME'].dropna().unique().tolist()
full_2023 = df_2023['DISCL_SUPPLIER_FULLNAME'].dropna().unique().tolist()
abrv_2024 = df['DISCL_SUPPLIER_ABRVNAME_CLEANED'].dropna().unique().tolist()
full_2024 = df['DISCL_SUPPLIER_FULLNAME_CLEANED'].dropna().unique().tolist()

abrv_2023_clean = [remove_ignore_phrases(x, ignore_phrases) for x in abrv_2023]
abrv_2024_clean = [remove_ignore_phrases(x, ignore_phrases) for x in abrv_2024]
full_2023_clean = [remove_ignore_phrases(x, ignore_phrases) for x in full_2023]
full_2024_clean = [remove_ignore_phrases(x, ignore_phrases) for x in full_2024]

# Step 2: Build fuzzy match mapping for abrv and full names
fuzzy_match_map_abrv = {}
for orig_val, val in zip(abrv_2024_clean, abrv_2024_clean):
    match, score = process.extractOne(val, abrv_2023_clean, scorer=fuzz.token_sort_ratio)
    if score >= 90 and match is not None:
        matched_idx = abrv_2023_clean.index(match)
        matched_original = abrv_2023[matched_idx]
        print(f"Matching {orig_val} to {matched_original} with score {score}")
        fuzzy_match_map_abrv[orig_val] = matched_original

fuzzy_match_map_full = {}
for orig_val, val in zip(full_2024_clean, full_2024_clean):
    match, score = process.extractOne(val, full_2023_clean, scorer=fuzz.token_sort_ratio)
    if score >= 90 and match is not None:
        matched_idx = full_2023_clean.index(match)
        matched_original = full_2023[matched_idx]
        print(f"Matching {orig_val} to {matched_original} with score {score}")
        fuzzy_match_map_full[orig_val] = matched_original

# Step 3: Create lookup from abrv/full names to row in df_2023
df_2023_lookup_abrv = {row['DISCL_SUPPLIER_ABRVNAME']: row for idx, row in df_2023.iterrows() if isinstance(row['DISCL_SUPPLIER_ABRVNAME'], str)}
df_2023_lookup_full = {row['DISCL_SUPPLIER_FULLNAME']: row for idx, row in df_2023.iterrows() if isinstance(row['DISCL_SUPPLIER_FULLNAME'], str)}

# Step 4: Impute using fuzzy match and update matched value
cols_to_copy = [
    'DISCL_LONGITUDE', 'DISCL_LATITUDE', 'DISTRICT_NAME', 'DISTRICT_GEOCODE',
    'LOCALITY_NAME', 'DISCL_AREA_NAME'
]

def impute_row_fuzzy(row):
    abrv_clean = row.get('DISCL_SUPPLIER_ABRVNAME_CLEANED')
    full_clean = row.get('DISCL_SUPPLIER_FULLNAME_CLEANED')
    match_row = None
    matched_abrv = None
    matched_full = None

    # If not found, try abrv name match
    if match_row is None and isinstance(full_clean, str) and full_clean in fuzzy_match_map_full:
        matched_full = fuzzy_match_map_full[full_clean]
        match_row = df_2023_lookup_full.get(matched_full)
        row['DISCL_SUPPLIER_FULLNAME_CLEANED'] = matched_full

    if isinstance(abrv_clean, str) and abrv_clean in fuzzy_match_map_abrv:
        matched_abrv = fuzzy_match_map_abrv[abrv_clean]
        match_row = df_2023_lookup_abrv.get(matched_abrv)
        row['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = matched_abrv

    if match_row is not None:
        for col in cols_to_copy:
            if col in row and (pd.isna(row[col]) or row[col] == ""):
                row[col] = match_row.get(col, np.nan)
    return row

df = df.apply(impute_row_fuzzy, axis=1)
Matching ECABEZOU to ECABEZOU with score 100
Matching CEXPAG to CEXPAG WAREHOUSE with score 100
Matching COOTIEN OULA to COOTIEN OULA WAREHOUSE with score 100
Matching SCAND to SCAND with score 100
Matching SCAOD to SCAOD WAREHOUSE with score 100
Matching SCAP-CC to SCAP-CC with score 100
Matching SCAT to SCAT WAREHOUSE with score 100
Matching SCJPAB 1 to SCJPAB 1 with score 100
Matching SADOB to SCOOPADOB WAREHOUSE with score 100
Matching .AL to COOP.AL with score 100
Matching AM to COOPAM with score 100
Matching SPC to SPC WAREHOUSE with score 100
Matching SOCABANCO to SOCABANCO with score 100
Matching SOCAD to SOCAD with score 100
Matching SOCAPROS to SOCAPROS with score 100
Matching SOCBAD to SOCBAD with score 100
Matching SOAK to SOCOOPAK WAREHOUSE with score 100
Matching BECIDA to BECIDA with score 100
Matching BECIDA Tle to BECIDA Tle with score 100
Matching SCAFRA to SCAFRA with score 100
Matching SCOAVA to SCOAVA WAREHOUSE with score 100
Matching CAAB to CAAB with score 100
Matching SABL to SCOOPABL with score 100
Matching SPAD Gagnoa to SPAD Gagnoa with score 100
Matching SPAD MAN to SPAD MAN with score 100
Matching CAN to CAN with score 100
Matching AAHS to COOPAAHS with score 100
Matching CADO to CADEDO with score 100
Matching CAYAT to CAYAT WAREHOUSE with score 100
Matching SPAD DUEKOUE to SPAD DUEKOUE with score 100
Matching SCAPEKO to COOP-CA SCAPEKO with score 100
Matching SCARDI to COOP-CA SCARDI with score 100
Matching SECA to COOP-CA SECA with score 100
Matching SOCADAG to COOP-CA SOCADAG with score 100
Matching CAPKA to COOP-CA CAPKA with score 100
Matching CAG to CAG with score 100
Matching MIE.SA to MIE.SA with score 100
Matching ES to COOPES WAREHOUSE with score 100
Matching SCALO to SCALO COOP-CA with score 100
Matching SCBG- (GALEBRE) to SCBG-COOP-CA (GALEBRE) with score 100
Matching ECAESB to ECAESB COOP-CA with score 100
Matching SAS to SCOOPAS with score 100
Matching SOCAS to SOCAS WAREHOUSE with score 100
Matching SOCAMA to SOCAMA with score 100
Matching SCAB to SCAB with score 100
Matching SOEM to SOCOOPEM COOP-CA with score 100
Matching USCRG to USCRG COOP-CA with score 100
Matching UCOL to UCODEL COOP-CA with score 100
Matching AHONDJO to AHONDJO with score 100
Matching BARACACAO to BARACACAO with score 100
Matching AD to COOPAD WAREHOUSE with score 100
Matching AK to COOPAK with score 100
Matching SI3C to SI3C with score 100
Matching -UDAN to COOP-CA-UDAN with score 100
Matching CAF to CAF with score 100
Matching ANBAK to COOPANBAK with score 100
Matching ECEPAG to ECEPAG with score 100
Matching SCAPUD to COOP-CA SCAPUD with score 100
Matching SOCAG to SOCAG COOP-CA with score 100
Matching SOCAYA to SOCAYA with score 100
Matching SOA to SOCOOPA with score 100
Matching SOCOPAL to SOCOPAL WAREHOUSE with score 100
Matching SCPAB to COOP-CA SCPAB with score 100
Matching SAD to SCOOPAD with score 100
Matching CAAA to CAAA with score 100
Matching CADB to CADB WAREHOUSE with score 100
Matching CAEG to CAEG with score 100
Matching CAMOBIAN to CAMOBIAN with score 100
Matching CANK to CANK with score 100
Matching CAPA to CAPA COOP-CA WAREHOUSE with score 100
Matching CAPB to CAPB with score 100
Matching CAPM to CAPM with score 100
Matching CAPRESSA to CAPRESSA WAREHOUSE with score 100
Matching CEMA to CEMA with score 100
Matching SCOABIA to SCOABIA WAREHOUSE with score 100
Matching AGO to COOPAGO with score 100
Matching COANI to COANI with score 100
Matching CAS to CAS with score 100
Matching ACA to COOPACA with score 100
Matching AF to COOPADEF with score 100
Matching AGARO to COOPAGARO with score 100
Matching AGES to COOPAGES with score 100
Matching AHK to COOPAHK with score 100
Matching AZA to COOPAZA WAREHOUSE with score 100
Matching RADI to COOPRADI with score 100
Matching ECAB to ECAB WAREHOUSE with score 100
Matching ECAO to ECAO WAREHOUSE with score 100
Matching ECOPADI to ECOPADI WAREHOUSE with score 100
Matching SCAANIAS to SCAANIAS with score 100
Matching SCAM to SCAM with score 100
Matching CA AB to COOP CA AB with score 100
Matching ASAG to ASAG with score 100
Matching ECCO to ECCO with score 100
Matching BAD to COOP BAD with score 100
Matching ARAB to COOPARAB COOP-CA with score 100
Matching SINIKAN-SAS to SINIKAN-SCOOPAS with score 100
Matching SOCANOVA to SOCANOVA with score 100
Matching CAREVA to CAREVA with score 100
Matching SOADO to SOCOOPADO WAREHOUSE with score 100
Matching SOAM to SOCOOPAM WAREHOUSE with score 100
Matching SOLIDARITE to COOP-CA SOLIDARITE with score 100
Matching SAPO to SAPO with score 100
Matching SCAPAO to SCAPAO with score 100
Matching SPAD SOUBRE to SPAD SOUBRE with score 100
Matching cnb to cnb with score 100
Matching COOBADI to COOBADI WAREHOUSE with score 100
Matching DJIGUIYA to DJIGUIYA with score 100
Matching SOCOPASG to SOCOPASG with score 100
Matching AGNIPI to COOPAGNIPI WAREHOUSE with score 100
Matching SCAPD to SCAPD with score 100
Matching SCOEL to SCOEL with score 100
Matching SOCOOFEM to SOCOOFEM with score 100
Matching CA2S to CA2S-CA WAREHOUSE with score 100
Matching CATEZ to CATEZ WAREHOUSE with score 100
Matching RAMA CA to COOPRAMA CA with score 100
Matching SCAPK to SCAPK COOP-CA with score 100
Matching AC to COOPAC COOP-CA with score 100
Matching CAPG to CAPG WAREHOUSE with score 100
Matching SOCA2 to SOCAET2 with score 100
Matching SCOOWEND to SCOOWEND WAREHOUSE with score 100
Matching SCAGB to SCAGB with score 100
Matching SOCASS to SOCASS COOP-CA with score 100
Matching SCAK to COOP-CA SCAK with score 100
Matching SOCAGRI to COOP-CA SOCAGRI with score 100
Matching CAGNAN to COOP-CA CAGNAN with score 100
Matching CANG to CANG with score 100
Matching SOCOAMO to SOCOAMO COOP-CA with score 100
Matching SOCAT to SOCAT WAREHOUSE with score 100
Matching SCANFI to SCANFI with score 100
Matching SAGED to SCOOPAGED COOP-CA with score 100
Matching COAB to COAB WAREHOUSE with score 100
Matching NAAG to COOP-CA NACOOPAG with score 100
Matching CAMED to CAMED with score 100
Matching CAFUGO to CAFUGO with score 100
Matching ECSP to COOP-CA ECSP with score 100
Matching MOAYE to MOAYE COOP-CA with score 100
Matching SOCAMEA to SOCAMEA WAREHOUSE with score 100
Matching ECAKOOG to ECAKOOG WAREHOUSE with score 100
Matching ABOCFA to ABOCFA with score 100
Matching ASENAPA to ASETENAPA with score 100
Matching ASUNAFO to ASUNAFO with score 100
Matching ECAM to ECAM with score 100
Matching ecojad to ecojad with score 100
Matching ESCOPAG to ESCOPAG with score 100
Matching kapatchiva to kapatchiva with score 100
Matching SOACDI to SOCOOPACDI with score 100
Matching DJOUMAN to COOP-CA DJOUMAN with score 100
Matching CASIB to CASIB COOP-CA with score 100
Matching sicopag to sicopag with score 100
Matching AHONTO to COOP-CA AHONTO WAREHOUSE with score 100
Matching SOCADA to SOCADA-CA WAREHOUSE with score 100
Matching SOCA2PD to SOCA2PD WAREHOUSE with score 100
Matching AG to COOPAG with score 100
Matching DAKUA to DAKUA with score 100
Matching COODIG to COODIG with score 100
Matching ADA to ADA WAREHOUSE with score 100
Matching AMIANGOUAN to AMIANGOUAN with score 100
Matching APM Daloa to APM Daloa with score 100
Matching ARA to COOPARA with score 100
Matching C2AS to C2AS WAREHOUSE with score 100
Matching CAADA to CAADA COOP-CA with score 100
Matching CAAM to CAAM WAREHOUSE with score 100
Matching CABS to CABS WAREHOUSE with score 100
Matching CAA to CADESA WAREHOUSE with score 100
Matching CADT to CADT with score 100
Matching capedig to capedig with score 100
Matching SOCOPADOGBO to SOCOPADOGBO with score 100
Matching CAZA to CAZA with score 100
Matching CA to CAET with score 100
Matching cava to cava with score 100
Matching CJPK to CJPK with score 100
Matching CAMB to CAMB with score 100
Matching cnibo to cnibo with score 100
Matching A to COOPADES with score 100
Matching AEEN to COOPAEEN with score 100
Matching AGG to COOPAGG WAREHOUSE with score 100
Matching ALBA to COOPALBA with score 100
Matching ANEK to COOPANEK WAREHOUSE with score 100
Matching AO to COOPAO with score 100
Matching APAIX HS to COOPAPAIX HS with score 100
Matching apedi to coopapedi with score 100
Matching asid to coopasid with score 100
Matching TEEGA WEN to COOP TEEGA WENDE with score 100
Matching INA to COOPINA WAREHOUSE with score 100
Matching COVIMA to COVIMA with score 100
Matching cprnaan to cpr-canaan with score 100
Matching ECAB GUIGLO to ECAB GUIGLO WAREHOUSE with score 100
Matching ECABLO to ECABLO with score 100
Matching ECAKO to ECAKO with score 100
Matching ECAPR to ECAPR WAREHOUSE with score 100
Matching C TAABO to COOP-CA ETC TAABO with score 100
Matching FAHO to FAHO with score 100
Matching JAVA to JAVA with score 100
Matching JEPRAS to JEPRAS WAREHOUSE with score 100
Matching KANWORI YAOU to COOP-CA KANWORI DE YAOU with score 100
Matching LANAYA to COOP-CA LANAYA with score 100
Matching le rocher to coop-ca le rocher with score 100
Matching NIHIPRI BLOLEQUIN (CNB) to COOP-CA NIHIPRI DE BLOLEQUIN (CNB) with score 100
Matching SCAACI to SCAACI with score 100
Matching SCABK to SCABK WAREHOUSE with score 100
Matching SCALAVA to SCALAVA with score 100
Matching SCAPEN to COOP-CA SCAPEN with score 100
Matching SCAS to SCAS with score 100
Matching SCBPAG to SCBPAG WAREHOUSE with score 100
Matching SCOAGG to SCOAGG COOP-CA with score 100
Matching SECOM to SECOM WAREHOUSE with score 100
Matching S BINKADI GA to SCOOP BINKADI GA with score 100
Matching AB to COOPAB with score 100
Matching SAVI to SCOOPAVI WAREHOUSE with score 100
Matching SCANT to SCANT with score 100
Matching RAS to COOPRAS with score 100
Matching EK to COOPEK with score 100
Matching SCPCCT to SCPCCT-CA with score 100
Matching SNAPAL to SNAPAL WAREHOUSE with score 100
Matching SOCAK KATANA to SOCAK KATANA COOP-CA with score 100
Matching SOCAKI to SOCAKI COOP-CA with score 100
Matching SOCEADAHS to SOCEADAHS COOP-CA with score 100
Matching SOCONEL to SOCONEL WAREHOUSE with score 100
Matching SOCONPAYAT to SOCONPAYAT COOP-CA with score 100
Matching SOCOPAD to SOCOPAD WAREHOUSE with score 100
Matching SOCOPLA to SOCOPLA COOP-CA with score 100
Matching SODASI to SODASI with score 100
Matching soutra to soutra with score 100
Matching SPAD Daloa to SPAD Daloa with score 100
Matching UCA to UCA WAREHOUSE with score 100
Matching YEYASSO to YEYASSO with score 100
Matching SCAPMB to SCAPMB with score 100
Matching CEAA to CEAA COOP-CA with score 100
Matching CADB BLOLEQUIN to CADB BLOLEQUIN with score 100
Matching LAG to COOP-CA LAG with score 100
Matching AOU to COOPAOU with score 100
Matching UF to COOPUF with score 100
Matching MINDOBIE to MINDOBIE with score 100
Matching CABA to CABA WAREHOUSE with score 100
Matching CAL2B to CAL2B with score 100
Matching RASSO to RASSO with score 100
Matching SOCOPAS to SOCOPAS with score 100
Matching AD_DUEKOUE to COOPAD_DUEKOUE with score 100
Matching ANAM to Coop-Ca Coopanam with score 100
Matching ECAFHS-.CA to ECAFHS-COOP.CA with score 100
Matching CABID to CABID WAREHOUSE with score 100
Matching ECAG- to ECAG-COOP WAREHOUSE with score 100
Matching SOCOS to SOCOS with score 100
Matching CABF to COOP-CA CABF with score 100
Matching SCJPAB1 to SCJPAB1 with score 100
Matching SS-ECAPG(LAKOTA) to SCOOPS-ECAPG(LAKOTA) with score 100
Matching MONT BIAN to COOP-CA MONT BIAN with score 100
Matching AA to COOPAA WAREHOUSE with score 100
Matching SOCOPA to SOCOPA with score 100
Matching SS- COASABANA to SCOOPS- COASABANA with score 100
Matching AGRIAL to AGRIAL COOP-CA with score 100
Matching NOASI to NOCOOPASI with score 100
Matching CABEN to CABEN with score 100
Matching ASO to COOPASO with score 100
Matching SS-EDIFIE-DOUKOUYA to SCOOPS-EDIFIE-DOUKOUYA with score 100
Matching AWEB to COOPAWEB COOP-CA with score 100
Matching ECEAGN to ECEAGN COOP-CA with score 100
Matching CAES to COOP CAES with score 100
Matching ECOAB to ECOAB with score 100
Matching CANWG to CANWG with score 100
Matching -REJA to COOP-CA-REJA with score 100
Matching KGS to KGS COOP-CA with score 100
Matching SOCAREBIA to SOCAREBIA COOP-CA with score 100
Matching BENKADI to BENKADI WAREHOUSE with score 100
Matching YMA to COOPYMA COOP-CA with score 100
Matching SCAEG to SCAEG with score 100
Matching SCOSOD to SCOSOD COOP-CA with score 100
Matching CPSL to COOP-CA CPSL with score 100
Matching CSC to COOP-CA CSC with score 100
Matching SCPS to COOP-CA SCPS with score 100
Matching SOCABEN to SOCABEN COOP-CA with score 100
Matching SOUHONTA-KAKO to COOP-CA SOUHONTA-KAKO with score 100
Matching ADI to COOPADI with score 100
Matching SOENHA to SOCOOPENHA COOP-CA with score 100
Matching AAD to COOPAAD WAREHOUSE with score 100
Matching ABE to COOPABE COOP-CA with score 100
Matching EBIA to COOPEBIA-CA with score 100
Matching SAKOF to SCOOPAKOF COOP-CA with score 100
Matching SOAG to SOCOOPAG with score 100
Matching AGBS to AGBS COOP-CA with score 100
Matching ABENKADI to COOPABENKADI with score 100
Matching COOFRADO- to COOFRADO-COOP-CA with score 100
Matching CPB to COOP-CA CPB with score 100
Matching SALO to SCOOPALO WAREHOUSE with score 100
Matching SOCANC to COOP-CA SOCANC with score 100
Matching SOCARL to SOCARL COOP-CA with score 100
Matching SOALAO to SOCOOPALAO COOP-CA with score 100
Matching ADOU to COOPADOU with score 100
Matching CABD (DOUGBO) to COOP-CA CABD (DOUGBO) with score 100
Matching ECATAMEA to COOP-CA ECATAMEA with score 100
Matching AGAGNY to COOPAGAGNY with score 100
Matching YAWOUBE D'ANIASSUE to COOP-CA YAWOUBE D'ANIASSUE with score 100
Matching SOCAAN to SOCAAN COOP-CA with score 100
Matching kanwori to kanwori with score 100
Matching AAPROMAN to COOPAAPROMAN COOP-CA with score 100
Matching AGREL to COOP-CA AGREL with score 100
Matching SOCODAG to SOCODAG COOP-CA with score 100
Matching BENKADI to BENKADI WAREHOUSE with score 100
Matching CASODU to CASODU WAREHOUSE with score 100
Matching COASI to COOP-CA COASI with score 100
Matching CASO to CASO with score 100
Matching SCOPAYO to SCOPAYO with score 100
Matching ECAPA GZ to ECAPA GZ COOP-CA with score 100
Matching BB to COOP-CA BB with score 100
Matching CABD to CABD with score 100
Matching SCINPA to SCINPA with score 100
Matching AMA to COOPAMA COOP-CA with score 100
Matching ANONKLON to COOP-CA ANONKLON with score 100
Matching ECAFHS to ECAFHS with score 100
Matching AGA to COOPAGA WAREHOUSE with score 100
Matching AN to COOPAN with score 100
Matching CAADI to CAADI COOP-CA with score 100
Matching SICAO to SICAO with score 100
Matching CAREF SI to CAREF SI with score 100
Matching CIPACC to CIPACC with score 100
Matching EAK to ECOOPAK COOP-CA with score 100
Matching ADO to COOP-CA ADEDO with score 100
Matching UPRAD to UPRAD WAREHOUSE with score 100
Matching CEDA to CEDA with score 100
Matching SCOMA to SCODEMA COOP-CA with score 100
Matching CAWSA to CAWSA WAREHOUSE with score 100
Matching CAC to CAC with score 100
Matching COANGNA to COOP-CA COANGNA with score 100
Matching CATBK to CATBK with score 100
Matching ASM to COOPASM with score 100
Matching SCAEPGY to SCAEPGY with score 100
Matching SOCOSADA to COOP-CA SOCOSADA with score 100
Matching ATESA to COOPATESA with score 100
Matching SCAAO to SCAAO with score 100
Matching AKAM to COOPAKAM with score 100
Matching SOCAHI to SOCAHI with score 100
Matching SOELA to SOCOOPELA with score 100
Matching SOCOPEK to SOCOPEK with score 100
Matching HKF to HKF WAREHOUSE with score 100
Matching SNAS to SCOOPNAS with score 100
Matching SOCAGS to SOCAGS with score 100
Matching SOCOPDAL to SOCOPDAL WAREHOUSE with score 100
Matching CAAA to CAAA with score 100
Matching CAABRO to CAABRO with score 100
Matching CAAN to CAAN with score 100
Matching CAAN to CAAN with score 100
Matching CABA to CABA WAREHOUSE with score 100
Matching CABES to CABES with score 100
Matching CABES to CABES with score 100
Matching CABG to CABG with score 100
Matching CABG to CABG with score 100
Matching CAGB to CAGB with score 100
Matching CABID to CABID WAREHOUSE with score 100
Matching CABING to CABING with score 100
Matching CABOHGA to CABOHGA with score 100
Matching CABOHGA to CABOHGA with score 100
Matching CAC to CAC with score 100
Matching CADA to CADA with score 100
Matching CADA to CADA with score 100
Matching CADB to CADB WAREHOUSE with score 100
Matching CADO to CADEDO with score 100
Matching CADT to CADT with score 100
Matching CAEG to CAEG with score 100
Matching CAL2B to CAL2B with score 100
Matching SOCAB to SOCAB COOP-CA with score 100
Matching CAMAP to CAMAP with score 100
Matching CAMOBIAN to CAMOBIAN with score 100
Matching CANK to CANK with score 100
Matching CANS to CANS WAREHOUSE with score 100
Matching CANS to CANS WAREHOUSE with score 100
Matching CAPA to CAPA COOP-CA WAREHOUSE with score 100
Matching CAPB to CAPB with score 100
Matching CAL to CAL with score 100
Matching CAPL to COOP-CA CAPL with score 100
Matching CAPM to CAPM with score 100
Matching CAPO to CAPO with score 100
Matching CAPRESSA to CAPRESSA WAREHOUSE with score 100
Matching CAPROD to CAPROD with score 100
Matching CAREBO to CAREBO with score 100
Matching CAREFSI to CAREFSI with score 100
Matching CASODU to CASODU WAREHOUSE with score 100
Matching CATBK to CATBK with score 100
Matching CEAA to CEAA COOP-CA with score 100
Matching CEDA to CEDA with score 100
Matching CEMA to CEMA with score 100
Matching CIPACCA to CIPACCA COOP-CA with score 100
Matching CJPK to CJPK with score 100
Matching CNAD to CNAD with score 100
Matching CNAD to CNAD with score 100
Matching COABIA to SCOABIA WAREHOUSE with score 92
Matching COAKA to COAKA with score 100
Matching COAKA to COAKA with score 100
Matching COAM to COAM with score 100
Matching COAM to COAM with score 100
Matching CORLACS to CODERLACS with score 100
Matching CORLACS to CODERLACS with score 100
Matching COESAG to COESAG with score 100
Matching COESAG to COESAG with score 100
Matching AAB to COOPAAB with score 100
Matching COOBADI to COOBADI WAREHOUSE with score 100
Matching ABOTE to COOPABOTE with score 100
Matching ABOTRE to COOP-CA ABOTRE with score 100
Matching BIRBA to COOP-CA BIRBA with score 100
Matching BIRBA to COOP-CA BIRBA with score 100
Matching COANI to COANI with score 100
Matching AA to COOPAA WAREHOUSE with score 100
Matching COPACOL to COPACOL WAREHOUSE with score 100
Matching ESPOIR to ESPOIR COOP-CA with score 100
Matching ESPOIR to ESPOIR COOP-CA with score 100
Matching CAES to COOP CAES with score 100
Matching JAVA to JAVA with score 100
Matching JCAS to COOP JCAS with score 100
Matching TEEGA WEN to COOP TEEGA WENDE with score 100
Matching CAGNAN to COOP-CA CAGNAN with score 100
Matching COALIDAN to COALIDAN with score 100
Matching COANGNA to COOP-CA COANGNA with score 100
Matching ABI to COOPABI with score 100
Matching ABIN to COOPABIN WAREHOUSE with score 100
Matching ADO to COOP-CA ADEDO with score 100
Matching NECAB to COOP-CA NECAB with score 100
Matching ABO to ABO WAREHOUSE with score 100
Matching CABS to CABS WAREHOUSE with score 100
Matching -PAN to COOP-CA-PAN with score 100
Matching PAN to COOP-CA-PAN with score 100
Matching UDAN to COOP-CA-UDAN with score 100
Matching ABENKADI to COOPABENKADI with score 100
Matching ACA to COOPACA with score 100
Matching AF to COOPADEF with score 100
Matching AGARO to COOPAGARO with score 100
Matching AGES to COOPAGES with score 100
Matching AGO to COOPAGO with score 100
Matching AHK to COOPAHK with score 100
Matching AKCODI to COOPAKCODI WAREHOUSE with score 100
Matching ALBA to COOPALBA with score 100
Matching AMDI to COOPAMDI with score 100
Matching AMDI to COOPAMDI with score 100
Matching ANAM to Coop-Ca Coopanam with score 100
Matching AOU to COOPAOU with score 100
Matching ASM to COOPASM with score 100
Matching ATESA to COOPATESA with score 100
Matching AYAF to COOPAYAF with score 100
Matching AYAF to COOPAYAF with score 100
Matching AZA to COOPAZA WAREHOUSE with score 100
Matching AZEG to COOPAZEG with score 100
Matching AZEG to COOPAZEG with score 100
Matching INA to COOPINA WAREHOUSE with score 100
Matching RADI to COOPRADI with score 100
Matching RAS to COOPRAS with score 100
Matching RAZO to COOPRAZO with score 100
Matching RAZO to COOPRAZO with score 100
Matching ROYA to COOPROYA with score 100
Matching ROYA to COOPROYA with score 100
Matching YCA to COOPYCA with score 100
Matching YCA to COOPYCA with score 100
Matching CP2A to CP2A with score 100
Matching CP2A to CP2A with score 100
Matching CPACD to CPACD WAREHOUSE with score 100
Matching CPACD to CPACD WAREHOUSE with score 100
Matching CAPI- to CAPI-COOP-CA with score 100
Matching CPSL to COOP-CA CPSL with score 100
Matching SCPCCT 2 to SCPCCT 2 with score 100
Matching ECAAF to ECAAF with score 100
Matching ECAB to ECAB WAREHOUSE with score 100
Matching ECAESB to ECAESB COOP-CA with score 100
Matching -ECAMOG to COOP-CA-ECAMOG with score 100
Matching ECAMOG to COOP-CA-ECAMOG with score 100
Matching ECAO to ECAO WAREHOUSE with score 100
Matching ECEAGN to ECEAGN COOP-CA with score 100
Matching ECOBO to ECODEBO with score 100
Matching ECOBO to ECODEBO with score 100
Matching EAK to ECOOPAK COOP-CA with score 100
Matching ECOPADI to ECOPADI WAREHOUSE with score 100
Matching ECOPAS to ECOPAS COOP-CA WAREHOUSE with score 100
Matching ECOPAS to ECOPAS COOP-CA WAREHOUSE with score 100
Matching ECSP to COOP-CA ECSP with score 100
Matching Ecookim - CAVA to Ecookim - CAVA with score 100
Matching IQJ to IQJ with score 100
Matching LAFI BEBE MAN to LAFI BEBE DE MAN with score 100
Matching LE PROGRES to LE PROGRES WAREHOUSE with score 100
Matching LE PROGRES to LE PROGRES WAREHOUSE with score 100
Matching ADIAS to COOPADIAS with score 100
Matching S RADA to S-COOP COOPRADA with score 100
Matching SCAAO to SCAAO with score 100
Matching SCAB to SCAB with score 100
Matching SCAGG to SCAGG with score 100
Matching SCAPCC to SCAPCC WAREHOUSE with score 100
Matching SCAPUD to COOP-CA SCAPUD with score 100
Matching SCASOU to SCASOU WAREHOUSE with score 100
Matching SCOAPANI to SCOPANI COOP-CA with score 93
Matching AC to COOPAC COOP-CA with score 100
Matching AT to COOPAT with score 100
Matching 3A to COOP-CA-3A with score 100
Matching BAD to COOP BAD with score 100
Matching SCSPA to SCSPA with score 100
Matching SINIKAN AS to SINIKAN-SCOOPAS with score 95
Matching SOCAEK to SOCAEK with score 100
Matching SOCANEK to SOCANEK-COOP-CA with score 100
Matching SCAACI to SCAACI with score 100
Matching SCAANIAS to SCAANIAS with score 100
Matching ANAM (Ex EDY) to COOPANAM (Ex EDY) with score 100
Matching SCABK to SCABK WAREHOUSE with score 100
Matching SCABODI to SCABODI with score 100
Matching SCABODI to SCABODI with score 100
Matching SCAC to SCAC WAREHOUSE with score 100
Matching SCAC to SCAC WAREHOUSE with score 100
Matching SCAEG to SCAEG with score 100
Matching SCAGB to SCAGB with score 100
Matching SCAGG to SCAGG with score 100
Matching SCAK to COOP-CA SCAK with score 100
Matching SCAM to SCAM with score 100
Matching SCAND to SCAND with score 100
Matching SCANG to SOCANG COOP-CA with score 91
Matching COPAL to COPAL with score 100
Matching SCAPD to SCAPD with score 100
Matching SCAPEKO to COOP-CA SCAPEKO with score 100
Matching SCARDI to COOP-CA SCARDI with score 100
Matching SCASOU to SCASOU WAREHOUSE with score 100
Matching SCAW to SCAW WAREHOUSE with score 100
Matching SCAW to SCAW WAREHOUSE with score 100
Matching SCBPAG to SCBPAG WAREHOUSE with score 100
Matching SCELA to COOP-CA SCELA with score 100
Matching SCELA to COOP-CA SCELA with score 100
Matching SCO SACI to SCO SACI with score 100
Matching SCO SACI to SCO SACI with score 100
Matching COAANI to COAANI with score 100
Matching SCOWWASI to SCOWWASI with score 100
Matching SCOAWWASI to SCOWWASI with score 94
Matching CAYEM to CAYEM WAREHOUSE with score 100
Matching CAYEM to CAYEM WAREHOUSE with score 100
Matching A to COOPADES with score 100
Matching CADJI to CADJI with score 100
Matching ADJI to COOPADJI with score 100
Matching AKAM to COOPAKAM with score 100
Matching Olakoko to Olakoko with score 100
Matching AKOKO to COOPAKOKO with score 100
Matching AT to COOPAT with score 100
Matching -3A to COOP-CA-3A with score 100
Matching AL to COOP.AL with score 100
Matching EPUG to COOP-CA EPUG with score 100
Matching LA PAIX to LA PAIX with score 100
Matching LA PAIX to LA PAIX with score 100
Matching SCAG to COOP-CA SCAG with score 100
Matching SCAT 1 to SCAT 1 WAREHOUSE with score 100
Matching SCAG to COOP-CA SCAG with score 100
Matching SCC to SCC COOP-CA with score 100
Matching COMA to COOP-CA COMA with score 100
Matching UPRAD to UPRAD WAREHOUSE with score 100
Matching SCOOWEND to SCOOWEND WAREHOUSE with score 100
Matching SCAA CI to SCAA CI with score 100
Matching SCUW to SCUW COOP-CA with score 100
Matching SCUW to SCUW COOP-CA with score 100
Matching SOCNAD to SOCNAD with score 100
Matching SOCCNA to SOCCNA COOP-CA with score 100
Matching SOCOSADA to COOP-CA SOCOSADA with score 100
Matching SOCOAMO to SOCOAMO COOP-CA with score 100
Matching SOCABA to SOCABA WAREHOUSE with score 100
Matching SOCABA to SOCABA WAREHOUSE with score 100
Matching SOCABB to SOCABB WAREHOUSE with score 100
Matching SOCABB to SOCABB WAREHOUSE with score 100
Matching SOCADJO to COOP-CA SOCADJO with score 100
Matching SOCADJO to COOP-CA SOCADJO with score 100
Matching SOCAEK to SOCAEK with score 100
Matching SOCA to SOCAET with score 100
Matching SOCA to SOCAET with score 100
Matching SOCAG to SOCAG COOP-CA with score 100
Matching CA2B to CA2B with score 100
Matching SOCAGNIPI to SOCAGNIPI with score 100
Matching SOCAGRI2 to COOP-CA SOCAGRI with score 93
Matching SOCAHI to SOCAHI with score 100
Matching SOCADJA to SOCADJA COOP-CA WAREHOUSE with score 100
Matching SOCAJ to SOCAJ COOP-CA with score 100
Matching SOELA to SOCOOPELA with score 100
Matching SOCOPADOGBO to SOCOPADOGBO with score 100
Matching SOCOPADOU to SOCOPADOU with score 100
Matching SOCOPAL to SOCOPAL WAREHOUSE with score 100
Matching SOCOPDAL to SOCOPDAL WAREHOUSE with score 100
Matching ASANKRAGWA to ASANKRAGWA with score 100
Matching SOCOPEK to SOCOPEK with score 100
Matching SOCOOM to SOCOOM with score 100
Matching SOCOSOM to SOCOSOM-COOP-CA with score 100
Matching UPAS to UPAS WAREHOUSE with score 100
Matching UPAS to UPAS WAREHOUSE with score 100
Matching BENKRA to COOP-CA BENKRA with score 100
Matching CAB to CAB WAREHOUSE with score 100
Matching CINPA to CINPA with score 100
Matching ABOIGNY to COOPABOIGNY WAREHOUSE with score 100
Matching AZ to COOPAZ with score 100
Matching AGLI to COOPAGLI WAREHOUSE with score 100
Matching EN to COOPEN WAREHOUSE with score 100
Matching COPUK to COPUK WAREHOUSE with score 100
Matching -ECOOYA to COOP-CA-ECOOYA WAREHOUSE with score 100
Matching BINKADI to BINKADI WAREHOUSE with score 100
Matching ANAD to COOPANAD WAREHOUSE with score 100
Matching ECOODI to ECOODI with score 100
Matching CPAGB- to CPAGB-COOP-CA WAREHOUSE with score 100
Matching SCPCB to SCPCB with score 100
Matching ECAPN to ECAPN with score 100
Matching RELUAIN CA to RELUAINDE COOP CA with score 100
Matching SRAH to SCOOPRAH with score 100
Matching PUSAH to COOP PUSAH with score 100
Matching AME to COOPAME COOP-CA WAREHOUSE with score 100
Matching USOCAS to USOCAS WAREHOUSE with score 100
Matching -PRO to COOP-CA-PRO with score 100
Matching SAGEA to SCOOPAGEA with score 100
Matching AJAMI ALY to AJAMI ALY with score 100
Matching PAI to PAI with score 100
Matching SAUDD to SCOOPAUDD with score 100
Matching SOAKOKO to SOCOOPAKOKO with score 100
Matching SCCG to SCCG with score 100
Matching SCOODJIBODI CA to SCOODJIBODI COOP CA with score 100
Matching TEPA to TEPA with score 100
Matching PAK to PAK COOP-CA with score 100
Matching MOYE to MOYE with score 100
Matching SOCAFAK CA to SOCAFAK CA with score 100
Matching SOCACHIPOLO- to SOCACHIPOLO-COOP-CA with score 100
Matching CADI to CADI WAREHOUSE with score 100
Matching FOUNDARA to FOUNDARA with score 100
Matching CPAC to COOP-CA CPAC with score 100
Matching PAZ to COOP-CA PAZ with score 100
Matching SOCOPGA to SOCOPGA with score 100
Matching SS LAFI BEBE to SCOOPS LAFI BEBE with score 100
Matching SOCAZEMS to SOCAZEMS WAREHOUSE with score 100
Matching SAL to SCOOPAL WAREHOUSE with score 100
Matching SCAP to COOP-CA SCAP with score 100
Matching NWM to NWM with score 100
Matching SONAB to SONAB with score 100
Matching PCBM to PCBM with score 100
Matching APM Benianssou to APM Benianssou with score 100
Matching APM Man to APM Man with score 100
Matching CAED Daloa to CAED Daloa with score 100
Matching CAEDU to CAEDU with score 100
Matching CAOSI to CAOSI with score 100
Matching CASB to CASB with score 100
Matching CNEK to CNEK with score 100
Matching EYENIAN to EYENIAN with score 100
Matching SICA to SICA with score 100
Matching SCOAG to SCOAG with score 100
Matching SCOPACI to SCOPACI with score 100
Matching SCPCCT 1 to SCPCCT 1 with score 100
Matching SPAD Daloa 1 to SPAD Daloa 1 with score 100
Matching SPAD Daloa 2 to SPAD Daloa 2 with score 100
Matching SPAD SEGUELA to SPAD SEGUELA with score 100
Matching SPAD VAVOUA to SPAD VAVOUA with score 100
Matching BENKADI S to BENKADI COOPS with score 100
Matching Espoir d'Alepé to Société Coopérative Espoir d'Alepé with score 100
Matching SS SCOEL BONGOUANOU to SCOOPS SCOEL BONGOUANOU with score 100
Matching Ecookim - APIG to Ecookim - COOPAPIG with score 100
Matching EBO-YEKON to EBO-YEKON with score 100
Matching RAE TRADING to RADEE TRADING with score 100
Matching SOCADMV to SOCADMV with score 100
Matching SOCOCCI to SOCOCCI WAREHOUSE with score 100
Matching SORANHS to SOCOOPRANHS with score 100
Matching SIVAP to SIVAP with score 100
Matching PLAZA GAGNOA to PLAZA GAGNOA with score 100
Matching SOCOEMA to SOCOEMA WAREHOUSE with score 100
Matching SOCAM to COOP-CA SOCAM with score 100
Matching ECATIE to COOP-CA ECATIE with score 100
Matching SOLAGUE to SOCOOPLAGUE WAREHOUSE with score 100
Matching AYAAF to COOPAYAAF COOP-CA WAREHOUSE with score 100
Matching WAGAJACA to WAGAJACA with score 100
Matching SSYAT to SCOOPSYAT with score 100
Matching ECYG- to ECYG-COOP-CA with score 100
Matching NOUVELLE SRANYD to NOUVELLE SCOOPRANYD COOP-CA with score 100
Matching ZRANSSA to COOP-CA ZRANSSA with score 100
Matching SOCA BANCO to SOCA BANCO WAREHOUSE with score 100
Matching SOCOFUMA to SOCOFUMA with score 100
Matching SCAPO to SCAPO with score 100
Matching AGRO to COOPAGRO with score 100
Matching ANOU to COOPANOU with score 100
Matching COVIMEA to COVIMEA with score 100
Matching SCAEB- to SCAEB-COOP-CA with score 100
Matching SCAFUB to SCAFUB with score 100
Matching AAM SS to COOPAAM SCOOPS with score 100
Matching SOUGRI-NONMA to SOUGRI-NONMA with score 100
Matching PUO to COOP-CA-CAPUO with score 100
Matching BENKADI SIAKAKRO to Société Coopérative avec Conseil d'Administration Benkadi de Siakakro with score 100
Matching ANOUANZE L'INNIE to SOCIETE COOPERATIVE ANOUANZE DES PRODUCTEURS DE L'INDENIE with score 100
Matching AHUANOU D'ARRAH to SOCIETE COOPERATIVE AGRICOLE AHUANOU D'ARRAH with score 100
Matching TELIN to COOPERATIVE AGRICOLE TELIN with score 100
Matching NOUVELLE DJOUROUTOU to SOCIETE COOPERATIVE AGRICOLE NOUVELLE DE DJOUROUTOU with score 100
Matching N'ZASSA DIVO to SOCIETE COOPERATIVE AGRICOLE N'ZASSA DE DIVO with score 100
Matching WONSEALY to SOCIETE COOPERATIVE DES AGRICULTEURS DE WONSEALY with score 100
Matching ENTENTE DJEKANOU to SOCIETE COOPERATIVE ENTENTE DE DJEKANOU with score 100
Matching NEGOCE CAFE CACAO BAYOTA to SOCIETE COOPERATIVE DE NEGOCE CAFE CACAO DE BAYOTA with score 100
Matching DIVO to Coopérative Agricole des Producteurs de Divo with score 100
Matching GUEYO to COOPERATIVE AGRICOLE DES PRODUCTEURS DE GUEYO with score 100
Matching SIMPLIFIEE DJITEKO to SOCIETE COOPERATIVE SIMPLIFIEE AGRICOLE DES PRODUCTEURS DE DJITEKO with score 100
Matching S KEIBLY to SOCIETE COOPERATIVE DES PRODUCTEURS AGRICOLES KEIBLY with score 100
Matching Centre d'Achat Hassan Kamel Ftouni to Centre d'Achat Hassan Kamel Ftouni with score 100
Matching Soubré to Société Coopérative Agricole de Soubré with score 100
Matching SIMPLIFIÉE ALLAH EN MIN to SOCIETE COOPERATIVE AGRICOLE SIMPLIFIEE ALLAH EN DEMIN with score 98
Matching Café Cacao Tiassalé to Société Coopérative des Producteurs de Café Cacao de Tiassalé avec Conseil d'Administration with score 100
Matching pour le Développement la Région Lacs to Coopérative pour le Développement de la Région des Lacs with score 100
Matching Sociéte Gbadrikro Goyaokro to Sociéte Coopérative Avec Conseil d'Administration Agricole Gbadrikro de Godeyaokro with score 100
Matching Gagny to Société Coopérative Agricole de Gagny with score 100
Matching s Cacaokro Dies to Coopérative des Producteurs Agricoles de Cacaokro de Dies with score 100
Matching ENTREPRISE POUR LE VELOPPEMENT BONON to ENTREPRISE COOPERATIVE POUR LE DEVELOPPEMENT DE BONON with score 100
Matching Boua to Société Coopérative Agricole de Boua with score 100
Matching du Bandaman to Société Coopérative Agricole du Bandaman with score 100
Matching pour le Bonheur Gagnoa to Société Coopérative pour le Bonheur des Producteurs Agricole de Gagnoa with score 100
Matching Union s San Pedro to Union des Producteurs Agricoles de San Pedro with score 100
Matching WEND BARK to SOCIETE COOPERATIVE WEND BARK with score 100
Matching GBAGBAM to Société Coopérative Agricole de Gbagbam with score 100
Matching SABARY SAGO to Société Coopérative Agricole Sabary de Sago with score 100
Matching FATOUAKRO to Société Cooperative Agricole de Fatouakro with score 100
Matching GNANPOADJI to Societe Cooperative Agricole de Gnanpoadji with score 100
Matching GRABO to SOCIETE COOPERATIVE AGRICOLE DE GRABO with score 100
Matching DOGBO to Société Coopérative Agricole de Dogbo with score 100
Matching MONOGAGA CARREFOUR to Société Coopérative Agricole de Monogaga Carrefour with score 100
Matching TABOU to societe cooperative agricole de tabou with score 100
Matching NIAMKEY FAMILLE L’INNIE to societe cooperative agricole niamkey et famille de l'indenie with score 100
Matching Y-EWOUN-ANIEN DU HAUT SASSANDRA to cooperative agricole ety-ewoun-anien du haut sassandra with score 100
Matching Gnato to Société Coopérative Agricole de Gnato with score 100
Matching POUR LA MAITRISE L’ENTRAI DURABLE to SOCIETE COOPERATIVE AGRICOLE POUR LA MAITRISE DE L'ENTRAIDE DURABLE with score 100
Matching MAN EDI ANOUANZE to SOCIETE COOPERATIVEAGRICOLE MAN EDI ANOUANZE with score 100
Matching AGA to COOPAGA with score 100
Matching AGY CA to COOPAGY COOP CA with score 100
Matching BENKADI to COOPERATIVE AGRICOLE BENKADI with score 100
Matching CE to COOPCE with score 100
Matching Espoir d'Angouakro to Société Coopérative Espoir d'Angouakro with score 100
Matching S YEBOYEKON to SOCIETE COOPERATIVE DES PRODUCTEURS AGRICOLES YEBOYEKON with score 100
Matching RAE TRADING SARL to RADEE TRADING SARL with score 100
Matching ESPOIR VAVOUA to SOCIETE COOPERATIVE AGRICOLE ESPOIR DE VAVOUA with score 100
Matching APO to SOCIETE COOPERATIVE COOPAPO with score 100
Matching AD to SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRATION COOPAD with score 100
Matching ECSP to ECSP COOP-CA with score 100
Matching SOCANC to SOCANDE with score 91
Matching PLAZA-GAGNOA to PLAZA-GAGNOA with score 100
Matching ECATIE to COOP-CA ECATIE with score 100
Matching BINKADI BROUDOUKOU PENDA to Société Coopérative Agricole Binkadi de de Broudoukou Penda with score 100
Matching SASA to SCOOPASA with score 100
Matching conseil d’Administration Nainere Gnato to Société Coopérative avec conseil d’Administration
Nainere de Gnato with score 100
Matching YAKASSE-ATTOBROU to SOCIETE COOPERATIVE DES PRODUCTEURS DE YAKASSE-ATTOBROU with score 100
Matching YEYONIAN DU CANTON D'ANIASSUE to Société Coopérative Yeyonian du Canton d'Aniassue with score 100
Matching COOJEPRAS to COOPERATIVE COOJEPRAS with score 100
Matching s Niablé to Société Coopérative avec Conseil d'Administration des Producteurs Agricoles de Niablé with score 100
Matching ZEMESS TAABA GBAGBAM to SOCIETE COOPERATIVE AGRICOLE ZEMESS TAABA DE GBAGBAM with score 100
Matching Entente Seguela to Société Coopérative Agricole avec Conseil d'Administration Entente de Seguela with score 100
Matching -ABOTRE to Coopérative avec Conseil d'Administration Abotre with score 100
Matching Yeyasso Man to Société Coopérative Yeyasso de Man with score 100
Matching SOCODAG to SOCIETE COOPERATIVE SOCODAG with score 100
Matching SIMPLIFEE KAMBONOU DARRAH to SOCIETE COOPERATIVE SIMPLIFEE COOPERATIVE AGRICOLE KAMBONOU DARRAH with score 100
Matching WAGAJACA to SOCIETE COOPERATIVE WAGAJACA with score 100
Matching BACON ESPOIR to Coopérative Bacon Espoir with score 100
Matching AM to SOCIETE COOPERATIVE COOPAM with score 100
Matching DAHORO to Société Coopérative avec conseil d'administration des agriculteurs de
Dahoro with score 100
Matching AHONTO L’INNIÉ to SOCIETE COOPERATIVE AHONTO DE L'INDENIE with score 96
Matching COPÉRATIVE AMIANGOUAN APPROMPRONOU to Société Copérative Agricole Amiangouan
de Apprompronou with score 100
Matching Bara Bangolo to Societe Cooperative Agricole Bara de Bangolo with score 100
Matching AWANE DALOA to Coopérative Agricole Awane de Daloa with score 100
Matching BINKADI GUEPAHOUO to Société Coopérative Agricole Binkadi de Guepahouo with score 100
Matching COPÉRATIVE CONSEIL D'ADMINISTRATRATION BÉNI SE to Société Copérative Avec Conseil d'administratration Béni de Se with score 100
Matching POUR LE DÉVELOPPEMENT SASSANDRA to Coopérative agricole pour le développement
de Sassandra with score 100
Matching DJIGUIYA TEAPLEU to Société Coopérative Agricole Djiguiya de Teapleu with score 100
Matching MONTAGNES BIANKOUMA to Coopérative Agricole des Montagnes de Biankouma with score 100
Matching PERSEVERANCE DIBOBLY GUEZON CONSEIL DIBOBLY D'ADMINISTRATION to Societe Cooperative Agricole Perseverance Dibobly Guezon avec Conseil
d'Administration with score 93
Matching LE PROGRÈS DUÉKOUÉ to Cooperative Agricole le Progrès de Duékoué with score 100
Matching SUCCES DUEKOUE to Societe Cooperative Agricole des
Producteurs Succes de Duekoue with score 100
Matching RÉFÉRENCE SINFRA to Cooperative avec Conseil d'Administration Référence de Sinfra with score 100
Matching POUR RASSEMBLEMENT L'EMERGENCE DU TONPKI to Société Coopérative pour Rassemblement et l'Emergence du Tonpki with score 100
Matching SIBOULAKA BEOUA to Société Coopérative Agricole Siboulaka de Beoua with score 100
Matching VAVOUA to COOPERATIVE AGRICOLE DE VAVOUA with score 100
Matching SIMPLIFIÉE JEUNES KAHEN to Société Coopérative Simplifiée des Jeunes de Kahen with score 100
Matching NIBI D'OKROUYO to Societe Cooperative Agricole Nibi d'Okrouyo with score 100
Matching LIBERTÉ DANIA to Société Coopérative avec conseil d'administration liberté de Dania with score 100
Matching JEUNESSE SOUROUGOU to Jeunesse Coopérative Agricole de Sourougou with score 100
Matching SIMPLIFIE POUR LE DÉVELOPPEMENT SEMIEN to Société Coopérative Simplifie pour le
Développement de Semien with score 100
Matching EYO ENIAN NOUVEAU to Coopérative Agricole Eyo Enian de Nouveau with score 100
Matching COPÉRATIVE GUEYO G to Société Copérative Agricole de Gueyo G with score 100
Matching COPÉRATIVE GNIPI 2 to Société Copérative Agricole de Gnipi 2 with score 100
Matching COPÉRATIVE COUDOUKO to Copérative Agricole de Coudouko with score 100
Matching HERE KRANZADOUGOU to Coopérative Agricole Here de Kranzadougou with score 100
Matching LANSSINA BONGO to Coopérative Agricole de Lanssina Bongo with score 100
Matching AGRIOLE NAN ITINOU KRANZADOUGOU to Coopérative Agriole Nan Etitinou de
Kranzadougou with score 100
Matching PIT OUAGA to Société Coopérative des Agriculteurs de Petit
Ouaga with score 100
Matching S PÉTIT DIDIEVI to Cooperative avec Conseil d'Administration des Producteurs Agricoles de Petit Didievi with score 96
Matching SINIKENEYA DUEKOUE to Societe Cooperative Agricole Sinikeneya de Duekoue with score 100
Matching Besso to Société Cooperative des Producteurs
Agricole de Betesso with score 100
Matching CAPRESSA AGNITIE D'APPROMPRON to SOCIETE COOPERATIVE CAPRESSA AGNITIE D'APPROMPRON with score 100
Matching ZAGNE to Société Coopérative Agricole des Producteurs de Zagne with score 100
Matching maimai Bangolo to cooperative agricole demaidemai de bangolo with score 100
Matching Allakabo d'Oume to Société Coopérative Agricole Allakabo d'Oume with score 100
Matching IVOIRIENNE NOUVEAUX to Société Coopérative Ivoirienne des Nouveaux Agriculteurs with score 100
Matching ANGABE DUEKOUE to Societe Cooperative des Producteurs Angabe
de Duekoue with score 100
Matching FEMMES POUR LA PRODUCTION,TRANSFORMATION COMMERCIALISATION DU VIVRIER LA MARAHOUÉ to Coopérative des Femmes pour la Production, Transformation et
Commercialisation du Vivrier de la Marahoué with score 100
Matching ECAB GUIGLO to Société Coopérative ECAB Guiglo with score 100
Matching ENTREPRISE BLOLEQUIN to Entreprise Cooperative Agricole de Blolequin with score 100
Matching ENTREPRISE KOUIBLY to Entreprise Cooperative Agricole de Kouibly with score 100
Matching KOOGNANAN GROGOUYA to Coopérative Agricole Koognanan de
Grogouya with score 100
Matching ENTREPRISE MEAGUI to Entreprise Cooperative des Agriculteurs de
Meagui with score 100
Matching ENTREPRISE JEUNES DALOA to Entreprise Cooperative des Jeunes Agriculteurs de Daloa with score 100
Matching ENTREPRISE SAINT-PAUL to Entreprise Coopérative de Saint-Paul with score 100
Matching C TAABO to Societe Cooperative ETC TAABO with score 100
Matching FARMERS HOPE to Farmers Hope with score 100
Matching JEUNES VAVOUA to Société Coopérative des Jeunes Agriculteurs de Vavoua with score 100
Matching JEUNES S D'ASSONVON to Société Coopérative avec conseil d'administration des Jeunes Producteurs
Agricoles d'Assonvon with score 100
Matching Conseil d'Administration Yeyasso Man to Société Coopérative Avec Conseil
d'Administration Yeyasso de Man with score 100
Matching Kanwori Yaou to Societe Cooperative Agricole Kanwori de Yaou with score 100
Matching Lanaya Korhogo to Société Coopérative Agricole Lanaya de Korhogo with score 100
Matching le Rocher to Société Cooperative avec Conseil d'Administration le Rocher with score 100
Matching CA NIHIPRI BLOLÉQUIN to Société Coopérative avec Conseil d'Administration Coop CA Nihipri de
Bloléquin with score 100
Matching ALLIÉS CÔTE D'IVOIRE to Société Coopérative des Alliés de Côte
d'Ivoire with score 100
Matching BINKADI KAHEN to Société Cooperative Agricole Binkadi de Kahen with score 100
Matching BARAKAGNI DU HAUT SASSANDRA to Société Coopérative Agricole Barakagni Du
Haut Sassandra with score 100
Matching N'ZASSA DIVO to SOCIETE COOPERATIVE AGRICOLE N'ZASSA DE DIVO with score 100
Matching PLANTEURS UNIS DAPKADOU to Société Agricole des Planteurs Unis de
Dapkadou with score 100
Matching SOCOFI to Societe Cooperative Agricole de Socofi with score 100
Matching POUR LE BONHEUR S GAGNOA to Société Cooperative Pour Le Bonheur Des Producteurs Agricoles De Gagnoa with score 100
Matching GLOIRE GUIGLO to Societe Cooperative Agricole Gloire de
Guiglo with score 100
Matching MÉAGUI to Société coopérative de Méagui with score 100
Matching Benkadi Siakakro to Société Coopérative avec Conseil d'Administration Benkadi de Siakakro with score 100
Matching NOUVELLE ALLIANCE BANGOLO to SOCIETE COOPERATIVE AGRICOLE NOUVELLE ALLIANCE DE BANGOLO with score 100
Matching pour le développement Sassandra to Coopérative agricole pour le développement
de Sassandra with score 100
Matching RAYAWLEN LA COTIÈRE FRESCO to Société Cooperative Etrayawlen De La
Cotière De Fresco with score 100
Matching s du Zabouo to Société Coopérative des Producteurs Agricoles du Zabouo with score 100
Matching EMERGENTE DALOA to Coopérative Agricole Emergente de
Daloa with score 100
Matching ANOUANZÈ PITS DIDOKO to Société Cooperative Anouanzè des Petits
Producteurs de Didoko with score 100
Matching SIMPLIFIE SADA SECTEURS to Societe Cooperative Simplifie des
Producteurs de Sada et Secteurs with score 100
Matching Simplifiee Espoir Kotobi to Société Coopérative Simplifiee Espoir
de Kotobi with score 100
Matching CAFÉ CACAO TIASSALÉ to Société Coopérative des Producteurs de Café Cacao de Tiassalé avec Conseil d'Administration with score 100
Matching NOUVELLE D'ACHAT PRODUITS S A LAKOTA to Societe Nouvelle d'Achat des Produits
Agricoles a Lakota with score 100
Matching Katana to Societe Cooperative Agricole Katana with score 100
Matching KIPIRI to Societe Cooperative Agricole de Kipiri with score 100
Matching EXPLOITANTS S ANTILOPES DU HAUT SASSANDRA to Société Coopérative des Exploitants Agricoles
Des Antilopes du Haut Sassandra with score 100
Matching Copérative Negoce Lakota to Société Copérative de Negoce de Lakota with score 100
Matching NOUVELLE S YAKASSÉ ATTOBROU to Société Coopérative Nouvelle des Producteurs Agricoles de Yakassé Attobrou with score 100
Matching CAFÉ CACAO DIVO to Société Coopérative Agricole de Café et Cacao de Divo with score 100
Matching COMMERCIALISATION PRODUITS S DALOA to Societe de Commercialisation des Produits Agricoles Daloa with score 100
Matching LAHOU to Societe Cooperative des Producteurs de
Lahou with score 100
Matching SIMPLIFIÉE SOLIDARITÉ SINFRA to Société coopérative simplifiée solidarité de
Sinfra with score 100
Matching SOUTRA to Societe Cooperative avec Conseil d'Administration Cooperative Soutra with score 100
Matching PRODUITS S DALOA to Société de Produits Agricoles de Daloa with score 100
Matching UNION S LA SOUS-PRÉFECTURE D'AYAMÉ to Union des Sociétés Coopérative de la Sous-
Préfecture d'Ayamé with score 100
Matching YEYASSO MAN to Société Coopérative Yeyasso de Man with score 100
Matching 2 SAMBA to COOPERATIVE AGRICOLE DE 2 SAMBA with score 100
Matching CA ANOUANZE MEAGUI to SOCIETE COOPERATIVE COOP-AGRICOLE ANOUANZE DE MEAGUI with score 91
Matching BALOKUYA to COOP-CA DES AGRICULTEURS DE BALOKUYA with score 100
Matching BAHE SEBON to Cooperative Agricole de Bahe-Sebon with score 100
Matching DJIDJIYA BLOLÉQUIN to Coopérative Agricole Djidjiya de Bloléquin with score 100
Matching ESPOIR ZAGNE to SOCIETE COOPERATIVE AGRICOLE ESPOIR ZAGNE with score 100
Matching Goua to Societe Cooperative Agricole de Goua with score 100
Matching SOLIDAIRES DUÉKOUÉ to Société Coopérative Des Agriculteurs Solidaires  de Duékoué with score 100
Matching YÉYONIAN MOUSSAKRO to SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRATION YEYONIAN DE MOUSSAKRO with score 97
Matching IVOIRIENNE L'AGNÉBY to SOCIETE COOPERATIVE IVOIRIENNE DES PRODUCTEURS DE L'AGNEBY with score 97
Matching BASSADOUGOU DIES to Coopérative Bassadougou de Dies with score 100
Matching ASSOCIÉS L'AGNÉBY to SOCIETE COOPERATIVE DES PRODUCTEURS ASSOCIES DE L'AGNEBY with score 94
Matching BOIGNYKRO to COOPERATIVE DES AGRICULTEURS DE BOIGNYKRO with score 100
Matching HERE ZAGNE to SOCIETE COOPERATIVE AGRICOLE HERE DE ZAGNE with score 100
Matching S ZARANOU to COOPERATIVE DES PRODUCTEURS AGRICOLES DE ZARANOU with score 100
Matching ELÉPHANT LAKOTA) to COOPERATIVE AGRICOLE ELEPHANT DE LAKOTA with score 97
Matching BREDI BTIÉ to COOPERATIVE AGRICOLE BREDI DE BETTIE with score 95
Matching GLIGBEUADJI to SOCIETE COOPERATIVE AGRICOLE DE GLIGBEADJI with score 95
Matching ANOUANZE MANZANOUAN to COOPERATIVE AGRICOLE ANOUANZE DES PRODUCTEURS DE MANZANOUAN with score 100
Matching BOKASSO D'EBILASSOKRO (ABE) to COOPERATIVE AGRICOLE BOKASSO D'EBILASSOKRO with score 91
Matching ENTENTE to SOCIETE COOPERATIVE AGRICOLE ENTENTE with score 100
Matching CA KISHWENSIDA COCHEM DIDA to Société Coopérative Kishwensida  Cochem-Dida with score 94
Matching PLANTEURS UNIS KPATAWERE to SOCIETE COOPERATIVE DES PLANTEURS UNIS DE KPATAWERE with score 100
Matching ADAMAKOUAMEKRO to Société Coopérative  des producteurs d'Adamakouamekro with score 93
Matching SIAKAKRO to COOPERATIVE AVEC CONSEIL D'ADMINISTRATION SIAKAKRO with score 100
Matching SIMPLIFIÉE ENTENTE SONGAN to SOCIETE COOPERATIVE SIMPLIFIEE ENTENTE DE SONGAN with score 98
Matching BINKADI YAMOUSSOUKRO to COOPERATIVE AGRICOLE BINKADI DE YAMOUSSOUKRO with score 100
Matching NOUVELLE ALLIANCE DIÉGONEFLA to SOCIETE COOPERATIVE AGRICOLE NOUVELLE ALLIANCE DE DIEGONEFLA with score 98
Matching BENKADI JEROMEKRO to COOPERATIVE BENKADI DE JEROMEKRO with score 100
Matching CACAO BIOLOGIQUE LA MÉ to Producteurs de Cacao Biologique de la Mé with score 100
Matching FRERES UNIS LA MARAHOUE to COOPERATIVE AGRICOLE DES FRERES UNIS DE LA MARAHOUE with score 100
Matching CAFE CACAO IVOIRIEN to Société Coopérative de Café Cacao Ivoirien with score 97
Matching POUR LA MAITRISE L’ENTRAI DURABLE to SOCIETE COOPERATIVE AGRICOLE POUR LA MAITRISE DE L'ENTRAIDE DURABLE with score 100
Matching GARO-EST DIVO to SOCIETE COOPERATIVE AGRICOLE GARO-EST DE DIVO with score 100
Matching ALLIES COTE D`IVOIRE to societe cooperative agricole des allies de cote d`ivoire with score 100
Matching kobouo to societe cooperative agricole de kobouo with score 100
Matching NIAMKEY FAMILLE L'INNIE to societe cooperative agricole niamkey et famille de l'indenie with score 100
Matching NOUVEAUX LAHOUDA to SOCIETE COOPERATIVE DES NOUVEAUX AGRICULTEURS DE LAHOUDA with score 100
Matching LANAYA VAVOUA to Societe Coopérative Agricole Lanaya de Vavoua with score 100
Matching donhio to societe cooperative agricole de donhio with score 100
Matching amitie gnagbodougnoa to societe cooperative amitie de gnagbodougnoa with score 100
Matching alliance mabouo to societe cooperative alliance de mabouo with score 100
Matching nouveaux soubre to societe cooperative des nouveaux agriculteurs de soubre with score 100
Matching IVOIRIENNE COMMERCIALISATION CAFE CACAO to societe ivoirienne de commercialisation de cafe et cacao with score 100
Matching ENTERPRISE MORNES MEAGUI to Enterprise Cooperative des Agriculteurs Modernes de Meagui with score 100
Matching PERATIVE NEGOCE LAKOTA to SOCIETE COOPPERATIVE DE NEGOCE DE LAKOTA with score 100
Matching Sabarikagni Du Haut Sassandra to Societe Cooperative Sabarikagni Du Haut Sassandra with score 100
Matching MEAGUI to COOPERATIVE AGRICOLE DE MEAGUI with score 100
Matching ANOUANZE PITS DIDOKO to societe cooperative anouanze des petits producteurs de didoko with score 100
Matching TABOU to societe cooperative agricole de tabou with score 100
Matching ANOUANZE D'ANIASSUE to Société Coopérative Agricole Anouanze d'Aniassue with score 100
Matching LA REGION DU CAVALLY to SOCIETE COOPERATIVE AGRICOLE DE LA REGION DU CAVALLY with score 100
Matching SIMPLIFIEE POUR LE VELOPPEMENT KEIBLY to SOCIETE COOPERATIVE SIMPLIFIEE AGRICOLE POUR LE DEVELOPPEMENT DE KEIBLY with score 100
Matching SOFOCI to SOCIETE COOPERATIVE AGRICOLE DE SOFOCI with score 100
Matching TOUIH to Société Coopérative Agricole de TOUIH with score 100
Matching IVOIRIENNE ACHAT PRODUIT to SOCIETE IVOIRIENNE ACHAT DE PRODUIT AGRICOLE with score 100
Matching BINKELEMAN BELLE-VILLE to cooperative agricole binkeleman de belle-ville with score 100
Matching Y-EWOUN-ANIEN DU HAUT SASSANDRA to cooperative agricole ety-ewoun-anien du haut sassandra with score 100
Matching OUPOUYO to cooperative agricole des Producteurs Oupouyo with score 100
Matching SIBOULAKA BEOUA to Société Coopérative Agricole Siboulaka de Beoua with score 100
Matching GROGBONOU DAN to COOPERATIVE AGRICOLE DE GROGBONOU DAN with score 100
Matching LASSINA BANGO to Coopérative Agricole de Lassina Bango with score 100
Matching ANOU to Cooperative Agricole de Coopanou with score 100
Matching SIMPLIFIEE TOUMTOUMDA DU HAUT SASSANDRA to SOCIETE COOPERATIVE SIMPLIFIEE AGRICOLE TOUMTOUMDA DU HAUT SASSANDRA with score 100
Matching VICTOIRE MEAGUI to Cooperative Victoire de Meagui with score 100
Matching ENTERPRISE MEAGUI to Enterprise Cooperative des Agriculteurs de Meagui with score 100
Matching espoir vavaoua to societe cooperative avec conseil d'administration espoir de vavaoua with score 100
Matching FARMERS HOPE to Farmers Hope with score 100
Matching ESPOIR BLOLEQUIN to COOPERATIVE AGRICOLE ESPOIR BLOLEQUIN with score 100
Matching ELIE TIKPA DALOA to COOPERATIVE AGRICOLE ELIE TIKPA DE DALOA with score 100
Matching S-DAKUA to scoop-dakua with score 100
Matching S ‘NANTABA’ DU HAUT SASSANDRA to societe cooperative des producteurs agricoles ‘nantaba’ du haut sassandra with score 100
Matching FRERES UNIS BOUREIMAKRO to SOCIETE COOPERATIVE AGRICOLE DES FRERES UNIS DE BOUREIMAKRO with score 100
Matching AMIS LA NATURE MAN to Coopérative Agricole des Amis de la Nature de Man with score 100
Matching JEUNES S DU WORODOUGOU to COOPERATIVE DES JEUNES PRODUCTEURS AGRICOLES DU WORODOUGOU with score 100
Matching DU GOH to SOCIETE COOPERATIVE AGRICOLE DU GOH with score 100
Matching PLANTEURS UNIS FENGOLO to COOPERATIVE DES PLANTEURS UNIS DE FENGOLO with score 100
Matching DJOUMAN KONGOKOUASSIKRO to SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRATION DJOUMAN DE KONGOKOUASSIKRO with score 100
Matching NOUVELLE ALLIANCE BANGOLO to SOCIETE COOPERATIVE AGRICOLE NOUVELLE ALLIANCE DE BANGOLO with score 100
Matching FRÈRES UNIS GOBROKO to SOCIETE COOPERATIVE AGRICOLE DES FRERES UNIS DE GOBROKO with score 97
Matching Conseil d'Administration s Pit Didievi to Cooperative avec Conseil
d'Administration des Producteurs Agricoles de Petit Didievi with score 100
Matching Conseil D’administration Unite Danane to Societe Cooperative Avec Conseil D’administration Unite De Danane with score 100
Matching YEBOYOKON DAIRO DIDIZO to SOCIETE COOPERATIVE AGRICOLE YEBOYOKON DE DAIRO DIDIZO with score 100
abrv_cleaned_clean
['CABID II',
 'ECABEZOU',
 'CEXPAG',
 'COOTIEN OULA',
 'SCAND',
 'SCAOD',
 'SCAP-CC',
 'SCAT',
 'SCJPAB 1',
 'AAT',
 'ADOB',
 'AL',
 'AM',
 'IIAP',
 'SPC',
 'SOCABANCO',
 'SOCAD',
 'SOCAPROS',
 'SOCBAD',
 'SOAK',
 'BECIDA',
 'BECIDA Tle',
 'BMC VAVOUA',
 'COADOSOV',
 'SCAFRA',
 'SCOAVA',
 'CAAB',
 'ABL',
 'SPAD Gagnoa',
 'SPAD MAN',
 'CAN',
 'AAHS',
 'CADEDO',
 'CAYAT',
 'ECAMOM',
 'SCAPEKO',
 'SCARDI',
 'SECA',
 'SOCADAG',
 'CAPKA',
 'CAG',
 'MIE.SA',
 'SCAESG',
 'SCALO',
 'SCBG GALEBRE',
 'SCNV-CA',
 'EKO',
 'SAHS',
 'SOCAS',
 'SOCAMA',
 'SOCODD',
 'SOEM',
 'USCRG',
 'UCODEL',
 'AHONDJO',
 'BARACACAO',
 'AD',
 'AK',
 'SI3C',
 'UDAN',
 'HKF 7',
 'ECO LAKOTA',
 'CAF',
 'ANBAK',
 'ECEPAG',
 'SCAPUD',
 'SOCAG',
 'SOCAYA',
 'SOA',
 'SOCOPAL',
 'CA SPAB',
 'SPAD CA',
 'CAAA',
 'CADB',
 'CAEG',
 'CAMOBIAN',
 'CANK',
 'CAPA',
 'CAPB',
 'CAPM',
 'CAPRESSA',
 'CEMA',
 'SCOABIA',
 'AGOH',
 'COANI',
 'CAS',
 'ACA',
 'ADEF',
 'AGARO',
 'AGES',
 'AGO',
 'AHK',
 'AZA',
 'RADI',
 'ECAB',
 'ECAO',
 'ECOPADI',
 'SCAANIAS',
 'SCAM',
 'CA-AB',
 'ASAG',
 'ECCO',
 'AKY',
 'BAD',
 'APRAB',
 'SINIKAN AS',
 'SOCANOVA',
 'CAREVA',
 'SOADO',
 'SOAM',
 'SOLIDARITE',
 'SAPO',
 'SCAPAO',
 'SPAD GUIGLO',
 'SPAD SOUBRE',
 'BARRA GABIADJI',
 'cnb',
 'COALIDAN',
 'COOBADI',
 'DJIGUIYA',
 'SOCOPASG',
 'AGNIPI',
 'SCAPD',
 'SCOEL',
 'SOCBPI',
 'SOCOOFEM',
 'CA2S CA',
 'CATEZ',
 'RAMA CA',
 'SCPK',
 'AC',
 'capg',
 'SOCAET2',
 'SCOOWEND',
 'SCAGB',
 'SOCASS',
 'SCAK',
 'SOCAGRI',
 'CAGNAN',
 'CANG',
 'SOCOAMO',
 'SOCAT',
 'SCANFI',
 'AGED',
 'CAEHS',
 'NAG',
 'CAMED',
 'CAFUGO',
 'ECSP',
 'CAMAYE',
 'SOCAMEA',
 'ECAKOOG',
 'ABOCFA',
 'ASETENAPA',
 'ASUNAFO',
 'ECAM',
 'ecojad',
 'ESCOPAG',
 'kapatchiva',
 'SOACDI',
 'KUKUOM',
 'DJOUMAN',
 'casib',
 'sicopag',
 'AHONTO',
 'SOCADA',
 'SOCA2PD',
 'AG',
 'DAKUA',
 'COODIG',
 'ADA',
 'AMIANGOUAN',
 'APM Daloa',
 'BARA',
 'C2AS',
 'CAADA',
 'CABING',
 'CABS',
 'CADESA',
 'CADT',
 'capedig',
 'CAPROD',
 'CAREFSI',
 'CAET',
 'cava',
 'CJPK',
 'CAMB',
 'cnibo',
 'ADES',
 'AEEN',
 'AGG',
 'ALBA',
 'ANEK',
 'AO',
 'APAIX HS',
 'apedi',
 'asid',
 'TEEGA WENDE',
 'AKK',
 'INA',
 'COVIMA',
 'cpr-canaan',
 'ECAB GUIGLO',
 'ECABLO',
 'ECAKO',
 'ECAPR',
 'ETC TAABO',
 'FAHO',
 'HKF NAWA',
 'JAVA',
 'JEPRAS',
 'KAKO',
 'KANWORI DE YAOU',
 'LANAYA',
 'LE ROCHER',
 '-CA NIHIPRI DE BLOLEQUIN (CNB)',
 'SCAACI',
 'SCABK',
 'SCALAVA',
 'SCAPEN',
 'SCAS',
 'SCBPAG',
 'SCOAGG',
 'SECOM',
 'BINKADI GA',
 'AB',
 'AVI',
 'RAZA',
 'CATED',
 'RAS',
 'EK',
 'EKLOEWOU',
 'SCPCCT-CA',
 'SFED',
 'SNAPAL',
 'SOCAK KATANA',
 'SOCAKI',
 'SOCEADAHS',
 'SOCONEL',
 'SOCONPAYAT',
 'SOCOPAD',
 'SOCOPLA',
 'SODASI',
 'soutra',
 'SPAD Daloa',
 'UCA',
 'YEYASSO',
 'SCAPMB',
 'YANKADI',
 'CEAA',
 'CADB BLOLEQUIN',
 'LAG',
 'AMOU',
 'UF',
 'MINDOBIE',
 'CABA',
 'CAFUC',
 'CAL2B',
 'CAPROBLO',
 'RASSO',
 'SOCOPAS',
 'AD_DUEKOUE',
 'ANAM',
 'ECAFHS CA',
 'CABID',
 'ECAG',
 'SAMA HS',
 'SOCOS',
 'ECSP Duekoue',
 'CABF',
 'SCJPAB1',
 'ECAPGLAKOTA',
 'MONT BIAN',
 'AA',
 'SOCOPA',
 'COASABANA',
 'KRIHIRI',
 'AGRIAL',
 'NOASI',
 'CABEN',
 'ASO',
 'EDIFIE DOUKOUYA',
 'AWEB',
 'ECEAGN',
 'CAES',
 'ECOAB',
 'CANWG',
 'REJA',
 'KGS',
 'SOCAREBIA',
 'BENKADI',
 'YMA',
 'SCAEG',
 'SCOSOD',
 'CPSL',
 'CSC',
 'SCPS',
 'SOCABEN',
 'SOUHONTA KAKO',
 'ADI',
 'SOENHA',
 'AAD',
 'ABE',
 'EBIA-CA',
 'AKOF',
 'SOAG',
 'AGBS',
 'CJAHS',
 'COOFRADO',
 'CPB',
 'ALO',
 'SOCANC',
 'SOCARL',
 'SOALAO',
 'ADOU',
 'CABD DOUGBO',
 'ECATAMEA',
 'AGAGNY',
 "YAWOUBE D'ANIASSUE",
 'SCOAKHS',
 'SOCAAN',
 'kanwori',
 'AAPROMAN',
 'AGREL',
 'SOCODAG',
 'ABINKADI CA',
 'CASODU',
 'COASI',
 'CASO',
 'SCOPAYO',
 'ECAPA-GZ',
 'BB',
 'CABD',
 'SCINPA',
 'AMA',
 'ANONKLON',
 'ECAFHS',
 'AGA',
 'AN',
 'CAADI',
 'SICAO',
 'CAREF SI',
 'CIPACC',
 'EAK',
 'ABOKA',
 'ADO',
 'UPRAD',
 'AGRIOBIO',
 'CEDA',
 'SNCC',
 'CODEMA',
 'CAPO',
 'ADA',
 'CAC',
 'COANGNA',
 'CATBK',
 'ASM',
 'SCAEPGY',
 'SOCOSADA',
 'BADEMAYA',
 'ATESA',
 'SCAAO',
 'AKAM',
 'SOCAHI',
 'SOELA',
 'SOCOPADOU',
 'HKF',
 'NAWA1',
 'NAS',
 'SOCAGS',
 'SOCOPDAL',
 'CAYSI',
 'CAAA SAND BOX',
 'CAABRO',
 'CAABRO SAND BOX',
 'CAAN',
 'CAAN SAND BOX',
 'CABA SAND BOX',
 'CABES',
 'CABES SAND BOX',
 'CABG',
 'CABG SAND BOX',
 'CAGB',
 'CABGB SAND BOX',
 'CABID SAND BOX',
 'CABING SAND BOX',
 'CABOHGA',
 'CABOHGA SAND BOX',
 'CAC SAND BOX',
 'CADA',
 'CADA SAND BOX',
 'CADB SAND BOX',
 'CADEDO SAND BOX',
 'CADT SAND BOX',
 'CAEG SAND BOX',
 'CAKB',
 'CAL2B SAND BOX',
 'CAMAP',
 'CAMAP SAND BOX',
 'CAMOBIAN SAND BOX',
 'CANK SAND BOX',
 'CANS',
 'CANS SAND BOX',
 'CAPA SAND BOX',
 'CAPB SAND BOX',
 'CAL',
 'CAPL SAND BOX',
 'CAPM SAND BOX',
 'CAPO SAND BOX',
 'CAPRESSA SAND BOX',
 'CAPROD SAND BOX',
 'CAREBO',
 'CAREFSI SAND BOX',
 'CARET SAND BOX',
 'CASODU SAND BOX',
 'CATBK SAND BOX',
 'CDI TEST FG IN PROD',
 'CEAA SAND BOX',
 'CEDA SAND BOX',
 'CEMA SAND BOX',
 'CIPACCA SAND BOX',
 'CJPK SAND BOX',
 'CNAD',
 'CNAD SAND BOX',
 'COABIA SAND BOX',
 'COAKA',
 'COAKA SAND BOX',
 'COAM',
 'COAM SAND BOX',
 'CODERLACS',
 'CODERLACS SAND BOX',
 'COESAG',
 'COESAG SAND BOX',
 'AAB',
 'COOAAB SAND BOX',
 'COOBADI SAND BOX',
 'ABOTRE',
 'ABOTRE SAND BOX',
 'AGOH SAND BOX',
 'ANZUE II',
 'ANZUE II SAND BOX',
 'BIRBA',
 'BIRBA SAND BOX',
 'COANI SAND BOX',
 'AA',
 'AA SAND BOX',
 'COPACOL',
 'ESPOIR',
 'ESPOIR SAND BOX',
 'GCT',
 'GCT SAND BOX',
 'KWS',
 'KWS SAND BOX',
 'NOBIELTO',
 'NOBIELTO SAND BOX',
 'WEND SONGDA',
 'WEND SONGDA SAND',
 'BOX',
 'CAES SAND BOX',
 'JAVA SAND BOX',
 'JCAS SAND BOX',
 'TEEGA WENDE SAND BOX',
 'CAGNAN SAND BOX',
 'COALIDAN SAND BOX',
 'COANGNA SAND BOX',
 'ABI',
 'ABIN SAND BOX',
 'ADO SAND BOX',
 'NECAB SAND BOX',
 'ABO',
 'CABS SAND BOX',
 'PAN',
 'PAN SAND BOX',
 'UDAN SAND BOX',
 'ABENKADI',
 'ABENKADI SAND BOX',
 'ACA SAND BOX',
 'ADEF SAND BOX',
 'AGARO SAND BOX',
 'AGES SAND BOX',
 'AGO SAND BOX',
 'AHK SAND BOX',
 'AKCODI',
 'ALBA SAND BOX',
 'AMDI',
 'AMDI SAND BOX',
 'ANAM SAND BOX',
 'AOU',
 'AOU SAND BOX',
 'ASM SAND BOX',
 'ATESA SAND BOX',
 'AYAF',
 'AYAF SAND BOX',
 'AZA SAND BOX',
 'AZEG',
 'AZEG SAND BOX',
 'INA SAND BOX',
 'RADI SAND BOX',
 'RAS SAND BOX',
 'RAZO',
 'RAZO SAND BOX',
 'ROYA',
 'ROYA SAND BOX',
 'YCA',
 'YCA SAND BOX',
 'CP2A',
 'CP2A SAND BOX',
 'CPACD',
 'CPACD SAND BOX',
 'CPI',
 'CPSL SAND BOX',
 'ECAAF',
 'ECAAF SAND BOX',
 'ECAB SAND BOX',
 'ECAESB',
 'ECAESB SAND BOX',
 'ECAMOG',
 'ECAMOG SAND BOX',
 'ECAO SAND BOX',
 'ECEAGN SAND BOX',
 'ECODEBO',
 'ECODEBO SAND BOX',
 'EAK SAND BOX',
 'ECOPADI SAND BOX',
 'ECOPAS',
 'ECOPAS SAND BOX',
 'ECSP PURATOS',
 'ECSP SAND BOX',
 'FLRI ADIM',
 'FLRI NANTEBESSOU',
 'FLRI SOCAMA',
 'IQJ',
 'IQJ SAND BOX',
 'LAFI BEBE DE MAN',
 'LE PROGRES',
 'LE PROGRES SAND BOX',
 'NWK',
 'NWK SAND BOX',
 'ADIAS',
 'S RADA SAND BOX',
 'SAND BOX SCAAO',
 'SAND BOX SCAB',
 'SAND BOX SCAGG',
 'SAND BOX SCAPCC',
 'SAND BOX SCAPUD',
 'SAND BOX SCASOU',
 'SAND BOX SCOAPANI',
 'SAND BOX AC',
 'SAND BOX ASG',
 'SAND BOX AT',
 'SAND BOX NIA',
 'SAND BOX 3A',
 'SAND BOX BAD',
 'SAND BOX BADEMAYA',
 'SAND BOX SCSPA',
 'SAND BOX SINIKAN AS',
 'SAND BOX SOCAEK',
 'SAND BOX SOCANEK',
 'SANS BOX LAFI BEBE DE MAN',
 'SC WLSA',
 'SC WLSA SAND BOX',
 'SC2WK',
 'SC2WK SAND BOX',
 'SCAACI SAND BOX',
 'SCAANIAS SAND BOX',
 'SCAB',
 'SCABK SAND BOX',
 'SCABODI',
 'SCABODI SAND BOX',
 'SCAC',
 'SCAC SAND BOX',
 'SCAEG SAND BOX',
 'SCAAG',
 'SCAGB SAND BOX',
 'SCAGG',
 'SCAK SAND BOX',
 'SCAM SAND BOX',
 'SCAND SAND BOX',
 'SCANG SAND BOX',
 'SCAPCCA',
 'SCAPD SAND BOX',
 'SCAPEKO SAND BOX',
 'SCARDI SAND BOX',
 'SCASOU',
 'SCAW',
 'SCAW SAND BOX',
 'SCBPAG SAND BOX',
 'SCELA',
 'SCELA SAND BOX',
 'SCO SACI',
 'SCO SACI SAND BOX',
 'COAANI',
 'SCOWWASI',
 'SCOAWWASI SAND BOX',
 'CAYEM',
 'CAYEM SAND BOX',
 'A',
 'A CA SAND BOX',
 'A SAND BOX',
 'AAS',
 'AAS SAND BOX',
 'CADJI',
 'ADJI SAND BOX',
 'AKAM SAND BOX',
 'Olakoko',
 'AKOKO SAND BOX',
 'AT',
 'ECO SAND BOX',
 'NIA',
 '3A',
 'ABOKA SAND BOX',
 'AGRIBIO',
 'AGRIBIO SAND BOX',
 'AKY SAND BOX',
 'AL SAND BOX',
 'CANGEVA SAND BOX',
 'ASAM SAND BOX',
 'EPG',
 'EPG SAND BOX',
 'JST',
 'JST SAND BOX',
 'LA PAIX',
 'LA PAIX SAND BOX',
 'SCAG SAND BOX',
 'SCAT 1',
 'SCSAG',
 'SCSAG SAND BOX',
 'SNCC',
 'SNCC SAND BOX',
 'WEBE',
 'WEBE SAND BOX',
 'YAT SAND BOX',
 'AH',
 'AH SAND BOX',
 'APRAB SAND BOX',
 'CODEMA SAND BOX',
 'LTDV',
 'LTDV SAND BOX',
 'UPRAD SAND BOX',
 'SCOOWEND SAND BOX',
 'SCSPA',
 'SCUW',
 'SCUW SAND BOX',
 'SOCNAD',
 'SOCCNA SAND BOX',
 'SOCOSADA SAND BOX',
 'SOCOAMO SAND BOX',
 'SOCABA',
 'SOCABA SAND BOX',
 'SOCABB',
 'SOCABB SAND BOX',
 'SOCADJO',
 'SOCADJO SAND BOX',
 'SOCAEK',
 'SOCAET',
 'SOCAET SAND BOX',
 'SOCAG SAND BOX',
 'SOCAGNIPI',
 'SOCAGNIPI SAND BOX',
 'SOCAGRI2 SAND BOX',
 'SOCAHI SAND BOX',
 'SOCADJA',
 'SOCAJ SAND BOX',
 'SOELA SAND BOX',
 'SOCOPADOGBO',
 'SOCOPADOGBO SAND BOX',
 'SOCOPADOU SAND BOX',
 'SOCOPAL SAND BOX',
 'SOCOPDAL SAND BOX',
 'SOCOPEK',
 'SOCOPEK SAND BOX',
 'SOCOOM',
 'SOCOSOM SAND BOX',
 'UPAS',
 'UPAS SAND BOX',
 'FARMER GROUP',
 'CAFUVA',
 'CAPLI',
 'INCHALA',
 'BENKRA',
 'CAAM',
 'CAB',
 'CAZA',
 'CAPG GUIGLO',
 'CINPA',
 'COAB',
 'ABOIGNY',
 'AZ',
 'AGLI',
 'ABE BOKASSO',
 'EN',
 'COPUK',
 'ECOOYA',
 'NOCAO OUME',
 'ES',
 'ABINKADI',
 'ANAD',
 'CAPEDIG PART OF ECOOKIM',
 'ECOODI',
 'ASANKRAGWA',
 'TARKWA HUNI',
 'ASSIN',
 'CPAGB',
 'SCPCB',
 'ECAPN',
 'RELUAINDE',
 'AD',
 'AZEG',
 'RAH',
 'PUSAH',
 'AME',
 'PS',
 'USOCAS',
 'PRO',
 'AGEA',
 'AJAMI ALY',
 'PAI',
 'AUDD',
 'SOAKOKO',
 'SCCG',
 'SCOODJIBODI',
 'AZAP',
 'TEPA',
 'APROCAO',
 'IZ',
 'PAK',
 'MOYE',
 'SOCAFAK CA',
 'SOCACHIPOLO',
 'CADI',
 'FOUNDARA',
 'SCEG1',
 'CPAC',
 'PAZ',
 'COOJEPAWO',
 'SOCOPGA',
 'KYGNON',
 'SOCAB',
 'LAFI BEBE',
 'SOCAZEMS',
 'LA GLOIRE',
 'ASAВ СООР СА',
 'CAWSA',
 'NCB',
 'SCANT',
 'SAL',
 'SCAJP',
 'CALZB',
 'HAMAOULA',
 'NWM',
 'SONAB',
 'WEND SONGODO',
 'JPAB',
 'TEEGAWEND',
 'PCBM',
 'APM Benianssou',
 'APM Man',
 'CABK 1',
 'CABK 2',
 'CAED Daloa',
 'CAED GUIGLO',
 'CAEDU',
 'CAOSI',
 'CASB',
 'CNEK',
 'COAM DALOA A',
 'COAM BONON',
 'CODERLACS TOUMODI',
 'COAM DALOA B',
 'EYENIAN',
 'ESPÉRANCE AAB',
 'SICA',
 'NOUR',
 'SCAGB BLOMMER',
 'SCOAG',
 'AB B',
 'SCOPACI',
 'SCPCCT 2',
 'SCPCCT 1',
 'SPAD Daloa 1',
 'SPAD DUEKOUE',
 'SPAD Daloa 2',
 'SPAD SEGUELA',
 'SPAD VAVOUA',
 'ZAGTOULI',
 'BENKADI S',
 "Société érative Espoir d'Alepé",
 'AB CI',
 'SCOEL BONGOUANOU',
 'WINPAS',
 'FG',
 'Ecookim - APIG',
 'Ecookim - CAVA',
 'Ecookim - CAUD',
 'Ecookim - CAKIB',
 'EBO-YEKON',
 'CAP VA',
 'RADEE TRADING',
 'SOCADMV',
 'SIVAP',
 'ESPOIR VAVOUA',
 'SORANHS',
 'ECAPG LAKOTA',
 'PLAZA SOUBRE',
 'PLAZA GAGNOA',
 'SOCOEMA',
 'SOCAM',
 'ECATIE',
 'Ecookim - CPR CANAAN',
 '2 CG',
 'SCAW MAN',
 'CALTDV',
 'APM GAGNOA',
 'SOLAGUE',
 'AYAAF',
 'ANAM (Ex EDY)',
 'ANZUE 2',
 'COPAL',
 'PUCC',
 'WAGAJACA',
 'SYAT',
 'ECYG',
 'CAYSI',
 'NOUVELLE RANYD',
 'ZRANSSA',
 'SOCA BANCO',
 'SOCOFUMA',
 'SOCOCCI',
 'SCAA CI',
 'NAG',
 'RADEE',
 'CAP VA',
 'CA2B',
 'SCAPO',
 'AGRO',
 'ANOU',
 'COVIMEA',
 'SCAEB',
 'SCAFUB',
 'AAM SS',
 'SOUGRI-NONMA',
 'ECAM SASSANDRA',
 'CASUT',
 'CCAPUO',
 'YEBOYOKON']
df.DISCL_LATITUDE.notna().sum()
1269
len(df.DISCL_LATITUDE)
1976
#df.to_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/civ_cooperatives_update/combined_data/just_CIV_2024_columns_fixed_cleaned_fuzzy_imputed.csv', index=False)

02 Jan 2026 Fill missing geocodes and check use of company vs. trader

df = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/civ_cooperatives_update/combined_data/just_CIV_2024_columns_fixed_cleaned_fuzzy_imputed.csv')
df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')
/var/folders/3r/r9b5rj5s3pb069rsg5zh_1640000gn/T/ipykernel_30332/324783634.py:2: DtypeWarning: Columns (6,8,9,10,11,19,23,24,27,31,32,34) have mixed types. Specify dtype option on import or set low_memory=False.
  df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')
df_2023[df_2023.YEAR==2023].head()
COOP_ID YEAR SUPPLIER_ABRVNAME SUPPLIER_FULLNAME LATITUDE LONGITUDE DISTRICT_NAME DISTRICT_GEOCODE DISCLOSURE_SOURCES TRADER_NAMES ... SIMPLIF_ABRVNAME CCTN_COOP_ID IS_ALL_CAM_V3 IS_ANY_CAM_V3 NB_FARMERS_COMPANY_YEAR !NOT_RFA unique_rfa_link TOTAL_FARMERS_RFA LVL_4_NAME REPEATED_FROM_PAST_YEAR
47 45 2023 ABO ABO 5.632 -6.631 MEAGUI CI-2.2.3_1 BARRY CALLEBAUT + HERSHEY BARRY CALLEBAUT ... ABO ABO_-6.6_5.6_ABO False False 653.0 False False 0.0 MEAGUI False
57 52 2023 AB AB NaN NaN SASSANDRA CI-2.1.2_1 CEMOI CEMOI ... AB AB_NA_NA_AB False False NaN False False 0.0 SASSANDRA False
68 60 2023 ADA COOPERATIVE AVEC CONSEIL D'ADMINISTRATION DES ... 5.200 -6.832 SAN-PEDRO CI-2.3.1_1 BARRY CALLEBAUT + FERRERO BARRY CALLEBAUT ... ADA ADA_-6.8_5.2_COOPERATIVE AVEC CONSEIL D'ADMINI... False False 223.0 False False 0.0 SAN-PEDRO False
70 61 2023 ADA COOPERATIVE AVEC CONSEIL D'ADMINISTRATION DES ... NaN NaN NaN NaN ALFRED RITTER KRUGER + SUSCOM ... ADA ADA_NA_NA_COOPERATIVE AVEC CONSEIL D'ADMINISTR... False False 763.0 False False 0.0 NaN False
83 64 2023 ADEDO COOPERATIVE AGRICOLE POUR LE DEVELOPPEMENT ET ... 6.385 -5.411 OUME CI-5.1.2_1 CARGILL CARGILL ... ADEDO ADEDO_-5.4_6.4_COOPERATIVE AGRICOLE POUR LE DE... False True 864.0 False False 0.0 OUME False

5 rows × 36 columns

df.head()
DISCL_TRADER_NAME DISCL_SUPPLIER_ABRVNAME DISCL_AREA_NAME DISCL_CERTIFICATION_NAME DISCL_NUMBER_FARMERS DISCL_LONGITUDE DISCL_LATITUDE DISCL_COUNTRY_NAME DISCL_YEAR COMPANY ... DISCL_VOLUMES_UNIT DISCL_CERTIFICATION_PCT DISTRICT_GEOCODE CAM_BUYERS IS_CAM_V3 IS_JRC JRC_BUYER_ID DISCL_SUPPLIER_TYPE DISCL_SUPPLIER_ABRVNAME_CLEANED DISCL_SUPPLIER_FULLNAME_CLEANED
0 SOCIÉTÉ AFRICAINE DE CACAO NaN AGNIBILEKROU NaN NaN -3.204332 7.135274 IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN CI-3.1.2_1 NaN NaN NaN NaN COOPERATIVE NaN SOCIETE COOPERATIVE BENKADI DE SIAKAKRO
1 SOCIÉTÉ AFRICAINE DE CACAO NaN ABENGOUROU NaN NaN -3.494930 6.720262 IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN CI-3.1.1_1 NaN NaN NaN NaN COOPERATIVE NaN SOCIETE COOPERATIVE ANOUANZE DES PRODUCTEURS D...
2 SOCIÉTÉ AFRICAINE DE CACAO NaN BONGOUANOU NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN SOCIETE COOPERATIVE AGRICOLE AHUANOU D'ARRAH
3 SOCIÉTÉ AFRICAINE DE CACAO NaN BANGOLO NaN NaN -7.455261 5.876620 IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN CI-8.1.3_1 NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AGRICOLE TELIN
4 SOCIÉTÉ AFRICAINE DE CACAO NaN DIVO NaN NaN NaN NaN IVORY_COAST NaN BARRY CALLEBAUT AG ... NaN NaN NaN NaN NaN NaN NaN COOPERATIVE NaN COOPERATIVE AGRICOLE IMAAH, COOPERATIVE SIMPLI...

5 rows × 22 columns

import geopandas as gpd
df = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/civ_cooperatives_update/combined_data/just_CIV_2024_columns_fixed_cleaned_fuzzy_imputed.csv')
df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')

print(df_2023.head())
print(df.head())

print(df.describe())
print(df_2023.describe())

print(df.DISCL_AREA_NAME.unique())
print(df.DISTRICT_GEOCODE.unique())

# Load the file
fp = "/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CIV_DEPARTEMENTS.geojson"
gdf = gpd.read_file(fp)

# View the first few rows
print(gdf.head())
/var/folders/3r/r9b5rj5s3pb069rsg5zh_1640000gn/T/ipykernel_30332/622337000.py:3: DtypeWarning: Columns (6,8,9,10,11,19,23,24,27,31,32,34) have mixed types. Specify dtype option on import or set low_memory=False.
  df_2023 = pd.read_csv('/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv', sep=';')


   COOP_ID  YEAR SUPPLIER_ABRVNAME                      SUPPLIER_FULLNAME  \
0        1  2019              0UBE  COOPERATIVE AGRICOLE OUBE DE BANOUFLA   
1        2  2019              2 AD                                   2 AD   
2        3  2019         2A SCCOPS  COOPERATIVE LES AGRICULTEURS D'AKOUPE   
3        4  2019               2AP  COOPERATIVE AGRICOLE ANOUANZE DE PARA   
4        5  2019                2A                                     2A

   LATITUDE  LONGITUDE DISTRICT_NAME DISTRICT_GEOCODE DISCLOSURE_SOURCES  \
0     6.878     -6.450         DALOA       CI-9.1.1_1                NaN   
1     6.720     -3.503    ABENGOUROU       CI-3.1.1_1                NaN   
2     5.477     -4.151       ABIDJAN       CI-1.1.1_1                NaN   
3       NaN        NaN           NaN              NaN                NaN   
4     5.480     -4.155       ABIDJAN       CI-1.1.1_1                NaN

  TRADER_NAMES CERTIFIED CERTIFICATIONS  TOTAL_FARMERS_NONTRADER  \
0          NaN     False            NaN                      NaN   
1          NaN     False            NaN                      NaN   
2          NaN     False            NaN                      NaN   
3          NaN      True            UTZ                      NaN   
4          NaN     False            NaN                      NaN

   TOTAL_FARMERS_TRADER  TOTAL_FARMERS DISCL_COUNTRY_NAME DISCL_AREA_NAME  \
0                   NaN            NaN        IVORY_COAST             NaN   
1                   NaN            NaN        IVORY_COAST             NaN   
2                   NaN            NaN        IVORY_COAST             NaN   
3                   NaN            NaN        IVORY_COAST             NaN   
4                   NaN            NaN        IVORY_COAST             NaN

  DISCL_SUPPLIER_ABRVNAME                        DISCL_SUPPLIER_FULLNAME  \
0             SCOOPS 0UBE  SOCIETE COOPERATIVE AGRICOLE OUBE DE BANOUFLA   
1            COOP-CA 2 AD                                            NaN   
2               2A SCCOPS  SOCIETE COOPERATIVE LES AGRICULTEURS D'AKOUPE   
3              SCOOPS-2AP  SOCIETE COOPERATIVE AGRICOLE ANOUANZE DE PARA   
4               SCOOPS-2A                                            NaN

  DISCL_SUPPLIER_TYPE  DISCL_LONGITUDE  DISCL_LATITUDE  DISCL_VOLUMES  \
0         COOPERATIVE        -6.449521        6.878234            NaN   
1         COOPERATIVE        -3.502761        6.720477            NaN   
2         COOPERATIVE        -4.150873        5.476815            NaN   
3         COOPERATIVE              NaN             NaN            NaN   
4         COOPERATIVE        -4.154526        5.480419            NaN

  DISCL_VOLUMES_UNIT DISCL_CERTIFICATION_NAME  DISCL_CERTIFICATION_PCT  \
0                NaN                      NaN                      NaN   
1                NaN                      NaN                      NaN   
2                NaN                      NaN                      NaN   
3                NaN         UTZ_CO1000011307                      NaN   
4                NaN                      NaN                      NaN

  SIMPLIF_ABRVNAME                                       CCTN_COOP_ID  \
0             0UBE  0UBE_-6.4_6.9_COOPERATIVE AGRICOLE OUBE DE BAN...   
1             2 AD                                 2 AD_-3.5_6.7_2 AD   
2        2A SCCOPS  2A SCCOPS_-4.2_5.5_COOPERATIVE LES AGRICULTEUR...   
3              2AP    2AP_NA_NA_COOPERATIVE AGRICOLE ANOUANZE DE PARA   
4               2A                                     2A_-4.2_5.5_2A

   IS_ALL_CAM_V3  IS_ANY_CAM_V3  NB_FARMERS_COMPANY_YEAR !NOT_RFA  \
0           True           True                      NaN      NaN   
1           True           True                      NaN      NaN   
2           True           True                      NaN      NaN   
3           True           True                      NaN      NaN   
4           True           True                      NaN      NaN

  unique_rfa_link  TOTAL_FARMERS_RFA  LVL_4_NAME  REPEATED_FROM_PAST_YEAR  
0             NaN                NaN       DALOA                    False  
1             NaN                NaN  ABENGOUROU                    False  
2             NaN                NaN     ABIDJAN                    False  
3             NaN                NaN         NaN                    False  
4             NaN                NaN     ABIDJAN                    False  
            DISCL_TRADER_NAME DISCL_SUPPLIER_ABRVNAME DISCL_AREA_NAME  \
0  SOCIÉTÉ AFRICAINE DE CACAO                     NaN    AGNIBILEKROU   
1  SOCIÉTÉ AFRICAINE DE CACAO                     NaN      ABENGOUROU   
2  SOCIÉTÉ AFRICAINE DE CACAO                     NaN      BONGOUANOU   
3  SOCIÉTÉ AFRICAINE DE CACAO                     NaN         BANGOLO   
4  SOCIÉTÉ AFRICAINE DE CACAO                     NaN            DIVO

  DISCL_CERTIFICATION_NAME  DISCL_NUMBER_FARMERS  DISCL_LONGITUDE  \
0                      NaN                   NaN        -3.204332   
1                      NaN                   NaN        -3.494930   
2                      NaN                   NaN              NaN   
3                      NaN                   NaN        -7.455261   
4                      NaN                   NaN              NaN

   DISCL_LATITUDE DISCL_COUNTRY_NAME  DISCL_YEAR             COMPANY  \
0        7.135274        IVORY_COAST         NaN  BARRY CALLEBAUT AG   
1        6.720262        IVORY_COAST         NaN  BARRY CALLEBAUT AG   
2             NaN        IVORY_COAST         NaN  BARRY CALLEBAUT AG   
3        5.876620        IVORY_COAST         NaN  BARRY CALLEBAUT AG   
4             NaN        IVORY_COAST         NaN  BARRY CALLEBAUT AG

                             DISCL_SUPPLIER_FULLNAME DISCL_VOLUMES  \
0  SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRAT...           NaN   
1  SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRAT...           NaN   
2  SOCIETE COOPERATIVE AGRICOLE AHUANOU D'ARRAH A...           NaN   
3  SOCIETE COOPERATIVE AGRICOLE GUELANIN AVEC CON...           NaN   
4  SOCIETE COOPERATIVE AGRICOLE IMAAH, SOCIETE CO...           NaN

  DISCL_VOLUMES_UNIT  DISCL_CERTIFICATION_PCT DISTRICT_GEOCODE  CAM_BUYERS  \
0                NaN                      NaN       CI-3.1.2_1         NaN   
1                NaN                      NaN       CI-3.1.1_1         NaN   
2                NaN                      NaN              NaN         NaN   
3                NaN                      NaN       CI-8.1.3_1         NaN   
4                NaN                      NaN              NaN         NaN

   IS_CAM_V3  IS_JRC  JRC_BUYER_ID DISCL_SUPPLIER_TYPE  \
0        NaN     NaN           NaN         COOPERATIVE   
1        NaN     NaN           NaN         COOPERATIVE   
2        NaN     NaN           NaN         COOPERATIVE   
3        NaN     NaN           NaN         COOPERATIVE   
4        NaN     NaN           NaN         COOPERATIVE

  DISCL_SUPPLIER_ABRVNAME_CLEANED  \
0                             NaN   
1                             NaN   
2                             NaN   
3                             NaN   
4                             NaN

                     DISCL_SUPPLIER_FULLNAME_CLEANED  
0            SOCIETE COOPERATIVE BENKADI DE SIAKAKRO  
1  SOCIETE COOPERATIVE ANOUANZE DES PRODUCTEURS D...  
2       SOCIETE COOPERATIVE AGRICOLE AHUANOU D'ARRAH  
3                         COOPERATIVE AGRICOLE TELIN  
4  COOPERATIVE AGRICOLE IMAAH, COOPERATIVE SIMPLI...  
       DISCL_NUMBER_FARMERS  DISCL_LONGITUDE  DISCL_LATITUDE   DISCL_YEAR  \
count            365.000000      1259.000000     1269.000000  1399.000000   
mean            1055.693151        -6.002039       21.951532  2035.425304   
std              994.076726         1.274875      178.160780   168.054218   
min               50.000000        -8.343150        4.413002  2018.000000   
25%              495.000000        -6.806503        5.486898  2024.000000   
50%              778.000000        -6.263900        6.122330  2024.000000   
75%             1190.000000        -5.363046        6.731880  2024.000000   
max            10160.000000        -2.924890     2022.000000  5000.000000

       DISCL_CERTIFICATION_PCT  CAM_BUYERS  IS_CAM_V3  IS_JRC  JRC_BUYER_ID  
count               147.000000         0.0        0.0     0.0           0.0  
mean               1862.176871         NaN        NaN     NaN           NaN  
std                1187.853133         NaN        NaN     NaN           NaN  
min                 399.000000         NaN        NaN     NaN           NaN  
25%                1088.000000         NaN        NaN     NaN           NaN  
50%                1417.000000         NaN        NaN     NaN           NaN  
75%                2378.500000         NaN        NaN     NaN           NaN  
max                5876.000000         NaN        NaN     NaN           NaN  
            COOP_ID          YEAR      LATITUDE     LONGITUDE  \
count  26022.000000  26022.000000  22704.000000  22704.000000   
mean    2866.559104   2020.967374      6.167487     -5.946747   
std     1672.444859      1.790831      0.845548      1.325325   
min        1.000000   2009.000000      4.408000     -8.424000   
25%     1401.000000   2020.000000      5.523000     -6.711000   
50%     2876.000000   2021.000000      6.156000     -6.222500   
75%     4318.000000   2022.000000      6.747000     -5.353000   
max     5766.000000   2023.000000      9.417000     -2.792000

       TOTAL_FARMERS_NONTRADER  TOTAL_FARMERS_TRADER  TOTAL_FARMERS  \
count              6410.000000           6445.000000    6463.000000   
mean                290.102808            589.497905     857.535665   
std                 601.615504            644.989650     610.247822   
min                   0.000000              0.000000       0.000000   
25%                   0.000000              0.000000     600.000000   
50%                   0.000000            540.000000     792.000000   
75%                 560.250000            806.000000     862.000000   
max               10788.000000           7872.000000   10788.000000

       DISCL_LONGITUDE  DISCL_LATITUDE  DISCL_VOLUMES  \
count     22244.000000    22244.000000      55.000000   
mean         -5.944182        6.166905     692.909091   
std           1.327568        0.846091     244.060350   
min          -8.423971        4.408273     430.000000   
25%          -6.706063        5.522094     430.000000   
50%          -6.216700        6.153000     600.000000   
75%          -5.352382        6.747380    1000.000000   
max          -2.791634        9.416667    1000.000000

       DISCL_CERTIFICATION_PCT  NB_FARMERS_COMPANY_YEAR  TOTAL_FARMERS_RFA  
count               226.000000              3234.000000        6463.000000  
mean                 98.871681               784.939085         135.943834  
std                   3.965002               582.101830         295.269259  
min                  85.000000                 0.000000           0.000000  
25%                 100.000000               413.000000           0.000000  
50%                 100.000000               608.000000           0.000000  
75%                 100.000000               947.000000           0.000000  
max                 100.000000              5394.000000        2859.000000  
['AGNIBILEKROU' 'ABENGOUROU' 'BONGOUANOU' 'BANGOLO' 'DIVO' 'SINFRA'
 'AGBOVILLE' 'TABOU' 'SOUBRE' 'TOUMODI' 'GAGNOA' 'GUIGLO' 'BIANKOUMA'
 'SOUBRÉ' 'GBAKAYO' 'SÉGUELA' 'DUÉKOUÉ' "N'DOUCI" 'MAN' 'SASSANDRA'
 'BLOLÉQUIN' 'BINHOUYÉ' 'BLOLEQUIN' 'KOUIBLY' 'KPOUĚBO (TOUMODI)'
 'HERMANKONO DIÈS (GUITRY)' 'ADZOPÉ' 'BONON' 'BAYOTA (GAGNOA)'
 'MENÉ CENTRE (SAN-PÉDRO)' nan 'Dagadji' 'Guiglo' 'Grand Lahou' 'Bâcon'
 'Dassioko' 'Abongoua' 'Man' 'Lakota' 'Abengourou' 'Vavoua' 'Duékoué'
 'Hermankono-Dies' 'San Pedro' 'Gnato' 'REGION DU JUABLIN'
 'REGION DES MONTAGNES' 'REGION DU LOH-DJIBOUA' 'SUHUM MUNICIPAL'
 'Mbangassina' 'Ntui' 'Daloa' 'ECAKOOG' 'SCOOPAKAM' 'SCOOWEND COOP-CA'
 'CASIB COOP-CA' 'COOP-CA ADA' 'BARA COOP-CA' 'AGRIAL COOP-CA'
 'COPAWEB COOP-CA' 'ECAPA GZ COOP-CA' 'SOCAAN COOP-CA' 'DAGADJI' 'DALOA'
 'DUEKOUE' 'MEAGUI' 'GADOUAN' 'OUMÉ' 'ISSIA' 'DANANE' 'BIANKOUMAN'
 'DIBOBLY' 'TEAPLEU' 'VAVOUA' 'DUEKOUÉ' 'OKROUYO' 'GOUDÍ' 'MOUSSADOUGOU'
 'GNIPI 2' 'MENÉE CENTRE/GABIADJI' 'GUEHIEBLY' 'ZAGNÉ' 'BAYOTA' 'BOUAFLÉ'
 'LAKOTA' 'ROBERT PORTE' 'TAABOO' 'EBILASSOUKRO' 'GRAND-BEREBY' 'ABOISSO'
 'TINHOU' 'SAN-PEDRO' 'YAMOUSSOUKRO' 'SOCOFI' 'BETESSO' 'SANEGOURIFLA'
 'GRAND-LAHOU' 'GAZIBOUO' 'KOTOBI' 'TIASSALÉ' 'GRAND-ZATTRY'
 'YAKASSÉ ATTOBROU' 'HERMANKONO-DIÈS' 'AYAME' 'Fresco' 'Gadouan'
 'Agboville' 'GUEYO' 'NIABLE' 'GUIBEROUA' 'DJANGOBO' 'ATTINGUIE'
 'GRAND LAHOU' 'ANANGUIE' 'MOROKRO' 'ELIBOU' 'BON-BLANC/SAHOUA' 'DOBRE'
 'NIAPIDOU' 'OURAGAHIO' 'SELIEGUE' 'YAKASSE ATTOBROU' 'OUPOYO' 'DABOUYO'
 'BAGOLIEOUA' 'DOGBO' 'GNATO' 'KAKO' 'DOBA' 'BEREBY' 'PETIT-GRABO'
 'GUEPAHOUO' 'OUME' 'DOUKOUYA' 'HIRE' 'DOUAVILLE' 'BAHE-SEBON' 'KAHEN'
 'SIKENSI' 'CENTRE-EST' 'EST' 'SUD-EST' 'OUEST' 'CENTRE-OUEST' 'SUD-OUEST'
 'SUD' 'CENTRE' 'NORD' 'LOCATION' 'Aboisso' 'Divo' 'DIBOBLY, GUÉMON'
 "['AKOKOFE', 'BETHMANSO', 'BOKAKORE', 'CONGO', 'ESSAKROM', 'JAMAN', 'KOFIGYAN', 'KOKOASE', 'NKWANTANUM', 'NSABREKWA', 'NYAMENNAE', 'SEFWI', 'SIKA', 'SOMPRE', 'TAKYIKROM', 'TINADJEI', 'YEBREBRENYIN']"
 "['AKOTOM', 'AMOANDA', 'AWODUA', 'BOAFRI', 'BENSO', 'BOMPIESO', 'BONSASO', 'BREMANG', 'ESUOSO', 'GORDON', 'DAMSO', 'HUNI', 'MANSO', 'NYAMEBEKYERE', 'PEPESA', 'SANTIA', 'TIMBER', 'YAYAHO']"
 "['AGAVE', 'AGBODZA', 'ASIBRIM', 'ATENTA', 'DORIYEM', 'EBIRAM', 'GHANA', 'GOLD', 'KEDAKWEN', 'NKRANFUOM', 'NTENKYEME', 'OBIRI', 'PANKYIRASO', 'POKUA', 'SABENA', 'SOWODADIEM', 'WAWASE']"
 'SAN PEDRO' 'GNIPI' 'TOUIH' 'FRESCO' 'PAULY' 'AFFERY' 'GUITRY' 'TAI'
 'GUIDRY' 'GRABO' 'DIEGONEFLA' 'CECHI' 'ZAGNE' 'SEGUELLA' 'TOULEPLEU'
 'AVERAGE PER FARMER' 'Bonon' 'Grand-Zattry' 'Diby' 'Gagnoa' 'GBLETIA'
 'ALEPE' 'MAFERE' 'TOUADJI 2' 'ZOUKOUGBEU' 'SOFOCI' 'OUPOUYO'
 'GROBONOU DAN' 'MENEE CENTRE' 'TOUHI' 'SEGUELA']
['CI-3.1.2_1' 'CI-3.1.1_1' nan 'CI-8.1.3_1' 'CI-5.2.1_1' 'CI-2.2.3_1'
 'CI-2.1.1_1' 'CI-9.1.4_1' 'CI-8.1.1_1' 'CI-2.3.1_1' 'CI-8.2.1_1'
 'CI-5.1.1_1' 'CI-9.1.1_1' 'CI-9.1.3_1' 'CI-8.2.2_1' 'CI-5.2.2_1'
 'CI-2.2.2_1' 'CI-2.1.2_1' 'CI-2.2.1_1' 'CI-6.1.4_1' 'CI-9.1.2_1'
 'CI-2.3.2_1' 'CI-5.2.3_1' 'CI-8.3.2_1' 'CI-2.2.5_1' 'CI-7.2.2_1'
 'CI-7.1.2_1' 'CI-3.2.1_1' 'CI-5.1.2_1' 'CI-7.1.1_1' 'CI-8.2.4_1'
 'CI-7.3.2_1' 'CI-13.1.2_1' 'CI-9.2.1_1' 'CI-7.3.3_1' 'CI-11.1.1_1'
 'CI-7.3.4_1' 'CI-8.1.2_1' 'CI-6.1.2_1' 'CI-9.2.2_1' 'CI-7.1.3_1'
 'CI-7.1.4_1' 'CI-8.3.3_1' 'CI-7.3.1_1' 'CI-3.1.3_1' 'CI-9.2.3_1'
 'CI-14.2.2_1' 'BONON' 'GAGNOA' 'VAVOUA' 'DIVO' 'SAN PEDRO' 'ABENGOUROU'
 'GUEYO' 'SOUBRE' 'MEAGUI' 'ZOUKOUGBEU' 'TABOU' 'TOULEPLEU' 'SOFOCI'
 'ISSIA' 'TOUIH' 'BEREBY' 'DUEKOUE' 'DALOA' 'OUPOUYO' 'GUIGLO'
 'GROBONOU DAN' 'MENEE CENTRE' 'BLOLEQUIN' 'TOUHI' 'MAN' 'SEGUELA'
 'BIANKOUMAN' 'SASSANDRA' 'BANGOLO' 'DANANE']
  LVL_4_NAME LVL_3_NAME LVL_1_CODE     LVL_1_NAME LVL_2_CODE LVL_2_NAME  \
0   OUANINOU     BAFING        CIV  COTE D'IVOIRE    CI-12_1     WOROBA   
1   KANIASSO      FOLON        CIV  COTE D'IVOIRE     CI-4_1   DENGUELE   
2   MINIGNAN      FOLON        CIV  COTE D'IVOIRE     CI-4_1   DENGUELE   
3   M'BENGUE       PORO        CIV  COTE D'IVOIRE    CI-10_1    SAVANES   
4   KOUN-FAO   GONTOUGO        CIV  COTE D'IVOIRE    CI-14_1     ZANZAN

  LVL_3_CODE   LVL_4_CODE                                           geometry  
0  CI-12.1_1  CI-12.1.2_1  POLYGON ((-43208.418 942992.875, -43117.102 94...  
1   CI-4.1_1   CI-4.1.1_1  POLYGON ((84707.766 1150318.750, 85272.031 114...  
2   CI-4.1_1   CI-4.1.2_1  POLYGON ((-2782.335 1156313.500, -1407.042 115...  
3  CI-10.2_1  CI-10.2.3_1  POLYGON ((189476.312 1149147.000, 189553.844 1...  
4  CI-14.2_1  CI-14.2.2_1  POLYGON ((430946.406 879462.000, 431023.969 87...
df.columns
Index(['DISCL_TRADER_NAME', 'DISCL_SUPPLIER_ABRVNAME', 'DISCL_AREA_NAME',
       'DISCL_CERTIFICATION_NAME', 'DISCL_NUMBER_FARMERS', 'DISCL_LONGITUDE',
       'DISCL_LATITUDE', 'DISCL_COUNTRY_NAME', 'DISCL_YEAR', 'COMPANY',
       'DISCL_SUPPLIER_FULLNAME', 'DISCL_VOLUMES', 'DISCL_VOLUMES_UNIT',
       'DISCL_CERTIFICATION_PCT', 'DISTRICT_GEOCODE', 'CAM_BUYERS',
       'IS_CAM_V3', 'IS_JRC', 'JRC_BUYER_ID', 'DISCL_SUPPLIER_TYPE',
       'DISCL_SUPPLIER_ABRVNAME_CLEANED', 'DISCL_SUPPLIER_FULLNAME_CLEANED',
       'DISCL_AREA_NAME_CLEAN'],
      dtype='object')
from shapely.geometry import Point

# 1. Define the point (Longitude, Latitude)
# User provided: 6.9256... (Lat), -6.0637... (Lon)
lat = 6.768233137521048
lon = -6.859370618032626
point = Point(lon, lat)

# 2. Check which polygon contains the point
# 'geometry' is the column with the POLYGON data
mask = gdf['geometry'].contains(point)

# 3. Filter the dataframe to get the matching row
matching_row = gdf[mask]

# 4. Print the result
if not matching_row.empty:
    print(f"The point is in: {matching_row.iloc[0]['LVL_4_NAME']}")
    # Optional: Print the clean name
    # print(f"Clean Name: {matching_row.iloc[0]['LVL_4_NAME_CLEAN']}")
else:
    print("Point is not inside any region in the GeoDataFrame.")
The point is in: ZOUKOUGBEU


Impute DISTRICT_GEOCODES

import pandas as pd
import geopandas as gpd
import unicodedata
import numpy as np

# ==========================================
# 0. SETUP & LOAD DATA
# ==========================================
# File Paths
PATH_MAIN = '/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/civ_cooperatives_update/combined_data/just_CIV_2024_columns_fixed_cleaned_fuzzy_imputed.csv'
PATH_2023 = '/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CAM_coopyear.csv'
PATH_GEO = "/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/out/CIV_DEPARTEMENTS.geojson"

# Load Data
print("Loading datasets...")
df = pd.read_csv(PATH_MAIN)
df_2023 = pd.read_csv(PATH_2023, sep=';')
gdf = gpd.read_file(PATH_GEO)

# Fills NaNs in 'CLEANED' with value from 'TRADER_NAME'
df['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = df['DISCL_SUPPLIER_ABRVNAME_CLEANED'].fillna(df['DISCL_TRADER_NAME'])

# 1. Ensure empty strings are treated as NaN so fillna works
cols_to_fix = ['DISCL_SUPPLIER_ABRVNAME_CLEANED', 'DISCL_SUPPLIER_ABRVNAME', 'DISCL_SUPPLIER_FULLNAME']
df[cols_to_fix] = df[cols_to_fix].replace(r'^\s*$', np.nan, regex=True)

# 2. Impute: 
#    Priority 1: Keep existing CLEANED
#    Priority 2: Fill with ABRV
#    Priority 3: Fill with FULLNAME
df['DISCL_SUPPLIER_ABRVNAME_CLEANED'] = df['DISCL_SUPPLIER_ABRVNAME_CLEANED']\
    .fillna(df['DISCL_SUPPLIER_ABRVNAME'])\
    .fillna(df['DISCL_SUPPLIER_FULLNAME_CLEANED'])\
    .fillna(df['DISCL_SUPPLIER_FULLNAME'])

# Check results
print("Missing cleaned names after imputing:", df['DISCL_SUPPLIER_ABRVNAME_CLEANED'].isna().sum())

# ==========================================
# 1. HELPER FUNCTIONS & TEXT CLEANING
# ==========================================

def clean_text(text):
    """Standardizes text: removes accents, upper case, strips whitespace."""
    if pd.isna(text) or text == "" or str(text).lower() == 'nan':
        return None
    text = unicodedata.normalize('NFKD', str(text)).encode('ascii', 'ignore').decode('utf-8')
    return text.upper().strip()

def aggressive_clean(text):
    """Strips 'SAND BOX', 'COOP CA' and other noise to find the core name."""
    if pd.isna(text):
        return None
    text = str(text).upper().strip()
    noise_list = [
        'SAND BOX', 'SANS BOX', 'SAND_BOX', 'SANDBOX', 
        ' IN PROD', ' TEST', ' COOP CA', ' COOP-CA', ' SCOOPS'
    ]
    for noise in noise_list:
        text = text.replace(noise, '')
    return text.strip()

print("Initial text cleaning...")
# Clean Reference Data
gdf['LVL_4_NAME_CLEAN'] = gdf['LVL_4_NAME'].apply(clean_text)
df_2023['DISTRICT_NAME_CLEAN'] = df_2023['DISTRICT_NAME'].apply(clean_text)

# Clean Main Data Area
df['DISCL_AREA_NAME'] = df['DISCL_AREA_NAME'].apply(clean_text) # Standardize basic input

# Create an aggressive clean column for matching logic (does not overwrite original yet)
df['CLEANED_RESIDUAL_NAME'] = df['DISCL_SUPPLIER_ABRVNAME'].apply(aggressive_clean)


# ==========================================
# 2. DEFINE MAPPINGS
# ==========================================
print("Building dictionaries...")

# GeoJSON Reference Maps
name_to_geocode_gdf = dict(zip(gdf['LVL_4_NAME_CLEAN'], gdf['LVL_4_CODE']))
geocode_to_name_gdf = dict(zip(gdf['LVL_4_CODE'], gdf['LVL_4_NAME_CLEAN']))

# 2023 Reference Data Maps
ref_coops = df_2023.dropna(subset=['SUPPLIER_ABRVNAME']).drop_duplicates('SUPPLIER_ABRVNAME')
coop_to_name_2023 = dict(zip(ref_coops['SUPPLIER_ABRVNAME'], ref_coops['DISTRICT_NAME_CLEAN']))
coop_to_code_2023 = dict(zip(ref_coops['SUPPLIER_ABRVNAME'], ref_coops['DISTRICT_GEOCODE']))

# --- DICTIONARY A: Manual Fixes (Typos, Foreign, Misplaced) ---
manual_fix_map = {
    # Typos & Sub-locations
    'BAKAYO': 'SASSANDRA', "N'DOUCI": 'TIASSALE', 'BINHOUYE': 'ZOUAN-HOUNIEN',
    'KPOUEBO (TOUMODI)': 'TOUMODI', 'HERMANKONO DIES (GUITRY)': 'GUITRY', 'BONON': 'BOUAFLE',
    'BAYOTA (GAGNOA)': 'GAGNOA', 'MENE CENTRE (SAN-PEDRO)': 'SAN-PEDRO', 'DAGADJI': 'SAN-PEDRO',
    'ABONGOUA': 'ARRAH', 'SAN PEDRO': 'SAN-PEDRO', 'GNATO': 'TABOU', 'BIANKOUMAN': 'BIANKOUMA',
    'GOUDI': 'GAGNOA', 'MENEE CENTRE/GABIADJI': 'SAN-PEDRO', 'GRAND-BEREBY': 'TABOU',
    'TINHOU': 'BLOLEQUIN', 'YAKASSE ATTOBROU': 'YAKASSE-ATTOBROU', 'AFFERY': 'AKOUPE',
    'GUIBEROUA': 'GAGNOA', 'GRAND LAHOU': 'GRAND-LAHOU', 'GRABO': 'TABOU',
    'DIEGONEFLA': 'OUME', 'SEGUELLA': 'SEGUELA', 'TOULEPLEU': 'TOULEUPLEU',
    'GRAND-ZATTRY': 'SOUBRE', 'DIBY': 'SAKASSOU',

    # Coop Names masquerading as Locations
    'ECAKOOG': 'LAKOTA', 'SCOOPAKAM': 'DIVO', 'SCOOWEND COOP-CA': 'SAN-PEDRO',
    'CASIB COOP-CA': 'BLOLEQUIN', 'COOP-CA ADA': 'SAN-PEDRO', 'BARA COOP-CA': 'BANGOLO',
    'AGRIAL COOP-CA': 'DALOA', 'COPAWEB COOP-CA': 'SOUBRE', 'ECAPA GZ COOP-CA': 'SOUBRE',
    'SOCAAN COOP-CA': 'ADZOPE',

    # Foreign / Garbage -> Map to None to drop later
    'SUHUM MUNICIPAL': None, 'MBANGASSINA': None, 'NTUI': None,
    'LOCATION': None, 'AVERAGE PER FARMER': None,

    # Reset Broad Areas to empty string for re-mapping
    'CENTRE-EST': '', 'EST': '', 'SUD-EST': '', 'OUEST': '',
    'CENTRE-OUEST': '', 'SUD-OUEST': '', 'NORD': '', 'SUD': '', 'CENTRE': ''
}

# --- DICTIONARY B: Broad Regions to Specifics (via Coop Name) ---
dict_broad_names = {
    # Est / Abengourou
    'CAAA': 'ABENGOUROU', 'CAABRO': 'ABENGOUROU', 'CAAN': 'ABENGOUROU', 
    'CAMAP': 'AGNIBILEKRO', 'CAPA': 'ABENGOUROU', 'CAPRESSA': 'ABENGOUROU', 
    'CEAA COOP CA': 'ABENGOUROU', 'COAKA': 'ABENGOUROU', 'COOAAB-COOP CA': 'ABENGOUROU', 
    'COOP CA ABOTRE': 'ABENGOUROU', 'COOP CA ESPOIR': 'ABENGOUROU', 'COOP CA NOBIELTO': 'ABENGOUROU', 
    'COOPAYAF': 'ABENGOUROU', 'COOPAZA': 'ABENGOUROU', 'COOPRAZO': 'ABENGOUROU', 
    'COOPYCA': 'ABENGOUROU', 'CP2A': 'ABENGOUROU', 'SCAANIAS': 'ABENGOUROU', 
    'SCOAPANI': 'ABENGOUROU', 'SOLIDARITE': 'ABENGOUROU',
    # Ouest / Man
    'CABA': 'MAN', 'CADB': 'BIANKOUMA', 'CADT': 'MAN', 'CAMOBIAN': 'BIANKOUMA', 
    'CAPB': 'MAN', 'CAPROD': 'MAN', 'COOP CA SPAM MAN': 'MAN', 'COOP CA WEND SONGDA': 'DANANE', 
    'COOP-CA-UDAN': 'DANANE', 'COOP-CA-PAN': 'DANANE', 'COOPAHK': 'MAN', 'COOPANAM': 'MAN', 
    'LAFI BEBE DE MAN': 'MAN', 'NWK': 'MAN', 'SCAB': 'SIPILOU', 'SCAG COOP CA': 'MAN', 
    'SCAPCC': 'MAN', 'SCAW COOP-CA': 'MAN', 'SCOOP CAYEM': 'MAN', 'SCOOPS JST': 'MAN', 
    'SCOOPS LA PAIX': 'MAN', 'SCOOPS SCAG': 'MAN', 'SCOOPS-AH': 'MAN', 'SCOOPS-APRAB': 'MAN', 
    'SINIKAN-SCOOPAS': 'MAN', 'SOCAET COOP CA': 'MAN',
    # Centre-Ouest
    'CABG SCOOPS': 'DALOA', 'CAEG': 'DALOA', 'CAKB': 'DALOA', 'CEDA': 'DALOA', 
    'COAM': 'VAVOUA', 'COOBADI': 'DALOA', 'COOP-CA-CABS': 'DALOA', 'COOPADEF': 'DALOA', 
    'COOPAGARO': 'DALOA', 'COOPAGES': 'DALOA', 'COOPAGO': 'DALOA', 'COOPAKCODI': 'DALOA', 
    'COOPAMDI': 'DALOA', 'COOPATESA': 'DALOA', 'COOPINA': 'DALOA', 'CPACD': 'DALOA', 
    'CPI': 'ZUENOULA', 'ECODEBO': 'DALOA', 'ECOPADI': 'DALOA', 'FLRI COOPADIM': 'DALOA', 
    'IQJ': 'VAVOUA', 'LE PROGRES': 'GAGNOA', 'S-COOP COOPRADA': 'VAVOUA', 'SC WLSA COOP CA': 'DALOA', 
    'SCAAO': 'DALOA', 'SCABK': 'DALOA', 'SCABODI': 'DALOA', 'SCAC': 'DALOA', 'SCAGB': 'DALOA', 
    'SCAGG': 'DALOA', 'SCAM': 'DALOA', 'SCANG': 'DALOA', 'SCAPEKO': 'DALOA', 'SCARDI': 'DALOA', 
    'SCBPAG': 'DALOA', 'SCELA COOP-CA': 'DALOA', 'SCOOPA': 'DALOA', 'SCOOPAAS': 'DALOA', 
    'SCOOPAKAM': 'DALOA', 'SCOOPAKOKO': 'DALOA', 'SCOOPECO': 'DALOA', 'SCOOPNIA SCOOPS': 'DALOA', 
    'SCOOPS AGRI.BIO': 'DALOA', 'SCOOPS-CODEMA': 'DALOA', 'SCOOPS-LTDV': 'DALOA', 'SCOOPS-UPRAD': 'GAGNOA', 
    'SOCABB': 'DALOA', 'SOCAGS': 'DALOA', 'SOCAHI': 'DALOA', 'SOCOOPELA': 'DALOA', 'SOCOPADOU': 'DALOA', 
    'SOCOPAL SCOOPS': 'DALOA', 'SOCOPDAL SCOOPS': 'DALOA', 'CAFUVA': 'VAVOUA', 'COOP CA CAPLI': 'ZUENOULA',
    # Sud-Ouest
    'CABGB': 'SAN-PEDRO', 'CABID': 'SOUBRE', 'CABING': 'SOUBRE', 'CAC': 'SOUBRE', 
    'CADA': 'SASSANDRA', 'CADEDO': 'SOUBRE', 'CAL2B': 'SOUBRE', 'CAPL': 'SOUBRE', 
    'CAPO': 'SOUBRE', 'CATBK': 'SOUBRE', 'CJPK': 'SOUBRE', 'COOP CA ANZUE II': 'SOUBRE', 
    'COOP CA BIRBA': 'SAN-PEDRO', 'COOP CA COANI': 'SOUBRE', 'COOP CA COOPAA': 'SOUBRE', 
    'COOP JCAS': 'SOUBRE', 'COOP-CA CAGNAN': 'SOUBRE', 'COOP-CA COANGNA': 'SOUBRE', 
    'COOP-CA COOPABIN': 'SOUBRE', 'COOP-CA COOPADO': 'SOUBRE', 'COOP-CA NECAB': 'SOUBRE', 
    'COOP-CA-ABO': 'SOUBRE', 'COOPALBA': 'SOUBRE', 'COOPAOU': 'SOUBRE', 'COOPASM': 'SOUBRE', 
    'COOPAZEG': 'SOUBRE', 'CPSL': 'SOUBRE', 'ECAB': 'SOUBRE', 'ECAMOG': 'SOUBRE', 
    'ECEAGN COOP-CA': 'TABOU', 'ECOPAS': 'SOUBRE', 'ECSP': 'SAN-PEDRO', 'ECSP PURATOS': 'SAN-PEDRO', 
    'FLRI SOCAMA': 'SOUBRE', 'SCAACI': 'SOUBRE', 'SCAEG': 'SOUBRE', 'SCAEPGY': 'SOUBRE', 
    'SCAND': 'SOUBRE', 'SCAPD': 'SOUBRE', 'SCAPUD': 'SOUBRE', 'SCAS COOP-CA': 'SOUBRE', 
    'SCASOU': 'SOUBRE', 'SCO SACI': 'SOUBRE', 'SCOOP CAES': 'BONDOUKOU', 'SCOOPA CA': 'SAN-PEDRO', 
    'SCOOPAC': 'SOUBRE', 'SCOOPADJI': 'SOUBRE', 'SCOOPS AL': 'SOUBRE', 'SCOOPS COOP.A.SAM': 'SOUBRE', 
    'SCOOPS COOPAA': 'SOUBRE', 'SCOOPS SCAT 1': 'MEAGUI', 'SCOOPS SCSAG': 'TABOU', 
    'SCOOPS SNCC': 'SOUBRE', 'SCOOPS WEBE': 'SOUBRE', 'SCOOWEND': 'SOUBRE', 'SCSPA': 'SOUBRE', 
    'SCUW': 'SOUBRE', 'SO.CO.SA.DA': 'SOUBRE', 'SO.COA.MO': 'SOUBRE', 'SOCADJO': 'SOUBRE', 
    'SOCAG': 'SOUBRE', 'SOCAGNIPI': 'SOUBRE', 'SOCAGRI2': 'SOUBRE', 'SOCAJ': 'SOUBRE', 
    'SOCOPADOGBO': 'SOUBRE', 'SOCOPEK': 'SOUBRE', 'SOCOSOM': 'SOUBRE', 'UPAS': 'SOUBRE', 'CADESA': 'SOUBRE',
    # Others
    'CANK': 'DUEKOUE', 'CASODU': 'DUEKOUE', 'COOP CA KWS': 'DUEKOUE', 'COOP CA GCT': 'DUEKOUE', 
    'COOP TEEGA WENDE': 'DUEKOUE', 'SCOOPASG': 'DUEKOUE', 'SCOOPS AKY': 'DUEKOUE', 
    'SCOOPS BADEMAYA': 'DUEKOUE', 'SCOOPS EPG': 'DUEKOUE', 'SC2WK COOP CA': 'DUEKOUE', 
    'COOP-CA INCHALA': 'DUEKOUE', 'CABES': 'ABOISSO', 'CNAD': 'ABOISSO', 'COABIA': 'ADIAKE', 
    'COESAG': 'ABOISSO', 'COOPRAS': 'ABOISSO', 'COOPROYA': 'ABOISSO', 'ECAAF': 'ABOISSO', 
    'SCAK': 'ADZOPE', 'SCOOPS 3A': 'ABOISSO', 'SOCAEK': 'ABOISSO', 'SO.CC.NA': 'ABOISSO',
    'CABOHGA COOP CA': 'LAKOTA', 'CIPACCA': 'GAGNOA', 'CODERLACS': 'YAMOUSSOUKRO', 
    'COOP CA COPACOL': 'LAKOTA', 'COOPRADI': 'LAKOTA', 'ECAESB': 'TOUMODI', 'ECOOPAK': 'DIVO', 
    'SCOAWWASI': 'DIVO', 'SCOOPS ABOKA': 'DIVO', 'SCOOPS BAD': 'AGBOVILLE', 'SCOOPS YAT': 'TIASSALE', 
    'SOCABA': 'AGBOVILLE', 'SOCABA SCOOPS': 'AGBOVILLE', 'COOP CAES': 'BONDOUKOU', 
    'COOPABENKADI': 'BONDOUKOU', 'FLRI NANTEBESSOU': 'BONDOUKOU', 'CARET': 'DAOUKRO', 'SCAESG': 'BONGOUANOU',
}

# --- DICTIONARY C: Residuals / Sand Box / Embedded Locations ---
residual_fix_map = {
    'BMC VAVOUA': 'VAVOUA', 'SPAD GAGNOA': 'GAGNOA', 'ECO LAKOTA': 'LAKOTA',
    'SPAD GUIGLO': 'GUIGLO', 'BARRA GABIADJI': 'SAN-PEDRO', 'SCOOPS SCOEL BONGOUANOU': 'BONGOUANOU',
    'ESPOIR VAVOUA': 'VAVOUA', 'SCAW MAN': 'MAN', 'APM GAGNOA': 'GAGNOA',
    'COOPABE BOKASSO': 'BOUAFLE', 'CABID II': 'SOUBRE', 'SCAP-CC': 'MAN',
    'ECEPAG': 'GAGNOA', 'SOCBPI': 'BEOUMI', 'SOCAET2': 'MAN', 'CALTDV': 'DALOA',
    # Ghana / Foreign / Garbage
    'ASETENAPA': None, 'ASUNAFO': None, 'KUKUOM': None, 'DAKUA': None, 'ABOCFA': None,
    'ASANKRAGWA': None, 'TARKWA HUNI': None, 'ASSIN': None, 'ESCOPAG': None,
    'CDI FG': None, 'FARMER GROUP': None, 'FG': None, 'AAT': None, 'IIAP': None, 'HKF 7': None
}

# --- DICTIONARY D: Final Patch (Stubborn Coops) ---
final_patch_map = {
    'SCANDI WAREHOUSE': 'SOUBRE', 'SCAND-COOP CA': 'SOUBRE', 'COOP CA SCAND': 'SOUBRE',
    'SOCOAMO': 'SOUBRE', 'COOPALBA COOP-CA': 'SOUBRE', 'SOCONEL-SCOOPS': 'SOUBRE',
    'COOP CATBK': 'SOUBRE', 'SCAEPGY': 'SOUBRE', 'CABING': 'SOUBRE', 'SCSPA': 'SOUBRE',
    'SCOOPS COOP.A.SAM': 'SOUBRE', 'SCOOPNAS': 'SOUBRE', 'COOBADI': 'DALOA',
    'COOBADI COOP-CA': 'DALOA', 'COOPINA COOP-CA': 'DALOA', 'SCOOPS-AGRIOBIO': 'DALOA',
    'SOCAHI': 'DALOA', 'SOCOPADOU': 'DALOA', 'CAREBO': 'DALOA', 'CAPEDIG (PART OF ECOOKIM)': 'DALOA',
    'UCA': 'DALOA', 'ECAKOOG': 'LAKOTA', 'SCOOP ABOKA': 'DIVO', 'IQJ': 'VAVOUA',
    'SCOOPAVI': 'VAVOUA', 'COOPAGG': 'GUEYO', 'ECAPR': 'SINFRA', 'COOP-CA-ECAPR': 'SINFRA',
    'SOCAET2': 'MAN', 'BECIDA': 'ADZOPE', 'COOKADI': 'KANI', 'COOPAEEN COOP-CA': 'ABENGOUROU',
    'SCOOPRAZA COOP-CA': 'ABENGOUROU', 'CAEZ-COOP-CA': 'ABENGOUROU', 'COOP CA ABO': 'ABOISSO',
    'COOPRAMA-CA': 'ABOISSO', 'SCAND': 'SOUBRE', 'CAAA': 'ABENGOUROU', 'SOCOAMO COOP-CA': 'SOUBRE',
    'COOPAEEN': 'ABENGOUROU', 'COOPALBA': 'SOUBRE', 'SOCONPAYAT COOP-CA': 'YAKASSE-ATTOBROU',
    'SCAA CI': 'ABENGOUROU', 'COOPASM': 'SOUBRE', 'COOPRAS': 'ABOISSO'
}

# ==========================================
# 3. EXECUTION: APPLY LOGIC
# ==========================================

# 1. Move Misplaced Names
# (Rows where the Area Name is actually a Coop Name)
misplaced_coops = [k for k in manual_fix_map.keys() if k in df['DISCL_AREA_NAME'].unique()]
mask_misplaced = df['DISCL_AREA_NAME'].isin(misplaced_coops)
# Copy the area value to supplier abbreviation before we overwrite the area
df.loc[mask_misplaced, 'DISCL_SUPPLIER_ABRVNAME'] = df.loc[mask_misplaced, 'DISCL_AREA_NAME']

# 2. Apply Manual Fix Map
# (Fixes typos, sets broad regions to "", maps foreign to None)
print("Applying manual fixes...")
df['DISCL_AREA_NAME'] = df['DISCL_AREA_NAME'].replace(manual_fix_map)

# 3. Map Broad/Empty Areas using Aggressive Cleaned Name
# (This matches 'CAAA SAND BOX' to 'ABENGOUROU' via 'CAAA')
print("Mapping broad/missing areas via coop name...")
mask_missing = (df['DISCL_AREA_NAME'] == '') | (df['DISCL_AREA_NAME'].isna())
df.loc[mask_missing, 'DISCL_AREA_NAME'] = df.loc[mask_missing, 'CLEANED_RESIDUAL_NAME'].map(dict_broad_names)

# 4. Map Residuals (Sandboxes and Hidden Locations)
mask_missing = (df['DISCL_AREA_NAME'] == '') | (df['DISCL_AREA_NAME'].isna())
df.loc[mask_missing, 'DISCL_AREA_NAME'] = df.loc[mask_missing, 'CLEANED_RESIDUAL_NAME'].map(residual_fix_map)

# 5. Apply Final Patch (Stubborn Coops)
mask_missing = (df['DISCL_AREA_NAME'] == '') | (df['DISCL_AREA_NAME'].isna())
# Try mapping against the original ABRV for these specific leftovers
df.loc[mask_missing, 'DISCL_AREA_NAME'] = df.loc[mask_missing, 'DISCL_SUPPLIER_ABRVNAME'].map(final_patch_map)

# ==========================================
# 4. GEOCODING & SPATIAL JOIN
# ==========================================
print("Standardizing geography...")

# 1. Clean Area Name to match GeoJSON keys
df['DISCL_AREA_NAME_CLEAN'] = df['DISCL_AREA_NAME'].apply(clean_text)

# 2. Lookup GeoCodes
df['DISTRICT_GEOCODE'] = df['DISCL_AREA_NAME_CLEAN'].map(name_to_geocode_gdf)

# 3. Fallback: 2023 Reference Data
mask_no_code = df['DISTRICT_GEOCODE'].isna()
df.loc[mask_no_code, 'DISTRICT_GEOCODE'] = df.loc[mask_no_code, 'DISCL_SUPPLIER_ABRVNAME'].map(coop_to_code_2023)
df.loc[mask_no_code, 'DISCL_AREA_NAME_CLEAN'] = df.loc[mask_no_code, 'DISCL_SUPPLIER_ABRVNAME'].map(coop_to_name_2023)

# 4. Fallback: Spatial Join (Lat/Lon)
mask_needs_spatial = df['DISTRICT_GEOCODE'].isna() & df['DISCL_LATITUDE'].notna() & df['DISCL_LONGITUDE'].notna()

if mask_needs_spatial.sum() > 0:
    print(f"Running spatial join for {mask_needs_spatial.sum()} rows...")
    temp_gdf = gpd.GeoDataFrame(
        df.loc[mask_needs_spatial],
        geometry=gpd.points_from_xy(df.loc[mask_needs_spatial, 'DISCL_LONGITUDE'], 
                                    df.loc[mask_needs_spatial, 'DISCL_LATITUDE']),
        crs="EPSG:4326"
    )

    if gdf.crs != "EPSG:4326":
        gdf = gdf.to_crs("EPSG:4326")

    joined = gpd.sjoin(temp_gdf, gdf[['LVL_4_CODE', 'LVL_4_NAME_CLEAN', 'geometry']], how='left', predicate='within')
    joined = joined[~joined.index.duplicated(keep='first')]

    df.loc[joined.index, 'DISTRICT_GEOCODE'] = df.loc[joined.index, 'DISTRICT_GEOCODE'].fillna(joined['LVL_4_CODE'])
    df.loc[joined.index, 'DISCL_AREA_NAME_CLEAN'] = df.loc[joined.index, 'DISCL_AREA_NAME_CLEAN'].fillna(joined['LVL_4_NAME_CLEAN'])

# ==========================================
# 5. FINAL CLEANUP & DROP
# ==========================================

# Sync Name and Code one last time
df['DISCL_AREA_NAME_CLEAN'] = df['DISCL_AREA_NAME_CLEAN'].fillna(df['DISTRICT_GEOCODE'].map(geocode_to_name_gdf))
df['DISTRICT_GEOCODE'] = df['DISTRICT_GEOCODE'].fillna(df['DISCL_AREA_NAME_CLEAN'].map(name_to_geocode_gdf))

# Set the final Area Name column
df['DISCL_AREA_NAME'] = df['DISCL_AREA_NAME_CLEAN']

# FINAL DROP
# Only drop rows if we have failed to find a location AND the explicit mapping identified them as None/Garbage
initial_len = len(df)
df = df.dropna(subset=['DISCL_AREA_NAME', 'DISTRICT_GEOCODE'], how='all')

print("--- Final Status ---")
print(f"Total Rows: {len(df)} (Dropped {initial_len - len(df)} rows)")
print("Missing DISCL_AREA_NAME:", df['DISCL_AREA_NAME'].isna().sum())
print("Missing DISTRICT_GEOCODE:", df['DISTRICT_GEOCODE'].isna().sum())

if df['DISTRICT_GEOCODE'].isna().sum() > 0:
    print("\nStill missing codes for:")
    print(df[df['DISTRICT_GEOCODE'].isna()]['DISCL_SUPPLIER_ABRVNAME'].unique())

# Show sample
print(df[['DISCL_SUPPLIER_FULLNAME', 'DISCL_AREA_NAME', 'DISTRICT_GEOCODE']].head(10))
Loading datasets...


/var/folders/3r/r9b5rj5s3pb069rsg5zh_1640000gn/T/ipykernel_30332/3729952901.py:17: DtypeWarning: Columns (6,8,9,10,11,19,23,24,27,31,32,34) have mixed types. Specify dtype option on import or set low_memory=False.
  df_2023 = pd.read_csv(PATH_2023, sep=';')


Missing cleaned names after imputing: 12
Initial text cleaning...
Building dictionaries...
Applying manual fixes...
Mapping broad/missing areas via coop name...
Standardizing geography...
Running spatial join for 674 rows...
--- Final Status ---
Total Rows: 1776 (Dropped 200 rows)
Missing DISCL_AREA_NAME: 0
Missing DISTRICT_GEOCODE: 0
                             DISCL_SUPPLIER_FULLNAME DISCL_AREA_NAME  \
0  SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRAT...     AGNIBILEKRO   
1  SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRAT...      ABENGOUROU   
2  SOCIETE COOPERATIVE AGRICOLE AHUANOU D'ARRAH A...      BONGOUANOU   
3  SOCIETE COOPERATIVE AGRICOLE GUELANIN AVEC CON...         BANGOLO   
4  SOCIETE COOPERATIVE AGRICOLE IMAAH, SOCIETE CO...            DIVO   
5  SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRAT...          SINFRA   
6               SOCIETE COOPERATIVE SIMPLIFIÉE RASSO       AGBOVILLE   
7  SOCIETE COOPERATIVE AGRICOLE NOUVELLE DE DJOUR...           TABOU   
8       SOCIETE COOPERATIVE AGRICOLE N'ZASSA DE DIVO            DIVO   
9     SOCIETE COOPERATIVE DES AGRICULTEURS DE WONSEA          SOUBRE

  DISTRICT_GEOCODE  
0       CI-3.1.2_1  
1       CI-3.1.1_1  
2       CI-6.3.2_1  
3       CI-8.2.1_1  
4       CI-5.2.1_1  
5       CI-9.2.2_1  
6       CI-7.1.1_1  
7       CI-2.3.2_1  
8       CI-5.2.1_1  
9       CI-2.2.5_1
df.to_csv('2024_civ_coops_with_geocodes.csv', index=False)

02 Jan 2026 Check my use of TRADER vs COMPANY against CAM v4 AND FILL IN MISSING COMPANY NAMES

2024_ritter_sport.csv - parsing probably didn't work properly

Resolved 2024_lindt_sprungli.csv - first lines of my /Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/q4_2025/clean/2024_civ_coops_with_geocodes.csv 2024_transparance.csv - have now filled in name manually

# Fix Lindt Sprungli disclosures
import pandas as pd

df = pd.read_csv("/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/q4_2025/clean/2024_civ_coops_with_geocodes.csv")

df.loc[0:47, 'DISCL_TRADER_NAME'] = df.loc[0:47, 'COMPANY']
df.loc[0:47, 'COMPANY'] = "LINDT SPRUNGLI"

print(df[['COMPANY', 'DISCL_TRADER_NAME']].head())

df.to_csv('2024_civ_coops_with_geocodes.csv', index=False)
          COMPANY   DISCL_TRADER_NAME
0  LINDT SPRUNGLI  BARRY CALLEBAUT AG
1  LINDT SPRUNGLI  BARRY CALLEBAUT AG
2  LINDT SPRUNGLI  BARRY CALLEBAUT AG
3  LINDT SPRUNGLI  BARRY CALLEBAUT AG
4  LINDT SPRUNGLI  BARRY CALLEBAUT AG
# Fix Barry Callebut disclosures 
import pandas as pd

df = pd.read_csv("/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/q4_2025/clean/2024_civ_coops_with_geocodes.csv")

df.loc[47:363, 'DISCL_TRADER_NAME'] = "BARRY CALLEBAUT AG"
df.loc[47:363, 'COMPANY'] = "BARRY CALLEBAUT AG"

df.to_csv('2024_civ_coops_with_geocodes.csv', index=False)
# Fix Ritter Sport disclosures
df = pd.read_csv("/Users/niamhfrench/Library/CloudStorage/OneDrive-SEI/Documents/TRASE/trase/data/cote_divoire/cocoa/logistics/q4_2025/clean/2024_civ_coops_with_geocodes.csv")

df.loc[551:560, 'DISCL_VOLUMES'] = None
df.loc[551:560, 'DISCL_YEAR'] = 2024
df.loc[551:560, 'COMPANY'] = "ALFRED RITTER"
df.loc[551:560, 'DISCL_LATITUDE'] = None
df.loc[551:560, 'DISCL_NUMBER_FARMERS'] = None
df.loc[551:553, 'DISCL_TRADER_NAME'] = "CEMOI"
df.loc[553:557, 'DISCL_TRADER_NAME'] = "SUSCOM"
df.loc[557:560, 'DISCL_TRADER_NAME'] = "CARGILL"
df.to_csv('2024_civ_coops_with_geocodes.csv', index=False)

02 Jan 2026 Change colum names to match CAM_V4


Make all years 2024


TRADER NAME FIXES

# --- CLEAN TRADER NAME ----------------------------------
# This is necessary to eventually match with custom data (and eases inspection for now) 
#print(sorted(df['DISCL_TRADER_NAME']))
#print(sorted(df['COMPANY']))

# We clean names, and identify which are actual cocoa traders manually.

# **************** THIS IS NOT ONLY FOR SEI-PCS PURPOSE SO LEAVE IT HERE ***********************
# it is used to better infer the coop-level number of farmers here below, a strictly CAM-purpose 
# - and it just makes the trader name variable more meaningful for external CAM

# CLEANING 

## TRADER_NAME CREATED HERE
df['TRADER_NAME'] = df['DISCL_TRADER_NAME']

# Preliminary, minor cleaning of rows that have several traders separated by / (which creates one row in this case)
# There is only one case, "Blommer/Olam", and in this case the trader is OLAM. 
df.loc[df['TRADER_NAME'] == "Blommer/Olam", 'TRADER_NAME'] = "OLAM"
# Manual edit of info from CAM V3
# Remove from the company variable names of companies that never disclosed and are there spuriously
non_disclosing_companies = ["COCOASOURCE", "Cocoasource"]

# View rows where COMPANY is in non_disclosing_companies
print(df[df['COMPANY'].isin(non_disclosing_companies)])

# Move Cocoasource to the trader name (only for CAM V3 rows)
df.loc[(df['COMPANY'] == "COCOASOURCE") & (df['IS_CAM_V3']), 'TRADER_NAME'] = "COCOASOURCE"

# Remove Cocoasource from the company variable (set to NaN for CAM V3 rows)
import numpy as np
df.loc[df['COMPANY'].isin(non_disclosing_companies) & df['IS_CAM_V3'], 'COMPANY'] = np.nan

# Make sure Cocoasource is the trader for Tony's (only for CAM V3 rows)
df.loc[df['COMPANY'].str.contains("TONY", case=False, na=False) & df['IS_CAM_V3'], 'TRADER_NAME'] = "COCOASOURCE"
Empty DataFrame
Columns: [DISCL_TRADER_NAME, DISCL_SUPPLIER_ABRVNAME, DISCL_AREA_NAME, DISCL_CERTIFICATION_NAME, DISCL_NUMBER_FARMERS, DISCL_LONGITUDE, DISCL_LATITUDE, DISCL_COUNTRY_NAME, DISCL_YEAR, COMPANY, DISCL_SUPPLIER_FULLNAME, DISCL_VOLUMES, DISCL_VOLUMES_UNIT, DISCL_CERTIFICATION_PCT, DISTRICT_GEOCODE, CAM_BUYERS, IS_CAM_V3, IS_JRC, JRC_BUYER_ID, DISCL_SUPPLIER_TYPE, DISCL_SUPPLIER_ABRVNAME_CLEANED, DISCL_SUPPLIER_FULLNAME_CLEANED, TRADER_NAME]
Index: []

[0 rows x 23 columns]
# Remove names of traders identified as making disclosures but which volumes spotted in customs data do not reflect total sourcing from Ivory Coast.
# Note: this information is still available in DISCL_TRADER_NAME!

# AND REMOVE ECOOKIM AS WELL: treat Ecookim as a source of information, not as a trader in Trase.
# Remove COMPANY values (in CAM V4) for those identified as making disclosures, but for which volumes in customs data do not reflect total sourcing.

non_trading_companies = [
    "ALBERT HEIJN", "ALFRED RITTER", "ALTER ECO",
    "BLOMMER", "COLRUYT",
    "ECOOKIM",
    "FERRERO", "HERSHEY",
    "MARS", "MONDELEZ", "NESTLE", "PURATOS", "RAINFOREST ALLIANCE",
    "TONY'S CHOCOLONELY", "VALRHONA"
]

# Remove these companies from the COMPANY column for CAM V4 rows
import numpy as np
df.loc[df['COMPANY'].isin(non_trading_companies) & df['IS_CAM_V3'], 'COMPANY'] = np.nan

# --- Code to check their volumes in customs data (commented out, for reference) ---
# for pot_trad in sorted(df['COMPANY'].dropna().unique()):
#     vol_tonnes = trade_data[
#         (trade_data['EXPORTER_GROUP_CLEAN'] == pot_trad) | (trade_data['IMPORTER_GROUP_CLEAN'] == pot_trad)
#     ]['BEAN_EQUIVALENT_VOLUME'].sum() / 1000
#     print(f"{pot_trad}: {vol_tonnes} MT")
# Companies found to have 0 volume are not traders. Then, it's case investigation.
# Blommer & Hershey, see above.
# Ferrero sources more than 200k MT in total, so it's unlikely that the 1626.6 MT found here in customs data reflect all its sourcing.
# Ethiquable: LEAVE IT AS A TRADER, as it is actually possible that they source 150 MT, since they say they sourced 40 MT in 2014.
# Note: Ethiquable buys from ECOOKIM in customs data, so it won't appear in sankey eventually.
#df.to_csv('2024_coops.csv', index=False)

Valentin's R code

# This function handles cases where a full name and an abbreviated name are given in the abrv name variable.
fn_clean_abrvname1 <- function(col_name){
  case_when(
    grepl("UNITE COOPERATIVE AGRICOLE DE DANANE", col_name) ~ "COOP UDAN",
    grepl("COOPERATIVE AGRICOLE BACON ESPOIR", col_name) ~ "CABES",
    grepl("COOPERATIVE AGRICOLE ABOTRE DE NIABLE", col_name) ~ "COAANI",
    grepl("COOPERATIVE AGRICOLE BENKADI", col_name) ~ "COOPABENKADI",
    grepl("COOPERATIVE AGRICOLE D'AGNANFOUTOU", col_name) ~ "COESAG",
    grepl("COOPERATIVE AGRICOLE ZEMESS TAABA DE GBABAM", col_name) ~ "COOPAZEG",
    grepl("COOPERATIVE DES PRODUCTEURS DE YAKASSE ATTOBROU", col_name) ~ "COOPROYA",
    grepl("SOCIETE AGRICOLE BINKADI DE BROUDOUGOU PENDA CA", col_name) ~ "SOCABB",
    grepl("SCOOPAO SOCIETE COOPERATIVE DES AGRICULTEURS DE PETIT OUAGA", col_name) ~ "SCOOPAO",
    grepl("SOCIETE COOPERATIVE SIMPLIFIEE AGRICOLE KAMBONOU DE ARRAH", col_name) ~ "SCOAKA",
    grepl("SOCIETE COOPERATIVE ESPERENCE DE KPELEKRO", col_name) ~ "SOCAEK",
    grepl("SOCIETE COOPERATIVE AVEC CONSEIL D'ADMINISTRATION ENTENTE DE SEGUELA", col_name) ~ "COOP CA ES",
    grepl("COOPERATIVE DES PRODUCTEURS AGRICOLES DE NIABLE", col_name) ~ "COOP CA PAN",
    grepl("COOPERATIVE YEYONIAN DU CANTON ANIASSUE", col_name) ~ "COOPYCA",
    grepl("SOCIETE COOPERATIVE AGRICOLE DE GNATO AVEC CONSEIL D'ADMINISTRATION", col_name) ~ "SOCAG",
    grepl("SOCIETE COOPERATIVE AGRICOLE DE BAYOTA", col_name) ~ "SOCABA COOP CA",
    grepl("SPAD GAGNOA", col_name) ~ "SPAD GAGNOA", # ETG adds the name of the manufacturer to some coop names. 
    grepl("SCAT I|SCAT 1", col_name) ~ "SCAT 1",
    grepl("\\(CA\\)$", col_name) ~ " CA ",
    grepl("\\(COOP\\)$", col_name) ~ " COOP ",
    grepl("\\(SCOOP\\)$", col_name) ~ " SCOOP ",
    TRUE ~ col_name
  )
}

# This function removes some common characters used in abreviated coop names
fn_clean_abrvname2 <- function(col_name){
  cleaned_col <- str_trans(str_trim(col_name))
  cleaned_col <- gsub(pattern = "\\.|[(]|[)]| WAREHOUSE$", "", cleaned_col)
  cleaned_col <- gsub(pattern = "\n|\\_|\\/|-", " ", cleaned_col)
  cleaned_col <- gsub(pattern = "Ô", "O", cleaned_col)
  # cleaned_col <- gsub(pattern = "A N E K", "ANEK", cleaned_col) 

  cleaned_col <- str_squish(cleaned_col)

  return(cleaned_col)
}

# This function removes generic terms like CA COOP and SCOOPS
fn_clean_abrvname3 <- function(col_name){
  gsub(pattern = "COOP CA | COOP CA$|COOP | COOP$|SCOOP | SCOOP$|SCOOPS | SCOOPS$", 
       replacement = "", 
       x = col_name)
}


fn_clean_fullname <- function(col_name){
  fn <- gsub(pattern = "SOCIETE COOPERATIVE |STE COOP |COPERATIVE |COOPRATIVE |SOCIETE AGRICOLE COOPERATIVE |ENTREPRISE COOPERATIVE |ENTREPRISE AGRICOLE COOPERATIVE |ENTREP COOPERA ", 
             replacement = "COOPERATIVE ", 
             x = col_name)
  fn <- gsub(pattern = "DU CAFE&CACAO|DU CAFE & CACAO|DU CAFE& CACAO|DU CAFE &CACAO|DE CAFE&CACAO|DE CAFE & CACAO|DE CAFE& CACAO|DE CAFE &CACAO|DU CAFE-CACAO|DU CAFE - CACAO|DU CAFE- CACAO|DU CAFE -CACAO|DE CAFE-CACAO|DE CAFE - CACAO|DE CAFE- CACAO|DE CAFE- CACAO|CAFE&CACAO|CAFE & CACAO|CAFE& CACAO|CAFE &CACAO|CAFE-CACAO|CAFE - CACAO|CAFE- CACAO|CAFE -CACAO|DU CAFE ET DU CACAO|DE CAFE ET DE CACAO|CAFE ET DU CACAO|CAFE ET DE CACAO|DU CAFE ET CACAO|DE CAFE ET CACAO|CAFE ET CACAO|DU CAFE CACAO|DE CAFE CACAO|CAFE CACAO|CAFECACAO|DU CAFE COCOA",  # hopefully, the latter is the only case of "COCOA" instead of "CACAO" 
             replacement = "STD_CAFE_CACAO_STD", 
             x = fn)
  # Move it back to something more readable, that's just a displaying matter
  fn <- gsub(pattern = "STD_CAFE_CACAO_STD",
             replacement = "CAFE ET CACAO", 
             x = fn)
  return(fn)
}

# and some manual changes where some eyeballing makes us realize that two full names are actually the same coop.
# /!\ these apply to post fn_clean_fullname strings /!\ 
fn_clean_fullname_manual <- function(col_name){
  case_when(
    grepl("COOPERATIVE AGRICOLE SOLIDARITE DE BLOLEQUIN", col_name) ~ "ENTREPRISE COOPERATIVE AGRICOLE DE BLOLEQUIN",
    grepl("COOPERATIVE POUR L'AMELIORAT DU REVENU DU PLANTEUR DE CI", col_name) ~ "COOPERATIVE POUR L'AMELIORATION DU REVENU DU PLANTEUR", 
    grepl("COOPERATIVE SABABOUGNOUMAN DAGADJI", col_name) ~ "COOPERATIVE SABABOUGNOUMAN DE DAGADJI",
    grepl("ROBERT", col_name) & grepl("PORTE", col_name) ~ "ENTREPRISE COOPERATIVE AGRICOLE DES PRODUCTEURS CAFE ET CACAO DE ROBERT-PORTE", # note that "CAFE ET CACAO" is to match the output of the above function
    grepl("MAN EDI ANOUANZE", col_name) ~ "SOCIETE COOPERATIVE AGRICOLE MAN EDI ANOUANZE",
    TRUE ~ col_name
  )
}
# --- CLEAN TRADER NAME ----------------------------------
# This is necessary to eventually match with custom data (and eases inspection for now) 
unique(civ$DISCL_TRADER_NAME) %>% sort()
unique(civ$COMPANY) %>% sort()

# We clean names, and identify which are actual cocoa traders manually. 

# **************** THIS IS NOT ONLY FOR SEI-PCS PURPOSE SO LEAVE IT HERE ***********************
# it is used to better infer the coop-level number of farmers here below, a strictly CAM-purpose 
# - and it just makes the trader name variable more meaningful for external CAM

# CLEANING 

## TRADER_NAME CREATED HERE
civ <- 
  civ %>%
  mutate(TRADER_NAME = DISCL_TRADER_NAME)

# Preliminary, minor cleaning of rows that have several traders separated by / (which creates one row in this case)
# There is only one case, "Blommer/Olam", and in this case the trader is OLAM. 
civ <- 
  civ %>% 
  mutate(TRADER_NAME = case_when(
    TRADER_NAME == "Blommer/Olam" ~ "OLAM", 
    TRUE ~ TRADER_NAME
  )
  )
# OTHERWISE, BLOMMER IS IN COMPANY VARIABLE A LOT (COMING FROM THE INITIAL CAM)
# BUT IT IS NOT A TRADER, ALTHOUGH IT SAYS IT SOURCES DIRECTLY FROM COOPS, IT SOURCES EVERYTHING FROM OLAM
# https://www.idhsustainabletrade.com/publication/flourish/olam-blommer-hershey/
# WHICH IS CONFIRMED AS IT BARELY APPEARS IN CUSTOMS DATA

# Manual edit of info from CAM V3 
# --> Remove from the company variable (which is supposed to give the name of companies that did disclose something once) 
# names of companies that never disclosed and are there spuriously, because of the CAM v3 (checked case by case). 
non_disclosing_companies <- c("COCOASOURCE")
civ %>% filter(COMPANY %in% non_disclosing_companies) %>% View()
# Note: There are also  Albert Heijn, Blommer and Touton but these did make disclosures (although we didn't collect them). 
# So it's possible that the CAM v3 has the info from these disclosures
# For Albert Heijn, it's a manufacturer sourcing from SOCOOPACDI, in collaboration with Tony's. Leave it since they do disclose this themselves. https://static.ah.nl/binaries/ah/content/assets/ah-nl/core/about/duurzaamheid/duurzaamheidsverslag-mensenrechten.pdf
# For Cocoasource it's different: it is a trader, and the info doesn't come from their own disclosures but from Tony and RA. 
civ <- 
  civ %>% 
  mutate(
    # Move Cocoasource to the trader name (leave the possibility that non_disclosing_companies contains non-trading companies)
    TRADER_NAME = case_when(
      COMPANY == "COCOASOURCE" & IS_CAM_V3 ~ "COCOASOURCE", 
      TRUE ~ TRADER_NAME
    ),
    # Remove it from the company var. 
    COMPANY = case_when(
      COMPANY %in% non_disclosing_companies & IS_CAM_V3 ~ NA, 
      TRUE ~ COMPANY
    ), 
    # Make sure it is the trader of Tony
    TRADER_NAME = case_when(
      grepl("TONY", COMPANY, ignore.case = TRUE) & IS_CAM_V3 ~ "COCOASOURCE", 
      TRUE ~ TRADER_NAME
    )
  )
# IS_CAM_V3 conditions makes sure that potential future disclosures by cocoasource are not affected. 



# Instead, we remove names of traders identified as making disclosures but which volumes spotted in customs data do not reflect total sourcing from Ivory Coast. 
# Note this information is still available in DISCL_TRADER_NAME ! 

# AND REMOVE ECOOKIM AS WELL: we don't want to count it as a disclosing trader because flows from 
# these cooperatives can be the same as those disclosed by other companies. In other words, we 
# treat Ecookim as a source of information for the CAM, like manufacturers and Rainforest Alliance, 
# and not as a trader in the sense that we want to understand it in Trase.  
# this is to remove COMPANY values (in CAM V4) for those identified as making disclosures, 
# but for which volumes spotted in customs data do not reflect total sourcing from Ivory Coast.  
non_trading_companies <- 
  c("ALBERT HEIJN", "ALFRED RITTER", "ALTER ECO", 
    "BLOMMER", "COLRUYT", 
    "ECOOKIM", 
    "FERRERO",  "HERSHEY", 
    "MARS", "MONDELEZ", "NESTLE", "PURATOS", "RAINFOREST ALLIANCE", 
    "TONY'S CHOCOLONELY", "VALRHONA")
# # Code to check their volumes in cd (read trade_data from DATA_FOR_SEIPCS_*)
# for(pot_trad in sort(unique(civ$COMPANY))){
#   vol_tonnes <- trade_data %>% filter(EXPORTER_GROUP_CLEAN==pot_trad | IMPORTER_GROUP_CLEAN==pot_trad) %>% 
#     pull(BEAN_EQUIVALENT_VOLUME) %>% sum() / 1000  
#   
#   print(paste0(pot_trad, ":", vol_tonnes, " MT"))
# }
# Companies found to have 0 volume, it's clear they are no traders. Then, it's case investigation: 
# Blommer & Hershey, see above 
# Ferrero sources more than 200 k MT in total, so it's unlikely that the 1626.6 MT found here in cd reflect all its sourcing.         
# Ethiquable: LEAVE IT AS A TRADER, as it is actually possible that they source 150 MT, since they say they sourced 40 MT in 2014 https://www.ethiquable.coop/fiche-producteur/sceb-commerce-equitable-cote-divoire-cacao
# Note: but Ethiquable buys from ECOOKIM actually in customs data, so it won"t appear in sankey eventually