meridian.data.load.DataFrameDataLoader

Lit les données d'un Pandas DataFrame.

Hérite de : InputDataLoader

Cette classe lit les données d'entrée d'un Pandas DataFrame. L'attribut coord_to_columns stocke un mappage entre les coordonnées InputData cibles et noms de tableaux et les noms de colonnes DataFrame, s'ils sont différents. Les champs sont les suivants :

  • geo, time, kpi, revenue_per_kpi, population (colonne unique)
  • controls (plusieurs colonnes)
  • (1) media, media_spend (plusieurs colonnes)
  • (2) reach, frequency, rf_spend (plusieurs colonnes)
  • non_media_treatments (plusieurs colonnes, facultatif)
  • organic_media (plusieurs colonnes, facultatif)
  • organic_reach, organic_frequency (plusieurs colonnes, facultatif)

Le DataFrame doit inclure (1) ou (2), mais pas forcément les deux. De plus, chaque canal média doit apparaître dans (1) ou (2), mais pas dans les deux.

Remarques :

  • Les valeurs des colonnes de date doivent être au format aaaa-mm-jj.
  • Dans un modèle national, geo et population sont facultatifs. Si la population est indiquée, elle est réinitialisée sur la valeur par défaut 1.0.
  • Si des données media sont fournies, media_to_channel et media_spend_to_channel sont obligatoires. Si des données reach et frequency sont fournies, reach_to_channel, frequency_to_channel et rf_spend_to_channel sont obligatoires.
  • Si des données organic_reach et organic_frequency sont fournies, organic_reach_to_channel et organic_frequency_to_channel sont obligatoires.

Exemple :

# df = [...]
coord_to_columns = CoordToColumns(
  geo='dmas',
  time='dates',
  kpi='conversions',
  revenue_per_kpi='revenue_per_conversions',
  controls=['control_income'],
  population='populations',
  media=['impressions_tv', 'impressions_fb', 'impressions_search'],
  media_spend=['spend_tv', 'spend_fb', 'spend_search'],
  reach=['reach_yt'],
  frequency=['frequency_yt'],
  rf_spend=['rf_spend_yt'],
  non_media_treatments=['price', 'discount']
  organic_media=['organic_impressions_blog'],
  organic_reach=['organic_reach_newsletter'],
  organic_frequency=['organic_frequency_newsletter'],
)
media_to_channel = {
    'impressions_tv': 'tv',
    'impressions_fb': 'fb',
    'impressions_search': 'search',
}
media_spend_to_channel = {
    'spend_tv': 'tv', 'spend_fb': 'fb', 'spend_search': 'search'
}
reach_to_channel = {'reach_yt': 'yt'}
frequency_to_channel = {'frequency_yt': 'yt'}
rf_spend_to_channel = {'rf_spend_yt': 'yt'}
organic_reach_to_channel = {'organic_reach_newsletter': 'newsletter'}
organic_frequency_to_channel = {'organic_frequency_newsletter': 'newsletter'}

data_loader = DataFrameDataLoader(
    df=df,
    coord_to_columns=coord_to_columns,
    kpi_type='non-revenue',
    media_to_channel=media_to_channel,
    media_spend_to_channel=media_spend_to_channel,
    reach_to_channel=reach_to_channel,
    frequency_to_channel=frequency_to_channel,
    rf_spend_to_channel=rf_spend_to_channel,
    organic_reach_to_channel=organic_reach_to_channel,
    organic_frequency_to_channel=organic_frequency_to_channel,
)
data = data_loader.load()

df Objet pd.DataFrame à partir duquel la lecture doit être effectuée. L'une des conditions suivantes est requise :

  • Il n'y a pas de valeurs manquantes dans le DataFrame.
  • Quel que soit le nombre de périodes initiales, il n'y a que des données média et des valeurs manquantes dans toutes les colonnes de données non média (kpi, revenue_per_kpi, media_spend, controls et population).
coord_to_columns Objet CoordToColumns dont les champs sont les coordonnées souhaitées des InputData et les valeurs sont les noms actuels des colonnes (ou des listes de colonnes) dans le DataFrame. Exemple :
coord_to_columns = CoordToColumns(
    geo='dmas',
    time='dates',
    kpi='conversions',
    revenue_per_kpi='revenue_per_conversions',
    media=['impressions_tv', 'impressions_yt', 'impressions_search'],
    spend=['spend_tv', 'spend_yt', 'spend_search'],
    controls=['control_income'],
    population=population,
)

kpi_type Chaîne indiquant si le KPI est du type 'revenue' ou 'non-revenue'. Lorsque kpi_type est défini sur 'non-revenue' et que revenue_per_kpi existe, la calibration du ROI est utilisée et l'analyse est exécutée sur les revenus. Lorsque revenue_per_kpi n'existe pas pour le même kpi_type, la calibration personnalisée du ROI est utilisée et l'analyse est exécutée sur le KPI.
media_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données media dans le DataFrame, et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données media_spend. Exemple :

media_to_channel = {'media_tv': 'tv', 'media_yt': 'yt', 'media_fb': 'fb'}

media_spend_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données media_spend dans le DataFrame et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données media. Exemple :

media_spend_to_channel = {
    'spend_tv': 'tv', 'spend_yt': 'yt', 'spend_fb': 'fb'
}

reach_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données reach dans le DataFrame, et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données rf_spend. Exemple :

reach_to_channel = {'reach_tv': 'tv', 'reach_yt': 'yt', 'reach_fb': 'fb'}

frequency_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données frequency dans le DataFrame et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données rf_spend. Exemple :

frequency_to_channel = {
    'frequency_tv': 'tv', 'frequency_yt': 'yt', 'frequency_fb': 'fb'
}

rf_spend_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données rf_spend dans le DataFrame, et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données reach et frequency. Exemple :

rf_spend_to_channel = {
    'rf_spend_tv': 'tv', 'rf_spend_yt': 'yt', 'rf_spend_fb': 'fb'
}

organic_reach_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données organic_reach dans le DataFrame et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données organic_frequency. Exemple :

organic_reach_to_channel = {
    'organic_reach_newsletter': 'newsletter',
}

organic_frequency_to_channel Dictionnaire dont les clés sont les noms de colonnes réels des données organic_frequency dans le DataFrame et dont les valeurs sont les noms de canaux souhaités. Elles sont identiques à celles des données organic_reach. Exemple :

organic_frequency_to_channel = {
    'organic_frequency_newsletter': 'newsletter',
}

Méthodes

load

Afficher la source

Lit les données à partir d'un DataFrame et renvoie un objet InputData.

__eq__

Renvoie self==value.

frequency_to_channel None
media_spend_to_channel None
media_to_channel None
organic_frequency_to_channel None
organic_reach_to_channel None
reach_to_channel None
rf_spend_to_channel None