session_id, ip, user_agent
아래 조건 에 따라 웹 사이트 액세스 데이터 형식 과 시간 소인 (선택 사항)이 제공되면 세션을 순 방문자수로 가장 잘 클러스터링하는 방법은 무엇입니까?
session_id
:는 모든 새로운 방문자에게 부여 된 아이디입니다. 만료되지는 않지만 사용자가 쿠키를 허용하지 않거나 쿠키를 지우거나 브라우저를 변경하거나 장치를 변경하면 더 이상 인식되지 않습니다.
IP
여러 사용자가 공유 할 수 있으며 (무료 Wi-Fi 카페 또는 ISP의 IP 재 할당을 상상해보십시오) 최소 2 명의 집과 직장이있을 것입니다.
User_agent
브라우저 + OS 버전으로 장치를 구별 할 수 있습니다. 예를 들어 사용자는 휴대 전화와 랩톱을 모두 사용하지만 Windows + 애플 랩톱을 사용하지는 않습니다. 동일한 세션 ID에 여러 개의 useragent가있을 가능성은 없습니다.
데이터는 여기에서 바이올린처럼 보일 수 있습니다 : http://sqlfiddle.com/#!2/c4de40/1
물론 우리는 가정에 대해 이야기하고 있지만 가능한 현실에 가까워지는 것에 관한 것입니다. 예를 들어, session_id가 다른 제한된 시간 프레임에서 동일한 ip 및 useragent가 발생하는 경우, 일부 예외를 제외하고는 동일한 사용자라고 가정합니다.
편집 : 문제가 해결되는 언어는 중요하지 않으며 대부분 구현이 아닌 논리에 관한 것입니다. 의사 코드는 괜찮습니다.
편집 : 바이올린의 느린 특성으로 인해 mysql을 읽거나 실행할 수 있습니다.
select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from
(select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
from
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
order by 1
)d
inner join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 )e
on d.nr>=e.nr