[PYTHON] Visualisons la relation entre le salaire moyen et l'industrie avec des données XBRL et seaborn! (7/10)

Dans le 7e article du Calendrier de l'Avent, nous visualiserons par programmation l'ensemble de données publié dans le 6e article (nettoyage des données des informations extraites des données décrites dans XBRL).

(Le programme de cet article est fourni tel quel sans aucune garantie, et XBRL Japan assumera toute la responsabilité de tous les inconvénients ou problèmes pouvant survenir à la suite de l'utilisation de ce programme, quelle qu'en soit la cause. Je ne le supporterai pas.)

1. Visualisez les données XBRL

1.1 Aperçu du programme

Ce programme est publié dans "Extrayons automatiquement les informations sur les employés telles que le salaire moyen des données XBRL divulguées par EDINET (partage de données) (6/10)" (ʻSalaire annuel moyen (ʻun salaire annuel moyen (C'est un programme de langage Python qui visualise l'ensemble de données de (yen),moyenne des années de service (années),âge moyen (années)) avec la bibliothèque matplotlib. (Tous les codes sont répertoriés dans "2. Code source") Nous avons choisi les moustaches rectangulaires, les graphiques à barres et les estimations de la densité du noyau comme méthode de visualisation. Les entreprises qui ne disposent pas de toutes les données telles que les informations sur les salaires sont exclues de ce traitement en tant que données manquantes.

1.2 Préparation

Veuillez prendre les mesures suivantes avant d'exécuter le programme. L'installation d'autres bibliothèques (japanize_matplotlib, seaborn, etc.) doit également être effectuée à l'avance. Modifiez également la méthode de codage et de spécification de chemin selon les besoins en fonction de l'environnement d'exécution. Ensuite, modifiez l'attribut sep de read_csv en sep = ',' ou sep = '/ t' selon la méthode de création CSV.

1.2.1 Détermination du chemin du fichier de l'ensemble de données

Détermine le chemin pour lire le fichier de l'ensemble de données nettoyé (format CSV). dataset_filepath ='C:\\Users\\xxx\\Desktop\\xbrlReport\\xbrl_cleansing_qiita.csv'

df_dataset = pd.read_csv(dataset_filepath, header=0,sep=',', engine="python")

1.2.2 Détermination du chemin du fichier de sortie

Déterminez le chemin du fichier pour sortir le fichier image. plt.savefig('C:\\Users\\XXX\\Desktop\\xbrlReport\\XXXX.png')

1.3 Résultat de l'exécution

Une fois exécutés, les résultats de la visualisation de trois types de KDE sont le graphique à barbe (salaire annuel moyen par secteur, années de service moyennes par secteur, âge moyen par secteur), graphique à barres (salaire annuel moyen TOP50 (industrie de l'information et de la communication)). Il est sorti sous forme d'image.

1.3.1 Moustaches de boîte

En ce qui concerne les moustaches du salaire annuel moyen par industrie, tout d'abord, l'ensemble de données donné a été regroupé par industrie, et le salaire annuel moyen a été calculé pour chaque industrie. Après cela, nous avons trié le salaire annuel moyen par industrie et créé une «liste triée des noms de l'industrie du salaire annuel moyen» à partir des résultats obtenus.

Code1


df_groupby_mean =dropped_dataset.groupby(['Industrie'], as_index=False).mean()
df_groupby_mean_s_by_salary = df_groupby_mean.sort_values('Salaire annuel moyen (yen)')
df_gyoshu_label_by_salary = df_groupby_mean_s_by_salary['Industrie']
gyoshu_label_list_by_salary=df_gyoshu_label_by_salary.tolist()

En appliquant la liste dans l'ordre d'affichage sur l'axe Y au moment de la visualisation, il est possible de visualiser le salaire annuel moyen par industrie. Vous pouvez vérifier visuellement la différence entre la valeur moyenne et la valeur médiane en utilisant le diagramme de moustaches de boîte qui utilise boxenplot. De plus, en traçant les points avec stripplot, nous avons également visualisé la dispersion. Les années moyennes de service et l'âge moyen sont également créés en effectuant le même traitement.

Code2


sns.stripplot(x='Salaire annuel moyen (yen)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_salary)
ax =sns.boxenplot(x='Salaire annuel moyen (yen)', y='Industrie',orient = 'h', data=df_dropped_dataset,palette='rainbow',order=gyoshu_label_list_by_salary);
Box_beard1.png Box_beard2.png Box_beard3.png

1.3.2 Graphique à barres

Seules les entreprises du secteur de l'information et des télécommunications ont été sélectionnées, puis les 50 premières entreprises ont été sélectionnées à partir des résultats du tri par salaire annuel moyen (yen). (J'ai choisi l'industrie de l'information / communication en tenant compte des téléspectateurs de Qiita)

Code3


df_info=df_dropped_dataset[df_dropped_dataset["Industrie"] == "Industrie de l'information et de la communication"]
df_info_sortby_salary = df_info.sort_values('Salaire annuel moyen (yen)')[-50:]

Comme dans le cas du diagramme box barbe, les noms d'entreprises triés par salaire sont listés et utilisés dans l'ordre d'affichage sur l'axe X. Après cela, vous pouvez dessiner les 50 meilleures entreprises avec un salaire annuel moyen simplement en passant les données de l'industrie de l'information / communication et la liste triée à barplot.

Code4



df_info_label_list_sortby_salary=df_info_sortby_salary['Nom de la compagnie'].tolist()
ax =sns.barplot(x="Nom de la compagnie", y="Salaire annuel moyen (yen)",  data=df_info,palette='rocket',order=df_info_label_list_sortby_salary)

En remplaçant [" industrie "] ==" industrie de l'information / communication " votre industrie préférée (pêche / agriculture / foresterie, industrie des services, etc.), vous pouvez visualiser le TOP 50 des autres industries. Vous pouvez également contrôler le nombre de TOP dessinés en modifiant la valeur de [-50:]. Et, bien qu'une certaine personnalisation soit nécessaire, vous pouvez également obtenir des résultats filtrés en ajoutant «années de service (années)» et «âge moyen (années)» autres que le salaire annuel moyen. ..

output5.png

1.3.3 Estimation de la densité du noyau

J'ai dessiné un KDE qui combine trois modèles: les années de service moyennes - salaire annuel moyen, salaire annuel moyen selon l'âge et les années de service moyennes selon l'âge. Contrairement à un secteur d'activité, vous pouvez obtenir une vue d'ensemble de l'ensemble de l'entreprise soumise à EDINET à vol d'oiseau.

Code5



sns.jointplot('Années de service moyennes (années)', 'Salaire annuel moyen (yen)',data=df_dropped_dataset, kind="kde",color="#d9f2f8")
sns.jointplot('Âge moyen (années)', 'Salaire annuel moyen (yen)',data=df_dropped_dataset, kind="kde",color="#fac8be")
sns.jointplot('Âge moyen (années)', 'Années de service moyennes (années)',data=df_dropped_dataset, kind="kde",color="#d6fada")

KDE1.png KDE2.png KDE3.png

2. Code source

# -*- coding: utf-8 -*-

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
import matplotlib.ticker as ticker
import japanize_matplotlib # https://yolo.love/matplotlib/japanese/

def drop_unnecessary_data(dataset_filepath):
    df_dataset = pd.read_csv(dataset_filepath, header=0,sep=',', engine="python")

    df_dropped_dataset = df_dataset.dropna()
    df_dropped_dataset = df_dropped_dataset.drop('#', axis=1)
    df_dropped_dataset = df_dropped_dataset.drop('EDINETCODE', axis=1)

    print(df_dropped_dataset)
    print(df_dropped_dataset.info())
    print('Nombre de lignes',len(df_dropped_dataset))

    return df_dropped_dataset

def make_label_list(dropped_dataset):

    df_groupby_mean =dropped_dataset.groupby(['Industrie'], as_index=False).mean()

    df_groupby_mean_s_by_salary = df_groupby_mean.sort_values('Salaire annuel moyen (yen)')
    df_gyoshu_label_by_salary = df_groupby_mean_s_by_salary['Industrie']
    gyoshu_label_list_by_salary=df_gyoshu_label_by_salary.tolist()

    df_groupby_mean_s_by_service = df_groupby_mean.sort_values('Années de service moyennes (années)')
    df_gyoshu_label_by_service = df_groupby_mean_s_by_service['Industrie']
    gyoshu_label_list_by_service=df_gyoshu_label_by_service.tolist()

    df_groupby_mean_s_by_age = df_groupby_mean.sort_values('Âge moyen (années)')
    df_gyoshu_label_by_age = df_groupby_mean_s_by_age['Industrie']
    gyoshu_label_list_by_age=df_gyoshu_label_by_age.tolist()

    return gyoshu_label_list_by_salary,gyoshu_label_list_by_service,gyoshu_label_list_by_age

def visualize_boxenplot_salary(gyoshu_label_list_by_salary,df_dropped_dataset):
    plt.figure(figsize=(15, 10))

    sns.stripplot(x='Salaire annuel moyen (yen)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_salary)
    ax =sns.boxenplot(x='Salaire annuel moyen (yen)', y='Industrie',orient = 'h', data=df_dropped_dataset,palette='rainbow',order=gyoshu_label_list_by_salary)

    ax.grid(which = "major",color='lightgray',ls=':',alpha = 0.5)
    ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())

    ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))

    plt.xlabel("Salaire annuel moyen (yen)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Salaire annuel moyen par industrie", fontsize=24)

    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')

    plt.savefig('C:\\Users\\xxx\\Desktop\\xbrlReport\\boxenplot_1.png')

    plt.show()

def visualize_boxenplot_service(gyoshu_label_list_by_service,df_dropped_dataset):
    plt.figure(figsize=(15, 10))

    sns.stripplot(x='Années de service moyennes (années)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_service)
    ax =sns.boxenplot(x='Années de service moyennes (années)', y='Industrie',orient = 'h', data=df_dropped_dataset,palette='rainbow',order=gyoshu_label_list_by_service)

    ax.grid(which = "major",color='lightgray',ls=':',alpha = 0.5)
    ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())

    plt.xlabel("Années de service moyennes (années)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Années moyennes de service par industrie", fontsize=24)

    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')

    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\boxenplot_2.png ")

    plt.show()

def visualize_boxenplot_age(gyoshu_label_list_by_age,df_dropped_dataset):
    plt.figure(figsize=(15, 10))

    sns.stripplot(x='Âge moyen (années)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_age)
    ax =sns.boxenplot(x='Âge moyen (années)', y='Industrie',orient = 'h', data=df_dropped_dataset,palette='rainbow',order=gyoshu_label_list_by_age);

    ax.grid(which = "major",color='lightgray',ls=':',alpha = 0.5)
    ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())

    plt.xlabel("Âge moyen (années)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Âge moyen par industrie", fontsize=24)

    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')

    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\boxenplot_3.png ")

    plt.show()

def visualize_jointplot(df_dropped_dataset):
    sns.jointplot('Années de service moyennes (années)', 'Salaire annuel moyen (yen)',data=df_dropped_dataset, kind="kde",color="#d9f2f8")
    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\jointplot_1.png ")
    plt.show()

    sns.jointplot('Âge moyen (années)', 'Salaire annuel moyen (yen)',data=df_dropped_dataset, kind="kde",color="#fac8be")
    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\jointplot_2.png ")
    plt.show()

    sns.jointplot('Âge moyen (années)', 'Années de service moyennes (années)',data=df_dropped_dataset, kind="kde",color="#d6fada")
    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\jointplot_3.png ")
    plt.show()

def visualize_barplot(df_dropped_dataset):
    df_info=df_dropped_dataset[df_dropped_dataset["Industrie"] == "Industrie de l'information et de la communication"]
    df_info_sortby_salary = df_info.sort_values('Salaire annuel moyen (yen)')[-50:]
    df_info_label_list_sortby_salary=df_info_sortby_salary['Nom de la compagnie'].tolist()

    plt.figure(figsize=(15, 12))
    ax =sns.barplot(x="Nom de la compagnie", y="Salaire annuel moyen (yen)",  data=df_info,palette='rocket',order=df_info_label_list_sortby_salary)
    sns.set(style="ticks")
    plt.xticks(rotation=90)

    plt.subplots_adjust(hspace=0.8,bottom=0.35)

    ax.grid(which = 'major',axis ='y', color='lightgray',ls=':',alpha = 0.5)

    ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))

    plt.xlabel("Nom de la compagnie", fontsize=12)
    plt.ylabel("Salaire annuel moyen (yen)",fontsize=18)

    plt.title("Industrie de l'information et de la communication:Salaire annuel moyen TOP50", fontsize=24)

    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().yaxis.set_ticks_position('left')
    plt.gca().xaxis.set_ticks_position('bottom')

    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\barplot_1.png ")

    plt.show()

def main():
    dataset_filepath ='C:\\Users\\xxx\\Desktop\\xbrlReport\\xbrl_cleansing_qiita.csv'
    df_dropped_dataset = drop_unnecessary_data(dataset_filepath)

    gyoshu_label_list_by_salary, gyoshu_label_list_by_service, gyoshu_label_list_by_age = make_label_list(df_dropped_dataset)

    visualize_boxenplot_salary(gyoshu_label_list_by_salary,df_dropped_dataset)
    visualize_boxenplot_service(gyoshu_label_list_by_service,df_dropped_dataset)
    visualize_boxenplot_age(gyoshu_label_list_by_age,df_dropped_dataset)

    visualize_jointplot(df_dropped_dataset)

    visualize_barplot(df_dropped_dataset)

    print("visualize finish")

if __name__ == "__main__":
    main()


3. Pour analyse

Cet article s'est concentré sur la visualisation des données brutes, mais avec une petite modification de ces données, il est possible d'analyser l'entreprise. Par exemple, si «l'âge moyen des années de service» est d'environ 25 ans, on sait qu'il y a peu de retraités et d'embauches en milieu de carrière, il est donc possible d'extraire de telles entreprises. En ajoutant ici «l'âge de l'entreprise», une analyse plus approfondie peut être effectuée. (L'âge de l'entreprise peut être obtenu à partir des données XBRL avec le nom d'élément "jpcrp_cor: FiscalYearCoverPage") Les entreprises ayant un âge élevé et des années de service moyennes de plus de 42 ans vieillissent. À l'avenir, à mesure que les personnes âgées prendront leur retraite en masse, l'âge moyen baissera soudainement, entraînant une augmentation soudaine du «revenu net». (Non pas parce que la marge bénéficiaire de l'entreprise a augmenté, mais parce que le montant total du salaire payé est réduit, ce qui est le plus lourd en «frais de gestion des ventes».) Il est intéressant de prêter attention non seulement à l'évolution de la marge bénéficiaire, mais également à la répartition de ces employés. En outre, il est également possible de comparer et d'analyser les séries chronologiques des «ventes ÷ nombre d'employés (moyenne de la période précédente et de cette période)» et «nombre d'employés». En effet, les ventes par habitant peuvent être mieux vues en raison de l'effet de restructuration. De cette manière, la possibilité d'obtenir des informations sur les salariés auprès d'EDINET a élargi le champ des analyses d'entreprise. Si vous êtes intéressé par autre chose que ce qui est décrit ici, veuillez faire une enquête.

4. Coordonnées

Pour toute demande concernant cet article, veuillez contacter l'adresse e-mail suivante. e-mail:[email protected] (Bien sûr, les commentaires sur qiita sont également les bienvenus)

Cette adresse e-mail sera le point de contact pour les demandes de renseignements concernant le Comité de développement de XBRL Japan, qui rédige l'article sur qiita. Je vais. Par conséquent, nous ne pouvons pas répondre aux demandes générales sur l'organisation en fonction du contenu, mais n'hésitez pas à nous contacter pour toutes questions techniques, opinions, demandes, conseils, etc. concernant XBRL. Veuillez noter que la réponse peut prendre un certain temps car les membres du comité sont des bénévoles.

Recommended Posts

Visualisons la relation entre le salaire moyen et l'industrie avec des données XBRL et seaborn! (7/10)
[Statistiques] Visualisons la relation entre la distribution normale et la distribution du chi carré.
Extrayons automatiquement les informations des employés telles que le salaire moyen des données XBRL divulguées par EDINET (5/10)
La relation subtile entre Gentoo et pip
À propos de la relation entre Git et GitHub
Relation entre la conversion des types de données Firestore et Go
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.
Transposons la matrice et multiplions les matrices par numpy.
Étudier la relation entre les dépenses de crème glacée et la température
Examiner la relation entre TensorFlow et Keras pendant la période de transition
Apprentissage des données relationnelles avec numpy et NetworkX (clustering spectral)
Visualisez la gamme d'insertions internes et externes avec python
Visualisez les données et saisissez la corrélation en même temps
Vue d'ensemble et astuces de Seaborn avec visualisation de données statistiques
J'ai examiné le mappage de données entre ArangoDB et Java
Faisons la distinction entre la manipulation de la structure de données et le code logique.
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Visualisons les données pluviométriques publiées par la préfecture de Shimane
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
Déplaçons word2vec avec Chainer et voyons la progression de l'apprentissage