CLUSTERED INDEX의 내용을 학습하다 보니, PRIMARY KEY가 단순히 CLUSTERED INDEX 세팅과 NOT NULL, UNIQUE의 옵션 설정을 한번에 해주는 것 뿐이라고 생각이 듭니다.. 제가 생각하는 것과는 달리 PRIMARY KEY만의 추가적인 차이점이 있을까요?
파이썬 알고리즘 트레이딩 파트2: Interactive Brokers API를 활용한 실시간 알고리즘 트레이딩
안녕하세요, docker 실습을 같이 해보려고 했는데 문제가 있습니다. Dockerfile FROM continuumio/miniconda3:latest RUN mkdir -p /quant 이미지 빌드 후 docker run -d -t —name quant -v $(pwd)/quant:/quant -p 7497:7497 miniconda3:latest 컨테이너를 띄운 후에 진행했습니다. conda 가상환경 설정, 주피터 커널 연결을 마치고 노트북 실행 시 ib.connect() 셀 부분에서 발생한 문제입니다. "Connect call failed ('127.0.0.1', 7497)" 위의 run 명령어와 같이 해주었을 때에는 desktop의 trader workstation에서 포트를 사용중이라는 팝업이 뜹니다. dockerfile에서 expose 만 설정(EXPOSE 1234) 해 주었을 때에도 동일하게 연결이 안됐습니다. 포트 설정을 어떻게 해주어야 하는지 잘 모르겠습니다.. 도커, 포트 포워딩에 대한 이해가 부족해서 구글링 해 봐도 잘 이해가 되지 않아서 도움 요청 남깁니다.
안녕하세요 선생님 ! 분류에서 샘플링 기법을 배웠는데 from imblearn.over_sampling import SMOTE smote = SMOTE(random_state=0) 회귀문제에서도 smote 기법같은게 있을까요 ?! 강의 교육 전 먼저 질문드립니다 ㅠ..!
안녕하세요. 강의 잘 듣고 있습니다. 이것 저것 실습해보다가 SELECT SYSDATE FROM dual; 이렇게 작성했을 때 실제 제가 하던 시간과 9시간이 차이가 나는 것을 발견했습니다. (오후 12시인데 추출값은 오전 3시로 나옴. 다른 것은 현재와 일치함.) 이렇게 차이가 나는 이유가 있을까요? 수정할 수 있는 방법이 있나요?
import sys input = sys.stdin.readline n, k = tuple(map(int, input().split())) dp = [0 for _ in range(k+1)] minVal = sys.maxsize for _ in range(n): w, v = tuple(map(int, input().split())) dp[w] = v if w < minVal: minVal = w for i in range(minVal+1, k+1): maxVal = -1 for j in range(minVal, i): maxVal = max(maxVal, dp[j] + dp[i-j], dp[i]) dp[i] = maxVal print(dp[m]) 안녕하세요 강사님! 우선, 이 강의가 저한테 정말 도움이 되고 있음에 감사드립니다! 저는 위와 같이 dp 테이블을 2차원으로 할 생각을 못하고 풀었다가 시간초과가 났습니다. 아직 dp가 어렵게 느껴져서 dp 테이블 설계를 잘 못하겠네요..ㅠㅠ 다행히 강의에서 dp 문제는 올려주신 강의만 제대로 숙지하면 될 것 같다고 하셨는데 dp 문제를 잘 풀기 위한 다른 팁 같은게 있을까요?
안녕하세요, 먼저 좋은 내용의 강의 감사합니다. 다름 아니라 강의 비디오에서 'FastAPI Form 다루기 - 01'부터 녹음 된 소리가 울림이 커서 명료하지 않게 들리는 것 같습니다. 혹시 번거로우시겠지만, 좋은 강의 경험을 위해 그 전까지의 영상과 같이 오디오를 깔끔하게 변환해주실 수 있을지 문의 드립니다. 감사합니다.
안녕하세요. 열혈 수강자 이지수입니다 : ) 문제가 하나씩 풀리니 넘 재밌고 뿌듯합니다 ㅎㅎ 17번 문제에서 풀어준 포켓몬 수를 B 전체 포켓몬 수를 A로 두었는데요 COUNT IF B/A 이런식으로 축약해서 연산할 수는 없나요? 감사합니다. SELECT trainer_id, COUNTIF(status="Released") as B , #풀어준 포켓몬의 수 COUNT(pokemon_id) as A, #전체 포켓몬의 수 COUNTIF(status="Released")/COUNT(pokemon_id) as released_ratio FROM basic.trainer_pokemon GROUP BY trainer_id HAVING released_ratio >=0.2
CORS 설명 주신 부분을 보면 처음 브라우저에서 request 날릴 때에는 Origin에 아무런 값이 들어가 있지 않아서 response를 받고 그 이후에 받은 html의 javascript 쪽에서 다른 요청을 보냈을 때 기존에 요청하면서 받았던 Origin 값이 같이 들어가면서 이슈가 발생한다고 말씀주셨는데, blog json data 테스트 하는 거 보면 origin이 null인데 바로 cors 에러가 나나요 ?
pdf 14_async_sqlalchemy 데이터 검색(읽기) github 링크가 잘못 연결되어있습니다. https://gist.github.com/DaveLee-fun/3ff74108d3b58f8ffb731c1ec106691e 연결되어 있는 페이지에 코드는 async 비동기 실행 코드가 아닌 그냥 sqlalchemy 코드입니다.
@app.get("/items") # 함수에 개별 인자값이 들어가 있는 경우 path parameter가 아닌 모든 인자는 query parameter # query parameter의 타입과 default값을 함수인자로 설정할 수 있음. async def read_item(skip: int = 0, limit: int = 2): return fake_items_db[skip : skip + limit] @app.get("/items_nd/") # 함수 인자값에 default 값이 주어지지 않으면 반드시 query parameter에 해당 인자가 주어져야 함. async def read_item_nd(skip: int, limit: int): return fake_items_db[skip : skip + limit] 안녕하세요 url 차이에 관해 질문드립니다. 위에 url은 "/items" 인데, 아래 url은 "/items_nd/" 으로 끝에 /가 붙어있는데요. 둘다 query params로 구성되어 있는데 위는 /로 안끝나고, 아래는 왜 /로 끝났는지 이유가 궁금합니다.
목차 과제별 작성 쿼리 쿼리 작성 후 느낀점 과제별 작성 쿼리 (1) ARRAY·STRUCT ## 연습문제 1번 -- select -- title, -- genre -- from advanced.array_exercises -- cross join unnest(genres) as genre ## 연습문제 2번 -- select -- title, -- actor.actor, -- actor.character, -- from advanced.array_exercises -- cross join unnest(actors) as actor ## 연습문제 3번 -- select -- title, -- actor.actor, -- actor.character, -- genre -- from advanced.array_exercises -- cross join unnest (actors) as actor -- cross join unnest (genres) as genre ## 연습문제 4번 -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- event_param.key, -- event_param.value, -- event_param.value.int_value -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date = '2022-08-01' PIVOT ## 연습문제 1번 -- select -- order_date, -- sum(if(user_id=1, amount, 0)) as user_1, -- sum(if(user_id=1, amount, 0)) as user_2, -- sum(if(user_id=1, amount, 0)) as user_3, -- from advanced.orders -- group by -- order_date -- order by -- order_date asc ## 연습문제 2번 -- select -- user_id, -- sum(if(order_date='2023-05-01', amount, 0)) as 2023-05-01 , -- sum(if(order_date='2023-05-02', amount, 0)) as 2023-05-02 , -- sum(if(order_date='2023-05-03', amount, 0)) as 2023-05-03 , -- sum(if(order_date='2023-05-04', amount, 0)) as 2023-05-04 , -- sum(if(order_date='2023-05-05', amount, 0)) as 2023-05-05 -- from advanced.orders -- group by -- user_id ## 연습문제 3번 -- select -- user_id, -- max(if(order_date = '2023-05-01', 1, 0)) as 2023-05-01 , -- max(if(order_date = '2023-05-02', 1, 0)) as 2023-05-02 , -- max(if(order_date = '2023-05-03', 1, 0)) as 2023-05-03 , -- max(if(order_date = '2023-05-04', 1, 0)) as 2023-05-04 , -- max(if(order_date = '2023-05-05', 1, 0)) as 2023-05-05 -- from advanced.orders -- group by -- user_id ## 앱 로그 데이터 배열 PIVOT -- with base as ( -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- event_param.key as key, -- event_param.value.string_value as string_value, -- event_param.value.int_value as int_value -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date = '2022-08-01' and -- event_name = 'click_cart' -- ) -- select -- user_id, -- event_date, -- event_name, -- user_pseudo_id, -- max(if(key = 'firebase_screen', string_value, null)) as firebase_screen, -- max(if(key = 'food_id', int_value, null)) as food_id, -- max(if(key = 'session_id', string_value, null)) as session_id, -- from base -- group by all 퍼널 ## step1 : 퍼널정의, 유저 집계 방식 정하기 ## step2 : 데이터 확인 -- select -- *, -- event_param.key, -- event_param.value.string_value, -- event_param.value.int_value, -- from advanced.app_logs -- cross join unnest(event_params) as event_param -- where -- event_date between '2022-08-01' and '2022-08-18' -- limit 100 ## step3 : pivot 해서 concat 하기 좋은 형태로 만들기 with base as ( select *, max(if(event_param.key = 'firebase_screen', event_param.value.string_value, null)) as firebase_screen, max(if(event_param.key = 'food_id', event_param.value.int_value, null)) as food_id, max(if(event_param.key = 'session_id', event_param.value.string_value, null)) as session_id from advanced.app_logs cross join unnest(event_params) as event_param where event_date between '2022-08-01' and '2022-08-18' group by all ) ## step4 : concat해서 퍼널 컬럼 정의하기 , base2 as ( select *, concat(event_name, '-', firebase_screen) as event_name_with_screen from base ) ## step5 : 퍼널별 유저수 쿼리 작성 I step_number, cnt 컬럼 생성 -- select -- event_name_with_screen, -- case -- when(event_name_with_screen = 'screen_view-welcome') then 1 -- when(event_name_with_screen = 'screen_view-home') then 2 -- when(event_name_with_screen = 'screen_view-food_category') then 3 -- when(event_name_with_screen = 'screen_view-restaurant') then 4 -- when(event_name_with_screen = 'screen_view-cart') then 5 -- when(event_name_with_screen = 'click_payment-cart') then 6 -- else null -- end as step_number, -- count(distinct user_pseudo_id) as cnt -- from base2 -- group by -- 1 -- having -- step_number is not null ## step6 : 일자별 퍼널 쿼리 작성 select event_date, event_name_with_screen, case when(event_name_with_screen = 'screen_view-welcome') then 1 when(event_name_with_screen = 'screen_view-home') then 2 when(event_name_with_screen = 'screen_view-food_category') then 3 when(event_name_with_screen = 'screen_view-restaurant') then 4 when(event_name_with_screen = 'screen_view-cart') then 5 when(event_name_with_screen = 'click_payment-cart') then 6 else null end as step_number, count(distinct user_pseudo_id) as cnt from base2 group by all having step_number is not null order by event_date 쿼리 작성 후 느낀점 (1) ARRAY·STRUCT I 쿼리를 풀고난 이후 느낀점 1. '~별'이라고 해서 무조건 GROUP BY는 아니다 ARRAY 또는 STRUCT 같은 구조체 타입 컬럼을 만나기 전에는 '~별'이라는 텍스트가 있을 때 GROUP BY를 떠올렸습니다. 그러나 구조체 타입 컬럼을 다루고난 이후, 생각이 달라졌습니다. 비구조체 컬럼을 구조체 컬럼과 함께 출력할 때는 '~별'을 GROUP BY로 출력할 수 없다는 걸 알았습니다. 2. CROSS JOIN을 2개 이상 사용할 때는 CROSS JOIN을 2개 이상 입력할 때는 쉼표를 사용하지 않는다는 걸 알았습니다. 다른 구간에서 요소를 2개 이상 입력할 때는 쉼표를 사용해서 요소를 분리 했었는데, CROSS JOIN은 아니였습니다. CROSS JOIN을 2개 이상 사용할 때 쉼표를 쓰면 다음과 같은 오류가 발생하는 걸 알았습니다 : --> Syntax error: Unexpected keyword CROSS at [24:1] (2) PIVOT I 쿼리를 풀고난 이후 느낀점 1. 날짜 데이터와 다르게 일반 숫자데이터는 따옴표를 쓰지 않는다 EX) if(user_id=1, amount, 0) --> O if(user_id='1', amount, 0) --> X + if(user_id='2024-10-22', amount, 0) --> O 2. 컬럼명에 대시(또는 한글)를 사용할 때는 따옴표가 아닌 백틱으로 컬럼명을 감싼다 대시를 컬럼명으로 할 때는 백틱을 사용. as 2023-05-01 --> O as '2023-05-01' --> X + as 빠짝스터디 --> O as '빠짝스터디' --> X 3. 일반 테이블을 피봇테이블로 만들 때 고려해 봐야 할 2가지 1. 행에 2개 이상 중복이 있는지 확인한다. 2. 2개 이상 중복이 있지만, 피봇테이블로 변경 했을 때 효율적인지 생각해 본다. 위 2개 조건을 모두 충족하는 컬럼을 피봇테이블 만들 때 기준 컬럼으로 삼음. EX) *'앱 로그 데이터 배열 PIVOT 하기' 테이블 참고 student 열 중복 있음 (A, A, A, B, B, B) 기준 열로 삼으면 → 각 학생의 모든 과목 점수를 한눈에 볼 수 있어서 효율적! subject 열 중복 있음 (수학, 영어, 과학이 2번씩) 기준 열로 삼으면 → 과목별로 학생들의 점수를 볼 수는 있지만, 한 학생의 전체 성적을 보기는 어려움 score 열 중복이 없음. 기준 열로 삼으면 → 같은 점수끼리 모이겠지만, 효율이 떨어짐. (3) 퍼널 I 쿼리를 풀고난 이후 느낀점 1. concat 할 때 따옴표 사용 주의 처음 concat 할 때 다음과 같이 입력했습니다. concat(event_name, '-', 'firebase_screen') 'firebase_screen'라고 작성했었는데, 이렇게 하니깐 firebase_screen 내에 있는 데이터랑 concat 된 게 아니라 'firebase_screen'라는 문자 자체랑 concat이 되어서 혼란스러웠습니다. concat 내에서는 따옴표를 쓰지 않고, 컬럼끼리 연결해야겠다는 걸 알게 됐습니다.