[PYTHON] Lassen Sie uns die Beziehung zwischen Durchschnittsgehalt und Industrie mit XBRL-Daten und Seaborn visualisieren! (7/10)

Im 7. Beitrag des Adventskalenders werden wir den im 6. Beitrag veröffentlichten Datensatz (Datenbereinigungsinformationen, die aus den in XBRL beschriebenen Daten extrahiert wurden) programmgesteuert visualisieren.

(Das Programm in diesem Artikel wird ohne Gewähr bereitgestellt. XBRL Japan übernimmt unabhängig von der Ursache die Verantwortung für alle Nachteile oder Probleme, die durch die Verwendung dieses Programms entstehen können. Ich werde es nicht ertragen.)

1. Visualisieren Sie XBRL-Daten

1.1 Programmübersicht

Dieses Programm wird veröffentlicht in "Lassen Sie uns automatisch Mitarbeiterinformationen wie das Durchschnittsgehalt aus XBRL-Daten extrahieren, die von EDINET (Dataset Sharing) (6/10) veröffentlicht wurden" (Durchschnittliches Jahresgehalt ( durchschnittliches Jahresgehalt () Yen) ,Durchschnittliche Dienstjahre (Jahre),Durchschnittsalter (Jahre)) ist ein Python-Sprachprogramm, das mit der Bibliothek matplotlib visualisiert wird. (Alle Codes sind in "2. Quellcode" aufgeführt) Wir haben Box-Whisker, Balkendiagramme und Kernel-Dichteschätzungen als Visualisierungsmethoden ausgewählt. Unternehmen, die nicht über alle Daten wie Gehaltsinformationen verfügen, werden von dieser Verarbeitung als fehlende Daten ausgeschlossen.

1.2 Vorbereitung

Bitte führen Sie die folgenden Aktionen aus, bevor Sie das Programm ausführen. Die Installation anderer Bibliotheken (japanize_matplotlib, seaborn usw.) muss ebenfalls im Voraus erfolgen. Ändern Sie außerdem die Codierungs- und Pfadspezifikationsmethode entsprechend der Ausführungsumgebung. Ändern Sie dann das sep-Attribut von read_csv je nach CSV-Erstellungsmethode in "sep =", "" oder "sep =" / t ".

1.2.1 Ermitteln des Dataset-Dateipfads

Legt den Pfad zum Lesen der CSV-Formatdatei (Data Cleaned Dataset) fest. 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 Ermitteln des Ausgabedateipfads

Bestimmen Sie den Dateipfad für die Ausgabe der Bilddatei. plt.savefig('C:\\Users\\XXX\\Desktop\\xbrlReport\\XXXX.png')

1.3 Ausführungsergebnis

Bei der Ausführung sind die Ergebnisse der Visualisierung von drei Arten von KDE das Box-Bart-Diagramm (durchschnittliches Jahresgehalt nach Branche, durchschnittliche Dienstjahre nach Branche, durchschnittliches Alter nach Branche), Balkendiagramm (durchschnittliches Jahresgehalt TOP50 (Informations- und Kommunikationsbranche)). Es wird als Bild ausgegeben.

1.3.1 Box Whisker

In Bezug auf die Box Whisker des durchschnittlichen Jahresgehalts nach Branchen wurde zunächst der angegebene Datensatz nach Branchen gruppiert und das durchschnittliche Jahresgehalt für jede Branche berechnet. Danach haben wir das durchschnittliche Jahresgehalt nach Branchen sortiert und aus den erzielten Ergebnissen eine "sortierte Branchennamenliste mit durchschnittlichen Jahresgehältern" erstellt.

Code1


df_groupby_mean =dropped_dataset.groupby(['Industrie'], as_index=False).mean()
df_groupby_mean_s_by_salary = df_groupby_mean.sort_values('Durchschnittliches Jahresgehalt (Yen)')
df_gyoshu_label_by_salary = df_groupby_mean_s_by_salary['Industrie']
gyoshu_label_list_by_salary=df_gyoshu_label_by_salary.tolist()

Durch Anwenden der Liste in der Reihenfolge der Anzeige auf der Y-Achse zum Zeitpunkt der Visualisierung ist es möglich, das durchschnittliche Jahresgehalt nach Branchen zu visualisieren. Sie können die Differenz zwischen dem Durchschnittswert und dem Medianwert visuell überprüfen, indem Sie das Box-Whisker-Diagramm verwenden, das "Boxenplot" verwendet. Zusätzlich haben wir durch Zeichnen der Punkte mit "Stripplot" auch die Streuung visualisiert. Die durchschnittlichen Dienstjahre und das Durchschnittsalter werden ebenfalls durch Ausführen derselben Verarbeitung erstellt.

Code2


sns.stripplot(x='Durchschnittliches Jahresgehalt (Yen)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_salary)
ax =sns.boxenplot(x='Durchschnittliches Jahresgehalt (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 Balkendiagramm

Es wurden nur Unternehmen der Informations- und Telekommunikationsbranche ausgewählt, und dann wurden die 50 besten Unternehmen aus den Ergebnissen der Sortierung nach durchschnittlichem Jahresgehalt (Yen) ausgewählt. (Ich habe die Informations- / Kommunikationsbranche unter Berücksichtigung der Qiita-Zuschauer ausgewählt.)

Code3


df_info=df_dropped_dataset[df_dropped_dataset["Industrie"] == "Informations- und Kommunikationsindustrie"]
df_info_sortby_salary = df_info.sort_values('Durchschnittliches Jahresgehalt (Yen)')[-50:]

Wie im Fall des Box-Bart-Diagramms werden die nach Gehalt sortierten Firmennamen aufgelistet und in der Reihenfolge der Anzeige auf der X-Achse verwendet. Danach können Sie die 50 besten Unternehmen mit einem durchschnittlichen Jahresgehalt zeichnen, indem Sie die Daten der Informations- / Kommunikationsbranche und die sortierte Liste an "barplot" übergeben.

Code4



df_info_label_list_sortby_salary=df_info_sortby_salary['Name der Firma'].tolist()
ax =sns.barplot(x="Name der Firma", y="Durchschnittliches Jahresgehalt (Yen)",  data=df_info,palette='rocket',order=df_info_label_list_sortby_salary)

Indem Sie "[" Industrie "] ==" Informations- / Kommunikationsindustrie "" in Ihre Lieblingsbranche (Fischerei / Land- / Forstwirtschaft, Dienstleistungsbranche usw.) ändern, können Sie die TOP 50 anderer Branchen visualisieren. Sie können auch steuern, wie viele TOPs gezeichnet werden, indem Sie den Wert von "[-50:]" ändern. Obwohl einige Anpassungen erforderlich sind, können Sie auch gefilterte Ergebnisse erhalten, indem Sie "durchschnittliche Dienstjahre (Jahre)" und "Durchschnittsalter (Jahre)" außer dem durchschnittlichen Jahresgehalt hinzufügen. ..

output5.png

1.3.3 Schätzung der Kerndichte

Ich habe eine KDE gezeichnet, die drei Muster kombiniert: durchschnittliche Dienstjahre - durchschnittliches Jahresgehalt, durchschnittliches altersdurchschnittliches Jahresgehalt und durchschnittliche altersdurchschnittliche Dienstjahre. Anders als nach Branchen erhalten Sie aus der Vogelperspektive einen groben Überblick über das gesamte bei EDINET eingereichte Unternehmen.

Code5



sns.jointplot('Durchschnittliche Dienstjahre (Jahre)', 'Durchschnittliches Jahresgehalt (Yen)',data=df_dropped_dataset, kind="kde",color="#d9f2f8")
sns.jointplot('Durchschnittsalter (Jahre)', 'Durchschnittliches Jahresgehalt (Yen)',data=df_dropped_dataset, kind="kde",color="#fac8be")
sns.jointplot('Durchschnittsalter (Jahre)', 'Durchschnittliche Dienstjahre (Jahre)',data=df_dropped_dataset, kind="kde",color="#d6fada")

KDE1.png KDE2.png KDE3.png

2. Quellcode

# -*- 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('Anzahl der Zeilen',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('Durchschnittliches Jahresgehalt (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('Durchschnittliche Dienstjahre (Jahre)')
    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('Durchschnittsalter (Jahre)')
    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='Durchschnittliches Jahresgehalt (Yen)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_salary)
    ax =sns.boxenplot(x='Durchschnittliches Jahresgehalt (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("Durchschnittliches Jahresgehalt (Yen)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Durchschnittliches Jahresgehalt nach Branchen", 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='Durchschnittliche Dienstjahre (Jahre)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_service)
    ax =sns.boxenplot(x='Durchschnittliche Dienstjahre (Jahre)', 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("Durchschnittliche Dienstjahre (Jahre)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Durchschnittliche Betriebsjahre nach Branchen", 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='Durchschnittsalter (Jahre)', y ='Industrie',orient = 'h', data=df_dropped_dataset,size=3,edgecolor="gray",order=gyoshu_label_list_by_age)
    ax =sns.boxenplot(x='Durchschnittsalter (Jahre)', 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("Durchschnittsalter (Jahre)", fontsize=18)
    plt.ylabel("Industrie",fontsize=16)

    plt.title("Durchschnittsalter nach Branchen", 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('Durchschnittliche Dienstjahre (Jahre)', 'Durchschnittliches Jahresgehalt (Yen)',data=df_dropped_dataset, kind="kde",color="#d9f2f8")
    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\jointplot_1.png ")
    plt.show()

    sns.jointplot('Durchschnittsalter (Jahre)', 'Durchschnittliches Jahresgehalt (Yen)',data=df_dropped_dataset, kind="kde",color="#fac8be")
    plt.savefig("C:\\Users\\xxx\\Desktop\\xbrlReport\\jointplot_2.png ")
    plt.show()

    sns.jointplot('Durchschnittsalter (Jahre)', 'Durchschnittliche Dienstjahre (Jahre)',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"] == "Informations- und Kommunikationsindustrie"]
    df_info_sortby_salary = df_info.sort_values('Durchschnittliches Jahresgehalt (Yen)')[-50:]
    df_info_label_list_sortby_salary=df_info_sortby_salary['Name der Firma'].tolist()

    plt.figure(figsize=(15, 12))
    ax =sns.barplot(x="Name der Firma", y="Durchschnittliches Jahresgehalt (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("Name der Firma", fontsize=12)
    plt.ylabel("Durchschnittliches Jahresgehalt (Yen)",fontsize=18)

    plt.title("Informations- und Kommunikationsindustrie:Durchschnittliches Jahresgehalt 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. Zur Analyse

Dieser Artikel konzentrierte sich auf die Visualisierung von Rohdaten, aber mit einer kleinen Änderung dieser Daten ist es möglich, das Unternehmen zu analysieren. Wenn beispielsweise "durchschnittliche altersdurchschnittliche Dienstjahre" etwa 25 Jahre alt sind, ist bekannt, dass es nur wenige Rentner und Angestellte in der Mitte der Karriere gibt, so dass es möglich ist, solche Unternehmen zu extrahieren. Durch Hinzufügen des Unternehmensalters kann hier eine eingehendere Analyse durchgeführt werden. (Das Alter des Unternehmens kann aus XBRL-Daten mit dem Elementnamen "jpcrp_cor: FiscalYearCoverPage" ermittelt werden.) Unternehmen mit hohem Unternehmensalter und durchschnittlichen Dienstjahren über 42 Jahre altern. In Zukunft wird das Durchschnittsalter plötzlich sinken, wenn ältere Menschen in großen Mengen in den Ruhestand gehen, was zu einem plötzlichen Anstieg des "Nettoeinkommens" führt. (Nicht weil die Gewinnspanne des Unternehmens gestiegen ist, sondern weil der Gesamtbetrag des gezahlten Gehalts gesunken ist, was die höchsten "Vertriebsmanagementkosten" darstellt.) In Zukunft wird die Gewinnspanne aller Unternehmen mit abnehmender Altersverteilung der Mitarbeiter steigen. Es ist interessant, die Verteilung der Mitarbeiter zu betrachten, nicht nur die Veränderungen der Gewinnmargen. Darüber hinaus ist es auch möglich, die Zeitreihen von "Umsatz" der Anzahl der Mitarbeiter (Durchschnitt der vorherigen Amtszeit und dieser Amtszeit) und "Anzahl der Mitarbeiter" zu vergleichen und zu analysieren. Dies liegt daran, dass der Pro-Kopf-Umsatz aufgrund des Restrukturierungseffekts besser gesehen werden kann. Auf diese Weise hat die Möglichkeit, Mitarbeiterinformationen von EDINET zu erhalten, das Spektrum der Unternehmensanalyse erweitert. Wenn Sie an etwas anderem als dem hier Beschriebenen interessiert sind, führen Sie bitte eine Umfrage durch.

4. Kontaktinformationen

Bei Fragen zu diesem Artikel wenden Sie sich bitte an die folgende E-Mail-Adresse. e-mail:[email protected] (Natürlich sind auch Kommentare zu Qiita willkommen)

Diese E-Mail-Adresse ist die Kontaktstelle für Anfragen zum Entwicklungsausschuss von XBRL Japan, der den Artikel über Qiita schreibt. Ich werde. Daher können wir je nach Inhalt keine allgemeinen Anfragen zur Organisation beantworten. Bei technischen Fragen, Meinungen, Anfragen, Ratschlägen usw. zu XBRL können Sie sich jedoch gerne an uns wenden. Bitte beachten Sie, dass die Beantwortung einige Zeit in Anspruch nehmen kann, da die Ausschussmitglieder Freiwillige sind.

Recommended Posts

Lassen Sie uns die Beziehung zwischen Durchschnittsgehalt und Industrie mit XBRL-Daten und Seaborn visualisieren! (7/10)
[Statistik] Lassen Sie uns die Beziehung zwischen der Normalverteilung und der Chi-Quadrat-Verteilung visualisieren.
Lassen Sie uns automatisch Mitarbeiterinformationen wie das Durchschnittsgehalt aus den von EDINET (5/10) veröffentlichten XBRL-Daten extrahieren.
Die subtile Beziehung zwischen Gentoo und Pip
Über die Beziehung zwischen Git und GitHub
Beziehung zwischen Firestore- und Go-Datentypkonvertierung
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
Lassen Sie uns die Matrix transponieren und die Matrizen mit numpy multiplizieren.
Untersuchung des Zusammenhangs zwischen Eisausgaben und Temperatur
Untersuchen Sie die Beziehung zwischen TensorFlow und Keras in der Übergangszeit
Lernen von Beziehungsdaten mit Numpy und NetworkX (Spektralclustering)
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Visualisieren Sie Daten und erfassen Sie gleichzeitig die Korrelation
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Ich habe die Datenzuordnung zwischen ArangoDB und Java untersucht
Lassen Sie uns zwischen Datenstrukturmanipulation und Logikcode unterscheiden.
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Lassen Sie uns die von der Präfektur Shimane veröffentlichten Niederschlagsdaten visualisieren
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
Lassen Sie uns word2vec mit Chainer verschieben und den Lernfortschritt sehen