고객의 `page_id` 이동 정보를 분석하고, 세션 내에서 페이지 간의 연결을 시각화하는 작업을 Python의 `networkx`를 사용해 구현할 수 있습니다. 아래는 이를 위한 예제 코드입니다.

### 예제 코드

```python
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 샘플 데이터프레임 생성
data = {
    'session_id': [1, 1, 1, 2, 2, 3, 3, 3],
    'customer_id': [101, 101, 101, 102, 102, 103, 103, 103],
    'page_id': ['home', 'product', 'cart', 'home', 'checkout', 'home', 'product', 'cart']
}

df = pd.DataFrame(data)

# 페이지 이동 정보를 담은 그래프 생성 함수
def build_page_transition_graph(df):
    # 세션별로 그룹화하여 페이지 이동 순서를 파악
    G = nx.DiGraph()  # 방향 그래프를 사용하여 페이지 이동을 나타냄
    
    for session, group in df.groupby('session_id'):
        pages = group['page_id'].tolist()
        # 각 세션 내 페이지 이동을 간선으로 추가
        for i in range(len(pages) - 1):
            G.add_edge(pages[i], pages[i+1])
    
    return G

# 그래프 생성
G = build_page_transition_graph(df)

# 페이지 이동의 연결 강도 계산 (간선의 가중치 추가)
for (u, v) in G.edges():
    if G.has_edge(u, v):
        if 'weight' in G[u][v]:
            G[u][v]['weight'] += 1
        else:
            G[u][v]['weight'] = 1

# 그래프 시각화 함수
def plot_graph(G):
    pos = nx.spring_layout(G)  # 그래프의 레이아웃 설정
    weights = [G[u][v]['weight'] for u, v in G.edges()]  # 간선의 가중치
    
    plt.figure(figsize=(10, 7))
    nx.draw_networkx_nodes(G, pos, node_color='skyblue', node_size=2000)
    nx.draw_networkx_edges(G, pos, width=weights, edge_color='gray', arrows=True)
    nx.draw_networkx_labels(G, pos, font_size=12, font_color='black')

    plt.title('Page Transition Graph')
    plt.show()

# 그래프 시각화
plot_graph(G)

# 연결이 많이 된 page_id 추출
most_connected_pages = sorted(G.degree, key=lambda x: x[1], reverse=True)
print("Most connected pages:", most_connected_pages)
```

### 코드 설명
1. **데이터 생성**: `session_id`, `customer_id`, `page_id`로 구성된 데이터프레임을 만듭니다.
2. **`build_page_transition_graph` 함수**: 각 세션 내에서 페이지 이동 정보를 추출하여 방향성 그래프(DiGraph)를 만듭니다.
   - 각 세션의 페이지 이동이 간선으로 추가됩니다.
3. **간선 가중치 계산**: 페이지 이동이 얼마나 자주 발생했는지, 간선의 가중치로 설정합니다.
4. **`plot_graph` 함수**: `networkx`와 `matplotlib`을 사용해 페이지 이동 네트워크를 시각화합니다.
5. **가장 많이 연결된 페이지 추출**: 페이지별 연결 강도를 기준으로 정렬해 가장 많이 연결된 페이지를 출력합니다.

### 결과:
- 이 코드는 각 세션에서 페이지 간의 이동을 시각적으로 보여주며, 페이지 이동 횟수에 따른 간선의 굵기가 조정됩니다.
- 또한, 가장 연결이 많이 된 페이지도 출력됩니다.

반응형

+ Recent posts