marketing_plan.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import pandas as pd
  2. import numpy as np
  3. from pathlib import Path
  4. import json
  5. base_dir = Path(__file__).parent.parent
  6. filename = base_dir / 'data' / 'Marketingplanung_AHR_2023_V1.xls'
  7. output = base_dir / 'export' / 'marketing_2023.json'
  8. output_csv = base_dir / 'export' / 'marketing_2023.csv'
  9. debug_csv = base_dir / 'export' / 'marketing_2023_rest.csv'
  10. department = {
  11. ' MM': '10',
  12. ' ULM': '40',
  13. ' LL': '50',
  14. 'KRU': '30',
  15. 'GZ': '55',
  16. 'AAM': '82',
  17. 'AAM-MOT': '81'
  18. }
  19. columns = [
  20. 'Bezeichnung', 'Segment', 'Termin',
  21. 'Wert1', 'Wert2', 'Wert3', 'Wert4', 'Wert5', 'Wert6',
  22. 'Wert7', 'Wert8', 'Wert9', 'Wert10', 'Wert11', 'Wert12', 'Summe'
  23. ]
  24. defaults = ['', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  25. types = [str] * 3 # + [float] * 13
  26. xls = pd.read_excel(
  27. filename,
  28. sheet_name=list(department.keys()),
  29. skiprows=4,
  30. usecols='A:P',
  31. names=columns,
  32. converters=dict(zip(columns, types)),
  33. )
  34. xls_temp = []
  35. for sheet, dept_no in department.items():
  36. xls[sheet]['Betrieb Nr'] = dept_no
  37. xls[sheet] = xls[sheet].fillna(value=dict(zip(columns, defaults)))
  38. xls[sheet]['Konto Nr'] = np.where(xls[sheet]['Segment'].str.startswith('Kto '), xls[sheet]['Segment'].str.slice(4, 9), 'Rest')
  39. # xls[sheet]['Konto Nr'] = np.where(xls[sheet]['Segment'].str.startswith('50% '), xls[sheet]['Segment'].str.slice(-5), xls[sheet]['Konto Nr'])
  40. temp = xls[sheet][xls[sheet]['Segment'].str.startswith('50% ')].copy()
  41. temp['Konto Nr'] = temp['Segment'].str.slice(8, 13)
  42. xls_temp.append(temp)
  43. temp2 = temp.copy()
  44. temp2['Konto Nr'] = temp2['Segment'].str.slice(-5)
  45. xls_temp.append(temp2)
  46. xls_temp_concat = pd.concat(xls_temp)
  47. for c in columns[3:]:
  48. xls_temp_concat[c] = xls_temp_concat[c] * 0.5
  49. df = pd.concat(list(xls.values()) + [xls_temp_concat])
  50. df_rest = df[(df['Konto Nr'] == 'Rest') & (df['Summe'] != 0)]
  51. df_rest.to_csv(debug_csv, sep=';', decimal=',')
  52. df = df[df['Konto Nr'] != 'Rest']
  53. df['Wert11'] = df['Wert11'].astype(float)
  54. df['Wert12'] = df['Wert12'].astype(float)
  55. df = df.groupby(['Konto Nr', 'Betrieb Nr']).sum()
  56. print(df.info())
  57. # df.reset_index(inplace=True)
  58. df.to_csv(output_csv, sep=';', decimal=',')
  59. dict_split = df.to_dict(orient='split')
  60. res = {}
  61. for index, data in zip(dict_split['index'], dict_split['data']):
  62. kto, dept = index
  63. if kto not in res:
  64. res[kto] = {}
  65. res[kto][dept] = data
  66. json.dump(res, open(output, 'w'), indent=2)