manatoboys's picture
appの36
2d2be79
from src.get_doc_id import GetDocID
from datetime import date, timedelta
import pandas as pd
import os
import warnings
from src.get_stock_code import StockCode_getter
from src import group_classification
from src.myLogger import set_logger
from answers import search, group2_classification
import csv
import openpyxl
from src import group1_scoring, group2_scoring, group3_scoring, group4_scoring
# ログ設定を初期化
logger = set_logger("my_app", level="INFO")
edinet_api_key = os.getenv("EDINET_API_KEY")
# 警告を特定のものに限定する
warnings.filterwarnings('ignore', category=DeprecationWarning)
def find_docID(security_code):
df = pd.read_csv('./data/csv/edinet_df.csv')
filtered_df = df[df['証券コード'] == security_code]
# Check if any rows were found
if not filtered_df.empty:
# Get the 'docID' from the filtered DataFrame
docID = filtered_df.iloc[0]['docID']
return docID
else:
return -1
def find_ir(security_code):
docID = find_docID(security_code)
if docID != -1 or docID is not None:
PDF = "https://disclosure2dl.edinet-fsa.go.jp/searchdocument/pdf/" + str(docID) + ".pdf"
return PDF
def ph2_group_classification(company_name):
group, related_url_list, unrelated_url_list, other_url_list = search(company_name)
logger.info(f'{company_name}: {group}')
if group == 'Group 1-1':
scoring_result, url = group1_scoring.scoring(company_name)
logger.info(f'Scoring result: {scoring_result}')
elif group == 'Group 3':
scoring_result, url = group3_scoring.scoring(company_name)
logger.info(f'Scoring result: {scoring_result}')
elif group == 'Group 1-2':
path = 'data/Group1-2_result.csv'
scoring_result = []
with open(path, mode='a', newline='') as file:
row = [company_name, group, related_url_list]
writer = csv.writer(file)
writer.writerow(row)
else:
path = 'data/Group5_result.csv'
scoring_result = []
with open(path, mode='a', newline='') as file:
row = [company_name, group, related_url_list]
writer = csv.writer(file)
writer.writerow(row)
return group, related_url_list, unrelated_url_list, other_url_list, scoring_result
def init_csv():
path1 = 'data/Classification_result.csv'
header = ['企業名', 'Group', '関連URL', '関連無しURL', '開けなかったURL']
with open(path1, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header)
# scoring_tier1-1.csv 初期化
path = 'data/Group1-1_result.csv'
header1_1 = ['企業名', "グループ名", '脱炭素言及内容', '関連URL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header1_1)
# scoring_tier1-2.csv 初期化
path = 'data/Group1-2_result.csv'
header1_2 = ['企業名', "グループ名", '関連URL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header1_2)
# scoring_tier2.csv 初期化
path = 'data/Group2_result.csv'
scoringList_Group2 = [
'再生可能エネルギーを使用している',
'太陽光発電を行っている',
'風力発電を行っている',
'バイオマスエネルギーの使用をしている',
'その他の再生可能エネルギーを使用している',
'その他の再生可能エネルギーの例',
'エネルギー使用量の削減を行っている',
'電気自動車の利用',
'暖房や給湯などでヒートポンプを利用している',
'その他の方法でエネルギー使用量の削減を行っている',
'その他のエネルギー使用量の削減の例'
]
header2 = ['企業名', 'グループ分類'] + scoringList_Group2 + ['スコア', '関連ありURL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header2)
# scoring_tier3.csv 初期化
path = 'data/Group3_result.csv'
scoringList_Group3 = [
'再生可能エネルギーを使用している',
'太陽光発電を行っている',
'風力発電を行っている',
'バイオマスエネルギーの使用をしている',
'その他の再生可能エネルギーを使用している',
'その他の再生可能エネルギーの例',
'エネルギー使用量の削減を行っている',
'電気自動車の利用',
'暖房や給湯などでヒートポンプを利用している',
'その他の方法でエネルギー使用量の削減を行っている',
'その他のエネルギー使用量の削減の例'
]
header3 = ['企業名', 'グループ分類'] + scoringList_Group3 + ['スコア', '関連ありURL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header3)
path = 'data/Group4_result.csv'
scoringList_Group4 = [
'再生可能エネルギーを使用している',
'太陽光発電を行っている',
'風力発電を行っている',
'バイオマスエネルギーの使用をしている',
'その他の再生可能エネルギーを使用している',
'その他の再生可能エネルギーの例',
'エネルギー使用量の削減を行っている',
'電気自動車の利用',
'暖房や給湯などでヒートポンプを利用している',
'その他の方法でエネルギー使用量の削減を行っている',
'その他のエネルギー使用量の削減の例'
]
header4 = ['企業名', 'グループ分類'] + scoringList_Group4 + ['スコア', '関連ありURL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header4)
# scoring_group5.csv 初期化
path = 'data/Group5_result.csv'
header5 = ['企業名', "グループ名", '関連URL']
with open(path, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(header5)
return (header1_1, header1_2, header2, header3, header4, header5)
def main(company_name, docID):
# # =====初回のみ実行(有価証券報告書の各情報取得)====
# if not os.path.exists("./data/csv/edinet_df.csv"):
# today = date.today()
# one_year_ago = today - timedelta(days=365)
# gd = GetDocID(start_date=one_year_ago, end_date=today, edinet_api_key=edinet_api_key)
# edinet_df = gd.create_docid_df()
# edinet_df.to_csv("./data/csv/edinet_df.csv",index=False)
# # ==========================================
logger.info(f"{company_name} docID: {docID}")
if docID != -1:
# docID += "0"
# PDF = find_ir(docID)
PDF = "https://disclosure2dl.edinet-fsa.go.jp/searchdocument/pdf/" + str(docID) + ".pdf"
logger.info(f'{company_name} 有価証券報告書: {PDF}')
result = group_classification.main(PDF)
if result == '(1, 1)':
group = 'Group 4'
logger.info(f'{company_name}: Group 4')
related_url_list = PDF
scoring_result, urls = group4_scoring.scoring(company_name)
unrelated_url_list = ' '
other_url_list = ' '
return group, related_url_list, unrelated_url_list, other_url_list, scoring_result
elif result == '(1, 0)':
url = [PDF]
group, related_url_list, unrelated_url_list, other_url_list = group2_classification(company_name)
logger.info(f"related_url_list: {related_url_list}")
if isinstance(related_url_list, list):
related_url_list += url
else:
related_url_list = [PDF]
logger.info(f'{company_name}: {group}')
if group == 'Group 2':
scoring_result, urls = group2_scoring.scoring(company_name)
logger.info(f'Scoring result: {result}')
else:
scoring_result = []
path = 'data/Group1-2_result.csv'
with open(path, mode='a', newline='') as file:
row = [company_name, group, related_url_list]
writer = csv.writer(file)
writer.writerow(row)
return group, related_url_list, unrelated_url_list, other_url_list, scoring_result
else:
return ph2_group_classification(company_name)
else:
return ph2_group_classification(company_name)
if __name__ == "__main__":
# 企業リストを分類し、コンソールに分類結果を出力
# company_list = ["日本石油販売株式会社(D&Dstudio)"]
# for company_name in company_list:
# logger.info(main(company_name))
# print("==========\n")
# data/会社情報.xlsxが企業リストで企業リストを分類し、csvファイルに出力
stock_code_getter = StockCode_getter()
_, _, _, _, _, _ = init_csv()
path = 'data/Classification_result.csv'
workbook = openpyxl.load_workbook('data/test_data.xlsx')
sheet = workbook.active
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=2, max_col=2):
for cell in row:
company_name = cell.value
docID = stock_code_getter.get_stock_code(company_name)
group, related_url, unrelated_url, other_url, scoring_result = main(company_name, docID)
data = [company_name, group, related_url, unrelated_url, other_url]
with open(path, mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow(data)
print("==========\n")
# 一時保存用pdfの削除
file_path = 'copy.pdf'
if os.path.exists(file_path):
os.remove(file_path)