이 경우 Databend Cloud를 사용하여 Tianchi Lab에서 설정한 Taobao 사용자 쇼핑 행동 데이터를 분석 하고 흥미로운 쇼핑 행동을 함께 발견할 것입니다.
이 데이터 세트는 CSV 형식이며 2017년 11월 25일부터 2017년 12월 3일까지 행동한 약 백만 명의 무작위 사용자의 모든 행동(클릭, 구매, 추가 구매 및 좋아요 포함)을 포함합니다. 데이터 세트의 각 행은 사용자 행동을 나타내며 쉼표로 구분된 다음 5개 열로 구성됩니다.
열 이름 | 설명하다 |
---|---|
사용자 ID | 정수형, 직렬화된 사용자 ID |
제품 ID | 정수형, 일련화된 제품 ID |
제품 카테고리 ID | 정수형, 직렬화된 제품 카테고리 ID |
행동 유형 | 문자열, 열거 유형: 'pv': 제품 세부정보 페이지의 pv, 'buy': 제품 구매 'cart': 장바구니에 제품 추가; |
타임스탬프 | 동작이 발생한 타임스탬프 |
준비
데이터 세트 다운로드
- Taobao 사용자 쇼핑 행동 데이터 세트를 로컬 컴퓨터에 다운로드한 후 다음 명령을 사용하여 압축을 해제합니다.
unzip UserBehavior.csv.zip
- 압축이 풀린 데이터 세트 파일(UserBehavior.csv)을 gzip 형식으로 압축합니다.
gzip UserBehavior.csv
외부 무대 만들기
- Databend Cloud에 로그인하고 새 작업 공간을 만듭니다.
- 작업 공간에서 다음 SQL 문을 실행하여 Alibaba Cloud에 "mycsv"라는 외부 단계를 생성합니다.
CREATE STAGE mycsv URL = 's3://<YOUR_BUCKET_NAME>'
CONNECTION = (
ACCESS_KEY_ID = '<YOUR_ACCESS_KEY_ID>',
SECRET_ACCESS_KEY = '<YOUR_SECRET_ACCESS_KEY>',
ENDPOINT_URL = '<YOUR_ENDPOINT_URL>',
ENABLE_VIRTUAL_HOST_STYLE = TRUE
)
FILE_FORMAT = (
TYPE = CSV
COMPRESSION = AUTO
);
- 다음 SQL 문을 실행하여 Databend Cloud가 외부 스테이지에 액세스할 수 있는지 확인합니다.
LIST @mycsv;
외부 스테이지에 데이터 세트 업로드
BendSQL을 사용하여 압축된 데이터 세트 파일(UserBehavior.csv.gz)을 외부 스테이지에 업로드합니다. 컴퓨팅 클러스터의 연결 정보를 얻으려면 컴퓨팅 클러스터에 연결을 참조하십시오 .
(base) eric@Erics-iMac ~ % bendsql --host tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn \
--user=cloudapp \
--password=<YOUR_PASSWORD> \
--database="default" \
--port=443 --tls
Welcome to BendSQL 0.9.3-db6b232(2023-10-26T12:36:55.578667000Z).
Connecting to tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn:443 as user cloudapp.
Connected to DatabendQuery v1.2.183-nightly-1ed9a826ed(rust-1.72.0-nightly-2023-10-28T22:10:15.618365223Z)
cloudapp@tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn:443/default> PUT fs:///Users/eric/Documents/UserBehavior.csv.gz @mycsv
PUT fs:///Users/eric/Documents/UserBehavior.csv.gz @mycsv
┌─────────────────────────────────────────────────────────────────┐
│ file │ status │ size │
│ String │ String │ UInt64 │
├───────────────────────────────────────────┼─────────┼───────────┤
│ /Users/eric/Documents/UserBehavior.csv.gz │ SUCCESS │ 949805035 │
└─────────────────────────────────────────────────────────────────┘
1 file uploaded in 401.807 sec. Processed 1 file, 905.80 MiB (0.00 file/s, 2.25 MiB/s)
데이터 가져오기 및 정리
테이블 생성
작업 영역에서 다음 SQL 문을 실행하여 데이터 세트에 대한 테이블을 만듭니다.
CREATE TABLE `user_behavior` (
`user_id` INT NOT NULL,
`item_id` INT NOT NULL,
`category_id` INT NOT NULL,
`behavior_type` VARCHAR,
`ts` TIMESTAMP,
`day` DATE );
데이터 정리 및 가져오기
-
다음 SQL 문을 실행하여 데이터를 테이블로 가져오는 동시에 정리를 완료합니다.
- 시간대 외부의 유효하지 않은 데이터 제거
- 데이터 중복 제거
- 추가 데이터 열 생성
INSERT INTO user_behavior
SELECT $1,$2,$3,$4,to_timestamp($5::bigint) AS ts, to_date(ts) day
FROM @mycsv/UserBehavior.csv.gz WHERE day BETWEEN '2017-11-25' AND '2017-12-03'
GROUP BY $1,$2,$3,$4,ts;
- 다음 SQL 문을 실행하여 데이터 가져오기가 성공했는지 확인합니다. 이 문은 테이블에서 10행의 데이터를 반환합니다.
SELECT * FROM user_behavior LIMIT 10;
데이터 분석
사전 준비와 데이터 가져오기를 완료한 후, 본격적으로 데이터 분석을 시작했습니다.
이용자 트래픽 및 쇼핑 상황 분석
총 방문수 및 이용자 수
SELECT SUM(CASE WHEN behavior_type = 'pv' THEN 1 ELSE 0 END) as pv,
COUNT(DISTINCT user_id) as uv
FROM user_behavior;
일일 평균 방문수 및 사용자 수
SELECT day,
SUM(CASE WHEN behavior_type = 'pv' THEN 1 ELSE 0 END) AS pv,
COUNT(DISTINCT user_id) AS uv
FROM user_behavior
GROUP BY day
ORDER BY day;
대시보드 기능을 사용하여 선형 차트를 생성할 수도 있습니다 .
각 사용자의 쇼핑 상황을 계산하고 새 테이블 user_behavior_count를 생성합니다.
create table user_behavior_count as select user_id,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, --点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
group by user_id;
재구매율 : 구매한 사용자보다 2배 이상 구매한 사용자의 비율
select sum(case when buy > 1 then 1 else 0 end) / sum(case when buy > 0 then 1 else 0 end)
from user_behavior_count;
사용자 행동 전환율
클릭/(장바구니 담기 + 소장)/구매, 링크별 전환율
select a.pv,
a.fav,
a.cart,
a.fav + a.cart as `fav+cart`,
a.buy,
round((a.fav + a.cart) / a.pv, 4) as pv2favcart,
round(a.buy / (a.fav + a.cart), 4) as favcart2buy,
round(a.buy / a.pv, 4) as pv2buy
from(
select sum(pv) as pv, --点击数
sum(fav) as fav, --收藏数
sum(cart) as cart, --加购物车数
sum(buy) as buy --购买数
from user_behavior_count
) as a;
1시간 안에 탐색 -> 쇼핑 추가 -> 결제를 완료한 사용자 수를 계산합니다.
SELECT
count_if(level>=1) as pv, count_if(level>=2) as cart, count_if(level>=3) as buy
FROM
(
SELECT
user_id,
window_funnel(3600000000)(ts, behavior_type = 'pv',behavior_type = 'cart',behavior_type = 'buy') AS level
FROM user_behavior
GROUP BY user_id
);
사용자 행동 습관
일일 사용자 쇼핑 행동
select to_hour(ts) as hour,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, --点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
group by hour
order by hour;
대시보드 기능을 사용하여 선형 차트를 생성할 수도 있습니다 .
주간 사용자 쇼핑 행동
select to_day_of_week(day) as weekday,day,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, --点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
where day between '2017-11-27' and '2017-12-03'
group by weekday,day
order by weekday;
대시보드 기능을 사용하여 히스토그램을 생성할 수도 있습니다 .
RFM 모델을 기반으로 가치 있는 사용자 찾기
RFM 모델은 고객 가치와 고객 수익 창출 능력을 측정하는 중요한 도구이자 수단으로, 데이터 분석을 위한 최상의 지표를 구성하는 세 가지 요소는 다음과 같습니다.
- R-Recency (마지막 구매 시간)
- F-Frequency (소비 주파수)
- M-머니(소모금액)
R-Recency(최근 구매 시간): R 값이 높을수록 사용자가 더 활동적임을 나타냅니다.
select user_id,
to_date('2017-12-04') - max(day) as R,
dense_rank() over(order by (to_date('2017-12-04') - max(day))) as R_rank
from user_behavior
where behavior_type = 'buy'
group by user_id
limit 10;
F-Frequency(소비 빈도): F 값이 높을수록 사용자 충성도가 높아집니다.
select user_id,
count(1) as F,
dense_rank() over(order by count(1) desc) as F_rank
from user_behavior
where behavior_type = 'buy'
group by user_id
limit 10;
사용자 그룹화
구매 행동을 보이는 사용자는 순위에 따라 그룹화되고 5개 그룹으로 나뉩니다.
- 상위 1/5명의 사용자가 5점을 부여합니다.
- 상위 1/5 - 2/5 사용자는 4점을 받습니다.
- 상위 2/5 - 3/5 사용자는 3점을 받습니다.
- 최초 3/5 ~ 4/5 사용자는 2포인트를 받습니다.
- 나머지 사용자는 1점을 부여합니다.
이 규칙에 따라 사용자의 시간 간격 순위와 구매 빈도 순위가 각각 점수를 매기고 최종적으로 두 점수를 합산하여 사용자의 최종 점수가 됩니다.
with cte as(
select user_id,
to_date('2017-12-04') - max(day) as R,
dense_rank() over(order by (to_date('2017-12-04') - max(day))) as R_rank,
count(1) as F,
dense_rank() over(order by count(1) desc) as F_rank
from user_behavior
where behavior_type = 'buy'
group by user_id)
select user_id, R, R_rank, R_score, F, F_rank, F_score, R_score + F_score AS score
from(
select *,
case ntile(5) over(order by R_rank) when 1 then 5
when 2 then 4
when 3 then 3
when 4 then 2
when 5 then 1
end as R_score,
case ntile(5) over(order by F_rank) when 1 then 5
when 2 then 4
when 3 then 3
when 4 then 2
when 5 then 1
end as F_score
from cte
) as a
order by score desc
limit 20;
제품 차원 분석
최고 판매 품목
select item_id ,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, --点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
group by item_id
order by buy desc
limit 10;
최고 판매 제품 카테고리
select category_id ,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, --点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
group by category_id
order by buy desc
limit 10;
사용자 유지 분석
시작하기 전에 "day_users" 테이블을 만들고 데이터를 삽입하세요.
create table day_users(
day date,
users bitmap);
insert into day_users select day, build_bitmap(list(user_id::UInt64)) from user_behavior group by day;
일일 UV 통계
select day,bitmap_count(users) from day_users order by day;
상대적 보유
여기서는 11월 23일과 비교하여 12월 2일에도 여전히 Taobao를 사용하는 사용자를 계산합니다.
select bitmap_count(bitmap_and(a.users, b.users))
from (select users from day_users where day='2017-11-25') a ,
(select users from day_users where day='2017-12-02') b;
비교적 새로운
select bitmap_count(bitmap_not(b.users, a.users)) from (select users from day_users where day='2017-11-25') a ,
(select users from day_users where day='2017-12-02') b;
Linus는 커널 개발자가 탭을 공백으로 대체하는 것을 막기 위해 문제를 직접 해결했습니다.
그의 아버지는 코드를 작성할 수 있는 몇 안 되는 리더 중 한 명이고, 둘째 아들은 오픈 소스 기술 부서의 책임자이며, 막내 아들은 핵심입니다.
Huawei: 일반적으로 사용되는 모바일 애플리케이션 5,000개를 변환하는 데 1년이 걸렸습니다. Hongmeng으로의 포괄적인 마이그레이션
Java는 타사 취약점에 가장 취약한 언어입니다. Hongmeng의 아버지인 Wang Chenglu:
오픈
소스 Hongmeng은 유일한 아키텍처 혁신입니다. 중국 기초 소프트웨어 분야의
마화텅(Ma Huateng)과 저우홍이(Zhou Hongyi)가 악수를 하며 "원한을 풀다"
전 마이크로소프트 개발자: 윈도우 11 성능은 "터무니없을 정도로 나쁘다"
라오샹지가 오픈소스인 것은 코드는 아니지만 그 이유는 다음과 같다.
Google이 대규모 구조 조정을 발표
했습니다
.