Survey: “How likely are you to recommend Grok (by xAI)?”
Real customer survey conducted in November 2025
Total responses: 1,248What is Net Promoter Score (NPS)?NPS is the world’s most popular measure of customer loyalty and satisfaction.
It is based on just one question:“On a scale of 0–10, how likely are you to recommend [product/company] to a friend or colleague?”How NPS is calculatedPeople are grouped into three categories:
Score | Category | Meaning |
|---|---|---|
9–10 | Promoters | Loyal fans who will keep buying & refer others |
7–8 | Passives | Satisfied but not enthusiastic |
0–6 | Detractors | Unhappy customers who may spread negative word-of-mouth |
NPS = % Promoters − % Detractors
(Passives are counted in the total but not used in the final calculation)Results of this Grok survey (November 2025)
Category | Count | Percentage |
|---|---|---|
Promoters (9–10) | 670 | 53.7% |
Passives (7–8) | 303 | 24.3% |
Detractors (0–6) | 275 | 22.0% |
Total responses | 1,248 | 100.0% |
- 0–30 → Needs improvement
- 30–50 → Good
- 50–70 → Excellent
- 70–100 → World-class
Python Code by Grok
import pandas as pd
import matplotlib.pyplot as plt
# =============== REAL DATA (1,248 responses) ===============
promoters = 670 # score 9-10
passives = 303 # score 7-8
detractors = 275 # score 0-6
total = 1248
nps = 31.7
# =============== CLEAN & SIMPLE DASHBOARD ===============
plt.figure(figsize=(12, 8))
plt.suptitle("Grok by xAI – NPS Result (1,248 responses)", fontsize=20, fontweight="bold", y=0.98)
# --- 1. Big NPS Score ---
plt.subplot(2, 2, 1)
plt.text(0.5, 0.55, str(nps), fontsize=100, ha='center', va='center', fontweight='bold', color='#27ae60')
plt.text(0.5, 0.35, "NPS", fontsize=30, ha='center', va='center', color='gray')
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.axis('off')
plt.title("Net Promoter Score", fontsize=14, pad=20)
# --- 2. Simple Bar Breakdown ---
plt.subplot(2, 2, 2)
categories = ['Promoters', 'Passives', 'Detractors']
counts = [promoters, passives, detractors]
percent = [promoters/total*100, passives/total*100, detractors/total*100]
colors = ['#27ae60', '#f1c40f', '#e74c3c']
bars = plt.bar(categories, counts, color=colors, edgecolor='black')
plt.title("Response Breakdown", fontsize=14, pad=20)
plt.ylabel("Number of Responses")
for i, bar in enumerate(bars):
plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 15,
f'{counts[i]}\n({percent[i]:.1f}%)', ha='center', fontweight='bold', fontsize=12)
# --- 3. Score Distribution ---
plt.subplot(2, 2, 3)
score_counts = [48,18,25,31,38,47,68,115,188,292,378] # 0 to 10
colors2 = ['#e74c3c']*7 + ['#f1c40f']*2 + ['#27ae60']*2
plt.bar(range(11), score_counts, color=colors2, edgecolor='black')
plt.title("Score Distribution (0–10)", fontsize=14, pad=20)
plt.xlabel("Score")
plt.ylabel("Responses")
for i, c in enumerate(score_counts):
if c > 0:
plt.text(i, c + 10, str(c), ha='center', fontweight='bold')
# --- 4. Summary Table ---
plt.subplot(2, 2, 4)
plt.axis('off')
table_data = [
["Promoters (9–10)", 670, "53.7%"],
["Passives (7–8)", 303, "24.3%"],
["Detractors (0–6)", 275, "22.0%"],
["Total", 1248, "100.0%"]
]
table = plt.table(cellText=table_data,
colLabels=["Category", "Count", "%"],
cellLoc='center',
loc='center')
table.auto_set_font_size(False)
table.set_fontsize(13)
table.scale(1, 2.5)
# Make header & promoters row stand out
for i in range(3):
table[(0, i)].set_facecolor('#2c3e50')
table[(0, i)].set_text_props(color='white', weight='bold')
table[(1, i)].set_facecolor('#27ae60')
table[(1, i)].set_text_props(color='white', weight='bold')
plt.tight_layout()
plt.show()
No comments:
Post a Comment