Optional AI · bring your own key
Ask the data in plain English
Ask about the database behind this site. A language model you choose turns the question into SQL, the site checks and runs that SQL read-only, and the model explains the result, pointing at the rows it used. Every step is shown, labelled and logged in your browser.
1. Your model writes SQL
Your browser sends the question and the documented schema to your provider with your key. The model returns one query, or declines.
2. The server checks and runs it
Only the SQL reaches this site. A validator allows one SELECT on documented tables; SQLite runs it read-only, at most 200 rows, 2.5 s.
3. Your model explains the rows
Up to 30 returned rows go back to your model, which must cite them as [r1], [r2]. Citations are checked against the table.
Ask
Your question
Write SQL yourself (no AI, no key needed)
The same validator and read-only runner the AI path uses. Tables and columns are listed below.
Governance
What goes where
The site has no AI budget and no server-side AI: it only lends your model a validated, read-only view of public aggregates. The full statement, including what the AI never does, is on the methods page.
Sent to your provider
Your question exactly as you type it (so leave out anything personal), the table and column descriptions below, the generated SQL and up to 30 result rows of public aggregate data.
Sent to this site
Only the SQL text. The endpoint refuses requests that carry an API key header or any field besides the SQL, and logs nothing.
Kept in your browser
Your key (this tab by default) and the audit log: one record per question (both model calls), with the model, SQL, validator verdict, row count, latency, token usage and your decision.
Schema
What the model is told about the database
These descriptions are the model's only knowledge of the data, and the validator's allow-list: a query may use these 19 tables and their columns, nothing else.
facts · Facts
Headline numbers quoted in the team report, each with its source section.
keytext · identifier, e.g. tweets_processed, toots_harvested, vic_sa2_income_keptvaluereal · the numberunittext · unit of value, e.g. tweets, GB, SA2ssourcetext · where the number comes from
meta · Build metadata
Editions of the boundaries and how the database was built.
keytext · e.g. twitter_period, sa2_editionvaluetext · value
summary_text · Original summaries
The paragraphs the 2023 dashboard showed beside each chart (written by the team).
sourcetext · 'twitter', 'sudo' or 'mastodon'datasettext · dataset the paragraph describesparagraphinteger · paragraph numbertexttext · paragraph text
sentiment_histogram · Sentiment histograms (2023 dashboard)
Counts of 1-9 sentiment scores for Twitter and the three Mastodon servers, as plotted in 2023. Twitter covers geotagged tweets Australia-wide, Feb-Jul 2022.
sourcetext · 'twitter', 'mastodon.social', 'mastodon.au' or 'tictoc.social'topictext · 'all', 'income' or 'crime' (crime only for twitter)scoreinteger · sentiment score 1 (extremely negative) to 9 (extremely positive); 5 is neutralcountinteger · number of posts with this score
twitter_sal_sentiment · Twitter sentiment by suburb (SAL)
CouchDB MapReduce _stats per suburb and topic (all tweets, income keywords, crime keywords), Feb-Jul 2022, every Australian state. Rows are keyed by SAL code: join regions_sal for names.
sal_codetext · ABS 2021 suburb/locality code (join regions_sal.sal_code)topictext · 'all', 'income' or 'crime'statetext · state name, e.g. 'Victoria', 'New South Wales'tweet_countinteger · tweets in this suburb and topicscore_suminteger · sum of the tweets' 1-9 scoresscore_mininteger · lowest scorescore_maxinteger · highest scorescore_sumsqrinteger · sum of squared scoresavg_scorereal · score_sum / tweet_count rounded to 2 decimals (the 2023 dashboard's value)
mastodon_servers · Mastodon servers
The three servers the harvesters followed.
servertext · 'mastodon.social', 'mastodon.au' or 'tictoc.social'labeltext · display nameurltext · server URLdescriptiontext · short description
mastodon_rescored_histogram · mastodon.social re-scored histogram
The surviving week of mastodon.social toots (1-9 May 2023) re-scored with the original pipeline (aggregates only).
servertext · always 'mastodon.social'topictext · 'all', 'income' or 'crime'scoreinteger · sentiment score 1-9countinteger · toots with this score
mastodon_hourly · mastodon.social by hour
Re-scored mastodon.social toots per UTC hour, 1-9 May 2023, with score sums and 1-9 bucket counts.
servertext · always 'mastodon.social'hour_utctext · hour start in UTC, ISO format e.g. '2023-05-01T13:00:00Z'tootsinteger · toots in the hourscore_suminteger · sum of 1-9 scores (average = score_sum / toots)income_tootsinteger · toots matching the income keywordsincome_score_suminteger · sum of scores of income tootscrime_tootsinteger · toots matching the crime keywordsb1integer · toots scored 1 on the 1-9 scaleb2integer · toots scored 2 on the 1-9 scaleb3integer · toots scored 3 on the 1-9 scaleb4integer · toots scored 4 on the 1-9 scaleb5integer · toots scored 5 on the 1-9 scaleb6integer · toots scored 6 on the 1-9 scaleb7integer · toots scored 7 on the 1-9 scaleb8integer · toots scored 8 on the 1-9 scaleb9integer · toots scored 9 on the 1-9 scale
mastodon_language · mastodon.social by language
Re-scored mastodon.social toots (1-9 May 2023) per declared language, with score sums and bucket counts.
servertext · always 'mastodon.social'langtext · ISO 639-1 language code declared by the toot, e.g. 'en', 'de', 'ja'; 'und' = undeterminedtootsinteger · toots in this languagescore_suminteger · sum of 1-9 scoresincome_tootsinteger · toots matching the income keywordsb1integer · toots scored 1 on the 1-9 scaleb2integer · toots scored 2 on the 1-9 scaleb3integer · toots scored 3 on the 1-9 scaleb4integer · toots scored 4 on the 1-9 scaleb5integer · toots scored 5 on the 1-9 scaleb6integer · toots scored 6 on the 1-9 scaleb7integer · toots scored 7 on the 1-9 scaleb8integer · toots scored 8 on the 1-9 scaleb9integer · toots scored 9 on the 1-9 scale
regions_sal · Suburbs and localities (SAL 2021)
ABS suburbs and localities that had tweets, every state, with a representative point and (Victoria only) the SA2 and LGA they fall in.
sal_codetext · ABS 2021 SAL codenametext · suburb name, e.g. 'Melbourne', 'Geelong', 'Ballarat Central'statetext · state name, e.g. 'Victoria'area_km2real · area in square kilometreslatreal · latitude of a representative pointlonreal · longitude of a representative pointsa2_code16text · 2016 SA2 containing the point (Victoria only; join regions_sa2.sa2_code)lga_code19text · 2019 LGA containing the point (Victoria only; join regions_lga.lga_code)on_original_mapinteger · 1 if drawn on the 2023 Victorian Twitter map
regions_sa2 · Victorian SA2s (2016)
ABS Statistical Area Level 2 regions in Victoria.
sa2_codetext · 2016 SA2 codenametext · SA2 namesa3_nametext · parent SA3sa4_nametext · parent SA4gcc_codetext · Greater Capital City code: '2GMEL' Greater Melbourne, '2RVIC' rest of Victoriaarea_km2real · area in square kilometreslatreal · latitude of a representative pointlonreal · longitude of a representative point
regions_lga · Victorian LGAs (2019)
ABS Local Government Areas in Victoria.
lga_codetext · 2019 LGA codenametext · LGA name with type suffix, e.g. 'Ballarat (C)', 'Alpine (S)'area_km2real · area in square kilometreslatreal · latitude of a representative pointlonreal · longitude of a representative point
income_sa2 · Personal income by SA2
SUDO / ABS personal income 2015-16 (mean, median, sum, median age of earners) for every Australian SA2.
sa2_codetext · 2016 SA2 codesa2_nametext · SA2 namesa3_nametext · parent SA3sa4_nametext · parent SA4gcc_codetext · Greater Capital City codegcc_nametext · Greater Capital City name, e.g. 'Greater Melbourne'statetext · state namemean_audreal · mean personal income, AUDmedian_audreal · median personal income, AUDsum_audreal · total personal income, AUDmedian_agereal · median age of earnerson_national_mapinteger · 1 if on the 2023 national income mapvic_iqr_keptinteger · Victoria only: 1 if kept by the team's IQR outlier rule (420 of 457), else 0; NULL outside Victoria
income_gcc · Personal income by capital city area
The SA2 rows grouped by Greater Capital City Statistical Area, as in the original summary.
gcc_codetext · e.g. '1GSYD', '2GMEL', '8ACTE', '2RVIC'gcc_nametext · e.g. 'Greater Sydney', 'Rest of Vic.'mean_audreal · mean of the SA2 mean incomes, AUDmedian_audreal · median of the SA2 median incomes, AUDsum_audreal · total income, AUDmedian_agereal · mean of the SA2 median agessa2_countinteger · number of SA2s
jobs_income_indicators · Jobs and income by industry
ABS Jobs in Australia 2018-19 indicators (mean, sd and median across SA2s) from the original bar chart.
indicatortext · machine name of the indicatorlabeltext · readable label, e.g. 'Health care social assistance - median income per job'kindtext · 'income_aud' (median income per job, AUD) or 'jobs_000' (thousands of jobs)meanreal · mean across SA2sstdreal · standard deviation across SA2smedianreal · median across SA2s
crime_lga · Recorded offences by LGA
Victorian Crime Statistics Agency offence divisions per LGA (reference year 2019).
lga_codetext · LGA code (join regions_lga.lga_code)lga_nametext · LGA name with suffix, e.g. 'Melbourne (C)', 'Greater Geelong (C)'against_personinteger · offences against the personproperty_deceptioninteger · property and deception offencesdruginteger · drug offencespublic_orderinteger · public order and security offencesjusticeinteger · justice procedures offencesotherinteger · other offencesreference_periodinteger · year, always 2019iqr_keptinteger · 1 if kept by the team's IQR outlier rule (72 of 79)totalinteger · all recorded offences
scenario_income_sa2 · Scenario 1: income vs sentiment
Median income joined with suburb tweet sentiment pooled to each Victorian SA2 (revival analysis). avg_* are NULL where an SA2 had no tweets.
sa2_codetext · 2016 SA2 codesa2_nametext · SA2 namemedian_audreal · median personal income, AUDmean_audreal · mean personal income, AUDvic_iqr_keptinteger · 1 if kept by the team's IQR outlier ruletweets_allinteger · geotagged tweets pooled from the SA2's suburbsavg_allreal · average 1-9 score of those tweetssal_countinteger · suburbs with tweets in the SA2tweets_incomeinteger · income-related tweetsavg_incomereal · average score of income-related tweets
scenario_crime_lga · Scenario 2: crime vs sentiment
Offence totals joined with suburb tweet sentiment pooled to each Victorian LGA (revival analysis).
lga_codetext · LGA codelga_nametext · LGA name with suffixtotalinteger · recorded offences, 2019iqr_keptinteger · 1 if kept by the team's IQR outlier ruletweets_allinteger · geotagged tweets pooled from the LGA's suburbsavg_allreal · average 1-9 score of those tweetssal_countinteger · suburbs with tweets in the LGAtweets_crimeinteger · crime-related tweetsavg_crimereal · average score of crime-related tweets
scenario_correlations · Scenario correlations
Pearson, Spearman and least-squares fits at several minimum-tweet thresholds (computed with scipy).
scenariotext · 'income' or 'crime'unittext · 'sa2', 'lga' or 'sal'x_metrictext · 'median_aud', 'total' or 'log10_tweets'y_metrictext · 'avg_income', 'avg_all', 'avg_crime' or 'avg_raw'weight_metrictext · column used for the minimum-tweet thresholdmin_tweetsinteger · minimum tweets per region: 1, 5, 10 or 30ninteger · regions in the fitpearson_rreal · Pearson correlationpearson_preal · two-sided p-value of pearson_rspearman_rhoreal · Spearman rank correlationspearman_preal · two-sided p-value of spearman_rhoslopereal · least-squares slopeinterceptreal · least-squares interceptr2real · R squared
Browse the same tables, with search and CSV export, on the records pages.