목록전체 글 (71)
tak's data blog

'면접왕 이형'이라는 유튜브 채널을 통해 추천받은 책입니다. 유튜브나 이곳저곳에서 많은 추천이 있었던 책인데 주변 도서관에는 없어서 구매를 했네요! 일본전산의 실화를 바탕으로 한 책으로 읽고나서 많은 생각을 하게 된 책입니다.... 그럼 책을 읽으면서 느꼈던 점이나 내용 정리를 순서없이 생각나는대로 나아가보겠습니다. 이 책은 일본전산이라는 회사가 어떻게 세워졌고, 수많은 어려움을 어떤 마인드로 극복해내어 성공까지 이루었는지의 과정으로 나아갑니다. 일본전산의 모토는 크게 3가지가 있습니다. 1. 즉시 한다. 2. 반드시 한다. 3. 될 때까지 한다. 1) 포기하지 않고 일단 해보기 어떠한 프로젝트나 일을 진행할 때 무작정 안된다는(주어진 환경때문에 진행할 수 없다. 등) 생각을 가지지 않고, 어떻게든 해내..
보통 고객이 이탈할 때, 재구매를 할 때 등 기간을 구하기 위해 고유한 인덱스를 기준으로 정렬해 위아래의 차이로 계산한다. 여태까지 아래와 같이 비효율적이게 for문으로 조건을 주어 해결했었다. 새로운 데이터프레임, 고유한 유저별 데이터프레임을 생성해 계산한 후 concat하는 방식으로 진행했었다... from tqdm import tqdm reorder_day = pd.DataFrame() de_lp['reorder_day'] = 0 u_list = de_lp[de_lp['reorder'] == 'O']['cust'].unique() for i in tqdm(u_list): reorder_df = de_lp[de_lp['cust'] == i] reorder_df[['reorder_day']] = reo..

배경 선정 이탈 분석이라는 주제를 잡고 진성, 이탈 유저들의 플레이 특징을 위주로 파악해보려고 하였다. 우선 피파온라인4는 특성상 nextfield라는 체감 개선 업데이트가 거의 반기별로 이루어진다. 침투 플레이, 중거리 슛, 헤딩, 패스 등의 개선이 이루어지는 것이다. 피파4를 이탈했다가 돌아올 때가 되면 nextfield 업데이트가 이루어져 있고, 이로 인해 나의 플레이타입도 변화를 주어야 이길 가능성이 높아져 또 적응의 시간이 필요하다. 그래서 적응을 하지 못해 다시 이탈한 경험이 있기 때문에 이탈 유저는 nextfield에 적응을 잘 할 것인가?를 가설로 세우게 되었다. 실제로 아래는 7차 nextfield가 이루어졌을 때 유저들의 반응이다. 다수의 유저들도 비슷한 생각을 가지고 있었음을 확인하였..
#1795 select * from (select product_id, 'store1' as store, store1 as price from Products union select product_id, 'store2' as store, store2 as price from Products union select product_id, 'store3' as store, store3 as price from Products) t where price is not null store1, store2, store3 각각의 칼럼을 전체적인 store과 price로 피벗테이블로 만드는 것과 동일한 문제이다. 각각의 store칼럼별로 새롭게 테이블을 만든 후 union으로 결합해 해결할 수 있다. 여기까지 무료로 제..

#1393 SELECT stock_name, SUM( CASE WHEN operation = 'Buy' THEN -price ELSE price END) AS 'capital_gain_loss' FROM Stocks GROUP BY stock_name 물품별 총 판매 + 구매 가격을 구하는 문제이다. case when으로 조건을 주어 총합을 구할 수 있었다. 아래는 일부러 꼬아서 with문을 통해 판매한 물품 테이블, 구매한 물품 테이블을 따로 구해서 합을 구한 방법이다. 아래의 방법은 추후에 어려운 문제들이 나오고 테이블 생성이 필요할 때 언젠가 쓰이지 않을까 생각해보았다. # Write your MySQL query statement below WITH MINUS AS (SELECT stock_nam..
#626 연속된 id 2개를 바꾸는 문제이다. 특이 조건으로 홀수행으로 끝나면 마지막 행은 그대로 둔다는 점이다. SELECT (CASE WHEN id % 2 != 0 and counts != id THEN id + 1 WHEN id % 2 != 0 and counts = id THEN id ELSE id -1 END )AS id, student FROM Seat, (SELECT count(*) as 'counts' FROM Seat ) as s_count order by id asc 처음 마지막 행 조건을 안두고 풀었을 땐 잘 풀렸는데 마지막 조건을 생각하느라 시간이 걸렸다. 서브쿼리로 따로 count 테이블을 만들어주고 id 갯수와 원래 테이블과의 마지막 id숫자가 같은지 다른지 조건을 주어 해결하였..
이번 문제를 풀면서 테스트케이스는 다맞췄는데 실제로 제출해보니 정답이 아니였다. #262 # Write your MySQL query statement below WITH A as ( SELECT t.request_at as 'Arequest', count(t.request_at) as 'Acount' FROM Trips t join Users u on t.client_id = u.users_id WHERE u.banned != "Yes" GROUP BY t.request_at ) ,B as ( SELECT t.request_at as 'Brequest', count(t.status) as 'Bcount' FROM Trips t join Users u on t.client_id = u.users_id W..
# 184 SELECT d.name as 'Department', e.name as 'Employee', e.salary as 'Salary' FROM Employee e inner join Department d on e.departmentId = d.id WHERE (e.departmentId, e.salary) in ( SELECT departmentId, MAX(salary) FROM Employee GROUP BY departmentId ) # 서브쿼리없이 바로 groupby를 해버리면 안됨. 처음 바로 groupby를 해서 id별 max(salary)를 구하지 못함 where절에 서브쿼리없이 바로 groupby를 해버려서 id별 max(salary)를 구하지못했다. 솔루션의 도움을 받아 해결완..