GenerateReport.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author: zsc
  4. @time: 2024/11/18
  5. @desc: 报告生成
  6. """
  7. import time
  8. import random
  9. from collections import defaultdict
  10. import matplotlib.pyplot as plt
  11. # 报告生成模块(续)
  12. class ReportGenerator:
  13. def __init__(self, data, anomalies, segments, action_stats):
  14. self.data = data
  15. self.anomalies = anomalies
  16. self.segments = segments
  17. self.action_stats = action_stats
  18. def generate(self):
  19. # 生成用户行为报告,并展示成图表形式
  20. report = {
  21. 'total_users': len(set([item['user'] for item in self.data])),
  22. 'total_actions': len(self.data),
  23. 'anomalies': self.anomalies,
  24. 'user_segments': self.segments,
  25. 'action_stats': self.action_stats
  26. }
  27. self.plot_action_stats(self.action_stats)
  28. self.plot_user_segments(self.segments)
  29. return report
  30. def plot_action_stats(self, action_stats):
  31. # 生成行为统计图表
  32. actions = list(action_stats.keys())
  33. counts = list(action_stats.values())
  34. plt.figure(figsize=(10, 6))
  35. plt.bar(actions, counts, color='skyblue')
  36. plt.xlabel('Actions')
  37. plt.ylabel('Counts')
  38. plt.title('Action Statistics')
  39. plt.show()
  40. def plot_user_segments(self, segments):
  41. # 生成用户分群图表
  42. segment_names = list(segments.keys())
  43. segment_counts = [len(segments[segment]) for segment in segment_names]
  44. plt.figure(figsize=(10, 6))
  45. plt.bar(segment_names, segment_counts, color='lightgreen')
  46. plt.xlabel('User Segments')
  47. plt.ylabel('Number of Users')
  48. plt.title('User Segmentation')
  49. plt.show()