[PYTHON] Ich möchte den EDINET-Code und die Wertpapiernummer zuordnen

1 Was ist dieser Artikel?

Angenommen, Sie möchten einen Wertpapierbericht für ein Unternehmen herunterladen. Wenn Sie den EDINET-Code des vom Unternehmen eingereichten Wertpapierberichts kennen, können Sie den im XBRL-Format verfassten Wertpapierbericht über die EDINET-API erhalten. Der Wertpapierbericht im XBRL-Format kann mit einem Browser angezeigt werden. Sobald die XBRL-Datei verfügbar ist, können beispielsweise mithilfe der Scraping-Technologie automatisch die Kapitalquoten von Hunderten von Unternehmen ermittelt werden. Da die Informationen, die die Wertpapiernummer und EDINET abbilden, nicht im Internet veröffentlicht werden, habe ich einen Code erstellt, um sie abzubilden.

Übrigens, was XBRL ist wird hier auf leicht verständliche Weise erklärt.

2 Zuordnen von EDINET CODE und Wertpapiernummer

Verarbeitungsablauf </ b> 99.JPG

2-1 Beziehen Sie die Zuordnungstabelle mit "Wertpapiernummer" und "Firmenname".

Diese Website (Japan Exchange Group) enthält eine Liste der Wertpapiernummern der an der Tokioter Börse notierten Unternehmen. Im CSV-Dateiformat herunterladen. Tun Sie dies manuell.

2-2 Rufen Sie die Zuordnungstabelle "EDINET CODE" und "Firmenname" ab.

Der EDINET-Code ist mit dem Wertpapierbericht verknüpft. Mit anderen Worten, Wertpapierberichten desselben Unternehmens, jedoch in unterschiedlichen Jahren, werden unterschiedliche EDINET-Codes zugewiesen. Darüber hinaus ist die EDINET-API eine Spezifikation, mit der Sie einen Wertpapierbericht erhalten können, der an einem bestimmten Tag </ b> eingereicht wurde. Wenn Sie daher von heute bis zum vergangenen Jahr täglich den "EDINET CODE" und den "Firmennamen" einreichen können, können Sie eine Zuordnungstabelle mit "EDINET CODE" und "Firmenname" aller börsennotierten Unternehmen erstellen.

2-3 Erhalten Sie die Zuordnungstabelle mit "Wertpapiernummer", "EDINET CODE" und "Firmenname".

Zuordnungstabelle von "Wertpapiernummer" und "Firmenname" </ b> und Zuordnungstabelle von "EDINET" und "Firmenname" </ b> Verwenden Sie "Firmenname" als Schlüssel für die beiden oben genannten Zuordnungen Führen Sie die Tabellen zusammen, um eine Zuordnungstabelle für "Wertpapiernummer", "Firmenname" und "EDINET CODE" zu erstellen.

3 Codebuchung

Unten finden Sie den Python-Code, der die oben erläuterte "Wertpapiernummer", "EDINET CODE" und "Firmenname" abbildet.

Bitte stellen Sie die folgenden konstanten Bedingungen ein, bevor Sie den Code </ b> ausführen ・ START_DATE Legen Sie das Startdatum und die Startzeit für die Erfassung der Daten des Unternehmens fest, das den Wertpapierbericht eingereicht hat. ・ END_DATE #Stellen Sie das Enddatum und die Endzeit ein, um die Daten des Unternehmens zu erfassen, das den Wertpapierbericht eingereicht hat -FPATH = 'Geben Sie hier den Pfad der CSV-Datei der Zuordnungstabelle mit "Sicherheitsnummer" und "Firmenname" ein. ' -SPATH = 'Geben Sie hier den Pfad zum Speichern der CSV-Datei der Zuordnungstabelle "EDINET CODE" und "Firmenname" ein. ' -OPATH = 'Lieferung (Zuordnungstabelle von "Wertpapiernummer", "Firmenname" und "EDINET CODE") Geben Sie hier den Pfad zum Speichern der CSV-Datei ein. '

test.py




# -*- coding: utf-8 -*-
import requests
import datetime
import time
import pandas as pd
import os.path
import math
import numpy as np

#Klassendefinition
class YUHO_GET():

    #Konstruktor ... Hier wird die Variable gelesen.
    def __init__(self,start_date, end_date,spath,fpath,sel):
        
        
        self.start_date=start_date
        self.end_date=end_date
        self.spath=spath
        self.fpath=fpath
        self.sel=sel
        
    
        
    #Erhalten Sie für jedes Datum den Firmennamen, die Uhrzeit und den EDIET-Code des Wertpapierberichts.
    def mainproc(self):

        day_list = self.make_day_list() #Eine Funktion, die ein Datum zwischen dem Beginn und dem Ende eines Datums generiert

        securities_report_doc_list = self.make_doc_id_list(day_list) #Erhalten Sie für jedes Datum den Firmennamen, die Uhrzeit und den EDIET-Code des Wertpapierberichts.
        number_of_lists = len(securities_report_doc_list)
        print("number_of_lists:", len(securities_report_doc_list))
        print("get_list:", securities_report_doc_list)
       
        
    #Eine Funktion, die ein Datum zwischen dem Beginn und dem Ende eines Datums generiert
    def make_day_list(self):
        print("start_date:", self.start_date)
        print("end_day:", self.end_date)

        period = self.end_date - self.start_date
        period = int(period.days)
        day_list = []
        for d in range(period):
            day = self.start_date + datetime.timedelta(days=d)
            day_list.append(day)

        day_list.append(self.end_date)

        return day_list

    #Erhalten Sie den Firmennamen und den EDIET-Code des Wertpapierberichts für jedes Datum.
    def make_doc_id_list(self,day_list):
        securities_yuho_list = []
        securities_4hanki_list = []
        com_edi=[]
        for index, day in enumerate(day_list):
            url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"
            params = {"date": day, "type": 2}

            proxies = {
                "http_proxy": "http://username:[email protected]:8080",
                "https_proxy": "https://username:[email protected]:8080"
            }
            #Sie haben auf die EDINET-API zugegriffen und den zum angegebenen Datum eingereichten Dokumenttyp erhalten.
            res = requests.get(url, params=params, proxies=proxies)
            json_data = res.json()
            print(day)

            for num in range(len(json_data["results"])):
                #Abrufen von Informationen zum Dokumenttyp, der von der EDINET-API zurückgegeben wird.
                ordinance_code = json_data["results"][num]["ordinanceCode"]
                form_code = json_data["results"][num]["formCode"]

                 #Wenn es sich um einen Wertpapierbericht handelt, "Verordnung"_code == "010" and form_code == "030000""Bezieht sich auf den Wertpapierbericht.
                if ordinance_code == "010" and form_code == "030000":
                    print('★★★★★★★★★★★★★ Wertpapierbericht ★★★★★★★★★★★★★★★★★')                    
                    #Speichern Sie den Firmennamen in comname
                    comname=json_data["results"][num]["filerName"]
                    #von comname"Co., Ltd."Löschen. Es entspricht dem vorderen und dem hinteren Bestand.
                    comname=comname.split('Co., Ltd.')[0] if comname.split('Co., Ltd.')[0] != '' else comname.split('Co., Ltd.')[-1]
                    #Wenn comname ein Leerzeichen enthält, löschen Sie es
                    comname=comname.split(' ')[-1] if comname.split(' ')[0]=='' else comname
                    
                    com_edi={ 'Name der Firma':comname,
                              'Jahreszeit':json_data["results"][num]["docDescription"],           
                              'EDINET':json_data["results"][num]["docID"],
                             'Abgabedatum':day
                         }
                    

                    securities_yuho_list.append(com_edi)
                    
                                        
            securities_report=securities_yuho_list if self.sel==0 else securities_4hanki_list
            securities_report=pd.DataFrame(securities_report,columns=['Name der Firma','Jahreszeit','EDINET','Abgabedatum'])
            securities_report.to_csv(self.spath)
            
            
                    
        return securities_report                


        
        
    #Funktion, die EDINET der Wertpapiernummer zuordnet
    def edinet_syoken_mapping(self):
        df_all_syokennum = pd.read_csv(self.fpath) #Erhalten Sie die Wertpapiernummern aller an der TSE notierten Aktien.
        df_all_editnum = pd.read_csv(self.spath) #Name der Firma,EDINET-Code lesen
        df_edi_syo=df_all_editnum.loc[:,['Name der Firma','EDINET']]
        df_edi_syo=pd.DataFrame(df_edi_syo,columns=['Name der Firma','EDINET','Code'])                                                     
        df_syoken=df_all_syokennum.loc[:,['Code','Name der Firma']]
              
  
        for i in range(len(df_edi_syo)): 
            #(3)"Name der Firma",「証券番号」表と"Name der Firma"「EDINETコード」表から"Name der Firma"「証券番号」「EDINETコード」のマッピング表を得る。
            code=self.get_syouken_num(df_syoken,df_edi_syo.iloc[i]['Name der Firma'])            
            df_edi_syo['Code'][i]=code

        #Zur Wertpapiernummer".0"Ist gegeben".0"Löschen.
        
        df_edi_syo.set_index("Code",inplace=True)     
        df_edi_syo.to_csv(OPATH)
        df_edi_syo = pd.read_csv(OPATH, index_col=0)
        df_edi_syo.reset_index("Code",inplace=True)        
        df_edi_syo['Code'] = df_edi_syo.apply(lambda x:self.bunri(x),axis=1)
        df_edi_syo.set_index("Code",inplace=True)
        
        #df_edi_Schreiben Sie syo in eine CSV-Datei.
        #print(df_edi_syo)
        df_edi_syo.to_csv(OPATH)
        
    
    #Eine Funktion, die den ganzzahligen Teil und den gebrochenen Teil trennt
    def bunri(self,x):
        return x.Code.split(".")[0]
        
        
    #(3)Erhalten Sie die Wertpapiernummer aus dem Firmennamen.
    def get_syouken_num(self,df,company_name):
        flag=0
       
        try:
            df1=df[df.Name der Firma==str(company_name)]
            meigara_num=df1.iloc[0][0].astype(str)
            
            return  meigara_num
        #Wenn der Firmenname und die Wertpapiernummer nicht zugeordnet werden können, wird NONE zurückgegeben.
        except Exception as e:
            flag='NONE'
            return flag
        
        
##################   MAIN ##################            
            
START_DATE= datetime.date(2019,8,7) #Legen Sie das Startdatum und die Startzeit fest, um die Daten des Unternehmens zu erfassen, das den Wertpapierbericht eingereicht hat.
END_DATE= datetime.date(2020,8,6)   #Legen Sie das Enddatum und die Endzeit fest, um die Daten des Unternehmens zu erfassen, das den Wertpapierbericht eingereicht hat.

SEL=0 # SEL=0:Erwerben Sie einen Wertpapierbericht.


FPATH='Geben Sie hier den Pfad der CSV-Datei der Zuordnungstabelle "Wertpapiernummer" und "Firmenname" ein.' 
SPATH='Geben Sie hier den Pfad zum Speichern der CSV-Datei der Zuordnungstabelle "EDINET CODE" und "Firmenname" ein.'
OPATH='Ergebnisse(Zuordnungstabelle von "Wertpapiernummer", "Firmenname" und "EDINET CODE")Geben Sie hier den Pfad zum Speichern der CSV-Datei ein.'

def main():

    yuho=YUHO_GET(START_DATE,END_DATE,SPATH,FPATH,SEL) #(1)Erstellen Sie eine Instanz. Stellen Sie die Parameter ein.
    yuho.mainproc() #(2)Extrahieren Sie den Firmennamen und EDINET, die den Wertpapierbericht eingereicht haben
    yuho.edinet_syoken_mapping() #(3)Ordnen Sie die Wertpapiernummer und die EDINET-Nummer zu.
    
 
if __name__ == "__main__":
    main()

Recommended Posts