Advertisement
mikhailemv

2.3

Oct 8th, 2022
867
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.59 KB | None | 0 0
  1. import csv
  2. import math
  3. import re
  4. from collections import Counter
  5. import numpy
  6.  
  7.  
  8. csv_file = input()
  9.  
  10.  
  11. def get_ruble_suffix(count) -> str:
  12.     if count % 10 == 0 or \
  13.             5 <= count % 10 <= 9 or \
  14.             10 <= count % 100 <= 19:
  15.         return 'рублей'
  16.     elif 2 <= count % 10 <= 4:
  17.         return 'рубля'
  18.     else:
  19.         return 'рубль'
  20.  
  21.  
  22. def get_vacancies_suffix(count: int) -> str:
  23.     if 11 <= count % 100 <= 19:
  24.         return "вакансий"
  25.     elif count % 10 == 0 or 5 <= count % 10 <= 9:
  26.         return "вакансий"
  27.     elif 2 <= count % 10 <= 4:
  28.         return "вакансии"
  29.     else:
  30.         return "вакансия"
  31.  
  32.  
  33. def get_times_suffix(count: int) -> str:
  34.     if 11 <= count % 100 <= 19:
  35.         return "раз"
  36.     elif 2 <= count % 10 <= 4:
  37.         return "раза"
  38.     else:
  39.         return "раз"
  40.  
  41.  
  42. def print_vacancies_by_salaries(list_vacancies: list, is_high_salary: bool):
  43.     list_vacancies = sorted(list_vacancies,
  44.                             key=lambda x: x['avg_salary'],
  45.                             reverse=is_high_salary)
  46.     print('Самые высокие зарплаты:' if is_high_salary else 'Самые низкие зарплаты:')
  47.     counter = 0
  48.     for index, value in enumerate(list_vacancies):
  49.         if value['salary_currency'] != 'RUR':
  50.             continue
  51.         if counter == 10:
  52.             break
  53.         counter += 1
  54.         print(
  55.             f'    {counter}) {value["name"]} в компании \"{value["employer_name"]}\" - {value["avg_salary"]} '
  56.             f'{get_ruble_suffix(value["avg_salary"])} (г. {value["area_name"]})')
  57.     print()
  58.  
  59.  
  60. def print_top_skills(list_vacancies: list):
  61.     new_list = []
  62.     for index, value in enumerate(list_vacancies):
  63.         for j, v in enumerate(value["key_skills"]):
  64.             new_list.append(v.strip())
  65.     counter = Counter(new_list).most_common()
  66.     dictionary = dict(counter)
  67.     print(f'Из {len(dictionary)} скиллов, самыми популярными являются:')
  68.     i = 0
  69.     for key, value in dictionary.items():
  70.         if i == 10:
  71.             break
  72.         i += 1
  73.         print(f'    {i}) {key} - упоминается {value} {get_times_suffix(value)}')
  74.     print()
  75.  
  76.  
  77. def print_cities_by_salaries(input_list: list):
  78.     list_vacancies = []
  79.     for vac in input_list:
  80.         if vac['salary_currency'] == 'RUR':
  81.             list_vacancies.append(vac)
  82.     list_vacancies = sorted(list_vacancies, key=lambda x: x["area_name"])
  83.     temp_list = []
  84.     counter = 0
  85.     dict_cicties = {}
  86.  
  87.     for i in range(len(list_vacancies) + 1):
  88.         if i == 0:
  89.             continue
  90.         if i != len(list_vacancies):
  91.             if i == len(list_vacancies) - 1:
  92.                 if counter > 0:
  93.                     dict_cicties[list_vacancies[i - 1]["area_name"]] = (math.floor(numpy.average(temp_list)), counter)
  94.                 else:
  95.                     dict_cicties[list_vacancies[i - 1]["area_name"]] = (list_vacancies[i - 1]["avg_salary"], counter)
  96.                 temp_list = []
  97.                 counter = 0
  98.             if list_vacancies[i - 1]["area_name"] == list_vacancies[i]["area_name"]:
  99.                 temp_list.append(float(list_vacancies[i - 1]["avg_salary"]))
  100.                 counter += 1
  101.             else:
  102.                 temp_list.append(float(list_vacancies[i - 1]["avg_salary"]))
  103.                 counter += 1
  104.                 if counter > 0:
  105.                     dict_cicties[list_vacancies[i - 1]["area_name"]] = (math.floor(numpy.average(temp_list)), counter)
  106.                 else:
  107.                     dict_cicties[list_vacancies[i - 1]["area_name"]] = (list_vacancies[i - 1]["avg_salary"], counter)
  108.                 temp_list = []
  109.                 counter = 0
  110.         else:
  111.             temp_list.append(float(list_vacancies[i - 1]["avg_salary"]))
  112.             counter += 1
  113.             if counter > 0:
  114.                 dict_cicties[list_vacancies[i - 1]["area_name"]] = (math.floor(numpy.average(temp_list)), counter)
  115.             else:
  116.                 dict_cicties[list_vacancies[i - 1]["area_name"]] = (list_vacancies[i - 1]["avg_salary"], counter)
  117.             temp_list = []
  118.             counter = 0
  119.  
  120.     big_cities = dict()
  121.     for key, value in dict_cicties.items():
  122.         if value[1] * 100 / len(list_vacancies) >= 0.9:
  123.             big_cities[key] = value
  124.  
  125.     sorted_tuple = sorted(big_cities.items(),
  126.                                key=lambda x: (x[1][0], x[0]),
  127.                                reverse=True)
  128.  
  129.     for i, v in enumerate(sorted_tuple):
  130.         try:
  131.             if sorted_tuple[i - 1][1][0] == sorted_tuple[i][1][0]:
  132.                 temp1, temp2 = sorted_tuple[i - 1], sorted_tuple[i]
  133.                 sorted_tuple[i - 1] = temp2
  134.                 sorted_tuple[i] = temp1
  135.         except:
  136.             pass
  137.  
  138.     print(f'Из {len(dict_cicties)} городов, самые высокие средние ЗП:')
  139.     index = 0
  140.     for key, value in sorted_tuple:
  141.         if index >= 10:
  142.             break
  143.         print(f'    {index + 1}) {key} - средняя зарплата {value[0]} {get_ruble_suffix(value[0])} '
  144.               f'({value[1]} {get_vacancies_suffix(value[1])})')
  145.         index += 1
  146.     print()
  147.  
  148.  
  149. def make_dictionary(titles, list_vac):
  150.     dictionary = {}
  151.     for index, title in enumerate(titles):
  152.         dictionary[title] = list_vac[index]
  153.     dictionary['avg_salary'] = math.floor((float(dictionary['salary_to']) + float(dictionary['salary_from'])) / 2)
  154.     return dictionary
  155.  
  156.  
  157. with open(csv_file, encoding='utf-8-sig') as f:
  158.     reader = csv.reader(f, delimiter=',')
  159.     vacancies_list, title = [], next(reader)
  160.     index_key_skills = title.index('key_skills')
  161.     index_currency = title.index('salary_currency')
  162.     html_tags = re.compile('<.*?>')
  163.     for vacancy in reader:
  164.         if vacancy[index_currency] != 'RUR':
  165.             continue
  166.         try:
  167.             vacancy.remove('')
  168.         except ValueError:
  169.             pass
  170.         for i in range(len(vacancy)):
  171.             if i != index_key_skills:
  172.                 vacancy[i] = re.sub(html_tags, '', vacancy[i]).strip()
  173.                 vacancy[i] = ' '.join(vacancy[i].split())
  174.             else:
  175.                 vacancy[i] = vacancy[i].strip()
  176.                 vacancy[i] = re.split("\n|\n\r", vacancy[i])
  177.  
  178.         if len(vacancy) == len(title):
  179.             vacancies_list.append(make_dictionary(title, vacancy))
  180.  
  181.  
  182. print_vacancies_by_salaries(vacancies_list, True)
  183. print_vacancies_by_salaries(vacancies_list, False)
  184. print_top_skills(vacancies_list)
  185. print_cities_by_salaries(vacancies_list)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement