# Visualize the comparison with Plotly
from plotly.subplots import make_subplots
import plotly.graph_objects as go
# Prepare data
categories = ['JS/TS\n(All)', 'Node.js\n(Backend)', 'Python\n(RedisVL exists)', 'Java\n(RedisVL exists)']
total_counts = [len(js_ts_developers), len(nodejs_developers), len(python_developers), len(java_developers)]
redis_counts = [len(js_ts_redis_developers), len(nodejs_redis_developers), len(python_redis_developers), len(java_redis_developers)]
# Create subplots
fig = make_subplots(
rows=2, cols=2,
subplot_titles=('Total Developers vs Redis Users', 'Redis Adoption Rates',
'Market Size Ratios (vs Node.js)', 'Market Distribution'),
specs=[[{'type': 'bar'}, {'type': 'bar'}],
[{'type': 'bar'}, {'type': 'pie'}]]
)
# Chart 1: Total vs Redis users
fig.add_trace(go.Bar(name='Total Developers', x=categories, y=total_counts,
marker_color='lightblue', text=[f'{c:,}' for c in total_counts],
textposition='outside'), row=1, col=1)
fig.add_trace(go.Bar(name='Redis Users', x=categories, y=redis_counts,
marker_color='#DC382D', text=[f'{c:,}' for c in redis_counts],
textposition='outside'), row=1, col=1)
# Chart 2: Redis adoption rates
adoption_rates = [(redis_counts[i]/total_counts[i])*100 for i in range(len(categories))]
fig.add_trace(go.Bar(x=categories, y=adoption_rates, marker_color=['#f7df1e', '#68a063', '#3776ab', '#f89820'],
text=[f'{r:.1f}%' for r in adoption_rates], textposition='outside',
showlegend=False), row=1, col=2)
# Chart 3: Market size ratios
nodejs_total = len(nodejs_developers)
ratios = [len(nodejs_developers)/len(nodejs_developers),
len(nodejs_developers)/len(python_developers),
len(nodejs_developers)/len(java_developers)]
ratio_labels = ['Node.js\nvs Node.js', 'Node.js\nvs Python', 'Node.js\nvs Java']
colors = ['green' if r >= 1 else 'red' for r in ratios]
fig.add_trace(go.Bar(y=ratio_labels, x=ratios, orientation='h', marker_color=colors,
text=[f'{r:.2f}x' for r in ratios], textposition='outside',
showlegend=False), row=2, col=1)
# Chart 4: Pie chart
pie_labels = ['Node.js + Redis', 'Python + Redis', 'Java + Redis']
pie_values = [len(nodejs_redis_developers), len(python_redis_developers), len(java_redis_developers)]
fig.add_trace(go.Pie(labels=pie_labels, values=pie_values,
marker_colors=['#68a063', '#3776ab', '#f89820'],
textinfo='label+percent+value', texttemplate='%{label}<br>%{value:,}<br>(%{percent})'),
row=2, col=2)
fig.update_layout(height=1000, showlegend=True, title_text="Market Analysis: Node.js vs Python vs Java")
fig.update_xaxes(title_text="Platform", row=1, col=1)
fig.update_yaxes(title_text="Number of Developers", row=1, col=1)
fig.update_xaxes(title_text="Platform", row=1, col=2)
fig.update_yaxes(title_text="Adoption Rate (%)", row=1, col=2)
fig.update_xaxes(title_text="Ratio", row=2, col=1)
fig.show()