math_girl написа:а) Има ли разлика в заплащането на мъжете и жените?
Кои получават по-висока заплата? Има ли разлика в заплащането в
отделните отдели на компанията? В кой отдел заплатите са най-малки?
б) Има ли тенденция служителите с определено образование да са от даден пол?
в) Има ли разлика в заплащането в отделните отдели спрямо пола на служителя?
г) Има ли разлика в заплащането в отделните отдели спрямо образовaнието на служителя?
д) Образованието оказва ли влияние върху заплатата? Как?
е) Може ли да прогнозираме каква би била заплатата на
даден служител на базата на неговата втзраст или трудов стаж в
компанията? Каква би била заплатата на 39 годишен служител?
Ще използаме pandas.
- Код: Избери целия код
In [63]: import pandas as pd
...: df = pd.read_excel(r"c:\downloads\data(1).xlsx")
...: df.head()
Out[63]:
GENDER DEPART EDUC AGE HEIGHT SENIOR SALARY
0 Female Ship College 22 63 4 23.4
1 Male Package College 49 65 17 40.4
2 Male Bake College 36 67 8 29.4
3 Male Package HS 37 67 3 24.8
4 Male Ship Grad 43 66 11 31.2
а) Има ли разлика в заплащането на мъжете и жените?
- Код: Избери целия код
In [64]: df.groupby("GENDER")["SALARY"].mean()
...:
Out[64]:
GENDER
Female 23.863415
Male 24.979661
Name: SALARY, dtype: float64
Бих казал разликата е малка, мъжете имат по-голяма средна заплата.
б) Има ли тенденция служителите с определено образование да са от даден пол?
- Код: Избери целия код
In [65]: dfmale = df[df["GENDER"] == "Male"]
...: dffemale = df[df["GENDER"] == "Female"]
...: dfmale.groupby(["GENDER","EDUC"])["SALARY"].count()/len(dfmale)
...:
Out[65]:
GENDER EDUC
Male College 0.508475
Grad 0.067797
HS 0.423729
Name: SALARY, dtype: float64
In [66]: dffemale.groupby(["GENDER","EDUC"])["SALARY"].count()/len(dffemale)
...:
Out[66]:
GENDER EDUC
Female College 0.512195
Grad 0.048780
HS 0.439024
Name: SALARY, dtype: float64
Прилича процентите да са горе--долу еднакви, значи почти няма значение образованието.
в) Има ли разлика в заплащането в отделните отдели спрямо пола на служителя?
- Код: Избери целия код
In [67]: dfmale.groupby(["GENDER","DEPART"])["SALARY"].mean()
Out[67]:
GENDER DEPART
Male Bake 24.455556
Package 25.634483
Ship 24.183333
Name: SALARY, dtype: float64
In [68]: dffemale.groupby(["GENDER","DEPART"])["SALARY"].mean()
...:
Out[68]:
GENDER DEPART
Female Bake 23.604762
Package 26.609091
Ship 21.111111
Name: SALARY, dtype: float64
Малка разлика освен в Ship където мъжеете вземат повече.
г) Има ли разлика в заплащането в отделните отдели спрямо образовaнието на служителя?
- Код: Избери целия код
In [71]: df.groupby(["DEPART","EDUC"])["SALARY"].mean()
Out[71]:
DEPART EDUC
Bake College 23.145000
Grad 21.350000
HS 25.311765
Package College 24.785000
Grad 25.550000
HS 27.183333
Ship College 21.900000
Grad 24.800000
HS 23.712500
Name: SALARY, dtype: float64
Тези с HS получават повече в Bake и Package, a Grad най-много в Ship.
д) Образованието оказва ли влияние върху заплатата? Как?
- Код: Избери целия код
In [72]: df.groupby(["EDUC"])["SALARY"].mean()
Out[72]:
EDUC
College 23.519608
Grad 23.900000
HS 25.797674
Name: SALARY, dtype: float64
Тези с HS получават най-много.
е) Може ли да прогнозираме каква би била заплатата на
даден служител на базата на неговата втзраст или трудов стаж в
компанията? Каква би била заплатата на 39 годишен служител?
- Код: Избери целия код
In [74]: df[["AGE","SENIOR","SALARY"]].corr()
Out[74]:
AGE SENIOR SALARY
AGE 1.000000 0.536754 0.434936
SENIOR 0.536754 1.000000 0.952335
SALARY 0.434936 0.952335 1.000000
Хм... Имаме 0.95 между SENIOR и SALARY, което значи много силна права връзка. Значи по трудов стаж можем. По възраст имаме 0.536754 което е слаба права връзка. Можем да пробваме пък каквото стане:
- Код: Избери целия код
In [93]: import numpy as np
...: z = np.polyfit(x=df.loc[:, "AGE"], y=df.loc[:, "SALARY"], deg=1)
...: p = np.poly1d(z)
...: p
Out[93]: poly1d([ 0.31055706, 14.94752583])
Това е нашата линейна зависимост:
$y = 0.31055706x + 14.94752583$
Да видим колко е заплатата на 39 годишните:
- Код: Избери целия код
In [95]: p(39)
Out[95]: 27.059251181819434