짜리몽땅 매거진
[Python] 상관분석하고 네트워크 차트로 시각화하기 본문
앱서비스의 DB와 로그데이터를 활용해 각 유저와 기능 관련 수치들을 변수로 설정한 뒤 상관분석을 진행하면, 어떤 기능들이 상호 연관성이 높은지 쉽게 파악해 추후 새로운 전략을 짜는데 용이하게 활용할 수 있다. 더불어 상관분석 결과를 '상관계수 네트워크 차트' 형태로 시각화한다면 한 눈에 파악하기 쉽다.
그래서 오늘은 실제 앱서비스 데이터를 바탕으로 위 과정을 실습해보자.
* 실제 기업 데이터로, 수치는 비공개 처리합니다.
1. 라이브러리 호출 및 데이터 불러오기
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df_merged = pd.read_csv('상관분석 데이터.csv')
날짜를 인덱스로 설정해 각 유저별 기능별 수치를 사전에 전처리한 데이터를 불러온다.
2. 상관분석 진행
# 분석 대상 칼럼 리스트
target_columns = [
'project_consumedTime', 'project_daily_count', 'project_total_count', 'project_total_consumedTime',
'participateOnHotVote', 'vote_daily_count', 'vote_total_count', 'daily_participateOnHotVote',
'total_participateOnHotVote', 'fortune_daily_count', 'fortune_total_count', 'daily_noti_count',
'total_noti_count', 'credit_scale', 'daily_creit_count', 'total_credit_count',
'daily_scale_sum', 'total_scale_sum'
]
# 상관계수 계산
correlation_matrix = df_merged[target_columns].corr()
# 히트맵 시각화
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, fmt=".2f", cmap="coolwarm", cbar=True, square=True)
plt.title("Correlation Heatmap of Selected Columns")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
데이터셋의 칼럼 중 상관분석을 진행할 변수를 선언한 뒤, 상관분석을 진행한다. 상관분석 결과는 우선 히트맵으로 시각화하여 확인한다.
3. 상관계수 네트워크 차트 시각화
import networkx as nx
# 상관계수 계산
correlation_matrix = df_merged[target_columns].corr()
# 네트워크 그래프 생성
G = nx.Graph()
# 노드 추가
for column in target_columns:
G.add_node(column)
# 상관계수를 기반으로 엣지 추가
for i in range(len(correlation_matrix)):
for j in range(i+1, len(correlation_matrix)): # 대각선 이하만 고려
corr_value = correlation_matrix.iloc[i, j]
if corr_value != 0: # 상관계수가 0이 아닌 경우에만 엣지 추가
# 선 색상 및 두께 설정
edge_color = 'red' if corr_value > 0 else 'blue'
edge_width = abs(corr_value) * 5 # 절대값에 비례해 두께 조정
G.add_edge(
correlation_matrix.index[i],
correlation_matrix.columns[j],
weight=edge_width,
color=edge_color
)
# 색상과 두께 속성 가져오기
edges = G.edges(data=True)
colors = [edge[2]['color'] for edge in edges]
weights = [edge[2]['weight'] for edge in edges]
# 네트워크 시각화
plt.figure(figsize=(12, 12))
pos = nx.spring_layout(G, seed=42) # 노드 위치를 spring layout으로 배치
nx.draw_networkx_nodes(G, pos, node_size=700, node_color="lightgrey")
nx.draw_networkx_labels(G, pos, font_size=10, font_color="black")
nx.draw_networkx_edges(G, pos, edge_color=colors, width=weights)
plt.title("Correlation Network Graph")
plt.axis('off')
plt.show()
변수 간 상관계수를 네트워크 차트로 시각화하면 더 한 눈에 파악하기 쉽다. 이를 위해 양의 상관관계인 변수는 붉은색, 음의 상관관계인 변수는 푸른색 선으로 구역을 잇고, 상관관계가 클수록 선의 두께가 두꺼워지도록 시각화하는 코드를 작성했다. 결과는 아래 이미지와 같다.
위 시각화 결과는 변수가 너무 많은 탓에 가시성이 떨어진다. 따라서 Apache Superset이나 Tableau와 같은 시각화 전용 툴을 활용하면 아래와 같이 좀 더 깔끔한 차트로 제작할 수 있다.
'Data > Python' 카테고리의 다른 글
[Python] 콘텐츠 기반 추천 시스템 (2) | 2024.12.13 |
---|---|
[Python] Featuretools로 고객데이터 분석하기 (0) | 2024.10.28 |
[Python] 상관분석 (0) | 2024.07.01 |
[Python] 네이버 뉴스기사 크롤링하고 감성분석하기 (1) | 2024.06.25 |
[Python] 데이터에서의 Outlier 처리 (0) | 2024.04.22 |