Advertisement
mikhailemv

Untitled

Jan 9th, 2023
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.26 KB | None | 0 0
  1. class Report:
  2.     @staticmethod
  3.     def generate_image(input_name: str,
  4.                        dynamics_slr: dict,
  5.                        dynamics_count_vac: dict,
  6.                        dynamics_slr_name: dict,
  7.                        dynamics_count_vac_name: dict,
  8.                        dynamics_slr_cities: dict,
  9.                        dynamics_count_vac_cities: dict):
  10.         fig = plt.figure(figsize=(10, 6))
  11.         plt.rcParams['font.size'] = '8'
  12.         width = 0.4
  13.         years = np.arange(len(dynamics_slr.keys()))
  14.         ax = fig.add_subplot(221)
  15.         ax.bar(years - width / 2,
  16.                dynamics_slr.values(),
  17.                width,
  18.                label='средняя з/п')
  19.         ax.bar(years + width / 2,
  20.                dynamics_slr_name.values(),
  21.                width,
  22.                label=f'з/п {input_name}')
  23.         ax.set_title('Уровень зарплат по годам')
  24.         ax.set_xticks(years, dynamics_slr.keys(), rotation='vertical')
  25.         ax.set_xticklabels(dynamics_slr.keys())
  26.         ax.legend()
  27.  
  28.         bx = fig.add_subplot(222)
  29.         bx.bar(years - width / 2,
  30.                dynamics_count_vac.values(),
  31.                width,
  32.                label='Количество вакансий')
  33.         bx.bar(years + width / 2,
  34.                dynamics_count_vac_name.values(),
  35.                width,
  36.                label=f'Количество вакансий\n{input_name}')
  37.         bx.set_title('Количество вакансий по годам')
  38.         bx.set_xticks(years, dynamics_slr.keys(), rotation='vertical')
  39.         bx.set_xticklabels(dynamics_slr.keys())
  40.         bx.legend()
  41.         bx.grid(axis='y')
  42.  
  43.         dynamics_slr_cities_rev = dict(reversed(list(dynamics_slr_cities.items())[:10]))
  44.         cities_slr = np.arange(len(dynamics_slr_cities_rev.keys()))
  45.         cx = fig.add_subplot(223)
  46.         cx.barh(cities_slr - width / 2, dynamics_slr_cities_rev.values(), width + 0.2)
  47.         cx.set_title('Уровень зарплат по годам')
  48.         cx.set_yticks(cities_slr)
  49.         cx.set_yticklabels(dynamics_slr_cities_rev.keys())
  50.         cx.grid(axis='x')
  51.  
  52.         dx = fig.add_subplot(224)
  53.         dynamics_count_vac_cit_rev = dict(reversed(list(dynamics_count_vac_cities.items())))
  54.         dx.pie(dynamics_count_vac_cit_rev.values(),
  55.                labels=dynamics_count_vac_cit_rev.keys())
  56.         dx.set_title('Доля вакансий по городам')
  57.         dx.axis('equal')
  58.         fig.tight_layout()
  59.        
  60.         fig.savefig('graph.png')
  61.  
  62.     def generate_excel(self,
  63.                        input_name: str,
  64.                        dynamics_slr: dict,
  65.                        dynamics_count_vac: dict,
  66.                        dynamics_slr_name: dict,
  67.                        dynamics_count_vac_name: dict,
  68.                        dynamics_slr_cities: dict,
  69.                        dynamics_count_vac_cities: dict):
  70.         workbook = Workbook()
  71.         stats_by_year = workbook.worksheets[0]
  72.         stats_by_year.title = "Cтатистика по годам"
  73.         stats_by_city = workbook.create_sheet("Cтатистика по городам")
  74.  
  75.         stats_by_year.append(['Год', 'Средняя зарплата', f"Средняя зарплата - {input_name}",
  76.                               'Количество вакансий', f"Количество вакансий - {input_name}"])
  77.         for i, year in enumerate(dynamics_slr.keys(), 2):
  78.             stats_by_year.cell(row=i, column=1, value=year)
  79.             for j, dictionary in enumerate((dynamics_slr, dynamics_count_vac,
  80.                                             dynamics_slr_name, dynamics_count_vac_name), 2):
  81.                 stats_by_year.cell(row=i, column=j, value=dictionary[year])
  82.  
  83.         stats_by_city.append(['Город', 'Уровень зарплат', '', 'Город', 'Доля вакансий'])
  84.         for i, city in enumerate(dynamics_slr_cities.keys(), 2):
  85.             stats_by_city.cell(row=i, column=1, value=city)
  86.             stats_by_city.cell(
  87.                 row=i, column=2, value=dynamics_slr_cities[city])
  88.         for i, city in enumerate(dynamics_count_vac_cities.keys(), 2):
  89.             stats_by_city.cell(row=i, column=4, value=city)
  90.             stats_by_city.cell(
  91.                 row=i, column=5, value=dynamics_count_vac_cities[city])
  92.  
  93.         self.workbook(workbook)
  94.         workbook.save('report.xlsx')
  95.  
  96.     @staticmethod
  97.     def workbook(wb):
  98.         bold_font = Font(bold=True)
  99.         thin = Side(border_style="thin", color="000000")
  100.         outline = Border(top=thin, left=thin, right=thin, bottom=thin)
  101.         for worksheet in wb.worksheets:
  102.             for column_cells in worksheet.columns:
  103.                 length = max(len(str(cell.value) if cell.value is not None else "")
  104.                              for cell in column_cells)
  105.                 worksheet.column_dimensions[column_cells[0]
  106.                                             .column_letter].width = length + 3
  107.             for cell in worksheet[1]:
  108.                 cell.font = bold_font
  109.             for column in tuple(worksheet.columns):
  110.                 if column[1].value is None:
  111.                     continue
  112.                 for cell in column:
  113.                     cell.border = outline
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement