-
Notifications
You must be signed in to change notification settings - Fork 0
/
eier_production_contribution_year_v1.py
104 lines (88 loc) · 3.71 KB
/
eier_production_contribution_year_v1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""
Read csv-File with new values.
Read excel-File with old values.
Compare corresponding values according to Product_Name and Date.
Output results in txt-File.
"""
import pandas as pd
from datetime import datetime
""" set parameters """
# Enter NEW_FILENAME. An abbreviation of it will also be used to
# create the output-file name with the results.
NEW_FILENAME = "F_MARS_708_BIP_FACT_VW403_Eggs_Production__Contribution_Year.csv"
# VERSION will be used to create the output-file name with the results.
VERSION = "v1"
# round to number of decimals.
# There will be as many iterations, as values are given.
ACCURACY = [2, 4]
""" read new file and create a dataframe for each Product_Name """
new_file = pd.read_csv(
f"new/{NEW_FILENAME}", header=0, sep=";"
)
list_of_new_dataframes = []
for product in new_file["Product_Name"].unique():
new_dataframe = new_file.loc[new_file["Product_Name"] == product]
new_dataframe.set_index("YearMonthCode", inplace=True)
new_dataframe = new_dataframe.sort_index()
new_dataframe.Name = product
list_of_new_dataframes.append(new_dataframe)
""" prepare old file
read in the old file. Names of columns had to be changed manually so that
the correspond to the Product_Name in the new files """
old_file = pd.read_excel(
"old/MBE_Excel.xlsm",
sheet_name="D.3 MEM",
names=[
"Year",
"Aufschlagsaktion, Beitrag pro Ei",
"Aufschlagsaktion, Beitrag in Stück",
"Verbilligungsaktion, Beitrag pro Ei",
"Verbilligungsaktion, Beitrag in Stück",
"Aufschlagsaktion, eingesetzte Mittel",
"Verbilligungsaktion, eingesetzte Mittel",
"Total",
"Aufschlagsaktion, verfügbare Mittel",
"Verbilligungsaktion, verfügbare Mittel",
"Maximal Mittel Total",
"Auslastung Mittel",
"Anteil betroffene Eier in Inlandproduktion",
],
header=None,
skiprows=17,
)
old_file["Year"] = old_file["Year"].astype(str) + "01"
old_file.set_index("Year", inplace=True)
""" parameters for output-file name """
output_name = NEW_FILENAME[26:-4]
now = datetime.now().replace(microsecond=0).strftime('%Y%m%d%H%M%S')
""" compare values in new and old files with writing result in an output-file """
iter_over = list_of_new_dataframes[0].index.to_list()
with open(f"output/{output_name}_{VERSION}_{now}.txt", "a") as f:
for round_to in ACCURACY:
f.write(
f'{"#"*100}\n\nValues accuracy: Values rounded to {round_to}\n\n{"#"*100}\n\n')
for _, df in enumerate(list_of_new_dataframes):
f.write(f'{"="*20}\n{df.Name}\n\n')
total = 0 # counter to keep track of total entries
correct = 0 # counter to keep track of correct entries
for date in df.index:
date_str = str(date)
try:
total += 1
old = old_file[df.Name].loc[date_str]
old = round(old, round_to)
new = df["KeyIndicator"].loc[date]
new = round(new, round_to)
differenz = (old-new)*100
if old != new:
f.write(
f"{date} : test passed: {old == new}. "
f"Old value: {old}, new value: {new}. "
f"Differenz <old - new> in "
f"Rappen = {differenz}\n"
)
else:
correct += 1
except KeyError as e:
f.write(f"{e} : No Value found.\n")
f.write(f"\nnumber correct entries: {correct} / {total} \n\n")