Menggunakan Python untuk menganalisis keterampilan yang diminta terkait di antara pengembang


Hari ini di Web Anda dapat menemukan sejumlah besar informasi heterogen tentang bahasa pemrograman yang paling populer, perpustakaan, kerangka kerja, sistem operasi dan entitas lainnya - sebut saja teknologi. Jumlah teknologi ini terus meningkat dan menjadi jelas bahwa setiap orang yang ingin mengikuti perkembangan seorang pengembang perlu fokus mempelajari beberapa tumpukan paling populer yang terkait dengan teknologi utama apa pun.


Ini menimbulkan pertanyaan pertama - bagaimana seseorang dapat menentukan permintaan untuk teknologi tertentu? Pertanyaan ini dapat dijawab, misalnya, sebagai berikut: ada permintaan untuk teknologi ketika pengusaha menyebutkannya sebagai persyaratan untuk pelamar pekerjaan saat menjelaskan lowongan kerja. Dengan kata lain, jika saat melihat 100 lowongan, teknologi A disebut 60 kali, dan teknologi B - 20 kali, teknologi A dapat dianggap lebih populer daripada B.


Pertanyaan kedua adalah apa yang dianggap teknologi utama?


Berdasarkan minat yang besar pada artikel tentang analisis popularitas bahasa pemrograman, kami akan mempertimbangkan bahasa pemrograman sebagai teknologi utama.


Dengan demikian, masalahnya dapat dirumuskan sebagai berikut - dalam berbagai lowongan, perlu untuk menyoroti subset yang terkait dengan teknologi utama, dan dalam subset ini untuk menghitung frekuensi menyebutkan teknologi lain.


Sebagai basis data lowongan, kami akan menggunakan portal hh.ru , karena popularitasnya yang tinggi dan ketersediaan API HeadHunter . Bahasa pemrogramannya adalah Python 3.4.


Untuk mengurangi volume artikel, sisi teknis dari masalah mendapatkan dan memproses data tidak akan dipertimbangkan secara rinci, tetapi ada baiknya berhenti di beberapa titik utama. Kode sumber untuk proyek ini terbuka dan tersedia di GitHub .



Mendapatkan daftar pekerjaan


Untuk mendapatkan daftar lowongan yang terkait dengan programmer Python, buat yang berikut dapatkan permintaan menggunakan pustaka permintaan :


import requests import json l = "Python" params = {"text": " " + l, "search_field": "name", "area": 2, "period": 30, "page": 0} r = requests.get("https://api.hh.ru/vacancies", params=params) jr = json.loads(r.text) 

Hasilnya, kami mendapatkan kamus dengan elemen-elemen berikut:


  • halaman: kelas 'int'
  • klaster: kelas 'NoneType'
  • per_page: class 'int'
  • alternate_url: class 'str'
  • ditemukan: kelas 'int'
  • argumen: kelas 'NoneType'
  • item: 'daftar' kelas
  • halaman: kelas 'int'

Kami tertarik pada:


  • halaman kunci, nilainya berisi jumlah halaman dengan lowongan,
  • kunci item, yang menunjuk ke daftar lowongan di halaman.

Dari setiap item dalam daftar item , yang merupakan kamus, kita memerlukan kunci url . Nilai untuk kunci ini adalah tautan ke deskripsi terperinci tentang lowongan. Dengan mengubah parameter halaman secara berurutan, Anda dapat mengulangi semua lowongan berdasarkan permintaan dan membuat daftar yang diperlukan untuk analisis tautan lebih lanjut. Untuk mempercepat proses memuat informasi pekerjaan, beberapa utas paralel dari pustaka threading digunakan :


 from math import ceil import requests from threading import Thread import json class DownloadThread(Thread): def __init__(self, urls, number, res): Thread.__init__(self) self.number = number self.urls = urls self.res = res def run(self): for url in self.urls: resp = requests.get(url) if resp.status_code == requests.codes.ok: self.res.append(json.loads(requests.get(url).text)) else: print("Status code: " + str(resp.status_code)) print(url) def start_dl_threads(urls, th_num, res): threads = [] n = ceil(len(urls) / th_num) for i in range(th_num): t = DownloadThread(urls[i * n: (i + 1) * n], i, res) threads.append(t) t.start() for t in threads: t.join() 

Setelah membangun ketergantungan kecepatan unduhan set uji dari 274 lowongan pada jumlah utas unduhan, diputuskan untuk menggunakan 10 utas, karena, dalam kasus ini, jumlah yang lebih besar dari mereka praktis tidak mengurangi waktu skrip.



Penciptaan kosakata keterampilan dan mencari keterampilan dalam deskripsi pekerjaan


Awalnya, itu seharusnya membuat kamus keterampilan kunci secara manual. Namun, setelah menganalisis struktur uraian pekerjaan, menjadi jelas bahwa proses tersebut dapat diotomatisasi dalam banyak cara. Untuk melakukan ini, kita perlu daftar key_skills-dapat diakses yang berisi keterampilan utama lowongan ini. Sayangnya, beberapa lowongan mengandung informasi tentang keterampilan utama. Selain itu, informasi ini mungkin berbeda dari deskripsi utama. Karena itu, hanya mengolah data ini tidak akan memberikan gambaran yang lengkap.


Semua keterampilan kunci unik untuk lowongan dengan nama "Programmer" + ("Java", "JavaScript", "1C", "Python", "C", "C ++", "C #", "Objective-C", "Perl", "Ruby", "PHP"), dan digunakan - 150 pertama yang paling umum.


 os.makedirs("data", exist_ok=True) langs = ("Java", "JavaScript", "1", "Python", "C", "C++", "C#", "Objective-C", "Perl", "Ruby", "PHP") par = {"text": "", "search_field": "name", "area": 2, "period": 30} o = {"skills": 1, "urls": 0, "vacs": 0} for l in langs: par["text"] = " " + l with open("data\data_" + par["text"] + str(datetime.date.today()) + ".json", "w") as f: json.dump(get_info_from_hh(par, 10, o), f, indent=4, ensure_ascii=False) data = Counter() for fn in os.listdir("data"): if os.path.isfile("data/" + fn): with open("data/" + fn, "r") as rf: data += Counter(json.load(rf)["skills"]) for item in data.most_common(150): print(item) jsdict = {item[0]: item[0] for item in data.most_common(150)} with open("kw.json", "w") as wf: json.dump(jsdict, wf, indent=4, ensure_ascii=False, sort_keys=True) 

Pencarian kata kunci dalam deskripsi pekerjaan dilakukan menggunakan ekspresi reguler dari formulir:


 pattern = r"(?i)[^--a-zA-Z0-9_|^]%s[^--a-zA-Z0-9_|$]" % kw[item] 

Karena beberapa teknologi adalah generalisasi dari beberapa yang lebih pribadi, ketika menghitung dengan kunci sql , misalnya, nilai formulir digunakan:


 "sql": "sql|mysql|postgresql|ms sql" 

Juga, untuk memperhitungkan berbagai nama yang terkait dengan teknologi yang sama, ekspresi dari bentuk itu digunakan:


 " ": ".+|.+|design patterns", " ": ".+?|english", " ": ".+?.+?|.+?.+?|neural" 

File kata kunci terakhir dapat ditemukan di repositori GitHub .


Saat memilih teknologi utama, daftar 20 bahasa teratas digunakan oleh jumlah lowongan (disebutkan dalam judul) . Pada saat yang sama, hanya bahasa-bahasa yang tersisa yang bersama dengan kata "Programmer" dalam judul memberikan lebih dari 20 lowongan di St. Petersburg.



Hasil


Hasil pemrosesan konsep abstrak seperti "programmer" dengan baik mencerminkan gambaran keseluruhan lowongan industri. Pertama, jelas bahwa setiap perusahaan ingin mendapatkan pengetahuan sql dan bahasa Inggris dari seorang programmer. Setiap majikan ketiga menginginkan seorang programmer untuk memiliki sistem kontrol versi git . Karena orientasi pengembangan di web, html dan css adalah teknologi yang diminta. Ini sangat penting untuk JavaScript dan PHP . Agak tidak terduga, tetapi programmer mungkin harus bekerja dalam tim .


Di antara teknologi umum yang termasuk dalam dua puluh satu, ada pemrograman berorientasi objek , database , algoritma dan pola desain .


Sebagai sistem operasi, Linux harus lebih disukai.


Saat mempertimbangkan bahasa tertentu, Anda dapat melihat bahwa di sebelah baris pertama adalah kerangka kerja atau perpustakaan paling populer. Untuk Java, ini adalah Spring dan Hibernate , untuk C # - .net dan asp.net , programmer Python mungkin akan membutuhkan Django , dan JavaScript akan perlu Bereaksi .

Khusus dan yang paling mudah adalah kompleks domestik 1C . Banyak pengusaha hanya akan memiliki pengetahuan yang cukup tentang platform ini (saya tidak tahu berapa banyak atau sedikit). Keterampilan yang bermanfaat adalah: kerja tim , pemahaman proses pengujian, dan kemampuan untuk bekerja dengan basis data .


Karena kekhasan mesin pencari hh, atas permintaan "Programmer C" banyak hasil dengan teknologi 1C dikeluarkan. Karena itu, hasil dalam bahasa ini ternyata salah.


Hasil yang diperoleh di St. Petersburg, saya berikan di bawah ini.









Source: https://habr.com/ru/post/id423745/


All Articles