77902
初心者ですが、企業の財務諸表分析のためにPythonコードを勉強しております。

[pythonで財務分析:EDINETから四半期ごとの情報を取得する](https://kiseno-
log.com/2020/08/23/python%E3%81%A7%E8%B2%A1%E5%8B%99%E5%88%86%E6%9E%90edinet%E3%81%8B%E3%82%89%E5%9B%9B%E5%8D%8A%E6%9C%9F%E6%B1%BA%E7%AE%97%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/)

上記のwebサイトを参考に、まずサンプル（企業名などもサンプルと同じままにしています）と同じように自分のPCでデータが得られるか検証しているのですが、下記のエラーが出てしまいます。

**エラーメッセージ:**

```

    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-10-a5273144dfbe> in <module>
        142 
        143 # XBRLからデータ形式を変換
    --> 144 df_dic = zip_to_df(file_path_list)
        145 
        146 # 営業利益部分抽出
    
    NameError: name 'file_path_list' is not defined
    
```

コードを一つずつ確認すると、  
#zipファイルパスのリストの作成  
の部分でfile_path_listは作成しているつもりなのですが、なぜnot definedと出てしまうか分からず苦戦しております。  
分かる方がいらっしゃいましたら、教えていただけますでしょうか（初心者でも分かるようにしてくれると嬉しいです）。  
宜しくお願い致します。

**ソースコード:**

```

    from datetime import date,timedelta
    import requests
    import json
    from zipfile import ZipFile
    import os
    import sys
    import pandas as pd
    import glob
    #XBRLをpython形式に変換するライブラリのフォルダパス
    sys.path.append(r'C://Users//junji//AppData//Roaming//Microsoft//Windows//Start Menu//Programs//Python 3.9')
    from xbrl_proc import read_xbrl_from_zip
    import urllib3
    from urllib3.exceptions import InsecureRequestWarning
    urllib3.disable_warnings(InsecureRequestWarning)
    
    def get_list(start,end,company_list):
        '''指定した期間、報告書種類、会社で報告書を取得し、取得したファイルのパスの辞書を返す'''
        #取得期間の日付リストを作成
        day_term = [start + timedelta(days=i) for i in range((end - start).days)]
        
        #データ抜出時に使用する、有価証券報告書および四半期報告書のコードの設定
        ordinance_code = "010"
        form_code_quart ="043000" # 四半期報告書
        form_code_securities ="030000" #有価証券報告書
        
        #EDINETのAPIで、書類一覧を取得し、各日ごとに必要な書類の項目を抜き出し
        quart_list =[] # 四半期報告書のリスト
        securities_list =[] # 四半期報告書のリスト
    
        print('EDINETへのアクセスを開始')
        for i,day in enumerate(day_term):
            url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"
            params = {"date": day, "type": 2}
            
            #進捗表示
            if i % 50 == 0:
                print(f'{i}日目：{day}を開始')
            
            #EDINETから1日の書類一覧を取得
            res = requests.get(url, params=params, verify=False)
            
            #必要な書類の項目を抜き出し
            if res.ok:
                json_data = res.json()
                
                for data in json_data['results']:
                    #指定した会社の指定した書類を抜き出し
                    if data['ordinanceCode'] == ordinance_code and data['formCode'] == form_code_quart and data['filerName'].replace('株式会社', '') in company_list:
                        quart_list.append(data)
                    elif data['ordinanceCode'] == ordinance_code and data['formCode'] == form_code_securities and data['filerName'].replace('株式会社', '') in company_list:
                        securities_list.append(data)
                        
            else:
                print(f'アクセス失敗かも{day}')
        
        list_dic = {'四半期報告書':quart_list,'有価証券報告書':securities_list} 
        
        return list_dic
    
    def get_zip(list_dic,quart_dir_path,securities_dir_path):
        '''取得したいデータをzipファイルで取得してファイルパスのリストを返す'''
        
        dir_path_dic = {'四半期報告書':quart_dir_path,'有価証券報告書':securities_dir_path}
        file_path_dic = {'四半期報告書':[],'有価証券報告書':[]} # ダウンロードした有価証券報告書のパスを格納する辞書   
    
        for key in list_dic.keys():
            
            #すでにzipをDLしている場合のため、既存のdocIDリストを取得
            files = os.listdir(dir_path_dic[key])
            existing_docID_list = [file.split('.')[0].split('_')[1] for file in files if os.path.isfile(os.path.join(dir_path_dic[key], file))]
            
            print(f'{key}ファイルのDLを開始')
            for i, doc in enumerate(list_dic[key]):
                #zipファイルパスのリストの作成
                file_name = doc['filerName'].replace('株式会社', '') + '_' + doc['docID']
                file_path =  os.path.join(dir_path_dic[key], file_name + ".zip")
                file_path_dic[key].append(file_path)
                
                #所有していないファイルの場合はDLを行う
                if doc['docID'] not in existing_docID_list:
                    #ファイルを取得
                    url_zip = "https://disclosure.edinet-fsa.go.jp/api/v1/documents/" + doc['docID']
                    params_zip = {"type": 1}
    
                    #進捗表示
                    if i % 100 == 0:
                        print(f'{i}ファイル目を開始')
    
                    #データのDL
                    res_zip = requests.get(url_zip, params=params_zip, verify=False, stream=True)
    
                    #zipとして保存
                    if res_zip.status_code == 200:
                        with open(file_path, 'wb') as f:
                            for chunk in res_zip.iter_content(chunk_size=1024):
                                if chunk:
                                    f.write(chunk)
                                    f.flush()
    
        return file_path_dic
    
    def zip_to_df(file_path_dic):
        '''ダウンロードしたzipをdfに変換して各会社のdicにして返す'''
        
        all_df_dic = {}
        for key in file_path_dic.keys():
            print(f'{key}データの変換を開始')        
            df_dic = {}
            for i,company_zip in enumerate(file_path_dic[key]):
                # 進捗表示
                if i % 100 == 0:
                    print(f'{i}ファイル目を開始')
                company_name = os.path.splitext(os.path.basename(company_zip))[0].split('_')[0]
                doc_name = os.path.splitext(os.path.basename(company_zip))[0].split('_')[1]
    
                if company_name not in df_dic:# 会社が辞書中に存在しない場合
                    df_dic[company_name] = {}
                    df_dic[company_name] = read_xbrl_from_zip(company_zip)[0]
                elif company_name in df_dic:# 会社が辞書中に存在する場合
                    df_dic[company_name] = pd.concat( [df_dic[company_name],read_xbrl_from_zip(company_zip)[0]])
            
            all_df_dic[key] = df_dic
    
        return all_df_dic
    
    #会社のリストを読み込み
    company_list = ['ホウスイ','カネコ種苗']
    
    #取得期間の設定：直近n日分
    delta_day = 100
    end = date.today()
    start = date.today() - timedelta(days=delta_day)
    
    #ダウンロードしたデータのフォルダパス
    quart_dir_path = r'C://Users//junji//Desktop//Kabu//CompanyXBRL2//'
    securities_dir_path = r'C://Users//junji//Desktop//Kabu//CompanyXBRL2//'
    
    
    #XBRLデータの取得 
    list_dic = get_list(start,end,company_list)
    file_path_dic = get_zip(list_dic,quart_dir_path,securities_dir_path)
    
    #XBRLからデータ形式を変換
    df_dic = zip_to_df(file_path_list)
    
    #営業利益部分抽出
    quart = all_df_dic['四半期報告書']['カネコ種苗']
    quart_oi = quart[(quart['tag'] == 'OperatingIncome') & (quart['context'] == 'CurrentYTDDuration')]
    quart_oi = quart_oi[['第N期','終了日','値']].sort_values('終了日')
    quart_oi = quart_oi.rename({'終了日':'Date','値':'OperatingIncome'},axis=1).reset_index(drop=True)
    quart_oi['type'] = '四半期報告書'
    
    securities = all_df_dic['有価証券報告書']['カネコ種苗']
    securities_oi = securities[(securities['tag'] == 'OperatingIncome') & (securities['context'] == 'CurrentYearDuration')]
    securities_oi = securities_oi[['第N期','終了日','値']].sort_values('終了日')
    securities_oi = securities_oi.rename({'終了日':'Date','値':'OperatingIncome'},axis=1).reset_index(drop=True)
    securities_oi['type'] = '有価証券報告書'
    
    oi_df = pd.concat([quart_oi,securities_oi]).sort_values('Date').reset_index(drop=True)
    
    #各四半期ごとの営業利益や、前年同期比の売上高営業利益率の変化を計算
    oi_df['tempOperatingIncome'] =  oi_df['OperatingIncome'] - oi_df['OperatingIncome'].shift(1)
    oi_df['CalcOperatingIncome'] = oi_df['OperatingIncome'].mask(oi_df['第N期'] == 0, oi_df['tempOperatingIncome'])
    oi_df['CalcOperatingIncome'] = oi_df['CalcOperatingIncome'].mask(oi_df['第N期'] == 3, oi_df['tempOperatingIncome'])
    oi_df['CalcOperatingIncome'] = oi_df['CalcOperatingIncome'].mask(oi_df['第N期'] == 2, oi_df['tempOperatingIncome'])
    oi_df['CalcOperatingIncome_YoYchangerate'] = oi_df['CalcOperatingIncome'] / oi_df['CalcOperatingIncome'].shift(4)
    
    #棒グラフで可視化
    oi_df.plot.bar(x='Date', y='CalcOperatingIncome', rot=45)
    
    oi_df.plot.bar(x='Date', y='CalcOperatingIncome_YoYchangerate', rot=45)
    
```
CC BY-SA 4.0
2021-07-01T07:13:09.343
77901
2021-07-01T07:29:13.510
2021-07-01T07:19:32.910
3060
47120
question
python edinet
Pythonのコードで定義したつもりが、not definedと表示される
"zipファイルパスのリストの作成" が含まれているのは `get_zip` の中であり、これを呼び出した結果は以下の `file_path_dic`
で通り受け取っているように見えます。

```

    file_path_dic = get_zip(list_dic,quart_dir_path,securities_dir_path)
    
```

`zip_to_df` の引数に適切な引数を設定すればよさそうです。

```

    df_dic = zip_to_df(file_path_dic)
    
```
CC BY-SA 4.0
2021-07-01T07:29:13.510
77902
2021-07-01T07:29:13.510
3060
77901
answer