# 1. 조회
# invest_id=228 인 투자자가 투자한 포트폴리오를 모두 조회한다
# PK=228, SK=portfolio#
import boto3
import json
import decimal
from elasticsearch import Elasticsearch
import json
# elastic 연결
cloud_id = 'univ=============================='
username = 'e==========='
password = 'wNl==========='
dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-2')
table = dynamodb.Table('LUCK4_INNOFOREST_DB')
# response = table.scan()
for x in range(0,338): # invest_id를 차례로 조회한다
# 쿼리 조건 설정
partition_key_value = str(x)
sort_key_prefix = 'portfolio#'
# 쿼리 실행
response = table.query(
KeyConditionExpression="#pk = :pkval AND begins_with(#sk, :skval)",
ExpressionAttributeNames={
"#pk": "invest_id",
"#sk": "sort_key"
},
ExpressionAttributeValues={
":pkval": partition_key_value,
":skval": sort_key_prefix
}
)
# 빈 딕셔너리
preferstages={
'seed':0,
'pre-A':0,
'pre-B':0,
'series A':0,
'series B':0,
'series C':0,
'series D':0,
'series E':0,
'series F':0,
'series G':0,
'pre-IPO':0,
'M&A':0,
'지원금':0,
'기타':0,
'주식양수도':0,
'비공개':0
}
# 가져온 데이터 확인
items = response.get('Items', [])
# print(items)
# ** 같은 회사에 중복 횟수 세기
invest_again_count=0
invest_count=0
for item in items: # 조회된 여러개의 portfolio를 순차적으로 확인한다
# print(item)
investor_name=item['투자사 이름']
# 문자열에서 '[', ']' 제거하고 공백 기준으로 분할하여 리스트로 변환
invest_stages_str = item['투자 단계'].strip('[]')
invest_stages_list = [stage.strip("'") for stage in invest_stages_str.split(", ")]
# 문자열에서 '[', ']' 제거하고 공백 기준으로 분할하여 리스트로 변환
invest_dates_str = item['투자일'].strip('[]')
invest_dates_list = [stage.strip("'") for stage in invest_dates_str.split(", ")]
# print(invest_stages_list)
# print(invest_dates_list)
invest_count+=1
if(len(invest_stages_list)==2):
invest_again_count+=2
for i in range(len(invest_stages_list)):
stage_name= invest_stages_list[i].replace(" (추정)","")# 전처리와 stage 조회
year=int(invest_dates_list[i][2:4])
day=int(invest_dates_list[i][5:7])
preferstages[stage_name]+=year*day # update
if(invest_count==0):
mbti_3=0
else:
mbti_3=invest_again_count/invest_count
# print(preferstages)
item1={
# 'invest_id': str(x), # 'ID'는 DynamoDB 테이블의 기본 키(primary key)입니다.
# 'sort_key':"preferstages#"+investor_name,
# '투자사 이름':investor_name,
'seed':preferstages['seed'],
'pre-A':preferstages['pre-A'],
'pre-B':preferstages['pre-B'],
'pre-all':int(preferstages['pre-A'])+int(preferstages['pre-B']),
'series A':preferstages['series A'],
'series B':preferstages['series B'],
'series C':preferstages['series C'],
'series A-C':int(preferstages['series A'])+int(preferstages['series B'])+int(preferstages['series C']),
'series D':preferstages['series D'],
'series E':preferstages['series E'],
'series F':preferstages['series F'],
'series G':preferstages['series G'],
'series D-G':int(preferstages['series D'])+int(preferstages['series E'])+int(preferstages['series F'])+int(preferstages['series G']),
'pre-IPO':preferstages['pre-IPO'],
'M&A':preferstages['M&A'],
'지원금':preferstages['지원금'],
'기타':preferstages['기타'],
'주식양수도':preferstages['주식양수도'],
'비공개':preferstages['비공개'],
'extra-all':int(preferstages['지원금'])+int(preferstages['기타'])+int(preferstages['주식양수도'])+int(preferstages['비공개'])
}
# table.put_item(Item=item1)
print(item1)
# mbti는 별도로 sort key 설정
item2={
'invest_id':investor_name,
'sort_key':"mbti#"+str(x),
'투자사 이름':investor_name,
'MBTI_1':item1,
'MBTI_3':decimal.Decimal(str(mbti_3))
}
print(item2)
# table.put_item(Item=item2)
es = Elasticsearch(
cloud_id=cloud_id,
basic_auth=(username, password),
)
es.index(index='luck4_investor_mbti', id=str(x), document=item2)
# break