문제2를 풀다가 보니, 초기 데이터프레임 상태에서 1. 주어진 데이터에서 결측치가 30%이상 되는 컬럼을 찾고 해당 컬럼에 결측치가 있는 데이터(행)을 삭제함. --> 1 번 문제를 처리하고나면, 전체적인 결측치 상태가 달라집니다. 2. 그리고 30% 미만, 20%이상인 결측치가 있는 컬럼은 최빈값으로 대체하고 1번 처리하고 난 후 2번 문제에 해당하는 조건의 컬럼은 없게 되는데, 이런 경우 1번 처리된 결과가 아닌 초기 데이터프레임 상태에 대해 문제를 풀어야 하는거죠? 선생님 풀이도 초기 상태를 고려하여 풀이된 것 같습니다. 시험에서도 이렇게 하면 되는거죠?
한 번에 끝내는 AI 에이전트 개발 올인원 (w. LangGraph, Google ADK, CrewAI)
4강에서, 제공해주신 환경파일을 복사한 후 "uv sync"를 실행하면 다음과 같은 에러가 발생합니다. 에러메세지에 따라 MSVC Build Tool도 다운받아 설치하였지만 동일한 에러가 반복됩니다. 현재 python version이 3.13.7을 사용하고 있습니다. == 에러 메세지 == C:\Proj\agent-atoz\1-1_chatbot_agent>uv sync Using CPython 3.13.7 interpreter at: C:\Python\Python313\python.exe Creating virtual environment at: .venv Resolved 221 packages in 1ms × Failed to build chroma-hnswlib==0.7.6 ├─ ▶ The build backend returned an error ╰─ ▶ Call to setuptools.build_meta.build_wheel failed (exit code: 1) [stdout] running bdist_wheel running build running build_ext building 'hnswlib' extension [stderr] error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ hint: This usually indicates a problem with the package or the build environment. help: chroma-hnswlib (v0.7.6) was included because agent-a-to-z (v0.1.0) depends on crewai (v0.177.0) which depends on chromadb (v0.5.23) which depends on chroma-hnswlib
[색션3. 작업형1 판다스]의 Section9. 데이터 추가/변경에서 행을 추가할 때는 df .loc[...] 이용해서 하는데 Section5. 새로운 컬럼(열) 추가에서는 그냥 df ['new'] = .... 로 추가를 하더라구요. 이 둘의 차이가 있을까요? 제가 이해한 것은 열을 추가할 때는 df ['new'] = 또는 df.loc[ , 'new'] = 행을 추가할 때는 df.loc['new'] = 이렇게 쓸 수 있고 loc를 사용하면 각각의 데이터를 넣을 수 있지만, 사용하지 않는 경우(Section5)는 일괄적으로 같은 값이 들어간다..인데 맞는지 궁금합니다!
import time from concurrent import futures WORK_LIST = [1000000, 10000000, 100000000, 1000000000] def sum_number(n): return sum(range(1, n + 1)) def main(): start_time = time.time() futures_list = [] with futures.ThreadPoolExecutor() as excecutor: for work in WORK_LIST: future = excecutor.submit(sum_number, work) futures_list.append(future) print(f"Schduled Work: {work} | {future}") print() result = futures.wait(futures_list, timeout=5.0) print(result) end_time = time.time() - start_time print(f"Excecute Time: {end_time:.2f}s / Result: {result}") if __name__ == '__main__': main() 현재 문제점은 최종 출력 시간이 12초정도 걸리는데 중간에 5초 wait 후 print(result)가 호출되는 것이 아니라 12초 후에 아래 코드가 실행될 때 함께 실행되며 모두 정상적으로 finished returned int로 나옵니다. print(f"Excecute Time: {end_time:.2f}s / Result: {result}") 터미널 출력 결과: DoneAndNotDoneFutures(done={<Future at 0x2545b19e780 state=finished returned int>, <Future at 0x2545b123b10 state=finished returned int>, <Future at 0x2545b16f230 state=finished returned int>, <Future at 0x2545b123390 state=finished returned int>}, not_done=set()) Excecute Time: 11.80s / Result: DoneAndNotDoneFutures(done={<Future at 0x2545b19e780 state=finished returned int>, <Future at 0x2545b123b10 state=finished returned int>, <Future at 0x2545b16f230 state=finished returned int>, <Future at 0x2545b123390 state=finished returned int>}, not_done=set())
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님! 강의 정말 잘 수강하고 있습니다. 선생님 덕분에 기본기가 탄탄해지는 것 같아서 감사드립니다. 27강(댓글 무한 depth - CUD API 구현 & 테스트 데이터 삽입 Comment Response 관련 질문) - 24분 가량에서 Comment V2 생성을 위한 정적 팩토리 메소드의 경우 CommentResponse 책임으로 넣으셨는데, 굳이 책임을 CommentResponseV2로 넣을 정도로 큰 부분이 아니기에 하나로 넣으신건지, 아니면 프로젝트 규모적으로 보았을때 굳이 V2 Response를 생성할 정도의 규모가 아니기에 따로 만드시지 않고 하나의 Response 객체로 사용하신 것인지 궁금합니다. 나중에 프로젝트 아키텍칭을 할 때 해당 내용을 기억하기위해 질문드리고자 합니다. 감사합니다.
안녕하세요 딩코딩코님! 수업 감사히 듣고있습니다! 아래 코드에서 트랜잭션 범위를 최소화하기 위해 1. 기존 서비스로 이벤트 참가 처리 메서드에만 @Transactional이 붙여져 있습니다. 이미 커밋이 된 상태이기 때문에, 2. 외부 API 호출이 실패해서 RuntimeException 예외를 던져도 “내 서비스”의 DB에는 “참가자 수 증가”와 “참가자 정보 저장”이 된 상태일 것으로 생각되는데, 이 경우, 아래 두가지 옵션 중 선택하는 것이 좋은 방법인지 트랜잭션 범위를 2. 까지 늘린다. 외부 API 호출 실패 시 “참가자 수 감소”, “참가자 정보 삭제” 로직을 추가한다. 아니면, 더 좋은 옵션이 있는지 궁금하여 질문드리게 됐습니다! public class ImprovedEventJoinWithExternalApiUpdateFacade { private static final String TEST_PHONE_NUMBER = "01012341234"; private final EventExternalUpdateService eventJoinService; private final ExternalEventApi externalEventApi; private final ApplicationEventPublisher eventPublisher; public void joinEvent(Long eventId, Long memberId) { // 1. 기존 서비스로 이벤트 참가 처리 EventWithLockParticipant participant = eventJoinService.joinEventWithTransaction(eventId, memberId); // 2. 외부 API 호출 ExternalEventResponse response = externalEventApi.registerParticipant( eventId, memberId, participant.getEvent().getName() ); if (!response.isSuccess()) { throw new RuntimeException("외부 API 호출 실패: " + response.getErrorMessage()); } // 3. 외부 API 응답으로 참가자 정보 업데이트 eventJoinService.updateExternalId(participant, response.getExternalId()); // 4. 이벤트 발행 (트랜잭션 커밋 후 실행됨) eventPublisher.publishEvent(new EventJoinCompletedEvent( eventId, participant.getEvent().getName(), TEST_PHONE_NUMBER )); } }
Policy Network(Q)와 일반적인 Q-learning 문제에서의 behaviour policy(b)가 각자 하는 역할이 비슷한거 같은데, 만약 틀리다면 추가적인 설명을 부탁드려도 될까요? 왜냐하면, '탐험'의 성격?을 각각의 net과 policy가 수행한다고 생각했습니다. 우선 network관점에서는 특정 행동 결정 규칙에 따라 weight를 형성하는데 이때 그리디 action에 대한 value를 추정(max함수)하는 target network에 비해선 '활용'보다는 '탐험'을 하고 있다고 생각합니다 -> 행동 규칙에 따라 transition을 입력으로 받아 weight를 업데이트 하기 때문. 이로 인해 일반적인 Q-learning에서의 b도 max를 출력하는 target policy, pi대신 e-그리디 정책으로 일정 확률 e로 모든 행동을 선택할 수 있는 기믹을 활용하여 '탐험'을 하기 때문에 위와 같은 생각을 하였습니다.