<jupyter_start><jupyter_text>Statistiques Descriptives concernant les 3 revues d'intérêt  **OBJECTIF GENERAL** **Cerner les caractéristiques essentielles du corpus avant d'appliquer des modèles d'analyse de texte.**  **OBJECTIFS SPECIFIQUES** **1) ARTICLE** - Type d'article (article, compte-rendu, note, autre)- Type de traitement (complet, aucun)- Taille moyenne (nombre de pages et nombre de tokens)- Nombre moyen de citations par article **2) REVUE** - Nombre d'articles en français- Période et Fréquence de publication- Nombre d'article en français par an **3) AUTEUR** - Nombre d'articles- Période de publication **4) TOKENS** - Nombre de tokens par article par an pour chaque revue ------------------ **Import Bibliothèques**<jupyter_code>import matplotlib.pyplot as plt
import numpy as np
# Récupération d'une liste de dictionnaire  pour chaque revue du type 
# {'texte' : texte article brut , 'metadata': {'title' : titre, 'typeart': , 'lang': , 'traitement': , 'annee': ,'info_auteurs': [(prenom, nom, affiliation)]}, 'URL': }

%store -r Corpus_AE
%store -r Corpus_EI
%store -r Corpus_RI<jupyter_output><empty_output><jupyter_text>------------------  0) PREPARATION CORPUS FILTRE ARTICLES EN FRANCAIS<jupyter_code>def corpus_filtre(Corpus, tokens):
    """On retourne la liste de documents avec [0] : élément de corpus_AE et [1] : élément de tokens"""
    Corpus_filtre = []
    i=0
    for element in Corpus:
        if (element['metadata']['typeart'], element['metadata']['lang']) == ('article', 'fr'):
            Corpus_filtre.append((element, tokens[i]))
            i+=1
    return Corpus_filtre
Corpus_filtre_AE = corpus_filtre(Corpus_AE,tokens_bigrams_Corpus_LDA_AE_clean)
Corpus_filtre_EI = corpus_filtre(Corpus_EI,tokens_bigrams_Corpus_LDA_EI_clean)
Corpus_filtre_RI = corpus_filtre(Corpus_RI, tokens_bigrams_Corpus_LDA_RI_clean)
len(Corpus_filtre_AE), len(Corpus_filtre_EI),len(Corpus_filtre_RI)<jupyter_output><empty_output><jupyter_text>------------------  1) ARTICLE **TYPE DE TRAITEMENT**<jupyter_code>def type_traitement (Corpus):
    """On retourne le type de traitement des articles pour chaque revue"""
    dico_traitement = {'minimal':0, 'complet':0}
    for element in Corpus:
        if (element['metadata']['typeart'], element['metadata']['lang']) == ('article', 'fr'):
            dico_traitement [element['metadata']['traitement']] += 1
    return dico_traitement
type_traitement_AE = type_traitement(Corpus_AE)
type_traitement_EI = type_traitement(Corpus_EI)
type_traitement_RI = type_traitement(Corpus_RI)
print(type_traitement_AE, type_traitement_EI, type_traitement_RI)
revues = ['Actualité Économique', 'Études Internationales', 'Relations Industrielles']
traitements = [[1351,822,1253],[183,272,119]]
X = np.arange(3)
fig = plt.figure(figsize=(11,7))
plt.xticks(np.arange(3), revues, fontsize=12)
plt.bar(X + 0.00, traitements[0], color = 'k', label='minimal', width = 0.25)
plt.bar(X + 0.25, traitements[1], color = 'burlywood', label='complet', width = 0.25)
plt.legend()
plt.ylabel('Nombre d\'articles', fontsize=12)
plt.savefig('Plots/Type traitement/traitement_trois_revues.png')
plt.show()
plt.close()<jupyter_output><empty_output><jupyter_text>**TAILLE MOYENNE**<jupyter_code>%store -r tokens_bigrams_Corpus_LDA_RI_clean
%store -r tokens_bigrams_Corpus_LDA_AE_clean
%store -r tokens_bigrams_Corpus_LDA_EI_clean
longueurs = []
for element in tokens_bigrams_Corpus_LDA_AE_clean:
    longueurs.append(len(element))
int(np.mean(np.array(longueurs)))
longueurs = []
for element in tokens_bigrams_Corpus_LDA_EI_clean:
    longueurs.append(len(element))
int(np.mean(np.array(longueurs)))
longueurs = []
for element in tokens_bigrams_Corpus_LDA_RI_clean:
    longueurs.append(len(element))
int(np.mean(np.array(longueurs)))<jupyter_output><empty_output><jupyter_text>------------------  2) REVUE **NOMBRE D'ARTICLES EN FRANCAIS PAR AN**<jupyter_code>def repartition_article_par_an (Corpus):
    """On retourne le nombre d'article publié pour chaque type d'article par an"""
    repartition_article_par_an = {'article':{}, 'note':{}, 'compterendu':{}, 'autre':{}}
    for element in Corpus:
        if element['metadata']['lang'] == 'fr':
            type_art, annee = element['metadata']['typeart'], element['metadata']['annee']
            if annee in repartition_article_par_an[type_art] : 
                repartition_article_par_an[type_art][annee] += 1
            else : repartition_article_par_an [type_art][annee] = 1
    return repartition_article_par_an
repartition_par_an_AE = repartition_article_par_an(Corpus_AE)
repartition_par_an_EI= repartition_article_par_an(Corpus_EI)
repartition_par_an_RI = repartition_article_par_an(Corpus_RI)
import numpy as np
import matplotlib.pyplot as plt
def plot_repartition_par_an (repartition_par_an, initiales = 'AE', typeart = 'article',title=False, save=True):
    fig = plt.figure(figsize=(10,5))
    lists = sorted(repartition_par_an[typeart].items())
    x, y = zip(*lists) 
    plt.xticks(np.arange(0, 100, step=10), fontsize=14)
    plt.yticks (fontsize=14)
    plt.bar(x, y,color = 'k')
    plt.xlabel('Année de publication', fontsize=20)
    plt.ylabel('Nombre d\'articles',fontsize=20)
    if title: plt.title('Répartition du nombre d\'articles utilisés par an pour la revue ' + initiales + ' pour les articles de type ' + typeart)
    #plt.title(initiales, fontsize=40)
    if save: fig.savefig('Plots/Nombre articles/nb_articles_' + initiales + '_' + typeart + ".png")
    plt.show()
    plt.close()
plot_repartition_par_an(repartition_par_an_AE, initiales='AE', typeart = 'article')
plot_repartition_par_an(repartition_par_an_EI, initiales='EI', typeart = 'article')
plot_repartition_par_an(repartition_par_an_RI, initiales='RI', typeart = 'article')
#plot_repartition_par_an(repartition_par_an_AE, initiales='AE',typeart = 'note')
#plot_repartition_par_an(repartition_par_an_AE, initiales='AE', typeart = 'compterendu')
#plot_repartition_par_an(repartition_par_an_AE, initiales='AE', typeart = 'autre')
plot_repartition_par_an(repartition_par_an_EI, initiales='EI', typeart = 'article')
plot_repartition_par_an(repartition_par_an_EI, initiales='EI',typeart = 'note')
plot_repartition_par_an(repartition_par_an_EI, initiales='EI', typeart = 'compterendu')
plot_repartition_par_an(repartition_par_an_EI, initiales='EI', typeart = 'autre')
plot_repartition_par_an(repartition_par_an_RI, initiales='RI', typeart = 'article')
plot_repartition_par_an(repartition_par_an_RI, initiales='RI',typeart = 'note')
plot_repartition_par_an(repartition_par_an_RI, initiales='RI', typeart = 'compterendu')
plot_repartition_par_an(repartition_par_an_RI, initiales='RI', typeart = 'autre')<jupyter_output><empty_output><jupyter_text>------------------  3) AUTEUR **NOMBRE D'ARTICLES**<jupyter_code>def dico_brut_auteurs (Corpus):
    dico_brut_auteurs = {}
    for element in Corpus:
        try: 
            for auteur in element['metadata']['info_auteurs']:
                try: 
                    prenom_nom = auteur[0] +'_' +auteur[1] 
                    if prenom_nom in dico_brut_auteurs : dico_brut_auteurs[prenom_nom] += 1
                    else : dico_brut_auteurs[prenom_nom] = 1
                except :
                    pass
        except:
            pass
    return dico_brut_auteurs
dico_brut_auteurs_AE = dico_brut_auteurs(Corpus_AE)
dico_brut_auteurs_EI = dico_brut_auteurs(Corpus_EI)
dico_brut_auteurs_RI = dico_brut_auteurs(Corpus_RI)
print(' Nombre total d\'auteurs pour la revue AE : ', len(dico_brut_auteurs_AE), 'auteurs \n',
     'Nombre total d\'auteurs pour la revue EI : ', len(dico_brut_auteurs_EI), 'auteurs \n',
     'Nombre total d\'auteurs pour la revue RI : ', len(dico_brut_auteurs_RI), 'auteurs \n')<jupyter_output><empty_output><jupyter_text>**Etude de la répartition du nombre d'articles publiés par auteur**<jupyter_code>def repartition_nombre_articles(dico_brut_auteurs):
    compte_nb_articles_par_auteur = {}
    for element in dico_brut_auteurs:
        if dico_brut_auteurs[element] in compte_nb_articles_par_auteur:
            compte_nb_articles_par_auteur[dico_brut_auteurs[element]] +=1
        else: compte_nb_articles_par_auteur[dico_brut_auteurs[element]] =1
    return compte_nb_articles_par_auteur
repartition_nombre_articles_AE = repartition_nombre_articles(dico_brut_auteurs_AE)
repartition_nombre_articles_EI = repartition_nombre_articles(dico_brut_auteurs_EI)
repartition_nombre_articles_RI = repartition_nombre_articles(dico_brut_auteurs_RI)
def plot_articles_auteurs (repartition_nombre_articles, initiales = 'AE'):
    fig = plt.figure(figsize=(10,5))
    lists = sorted(repartition_nombre_articles.items())
    x, y = zip(*lists) 
    plt.bar(x, y, color ='k')
    plt.xlabel('Total d\'articles publiés',fontsize=20)
    plt.ylabel('Nombre d\'auteurs',fontsize=20)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    #plt.title('Fréquence d\'articles publiés dans la revue ' + initiales)
    plt.title(initiales,fontsize=40)
    fig.savefig('Plots/Auteurs/repartition_articles_' + initiales + ".png")
    plt.show()
    plt.close()
plot_articles_auteurs(repartition_nombre_articles_AE)
plot_articles_auteurs(repartition_nombre_articles_EI, initiales='EI')
plot_articles_auteurs(repartition_nombre_articles_RI, initiales='RI')<jupyter_output><empty_output><jupyter_text>**ETUDE NOMBRE D'ARTICLES PUBLIES PAR AUTEUR** **CHOIX METHODOLOGIQUE** On ne garde que les auteurs qui ont publié au moins 5 articles dans la revue.<jupyter_code>dico_brut_auteurs_AE_sup = {}
for element in dico_brut_auteurs_AE:
    if dico_brut_auteurs_AE[element] == 1:
        dico_brut_auteurs_AE_sup[element] = dico_brut_auteurs_AE[element] 
dico_brut_auteurs_EI_sup = {}
for element in dico_brut_auteurs_EI:
    if dico_brut_auteurs_EI[element] == 1:
        dico_brut_auteurs_EI_sup[element] = dico_brut_auteurs_EI[element] 
dico_brut_auteurs_RI_sup = {}
for element in dico_brut_auteurs_RI:
    if dico_brut_auteurs_RI[element] == 1:
        dico_brut_auteurs_RI_sup[element] = dico_brut_auteurs_RI[element] 
import numpy as np
def plot_articles_auteurs (dico_brut_auteurs, initiales = 'AE'):
    fig = plt.figure(figsize=(20,10))
    lists = sorted(dico_brut_auteurs.items())
    x, y = zip(*lists) 
    plt.xticks(rotation=90)
    plt.bar(x, y)
    plt.xlabel('Auteur')
    plt.ylabel('Nombre d\'articles publiés')
    plt.title('Nombre d\'articles publiés par chaque auteur pour la revue ' + initiales)
    fig.savefig(plot_directory +'/Auteurs/nb_articles_fr_' + initiales + ".png")
    plt.show()
    plt.close()
plot_articles_auteurs(dico_brut_auteurs_AE_sup)
plot_articles_auteurs(dico_brut_auteurs_EI_sup, initiales='EI')<jupyter_output><empty_output><jupyter_text>**PERIODE DE PUBLICATION**<jupyter_code>plot_articles_auteurs(dico_brut_auteurs_RI_sup, initiales='RI')<jupyter_output><empty_output><jupyter_text>Visuellement, il n'y a pas l'air d'avoir d'erreur sur des amibiguités d'auteurs<jupyter_code>print(' Nombre total d\'auteurs ayant écrit plus de 5 articles pour la revue AE : ', len(dico_brut_auteurs_AE_sup), 'auteurs \n',
     'Nombre total d\'auteurs ayant écrit plus de 5 articles pour la revue EI : ', len(dico_brut_auteurs_EI_sup), 'auteurs \n',
     'Nombre total d\'auteurs ayant écrit plus de 5 articles pour la revue RI : ', len(dico_brut_auteurs_RI_sup), 'auteurs \n')<jupyter_output><empty_output><jupyter_text>**d) Nombre moyen d'auteurs par article de type article**  NB : manque information auteur pour beaucoup d'articles !<jupyter_code>def nombre_auteur_par_an (Corpus_filtre):
    """On retourne le nombre d'article publié pour les articles de type article"""
    repartition_article_par_an = {}
    compteur_annee = {} #compte le nombre d'article par an pour calculer la moyenne
    exceptions = 0
    for element in Corpus_filtre:
        if element[0]['typeart'] == 'article':
            try :
                nb_auteurs, annee = len(element[0]['info_auteurs']), element[0]['annee']
                if annee in repartition_article_par_an : 
                    repartition_article_par_an[annee] += nb_auteurs
                    compteur_annee[annee] += 1
                else : 
                    repartition_article_par_an [annee] = nb_auteurs
                    compteur_annee[annee] =1
            except: 
                exceptions +=1
    # Calcul du nombre moyen de co-auteur par article par année
    for annee in repartition_article_par_an:
         repartition_article_par_an[annee] /= compteur_annee[annee] 
    print (exceptions)
    return repartition_article_par_an
nombre_auteur_par_an_AE = nombre_auteur_par_an(Corpus_AE_fr)
nombre_auteur_par_an_EI = nombre_auteur_par_an(Corpus_EI_fr)
nombre_auteur_par_an_RI = nombre_auteur_par_an(Corpus_RI_fr)
def plot_auteur_par_an (nombre_auteur_par_an_AE, initiales = 'AE'):
    fig = plt.figure(figsize=(10,8))
    lists = sorted(nombre_auteur_par_an_AE.items())
    x, y = zip(*lists) 
    plt.xticks(np.arange(0, 100, step=10))
    plt.bar(x, y)
    plt.xlabel('Année de publication')
    plt.ylabel('Nombre moyen de co-auteur')
    plt.title('Répartition du nombre moyen de co-auteur par an pour la revue ' + initiales)
    fig.savefig(plot_directory +'/Auteurs/nb_coauteur_' + initiales + ".png")
    plt.show()
    plt.close()
plot_auteur_par_an(nombre_auteur_par_an_AE, initiales='AE')
plot_auteur_par_an(nombre_auteur_par_an_EI, initiales='EI')
plot_auteur_par_an(nombre_auteur_par_an_RI, initiales='RI')<jupyter_output><empty_output><jupyter_text>------------------  **4) TOKENS** Nombre de tokens par article par an pour chaque revue **a) Répartition du nombre total de tokens par an**<jupyter_code>def compte_tokens_par_an (Corpus_filtre):
    """On compte les tokens pour chaque article en fonction de l'année"""
    tokens_par_annee = {}
    for element in Corpus_filtre:
        annee = element[0]['metadata']['annee']
        if annee in tokens_par_annee : 
            tokens_par_annee[annee] += len(element[1])
        else : tokens_par_annee [annee] = len(element[1])
    return tokens_par_annee
tokens_par_annee_AE = compte_tokens_par_an(Corpus_filtre_AE)
tokens_par_annee_EI = compte_tokens_par_an(Corpus_filtre_EI)
tokens_par_annee_RI = compte_tokens_par_an(Corpus_filtre_RI)
import numpy as np
import matplotlib.pyplot as plt
def plot_tokens_par_an (tokens_par_annee, initiales = 'AE',title=False):
    fig = plt.figure(figsize=(10,5))
    lists = sorted(tokens_par_annee.items())
    x, y = zip(*lists) 
    plt.xticks(np.arange(0, 100, step=10),fontsize=14)
    plt.yticks(fontsize=14)
    plt.bar(x, y, color='burlywood')
    plt.xlabel('Année de publication',fontsize=20)
    plt.ylabel('Nombre total de tokens',fontsize=20)
    if title: plt.title('Répartition du nombre de jetons utilisés par an pour la revue ' + initiales)
    plt.title(initiales, fontsize=40)
    fig.savefig('Plots/Nombre tokens/nb_tokens_' + initiales + ".png")
    plt.show()
    plt.close()
plot_tokens_par_an(tokens_par_annee_AE, initiales='AE')
plot_tokens_par_an(tokens_par_annee_EI, initiales='EI')
plot_tokens_par_an(tokens_par_annee_RI, initiales='RI')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11929152071905359, 'fraction_numerical': 0.009979512259599498, 'mean_word_length': 5.138742393509128, 'pattern_counts': {'":': 0, '<': 49, '<?xml version=': 0, '>': 49, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '12', 'dir': 'jupyter-structured-clean-dedup', 'id': '22835', 'license': 'MIT', 'n_tokens_mistral': 5735, 'n_tokens_neox': 5704, 'n_words': 1042, 'path': 'Code/Stats_Descriptives.ipynb', 'repo_name': 'arthurlemon/topic-models-SHS', 'size': '15131'}