1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- coding: utf-8 -*-
- """
- @author: zsc
- @time: 2024/11/18
- @desc: 报告生成
- """
- import time
- import random
- from collections import defaultdict
- import matplotlib.pyplot as plt
- # 报告生成模块(续)
- class ReportGenerator:
- def __init__(self, data, anomalies, segments, action_stats):
- self.data = data
- self.anomalies = anomalies
- self.segments = segments
- self.action_stats = action_stats
- def generate(self):
- # 生成用户行为报告,并展示成图表形式
- report = {
- 'total_users': len(set([item['user'] for item in self.data])),
- 'total_actions': len(self.data),
- 'anomalies': self.anomalies,
- 'user_segments': self.segments,
- 'action_stats': self.action_stats
- }
- self.plot_action_stats(self.action_stats)
- self.plot_user_segments(self.segments)
- return report
- def plot_action_stats(self, action_stats):
- # 生成行为统计图表
- actions = list(action_stats.keys())
- counts = list(action_stats.values())
- plt.figure(figsize=(10, 6))
- plt.bar(actions, counts, color='skyblue')
- plt.xlabel('Actions')
- plt.ylabel('Counts')
- plt.title('Action Statistics')
- plt.show()
- def plot_user_segments(self, segments):
- # 生成用户分群图表
- segment_names = list(segments.keys())
- segment_counts = [len(segments[segment]) for segment in segment_names]
- plt.figure(figsize=(10, 6))
- plt.bar(segment_names, segment_counts, color='lightgreen')
- plt.xlabel('User Segments')
- plt.ylabel('Number of Users')
- plt.title('User Segmentation')
- plt.show()
|