analysis.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import json
  2. import pymysql
  3. import pyecharts.options as opts
  4. from pyecharts.charts import Line
  5. class Analysis(object):
  6. def __init__(self):
  7. self.platform_list = ["xiaoniangao", "gongzhonghao", "shipinhao", "douyin", "kuaishou", "fuqiwang",
  8. "haitunzhufu", "haokanshipin", "benshanzhufu", "zhongmiaoyinxin"]
  9. self.date_last = "2023-11-01"
  10. self.out_put = {}
  11. def analysis_videos(self):
  12. connection = pymysql.connect(
  13. host="rm-bp1159bu17li9hi94ro.mysql.rds.aliyuncs.com", # 数据库IP地址,内网地址
  14. port=3306, # 端口号
  15. user="crawler", # mysql用户名
  16. passwd="crawler123456@", # mysql用户登录密码
  17. db="piaoquan-crawler", # 数据库名
  18. # 如果数据库里面的文本是utf8编码的,charset指定是utf8
  19. charset="utf8")
  20. for platform in self.platform_list:
  21. select_sql = f"""SELECT DATE(create_time) as DATE, count(1) as Total
  22. FROM crawler_video
  23. WHERE `platform` = "{platform}" and create_time > "{self.date_last}"
  24. GROUP BY DATE( `create_time` )
  25. ORDER BY DATE( `create_time`) DESC; """
  26. out_dict = {}
  27. mysql = connection.cursor()
  28. mysql.execute(select_sql)
  29. data_lines = mysql.fetchall()
  30. for i in data_lines:
  31. date_info = i[0].strftime('%Y-%m-%d')
  32. count = i[1]
  33. out_dict[date_info] = count
  34. self.out_put[platform] = out_dict
  35. connection.close()
  36. class Drawer(object):
  37. def __init__(self, json_obj):
  38. self.ori_data = json_obj
  39. self.x_list = ["2023-11-{:02}".format(i) for i in range(1, 22)]
  40. def draw_line(self):
  41. line = Line()
  42. line.add_xaxis(xaxis_data=self.x_list)
  43. for key in self.ori_data:
  44. # print(key, self.ori_data[key])
  45. each_obj = self.ori_data[key]
  46. line.add_yaxis(
  47. series_name=key,
  48. stack="Total",
  49. y_axis=[each_obj.get(i, 0) for i in self.x_list],
  50. label_opts=opts.LabelOpts(is_show=False),
  51. is_smooth=True
  52. )
  53. line.set_global_opts(
  54. title_opts=opts.TitleOpts(title="入库量折线图", item_gap=10, padding=10, pos_top="10"),
  55. legend_opts=opts.LegendOpts(pos_right=True),
  56. tooltip_opts=opts.TooltipOpts(trigger="axis", padding=100),
  57. yaxis_opts=opts.AxisOpts(
  58. type_="value",
  59. axistick_opts=opts.AxisTickOpts(is_show=True),
  60. splitline_opts=opts.SplitLineOpts(is_show=True),
  61. offset=10
  62. ),
  63. xaxis_opts=opts.AxisOpts(type_="category", boundary_gap=True, offset=10),
  64. )
  65. line.render("test.html")
  66. if __name__ == '__main__':
  67. A = Analysis()
  68. A.analysis_videos()
  69. result_data = A.out_put
  70. D = Drawer(result_data)
  71. D.draw_line()