Kenya, in Context.¶
Summary¶
A public number needs its denominator and administrative stage. National presidential turnout is 64.77% of the declared registered electorate in 2022. FY 2023/24 county development spending is 57.5% of its approved budget but 24.4% of all expenditure. The National Assembly reported 128 bills processed, not 128 laws enacted.
Historical and descriptive. No causal, partisan or current-performance claim.
Context and methods¶
Sources and precise pages: manifest. Quality notes preserve the 1,000 registered-voter national/row difference, 110 valid-vote candidate-sum difference, budget rounding and conflicting Senate sitting totals. Primary PDFs are linked through the manifest; election totals credit Paul-Oti, with MIT licence retained.
Key assumptions¶
Use the declaration's national row for national turnout and county rows for county turnout. No invented corrections. Use budget Table 2.3, in KES million. Do not pool parliamentary counts as unique items. Periods do not form a causal chain.
Data and validation¶
from analyze import analyze
import matplotlib.pyplot as plt
x = analyze()
assert len(x['counties']) == 47
print('Passed coverage, county joins, source-total and budget arithmetic checks.')
print('Known source differences:', x['quality'])
Passed coverage, county joins, source-total and budget arithmetic checks.
Known source differences: {'declared_minus_sum_registered': 1000, 'declared_valid_minus_candidate_sum': 110, 'senate_sittings_excluded': 'Narrative implies 124; Table 5.9 gives 120. Not used in comparisons.', 'overall_absorption': 'Budget narrative gives 79.5%; Table 2.3 gives 79.4%. Recalculation from table values rounds to 79.4%.'}
e=x['national_election']
labels=['Valid votes','Rejected ballots','Not recorded voting']
values=[100*e[k]/e['registered'] for k in ['valid_votes','rejected_ballots','not_recorded_voting']]
fig,ax=plt.subplots(figsize=(9,3.6))
ax.barh(labels,values,color=['#5b2a86','#b5433b','#8b8096'])
for i,v in enumerate(values): ax.text(v+1,i,f'{v:.2f}%',va='center')
ax.set_xlim(0,100);ax.set_xlabel('Share of declared registered electorate (%)');ax.set_ylabel('Recorded status')
ax.set_title('Kenya presidential election, 2022')
ax.spines[['top','right']].set_visible(False)
fig.tight_layout();plt.show()
One numerator, two questions¶
Controller of Budget FY 2023/24, Table 2.3, PDF pp. 28-29. Development expenditure of KES 109,233.40 million divided by either the approved development budget or total expenditure. These are not service-quality measures.
b=x['national_budget']
values=[b['development_pct'],b['development_share_of_spending_pct']]
fig,ax=plt.subplots(figsize=(9,3.6))
labels=['Of approved development budget','Of all county expenditure']
ax.barh(labels,values,color=['#5b2a86','#b5433b'])
for i,v in enumerate(values): ax.text(v+1,i,f'{v:.1f}%',va='center')
ax.set_xlim(0,100);ax.set_xlabel('Development expenditure / stated denominator (%)');ax.set_ylabel('Denominator')
ax.set_title('County development expenditure, FY 2023/24')
ax.spines[['top','right']].set_visible(False)
fig.tight_layout();plt.show()
Processing does not establish completion¶
PSC annual report FY 2023/24, Tables 5.2 and 5.10. Counts are from different Houses and may overlap. A processed question is not necessarily answered; a processed petition is not necessarily resolved.
for row in x['parliament']:
print(f"{row['metric']}: National Assembly {row['national_assembly']}, Senate {row['senate']}. {row['meaning']}")
Bills processed: National Assembly 128, Senate 60. Considered at various stages; not a count of laws enacted. Questions processed: National Assembly 525, Senate 173. Processing activity; not a count of answers delivered or issues resolved. Public petitions processed: National Assembly 44, Senate 21. Processing activity; not a count of satisfactory resolutions.
Takeaways¶
A civic-information product should show period, unit, denominator or stage, original source and interpretive limit beside every headline. This is a proposed reporting requirement, not a claim of tested civic impact.
Further questions need more evidence: project-completion records for services, bill-stage histories for legislation, and appropriate surveys for reasons behind turnout. Aggregate county data cannot establish individual voting behaviour.