J'ai essayé d'agréger et de comparer les données de prix unitaires par langue avec Real Gachi by Python

Je voulais comparer et agréger les prix unitaires des projets freelance par langue d'avant, donc je l'ai en fait étudié.

Les informations sur les projets indépendants sont compilées à partir du site suivant Puisqu'il y avait des informations agrégées sur la page de chaque langue, elles sont basées sur ce

Revatec Freelance https://freelance.levtech.jp

** * Données au 21 novembre 2020 **

Cloud.csv
created_at,skill,count,avg_price,max_price,min_price
20201121,OpenShift,5,62,65,60
20201121,Amazon VPC,1,70,70,70
20201121,Google Cloud Platform,55,80,105,53
20201121,Dynamics CRM,1,65,65,65
20201121,Amazon S3,2,80,85,75
20201121,Amazon EC2,2,74,85,64
20201121,AWS,1926,76,135,20
20201121,Google App Engine,7,77,95,60
20201121,Amazon SimpleDB,1,80,80,80
20201121,Force.com,2,70,70,70
20201121,Office 365,9,56,65,40
20201121,Microsoft Azure,141,67,90,50
20201121,OpenStack,21,64,80,45
20201121,Heroku,29,75,102,55
DB.csv
created_at,skill,count,avg_price,max_price,min_price
20201121,Kyoto Tycoon,1,75,75,75
20201121,SQLite,20,72,90,55
20201121,MySQL,1465,75,125,35
20201121,Symfoware Server,4,60,65,55
20201121,Cassandra,14,62,80,45
20201121,PostgreSQL,487,71,135,35
20201121,Riak,5,63,100,45
20201121,Bigtable,3,86,95,80
20201121,SQL Server,375,65,95,35
20201121,Redis,296,78,105,39
20201121,Hbase,5,68,75,60
20201121,Oracle,971,66,115,25
20201121,Sybase,6,75,85,65
20201121,IMS,3,58,64,55
20201121,Access,88,60,145,40
20201121,DB2,79,64,95,35
FrameWork.csv
created_at,skill,count,avg_price,max_price,min_price
20201121,Pyramid,12,77,105,65
20201121,Rails,237,81,115,45
20201121,MyBatis,61,71,85,55
20201121,Node.js,256,77,125,45
20201121,Backbone.js,77,76,115,39
20201121,Knockout.js,4,72,90,55
20201121,AngularJS,152,74,105,47
20201121,Laravel,343,73,125,40
20201121,JUnit,80,73,125,50
20201121,Wicket,3,82,95,70
20201121,Django,89,83,115,55
20201121,Padrino,2,82,85,80
20201121,iBATIS,14,67,80,55
20201121,Silex,4,76,80,75
20201121,FuelPHP,101,76,115,50
20201121,MVC,69,68,95,37
20201121,CodeIgniter,39,74,105,45
20201121,Liferay,1,70,70,70
20201121,React,378,77,115,40
20201121,Spark,19,82,95,55
20201121,PhoneGap,3,86,95,80
20201121,JSF,18,64,75,55
20201121,jQuery,354,71,95,35
20201121,Seasar2,32,70,95,49
20201121,Spring,362,71,115,45
20201121,Bottle,1,75,75,75
20201121,Catalyst,26,64,72,55
20201121,intra-mart,14,70,135,50
20201121,SAStruts,16,71,95,57
20201121,Flask,25,82,125,65
20201121,Sinatra,6,78,85,75
20201121,Struts,129,67,95,45
20201121,Symfony,55,74,95,55
20201121,CakePHP,149,71,95,50
Language.csv
created_at,skill,count,avg_price,max_price,min_price
20201121,PHP,1560,72,145,35
20201121,CSS,650,70,125,35
20201121,Langage C,269,68,115,35
20201121,UML,7,70,85,50
20201121,C++,374,72,125,45
20201121,C#.NET,147,62,80,32
20201121,Transact-SQL,6,65,75,55
20201121,Kotlin,270,83,125,45
20201121,VB,83,62,85,40
20201121,HTML5,305,72,115,35
20201121,VC,8,61,66,50
20201121,C#,706,68,115,35
20201121,Apex,49,79,135,55
20201121,VBA,165,60,145,30
20201121,ASP.NET,161,65,95,48
20201121,Go,361,81,125,39
20201121,PL/SQL,146,63,85,45
20201121,COBOL,81,61,95,37
20201121,LESS,9,74,115,55
20201121,Swift,407,81,125,50
20201121,VC++,30,65,90,52
20201121,HTML,674,69,125,35
20201121,CSS3,209,75,115,35
20201121,Java,2484,70,145,25
20201121,JSP,54,68,105,55
20201121,Sass,55,71,115,45
20201121,SQL,881,65,145,33
20201121,VBScript,44,62,75,45
20201121,Objective-C,247,76,115,40
20201121,CoffeeScript,16,81,95,65
20201121,JavaScript,1749,72,125,20
20201121,Lua,6,73,80,65
20201121,Langue R,19,78,95,65
20201121,Smalltalk,2,75,80,70
20201121,Scala,117,83,115,55
20201121,Perl,108,73,110,50
20201121,Shell,193,64,95,45
20201121,SAS,12,61,75,50
20201121,Ruby,652,80,125,39
20201121,ABAP,12,67,80,55
20201121,Python,669,78,145,32
20201121,VB.NET,284,62,85,40
OS.csv
created_at,skill,count,avg_price,max_price,min_price
20201121,Windows,998,63,135,25
20201121,Red Hat,92,66,95,40
20201121,Solaris,37,61,80,40
20201121,AIX,77,63,90,52
20201121,Ubuntu,39,75,90,45
20201121,Unix,236,69,100,40
20201121,AS/400,1,65,65,65
20201121,FreeBSD,3,70,75,62
20201121,HP-UX,21,62,75,55
20201121,Windows Server,387,62,100,33
20201121,Android,563,78,125,35
20201121,Linux,2266,69,135,30

Cliquez ici pour la source de sortie de l'image graphique

print_graph.py

import datetime
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

"""
Réglage de la variable / constante commune
"""
DATA_PATH = 'data'
now = datetime.datetime.today()
CATEGORIES = {
    'Language',
    'FrameWork',
    'DB',
    'OS',
    'Cloud'
}

"""
Traitement principal
"""
def main() -> None:

    make_date = now.strftime("%Y%m%d")

    #Créer le répertoire
    os.makedirs(DATA_PATH + '/graphs/' + make_date, exist_ok=True)

    price_graph(make_date)
    count_graph(make_date)
    mix_graph(make_date)


"""
Création d'un graphique de prix unitaire
"""
def price_graph(make_date: str) -> None:

    for category_key in CATEGORIES:
        df = pd.read_csv(DATA_PATH + '/levtech/' + category_key + '.csv')
        df = df.sort_values(by=['avg_price'], ascending=False)
        labels = df['skill'].str.replace('[Ah-Hmm-Un-龥]+', '', regex=True)  #Supprimer le japonais
        y_list1 = df['avg_price']

        fig = plt.figure(figsize=(14, 7))

        ax1 = fig.add_subplot(1, 1, 1)
        ax1.bar(labels, y_list1, color='tab:blue')
        ax1.set_ylabel('price')
        ax1.set_title(category_key)

        #Affichage vertical de l'axe X
        ax1.set_xticklabels(labels, rotation=90)

        #Ajouter une valeur numérique au graphique à barres
        for x, y in zip(labels, y_list1):
            ax1.text(x, y, y, ha='center', va='bottom')

        # plt.show()
        fig.savefig(DATA_PATH + '/graphs/' + make_date + '/levtech-' + category_key + '-price.png', bbox_inches='tight', format='png', dpi=300)


"""
Créer un graphique du nombre de cas
"""
def count_graph(make_date: str) -> None:

    for category_key in CATEGORIES:
        df = pd.read_csv(DATA_PATH + '/levtech/' + category_key + '.csv')
        df = df.sort_values(by=['count'], ascending=False)
        labels = df['skill'].str.replace('[Ah-Hmm-Un-龥]+', '', regex=True)  #Supprimer le japonais
        y_list1 = df['count']

        fig = plt.figure(figsize=(14, 7))

        ax1 = fig.add_subplot(1, 1, 1)
        ax1.bar(labels, y_list1, color='tab:orange')
        ax1.set_ylabel('count')
        ax1.set_title(category_key)

        #Affichage vertical de l'axe X
        ax1.set_xticklabels(labels, rotation=90)

        #Ajouter une valeur numérique au graphique à barres
        for x, y in zip(labels, y_list1):
            ax1.text(x, y, y, ha='center', va='bottom', fontsize='small')

        # plt.show()
        fig.savefig(DATA_PATH + '/graphs/' + make_date + '/levtech-' + category_key + '-count.png', bbox_inches='tight', format='png', dpi=300)


"""
Prix unitaire et nombre de projets création graphique
"""
def mix_graph(make_date: str) -> None:

    for category_key in CATEGORIES:
        df = pd.read_csv(DATA_PATH + '/levtech/' + category_key + '.csv')
        df = df.sort_values(by=['avg_price'], ascending=False)

        labels = df['skill'].str.replace('[Ah-Hmm-Un-龥]+', '', regex=True)  #Supprimer le japonais
        y_list1 = df['avg_price']
        y_list2 = df['count']

        fig = plt.figure(figsize=(14, 7))

        left = np.arange(len(labels))
        width = 0.3

        ax1 = fig.add_subplot(1, 1, 1)
        ax1.bar(labels, y_list1, width=width, color='tab:blue', label='price')
        ax1.set_ylabel('price')
        ax1.set_title(category_key)

        ax2 = ax1.twinx()
        ax2.bar(left + width, y_list2, width=width, color='tab:orange', label='count')
        ax2.set_ylabel('count')

        #Affichage vertical de l'axe X
        ax1.set_xticklabels(labels, rotation=90)

        #Ajouter une valeur numérique au graphique à barres
        for x, y in zip(labels, y_list1):
            ax1.text(x, y, y, ha='center', va='bottom')

        for x, y in zip(left + width, y_list2):
            ax2.text(x, y, y, ha='center', va='bottom', fontsize='small')

        #Légende de sortie
        handler1, label1 = ax1.get_legend_handles_labels()
        handler2, label2 = ax2.get_legend_handles_labels()
        ax1.legend(handler1 + handler2, label1 + label2)

        # plt.show()
        fig.savefig(DATA_PATH + '/graphs/' + make_date + '/levtech-' + category_key + '-mix.png', bbox_inches='tight', format='png', dpi=300)


if __name__ == '__main__':
    main()

Graphique réel

Langue

Par prix unitaire

levtech-Language-price.png

Par nombre de cas

levtech-Language-count.png

Prix unitaire et nombre de projets mix

levtech-Language-mix.png

Le sommet est Kotlin. Je suis convaincu qu'il y a actuellement une pénurie d'ingénieurs Android. Si vous regardez le nombre de projets et le prix unitaire du système Web, Ruby, Python et go semblent bons. J'ai eu l'impression que le prix unitaire de Java est élevé pour le moment, mais il est surprenant que PHP soit plus cher, n'est-il pas trop demandé?

Puis le cadre

Par prix unitaire

levtech-FrameWork-price.png

Par nombre de cas

levtech-FrameWork-count.png

Prix unitaire et nombre de projets mix

levtech-FrameWork-mix.png

Le sommet est PhoneGap. J'ai entendu cela pour la première fois, mais il semble que ce soit un cadre de développement d'applications mobiles multiplateforme développé et publié par Nitobi. Django et Rails semblent être bons pour le Web. Puisque React est utilisé pour le développement Web et d'applications, le nombre de projets et le prix unitaire sont bons. Vue n'avait aucune information à la source du site. ..

DB

Par prix unitaire

levtech-DB-price.png

Par nombre de cas

levtech-DB-count.png

Prix unitaire et nombre de projets mix

levtech-DB-mix.png

Le plateau est Big table. J'entends souvent parler de Bigquery, mais la différence semble être comme une base de données à grande échelle qui fonctionne plus vite que Bigquery. En ce qui concerne DB, il ne fait aucun doute que vous vous souvenez de MySQL en termes de performances de coût. Oracle et SQL Server sont étonnamment bas. Pourquoi,,,

Cloud

Par prix unitaire

levtech-Cloud-price.png

Par nombre de cas

levtech-Cloud-count.png

Prix unitaire et nombre de projets mix

levtech-Cloud-mix.png

Le prix unitaire le plus élevé est GCP! AWS est écrasant en termes de nombre de projets! Pour le moment, il semble préférable de se souvenir au moins d'AWS. Si la demande devient trop élevée, le prix unitaire a tendance à diminuer, il peut donc être préférable de se souvenir de GCP en considérant l'avenir. Azure a un nombre délicat d'offres et de prix unitaires

Impressions

Le résultat était assez intéressant! Si vous utilisez un système Web à partir de maintenant, Python peut se développer. Il est facile de créer un environnement en le touchant. Bibliothèque riche. J'ai été particulièrement impressionné par la facilité de création de → graphiques CSV! C'est vraiment sympa de pouvoir créer rapidement et créer des images avec le back-end plutôt que d'utiliser la bibliothèque html ou js pour devenir fou ~

Cette fois, c'est le résultat d'une enquête sur l'un des sites du projet, veuillez donc l'utiliser comme référence! Les informations sur Vue, Graphql et Rust n'étaient pas répertoriées, donc je m'inquiète à ce sujet.

Recommended Posts

J'ai essayé d'agréger et de comparer les données de prix unitaires par langue avec Real Gachi by Python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai essayé un langage fonctionnel avec Python
[Bases de la science des données] J'ai essayé d'enregistrer de csv à mysql avec python
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
Comment écrire en temps réel hors ligne J'ai essayé de résoudre E12 avec python
J'ai essayé de programmer la bulle de tri par langue
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
L'ingénieur NW a essayé d'agréger les adresses avec le netaddr de Python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
J'ai essayé de créer un cadre de données pandas en grattant les informations de rappel d'aliments avec Python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
Je veux pouvoir analyser des données avec Python (partie 3)
J'ai essayé différentes méthodes pour envoyer du courrier japonais avec Python
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux pouvoir analyser des données avec Python (partie 4)
[Introduction à Pandas] J'ai essayé d'augmenter les données d'échange par interpolation de données ♬
[Python] J'ai essayé de visualiser des tweets sur Corona avec WordCloud
J'ai essayé de classer MNIST par GNN (avec PyTorch géométrique)
Mayungo's Python Learning Episode 3: J'ai essayé d'imprimer des nombres
J'ai essayé de prédire le prix de l'immobilier à Boston avec PyCaret
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé de toucher Python (installation)
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 1
Le cours de l'action a chuté avec "nouvelle Corona"? J'ai essayé d'obtenir le cours moyen de l'action Nikkei par grattage Web
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de savoir si ReDoS est possible avec Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé d'implémenter la classification des phrases par Self Attention avec PyTorch
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 2
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python