Merge pull request #14 from koodiklinikka/2023-improve

Improvements for 2023
This commit is contained in:
Aarni Koskela
2023-09-25 09:36:21 +03:00
committed by GitHub
7 changed files with 62 additions and 24 deletions

Binary file not shown.

View File

@@ -894,4 +894,6 @@ Timestamp Oletko palkansaaja vai laskuttaja? Oletko siirtynyt palkansaajasta las
23/09/2023 20:49:29 Palkansaaja En 31-35 Mies 5 DI 7 Nokia Oulu Tuotetalossa, jonka core-bisnes on softa 100 10 Backend developer 3981 55000 Ei
24/09/2023 18:28:39 Palkansaaja En 41-45 Mies 13 Yliopisto 0 Turku Konsulttitalossa 100 0 Full stack developer 8000 100000 Kyllä
24/09/2023 18:50:12 Palkansaaja En 41-45 Mies 15 FM 5 Turku Konsulttitalossa 30 0 PM/backend developer+ DevOps guy 4000 50000 Ei
24/09/2023 21:13:40 Laskuttaja En 31-35 Mies 12 Insinööri 0 7 Fullstack web ja mobiili 99 150000 Käytän välitysfirmoja Suomesta
24/09/2023 21:13:40 Laskuttaja En 31-35 Mies 12 Insinööri 0 7 Fullstack web ja mobiili 99 150000 Käytän välitysfirmoja Suomesta
24/09/2023 22:31:59 Palkansaaja En 41-45 25 2 Tampere Tuotetalossa, jonka core-bisnes on softa 60 30 Software architect, full-stack 4500 60000 Kyllä
24/09/2023 23:45:24 Palkansaaja En 36-40 Mies 20 Luonnontieteiden kandidaatti 70 PK-Seutu (Helsinki, Espoo, Vantaa) Konsulttitalossa 100 40 CxO 8500 102000 Palkka Ei
Can't render this file because it contains an unexpected character in line 360 and column 453.

Binary file not shown.

View File

@@ -1,6 +1,5 @@
from __future__ import annotations
MISTA_ASIAKKAAT_COL = "Mistä asiakkaat ovat?"
IKA_COL = "Ikä"
KAUPUNKI_COL = "Kaupunki"
KIKY_COL = "Onko palkkasi nykyroolissasi mielestäsi kilpailukykyinen?"
@@ -8,23 +7,27 @@ KIKY_OTHER_COL = (
"Onko palkkasi nykyroolissasi mielestäsi kilpailukykyinen? (muut vastaukset)"
)
KKPALKKA_COL = "Kuukausipalkka"
KK_TULOT_COL = "Kk-tulot (laskennallinen)"
KK_TULOT_NORM_COL = "Kk-tulot (laskennallinen, normalisoitu)"
LAHITYO_COL = "Kuinka suuren osan ajasta teet lähityönä toimistolla?"
LANG_COL = "Vastauskieli"
MILLAISESSA_COL = "Millaisessa yrityksessä työskentelet?"
MISTA_ASIAKKAAT_COL = "Mistä asiakkaat ovat?"
PALAUTE_COL = "Palaute"
PALKANSAAJA_VAI_LASKUTTAJA_COL = "Palkansaaja vai laskuttaja"
PALVELUT_COL = "Palvelut"
ROOLI_COL = "Rooli"
ROOLI_NORM_COL = "Rooli (normalisoitu)"
SIIRTYNYT_COL = (
"Oletko siirtynyt palkansaajasta laskuttajaksi tai päinvastoin 1.10.2022 jälkeen?"
)
SUKUPUOLI_COL = "Sukupuoli"
TUNTILASKUTUS_ALV0_COL = "Tuntilaskutus (ALV 0%, euroina)"
TYOAIKA_COL = "Työaika"
TYOKOKEMUS_COL = "Työkokemus alalta (vuosina)"
TYOPAIKKA_COL = "Työpaikka"
VUOSILASKUTUS_ALV0_COL = "Vuosilaskutus (ALV 0%, euroina)"
VUOSITULOT_COL = "Vuositulot"
MILLAISESSA_COL = "Millaisessa yrityksessä työskentelet?"
LAHITYO_COL = "Kuinka suuren osan ajasta teet lähityönä toimistolla?"
LANG_COL = "Vastauskieli"
KK_TULOT_COL = "Kk-tulot (laskennallinen)"
KK_TULOT_NORM_COL = "Kk-tulot (laskennallinen, normalisoitu)"
ROOLI_NORM_COL = "Rooli (normalisoitu)"
COLUMN_MAP_2023 = {
"Timestamp": "Timestamp",
@@ -37,8 +40,8 @@ COLUMN_MAP_2023 = {
"Tulojen muutos viime vuodesta (%)": "Tulojen muutos viime vuodesta (%)",
"Montako vuotta olet tehnyt laskuttavaa työtä alalla?": "Montako vuotta olet tehnyt laskuttavaa työtä alalla?",
"Mitä palveluja tarjoat?": PALVELUT_COL,
"Tuntilaskutus (ALV 0%, euroina)": "Tuntilaskutus (ALV 0%, euroina)",
"Vuosilaskutus (ALV 0%, euroina)": "Vuosilaskutus (ALV 0%, euroina)",
"Tuntilaskutus (ALV 0%, euroina)": TUNTILASKUTUS_ALV0_COL,
"Vuosilaskutus (ALV 0%, euroina)": VUOSILASKUTUS_ALV0_COL,
"Hankitko asiakkaasi itse suoraan vai käytätkö välitysfirmojen palveluita?": "Hankitko asiakkaasi itse suoraan vai käytätkö välitysfirmojen palveluita?",
"Mistä asiakkaat ovat?": MISTA_ASIAKKAAT_COL,
"Työpaikka": "Työpaikka",
@@ -52,7 +55,7 @@ COLUMN_MAP_2023 = {
"Vapaa kuvaus kokonaiskompensaatiomallista": "Vapaa kuvaus kokonaiskompensaatiomallista",
"Onko palkkasi nykyroolissasi mielestäsi kilpailukykyinen?": KIKY_COL,
"Vapaa sana": "Vapaa sana",
"Palautetta kyselystä ja ideoita ensi vuoden kyselyyn": "Palautetta kyselystä ja ideoita ensi vuoden kyselyyn",
"Palautetta kyselystä ja ideoita ensi vuoden kyselyyn": PALAUTE_COL,
}
COLUMN_MAP_2023_EN_TO_FI = {
@@ -178,3 +181,8 @@ OTHER_GENDER_VALUES = {
"muu/ei",
"non-binary, afab",
}
TIMESTAMPS_TO_DROP = {
# See "SUBMITTED TWICE, SORRY!!" in English data:
"2023-09-08 13:24:46.740",
}

View File

@@ -33,6 +33,8 @@ from pulkka.column_maps import (
OTHER_GENDER_VALUES,
TYOKOKEMUS_COL,
ROOLI_NORM_COL,
PALAUTE_COL,
TIMESTAMPS_TO_DROP,
)
@@ -139,6 +141,9 @@ def read_data() -> pd.DataFrame:
# Drop bogus data
df = df.drop(df[df[SUKUPUOLI_COL] == "taisteluhelikopteri"].index)
# Drop rows by timestamps known to be duplicate
df = df.drop(df[df["Timestamp"].isin(TIMESTAMPS_TO_DROP)].index)
df[SUKUPUOLI_COL] = df[SUKUPUOLI_COL].apply(map_sukupuoli).astype("category")
df[IKA_COL] = df[IKA_COL].astype("category")

View File

@@ -8,6 +8,7 @@ import jinja2
import numpy
import pandas
from pulkka import column_maps
from pulkka.config import OUT_DIR, YEAR
from pulkka.data_ingest import read_data
@@ -62,10 +63,12 @@ def main():
env = jinja2.Environment(
autoescape=True,
loader=jinja2.FileSystemLoader(TEMPLATE_DIR),
undefined=jinja2.StrictUndefined,
)
env.globals.update(
{
"date": datetime.datetime.utcnow(),
"cm": column_maps,
"pd": pandas,
"np": numpy,
"df": df,

View File

@@ -1,4 +1,10 @@
{% extends "_base.html" %}
{% macro tunnusluvut_points(df, col_name, title) %}
{% with num_kk = df[pd.to_numeric(df[col_name], errors='coerce').notnull()][col_name] %}
<li title="n = {{ num_kk.count() }}">{{ title }}, keskiarvo = {{ num_kk.mean()|round(0) }} €</li>
<li title="n = {{ num_kk.count() }}">{{ title }}, mediaani = {{ num_kk.median()|round(0) }} €</li>
{% endwith %}
{% endmacro %}
{% block body %}
<header>
<a href="https://koodiklinikka.fi">
@@ -6,17 +12,29 @@
</a>
</header>
<h1>Koodiklinikan palkkakysely, {{ year }}</h1>
<h2>Tunnusluvut</h2>
<ul>
<li><i>n</i> = {{ df|length }}</li>
{% with num_kk = df[pd.to_numeric(df['Kuukausipalkka'], errors='coerce').notnull()]['Kuukausipalkka'] %}
<li>Keskimääräinen kuukausipalkka = {{ num_kk.mean()|round(0) }}</li>
<li>Mediaanikuukausipalkka = {{ num_kk.median()|round(0) }} €</li>
{% endwith %}
{% with num_v = df[pd.to_numeric(df['Vuositulot'], errors='coerce').notnull()]['Vuositulot'] %}
<li>Keskimääräiset vuositulot = {{ num_v.mean()|round(0) }} €</li>
<li>Mediaanivuositulot = {{ num_v.median()|round(0) }} €</li>
{% endwith %}
<li><i>n</i> palkansaajia = {{ df[df[cm.PALKANSAAJA_VAI_LASKUTTAJA_COL] == "Palkansaaja"]|length }}</li>
<li><i>n</i> laskuttajia = {{ df[df[cm.PALKANSAAJA_VAI_LASKUTTAJA_COL] == "Laskuttaja"]|length }}</li>
</ul>
<h2>Palkansaajien tunnusluvut</h2>
<ul>
{% for col_name, title in [
(cm.KKPALKKA_COL, 'kuukausipalkka'),
(cm.VUOSITULOT_COL, 'vuositulot'),
(cm.KK_TULOT_NORM_COL, 'laskennallinen norm. kuukausipalkka'),
] %}
{{ tunnusluvut_points(df, col_name, title) }}
{% endfor %}
</ul>
<h2>Laskuttajien tunnusluvut</h2>
<ul>
{% for col_name, title in [
(cm.TUNTILASKUTUS_ALV0_COL, 'tuntilaskutus (ALV 0%)'),
(cm.VUOSILASKUTUS_ALV0_COL, 'vuosilaskutus (ALV 0%)'),
] %}
{{ tunnusluvut_points(df, col_name, title) }}
{% endfor %}
</ul>
<h2>Työkalut</h2>
<ul>
@@ -25,7 +43,8 @@
<li><a href="/palkkakysely/analysaattori/?url=/palkkakysely/{{ year }}/data.json">Pivot-työkalu</a></li>
</ul>
<h2>Data</h2>
Tämä data on käsitelty <a href="https://github.com/koodiklinikka/palkkakysely/tree/master/pulkka">normalisointiskripteillä</a>.
Tämä data on käsitelty
<a href="https://github.com/koodiklinikka/palkkakysely/tree/master/pulkka">normalisointiskripteillä</a>.
<ul>
<li><a href="data.csv">Lähdedata (CSV)</a></li>
<li><a href="data.html">Lähdedata (HTML)</a></li>
@@ -42,11 +61,12 @@
</ul>
<h2>Viittaaminen ja lisenssi</h2>
<p>
Viittaathan dataa käyttäessäsi tähän sivustoon: <a href="{{ site_url }}">{{ site_url }}</a>.
Viittaathan dataa käyttäessäsi tähän sivustoon: <a href="{{ site_url }}">{{ site_url }}</a>.
</p>
<p>
Datan lisenssi on <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International</a> (CC&nbsp;BY&nbsp;4.0).<br>
Mankelointityökalujen lisenssi on <a href="https://opensource.org/licenses/MIT">MIT</a>.
Datan lisenssi on <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0
International</a> (CC&nbsp;BY&nbsp;4.0).<br>
Mankelointityökalujen lisenssi on <a href="https://opensource.org/licenses/MIT">MIT</a>.
</p>
{% endblock %}
{% block footer %}