인코딩 시 베이직모델, 레이블인코딩, 원핫인코딩 등 여러가지가 있는데 제일 좋은건 전부 비교해서 결과를 따져보고 선택하는거지만 그런거에 자신이 없다고 할때 하나만 선택해서 해도 만점받는데 문제없나요? 만약 문제없다면 어떤걸로 선택해서 인코딩하는게 가장 무난할지 추천부탁드립니다. 모델 선택할 때 랜덤포레스트, xgboost 등 여러가지가 있는데 랜덤포레스트 하나만 밀어도 만점받는데 문제없을까요?
해당 강의에서 진행한 postgres_loader DAG를 돌리면 자꾸 sample_table이 존재하지 않는다는 에러가 발생해서 질문 남깁니다. 도커에서 설치해서 사용하고 있고 postgres 설치가 잘못된 것 같은데 다른 질문들 보면서 이것저것 수정을 해서 더 잘 모르겠습니다 ㅠㅠ +) postgres 설치부터 잘못된 것 같은데.. 해결방법 좀 알려주세요!
안녕하세요 예시문제 작업형1 강의 듣고 있는데 이것저것 연습겸 클릭하고 있는데 문제풀이에서 하다가 답안 메뉴 다시 갔다가 다시 문제풀이로 돌아오니 코드 작성한게 다 날라갔더라고요.. 저장버튼이 활성화되지 않던데.. 저장하려면 어떻게 해야하죠? 실제 시험칠때도 문제풀이 저장하는게 가능한지 궁금합니다 감사합니다
안녕하세요 df['고객만족도'].fillna(m)할때 앞에 다시 df['고객만족도'] = ~ 붙이는거랑 df.dropna(subset='근속연수') 앞에 df = ~ 붙이는게 정확하게 붙이는 이유가 이해가 되지 않습니다.. 뭔가 작업을 할떄 앞에 df ~를 다시 붙여준다고 생각하면 될까요? 감사합니다
안녕하십니까 강사님! 자세하게 좋은 정보 알려주심에 항상 감사드립니다!! 제 짧은 지식으로 궁금한 점이 생겨 질문드립니다. 사용자 인증을 구현할때 jwt토큰을 사용하는 방법도 있는 걸로 압니다. jwt토큰도 마찬가지로 signed cookie처럼 암호화(인코딩)해서 헤더에 같이 보내는걸로 알고 있습니다. 두 방식이 비슷하다고 생각하는데 jwt토큰과 signed cookie로 인증하는 차이가 무엇인지 궁금합니다. 짧은 경험상 모든 기술간의 트레이드 오프가 존재했던 거 같은데 jwt토큰과 signed cookie에도 그러한 부분이 있는지 궁금합니다 ! 항상 감사드립니다~
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
강의 따라서 프로젝트를 진행하다가 '출근 가능/불가능 확인 로직'에서 문제를 발견했습니다. 이것저것 시도하다가 드디어 해결해서 과정 공유해봅니다. 기존 코드 /// 기존의 initState() @override void initState() { super.initState(); // (아마도) 이 시점에서 오류 발생 ↓ Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar( title: Text( '오늘도 출근', style: TextStyle(color: Colors.blue, fontWeight: FontWeight.w700), ), centerTitle: true, // 안드로이드 설정 actions: <Widget>[ /// 원래 위치로 돌아오기 버튼 IconButton( onPressed: returnToMyLocation, icon: Icon(Icons.my_location), color: Colors.blue, ), ], ); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<void>( future: checkPermission(), // 위치 권한 묻기 대화상자는 이 시점에 생성됨 builder: (context, snapshot) { if (snapshot.hasError) { return Center(child: Text('${snapshot.error}')); } // 이하 위젯 생성 코드... }, ), ); } /// Future<void> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); /// 활성화되지 않았다면 에러 발생 (앱이 현재 위치를 사용할 수 없으므로) assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 시뮬레이션 상 `checkedPermission`이 위치 권한 허용 상태가 아니면 에러 유도 assert( checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse, '위치 권한을 허용해주세요.', ); } 오류 추적 오류의 원인은 'User denied permissions .. device's location.' 즉, 사용자가 위치 권한을 아직 허용하지 않은 시점에 위치 권한이 필요한 함수를 호출하려고 함. [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: User denied permissions to access the device's location. E/flutter (13339): #0 GeolocatorAndroid.getPositionStream.<anonymous closure> (package:geolocator_android/src/geolocator_android.dart:201:9) E/flutter (13339): #1 Stream.handleError.<anonymous closure> (dart:async/stream.dart:961:16) E/flutter (13339): #2 HandleErrorStream.handleError (dart:async/stream_pipe.dart:303:17) ... #0 에서 이미 getPositionStream().<anonymous closure> 로 추적한 걸로 보아, Geolocator.getPositionStream() 함수 호출 시점에 오류 발생한 것이 분명함. 문제의 원인과 해결책 (일부 ChatGPT의 도움을 받음) 문제의 가장 중요한 핵심은, 처음 앱 실행 시 위치 권한 확인 로직이 완전히 끝나기 전에 위치 권한 허용 이 이루어지지 않으므로, 앱 재시작 이전까지 '사용자 현재 위치 추적 기능'이 활성화되지 않고, 추가로 관련 함수에서 오류 발생 가능성이 있음. 그러므로 checkPermission() 함수는 initState() 에서 최초 한 번만 실행하고, Geolocator.getpositionStream() 함수는 따로 분리하여 checkPermission() 이 정확히 끝난 시점에 실행되도록 로직을 변경함. 1. checkPermission() 의 리턴 타입을 Future<void> 에서 Future<bool> 로 변환 /// 위치 권한 확인 및 부여 함수 Future<bool> checkPermission() async { /// 위치 서비스 활성화 여부 var isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled(); assert(isLocationServiceEnabled, '위치 기능을 활성화하지 않았습니다.'); /// 권한 상태 확인 var checkedPermission = await Geolocator.checkPermission(); if (checkedPermission == LocationPermission.denied) { checkedPermission = await Geolocator.requestPermission(); } /// 위치 권한 허용 여부를 리턴 return checkedPermission == LocationPermission.always || checkedPermission == LocationPermission.whileInUse; } 2. initState() 에서 checkPermission() 과 addSubscription() 함수를 차례로 실행 ( .then() 메소드 활용) @override void initState() { super.initState(); checkPermission().then((permitted) { if (permitted) addSubscription(); }); } /// addSubscriptsion 함수 void addSubscription() { /// 리스너 함수: 출근체크 가능 여부 확인하기 Geolocator.getPositionStream().listen((eventPosition) { // 목적지 위치 var start = defaultLatLng; // 현재 위치 var end = LatLng(eventPosition.latitude, eventPosition.longitude); /// 거리 구하기 var distance = Geolocator.distanceBetween( start.latitude, start.longitude, end.latitude, end.longitude, ); /// 거리가 `boundary` 내부에 들어오는지 확인 setState(() => mayChoolCheck = distance <= boundary); }); } 3. 위젯 재빌드 시 FutureBuilder 의 future 함수 재호출을 방지하기 위해 비동기 결과를 미리 필드로 빼놓기 ChatGPT는 이를 'Cashing Future' 라고 부른다고 함. (이 코드 부분에 중요한 로직이 하나 빠져서 방금 재수정했습니다.) /// 권한 확인 여부 리턴 값 late final Future<bool> permissionFuture; @override void initState() { super.initState(); /// checkPermission()의 결과를 값으로 저장 permissionFuture = checkPermission().then((permitted) { if (permitted) addSubscription(); return permitted; }); } /// 위젯 빌드 @override Widget build(BuildContext context) { /// AppBar: 제목 & 액션 버튼1 var appBar = AppBar(...); return Scaffold( backgroundColor: Colors.white, appBar: appBar, /// 권한 요청을 위한 빌더 body: FutureBuilder<bool>( future: permissionFuture, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting || !snapshot.hasData) { return ColoredBox( color: Colors.blue, child: Center(child: CircularProgressIndicator()), ); } /// snapshot.data가 false 값인 경우는 사용자가 위치 권한 요청을 거부했을 때 if (snapshot.hasError || snapshot.data! == false) { return Center(child: Text('위치 권한을 허용해주세요.\n${snapshot.error}')); } /// 이하 위젯 생성 코드 ... }, ), ); } 이렇게 했을 때 앱 삭제 후 다시 빌드 했을 때, 그리고 재시작 했을 때도 정상적으로 잘 작동했습니다. 코드가 많이 훼손된 느낌도 들긴 하지만.. 나름대로 공부가 돼서 기분은 좋네요. 주저리주저리 쓰느라 정신 없었는데.. 잘 이해가 안 되거나 하고 싶은 피드백이 있다면 꼭 말씀해주세요! 아무쪼록 끝까지 읽어주셔서 감사합니다.
'(귀무가설/대립가설)을 기준으로 검정의 결과를 (채택/기각)중 선택하여 입력하시오' 라는 문장그대로 해석하면 될까요? 예를들어 귀무가설을 기준으로 검정의 결과를 (채택/기각)중 선택하여 입력하시오 -> 귀무가설을 기각할지 채택할지 결정 대립가설을 기준으로 검정의 결과를 (채택/기각)중 선택하여 입력하시오 -> 대립가설을 기각할지 채택할지 결정