Skip to content

Instantly share code, notes, and snippets.

@YuriyGuts
Created August 19, 2018 18:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YuriyGuts/32d8c8468b809a301de4252401afe31f to your computer and use it in GitHub Desktop.
Save YuriyGuts/32d8c8468b809a301de4252401afe31f to your computer and use it in GitHub Desktop.
Translate the DOU salary survey dataset (https://github.com/devua/csv/tree/master/salaries) into English
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd
input_filename = 'https://raw.githubusercontent.com/devua/csv/master/salaries/2018_june_final.csv'
output_filename = '2018_june_final_eng.csv'
df = pd.read_csv(input_filename)
column_translation = {
'Должность': 'JobTitle',
'Язык.программирования': 'ProgrammingLanguage',
'Специализация': 'Specialization',
'Общий.опыт.работы': 'TotalWorkExperience',
'Опыт.работы.на.текущем.месте': 'CurrentWorkplaceExperience',
'Зарплата.в.месяц': 'MonthlySalary',
'Изменение.зарплаты.за.12.месяцев': 'SalaryChangeIn12Months',
'Город': 'City',
'Размер.компании': 'CompanySize',
'Тип.компании': 'CompanyType',
'Пол': 'Sex',
'Возраст': 'Age',
'Образование': 'Education',
'Университет': 'University',
'Еще.студент': 'IsStudyingCurrently',
'Уровень.английского': 'EnglishLevel',
'Предметная.область': 'Domain',
'Дата.заполнения': 'ResponseDate',
'User.Agent': 'UserAgent',
}
experience_translation = {
'10 и более лет': '10 years and more',
'меньше 3 месяцев': 'less than 3 months',
}
city_translation = {
'Винница': 'Vinnytsia',
'Днепр': 'Dnipro',
'Житомир': 'Zhytomyr',
'Запорожье': 'Zaporizhia',
'Ивано-Франковск': 'Ivano-Frankivsk',
'Киев': 'Kyiv',
'Кропивницкий': 'Kropyvnytskyi',
'Луцк': 'Lutsk',
'Львов': 'Lviv',
'Мариуполь': 'Mariupol',
'Николаев': 'Mykolaiv',
'Одесса': 'Odesa',
'Полтава': 'Poltava',
'Ровно': 'Rivne',
'Сумы': 'Sumy',
'Тернополь': 'Ternopil',
'Ужгород': 'Uzhgorod',
'Харьков': 'Kharkiv',
'Херсон': 'Kherson',
'Хмельницкий': 'Khmelnytskyi',
'Черкассы': 'Cherkasy',
'Чернигов': 'Chernihiv',
'Черновцы': 'Chernivtsi',
'Киев': 'Kyiv',
'Удаленно': 'Remote',
'Другой': 'Other',
}
company_size_translation = {
'до 10 человек': '1-10 employees',
'до 50 человек': '11-50 employees',
'до 200 человек': '51-200 employees',
'до 1000 человек': '201-1000 employees',
'свыше 1000 человек': '1001+ employees',
}
company_type_translation = {
'Аутсорсинговая': 'Outsourcing',
'Аутстаффинговая': 'Outstaffing',
'Продуктовая': 'Product',
'Стартап': 'Startup',
'Другая': 'Other',
}
sex_translation = {
'мужской': 'male',
'женский': 'female',
}
education_translation = {
'Среднее': 'Secondary',
'Техникум / Колледж': 'Vocational',
'Незаконченное высшее': 'Unfinished higher',
'Высшее': 'Higher',
'Два высших': 'Two higher',
'Кандидат': 'Postgraduate',
}
university_translation = {
'ВНТУ': 'VNTU',
'ВНУ им. Даля': 'VNU',
'ГУТ': 'SUT',
'ДНУ им. Гончара': 'DNU',
'ДНУЖТ': 'DNUZT',
'ДонНТУ': 'DonNTU',
'ДонНУ им. Васыля Стуса': 'DonNU',
'Другой вуз': 'Other',
'ЖГТУ': 'ZSTU',
'ЗНТУ': 'ZNTU',
'КНУ им. Шевченко': 'KNU',
'КНУСА': 'KNUSA',
'КНУТД': 'KNUTS',
'КНЭУ': 'KNEU',
'ЛНУ им. Франко': 'LNU',
'Львовская Политехника': 'Lviv Polytechnic',
'НАУ': 'NAU',
'НГУ [Днепропетровск]': 'NMU',
'НТУ «ХПИ»': 'KhPI',
'НТУУ «КПИ»': 'KPI',
'НУК': 'NUOS',
'НУПТ': 'NUPT',
'НаУКМА': 'NaUKMA',
'НметАУ': 'NMetAU',
'ОНАС': 'ONAS',
'ОНПУ': 'ONPU',
'ОНУ им. Мечникова': 'ONU',
'СумГУ': 'SumSU',
'ХАИ': 'KhAI',
'ХНУ [г. Хмельницкий]': 'KhNU (Khmelnytskyi)',
'ХНУ им. Каразина': 'KhNU (Kharkiv)',
'ХНУРЭ': 'KhNURE',
'ХНЭУ': 'KhNEU',
'ЧГУ им. Петра Могилы': 'ChSU',
}
english_level_translation = {
'элементарный': 'Elementary',
'ниже среднего': 'Pre-Intermediate',
'средний': 'Intermediate',
'выше среднего': 'Upper-Intermediate',
'продвинутый': 'Advanced',
}
domain_translation = {
'Корпоративные системы': 'Corporate Systems',
'Веб-разработка': 'Web Development',
'Мультимедиа': 'Multimedia',
'Финансы и банки': 'Banking and Finance',
'Другое': 'Other',
'Системное программирование': 'System Programming',
'Телекоммуникации': 'Telecom',
}
class TranslationDict(dict):
""" Some values don't require translation or are already in English. Don't let them turn into N/A """
def __missing__(self, key):
return key
def translate_list(lst, translations, sep=','):
return sep.join([translations.get(item, item) for item in str(lst).split(sep)])
df.rename(columns=column_translation, inplace=True)
df['TotalWorkExperience'] = df['TotalWorkExperience'].map(TranslationDict(experience_translation))
df['CurrentWorkplaceExperience'] = df['CurrentWorkplaceExperience'].map(TranslationDict(experience_translation))
df['City'] = df['City'].map(TranslationDict(city_translation))
df['CompanySize'] = df['CompanySize'].map(TranslationDict(company_size_translation))
df['CompanyType'] = df['CompanyType'].map(TranslationDict(company_type_translation))
df['Sex'] = df['Sex'].map(TranslationDict(sex_translation))
df['Education'] = df['Education'].map(TranslationDict(education_translation))
df['EnglishLevel'] = df['EnglishLevel'].map(TranslationDict(english_level_translation))
df['Domain'] = df['Domain'].map(lambda item: translate_list(item, TranslationDict(domain_translation)))
df['University'] = df['University'].map(TranslationDict(university_translation))
df.to_csv(output_filename, index=None, header=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment