<jupyter_start><jupyter_text>Clustering sur les données du Baromètre lorrain de la Science Ouverte Le clustering, ou partitionnement des données, est une méthode d'analyse permettant de rassembler des données dans des "paquets", afin d'identifier des relations, des tendances. Ici, l'objectif est de voir s'il existe une corrélation entre le nombre de publications et leur taux d'accès ouvert, ou encore une corrélation entre accès ouvert et discipline.**Il faut remplacer "toulon" par le nom de l'établissement directement dans le code ci-dessous. Vous pouvez faire ctrl+f pour modifier toutes les occurrences d'un coup.**En cas d'erreur "module seaborn inexistant", saisir la commande suivante : %pip install seaborn<jupyter_code>%pip install seaborn 
# Importer les librairies nécessaires
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn  as sns<jupyter_output><empty_output><jupyter_text>Importer le jeu de données avec lequel on souhaite travailler (changer la partie "toulon" en fonction de l'établissement) :<jupyter_code>publis_toulon_df = pd.read_csv("Data/outputs/publis_toulon_completes.csv")<jupyter_output><empty_output><jupyter_text>Restreindre à l'année souhaitée (modifier l'année pour les mises à jour) :<jupyter_code>publications_2019 = publis_toulon_df.loc[publis_toulon_df['published_year'] == 2019.0,:]<jupyter_output><empty_output><jupyter_text>Créer une DataFrame avec deux informations : le nombre de publications dans l'année en fonction de la discipline, et le nombre de publications en accès ouvert dans ces mêmes disciplines.<jupyter_code>publications_par_domaine = publications_2019['scientific_field'].value_counts().sort_index()
publications_par_domaine = publications_par_domaine.to_frame()
publications_en_oa = publications_2019.loc[publications_2019['is_oa']==True,:]
publications_en_oa = publications_en_oa['scientific_field'].value_counts().sort_index()
publications_en_oa = publications_en_oa.to_frame()
publications_en_oa
publis_triees = pd.merge(publications_par_domaine, publications_en_oa, left_index = True, right_index = True)
publis_triees = publis_triees.rename(columns = {'scientific_field_x': 'Nombre total de publications', 'scientific_field_y': 'Nb de publications en accès ouvert'})
publis_triees = publis_triees.rename_axis('Disciplines')
# Ajout d'une colonne pour l'affichage des disciplines dans le graphique
publis_triees["Disciplines"] = publications_en_oa.index
# Ajout d'une colonne avec le calcul des pourcentages d'accès ouvert
publis_triees["Pourcentage d'accès ouvert"] = ((publis_triees["Nb de publications en accès ouvert"] * 100) / publis_triees["Nombre total de publications"])
# N'afficher que la première décimale pour la colonne des pourcentages
pd.set_option('precision', 1)
# Supprimer les lignes où la discipline est inconnue
indexNames = publis_triees[publis_triees['Disciplines'] == 'unknown' ].index
publis_triees.drop(indexNames , inplace=True)
publis_triees
sns.set_style("whitegrid")

facet = sns.lmplot(data=publis_triees, x='Nombre total de publications', y="Pourcentage d'accès ouvert", hue='Disciplines',
                   fit_reg=False, legend=False, legend_out=False, palette=['red','aqua', 'blue', 'gold', 'green',
                                                                        'darkgray', 'darkviolet', 'teal', 'deeppink', 'black', 'white'],
                  scatter_kws={"s": 80})

plt.title("Taux d'accès ouvert 2019 par rapport au nombre de publications, par discipline", fontsize = 15, x = 1, y = 2,
          fontweight = 'bold', alpha = 0.8)

plt.legend(title='Disciplines', loc='best', labels=['Biologie (fond.)', 'Chimie', 
                                         'Informatique',
                                       'Sciences de la Terre, Ecologie, \nEnergie et biologie appliquée',
                                        "Sciences de l'Ingénieur",
                                        'Humanités',
                                        'Mathématiques',
                                        'Sciences médicales',
                                        'Sciences physiques, astronomie',
                                       'Sciences sociales'], bbox_to_anchor=(1.1, 0.7))

plt.savefig('Data/outputs/2019_rapport_oa_nb_publications.png', dpi=100, bbox_inches='tight', pad_inches=0.9)<jupyter_output><empty_output><jupyter_text>Répéter l'opération pour le graphique par éditeurs. Modifier l'année pour les mises à jour.<jupyter_code>publications_par_editeur = publications_2019['publisher'].value_counts().sort_index()
publications_par_editeur = publications_par_editeur.to_frame()
publications_en_oa_ed = publications_2019.loc[publications_2019['is_oa']==True,:]
publications_en_oa_ed = publications_en_oa_ed['publisher'].value_counts().sort_index()
publications_en_oa_ed = publications_en_oa_ed.to_frame()
publis_triees_ed = pd.merge(publications_par_editeur, publications_en_oa_ed, left_index = True, right_index = True)
publis_triees_ed = publis_triees_ed.rename(columns = {'publisher_x': 'Nombre total de publications', 'publisher_y': 'Nb de publications en accès ouvert'})
publis_triees_ed = publis_triees_ed.rename_axis('Editeurs')
publis_triees_ed["Editeurs"] = publications_en_oa_ed.index
publis_triees_ed = publis_triees_ed.sort_values(by=['Nombre total de publications'], ascending=False)
# Limiter le nombre d'éditeurs affichés aux 3 premiers. Ce chiffre peut être modulé comme on le souhaite mais attention, le graphique doit rester lisible
publis_triees_ed = publis_triees_ed[0:7]
publis_triees_ed["Pourcentage d'accès ouvert"] = ((publis_triees_ed["Nb de publications en accès ouvert"] * 100) / publis_triees_ed["Nombre total de publications"])
# N'afficher que la première décimale pour la colonne des pourcentages
pd.set_option('precision', 1)
publis_triees_ed
sns.set_style("darkgrid")

facet = sns.lmplot(data=publis_triees_ed, x='Nombre total de publications', y="Pourcentage d'accès ouvert", hue='Editeurs',
                   fit_reg=False, legend=False, scatter_kws={"s": 50}, palette= 'Paired')

plt.title("Taux d'accès ouvert 2019 par rapport au nombre de publications, par éditeur/plateforme", fontsize = 15, x = 0.5, y = 1,
          fontweight = 'bold', alpha = 0.8)

for ax in facet.axes.ravel():
    for t, x, y in publis_triees_ed[["Editeurs","Nombre total de publications","Pourcentage d'accès ouvert"]].values.tolist():
        ax.annotate(t, (x, y))

plt.savefig('Data/outputs/2019_rapport_oa_nb_publications_editeurs.png', dpi=100, bbox_inches='tight', pad_inches=0.9)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09971164061314312, 'fraction_numerical': 0.013810896949461223, 'mean_word_length': 4.745422842197036, 'pattern_counts': {'":': 2, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 12, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '436401', 'license': 'Apache-2.0', 'n_tokens_mistral': 2318, 'n_tokens_neox': 2134, 'n_words': 523, 'path': '03_clustering.ipynb', 'repo_name': 'ClaraGalliano/barometre_scienceouverte_toulon', 'size': '6589'}