manager.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. """
  2. 往飞书内写数据
  3. """
  4. import numpy as np
  5. from feishu.feishu import Feishu
  6. from applications.mysql import Mysql
  7. from applications.config import platform_map
  8. class FeishuManager(object):
  9. """
  10. 写入飞书管理器
  11. """
  12. def __init__(self):
  13. self.F = Feishu()
  14. self.M = Mysql()
  15. self.map = {
  16. "产品功能实验": "ca8499",
  17. "产品实验": "gwzBOM",
  18. "广告实验": "Pt6JUj",
  19. "产品/广告实验": "avHzKO",
  20. " 产品/广告实验": "avHzKO",
  21. "算法实验": "MFwgBr",
  22. "广告类型策略实验": "XCCAOP",
  23. "广告类型策略实验层": "XCCAOP"
  24. }
  25. self.subject_map = {
  26. "小程序分享人数": "微信分享人数",
  27. "小程序分享次数": "微信分享次数",
  28. "小程序访问人数": "微信访问人数",
  29. "广告 eCPM": "腾讯CPM",
  30. "广告收入": "腾讯收入",
  31. "广告曝光人数": "腾讯曝光人数",
  32. "广告曝光次数": "腾讯曝光次数"
  33. }
  34. self.order_map = {
  35. "腾讯曝光次数": 0,
  36. "腾讯曝光人数": 1,
  37. "腾讯CPM": 2,
  38. "腾讯收入": 11,
  39. "微信访问人数": 14,
  40. "微信分享人数": 15,
  41. "微信分享次数": 16
  42. }
  43. def select(self, minigram, date, task_name):
  44. """
  45. 从mysql中把数据读出来
  46. :param task_name: 实验名称
  47. :param minigram: 小程序名称
  48. :param date: 日期
  49. :return: data_dict
  50. """
  51. select_sql = f"""SELECT * FROM we_analysis_results where mini_program = '{minigram}' and date = '{date}' and task_name = '{task_name}';"""
  52. we_tuple = self.M.select(select_sql)
  53. data_dict = {}
  54. for line in we_tuple:
  55. result = list(line[5:])
  56. key = line[3]
  57. data_dict[key] = result
  58. return data_dict
  59. def insert(self, we_list, date, mini_program, task_name):
  60. """
  61. 处理矩阵,并且插入飞书表
  62. :param task_name: 实验名称
  63. :param date: 日期
  64. :param mini_program: 小程序
  65. :param we_list: we分析矩阵
  66. :return: None
  67. """
  68. rows = len(we_list)
  69. datas = [
  70. [date, 0, mini_program, "ab{}".format(i), "00:00", "", "实验名称"] + we_list[i]
  71. for i in range(rows)
  72. ]
  73. self.F.insert_value(
  74. sheet_id=self.map[task_name],
  75. values=datas,
  76. ranges="A4:CI{}".format(4 + len(datas))
  77. )
  78. def process_data_dict(self, data_dict):
  79. """
  80. 把数据处理成格式
  81. :param data_dict: we-analysis-information
  82. :return:
  83. """
  84. init_array = np.zeros((25, 80))
  85. for key in data_dict.keys():
  86. sub_data = np.array(data_dict[key])
  87. index = self.order_map[self.subject_map[key]]
  88. init_array[:, index] = sub_data
  89. non_zero_rows = np.any(init_array != 0, axis=1)
  90. init_array = init_array[non_zero_rows]
  91. # 处理其他数据指标
  92. wechat_uv = np.where(init_array[:, 14] == 0, 0, init_array[:, 1] / init_array[:, 14])
  93. personal_expose = np.where(init_array[:, 1] == 0, 0, init_array[:, 0] / init_array[:, 1])
  94. total_arpu = np.where(init_array[:, 14] == 0, 0, (init_array[:, 11] + init_array[:, 12]) / init_array[:, 14])
  95. init_array[:, 10] = wechat_uv
  96. init_array[:, 3] = personal_expose
  97. init_array[:, 13] = total_arpu
  98. we_list = init_array.tolist()
  99. return we_list
  100. if __name__ == '__main__':
  101. Fm = FeishuManager()
  102. date_str = "2024-01-17"
  103. for account_name in platform_map.keys():
  104. for task_n in platform_map[account_name].keys():
  105. temp = Fm.select(account_name, date_str, task_n)
  106. temp_list = Fm.process_data_dict(temp)
  107. Fm.insert(temp_list, date_str, account_name, task_n)
  108. print(account_name, task_n)