Skip to content

Commit 531d19a

Browse files
authored
Merge branch 'gh-pages' into publish-interactive-data-visualization-dashboard
2 parents 34504fb + 31d944e commit 531d19a

File tree

78 files changed

+14963
-47
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+14963
-47
lines changed

Diff for: _data/ph_authors.yml

+13
Original file line numberDiff line numberDiff line change
@@ -3338,3 +3338,16 @@
33383338
bio:
33393339
en: |
33403340
Luling Huang is an Assistant Professor in the Department of Communication at Missouri Western State University.
3341+
3342+
- name: Igor Sosa Mayor
3343+
team: false
3344+
orcid: 0000-0003-3645-8454
3345+
bio:
3346+
en: |
3347+
Igor Sosa Mayor is a researcher of early modern period specialized in global history and religious history.
3348+
es: |
3349+
Igor Sosa Mayor es historiador de la Edad Moderna especializado en historia global e historia religiosa.
3350+
fr: |
3351+
Igor Sosa Mayor est historien de l'époque moderne, spécialisé en histoire globale et en histoire religieuse.
3352+
pt: |
3353+
Igor Sosa Mayor é historiador da Idade Moderna, especializado em história global e história religiosa.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import pandas as pd
2+
import dash
3+
from dash import dcc
4+
from dash import html
5+
from dash.dependencies import Input, Output
6+
import dash_bootstrap_components as dbc
7+
import plotly.express as px
8+
9+
lang_asrow = pd.read_csv("data_lang_asrow.csv", encoding="utf-8", index_col=[0])
10+
lang_asrow_noeng = lang_asrow.drop(['English'])
11+
lang_asrow_noeng.columns = lang_asrow_noeng.columns.astype(str)
12+
13+
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.LITERA])
14+
15+
app.layout = dbc.Container(
16+
[
17+
dbc.Row([ # row 1
18+
dbc.Col([html.H1('Top 10 Non-English Newspaper Languages in the U.S.')],
19+
className="text-center mt-3 mb-1")
20+
]
21+
),
22+
dbc.Row([ # row 2
23+
dbc.Col( # left column
24+
dbc.Row([
25+
dbc.Label("Select a decade:", className="fw-bold"),
26+
dcc.Dropdown(id='years_left',
27+
options=lang_asrow_noeng.columns,
28+
value='1690', clearable=False
29+
),
30+
dcc.Graph(id="graph_left")
31+
]),
32+
width=6
33+
),
34+
dbc.Col( # right column
35+
dbc.Row([
36+
dbc.Label("Select a decade:", className="fw-bold"),
37+
dcc.Dropdown(id='years_right',
38+
options=lang_asrow_noeng.columns,
39+
value='2020', clearable=False
40+
),
41+
dcc.Graph(id="graph_right")
42+
]),
43+
width=6,
44+
),
45+
])
46+
], fluid=True)
47+
48+
@app.callback(
49+
Output("graph_left", "figure"),
50+
Output("graph_right", "figure"),
51+
Input("years_left", "value"),
52+
Input("years_right", "value")
53+
)
54+
def generate_chart(year_left, year_right):
55+
df_left = lang_asrow_noeng[year_left].sort_values(ascending = False).reset_index().head(10)
56+
57+
df_left.loc[len(df_left)] = ["Others", lang_asrow_noeng[year_left].sort_values(ascending = False).reset_index().iloc[10:][year_left].sum()]
58+
59+
df_left = df_left.rename(columns={"index": "Language", year_left: "Count"})
60+
61+
fig_left = px.pie(df_left, values="Count", names="Language", hole=.6,
62+
color_discrete_sequence=px.colors.sequential.RdBu)
63+
64+
df_right = lang_asrow_noeng[year_right].sort_values(ascending = False).reset_index().head(10)
65+
66+
df_right.loc[len(df_right)] = ["Others", lang_asrow_noeng[year_right].sort_values(ascending = False).reset_index().iloc[10:][year_right].sum()]
67+
68+
df_right = df_right.rename(columns={"index": "Language", year_right: "Count"})
69+
70+
fig_right = px.pie(df_right, values="Count", names="Language", hole=.6,
71+
color_discrete_sequence=px.colors.sequential.RdBu)
72+
return fig_left, fig_right
73+
74+
if __name__ == '__main__':
75+
app.run(debug=True)
+121
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
This script creates the TV airtime dashboard in the Programming Historian Lesson - "Creating a Dashboard for Interactive Data Visualization with Dash in Python."
6+
"""
7+
8+
import requests
9+
import pandas as pd
10+
from io import StringIO
11+
import dash
12+
from dash import dcc
13+
from dash import html
14+
from dash.dependencies import Input, Output
15+
import dash_bootstrap_components as dbc
16+
import plotly.express as px
17+
18+
def to_df(queryurl):
19+
response = requests.get(queryurl)
20+
content_text = StringIO(response.content.decode('utf-8'))
21+
df = pd.read_csv(content_text)
22+
return df
23+
24+
start_day_str = '20211228'
25+
last_day_str = '20221231'
26+
27+
query_url_ukr = f"https://api.gdeltproject.org/api/v2/tv/tv?query=(ukraine%20OR%20ukrainian%20OR%20zelenskyy%20OR%20zelensky%20OR%20kiev%20OR%20kyiv)%20market:%22National%22&mode=timelinevol&format=html&datanorm=perc&format=csv&timelinesmooth=5&datacomb=sep&timezoom=yes&STARTDATETIME={start_day_str}120000&ENDDATETIME={last_day_str}120000"
28+
query_url_rus = f"https://api.gdeltproject.org/api/v2/tv/tv?query=(kremlin%20OR%20russia%20OR%20putin%20OR%20moscow%20OR%20russian)%20market:%22National%22&mode=timelinevol&format=html&datanorm=perc&format=csv&timelinesmooth=5&datacomb=sep&timezoom=yes&STARTDATETIME={start_day_str}120000&ENDDATETIME={last_day_str}120000"
29+
30+
df_ukr = to_df(query_url_ukr)
31+
df_rus = to_df(query_url_rus)
32+
33+
# Rename the first column to something shorter for convenience
34+
df_ukr = df_ukr.rename(columns={df_ukr.columns[0]: "date_col"})
35+
df_rus = df_rus.rename(columns={df_rus.columns[0]: "date_col"})
36+
37+
# Transform the first column to the datetime format
38+
df_ukr['date_col'] = pd.to_datetime(df_ukr['date_col'])
39+
df_rus['date_col'] = pd.to_datetime(df_rus['date_col'])
40+
41+
# Select three stations for comparison
42+
# CNN: Presumed to represent an ideological middle ground
43+
# FOXNEWS: Presumed to represent the ideological conservative
44+
# MSNBC: Presumed to represent the ideological liberal
45+
df_rus = df_rus[[x in ['CNN', 'FOXNEWS', 'MSNBC'] for x in df_rus.Series]]
46+
df_ukr = df_ukr[[x in ['CNN', 'FOXNEWS', 'MSNBC'] for x in df_ukr.Series]]
47+
48+
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.LITERA]) # for now use JupyterDash in a colab environment
49+
server = app.server
50+
51+
app.layout = dbc.Container(
52+
[ dbc.Row([ # row 1
53+
dbc.Col([html.H1('US National Television News Coverage of the War in Ukraine')],
54+
className="text-center mt-3 mb-1")
55+
]
56+
),
57+
dbc.Row([ # row 2
58+
dbc.Label("Select a date range:", className="fw-bold")
59+
]),
60+
61+
dbc.Row([ # row 3
62+
dcc.DatePickerRange(
63+
id='date-range',
64+
min_date_allowed=df_ukr['date_col'].min().date(),
65+
max_date_allowed=df_ukr['date_col'].max().date(),
66+
initial_visible_month=df_ukr['date_col'].min().date(),
67+
start_date=df_ukr['date_col'].min().date(),
68+
end_date=df_ukr['date_col'].max().date()
69+
)
70+
]),
71+
72+
dbc.Row([ # row 4
73+
dbc.Col(dcc.Graph(id='line-graph-ukr'),
74+
)
75+
]),
76+
77+
dbc.Row([ # row 5
78+
dbc.Col(dcc.Graph(id='line-graph-rus'),
79+
)
80+
])
81+
82+
])
83+
84+
# callback decorator
85+
@app.callback(
86+
Output('line-graph-ukr', 'figure'),
87+
Output('line-graph-rus', 'figure'),
88+
Input('date-range', 'start_date'),
89+
Input('date-range', 'end_date')
90+
)
91+
92+
# callback function
93+
def update_output(start_date, end_date):
94+
# filter dataframes based on updated data range
95+
mask_ukr = (df_ukr['date_col'] >= start_date) & (df_ukr['date_col'] <= end_date)
96+
mask_rus = (df_rus['date_col'] >= start_date) & (df_rus['date_col'] <= end_date)
97+
df_ukr_filtered = df_ukr.loc[mask_ukr]
98+
df_rus_filtered = df_rus.loc[mask_rus]
99+
100+
# create line graphs based on filtered dataframes
101+
line_fig_ukr = px.line(df_ukr_filtered, x="date_col", y="Value",
102+
color='Series', title="Coverage of Ukrainian Keywords")
103+
line_fig_rus = px.line(df_rus_filtered, x='date_col', y='Value',
104+
color='Series', title="Coverage of Russian Keywords")
105+
106+
# set x-axis title and y-axis title in line graphs
107+
line_fig_ukr.update_layout(
108+
xaxis_title='Date',
109+
yaxis_title='Percentage of Airtime')
110+
line_fig_rus.update_layout(
111+
xaxis_title='Date',
112+
yaxis_title='Percentage of Airtime')
113+
114+
# set label format on y-axis in line graphs
115+
line_fig_ukr.update_xaxes(tickformat="%b %d<br>%Y")
116+
line_fig_rus.update_xaxes(tickformat="%b %d<br>%Y")
117+
118+
return line_fig_ukr, line_fig_rus
119+
120+
if __name__ == '__main__':
121+
app.run(debug=True)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
,1690,1700,1710,1720,1730,1740,1750,1760,1770,1780,1790,1800,1810,1820,1830,1840,1850,1860,1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010,2020
2+
Albanian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,3,3,4,4,4,4,4,5,3,3,3
3+
Amharic,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1
4+
Arabic,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,34,39,44,42,43,44,44,43,45,52,63,58,58,58
5+
Armenian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,11,15,22,17,16,18,18,18,24,24,14,15,15
6+
Asue Awyu,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
7+
Austronesian (Other),0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,3,2,3,2,1,1,1
8+
Basque,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,2,2,2,2,2,2,2,2,2,2,0,0,0
9+
Belarussian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,4,4,4,4,4,2,2,2
10+
Bengali,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,9,11,11,11,11
11+
Bosnian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2
12+
Bulgarian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4,6,6,9,11,11,10,8,9,11,19,18,18
13+
Burmese,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
14+
Cebuano,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,0,0,0
15+
Central Huasteca Nahuatl,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
16+
Chechen,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
17+
Cherokee,0,0,0,0,0,0,0,0,0,0,1,1,1,4,2,3,4,2,3,3,5,2,2,0,0,1,1,2,2,2,3,1,1,1
18+
Chinese,4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,9,9,15,14,53,53,54,68,72,72,76,79,99,128,144,121,126,125
19+
Choctaw,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,3,7,8,7,5,4,4,4,4,6,6,6,6,1,1,1
20+
Cree,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,1,1,1,1,1,1,1,1,0,0,0
21+
Creek,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,0,0
22+
Creoles and Pidgins,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,3,3,3,3
23+
"Creoles and Pidgins, French-based (Other)",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,3,3,3,3
24+
Croatian,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,23,34,42,45,43,41,39,34,35,32,32,15,15,15
25+
Czech,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,7,15,32,41,78,93,110,95,84,79,77,71,68,67,64,13,13,13
26+
Dakota,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,3,3,5,5,5,5,5,2,2,2,2,2,3,0,0,0
27+
Danish,0,0,0,0,0,0,0,1,1,1,3,6,6,4,4,5,4,7,22,39,53,46,45,47,38,36,34,29,26,26,26,8,8,8
28+
Dutch,1,1,1,1,1,1,1,1,1,2,4,4,4,4,4,6,13,18,20,22,27,27,30,25,24,21,16,16,16,16,16,8,8,7
29+
English,1586,1584,1588,1601,1609,1624,1648,1685,1768,1976,6814,7177,7794,9490,12441,15338,19166,23676,31490,40516,51843,45353,45643,44690,44556,44438,44074,46332,49181,48945,46306,20144,19747,19474
30+
Esperanto,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0
31+
Estonian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,3,3,3,3,3,3,2,2,2
32+
Finnish,3,3,3,3,3,3,3,3,3,3,17,17,17,17,17,17,17,17,21,25,40,46,51,55,57,55,55,50,47,46,49,20,18,18
33+
French,7,7,7,7,7,7,7,7,8,18,45,53,52,70,95,134,186,208,207,221,241,195,192,192,188,185,171,171,171,166,166,41,40,40
34+
German,31,31,31,31,34,35,37,36,40,42,188,206,219,236,289,370,571,733,1031,1055,1182,969,927,665,577,621,444,419,410,392,380,96,94,93
35+
Germanic,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,4,8,4,4,4,5,4,4,4,4,4,4,2,2,2
36+
Greek,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,19,29,36,40,40,41,42,46,53,47,45,28,28,28
37+
Gujarati,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2
38+
Hawaiian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,6,9,13,15,19,38,20,25,12,12,9,8,8,9,9,8,5,5,5
39+
Hebrew,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,3,6,6,8,11,22,23,18,24,16,14,14,14,18,20,19,15,15,15
40+
Hindi,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0
41+
Hmong,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,1,1
42+
Hungarian,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,22,34,47,60,59,56,53,53,50,39,38,24,24,24
43+
Icelandic,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1
44+
Iloko,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,8,16,20,15,15,14,14,13,4,4,4
45+
Indonesian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,2,2,2,2,2,2
46+
Inupiaq,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
47+
Iranian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2
48+
Irish,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0
49+
Italian,18,18,18,18,18,18,18,18,18,18,21,21,21,21,21,24,28,31,36,52,105,169,225,247,248,237,210,203,190,179,168,50,50,49
50+
Japanese,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,31,43,55,53,61,101,45,41,39,43,41,27,24,23
51+
Khmer,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1
52+
Korean,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,33,37,37,37,38,41,40,40,53,60,59,55,55,53
53+
Kurdish,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
54+
Ladino,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,8,6,6,4,4,4,4,4,1,1,1
55+
Latvian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,5,9,7,6,7,7,7,8,6,6,3,3,3
56+
Lithuanian,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,8,17,19,38,40,38,40,40,39,39,40,38,25,24,24
57+
Macedonian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2
58+
Malayalam,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,3,6,6,6,6
59+
Marathi,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2,2,2,2
60+
Mohawk,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
61+
Multiple,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,1,1
62+
Navajo,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,1,1,1,1,1,1,1
63+
Negidal,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
64+
No Linguistic Content,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
65+
Northwest Alaska Inupiatun,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
66+
Norwegian,1,1,1,1,1,1,1,1,1,1,7,7,7,7,7,10,16,25,39,73,104,74,69,60,52,43,36,36,33,32,30,12,10,9
67+
Panjabi,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2
68+
Persian,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,10,10,10,10,10,11,11,11,15,16,24,27,28,28
69+
Polish,7,7,7,7,7,7,7,7,7,7,14,14,14,14,14,14,14,16,18,36,107,130,154,156,168,164,151,149,145,140,141,62,61,61
70+
Portuguese,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,6,18,18,26,33,30,24,22,27,31,36,32,16,16,16
71+
Romanian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,11,14,14,15,14,14,15,12,13,15,14,13,13
72+
Russian,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,13,13,19,15,15,34,45,69,87,98,94,89,90,96,105,131,98,102,101
73+
Samaritan Aramaic,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
74+
Samoan,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,5,5,7,6,6,6,6
75+
Serbian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,13,16,15,16,18,17,14,15,15,17,10,10,10
76+
Slovak,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,15,26,35,40,35,36,27,27,24,22,22,10,11,11
77+
Slovenian,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,16,24,28,23,23,21,18,16,16,16,7,7,7
78+
Sorbian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1
79+
Spanish,24,24,24,24,24,24,24,24,24,24,56,61,64,68,73,91,113,165,226,312,596,578,634,689,742,782,832,1119,1460,1586,1607,1008,996,990
80+
Swedish,6,6,6,6,6,6,6,6,6,6,31,31,31,31,31,31,36,51,93,138,179,180,163,157,152,139,134,131,128,127,129,26,25,25
81+
Syriac,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,3,5,8,6,3,3,3,3,3,3,3,1,1,1
82+
Tagalog,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,5,9,11,12,12,11,11,15,15,7,7,7
83+
Tajik,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0
84+
Tamil,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
85+
Thai,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,5,5,6,6,5,5,5
86+
Turkish,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,6,7,6,4,3
87+
Ukrainian,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,3,13,17,29,37,35,37,43,39,39,38,40,25,23,21
88+
Urdu,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,6,7,10,10,9,9
89+
Uzbek,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0
90+
Vietnamese,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,14,25,26,27,26,25
91+
Welsh,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,5,3,6,8,10,3,3,3,3,3,3,3,3,3,3,2,1,1
92+
Yiddish,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,6,23,54,84,113,144,113,107,97,86,90,87,84,33,33,32
93+
Yupik,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0

0 commit comments

Comments
 (0)