/images/avatar.png

🍞πŸ₯πŸ₯– 라일리의 μ½”λ“œ λΆ€μŠ€λŸ¬κΈ° 🍞πŸ₯πŸ₯–

데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό - 5μž₯ μ‚¬μš©μžλ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•œ 데이터 μΆ”μΆœ (2)

πŸ—„οΈ 데이터뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό 책을 읽고 정리 / μš”μ•½ ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μ‹œκ³„μ—΄μ— λ”°λ₯Έ μ‚¬μš©μž μ „μ²΄μ˜ μƒνƒœ λ³€ν™” μ°ΎκΈ° μ‚¬μš©μžλŠ” μ„œλΉ„μŠ€ μ‚¬μš© μ‹œμž‘μΌλΆ€ν„° μ‹œκ°„μ΄ μ§€λ‚˜λ©΄μ„œ ‘좩성도 높은 μ‚¬μš©μž’, ‘μ‚¬μš©μ„ 쀑지’, ‘휴면’ λ“±μœΌλ‘œ μƒνƒœκ°€ λ³€ν™” μ‚¬μš©μžκ°€ κ³„μ†ν•΄μ„œ μ‚¬μš©(λ¦¬ν”ΌνŠΈ) μ‚¬μš©μžκ°€ μ‚¬μš©μ„ 쀑단(νƒˆν‡΄/휴면) μ„œλΉ„μŠ€ μ œκ³΅μžλŠ” μ‚¬μš©μžκ°€ μ–΄λŠ μ •λ„μ—μ„œ 계속 μ‚¬μš©ν•˜κ³  μžˆλŠ”μ§€ νŒŒμ•…ν•˜κ³  λͺ©ν‘œμ™€μ˜ 괴리λ₯Ό μ–΄λ–»κ²Œ 쒁힐 것 인지 λ°©μ•ˆμ„ κ²€ν†  휴면 μ‚¬μš©μžλ₯Ό μ–΄λ–»κ²Œ λ‹€μ‹œ μ‚¬μš©ν•˜κ²Œ λ§Œλ“€μ§€λ„ 생각 μ™„μ „ νƒˆν‡΄μ˜ 경우 λ³΅κ·€λŠ” μ–΄λ €μš°λ‚˜ 휴면 μ‚¬μš©μžλŠ” 메일 맀거진/CM/κ΄‘κ³  등을 ν™œμš©ν•˜μ—¬ λ‹€μ‹œ μ‚¬μš©ν•˜κ²Œ μœ λ„ μƒ˜ν”Œ 데이터 SNS μ‚¬μš©μž λ§ˆμŠ€ν„° ν…Œμ΄λΈ” SNS μ•‘μ…˜ 둜그 ν…Œμ΄λΈ” μ‚¬μš©μž λ§ˆμŠ€ν„° ν…Œμ΄λΈ”κ³Ό μ•‘μ…˜ 둜그 ν…Œμ΄λΈ” 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 DROP TABLE IF EXISTS mst_users; CREATE TABLE mst_users( user_id varchar(255) , sex varchar(255) , birth_date varchar(255) , register_date varchar(255) , register_device varchar(255) , withdraw_date varchar(255) ); INSERT INTO mst_users VALUES ('U001', 'M', '1977-06-17', '2016-10-01', 'pc' , NULL ) , ('U002', 'F', '1953-06-12', '2016-10-01', 'sp' , '2016-10-10') , ('U003', 'M', '1965-01-06', '2016-10-01', 'pc' , NULL ) , ('U004', 'F', '1954-05-21', '2016-10-05', 'pc' , NULL ) , ('U005', 'M', '1987-11-23', '2016-10-05', 'sp' , NULL ) , ('U006', 'F', '1950-01-21', '2016-10-10', 'pc' , '2016-10-10') , ('U007', 'F', '1950-07-18', '2016-10-10', 'app', NULL ) , ('U008', 'F', '2006-12-09', '2016-10-10', 'sp' , NULL ) , ('U009', 'M', '2004-10-23', '2016-10-15', 'pc' , NULL ) , ('U010', 'F', '1987-03-18', '2016-10-16', 'pc' , NULL ) , ('U011', 'F', '1993-10-21', '2016-10-18', 'pc' , NULL ) , ('U012', 'M', '1993-12-22', '2016-10-18', 'app', NULL ) , ('U013', 'M', '1988-02-09', '2016-10-20', 'app', NULL ) , ('U014', 'F', '1994-04-07', '2016-10-25', 'sp' , NULL ) , ('U015', 'F', '1994-03-01', '2016-11-01', 'app', NULL ) , ('U016', 'F', '1991-09-02', '2016-11-01', 'pc' , NULL ) , ('U017', 'F', '1972-05-21', '2016-11-01', 'app', NULL ) , ('U018', 'M', '2009-10-12', '2016-11-01', 'app', NULL ) , ('U019', 'M', '1957-05-18', '2016-11-01', 'pc' , NULL ) , ('U020', 'F', '1954-04-17', '2016-11-03', 'app', NULL ) , ('U021', 'M', '2002-08-14', '2016-11-03', 'sp' , NULL ) , ('U022', 'M', '1979-12-09', '2016-11-03', 'app', NULL ) , ('U023', 'M', '1992-01-12', '2016-11-04', 'sp' , NULL ) , ('U024', 'F', '1962-10-16', '2016-11-05', 'app', NULL ) , ('U025', 'F', '1958-06-26', '2016-11-05', 'app', NULL ) , ('U026', 'M', '1969-02-21', '2016-11-10', 'sp' , NULL ) , ('U027', 'F', '2001-07-10', '2016-11-10', 'pc' , NULL ) , ('U028', 'M', '1976-05-26', '2016-11-15', 'app', NULL ) , ('U029', 'M', '1964-04-06', '2016-11-28', 'pc' , NULL ) , ('U030', 'M', '1959-10-07', '2016-11-28', 'sp' , NULL ) ; 12.

데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό - 5μž₯ μ‚¬μš©μžλ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•œ 데이터 μΆ”μΆœ (1)

πŸ—„οΈ 데이터뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό 책을 읽고 정리 / μš”μ•½ ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 11. μ‚¬μš©μž μ „μ²΄μ˜ νŠΉμ§•κ³Ό κ²½ν–₯ μ°ΎκΈ° μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 것은 μ‚¬μš©μžμ—κ²Œ κ°€μΉ˜λ₯Ό μ œκ³΅ν•˜λŠ” 것 μ„œλΉ„μŠ€ 제곡자 μΈ‘μ—μ„œ κ΄€λ ¨ μ •λ³΄λ‘œ μ•Œκ³  싢은 것 μ‚¬μš©μžμ˜ 속성(λ‚˜μ΄, 성별, μ£Όμ†Œμ§€) μ‚¬μš©μžμ˜ 행동(κ΅¬λ§€ν•œ μƒν’ˆ, μ‚¬μš©ν•œ κΈ°λŠ₯, μ‚¬μš©ν•œ λΉˆλ„) μƒ˜ν”Œ 데이터 μ‚¬μš©μž λ§ˆμŠ€ν„° ν…Œμ΄λΈ” κ°€μž…μ‹œ μ‚¬μš©μž 성별, κ°€μž… λ‚ μ§œ, μ‚¬μš© μž₯치 λ“± νƒˆν‡΄μ‹œλŠ” λ‚ μ§œλ§Œ 기둝 μ•‘μ…˜ 둜그 ν…Œμ΄λΈ” νŽ˜μ΄μ§€ μ—΄λžŒ, 관심 μƒν’ˆ 등둝, 카트 μΆ”κ°€, ꡬ맀, 리뷰 λ“± 각 μ•‘μ…˜μ— 이름을 λͺ…μ‹œ user_idκ°€ NULL 인 경우 λΉ„λ‘œκ·ΈμΈ νšŒμ› μ•‘μ…˜ 둜그 ν…Œμ΄λΈ”μ„ λ”°λ‘œ λ§Œλ“€κ³  μ•‘μ…˜ λ‚΄μš©μ„ 적어두면 λ³„λ„μ˜ JOIN, UNION 없이 데이터λ₯Ό λ‹€λ£° 수 있음 μ‚¬μš©μž λ§ˆμŠ€ν„° ν…Œμ΄λΈ”κ³Ό μ•‘μ…˜ 둜그 ν…Œμ΄λΈ” 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 -- μ‚¬μš©μž λ§ˆμŠ€ν„° 정보 DROP TABLE IF EXISTS mst_users; CREATE TABLE mst_users( user_id varchar(255) , sex varchar(255) , birth_date varchar(255) , register_date varchar(255) , register_device varchar(255) , withdraw_date varchar(255) ); INSERT INTO mst_users VALUES ('U001', 'M', '1977-06-17', '2016-10-01', 'pc' , NULL ) , ('U002', 'F', '1953-06-12', '2016-10-01', 'sp' , '2016-10-10') , ('U003', 'M', '1965-01-06', '2016-10-01', 'pc' , NULL ) , ('U004', 'F', '1954-05-21', '2016-10-05', 'pc' , NULL ) , ('U005', 'M', '1987-11-23', '2016-10-05', 'sp' , NULL ) , ('U006', 'F', '1950-01-21', '2016-10-10', 'pc' , '2016-10-10') , ('U007', 'F', '1950-07-18', '2016-10-10', 'app', NULL ) , ('U008', 'F', '2006-12-09', '2016-10-10', 'sp' , NULL ) , ('U009', 'M', '2004-10-23', '2016-10-15', 'pc' , NULL ) , ('U010', 'F', '1987-03-18', '2016-10-16', 'pc' , NULL ) ; -- μ•‘μ…˜ 둜그 DROP TABLE IF EXISTS action_log; CREATE TABLE action_log( session varchar(255) , user_id varchar(255) , action varchar(255) , category varchar(255) , products varchar(255) , amount integer , stamp varchar(255) ); INSERT INTO action_log VALUES ('989004ea', 'U001', 'purchase', 'drama' , 'D001,D002', 2000, '2016-11-03 18:10:00') , ('989004ea', 'U001', 'view' , NULL , NULL , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'favorite', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'review' , 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 18:00:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D002' , NULL, '2016-11-03 18:01:00') , ('989004ea', 'U001', 'add_cart', 'drama' , 'D001,D002', NULL, '2016-11-03 18:02:00') , ('989004ea', 'U001', 'purchase', 'drama' , 'D001,D002', 2000, '2016-11-03 18:10:00') , ('47db0370', 'U002', 'add_cart', 'drama' , 'D001' , NULL, '2016-11-03 19:00:00') , ('47db0370', 'U002', 'purchase', 'drama' , 'D001' , 1000, '2016-11-03 20:00:00') , ('47db0370', 'U002', 'add_cart', 'drama' , 'D002' , NULL, '2016-11-03 20:30:00') , ('87b5725f', 'U001', 'add_cart', 'action', 'A004' , NULL, '2016-11-04 12:00:00') , ('87b5725f', 'U001', 'add_cart', 'action', 'A005' , NULL, '2016-11-04 12:00:00') , ('87b5725f', 'U001', 'add_cart', 'action', 'A006' , NULL, '2016-11-04 12:00:00') , ('9afaf87c', 'U002', 'purchase', 'drama' , 'D002' , 1000, '2016-11-04 13:00:00') , ('9afaf87c', 'U001', 'purchase', 'action', 'A005,A006', 1000, '2016-11-04 15:00:00') ; 11.

ꡬ글 빅쿼리(BigQuery) μ‹œμž‘ν•˜κΈ° 및 DataGrip 연동

ꡬ글 계정 생성 κΈ°λ³Έ 90일 λ™μ•ˆ $300 ν¬λ ˆλ”§μœΌλ‘œ 무료 ν‰κ°€νŒμ„ μ‚¬μš©ν•  수 μžˆλ‹€. 무료 μ²΄ν—˜ 기간이 μ§€λ‚˜λ©΄ 무료 μ²΄ν—˜ 쀑 μƒμ„±ν•œ λ¦¬μ†ŒμŠ€λŠ” λͺ¨λ‘ 쀑지 되며 유료 κ³„μ •μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œ ν•˜μ§€ μ•ŠμœΌλ©΄ μš”κΈˆμ΄ λΆ€κ³Όλ˜μ§€ μ•ŠλŠ”λ‹€. μƒˆ ν”„λ‘œμ νŠΈ λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ ν”„λ‘œμ νŠΈ μƒμ„±ν•˜κΈ° 데이터 μ„ΈνŠΈ μƒμ„±ν•˜κΈ° 데이터 μ„ΈνŠΈλŠ” ν…Œμ΄λΈ”κ³Ό 뷰에 λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό ꡬ성 및 μ œμ–΄ν•˜λŠ” μ΅œμƒμœ„ μ»¨ν…Œμ΄λ„ˆμ΄λ‹€. ν…Œμ΄λΈ”μ΄λ‚˜ λ·°λŠ” λ°˜λ“œμ‹œ 데이터 μ„ΈνŠΈμ— 속해야 ν•˜λ―€λ‘œ μ΅œμ†Œ ν•œ 개 μ΄μƒμ˜ 데이터 μ„ΈνŠΈλ₯Ό ꡬ성해야 ν•œλ‹€. Google Cloud Platform μ½˜μ†” λ©”λ‰΄μ—μ„œ BigQuery 메뉴λ₯Ό 선택

데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό - 4μž₯ μ‹œκ³„μ—΄ 기반으둜 데이터 μ§‘κ³„ν•˜κΈ° (2)

πŸ—„οΈ 데이터뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό 책을 읽고 정리 / μš”μ•½ ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 10. 닀면적인 좕을 μ‚¬μš©ν•΄ 데이터 μ§‘μ•½ν•˜κΈ° 맀좜의 μ‹œκ³„μ—΄λΏλ§Œ μ•„λ‹ˆλΌ μƒν’ˆμ˜ μΉ΄ν…Œκ³ λ¦¬, 가격 등을 μ‘°ν•©ν•˜μ—¬ λ°μ΄ν„°μ˜ νŠΉμ§•μ„ μΆ”μΆœν•΄ λ¦¬ν¬νŒ… μƒ˜ν”Œ 데이터 맀좜 데이터 둜그 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 DROP TABLE IF EXISTS purchase_detail_log; CREATE TABLE purchase_detail_log( dt varchar(255) , order_id integer , user_id varchar(255) , item_id varchar(255) , price integer , category varchar(255) , sub_category varchar(255) ); INSERT INTO purchase_detail_log VALUES ('2017-01-18', 48291, 'usr33395', 'lad533', 37300, 'ladys_fashion', 'bag') , ('2017-01-18', 48291, 'usr33395', 'lad329', 97300, 'ladys_fashion', 'jacket') , ('2017-01-18', 48291, 'usr33395', 'lad102', 114600, 'ladys_fashion', 'jacket') , ('2017-01-18', 48291, 'usr33395', 'lad886', 33300, 'ladys_fashion', 'bag') , ('2017-01-18', 48292, 'usr52832', 'dvd871', 32800, 'dvd' , 'documentary') , ('2017-01-18', 48292, 'usr52832', 'gam167', 26000, 'game' , 'accessories') , ('2017-01-18', 48292, 'usr52832', 'lad289', 57300, 'ladys_fashion', 'bag') , ('2017-01-18', 48293, 'usr28891', 'out977', 28600, 'outdoor' , 'camp') , ('2017-01-18', 48293, 'usr28891', 'boo256', 22500, 'book' , 'business') , ('2017-01-18', 48293, 'usr28891', 'lad125', 61500, 'ladys_fashion', 'jacket') , ('2017-01-18', 48294, 'usr33604', 'mem233', 116300, 'mens_fashion' , 'jacket') , ('2017-01-18', 48294, 'usr33604', 'cd477' , 25800, 'cd' , 'classic') , ('2017-01-18', 48294, 'usr33604', 'boo468', 31000, 'book' , 'business') , ('2017-01-18', 48294, 'usr33604', 'foo402', 48700, 'food' , 'meats') , ('2017-01-18', 48295, 'usr38013', 'foo134', 32000, 'food' , 'fish') , ('2017-01-18', 48295, 'usr38013', 'lad147', 96100, 'ladys_fashion', 'jacket') ; 10.

데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό - 4μž₯ μ‹œκ³„μ—΄ 기반으둜 데이터 μ§‘κ³„ν•˜κΈ° (1)

πŸ—„οΈ 데이터뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό 책을 읽고 정리 / μš”μ•½ ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 맀좜 데이터λ₯Ό μ‹œκ³„μ—΄λ‘œ 집계 ν•˜κΈ° 맀좜 데이터λ₯Ό μ‹œκ³„μ—΄λ‘œ μ§‘κ³„ν•˜λ©΄ κ·œμΉ™μ„±μ„ μ°Ύκ±°λ‚˜, μ–΄λ–€ κΈ°κ°„κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ 변화폭을 확인 ν•  수 μžˆλ‹€. 9. μ‹œκ³„μ—΄ 기반으둜 데이터 μ§‘κ³„ν•˜κΈ° 맀좜 데이터 둜그 dt order_id user_id purchase_amount 2014-01-01 1 rhwpvvitou 13900 2014-01-01 2 hqnwoamzic 10616 2014-01-02 3 tzlmqryunr 21156 2014-01-02 4 wkmqqwbyai 14893 2014-01-03 5 ciecbedwbq 13054 2014-01-03 6 svgnbqsagx 24384 2014-01-03 7 dfgqftdocu 15591 2014-01-04 8 sbgqlzkvyn 3025 2014-01-04 9 lbedmngbol 24215 2014-01-04 10 itlvssbsgx 2059 2014-01-05 11 jqcmmguhik 4235 2014-01-05 12 jgotcrfeyn 28013 2014-01-05 13 pgeojzoshx 16008 2014-01-06 14 msjberhxnx 1980 2014-01-06 15 tlhbolohte 23494 2014-01-06 16 gbchhkcotf 3966 2014-01-07 17 zfmbpvpzvu 28159 2014-01-07 18 yauwzpaxtx 8715 2014-01-07 19 uyqboqfgex 10805 2014-01-08 20 hiqdkrzcpq 3462 2014-01-08 21 zosbvlylpv 13999 2014-01-08 22 bwfbchzgnl 2299 2014-01-09 23 zzgauelgrt 16475 2014-01-09 24 qrzfcwecge 6469 2014-01-10 25 njbpsrvvcq 16584 2014-01-10 26 cyxfgumkst 11339 9.

데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό - 3μž₯ 데이터 가곡을 μœ„ν•œ SQL

πŸ—„οΈ 데이터뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό 책을 읽고 정리 / μš”μ•½ ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 데이터λ₯Ό 가곡해야 ν•˜λŠ” 이유 λ‹€λ£° 데이터가 데이터 뢄석 μš©λ„λ‘œ μƒμ •λ˜μ§€ μ•Šμ€ 경우 μ—°μ‚°ν•  λ•Œ 비ꡐ κ°€λŠ₯ν•œ μƒνƒœλ₯Ό λ§Œλ“€κ³  였λ₯˜λ₯Ό νšŒν”Όν•˜κΈ° μœ„ν•œ 경우 5. ν•˜λ‚˜μ˜ κ°’ μ‘°μž‘ν•˜κΈ° 5.1 μ½”λ“œ 값을 λ ˆμ΄λΈ”λ‘œ λ³€κ²½ν•˜κΈ° λ””ν΄νŠΈ 값을 지정할 경우 ELSE ꡬ문을 μ‚¬μš©ν•œλ‹€. 1 2 3 4 5 6 7 8 9 SELECT user_id , CASE WHEN register_device = 1 THEN 'λ°μŠ€ν¬ν†±' WHEN register_device = 2 THEN '슀마트폰' WHEN register_device = 3 THEN 'μ• ν”Œλ¦¬μΌ€μ΄μ…˜' ELSE '' END as device_name FROM mst_users; 5.