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.)
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.
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.
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")
sep = '\ t'
au lieu desep ='
.Déterminez le chemin du fichier pour sortir le fichier image.
plt.savefig('C:\\Users\\XXX\\Desktop\\xbrlReport\\XXXX.png')
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.
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);
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. ..
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")
# -*- 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()
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.
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