Created
August 19, 2018 18:43
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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