<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://indywiki.fr/index.php?action=history&amp;feed=atom&amp;title=CompteurVSNolimit</id>
	<title>CompteurVSNolimit - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://indywiki.fr/index.php?action=history&amp;feed=atom&amp;title=CompteurVSNolimit"/>
	<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=CompteurVSNolimit&amp;action=history"/>
	<updated>2026-05-12T22:55:35Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://indywiki.fr/index.php?title=CompteurVSNolimit&amp;diff=3453&amp;oldid=prev</id>
		<title>Anthony : Page créée avec « &lt;pre&gt; import os import pandas as pd  # Obtenir le chemin absolu du répertoire courant du script repertoire_courant = os.path.dirname(os.path.abspath(__file__))  # Chemin vers le répertoire &quot;Data&quot; chemin_data = os.path.join(repertoire_courant, &quot;Data&quot;)  # Chemin vers le répertoire &quot;result&quot; chemin_result = os.path.join(repertoire_courant, &quot;Result&quot;)  # Vérifier si le répertoire &quot;result&quot; existe, sinon le créer if not os.path.exists(chemin_result):     os.makedir... »</title>
		<link rel="alternate" type="text/html" href="https://indywiki.fr/index.php?title=CompteurVSNolimit&amp;diff=3453&amp;oldid=prev"/>
		<updated>2023-11-10T15:07:11Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « &amp;lt;pre&amp;gt; import os import pandas as pd  # Obtenir le chemin absolu du répertoire courant du script repertoire_courant = os.path.dirname(os.path.abspath(__file__))  # Chemin vers le répertoire &amp;quot;Data&amp;quot; chemin_data = os.path.join(repertoire_courant, &amp;quot;Data&amp;quot;)  # Chemin vers le répertoire &amp;quot;result&amp;quot; chemin_result = os.path.join(repertoire_courant, &amp;quot;Result&amp;quot;)  # Vérifier si le répertoire &amp;quot;result&amp;quot; existe, sinon le créer if not os.path.exists(chemin_result):     os.makedir... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
# Obtenir le chemin absolu du répertoire courant du script&lt;br /&gt;
repertoire_courant = os.path.dirname(os.path.abspath(__file__))&lt;br /&gt;
&lt;br /&gt;
# Chemin vers le répertoire &amp;quot;Data&amp;quot;&lt;br /&gt;
chemin_data = os.path.join(repertoire_courant, &amp;quot;Data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Chemin vers le répertoire &amp;quot;result&amp;quot;&lt;br /&gt;
chemin_result = os.path.join(repertoire_courant, &amp;quot;Result&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Vérifier si le répertoire &amp;quot;result&amp;quot; existe, sinon le créer&lt;br /&gt;
if not os.path.exists(chemin_result):&lt;br /&gt;
    os.makedirs(chemin_result)&lt;br /&gt;
&lt;br /&gt;
# Obtenir la liste des fichiers dans le répertoire &amp;quot;Data&amp;quot;&lt;br /&gt;
fichiers_dans_repertoire = os.listdir(chemin_data)&lt;br /&gt;
&lt;br /&gt;
# Parcourir tous les fichiers pour trouver les fichiers CSV&lt;br /&gt;
for nom_fichier_csv in fichiers_dans_repertoire:&lt;br /&gt;
    if nom_fichier_csv.lower().endswith(&amp;#039;.csv&amp;#039;):&lt;br /&gt;
        chemin_complet_csv = os.path.join(chemin_data, nom_fichier_csv)&lt;br /&gt;
&lt;br /&gt;
        # Charger le fichier dans un DataFrame&lt;br /&gt;
        df = pd.read_csv(chemin_complet_csv, sep=&amp;#039;;&amp;#039;, encoding=&amp;#039;utf-8&amp;#039;)  # Utilisez le séparateur &amp;#039;;&amp;#039; pour les colonnes&lt;br /&gt;
        print(&amp;quot;Chargement du fichier CDR.csv terminé.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Filtrer les lignes avec le &amp;quot;Type&amp;quot; contenant &amp;quot;Abonnement périodique&amp;quot; et le &amp;quot;Produit&amp;quot; étant &amp;quot;Appel(s) simu(s) SIP - Compteur NPV&amp;quot;&lt;br /&gt;
        filtered_df = df[&lt;br /&gt;
            (&lt;br /&gt;
                (df[&amp;#039;Type&amp;#039;].str.contains(&amp;#039;CDR&amp;#039;)) |&lt;br /&gt;
                (&lt;br /&gt;
                    (df[&amp;#039;Type&amp;#039;] == &amp;#039;Abonnement périodique&amp;#039;) &amp;amp;&lt;br /&gt;
                    (&lt;br /&gt;
                        (df[&amp;#039;Produit&amp;#039;] == &amp;#039;Appel(s) simu(s) SIP - Compteur NPV&amp;#039;) |&lt;br /&gt;
                        (df[&amp;#039;Produit&amp;#039;] == &amp;#039;Appel(s) simu(s) SIP - Illimité fixes, mobiles et inter NPV&amp;#039;)&lt;br /&gt;
                    )&lt;br /&gt;
                )&lt;br /&gt;
            )&lt;br /&gt;
        ]&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Filtrage des données terminé.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Regrouper les données par &amp;quot;Client final&amp;quot;&lt;br /&gt;
        grouped = filtered_df.groupby(&amp;#039;Client final&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        # Initialiser les listes pour les colonnes du nouveau fichier CSV&lt;br /&gt;
        Client = []&lt;br /&gt;
        Type_Cli = []&lt;br /&gt;
        Cout_cpteur = []&lt;br /&gt;
        Cout_illim = []&lt;br /&gt;
        Marge = []&lt;br /&gt;
        ProgressionPour100 = []&lt;br /&gt;
        NbCanaux = []&lt;br /&gt;
&lt;br /&gt;
        # Parcourir les clients avec le produit et calculer les valeurs pour chaque client&lt;br /&gt;
        for client, group in grouped:&lt;br /&gt;
            # On vérifie si le client est au compteur ou en illimité&lt;br /&gt;
            lignes_compteur = group[group[&amp;#039;Produit&amp;#039;] == &amp;#039;Appel(s) simu(s) SIP - Compteur NPV&amp;#039;]&lt;br /&gt;
            lignes_illi = group[group[&amp;#039;Produit&amp;#039;] == &amp;#039;Appel(s) simu(s) SIP - Illimité fixes, mobiles et inter NPV&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
            # Client au compteur, on simule son cout en illimité&lt;br /&gt;
            if len(lignes_compteur) &amp;gt; 0:&lt;br /&gt;
                cout_actuel = group[&amp;#039;Montant HT&amp;#039;].sum()&lt;br /&gt;
                # On retire du cout actuel les SVA, qui sont neutres dans le PA, puisqu&amp;#039;également facturés en illimité&lt;br /&gt;
                # Traitement du CDR SVA A&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA A&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA B&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA B&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA D&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA D&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA G&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA G&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                cout_illi = len(lignes_compteur) * 12              &lt;br /&gt;
                marge = cout_illi - cout_actuel&lt;br /&gt;
                Client.append(client)&lt;br /&gt;
                Type_Cli.append(&amp;quot;Compteur&amp;quot;)&lt;br /&gt;
                Cout_cpteur.append(round(cout_actuel, 2))&lt;br /&gt;
                Cout_illim.append(round(cout_illi, 2))&lt;br /&gt;
                Marge.append(round(marge, 2))&lt;br /&gt;
                ProgressionPour100.append(round(cout_illi * 100 / cout_actuel, 2))&lt;br /&gt;
                NbCanaux.append(len(lignes_compteur))&lt;br /&gt;
&lt;br /&gt;
            # Client en illimité, on simule son cout au compteur&lt;br /&gt;
            if len(lignes_illi) &amp;gt; 0:&lt;br /&gt;
                cout_actuel = group[&amp;#039;Montant HT&amp;#039;].sum()&lt;br /&gt;
                # On retire du cout actuel les SVA, qui sont neutres dans le PA, puisqu&amp;#039;également facturés en illimité&lt;br /&gt;
                # Traitement du CDR SVA A&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA A&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA B&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA B&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA D&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA D&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                # Traitement du CDR SVA G&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR SVA G&amp;#039;:&lt;br /&gt;
                        cout_actuel -= row[&amp;#039;Montant HT&amp;#039;]&lt;br /&gt;
                cout_cpteur = len(lignes_illi) * 1.65&lt;br /&gt;
&lt;br /&gt;
                # Traitement du CDR mobiles&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR Mobiles&amp;#039; and row[&amp;#039;Montant HT&amp;#039;] == 0:&lt;br /&gt;
                        cout_cpteur += row[&amp;#039;Quantité 2&amp;#039;] * 0.0004&lt;br /&gt;
                # Traitement du CDR fixe&lt;br /&gt;
                for index, row in group.iterrows():&lt;br /&gt;
                    if row[&amp;#039;Type&amp;#039;] == &amp;#039;CDR Nationaux&amp;#039; and row[&amp;#039;Montant HT&amp;#039;] == 0:&lt;br /&gt;
                        cout_cpteur += row[&amp;#039;Quantité 2&amp;#039;] * 0.000115&lt;br /&gt;
                marge = cout_actuel - cout_cpteur&lt;br /&gt;
                Client.append(client)&lt;br /&gt;
                Type_Cli.append(&amp;quot;illimite&amp;quot;)&lt;br /&gt;
                Cout_cpteur.append(round(cout_cpteur, 2))&lt;br /&gt;
                Cout_illim.append(round(cout_actuel, 2))&lt;br /&gt;
                Marge.append(round(marge, 2))&lt;br /&gt;
                ProgressionPour100.append(round(cout_actuel * 100 / cout_cpteur, 2))&lt;br /&gt;
                NbCanaux.append(len(lignes_illi))&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Calcul des valeurs terminé.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Ajouter la ligne &amp;quot;TOTAL&amp;quot; avec les sommes des colonnes B, C et D&lt;br /&gt;
        total_montant = round(sum(Cout_cpteur), 2)&lt;br /&gt;
        total_Cout_illim = round(sum(Cout_illim), 2)&lt;br /&gt;
        total_Marge = round(sum(Marge), 2)&lt;br /&gt;
        total_canaux=sum(NbCanaux)&lt;br /&gt;
&lt;br /&gt;
        if len(Client) &amp;gt; 0:&lt;br /&gt;
            Client.append(&amp;quot;TOTAL&amp;quot;)&lt;br /&gt;
            Type_Cli.append(&amp;quot;**&amp;quot;)&lt;br /&gt;
            Cout_cpteur.append(total_montant)&lt;br /&gt;
            Cout_illim.append(total_Cout_illim)&lt;br /&gt;
            Marge.append(total_Marge)&lt;br /&gt;
            ProgressionPour100.append(round(total_Cout_illim * 100 / total_montant, 2))&lt;br /&gt;
            NbCanaux.append(total_canaux)&lt;br /&gt;
&lt;br /&gt;
            # Créer un DataFrame à partir des listes&lt;br /&gt;
            result_df = pd.DataFrame({&lt;br /&gt;
                &amp;#039;Client&amp;#039;: Client,&lt;br /&gt;
                &amp;#039;Type_Cli&amp;#039;: Type_Cli,&lt;br /&gt;
                &amp;#039;PA Compteur&amp;#039;: Cout_cpteur,&lt;br /&gt;
                &amp;#039;PA illimite&amp;#039;: Cout_illim,&lt;br /&gt;
                &amp;#039;Marge&amp;#039;: Marge,&lt;br /&gt;
                &amp;#039;% Evol Marge&amp;#039;: ProgressionPour100,&lt;br /&gt;
                &amp;#039;Nb Canaux&amp;#039; : NbCanaux&lt;br /&gt;
            })&lt;br /&gt;
&lt;br /&gt;
            # Construire le nom du fichier de résultat avec le suffixe &amp;quot;_analyse&amp;quot;&lt;br /&gt;
            nom_fichier_resultat = nom_fichier_csv.replace(&amp;#039;.csv&amp;#039;, &amp;#039;_analyse.csv&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
            # Écrire le DataFrame résultant dans un nouveau fichier CSV avec le nom de résultat&lt;br /&gt;
            chemin_complet_resultat = os.path.join(chemin_result, nom_fichier_resultat)&lt;br /&gt;
            result_df.to_csv(chemin_complet_resultat, index=False, sep=&amp;#039;;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
            print(&amp;quot;Le fichier résultat a été généré avec succès.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Aucun client avec le produit &amp;#039;Appel(s) simu(s) SIP - Compteur NPV&amp;#039; trouvé.&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anthony</name></author>
	</entry>
</feed>