Spaces:
Sleeping
Sleeping
10th deployment. Handle dynamic TB statements from uploaded datasets.
Browse files- app.py +99 -57
- data_source/time_to_rethink_trust_book.md +254 -0
- 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 |
-
|
| 398 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
#
|
| 489 |
title = f"Trust Profile: {file_name}"
|
| 490 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 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 |
-
#
|
| 674 |
-
os.
|
| 675 |
-
|
|
|
|
| 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.
|
| 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="
|
| 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 |
-
|
| 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 (
|
| 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 |
-
#
|
|
|
|
| 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[
|
|
|
|
|
|
|
| 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
|
| 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
|
| 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 |
-
#
|
| 1150 |
df_labels = pd.DataFrame([list_labels], columns=df.columns)
|
| 1151 |
|
| 1152 |
# Concatenate header_df, df_labels, and df
|
| 1153 |
-
|
|
|
|
| 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
|
| 1165 |
-
max_tb_label =
|
| 1166 |
tb_columns = [col for col in df.columns if col.startswith("TB")]
|
| 1167 |
-
tb_columns_to_keep = {f"TB{i
|
| 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 |
-
#
|
| 68 |
-
|
|
|
|
|
|
|
|
|
|
| 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
|