Advertisement
mikhailemv

5.3

Dec 17th, 2022
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.15 KB | None | 0 0
  1. from csv import reader
  2.  
  3.  
  4. class Vacancy:
  5.     currency_to_rub = \
  6.         {
  7.             "AZN": 35.68,
  8.             "BYR": 23.91,
  9.             "EUR": 59.90,
  10.             "GEL": 21.74,
  11.             "KGS": 0.76,
  12.             "KZT": 0.13,
  13.             "RUR": 1,
  14.             "UAH": 1.64,
  15.             "USD": 60.66,
  16.             "UZS": 0.0055,
  17.         }
  18.  
  19.     def __init__(self, separate_vacancy: dict) -> None:
  20.         self.salary_currency = separate_vacancy['salary_currency']
  21.         self.salary_from = int(float(separate_vacancy['salary_from']))
  22.         self.salary_to = int(float(separate_vacancy['salary_to']))
  23.         self.salary_average = self.currency_to_rub[self.salary_currency] * (self.salary_from + self.salary_to) / 2
  24.         self.area_name = separate_vacancy['area_name']
  25.         self.year = int(separate_vacancy['published_at'][:4])
  26.         self.name = separate_vacancy['name']
  27.  
  28.  
  29. class InputConnect:
  30.     def __init__(self) -> None:
  31.         self.file_name = input('Введите название файла: ')
  32.         self.vacancy_name = input('Введите название профессии: ')
  33.  
  34.         dataset = DataSet(self.file_name, self.vacancy_name)
  35.         dataset.reader_by_csv()
  36.  
  37.  
  38. class DataSet:
  39.     def __init__(self, csv_file_name: str, needed_vacancy: str) -> None:
  40.         self.needed_vacancy = needed_vacancy
  41.         self.csv_file_name = csv_file_name
  42.  
  43.     def reader_by_csv(self):
  44.         headline_list = list()
  45.         salaries_dict, vacancies_number_dict, vacancies_names_dict, \
  46.             vacancies_numbers_dict, city_salaries, numbers_salaries = dict(), dict(), dict(), \
  47.             dict(), dict(), dict()
  48.         vacancies_counter = 0
  49.         with open(self.csv_file_name, mode='r', encoding='utf-8-sig') as current_file:
  50.             csv_reader = reader(current_file)
  51.             for reader_index, row_value in enumerate(csv_reader):
  52.                 if reader_index == 0:
  53.                     csv_header_length = len(row_value)
  54.                     headline_list = row_value
  55.                 elif '' not in row_value and \
  56.                         len(row_value) == csv_header_length:
  57.                     current_vacancy = Vacancy(dict(zip(headline_list, row_value)))
  58.  
  59.                     if current_vacancy.year not in vacancies_number_dict:
  60.                         vacancies_number_dict[current_vacancy.year] = 1
  61.                     else:
  62.                         vacancies_number_dict[current_vacancy.year] += 1
  63.  
  64.                     if current_vacancy.year not in salaries_dict:
  65.                         salaries_dict[current_vacancy.year] = [current_vacancy.salary_average]
  66.                     else:
  67.                         salaries_dict[current_vacancy.year].append(current_vacancy.salary_average)
  68.  
  69.                     if current_vacancy.area_name not in city_salaries:
  70.                         city_salaries[current_vacancy.area_name] = [current_vacancy.salary_average]
  71.                     else:
  72.                         city_salaries[current_vacancy.area_name].append(current_vacancy.salary_average)
  73.  
  74.                     if current_vacancy.area_name not in numbers_salaries:
  75.                         numbers_salaries[current_vacancy.area_name] = 1
  76.                     else:
  77.                         numbers_salaries[current_vacancy.area_name] += 1
  78.  
  79.                     if current_vacancy.name.find(self.needed_vacancy) != -1:
  80.                         if current_vacancy.year not in vacancies_numbers_dict:
  81.                             vacancies_numbers_dict[current_vacancy.year] = 1
  82.                         else:
  83.                             vacancies_numbers_dict[current_vacancy.year] += 1
  84.  
  85.                         if current_vacancy.year not in vacancies_names_dict:
  86.                             vacancies_names_dict[current_vacancy.year] = [current_vacancy.salary_average]
  87.                         else:
  88.                             vacancies_names_dict[current_vacancy.year].append(current_vacancy.salary_average)
  89.  
  90.                     vacancies_counter += 1
  91.  
  92.         if not vacancies_names_dict:
  93.             vacancies_names_dict = salaries_dict.copy()
  94.             vacancies_names_dict = dict([(key, list()) for key, value in vacancies_names_dict.items()])
  95.             vacancies_numbers_dict = vacancies_number_dict.copy()
  96.             vacancies_numbers_dict = dict([(key, 0) for key, value in vacancies_numbers_dict.items()])
  97.  
  98.         first_calculated_statistic = dict()
  99.  
  100.         for current_year, salaries_list in salaries_dict.items():
  101.             first_calculated_statistic[current_year] = int(sum(salaries_list) / len(salaries_list))
  102.  
  103.         second_calculated_statistic = dict()
  104.  
  105.         for current_year, salaries_list in vacancies_names_dict.items():
  106.             if len(salaries_list) == 0:
  107.                 second_calculated_statistic[current_year] = 0
  108.             else:
  109.                 second_calculated_statistic[current_year] = int(sum(salaries_list) / len(salaries_list))
  110.  
  111.         third_calculated_statistic = dict()
  112.  
  113.         for current_year, salaries_list in city_salaries.items():
  114.             third_calculated_statistic[current_year] = int(sum(salaries_list) / len(salaries_list))
  115.  
  116.         fourth_calculated_statistic = dict()
  117.  
  118.         for current_year, salaries_list in numbers_salaries.items():
  119.             fourth_calculated_statistic[current_year] = round(salaries_list / vacancies_counter, 4)
  120.  
  121.         fourth_calculated_statistic = list(filter(lambda a: a[-1] >= 0.01,
  122.                                                   [(key, value) for key, value in
  123.                                                    fourth_calculated_statistic.items()]))
  124.  
  125.         fourth_calculated_statistic.sort(key=lambda value: value[-1],
  126.                                          reverse=True)
  127.  
  128.         fifth_calculated_statistic = fourth_calculated_statistic.copy()
  129.  
  130.         fourth_calculated_statistic = dict(fourth_calculated_statistic)
  131.  
  132.         third_calculated_statistic = list(filter(lambda a: a[0] in list(fourth_calculated_statistic.keys()),
  133.                                                  [(key, value) for key, value in third_calculated_statistic.items()]))
  134.  
  135.         third_calculated_statistic.sort(key=lambda a: a[-1],
  136.                                         reverse=True)
  137.         third_calculated_statistic = dict(third_calculated_statistic[:10])
  138.  
  139.         print('Динамика уровня зарплат по годам: ' + str(first_calculated_statistic))
  140.         print('Динамика количества вакансий по годам: ' + str(vacancies_number_dict))
  141.         print('Динамика уровня зарплат по годам для выбранной профессии: ' + str(second_calculated_statistic))
  142.         print('Динамика количества вакансий по годам для выбранной профессии: ' + str(vacancies_numbers_dict))
  143.         print('Уровень зарплат по городам (в порядке убывания): ' + str(third_calculated_statistic))
  144.         print('Доля вакансий по городам (в порядке убывания): ' + str(dict(fifth_calculated_statistic[:10])))
  145.  
  146.  
  147. if __name__ == '__main__':
  148.     InputConnect()
  149.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement