forked from nivedita0/256
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheda_analysis.py
More file actions
76 lines (63 loc) · 3.08 KB
/
Copy patheda_analysis.py
File metadata and controls
76 lines (63 loc) · 3.08 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""
Exploratory Data Analysis (EDA) for Recommender System
Performs comprehensive analysis of user-item interaction data
"""
import numpy as np
from collections import Counter
def perform_eda(user_items, item_users, user_ids, item_ids):
"""
Perform Exploratory Data Analysis on user-item interaction data
Args:
user_items: Dictionary mapping user_id to set of item_ids
item_users: Dictionary mapping item_id to set of user_ids
user_ids: List of all user IDs
item_ids: List of all item IDs
"""
print("\n" + "="*60)
print("EXPLORATORY DATA ANALYSIS")
print("="*60)
# Basic statistics
num_users = len(user_ids)
num_items = len(item_ids)
total_interactions = sum(len(items) for items in user_items.values())
print(f"\n1. Basic Statistics:")
print(f" - Number of users: {num_users:,}")
print(f" - Number of items: {num_items:,}")
print(f" - Total interactions: {total_interactions:,}")
print(f" - Average interactions per user: {total_interactions/num_users:.2f}")
print(f" - Average interactions per item: {total_interactions/num_items:.2f}")
# Sparsity
max_possible_interactions = num_users * num_items
sparsity = 1 - (total_interactions / max_possible_interactions)
print(f" - Matrix sparsity: {sparsity*100:.4f}%")
# User interaction distribution
user_interaction_counts = [len(items) for items in user_items.values()]
print(f"\n2. User Interaction Distribution:")
print(f" - Min interactions per user: {min(user_interaction_counts)}")
print(f" - Max interactions per user: {max(user_interaction_counts)}")
print(f" - Median interactions per user: {np.median(user_interaction_counts):.2f}")
print(f" - Mean interactions per user: {np.mean(user_interaction_counts):.2f}")
print(f" - Std dev: {np.std(user_interaction_counts):.2f}")
# Item popularity distribution
item_interaction_counts = [len(users) for users in item_users.values()]
print(f"\n3. Item Popularity Distribution:")
print(f" - Min interactions per item: {min(item_interaction_counts)}")
print(f" - Max interactions per item: {max(item_interaction_counts)}")
print(f" - Median interactions per item: {np.median(item_interaction_counts):.2f}")
print(f" - Mean interactions per item: {np.mean(item_interaction_counts):.2f}")
print(f" - Std dev: {np.std(item_interaction_counts):.2f}")
# Top items
item_counts = Counter()
for items in user_items.values():
item_counts.update(items)
top_items = item_counts.most_common(10)
print(f"\n4. Top 10 Most Popular Items:")
for item_id, count in top_items:
print(f" - Item {item_id}: {count} interactions")
# Users with most interactions
user_counts = [(uid, len(items)) for uid, items in user_items.items()]
user_counts.sort(key=lambda x: x[1], reverse=True)
print(f"\n5. Top 10 Most Active Users:")
for user_id, count in user_counts[:10]:
print(f" - User {user_id}: {count} interactions")
print("\n" + "="*60 + "\n")