nghweigeok commited on
Commit
2ad8d67
·
verified ·
1 Parent(s): 8e4a9f9

10th deployment. Handle dynamic TB statements from uploaded datasets.

Browse files
Files changed (3) hide show
  1. app.py +99 -57
  2. data_source/time_to_rethink_trust_book.md +254 -0
  3. process_data.R +6 -3
app.py CHANGED
@@ -394,8 +394,23 @@ def analyze_excel_single(file_path):
394
  if "Builder" in excel_file.sheet_names:
395
  # Read the "Builder" sheet, making row 6 the header and reading row 7 onwards as data
396
  builder_data = pd.read_excel(file_path, sheet_name="Builder", header=5)
397
- # Check if the "Builder" sheet contains more than 10 rows
398
- trustbuilder_present = len(builder_data) > 10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
399
  else:
400
  trustbuilder_present = False
401
 
@@ -485,9 +500,12 @@ def analyze_excel_single(file_path):
485
  # Get file name for display
486
  file_name = file_path.split("/")[-1]
487
 
488
- # plot how full the trust buckets are
489
  title = f"Trust Profile: {file_name}"
490
- img_bucketfull = plot_bucket_fullness(df, title)
 
 
 
491
 
492
  # plot trust
493
  # Get n_samples from output text
@@ -500,12 +518,17 @@ def analyze_excel_single(file_path):
500
  results_df_trust["Importance_percent"] = results_df_trust["Importance"] * 100
501
  average_value_trust = results_df_trust["Importance_percent"].mean()
502
 
503
- img_trust = plot_model_results(
504
- results_df_trust,
505
- average_value_trust,
506
- f"Trust Drivers: {file_name}",
507
- "Trust",
508
- )
 
 
 
 
 
509
 
510
  # plot NPS
511
  img_nps = None
@@ -525,6 +548,10 @@ def analyze_excel_single(file_path):
525
  f"NPS Drivers: {file_name}",
526
  "NPS",
527
  )
 
 
 
 
528
 
529
  # plot loyalty
530
  img_loyalty = None
@@ -546,6 +573,10 @@ def analyze_excel_single(file_path):
546
  f"Loyalty Drivers: {file_name}",
547
  "Loyalty",
548
  )
 
 
 
 
549
 
550
  # plot consideration
551
  img_consideration = None
@@ -571,6 +602,12 @@ def analyze_excel_single(file_path):
571
  f"Consideration Drivers: {file_name}",
572
  "Consideration",
573
  )
 
 
 
 
 
 
574
 
575
  # plot satisfaction
576
  img_satisfaction = None
@@ -596,10 +633,16 @@ def analyze_excel_single(file_path):
596
  f"Satisfaction Drivers: {file_name}",
597
  "Satisfaction",
598
  )
 
 
 
 
 
 
599
 
600
  # plot trust builder table 1 and 2
601
  df_builder_pivot = None
602
- if trustbuilder_present:
603
  # Create dataframe for trust builder
604
  results_df_builder = pd.read_csv(csv_output_path_trustbuilder)
605
 
@@ -670,43 +713,21 @@ def analyze_excel_single(file_path):
670
  by=["Trust Driver®", "%"], ascending=[True, False]
671
  )
672
 
673
- # After processing, ensure to delete the temporary files and directory
674
- os.remove(csv_output_path_trust)
675
- if nps_present:
 
676
  os.remove(csv_output_path_nps)
677
- if loyalty_present:
678
  os.remove(csv_output_path_loyalty)
679
- if consideration_present:
680
  os.remove(csv_output_path_consideration)
681
- if satisfaction_present:
682
  os.remove(csv_output_path_satisfaction)
683
- if trustbuilder_present:
684
  os.remove(csv_output_path_trustbuilder)
685
- os.remove(text_output_path)
686
-
687
- if img_nps is None:
688
- # Load the placeholder image if NPS analysis was not performed
689
- img_nps = Image.open("./images/nps_not_available.png")
690
- img_nps = img_nps.resize((1000, 800), Image.Resampling.LANCZOS)
691
-
692
- if img_loyalty is None:
693
- # Load the placeholder image if Loyalty analysis was not performed
694
- img_loyalty = Image.open("./images/loyalty_not_available.png")
695
- img_loyalty = img_loyalty.resize((1000, 800), Image.Resampling.LANCZOS)
696
-
697
- if img_consideration is None:
698
- # Load the placeholder image if Consideration analysis was not performed
699
- img_consideration = Image.open("./images/consideration_not_available.png")
700
- img_consideration = img_consideration.resize(
701
- (1000, 800), Image.Resampling.LANCZOS
702
- )
703
-
704
- if img_satisfaction is None:
705
- # Load the placeholder image if Satisfaction analysis was not performed
706
- img_satisfaction = Image.open("./images/satisfaction_not_available.png")
707
- img_satisfaction = img_satisfaction.resize(
708
- (1000, 800), Image.Resampling.LANCZOS
709
- )
710
 
711
  return (
712
  img_bucketfull,
@@ -889,20 +910,24 @@ def variable_outputs(file_inputs):
889
  gr.Image(
890
  value=img_loyalty,
891
  type="pil",
 
892
  visible=True,
893
  ),
894
  gr.Image(
895
  value=img_consideration,
896
  type="pil",
 
897
  visible=True,
898
  ),
899
  gr.Image(
900
  value=img_satisfaction,
901
  type="pil",
 
902
  visible=True,
903
  ),
904
  gr.Textbox(
905
  value=output_text,
 
906
  visible=False,
907
  ),
908
  ]
@@ -960,7 +985,7 @@ def variable_outputs(file_inputs):
960
  gr.Textbox(label="Analysis Summary", visible=False),
961
  gr.Markdown("", visible=False),
962
  gr.Markdown("", visible=False),
963
- gr.Dataframe(value=None, label=" ", visible=False),
964
  ]
965
 
966
  return plots_visible + plots_invisible * (max_outputs - k)
@@ -1064,7 +1089,7 @@ def data_processing(file_path):
1064
  file_path (str): Path to the CSV file.
1065
 
1066
  Returns:
1067
- tuple: Contains processed data and results (customize based on your needs).
1068
  """
1069
  try:
1070
  logger.info("Processing CSV file: %s", file_path)
@@ -1079,11 +1104,20 @@ def data_processing(file_path):
1079
  # Merge the two rows to create column names
1080
  merged_columns = header_df.iloc[0] + " " + header_df.iloc[1]
1081
 
1082
- # Load the rest of the DataFrame using the merged column names
1083
  df = pd.read_csv(file_path, skiprows=2, names=merged_columns)
1084
 
 
 
 
 
 
 
 
 
 
1085
  # For any value in all columns that contain " - " (rating),
1086
- # split and only take the first part (in digit format)
1087
  def split_value(val):
1088
  if isinstance(val, str) and " - " in val:
1089
  return val.split(" - ")[0]
@@ -1095,21 +1129,27 @@ def data_processing(file_path):
1095
  # Convert the columns from the third column onwards to numeric
1096
  df.iloc[:, 2:] = df.iloc[:, 2:].apply(pd.to_numeric, errors="coerce")
1097
 
1098
- # Search for the text in the column names
 
1099
  search_text = "how likely are you to buy another".lower()
1100
  col_index = [
1101
  i for i, col in enumerate(df.columns) if search_text in col.lower()
1102
  ]
1103
 
 
1104
  if col_index:
1105
- col_index = col_index[0] # Assuming there is only one matching column
 
 
1106
 
1107
  # Define the mapping dictionary for reverse replacement
 
1108
  replace_map = {1: 5, 2: 4, 4: 2, 5: 1}
1109
 
1110
- # Replace values in the specified column
1111
  df.iloc[:, col_index] = df.iloc[:, col_index].replace(replace_map)
1112
 
 
1113
  column_mapping = {
1114
  "Did you own a": "Q1",
1115
  "your age": "Q2",
@@ -1125,10 +1165,11 @@ def data_processing(file_path):
1125
  "Has what it takes to succeed": "Competence",
1126
  }
1127
 
1128
- # Create a list to hold the labels
1129
  list_labels = []
1130
 
1131
  # Loop through each column in merged_columns
 
1132
  for col in merged_columns:
1133
  label = None
1134
  for key, value in column_mapping.items():
@@ -1146,13 +1187,14 @@ def data_processing(file_path):
1146
  for i in range(difference):
1147
  list_labels.append(f"TB{i + 1}")
1148
 
1149
- # Add list_labels as the first row after the column names
1150
  df_labels = pd.DataFrame([list_labels], columns=df.columns)
1151
 
1152
  # Concatenate header_df, df_labels, and df
1153
- header_df.columns = df.columns # Ensure header_df has the same columns as df
 
1154
 
1155
- # Create a DataFrame with 2 rows of NaNs
1156
  nan_rows = pd.DataFrame(np.nan, index=range(2), columns=df.columns)
1157
 
1158
  # Pad 2 rows of NaNs, followed by survey questions to make it the same format as the input excel file
@@ -1161,10 +1203,10 @@ def data_processing(file_path):
1161
  # Make list labels the column names
1162
  df.columns = list_labels
1163
 
1164
- # Remove columns beyond TB37
1165
- max_tb_label = 37
1166
  tb_columns = [col for col in df.columns if col.startswith("TB")]
1167
- tb_columns_to_keep = {f"TB{i + 1}" for i in range(max_tb_label)}
1168
  tb_columns_to_drop = [
1169
  col for col in tb_columns if col not in tb_columns_to_keep
1170
  ]
 
394
  if "Builder" in excel_file.sheet_names:
395
  # Read the "Builder" sheet, making row 6 the header and reading row 7 onwards as data
396
  builder_data = pd.read_excel(file_path, sheet_name="Builder", header=5)
397
+
398
+ # Check if the "Builder" sheet contains:
399
+ # more than 10 rows and required columns,
400
+ # and contains at least one TB column
401
+ required_builder_columns = [
402
+ "Stability",
403
+ "Development",
404
+ "Relationship",
405
+ "Benefit",
406
+ "Vision",
407
+ "Competence",
408
+ ]
409
+ trustbuilder_present = (
410
+ len(builder_data) > 10
411
+ and all(col in builder_data.columns for col in required_builder_columns)
412
+ and any(col.startswith("TB") for col in builder_data.columns)
413
+ )
414
  else:
415
  trustbuilder_present = False
416
 
 
500
  # Get file name for display
501
  file_name = file_path.split("/")[-1]
502
 
503
+ # Plot how full the trust buckets are
504
  title = f"Trust Profile: {file_name}"
505
+ if missing_columns:
506
+ img_bucketfull = Image.open("./images/bucket_fullness_not_available.png")
507
+ else:
508
+ img_bucketfull = plot_bucket_fullness(df, title)
509
 
510
  # plot trust
511
  # Get n_samples from output text
 
518
  results_df_trust["Importance_percent"] = results_df_trust["Importance"] * 100
519
  average_value_trust = results_df_trust["Importance_percent"].mean()
520
 
521
+ # Load the placeholder image if Trust analysis was not performed
522
+ if missing_columns:
523
+ img_trust = Image.open("./images/trust_not_available.png")
524
+ img_trust = img_trust.resize((1000, 800), Image.Resampling.LANCZOS)
525
+ else:
526
+ img_trust = plot_model_results(
527
+ results_df_trust,
528
+ average_value_trust,
529
+ f"Trust Drivers: {file_name}",
530
+ "Trust",
531
+ )
532
 
533
  # plot NPS
534
  img_nps = None
 
548
  f"NPS Drivers: {file_name}",
549
  "NPS",
550
  )
551
+ else:
552
+ # Load the placeholder image if NPS analysis was not performed
553
+ img_nps = Image.open("./images/nps_not_available.png")
554
+ img_nps = img_nps.resize((1000, 800), Image.Resampling.LANCZOS)
555
 
556
  # plot loyalty
557
  img_loyalty = None
 
573
  f"Loyalty Drivers: {file_name}",
574
  "Loyalty",
575
  )
576
+ else:
577
+ # Load the placeholder image if Loyalty analysis was not performed
578
+ img_loyalty = Image.open("./images/loyalty_not_available.png")
579
+ img_loyalty = img_loyalty.resize((1000, 800), Image.Resampling.LANCZOS)
580
 
581
  # plot consideration
582
  img_consideration = None
 
602
  f"Consideration Drivers: {file_name}",
603
  "Consideration",
604
  )
605
+ else:
606
+ # Load the placeholder image if Consideration analysis was not performed
607
+ img_consideration = Image.open("./images/consideration_not_available.png")
608
+ img_consideration = img_consideration.resize(
609
+ (1000, 800), Image.Resampling.LANCZOS
610
+ )
611
 
612
  # plot satisfaction
613
  img_satisfaction = None
 
633
  f"Satisfaction Drivers: {file_name}",
634
  "Satisfaction",
635
  )
636
+ else:
637
+ # Load the placeholder image if Satisfaction analysis was not performed
638
+ img_satisfaction = Image.open("./images/satisfaction_not_available.png")
639
+ img_satisfaction = img_satisfaction.resize(
640
+ (1000, 800), Image.Resampling.LANCZOS
641
+ )
642
 
643
  # plot trust builder table 1 and 2
644
  df_builder_pivot = None
645
+ if trustbuilder_present and os.path.exists(csv_output_path_trustbuilder):
646
  # Create dataframe for trust builder
647
  results_df_builder = pd.read_csv(csv_output_path_trustbuilder)
648
 
 
713
  by=["Trust Driver®", "%"], ascending=[True, False]
714
  )
715
 
716
+ # Cleanup temporary files
717
+ if os.path.exists(csv_output_path_trust):
718
+ os.remove(csv_output_path_trust)
719
+ if nps_present and os.path.exists(csv_output_path_nps):
720
  os.remove(csv_output_path_nps)
721
+ if loyalty_present and os.path.exists(csv_output_path_loyalty):
722
  os.remove(csv_output_path_loyalty)
723
+ if consideration_present and os.path.exists(csv_output_path_consideration):
724
  os.remove(csv_output_path_consideration)
725
+ if satisfaction_present and os.path.exists(csv_output_path_satisfaction):
726
  os.remove(csv_output_path_satisfaction)
727
+ if trustbuilder_present and os.path.exists(csv_output_path_trustbuilder):
728
  os.remove(csv_output_path_trustbuilder)
729
+ if os.path.exists(text_output_path):
730
+ os.remove(text_output_path)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
731
 
732
  return (
733
  img_bucketfull,
 
910
  gr.Image(
911
  value=img_loyalty,
912
  type="pil",
913
+ label="Loyalty Drivers",
914
  visible=True,
915
  ),
916
  gr.Image(
917
  value=img_consideration,
918
  type="pil",
919
+ label="Consideration Drivers",
920
  visible=True,
921
  ),
922
  gr.Image(
923
  value=img_satisfaction,
924
  type="pil",
925
+ label="Satisfaction Drivers",
926
  visible=True,
927
  ),
928
  gr.Textbox(
929
  value=output_text,
930
+ label="Analysis Summary",
931
  visible=False,
932
  ),
933
  ]
 
985
  gr.Textbox(label="Analysis Summary", visible=False),
986
  gr.Markdown("", visible=False),
987
  gr.Markdown("", visible=False),
988
+ gr.Dataframe(value=None, label="", visible=False),
989
  ]
990
 
991
  return plots_visible + plots_invisible * (max_outputs - k)
 
1089
  file_path (str): Path to the CSV file.
1090
 
1091
  Returns:
1092
+ str: Path to the processed Excel file.
1093
  """
1094
  try:
1095
  logger.info("Processing CSV file: %s", file_path)
 
1104
  # Merge the two rows to create column names
1105
  merged_columns = header_df.iloc[0] + " " + header_df.iloc[1]
1106
 
1107
+ # Load the rest of the DataFrame (data) and rename columns using the merged column names
1108
  df = pd.read_csv(file_path, skiprows=2, names=merged_columns)
1109
 
1110
+ # Remove the "RID" column if it exists in header_df, merged_columns, and df
1111
+ rid_columns = [col for col in merged_columns if "RID" in col]
1112
+ if rid_columns:
1113
+ for rid_col in rid_columns:
1114
+ rid_index = merged_columns[merged_columns == rid_col].index[0]
1115
+ header_df.drop(columns=header_df.columns[rid_index], inplace=True)
1116
+ merged_columns = merged_columns.drop(rid_index)
1117
+ df.drop(columns=[rid_col], inplace=True)
1118
+
1119
  # For any value in all columns that contain " - " (rating),
1120
+ # split and only take the first part (digits)
1121
  def split_value(val):
1122
  if isinstance(val, str) and " - " in val:
1123
  return val.split(" - ")[0]
 
1129
  # Convert the columns from the third column onwards to numeric
1130
  df.iloc[:, 2:] = df.iloc[:, 2:].apply(pd.to_numeric, errors="coerce")
1131
 
1132
+ # Context-based data processing
1133
+ # Search for the text in the column names, get column index
1134
  search_text = "how likely are you to buy another".lower()
1135
  col_index = [
1136
  i for i, col in enumerate(df.columns) if search_text in col.lower()
1137
  ]
1138
 
1139
+ # If there is such column found (column index not empty)
1140
  if col_index:
1141
+ col_index = col_index[
1142
+ 0
1143
+ ] # Get the column index instead of list (assume there's only one column)
1144
 
1145
  # Define the mapping dictionary for reverse replacement
1146
+ # 1 change to 5, 2 change to 4, and vice versa
1147
  replace_map = {1: 5, 2: 4, 4: 2, 5: 1}
1148
 
1149
+ # Replace values in the chosen column
1150
  df.iloc[:, col_index] = df.iloc[:, col_index].replace(replace_map)
1151
 
1152
+ # Define column mapping for renaming
1153
  column_mapping = {
1154
  "Did you own a": "Q1",
1155
  "your age": "Q2",
 
1165
  "Has what it takes to succeed": "Competence",
1166
  }
1167
 
1168
+ # Create a list to hold the new column names
1169
  list_labels = []
1170
 
1171
  # Loop through each column in merged_columns
1172
+ # Define new column names
1173
  for col in merged_columns:
1174
  label = None
1175
  for key, value in column_mapping.items():
 
1187
  for i in range(difference):
1188
  list_labels.append(f"TB{i + 1}")
1189
 
1190
+ # Place list_labels at the first row after the column names
1191
  df_labels = pd.DataFrame([list_labels], columns=df.columns)
1192
 
1193
  # Concatenate header_df, df_labels, and df
1194
+ # Ensure header_df has the same columns as df
1195
+ header_df.columns = df.columns
1196
 
1197
+ # Create a DataFrame with 2 rows of NaNs (to follow the format of Excel template)
1198
  nan_rows = pd.DataFrame(np.nan, index=range(2), columns=df.columns)
1199
 
1200
  # Pad 2 rows of NaNs, followed by survey questions to make it the same format as the input excel file
 
1203
  # Make list labels the column names
1204
  df.columns = list_labels
1205
 
1206
+ # Remove columns beyond TB60
1207
+ max_tb_label = 60
1208
  tb_columns = [col for col in df.columns if col.startswith("TB")]
1209
+ tb_columns_to_keep = {f"TB{i}" for i in range(1, max_tb_label + 1)}
1210
  tb_columns_to_drop = [
1211
  col for col in tb_columns if col not in tb_columns_to_keep
1212
  ]
data_source/time_to_rethink_trust_book.md CHANGED
@@ -54,6 +54,37 @@ From birth, we live in relationships or, that is, a network of social relations.
54
  - Just in the past decade we have won XYZ awards 7 times.
55
  - Key clients include (for example) ABC which has been a client since we incorporated them 74 years ago.
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  ### Development Trust
58
 
59
  Development trust is, ‘Why can I trust you to develop well into the future, to be a leader and stay relevant to me?
@@ -84,6 +115,53 @@ Today’s markets have grown increasingly complex and are developing faster than
84
  - As an employer of choice we get the best talent and nurture them actively.
85
  - Christina in my team is thinking about doing an MBA on the side. Any suggestions?
86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  ### Relationship Trust
88
 
89
  Relationship trust is about ‘Why can I trust you to relate well to people like me? What quality does this relationship have and how do you show that you invest into it?’
@@ -114,6 +192,42 @@ relationship? That I value and respect the people around me.
114
  - Bring surprising things to meetings (even on Zoom).
115
  - Phrase things more in human/colloquial terms.
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  ### Benefit Trust
118
 
119
  Benefit trust is, ‘What benefit do I get from this relationship with you? What is valuable to me about this?’
@@ -143,6 +257,58 @@ clarity, re-evaluation?
143
  - Unparalleled access to connections/opportunities/insights.
144
  - Our unique ‘value mash’ approach ensures we continuously improve the quality while working at the best possible efficiency.
145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  ### Vision Trust
147
 
148
  Vision trust is about your bigger vision, mission and values. This is more about your purpose and role in society than business goals – ‘What kind of vision and values can I trust you for and how does it manifest itself?’
@@ -170,6 +336,43 @@ Without clear direction, values, and goals, we won´t take action. We need a cha
170
  - Having grown up in a family that strongly emphasised XYZ, today Chris is the backbone of the cause.
171
  - As a firm, we support ABC. In our practice we specifically support XYZ.
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  ### Competence Trust
174
 
175
  Competence trust is, ‘What competencies can I trust you to have to fulfill on your vision and to succeed?’
@@ -205,3 +408,54 @@ manage their lives? What exactly is the added value we provide to them?
205
  - We have won XYZ awards 5 years in a row.
206
  - I lecture on ABC at XYZ University. While sharing my expertise, it also keeps me up to date with the latest trends.
207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  - Just in the past decade we have won XYZ awards 7 times.
55
  - Key clients include (for example) ABC which has been a client since we incorporated them 74 years ago.
56
 
57
+ #### Related proof points for companies or organizations
58
+ - One of the top 3 in the world.
59
+ - Over 15,000 employees.
60
+ - Over $ 10 bn in revenues.
61
+ - Roots go back to 1764.
62
+ - Over 180 years old.
63
+ - Over 20 years old.
64
+ - Stable leadership.
65
+ - Profitable.
66
+ - Customers that have stayed for 3 generations.
67
+ - Staff that are the 3rd generation in the company.
68
+ - Some of the biggest companies in the world choose us.
69
+ - Leading governments trust us.
70
+ - The product has been around for over 50 years.
71
+ - We are in 100 countries.
72
+ - Over 57 governments and the EU support us.
73
+ - We are one of the largest partners of the World Food Program.
74
+ - We initiated the UN charter for child rights.
75
+ - Our founder, Brian Pierce, established us in 1954.
76
+ - Our founding story is.
77
+
78
+ #### Related proof points for individuals
79
+ - I come from a hardworking working class background. I know how to work hard.
80
+ - I come from a teacher background. I have learned from childhood that the most satisfying service is to see other grow.
81
+ - I come from an entrepreurial background.
82
+ - I have 3 children whom I want to give a stable home.
83
+ - I come from a divorcee background. That’s why I want to give my children stability.
84
+ - My parents were hippies traveling the country. Then they had us and settled down and mum became a judge.
85
+ - Our founder went out in search of adventure and came back with a passion or helping children in dire need.
86
+
87
+
88
  ### Development Trust
89
 
90
  Development trust is, ‘Why can I trust you to develop well into the future, to be a leader and stay relevant to me?
 
115
  - As an employer of choice we get the best talent and nurture them actively.
116
  - Christina in my team is thinking about doing an MBA on the side. Any suggestions?
117
 
118
+ #### Related proof points for companies or organizations
119
+ - Always challenge ourselves to be better.
120
+ - Invest $ 50m into innovation each year.
121
+ - Have a clear growth strategy.
122
+ - Have a clear plan.
123
+ - Register over 500 patents every year.
124
+ - We have a radical change program that ensure we meet our clients’ needs now and in the future and guarantees that we prosper.
125
+ - We have three key R&D centres in key locations.
126
+ - Update the app every hour.
127
+ - Our job begins where the map ends.
128
+ - Invest $ 10 m every year into cyber security.
129
+ - We are pioneers in AI or biotech.
130
+ - We partner with leading universities and professors and academics and other cutting edge companies.
131
+ - We constantly have research and pilot programs running.
132
+ - We review every project, combine the leanrings globally and scale them.
133
+ - We develop new best practice every day through practice.
134
+ - We invest over $ 20 m in staff training.
135
+ - Every staff member has at least 30 days of training per year.
136
+ - We can recruit and retain the best people to drive our future success.
137
+ - We have create many world firsts and continue to do so.
138
+ - We have/will restructure to meet future needs better.
139
+ - We push the envelope.
140
+ - Challenge the status quo.
141
+
142
+ #### Related proof points for products or services
143
+ - This will be the world first product that can do this.
144
+ - We have a clear product release pipeline for the next years.
145
+ - Our customer feedback system helps us improve our product and experience daily.
146
+ - We have upgraded our IT systems to serve you better now and in the future.
147
+
148
+ #### Related proof points for individuals
149
+ - I am continuously curious.
150
+ - I consider doing an MBA.
151
+ - I read a lot and broad to stay up to date and to transfer stimulation into my job.
152
+ - I am perpetually driven to do better.
153
+ - My ambition is to achieve the best reviews.
154
+ - I actively seek critique to improve.
155
+ - My travel broadens my horizon continuously and I apply this in my work.
156
+ - I am doing a project management course online to further my skills.
157
+ - I read cutting-edge magazines like Wired to know where the trends go.
158
+ - I keep up to speed with the latest apps, music and arts.
159
+ - I engage a lot with young people to know what the future holds.
160
+ - Being cutting-edge,
161
+ - Being ahead.
162
+ - Anticipate.
163
+
164
+
165
  ### Relationship Trust
166
 
167
  Relationship trust is about ‘Why can I trust you to relate well to people like me? What quality does this relationship have and how do you show that you invest into it?’
 
192
  - Bring surprising things to meetings (even on Zoom).
193
  - Phrase things more in human/colloquial terms.
194
 
195
+ #### Related proof points for companies or organizations
196
+ - We won the customer satisfaction/experience award.
197
+ - We won the customer service award three ties in a row.
198
+ - Our call centre teams receive not just technical training, but also training to be in tune with our customers.
199
+ - For all our contact points with our customers we focus on friendly and easy usability. No matter if phone, chat, or email.
200
+ - We make sure our customers feel appreciated and that we value them.
201
+ - We understand that customers don’t just buy our offer in isolation, but as part of their life context and the specific situation.
202
+ - We provide our customers and people with little, nice surprises.
203
+ - We listen to our customers and people – and action what we learn.
204
+ - Still, with all technology, it is still about people.
205
+ - We have introduced paid parental leave for mum and dad.
206
+ - We have introduced extra carer leave.
207
+ - We have introduced domestic violence and bereavement leave.
208
+ - We provide our staff with free counselling even for personal issues.
209
+ - We provide our staff with free medical support.
210
+ - We know that our customers don’t just buy our product. They buy it to solve an issue or to get ahead.
211
+ - They relate well to the beneficiaries we want to help.
212
+ - They engage for two years with the children and community before they start a project.
213
+ - The engage with the children and community first to understand the future they want to create for themselves.
214
+ - Our staff visit the families and children every three month and spend time with them and their neighbours to make sure they are happy and healthy and progress.
215
+ - 95% of our staff are local. We trained them and after we close the development project, they stay.
216
+ - Our staff live in the communities they help.
217
+ - Our staff speak almost any language, because ethe nuances often matter.
218
+ - We can help you in almost any language.
219
+
220
+ #### Related proof points for individuals
221
+ - Our CEO regularly sits on customer calls and picks up the phone her/himself.
222
+ - Our leadership team makes 10 customer calls every week personally to be in tune with our customers.
223
+ - Our CEO goes around the office wherever she visits and takes time to talk to our people.
224
+ - On a hot day, when I went to a client meeting, I went to the supermarket on my way and bought 200 ice creams and dropped them at the client’s front desk for all staff.
225
+ - I never look at the customer as just business. To me they are a whole person hat I support in all life aspects.
226
+ - Many of my customers have become personal friends over time with long term relationships.
227
+ - I have become the godfather and bridesmaid to clients and their kids.
228
+ - I connect our customers actively together.
229
+
230
+
231
  ### Benefit Trust
232
 
233
  Benefit trust is, ‘What benefit do I get from this relationship with you? What is valuable to me about this?’
 
257
  - Unparalleled access to connections/opportunities/insights.
258
  - Our unique ‘value mash’ approach ensures we continuously improve the quality while working at the best possible efficiency.
259
 
260
+ #### Related proof points for companies and organizations
261
+ - Value for money.
262
+ - Cheaper.
263
+ - Better quality.
264
+ - Better service.
265
+ - Fast.
266
+ - New ideas.
267
+ - See new opportunities and seize them.
268
+ - Progress faster.
269
+ - My career progresses with them.
270
+ - Not just the product, but the whole process around it.
271
+ - Global access.
272
+ - 24/7
273
+ - Certainty.
274
+ - Team depth I can seize on.
275
+ - Can do everything online.
276
+ - Inspires me to do more.
277
+ - I can access them by phone, online and ins store.
278
+ - Close by.
279
+ - Achieved 20% growth with them.
280
+ - My margins went up by 50% in one year.
281
+ - My sales increased right away.
282
+ - I achieved transformational results.
283
+ - I got promoted because of them.
284
+ - I get great employee benefits like gym and health care.
285
+ - They pay me well and I can get a great bonus.
286
+ - The team invigorates me every day.
287
+ - I have good friends at work and so it’s not just work, but play combined.
288
+ - They helped me instantly.
289
+ - They pay out more claims than the others.
290
+ - They have the best doctors.
291
+ - With them I get access to the latest offers.
292
+ - They regularly have discounts.
293
+ - The returns are easy.
294
+ - They have a money back guarantee.
295
+ - Their network is extensive and fast.
296
+ - It’s fun to work with them.
297
+ - In a day of meetings and stress, it’s a delight to deal with them.
298
+ - They bring happiness into my everyday life.
299
+ - They alleviate some of my stresses.
300
+ - They give me courage and confidence.
301
+ - If my child has a well ironed uniform shirt, I feel she can be more confident.
302
+ - I feel I care well with this product.
303
+ - Be healthy.
304
+ - Have abundant energy.
305
+ - More alert.
306
+ - A great taste sensation.
307
+ - It’s the whole atmosphere that makes it.
308
+ - The staff just heighten the experience.
309
+ - I feel more relaxed.
310
+
311
+
312
  ### Vision Trust
313
 
314
  Vision trust is about your bigger vision, mission and values. This is more about your purpose and role in society than business goals – ‘What kind of vision and values can I trust you for and how does it manifest itself?’
 
336
  - Having grown up in a family that strongly emphasised XYZ, today Chris is the backbone of the cause.
337
  - As a firm, we support ABC. In our practice we specifically support XYZ.
338
 
339
+ #### Related proof points for companies or organizations
340
+ - We exist to provide children with a life in all its fullness.
341
+ - We help children and their communities in the most remote and dangerous places.
342
+ - To help the children and communities to get the education that lifts them out of poerty we go where ithers don’t dare to go.
343
+ - We go to the greatest heights and into the furthest corner of the world to helpt hose in need.
344
+ - To live their best life, no matter what the condition, stage, or age.
345
+ - For justice.
346
+ - We are the leaders in ESG and help clients to create a more sustainable future.
347
+ - We help you to shape your world.
348
+ - We help to create a world with more trust.
349
+ - With trust-ability we help to create a win/win for customers and companies.
350
+ - A more connected world.
351
+ - We constantly invest into our network to make sure you are better and better connected with your network.
352
+ - We exist to make our consumers’ lives better or healthier and happier.
353
+ - Bringing the world the best f entertainment.
354
+ - See you flourish.
355
+ - Work over 200,000 hours per year pro bono – that 100 man years every year.
356
+ - We support The Smith Family and the homeless.
357
+ - Our staff get extra time to work every year 4 days for charity.
358
+ - In our work giving program we match our staff donations to heir favourite charities.
359
+ - With our work we provide 200,000 people and their families with the income they need to live a good life.
360
+ - We audit our supply chain for environmental impact and human impact like avoiding slave labour, fair wages and as little a footprint as possible.
361
+ - We commit our suppliers to reduce their footprint and to sign up to modern slavery prevention.
362
+ - 10 cents of every purchase goes to a good cause.
363
+ - 3% of your profits go back into our community and we invest another 5% that benefits our community in the long run.
364
+
365
+ #### Related proof points for individuals
366
+ - I support World Vision, Plan and The Salvation Army.
367
+ - I donate 10% of my income.
368
+ - I am very involved in my community. School, Kindergarten, helping my neighbours.
369
+ - I am the chair of the War Widow’s Guild.
370
+ - I am on the board of the Red Cross.
371
+ - I coach basketball. That’s my volunteering.
372
+ - I volunteer at a homeless kitchen.
373
+ - I do pick up rubbish when I see it. It’s a small thing, but if we all did it, our environment would be much cleaner.
374
+
375
+
376
  ### Competence Trust
377
 
378
  Competence trust is, ‘What competencies can I trust you to have to fulfill on your vision and to succeed?’
 
408
  - We have won XYZ awards 5 years in a row.
409
  - I lecture on ABC at XYZ University. While sharing my expertise, it also keeps me up to date with the latest trends.
410
 
411
+ #### Related proof points for companies or organizations
412
+ - We bring together an amazing array of expertise to aderss the root causes of poverty. From agriculture, to sociologists to livelihood and entrepreneurship.
413
+ - Our systems are fully integrated.
414
+ - We have experts in 57 offices in 40 countries.
415
+ - We understand our customers.
416
+ - We speak your language.
417
+ - Top global legal advice.
418
+ - Develop the most delicious flavours.
419
+ - A very creative organisation.
420
+ - Bring the most diverse skills together to achieve the exceptional.
421
+ - Make things amazing.
422
+ - Resolve issues fast.
423
+ - Be able to help our clients navigate internal and external politics.
424
+ - Being able to consider all perspective to provide customers with the best solutions.
425
+ - Take a holistic view of your customers to provide them with the best solution or them.
426
+ - We know what’s ahead for our customers and therefore provide ethe best recommendations.
427
+ - Nutritious and flavoursome.
428
+ - Have won many industry awards.
429
+ - Get asked to present at conferences.
430
+ - Able to take on the biggest jobs.
431
+ - Rally people together.
432
+ - Ahead in technology.
433
+ - Access to the finest minds.
434
+ - The money to get it done.
435
+
436
+ #### Related proof points for individuals
437
+ - My mum is a creative ceramicist and I have picked up that creativity and bring it into my job here.
438
+ - I have played in a band all my life. That teaches you to be in tune with others and to achieve together.
439
+ - Great team Player.
440
+ - Ability to synthesize quickly.
441
+ - Break complex things down to simple steps.
442
+ - I have joined the tenant board – not to be bored, but to learn how the politics are played. That will help me in my job.
443
+ - Make the complex simple.
444
+ - I am very organised.
445
+ - I can envision things.
446
+
447
+
448
+ ## Example of a good About page of a lawyer, backed by the Six Buckets of Trust®
449
+ Having been with DLA Piper for almost 25 years, Amber has been an integral part of making it the global success story it is today.
450
+
451
+ Amber’s strength in recognising opportunities and empowering teams to seize them ensures DLA Piper continues to develop successfully in the future.
452
+
453
+ This innate skill drives her work ethic and ethos, which is proven throughout her long-standing career with DLA Piper in both London and Australia. Amber’s various roles include being a corporate M&A lawyer, the firm’s international General Counsel and leading the firm’s Legal, Risk Management and Compliance teams.
454
+
455
+ This wide-ranging experience makes her the natural choice as DLA Piper’s Managing Partner in Australia — allowing her to capitalise on fresh opportunities in all areas of the organisation, for the benefit of our clients and people. She is curious and positive, always keen to listen to new ideas and understand how the firm can continuously improve and evolve to provide an excellent service to our clients.
456
+
457
+ Amber’s leadership approach is supported by her mantra of putting service above all. She connects with our people in all areas of the business and is widely seen as a genuine ally, someone truly invested in their vision and success.
458
+
459
+ Amber believes in sharing her time and insights in ways that will benefit others. She is a keen contributor on the Advisory Committee to Macquarie University Law School and promotes health and wellbeing in the legal profession through the firm’s membership of the Corporate Mental Health Alliance, where Amber was previously on the board and continues to participate in mentoring programmes. She also supports charitable organisations such as NASCA, World Vision and Medecins Sans Frontier, who promote a better world for all. She’s driven by a deep sense of fairness and believes in equal opportunities, no matter where you come from.
460
+
461
+ Amber's resilience, empathy, positivity and 'can-do' attitude define her leadership style. Her understanding nature and empathic qualities not only make her approachable and relatable, but are also an asset for our firm and its clients.
process_data.R CHANGED
@@ -64,8 +64,11 @@ trust_builder_analysis <- function(data, data_headers, output_text_file, csv_fil
64
  # Select all columns from the consumer dataframe that contain "TB" in their names and assign them to the variable TB
65
  TB <- data %>% select(contains("TB"))
66
 
67
- # Initialize a matrix with 37 rows and 6 columns, filled with NA values
68
- coef <- matrix(NA, ncol = 6, nrow = 37)
 
 
 
69
 
70
  # Initialize an empty list to store the predictors for each bucket column
71
  bucket_predictors <- list()
@@ -217,7 +220,7 @@ log_message("Starting Trust Driver and Builder Analysis Script.", output_text_fi
217
 
218
  ########## Trust Driver Analysis ######################
219
 
220
- # Load the trust driver dataset (CSV)
221
  data_driver <- NULL
222
  if (grepl(".xlsx", input_file)) {
223
  # Load the Excel file with the fourth row as the header
 
64
  # Select all columns from the consumer dataframe that contain "TB" in their names and assign them to the variable TB
65
  TB <- data %>% select(contains("TB"))
66
 
67
+ # Dynamically detect the number of TB statements
68
+ num_tb_statements <- ncol(TB)
69
+
70
+ # Initialize a matrix with number of TB rows (37 for Volkswagen) and 6 columns, filled with NA values
71
+ coef <- matrix(NA, ncol = 6, nrow = num_tb_statements)
72
 
73
  # Initialize an empty list to store the predictors for each bucket column
74
  bucket_predictors <- list()
 
220
 
221
  ########## Trust Driver Analysis ######################
222
 
223
+ # Load the trust driver dataset (CSV or Excel)
224
  data_driver <- NULL
225
  if (grepl(".xlsx", input_file)) {
226
  # Load the Excel file with the fourth row as the header