コード例 #1
0
def test_individual_numbers():
    # Loading data
    employees = pd.read_csv(path + "employees.csv", sep=";", decimal=",")
    spouses = pd.read_csv(path + "spouses.csv", sep=";", decimal=",")
    children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

    # Projection of population
    # Number of years to project
    MAX_ANNEES = 10

    # Projection
    numbers_ = eff.projectNumbers(employees,
                                  spouses,
                                  children,
                                  'TV 88-90',
                                  MAX_ANNEES,
                                  law_replacement_=law_replacement1)

    # global numbers
    global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                    MAX_ANNEES)

    # verify first id in live individual numbers
    indiv_lives = eff.individual_employees_numbers(numbers_[0])[0]

    res = list(indiv_lives.iloc[0, 8:])

    expected_res = [
        1, 0.99945, 0.99887, 0.99825, 0.99761, 0.99695, 0.99623, 0.99542,
        0.99452, 0.99359
    ]

    diff = [abs(i - j) for i, j in zip(res, expected_res)]

    assert max(diff) < 5

    # strict comparaison of global numbers
    # load expected numbers
    expected_global_numbers = pd.DataFrame(
        pd.read_csv("./pop_projection/test/expected_global_numbers.csv",
                    sep=";",
                    decimal=","))

    # assert expected_global_numbers.equals(global_numb)

    cols = list(expected_global_numbers.columns)

    for c in cols:
        res = list(global_numb[c])
        expected_res = list(expected_global_numbers[c])
        diff = [abs(i - j) for i, j in zip(res, expected_res)]
        assert max(diff) < 5, "Numbers in column " + c + " far from expected!"
コード例 #2
0
def test_walk_actives():

    # Path for input data
    path = "./pop_projection/test/data/"

    # Loading data
    employees = pd.read_csv(path + "employees.csv", sep=";", decimal=",")
    spouses = pd.read_csv(path + "spouses.csv", sep=";", decimal=",")
    children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

    # Projection of population
    # Number of years to project
    MAX_ANNEES = 50

    # Projection
    numbers_ = eff.projectNumbers(employees,
                                  spouses,
                                  children,
                                  'TV 88-90',
                                  MAX_ANNEES,
                                  law_replacement_=None)

    # global numbers
    global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                    MAX_ANNEES)

    # departures
    departures = eff.leavingNumbers(numbers_[0], numbers_[4], MAX_ANNEES)

    # employees_walk
    employees_walk = pd.merge(global_numb.loc[:, ['Year', 'effectif_actifs']],
                              departures,
                              on='Year')

    # In case of no replacement, employees numbers must satisfy :
    # Numbers(year N + 1 ) = Numbers(year N) - Deaths(year N) -
    #                        Reignations(year N) - New Retirees(year N)

    for i in range(1, MAX_ANNEES):
        temp = (employees_walk.loc[i - 1, 'effectif_actifs'] -
                employees_walk.loc[i, 'Total Leaving'] -
                employees_walk.loc[i, 'effectif_deces_nouveaux_retraites'])
        temp_diff = abs(temp - employees_walk.loc[i, 'effectif_actifs'])
        assert temp_diff < 0.00001, "Walk equality not satisfaied in year " + str(
            i) + " diff : " + str(temp_diff)
コード例 #3
0
def test_glob_num_no_rep():

    # Path for input data
    path = "./pop_projection/test/data/"

    # Loading data
    employees = pd.read_csv(path + "employees.csv", sep=";", decimal=",")
    spouses = pd.read_csv(path + "spouses.csv", sep=";", decimal=",")
    children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

    # Projection of population
    # Number of years to project
    MAX_ANNEES = 60

    # Projection
    numbers_ = eff.projectNumbers(employees,
                                  spouses,
                                  children,
                                  'TV 88-90',
                                  MAX_ANNEES,
                                  law_replacement_=None,
                                  law_resignation_=sl.turnover,
                                  law_retirement_=law_ret1)

    # global numbers
    global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                    MAX_ANNEES)

    # load expected numbers
    expected_global_numbers = pd.DataFrame(
        pd.read_csv("./pop_projection/test/expected_glob_num_no_rep.csv",
                    sep=";",
                    decimal=","))

    cols = list(expected_global_numbers.columns)

    for c in cols[1:4]:
        res = list(global_numb[c])
        expected_res = list(expected_global_numbers[c])
        for i in range(len(res)):
            assert abs(
                res[i] - expected_res[i]
            ) < 0.000001, "Numbers in column " + c + " far from expected at year " + str(
                i) + " !"
コード例 #4
0
def test_simulerEffectif_2():

    # Path for input data
    path = "./pop_projection/test/data/"

    # Loading data
    employees = pd.read_csv(path + "employees.csv", sep=";", decimal=",")
    spouses = pd.read_csv(path + "spouses.csv", sep=";", decimal=",")
    children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

    # Projection of population
    # Number of years to project
    MAX_ANNEES = 60

    # Projection
    numbers_ = eff.projectNumbers(employees, spouses, children)

    # global numbers
    global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                    MAX_ANNEES)
コード例 #5
0
plot_num = 1

min_age_ = 19

max_age_ = 100

color_males = (149 / 255, 125 / 255, 98 / 255)
color_females = (0 / 255, 128 / 255, 0 / 255)

for t in tables:

    # Projection of population
    numbers_ = eff.projectNumbers(employees,
                                  spouses,
                                  children,
                                  t,
                                  MAX_ANNEES,
                                  law_replacement_=sl.law_replacement1,
                                  law_marriage_=sl.law_mar1)

    # Pyramid of spouses
    ind_spo_numbers = eff.individual_spouses_numbers(numbers_[1])
    spouses_proj = ind_spo_numbers[0]

    emp_grouped = spouses_proj.groupby(
        ['age', 'sex'], as_index=False)['year_' + str((year_ - 1))].sum()

    # update colum age to be age at year (year_-1)
    emp_grouped['age'] = emp_grouped['age'] - MAX_ANNEES + (year_ - 1)

    emp_grouped = emp_grouped.loc[(emp_grouped['age'] < max_age_)
コード例 #6
0
ファイル: example_3.py プロジェクト: ateffal/pop_projection
children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

# Loading salaries
salaries = pd.read_csv(path + "salaries.csv", sep=";", decimal=",")

# Loading pensions
pensions = pd.read_csv(path + "pensions.csv", sep=";", decimal=",")

print('Chargement données : ', time.asctime( time.localtime(time.time())))

# Projection of population
# Number of years to project
MAX_ANNEES = 60

# Projection
numbers_ = eff.projectNumbers( employees, spouses, children, 'TV 88-90', MAX_ANNEES, 
                                law_replacement_=law_replacement1)

print('Simulation effectifs : ', time.asctime( time.localtime(time.time())))

df_salaries = cf.project_salaries(numbers_[0], salaries, MAX_ANNEES, salaries_new_emp_1, 0.035)

print('Projection salaires : ', time.asctime( time.localtime(time.time())))

# rate_contr = pd.read_csv(path + "rate_contr.csv", sep=";", decimal=",")

def rate_contr(sex, year):
    return 0.325

df_contr = cf.project_contributions(df_salaries,rate_contr,20)

print('Projection contributions : ', time.asctime( time.localtime(time.time())))
コード例 #7
0
path = "../pop_projection/data/"

# Number of years to project
MAX_ANNEES = 50

# Loading data
employees = pd.read_csv(path + "employees.csv", sep=";", decimal=",")
spouses = pd.read_csv(path + "spouses.csv", sep=";", decimal=",")
children = pd.read_csv(path + "children.csv", sep=";", decimal=",")

# Projection of population
numbers_ = eff.projectNumbers(employees,
                              spouses,
                              children,
                              'TV 88-90',
                              MAX_ANNEES,
                              (law_ret1, ['age', 'Year_employment']),
                              (law_resignation_1, ['age', 'sex']),
                              (law_mar1, ['age', 'sex', 'type']),
                              law_replacement_=None)

# Global numbers
Effectifs = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                              MAX_ANNEES)

Effectifs.to_csv('Effectifs_python.csv', sep=';', index=False, decimal=',')

# Number of actives leaving population : deaths, resignations, and new retired
Leaving = eff.leavingNumbers(numbers_[0], numbers_[4], MAX_ANNEES)

Leaving.to_csv('Sortants_python.csv', sep=';', index=False, decimal=',')
コード例 #8
0
def test_simulerEffectif_1():

    # employees
    ids = ['id1', 'id2', 'id3']
    types = ['active', 'retired', 'active']
    sexes = ['male', 'female', 'male']
    familystatus = ['married', 'married', 'not married']
    ages = [30, 65, 45]
    Data = {
        'id': ids,
        'type': types,
        'sex': sexes,
        'familyStatus': familystatus,
        'age': ages
    }
    employees = pd.DataFrame(
        data=Data, columns=['id', 'type', 'sex', 'familyStatus', 'age'])

    # spouses
    ids = ['id1', 'id2']
    rangs = [1, 1]
    sexes = ['female', 'male']
    ages = [25, 65]
    types = ['active', 'retired']
    familystatus = ['married', 'married']
    Data = {
        'id': ids,
        'rang': rangs,
        'sex': sexes,
        'age': ages,
        'type': types,
        'familyStatus': familystatus
    }
    spouses = pd.DataFrame(
        data=Data,
        columns=['id', 'rang', 'sex', 'age', 'type', 'familyStatus'])

    # children
    ids = []
    rangs = []
    sexes = []
    ages = []
    types = []
    familystatus = []
    Data = {
        'id': ids,
        'rang': rangs,
        'sex': sexes,
        'age': ages,
        'type': types,
        'familyStatus': familystatus
    }
    children = pd.DataFrame(
        data=Data,
        columns=['id', 'rang', 'sex', 'age', 'type', 'familyStatus'])

    # Projection of population
    # Number of years to project
    MAX_ANNEES = 60

    # Projection
    numbers_ = eff.projectNumbers(employees,
                                  spouses,
                                  children,
                                  MAX_YEARS=MAX_ANNEES)

    # global numbers
    global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                    MAX_ANNEES)
コード例 #9
0
# print(spouses.head(10))
# print('Children :')
# print(children.head(10))

# Projection of population
# Number of years to project
MAX_ANNEES = 50

# Projection
cols_birth = [('age', 'employees'), ('age', 'spouses'), ('sex', 'employees'),
              ('sex', 'spouses')]
numbers_ = eff.projectNumbers(employees,
                              spouses,
                              children,
                              'TV 88-90',
                              MAX_ANNEES,
                              law_replacement_=law_replacement1,
                              law_marriage_=(law_mar_3, ['age', 'year_proj']),
                              law_birth_=loi_naiss_5,
                              law_resignation_=turnover)

# global numbers
global_numb = eff.globalNumbers(numbers_[0], numbers_[1], numbers_[2],
                                MAX_ANNEES)

# printing results
# print(global_numb)

# export global numbers
global_numb.to_csv(path_exp + "global_numbers.csv",
                   index=False,