Spaces:
Running
Running
David Pomerenke
commited on
Commit
Β·
92d8154
1
Parent(s):
73c776c
Fix world map and apply filters for it
Browse files- evals/backend.py +2 -2
- frontend/src/App.js +1 -1
- frontend/src/components/LanguageTable.js +2 -2
- frontend/src/components/WorldMap.js +19 -15
evals/backend.py
CHANGED
|
@@ -104,11 +104,11 @@ async def data(request: Request):
|
|
| 104 |
# lang_results = pd.merge(languages, lang_results, on="bcp_47", how="outer")
|
| 105 |
language_table = make_language_table(df, languages)
|
| 106 |
datasets_df = pd.read_json("data/datasets.json")
|
| 107 |
-
countries = make_country_table(language_table)
|
| 108 |
if selected_languages:
|
| 109 |
-
# the filtering is only applied for the model table
|
| 110 |
df = df[df["bcp_47"].isin(lang["bcp_47"] for lang in selected_languages)]
|
| 111 |
model_table = make_model_table(df, models)
|
|
|
|
| 112 |
all_tables = {
|
| 113 |
"model_table": serialize(model_table),
|
| 114 |
"language_table": serialize(language_table),
|
|
|
|
| 104 |
# lang_results = pd.merge(languages, lang_results, on="bcp_47", how="outer")
|
| 105 |
language_table = make_language_table(df, languages)
|
| 106 |
datasets_df = pd.read_json("data/datasets.json")
|
|
|
|
| 107 |
if selected_languages:
|
| 108 |
+
# the filtering is only applied for the model table and the country data
|
| 109 |
df = df[df["bcp_47"].isin(lang["bcp_47"] for lang in selected_languages)]
|
| 110 |
model_table = make_model_table(df, models)
|
| 111 |
+
countries = make_country_table(make_language_table(df, languages))
|
| 112 |
all_tables = {
|
| 113 |
"model_table": serialize(model_table),
|
| 114 |
"language_table": serialize(language_table),
|
frontend/src/App.js
CHANGED
|
@@ -125,7 +125,7 @@ function App () {
|
|
| 125 |
>
|
| 126 |
<Carousel
|
| 127 |
value={[
|
| 128 |
-
<WorldMap data={data} />,
|
| 129 |
<LanguagePlot data={data} />
|
| 130 |
]}
|
| 131 |
numScroll={1}
|
|
|
|
| 125 |
>
|
| 126 |
<Carousel
|
| 127 |
value={[
|
| 128 |
+
<WorldMap data={data.countries} />,
|
| 129 |
<LanguagePlot data={data} />
|
| 130 |
]}
|
| 131 |
numScroll={1}
|
frontend/src/components/LanguageTable.js
CHANGED
|
@@ -134,7 +134,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
|
|
| 134 |
selection={selectedLanguages}
|
| 135 |
onSelectionChange={e => setSelectedLanguages(e.value)}
|
| 136 |
frozenValue={selectedLanguages}
|
| 137 |
-
virtualScrollerOptions={{ itemSize:
|
| 138 |
scrollable
|
| 139 |
scrollHeight='600px'
|
| 140 |
id='language-table'
|
|
@@ -145,7 +145,7 @@ const LanguageTable = ({ data, selectedLanguages, setSelectedLanguages }) => {
|
|
| 145 |
field='language_name'
|
| 146 |
header='Language'
|
| 147 |
body={languageBodyTemplate}
|
| 148 |
-
style={{ minWidth: '
|
| 149 |
frozen
|
| 150 |
/>
|
| 151 |
<Column
|
|
|
|
| 134 |
selection={selectedLanguages}
|
| 135 |
onSelectionChange={e => setSelectedLanguages(e.value)}
|
| 136 |
frozenValue={selectedLanguages}
|
| 137 |
+
virtualScrollerOptions={{ itemSize: 100 }}
|
| 138 |
scrollable
|
| 139 |
scrollHeight='600px'
|
| 140 |
id='language-table'
|
|
|
|
| 145 |
field='language_name'
|
| 146 |
header='Language'
|
| 147 |
body={languageBodyTemplate}
|
| 148 |
+
style={{ minWidth: '10rem' }}
|
| 149 |
frozen
|
| 150 |
/>
|
| 151 |
<Column
|
frontend/src/components/WorldMap.js
CHANGED
|
@@ -8,16 +8,16 @@ const smoothProgressBar = fraction => {
|
|
| 8 |
const filledUnits = Math.round(fraction * totalUnits)
|
| 9 |
const fullBlocks = Math.floor(filledUnits / 8)
|
| 10 |
const remainder = filledUnits % 8
|
| 11 |
-
return (
|
|
|
|
|
|
|
| 12 |
}
|
| 13 |
|
| 14 |
const makeTitle = data => d => {
|
| 15 |
-
const languages = data.
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
const pop = languages
|
| 19 |
-
?.map(a => a.population)
|
| 20 |
-
.reduce((prev, a) => prev + a, 0)
|
| 21 |
const langstring =
|
| 22 |
languages
|
| 23 |
?.slice(0, 10)
|
|
@@ -37,16 +37,20 @@ const WorldMap = ({ data }) => {
|
|
| 37 |
}, [])
|
| 38 |
|
| 39 |
useEffect(() => {
|
| 40 |
-
|
| 41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
const plot = Plot.plot({
|
| 43 |
width: 750,
|
| 44 |
height: 500,
|
| 45 |
projection: 'equal-earth',
|
| 46 |
marks: [
|
| 47 |
-
Plot.geo(
|
| 48 |
-
fill: d =>
|
| 49 |
-
title: makeTitle(
|
| 50 |
tip: true
|
| 51 |
})
|
| 52 |
],
|
|
@@ -55,7 +59,7 @@ const WorldMap = ({ data }) => {
|
|
| 55 |
unknown: 'gray',
|
| 56 |
label: 'Score',
|
| 57 |
legend: true,
|
| 58 |
-
domain: [0, 0.
|
| 59 |
},
|
| 60 |
style: {
|
| 61 |
fontFamily: 'monospace'
|
|
@@ -63,7 +67,7 @@ const WorldMap = ({ data }) => {
|
|
| 63 |
})
|
| 64 |
containerRef.current.append(plot)
|
| 65 |
return () => plot.remove()
|
| 66 |
-
}, [mapData])
|
| 67 |
|
| 68 |
return (
|
| 69 |
<div
|
|
@@ -73,7 +77,7 @@ const WorldMap = ({ data }) => {
|
|
| 73 |
height: '100%',
|
| 74 |
display: 'flex',
|
| 75 |
alignItems: 'center',
|
| 76 |
-
justifyContent: 'center'
|
| 77 |
}}
|
| 78 |
/>
|
| 79 |
)
|
|
|
|
| 8 |
const filledUnits = Math.round(fraction * totalUnits)
|
| 9 |
const fullBlocks = Math.floor(filledUnits / 8)
|
| 10 |
const remainder = filledUnits % 8
|
| 11 |
+
return (
|
| 12 |
+
'β'.repeat(fullBlocks) + (remainder > 0 ? blocks[remainder - 1] : '') || 'β'
|
| 13 |
+
)
|
| 14 |
}
|
| 15 |
|
| 16 |
const makeTitle = data => d => {
|
| 17 |
+
const languages = data[d.properties?.ISO_A2_EH]?.languages.toSorted(
|
| 18 |
+
(a, b) => b.population - a.population
|
| 19 |
+
)
|
| 20 |
+
const pop = languages?.map(a => a.population).reduce((prev, a) => prev + a, 0)
|
|
|
|
|
|
|
| 21 |
const langstring =
|
| 22 |
languages
|
| 23 |
?.slice(0, 10)
|
|
|
|
| 37 |
}, [])
|
| 38 |
|
| 39 |
useEffect(() => {
|
| 40 |
+
console.log('countries', data)
|
| 41 |
+
if (mapData === undefined || data === undefined) return
|
| 42 |
+
const countriesDict = data.reduce((acc, country) => {
|
| 43 |
+
acc[country.iso2] = country
|
| 44 |
+
return acc
|
| 45 |
+
}, {})
|
| 46 |
const plot = Plot.plot({
|
| 47 |
width: 750,
|
| 48 |
height: 500,
|
| 49 |
projection: 'equal-earth',
|
| 50 |
marks: [
|
| 51 |
+
Plot.geo(mapData, {
|
| 52 |
+
fill: d => countriesDict[d.properties?.ISO_A2_EH]?.score,
|
| 53 |
+
title: makeTitle(countriesDict),
|
| 54 |
tip: true
|
| 55 |
})
|
| 56 |
],
|
|
|
|
| 59 |
unknown: 'gray',
|
| 60 |
label: 'Score',
|
| 61 |
legend: true,
|
| 62 |
+
domain: [0, 0.7]
|
| 63 |
},
|
| 64 |
style: {
|
| 65 |
fontFamily: 'monospace'
|
|
|
|
| 67 |
})
|
| 68 |
containerRef.current.append(plot)
|
| 69 |
return () => plot.remove()
|
| 70 |
+
}, [mapData, data])
|
| 71 |
|
| 72 |
return (
|
| 73 |
<div
|
|
|
|
| 77 |
height: '100%',
|
| 78 |
display: 'flex',
|
| 79 |
alignItems: 'center',
|
| 80 |
+
justifyContent: 'center'
|
| 81 |
}}
|
| 82 |
/>
|
| 83 |
)
|