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