mirror of
https://github.com/apache/superset.git
synced 2024-09-12 16:49:40 -04:00
Improvments to load_examples
This commit is contained in:
parent
2b69912c46
commit
2b0c550a0b
@ -1,14 +1,11 @@
|
||||
from datetime import datetime
|
||||
import csv
|
||||
import gzip
|
||||
import json
|
||||
import os
|
||||
|
||||
from flask.ext.appbuilder import Base
|
||||
import pandas as pd
|
||||
from sqlalchemy import Column, String, DateTime, Table, Integer
|
||||
from sqlalchemy import String, DateTime
|
||||
|
||||
from panoramix import app, db, models
|
||||
from panoramix import app, db, models, utils
|
||||
|
||||
config = app.config
|
||||
|
||||
@ -29,31 +26,6 @@ def get_or_create_db(session):
|
||||
|
||||
|
||||
def load_world_bank_health_n_pop():
|
||||
"""
|
||||
Details on how the data was loaded from
|
||||
http://data.worldbank.org/data-catalog/health-nutrition-and-population-statistics
|
||||
DIR = ""
|
||||
df_country = pd.read_csv(DIR + '/HNP_Country.csv')
|
||||
df_country.columns = ['country_code'] + list(df_country.columns[1:])
|
||||
df_country = df_country[['country_code', 'Region']]
|
||||
df_country.columns = ['country_code', 'region']
|
||||
|
||||
df = pd.read_csv(DIR + '/HNP_Data.csv')
|
||||
del df['Unnamed: 60']
|
||||
df.columns = ['country_name', 'country_code'] + list(df.columns[2:])
|
||||
ndf = df.merge(df_country, how='inner')
|
||||
|
||||
dims = ('country_name', 'country_code', 'region')
|
||||
vv = [str(i) for i in range(1960, 2015)]
|
||||
mdf = pd.melt(ndf, id_vars=dims + ('Indicator Code',), value_vars=vv)
|
||||
mdf['year'] = mdf.variable + '-01-01'
|
||||
dims = dims + ('year',)
|
||||
|
||||
pdf = mdf.pivot_table(values='value', columns='Indicator Code', index=dims)
|
||||
pdf = pdf.reset_index()
|
||||
pdf.to_csv(DIR + '/countries.csv')
|
||||
pdf.to_json(DIR + '/countries.json', orient='records')
|
||||
"""
|
||||
tbl = 'wb_health_population'
|
||||
with gzip.open(os.path.join(DATA_FOLDER, 'countries.json.gz')) as f:
|
||||
pdf = pd.read_json(f)
|
||||
@ -75,10 +47,10 @@ def load_world_bank_health_n_pop():
|
||||
obj = db.session.query(TBL).filter_by(table_name=tbl).first()
|
||||
if not obj:
|
||||
obj = TBL(table_name='wb_health_population')
|
||||
obj.description = utils.readfile(os.path.join(DATA_FOLDER, 'countries.md'))
|
||||
obj.main_dttm_col = 'year'
|
||||
obj.database = get_or_create_db(db.session)
|
||||
models.Table
|
||||
db.session.add(obj)
|
||||
db.session.merge(obj)
|
||||
db.session.commit()
|
||||
obj.fetch_metadata()
|
||||
|
||||
@ -112,13 +84,13 @@ def load_birth_names():
|
||||
obj.main_dttm_col = 'ds'
|
||||
obj.database = get_or_create_db(db.session)
|
||||
models.Table
|
||||
db.session.add(obj)
|
||||
db.session.merge(obj)
|
||||
db.session.commit()
|
||||
obj.fetch_metadata()
|
||||
tbl = obj
|
||||
|
||||
print("Creating some slices")
|
||||
def get_slice_json(slice_name, **kwargs):
|
||||
def get_slice_json(**kwargs):
|
||||
defaults = {
|
||||
"compare_lag": "10",
|
||||
"compare_suffix": "o10Y",
|
||||
@ -135,7 +107,6 @@ def load_birth_names():
|
||||
"metrics": ["sum__num"],
|
||||
"row_limit": config.get("ROW_LIMIT"),
|
||||
"since": "100 years",
|
||||
"slice_name": slice_name,
|
||||
"until": "now",
|
||||
"viz_type": "table",
|
||||
"where": "",
|
||||
@ -147,205 +118,191 @@ def load_birth_names():
|
||||
Slice = models.Slice
|
||||
slices = []
|
||||
|
||||
slice_name = "Girls"
|
||||
slc = db.session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
def merge_slice(slc):
|
||||
o = db.session.query(
|
||||
Slice).filter_by(slice_name=slc.slice_name).first()
|
||||
if o:
|
||||
db.session.delete(slc)
|
||||
db.session.add(slc)
|
||||
session.commit()
|
||||
slices.append(slc)
|
||||
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Girls",
|
||||
viz_type='table',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, groupby=['name'], flt_eq_1="girl", row_limit=50))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
groupby=['name'], flt_eq_1="girl", row_limit=50)))
|
||||
|
||||
slice_name = "Boys"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Boys",
|
||||
viz_type='table',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, groupby=['name'], flt_eq_1="boy", row_limit=50))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
groupby=['name'], flt_eq_1="boy", row_limit=50)))
|
||||
|
||||
slice_name = "Participants"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Participants",
|
||||
viz_type='big_number',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="big_number", granularity="ds",
|
||||
compare_lag="5", compare_suffix="over 5Y"))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
viz_type="big_number", granularity="ds",
|
||||
compare_lag="5", compare_suffix="over 5Y")))
|
||||
|
||||
slice_name = "Genders"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Genders",
|
||||
viz_type='pie',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="pie", groupby=['gender']))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
viz_type="pie", groupby=['gender'])))
|
||||
|
||||
slice_name = "Gender by State"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Genders by State",
|
||||
viz_type='dist_bar',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, flt_eq_1="other", viz_type="dist_bar",
|
||||
flt_eq_1="other", viz_type="dist_bar",
|
||||
metrics=['sum__sum_girls', 'sum__sum_boys'],
|
||||
groupby=['state'], flt_op_1='not in', flt_col_1='state'))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
groupby=['state'], flt_op_1='not in', flt_col_1='state')))
|
||||
|
||||
slice_name = "Trends"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Trends",
|
||||
viz_type='line',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="line", groupby=['name'],
|
||||
granularity='ds', rich_tooltip='y', show_legend='y'))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
viz_type="line", groupby=['name'],
|
||||
granularity='ds', rich_tooltip='y', show_legend='y')))
|
||||
|
||||
slice_name = "Title"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
code = """
|
||||
### Birth Names Dashboard
|
||||
The source dataset came from [here](https://github.com/hadley/babynames)
|
||||
|
||||
![img](http://monblog.system-linux.net/image/tux/baby-tux_overlord59-tux.png)
|
||||
<div style="text-align:center">
|
||||
<h1>Birth Names Dashboard</h1>
|
||||
<p>The source dataset came from <a href="https://github.com/hadley/babynames">[here]</a></p>
|
||||
<img src="http://monblog.system-linux.net/image/tux/baby-tux_overlord59-tux.png">
|
||||
</div>
|
||||
"""
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Title",
|
||||
viz_type='markup',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="markup", markup_type="markdown",
|
||||
code=code))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
viz_type="markup", markup_type="html",
|
||||
code=code)))
|
||||
|
||||
slice_name = "Name Cloud"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Name Cloud",
|
||||
viz_type='word_cloud',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="word_cloud", size_from="10",
|
||||
viz_type="word_cloud", size_from="10",
|
||||
series='name', size_to="70", rotation="square",
|
||||
limit='100'))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
limit='100')))
|
||||
|
||||
slice_name = "Pivot Table"
|
||||
slc = session.query(Slice).filter_by(slice_name=slice_name).first()
|
||||
if not slc:
|
||||
slc = Slice(
|
||||
slice_name=slice_name,
|
||||
merge_slice(
|
||||
Slice(
|
||||
slice_name="Pivot Table",
|
||||
viz_type='pivot_table',
|
||||
datasource_type='table',
|
||||
table=tbl,
|
||||
params=get_slice_json(
|
||||
slice_name, viz_type="pivot_table", metrics=['sum__num'],
|
||||
groupby=['name'], columns=['state']))
|
||||
session.add(slc)
|
||||
slices.append(slc)
|
||||
viz_type="pivot_table", metrics=['sum__num'],
|
||||
groupby=['name'], columns=['state'])))
|
||||
|
||||
print("Creating a dashboard")
|
||||
Dash = models.Dashboard
|
||||
dash = session.query(Dash).filter_by(dashboard_title="Births").first()
|
||||
if not dash:
|
||||
dash = Dash(
|
||||
dashboard_title="Births",
|
||||
position_json="""
|
||||
[
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 2,
|
||||
"col": 3,
|
||||
"slice_id": "1",
|
||||
"row": 3
|
||||
},
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 2,
|
||||
"col": 1,
|
||||
"slice_id": "2",
|
||||
"row": 3
|
||||
},
|
||||
{
|
||||
"size_y": 2,
|
||||
"size_x": 2,
|
||||
"col": 1,
|
||||
"slice_id": "3",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 2,
|
||||
"size_x": 2,
|
||||
"col": 3,
|
||||
"slice_id": "4",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 7,
|
||||
"col": 5,
|
||||
"slice_id": "5",
|
||||
"row": 4
|
||||
},
|
||||
{
|
||||
"size_y": 5,
|
||||
"size_x": 11,
|
||||
"col": 1,
|
||||
"slice_id": "6",
|
||||
"row": 7
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 3,
|
||||
"col": 9,
|
||||
"slice_id": "7",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 4,
|
||||
"col": 5,
|
||||
"slice_id": "8",
|
||||
"row": 1
|
||||
}
|
||||
]
|
||||
"""
|
||||
)
|
||||
session.add(dash)
|
||||
|
||||
if dash:
|
||||
db.session.delete(dash)
|
||||
js = """
|
||||
[
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 2,
|
||||
"col": 8,
|
||||
"slice_id": "85",
|
||||
"row": 7
|
||||
},
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 2,
|
||||
"col": 10,
|
||||
"slice_id": "86",
|
||||
"row": 7
|
||||
},
|
||||
{
|
||||
"size_y": 2,
|
||||
"size_x": 2,
|
||||
"col": 1,
|
||||
"slice_id": "87",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 2,
|
||||
"size_x": 2,
|
||||
"col": 3,
|
||||
"slice_id": "88",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 7,
|
||||
"col": 5,
|
||||
"slice_id": "89",
|
||||
"row": 4
|
||||
},
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 7,
|
||||
"col": 1,
|
||||
"slice_id": "90",
|
||||
"row": 7
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 3,
|
||||
"col": 9,
|
||||
"slice_id": "91",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 3,
|
||||
"size_x": 4,
|
||||
"col": 5,
|
||||
"slice_id": "92",
|
||||
"row": 1
|
||||
},
|
||||
{
|
||||
"size_y": 4,
|
||||
"size_x": 4,
|
||||
"col": 1,
|
||||
"slice_id": "93",
|
||||
"row": 3
|
||||
}
|
||||
]
|
||||
"""
|
||||
l = json.loads(js)
|
||||
for i, pos in enumerate(l):
|
||||
pos['slice_id'] = str(slices[i].id)
|
||||
dash = Dash(
|
||||
dashboard_title="Births",
|
||||
position_json=json.dumps(l, indent=4),
|
||||
)
|
||||
for s in slices:
|
||||
dash.slices.append(s)
|
||||
session.commit()
|
||||
|
355
panoramix/data/countries.md
Normal file
355
panoramix/data/countries.md
Normal file
@ -0,0 +1,355 @@
|
||||
This data was download from the
|
||||
[World's Health Organization's website](http://data.worldbank.org/data-catalog/health-nutrition-and-population-statistics)
|
||||
|
||||
Here's the script that was used to massage the data:
|
||||
|
||||
DIR = ""
|
||||
df_country = pd.read_csv(DIR + '/HNP_Country.csv')
|
||||
df_country.columns = ['country_code'] + list(df_country.columns[1:])
|
||||
df_country = df_country[['country_code', 'Region']]
|
||||
df_country.columns = ['country_code', 'region']
|
||||
|
||||
df = pd.read_csv(DIR + '/HNP_Data.csv')
|
||||
del df['Unnamed: 60']
|
||||
df.columns = ['country_name', 'country_code'] + list(df.columns[2:])
|
||||
ndf = df.merge(df_country, how='inner')
|
||||
|
||||
dims = ('country_name', 'country_code', 'region')
|
||||
vv = [str(i) for i in range(1960, 2015)]
|
||||
mdf = pd.melt(ndf, id_vars=dims + ('Indicator Code',), value_vars=vv)
|
||||
mdf['year'] = mdf.variable + '-01-01'
|
||||
dims = dims + ('year',)
|
||||
|
||||
pdf = mdf.pivot_table(values='value', columns='Indicator Code', index=dims)
|
||||
pdf = pdf.reset_index()
|
||||
pdf.to_csv(DIR + '/countries.csv')
|
||||
pdf.to_json(DIR + '/countries.json', orient='records')
|
||||
|
||||
Here's the description of the metrics available:
|
||||
|
||||
Series | Code Indicator Name
|
||||
--- | ---
|
||||
NY.GNP.PCAP.CD | GNI per capita, Atlas method (current US$)
|
||||
SE.ADT.1524.LT.FM.ZS | Literacy rate, youth (ages 15-24), gender parity index (GPI)
|
||||
SE.ADT.1524.LT.MA.ZS | Literacy rate, youth male (% of males ages 15-24)
|
||||
SE.ADT.1524.LT.ZS | Literacy rate, youth total (% of people ages 15-24)
|
||||
SE.ADT.LITR.FE.ZS | Literacy rate, adult female (% of females ages 15 and above)
|
||||
SE.ADT.LITR.MA.ZS | Literacy rate, adult male (% of males ages 15 and above)
|
||||
SE.ADT.LITR.ZS | Literacy rate, adult total (% of people ages 15 and above)
|
||||
SE.ENR.ORPH | Ratio of school attendance of orphans to school attendance of non-orphans ages 10-14
|
||||
SE.PRM.CMPT.FE.ZS | Primary completion rate, female (% of relevant age group)
|
||||
SE.PRM.CMPT.MA.ZS | Primary completion rate, male (% of relevant age group)
|
||||
SE.PRM.CMPT.ZS | Primary completion rate, total (% of relevant age group)
|
||||
SE.PRM.ENRR | School enrollment, primary (% gross)
|
||||
SE.PRM.ENRR.FE | School enrollment, primary, female (% gross)
|
||||
SE.PRM.ENRR.MA | School enrollment, primary, male (% gross)
|
||||
SE.PRM.NENR | School enrollment, primary (% net)
|
||||
SE.PRM.NENR.FE | School enrollment, primary, female (% net)
|
||||
SE.PRM.NENR.MA | School enrollment, primary, male (% net)
|
||||
SE.SEC.ENRR | School enrollment, secondary (% gross)
|
||||
SE.SEC.ENRR.FE | School enrollment, secondary, female (% gross)
|
||||
SE.SEC.ENRR.MA | School enrollment, secondary, male (% gross)
|
||||
SE.SEC.NENR | School enrollment, secondary (% net)
|
||||
SE.SEC.NENR.FE | School enrollment, secondary, female (% net)
|
||||
SE.SEC.NENR.MA | School enrollment, secondary, male (% net)
|
||||
SE.TER.ENRR | School enrollment, tertiary (% gross)
|
||||
SE.TER.ENRR.FE | School enrollment, tertiary, female (% gross)
|
||||
SE.XPD.TOTL.GD.ZS | Government expenditure on education, total (% of GDP)
|
||||
SH.ANM.CHLD.ZS | Prevalence of anemia among children (% of children under 5)
|
||||
SH.ANM.NPRG.ZS | Prevalence of anemia among non-pregnant women (% of women ages 15-49)
|
||||
SH.CON.1524.FE.ZS | Condom use, population ages 15-24, female (% of females ages 15-24)
|
||||
SH.CON.1524.MA.ZS | Condom use, population ages 15-24, male (% of males ages 15-24)
|
||||
SH.CON.AIDS.FE.ZS | Condom use at last high-risk sex, adult female (% ages 15-49)
|
||||
SH.CON.AIDS.MA.ZS | Condom use at last high-risk sex, adult male (% ages 15-49)
|
||||
SH.DTH.COMM.ZS | Cause of death, by communicable diseases and maternal, prenatal and nutrition conditions (% of total)
|
||||
SH.DTH.IMRT | Number of infant deaths
|
||||
SH.DTH.INJR.ZS | Cause of death, by injury (% of total)
|
||||
SH.DTH.MORT | Number of under-five deaths
|
||||
SH.DTH.NCOM.ZS | Cause of death, by non-communicable diseases (% of total)
|
||||
SH.DTH.NMRT | Number of neonatal deaths
|
||||
SH.DYN.AIDS | Adults (ages 15+) living with HIV
|
||||
SH.DYN.AIDS.DH | AIDS estimated deaths (UNAIDS estimates)
|
||||
SH.DYN.AIDS.FE.ZS | Women's share of population ages 15+ living with HIV (%)
|
||||
SH.DYN.AIDS.ZS | Prevalence of HIV, total (% of population ages 15-49)
|
||||
SH.DYN.MORT | Mortality rate, under-5 (per 1,000 live births)
|
||||
SH.DYN.MORT.FE | Mortality rate, under-5, female (per 1,000 live births)
|
||||
SH.DYN.MORT.MA | Mortality rate, under-5, male (per 1,000 live births)
|
||||
SH.DYN.NMRT | Mortality rate, neonatal (per 1,000 live births)
|
||||
SH.FPL.SATI.ZS | Met need for contraception (% of married women ages 15-49)
|
||||
SH.H2O.SAFE.RU.ZS | Improved water source, rural (% of rural population with access)
|
||||
SH.H2O.SAFE.UR.ZS | Improved water source, urban (% of urban population with access)
|
||||
SH.H2O.SAFE.ZS | Improved water source (% of population with access)
|
||||
SH.HIV.0014 | Children (0-14) living with HIV
|
||||
SH.HIV.1524.FE.ZS | Prevalence of HIV, female (% ages 15-24)
|
||||
SH.HIV.1524.KW.FE.ZS | Comprehensive correct knowledge of HIV/AIDS, ages 15-24, female (2 prevent ways and reject 3 misconceptions)
|
||||
SH.HIV.1524.KW.MA.ZS | Comprehensive correct knowledge of HIV/AIDS, ages 15-24, male (2 prevent ways and reject 3 misconceptions)
|
||||
SH.HIV.1524.MA.ZS | Prevalence of HIV, male (% ages 15-24)
|
||||
SH.HIV.ARTC.ZS | Antiretroviral therapy coverage (% of people living with HIV)
|
||||
SH.HIV.KNOW.FE.ZS | % of females ages 15-49 having comprehensive correct knowledge about HIV (2 prevent ways and reject 3 misconceptions)
|
||||
SH.HIV.KNOW.MA.ZS | % of males ages 15-49 having comprehensive correct knowledge about HIV (2 prevent ways and reject 3 misconceptions)
|
||||
SH.HIV.ORPH | Children orphaned by HIV/AIDS
|
||||
SH.HIV.TOTL | Adults (ages 15+) and children (0-14 years) living with HIV
|
||||
SH.IMM.HEPB | Immunization, HepB3 (% of one-year-old children)
|
||||
SH.IMM.HIB3 | Immunization, Hib3 (% of children ages 12-23 months)
|
||||
SH.IMM.IBCG | Immunization, BCG (% of one-year-old children)
|
||||
SH.IMM.IDPT | Immunization, DPT (% of children ages 12-23 months)
|
||||
SH.IMM.MEAS | Immunization, measles (% of children ages 12-23 months)
|
||||
SH.IMM.POL3 | Immunization, Pol3 (% of one-year-old children)
|
||||
SH.MED.BEDS.ZS | Hospital beds (per 1,000 people)
|
||||
SH.MED.CMHW.P3 | Community health workers (per 1,000 people)
|
||||
SH.MED.NUMW.P3 | Nurses and midwives (per 1,000 people)
|
||||
SH.MED.PHYS.ZS | Physicians (per 1,000 people)
|
||||
SH.MLR.NETS.ZS | Use of insecticide-treated bed nets (% of under-5 population)
|
||||
SH.MLR.PREG.ZS | Use of any antimalarial drug (% of pregnant women)
|
||||
SH.MLR.SPF2.ZS | Use of Intermittent Preventive Treatment of malaria, 2+ doses of SP/Fansidar (% of pregnant women)
|
||||
SH.MLR.TRET.ZS | Children with fever receiving antimalarial drugs (% of children under age 5 with fever)
|
||||
SH.MMR.DTHS | Number of maternal deaths
|
||||
SH.MMR.LEVE | Number of weeks of maternity leave
|
||||
SH.MMR.RISK | Lifetime risk of maternal death (1 in: rate varies by country)
|
||||
SH.MMR.RISK.ZS | Lifetime risk of maternal death (%)
|
||||
SH.MMR.WAGE.ZS | Maternal leave benefits (% of wages paid in covered period)
|
||||
SH.PRG.ANEM | Prevalence of anemia among pregnant women (%)
|
||||
SH.PRG.ARTC.ZS | Antiretroviral therapy coverage (% of pregnant women living with HIV)
|
||||
SH.PRG.SYPH.ZS | Prevalence of syphilis (% of women attending antenatal care)
|
||||
SH.PRV.SMOK.FE | Smoking prevalence, females (% of adults)
|
||||
SH.PRV.SMOK.MA | Smoking prevalence, males (% of adults)
|
||||
SH.STA.ACSN | Improved sanitation facilities (% of population with access)
|
||||
SH.STA.ACSN.RU | Improved sanitation facilities, rural (% of rural population with access)
|
||||
SH.STA.ACSN.UR | Improved sanitation facilities, urban (% of urban population with access)
|
||||
SH.STA.ANV4.ZS | Pregnant women receiving prenatal care of at least four visits (% of pregnant women)
|
||||
SH.STA.ANVC.ZS | Pregnant women receiving prenatal care (%)
|
||||
SH.STA.ARIC.ZS | ARI treatment (% of children under 5 taken to a health provider)
|
||||
SH.STA.BFED.ZS | Exclusive breastfeeding (% of children under 6 months)
|
||||
SH.STA.BRTC.ZS | Births attended by skilled health staff (% of total)
|
||||
SH.STA.BRTW.ZS | Low-birthweight babies (% of births)
|
||||
SH.STA.DIAB.ZS | Diabetes prevalence (% of population ages 20 to 79)
|
||||
SH.STA.IYCF.ZS | Infant and young child feeding practices, all 3 IYCF (% children ages 6-23 months)
|
||||
SH.STA.MALN.FE.ZS | Prevalence of underweight, weight for age, female (% of children under 5)
|
||||
SH.STA.MALN.MA.ZS | Prevalence of underweight, weight for age, male (% of children under 5)
|
||||
SH.STA.MALN.ZS | Prevalence of underweight, weight for age (% of children under 5)
|
||||
SH.STA.MALR | Malaria cases reported
|
||||
SH.STA.MMRT | Maternal mortality ratio (modeled estimate, per 100,000 live births)
|
||||
SH.STA.MMRT.NE | Maternal mortality ratio (national estimate, per 100,000 live births)
|
||||
SH.STA.ORCF.ZS | Diarrhea treatment (% of children under 5 receiving oral rehydration and continued feeding)
|
||||
SH.STA.ORTH | Diarrhea treatment (% of children under 5 who received ORS packet)
|
||||
SH.STA.OW15.FE.ZS | Prevalence of overweight, female (% of female adults)
|
||||
SH.STA.OW15.MA.ZS | Prevalence of overweight, male (% of male adults)
|
||||
SH.STA.OW15.ZS | Prevalence of overweight (% of adults)
|
||||
SH.STA.OWGH.FE.ZS | Prevalence of overweight, weight for height, female (% of children under 5)
|
||||
SH.STA.OWGH.MA.ZS | Prevalence of overweight, weight for height, male (% of children under 5)
|
||||
SH.STA.OWGH.ZS | Prevalence of overweight, weight for height (% of children under 5)
|
||||
SH.STA.PNVC.ZS | Postnatal care coverage (% mothers)
|
||||
SH.STA.STNT.FE.ZS | Prevalence of stunting, height for age, female (% of children under 5)
|
||||
SH.STA.STNT.MA.ZS | Prevalence of stunting, height for age, male (% of children under 5)
|
||||
SH.STA.STNT.ZS | Prevalence of stunting, height for age (% of children under 5)
|
||||
SH.STA.WAST.FE.ZS | Prevalence of wasting, weight for height, female (% of children under 5)
|
||||
SH.STA.WAST.MA.ZS | Prevalence of wasting, weight for height, male (% of children under 5)
|
||||
SH.STA.WAST.ZS | Prevalence of wasting, weight for height (% of children under 5)
|
||||
SH.SVR.WAST.FE.ZS | Prevalence of severe wasting, weight for height, female (% of children under 5)
|
||||
SH.SVR.WAST.MA.ZS | Prevalence of severe wasting, weight for height, male (% of children under 5)
|
||||
SH.SVR.WAST.ZS | Prevalence of severe wasting, weight for height (% of children under 5)
|
||||
SH.TBS.CURE.ZS | Tuberculosis treatment success rate (% of new cases)
|
||||
SH.TBS.DTEC.ZS | Tuberculosis case detection rate (%, all forms)
|
||||
SH.TBS.INCD | Incidence of tuberculosis (per 100,000 people)
|
||||
SH.TBS.MORT | Tuberculosis death rate (per 100,000 people)
|
||||
SH.TBS.PREV | Prevalence of tuberculosis (per 100,000 population)
|
||||
SH.VAC.TTNS.ZS | Newborns protected against tetanus (%)
|
||||
SH.XPD.EXTR.ZS | External resources for health (% of total expenditure on health)
|
||||
SH.XPD.OOPC.TO.ZS | Out-of-pocket health expenditure (% of total expenditure on health)
|
||||
SH.XPD.OOPC.ZS | Out-of-pocket health expenditure (% of private expenditure on health)
|
||||
SH.XPD.PCAP | Health expenditure per capita (current US$)
|
||||
SH.XPD.PCAP.PP.KD | Health expenditure per capita, PPP (constant 2011 international $)
|
||||
SH.XPD.PRIV | Health expenditure, private (% of total health expenditure)
|
||||
SH.XPD.PRIV.ZS | Health expenditure, private (% of GDP)
|
||||
SH.XPD.PUBL | Health expenditure, public (% of total health expenditure)
|
||||
SH.XPD.PUBL.GX.ZS | Health expenditure, public (% of government expenditure)
|
||||
SH.XPD.PUBL.ZS | Health expenditure, public (% of GDP)
|
||||
SH.XPD.TOTL.CD | Health expenditure, total (current US$)
|
||||
SH.XPD.TOTL.ZS | Health expenditure, total (% of GDP)
|
||||
SI.POV.NAHC | Poverty headcount ratio at national poverty lines (% of population)
|
||||
SI.POV.RUHC | Rural poverty headcount ratio at national poverty lines (% of rural population)
|
||||
SI.POV.URHC | Urban poverty headcount ratio at national poverty lines (% of urban population)
|
||||
SL.EMP.INSV.FE.ZS | Share of women in wage employment in the nonagricultural sector (% of total nonagricultural employment)
|
||||
SL.TLF.TOTL.FE.ZS | Labor force, female (% of total labor force)
|
||||
SL.TLF.TOTL.IN | Labor force, total
|
||||
SL.UEM.TOTL.FE.ZS | Unemployment, female (% of female labor force) (modeled ILO estimate)
|
||||
SL.UEM.TOTL.MA.ZS | Unemployment, male (% of male labor force) (modeled ILO estimate)
|
||||
SL.UEM.TOTL.ZS | Unemployment, total (% of total labor force) (modeled ILO estimate)
|
||||
SM.POP.NETM | Net migration
|
||||
SN.ITK.DEFC | Number of people who are undernourished
|
||||
SN.ITK.DEFC.ZS | Prevalence of undernourishment (% of population)
|
||||
SN.ITK.SALT.ZS | Consumption of iodized salt (% of households)
|
||||
SN.ITK.VITA.ZS | Vitamin A supplementation coverage rate (% of children ages 6-59 months)
|
||||
SP.ADO.TFRT | Adolescent fertility rate (births per 1,000 women ages 15-19)
|
||||
SP.DYN.AMRT.FE | Mortality rate, adult, female (per 1,000 female adults)
|
||||
SP.DYN.AMRT.MA | Mortality rate, adult, male (per 1,000 male adults)
|
||||
SP.DYN.CBRT.IN | Birth rate, crude (per 1,000 people)
|
||||
SP.DYN.CDRT.IN | Death rate, crude (per 1,000 people)
|
||||
SP.DYN.CONU.ZS | Contraceptive prevalence (% of women ages 15-49)
|
||||
SP.DYN.IMRT.FE.IN | Mortality rate, infant, female (per 1,000 live births)
|
||||
SP.DYN.IMRT.IN | Mortality rate, infant (per 1,000 live births)
|
||||
SP.DYN.IMRT.MA.IN | Mortality rate, infant, male (per 1,000 live births)
|
||||
SP.DYN.LE00.FE.IN | Life expectancy at birth, female (years)
|
||||
SP.DYN.LE00.IN | Life expectancy at birth, total (years)
|
||||
SP.DYN.LE00.MA.IN | Life expectancy at birth, male (years)
|
||||
SP.DYN.SMAM.FE | Mean age at first marriage, female
|
||||
SP.DYN.SMAM.MA | Mean age at first marriage, male
|
||||
SP.DYN.TFRT.IN | Fertility rate, total (births per woman)
|
||||
SP.DYN.TO65.FE.ZS | Survival to age 65, female (% of cohort)
|
||||
SP.DYN.TO65.MA.ZS | Survival to age 65, male (% of cohort)
|
||||
SP.DYN.WFRT | Wanted fertility rate (births per woman)
|
||||
SP.HOU.FEMA.ZS | Female headed households (% of households with a female head)
|
||||
SP.MTR.1519.ZS | Teenage mothers (% of women ages 15-19 who have had children or are currently pregnant)
|
||||
SP.POP.0004.FE | Population ages 0-4, female
|
||||
SP.POP.0004.FE.5Y | Population ages 0-4, female (% of female population)
|
||||
SP.POP.0004.MA | Population ages 0-4, male
|
||||
SP.POP.0004.MA.5Y | Population ages 0-4, male (% of male population)
|
||||
SP.POP.0014.FE.ZS | Population ages 0-14, female (% of total)
|
||||
SP.POP.0014.MA.ZS | Population ages 0-14, male (% of total)
|
||||
SP.POP.0014.TO | Population ages 0-14, total
|
||||
SP.POP.0014.TO.ZS | Population ages 0-14 (% of total)
|
||||
SP.POP.0509.FE | Population ages 5-9, female
|
||||
SP.POP.0509.FE.5Y | Population ages 5-9, female (% of female population)
|
||||
SP.POP.0509.MA | Population ages 5-9, male
|
||||
SP.POP.0509.MA.5Y | Population ages 5-9, male (% of male population)
|
||||
SP.POP.1014.FE | Population ages 10-14, female
|
||||
SP.POP.1014.FE.5Y | Population ages 10-14, female (% of female population)
|
||||
SP.POP.1014.MA | Population ages 10-14, male
|
||||
SP.POP.1014.MA.5Y | Population ages 10-14, male (% of male population)
|
||||
SP.POP.1519.FE | Population ages 15-19, female
|
||||
SP.POP.1519.FE.5Y | Population ages 15-19, female (% of female population)
|
||||
SP.POP.1519.MA | Population ages 15-19, male
|
||||
SP.POP.1519.MA.5Y | Population ages 15-19, male (% of male population)
|
||||
SP.POP.1564.FE.ZS | Population ages 15-64, female (% of total)
|
||||
SP.POP.1564.MA.ZS | Population ages 15-64, male (% of total)
|
||||
SP.POP.1564.TO | Population ages 15-64, total
|
||||
SP.POP.1564.TO.ZS | Population ages 15-64 (% of total)
|
||||
SP.POP.2024.FE | Population ages 20-24, female
|
||||
SP.POP.2024.FE.5Y | Population ages 20-24, female (% of female population)
|
||||
SP.POP.2024.MA | Population ages 20-24, male
|
||||
SP.POP.2024.MA.5Y | Population ages 20-24, male (% of male population)
|
||||
SP.POP.2529.FE | Population ages 25-29, female
|
||||
SP.POP.2529.FE.5Y | Population ages 25-29, female (% of female population)
|
||||
SP.POP.2529.MA | Population ages 25-29, male
|
||||
SP.POP.2529.MA.5Y | Population ages 25-29, male (% of male population)
|
||||
SP.POP.3034.FE | Population ages 30-34, female
|
||||
SP.POP.3034.FE.5Y | Population ages 30-34, female (% of female population)
|
||||
SP.POP.3034.MA | Population ages 30-34, male
|
||||
SP.POP.3034.MA.5Y | Population ages 30-34, male (% of male population)
|
||||
SP.POP.3539.FE | Population ages 35-39, female
|
||||
SP.POP.3539.FE.5Y | Population ages 35-39, female (% of female population)
|
||||
SP.POP.3539.MA | Population ages 35-39, male
|
||||
SP.POP.3539.MA.5Y | Population ages 35-39, male (% of male population)
|
||||
SP.POP.4044.FE | Population ages 40-44, female
|
||||
SP.POP.4044.FE.5Y | Population ages 40-44, female (% of female population)
|
||||
SP.POP.4044.MA | Population ages 40-44, male
|
||||
SP.POP.4044.MA.5Y | Population ages 40-44, male (% of male population)
|
||||
SP.POP.4549.FE | Population ages 45-49, female
|
||||
SP.POP.4549.FE.5Y | Population ages 45-49, female (% of female population)
|
||||
SP.POP.4549.MA | Population ages 45-49, male
|
||||
SP.POP.4549.MA.5Y | Population ages 45-49, male (% of male population)
|
||||
SP.POP.5054.FE | Population ages 50-54, female
|
||||
SP.POP.5054.FE.5Y | Population ages 50-54, female (% of female population)
|
||||
SP.POP.5054.MA | Population ages 50-54, male
|
||||
SP.POP.5054.MA.5Y | Population ages 50-54, male (% of male population)
|
||||
SP.POP.5559.FE | Population ages 55-59, female
|
||||
SP.POP.5559.FE.5Y | Population ages 55-59, female (% of female population)
|
||||
SP.POP.5559.MA | Population ages 55-59, male
|
||||
SP.POP.5559.MA.5Y | Population ages 55-59, male (% of male population)
|
||||
SP.POP.6064.FE | Population ages 60-64, female
|
||||
SP.POP.6064.FE.5Y | Population ages 60-64, female (% of female population)
|
||||
SP.POP.6064.MA | Population ages 60-64, male
|
||||
SP.POP.6064.MA.5Y | Population ages 60-64, male (% of male population)
|
||||
SP.POP.6569.FE | Population ages 65-69, female
|
||||
SP.POP.6569.FE.5Y | Population ages 65-69, female (% of female population)
|
||||
SP.POP.6569.MA | Population ages 65-69, male
|
||||
SP.POP.6569.MA.5Y | Population ages 65-69, male (% of male population)
|
||||
SP.POP.65UP.FE.ZS | Population ages 65 and above, female (% of total)
|
||||
SP.POP.65UP.MA.ZS | Population ages 65 and above, male (% of total)
|
||||
SP.POP.65UP.TO | Population ages 65 and above, total
|
||||
SP.POP.65UP.TO.ZS | Population ages 65 and above (% of total)
|
||||
SP.POP.7074.FE | Population ages 70-74, female
|
||||
SP.POP.7074.FE.5Y | Population ages 70-74, female (% of female population)
|
||||
SP.POP.7074.MA | Population ages 70-74, male
|
||||
SP.POP.7074.MA.5Y | Population ages 70-74, male (% of male population)
|
||||
SP.POP.7579.FE | Population ages 75-79, female
|
||||
SP.POP.7579.FE.5Y | Population ages 75-79, female (% of female population)
|
||||
SP.POP.7579.MA | Population ages 75-79, male
|
||||
SP.POP.7579.MA.5Y | Population ages 75-79, male (% of male population)
|
||||
SP.POP.80UP.FE | Population ages 80 and above, female
|
||||
SP.POP.80UP.FE.5Y | Population ages 80 and above, female (% of female population)
|
||||
SP.POP.80UP.MA | Population ages 80 and above, male
|
||||
SP.POP.80UP.MA.5Y | Population ages 80 and above, male (% of male population)
|
||||
SP.POP.AG00.FE.IN | Age population, age 0, female, interpolated
|
||||
SP.POP.AG00.MA.IN | Age population, age 0, male, interpolated
|
||||
SP.POP.AG01.FE.IN | Age population, age 01, female, interpolated
|
||||
SP.POP.AG01.MA.IN | Age population, age 01, male, interpolated
|
||||
SP.POP.AG02.FE.IN | Age population, age 02, female, interpolated
|
||||
SP.POP.AG02.MA.IN | Age population, age 02, male, interpolated
|
||||
SP.POP.AG03.FE.IN | Age population, age 03, female, interpolated
|
||||
SP.POP.AG03.MA.IN | Age population, age 03, male, interpolated
|
||||
SP.POP.AG04.FE.IN | Age population, age 04, female, interpolated
|
||||
SP.POP.AG04.MA.IN | Age population, age 04, male, interpolated
|
||||
SP.POP.AG05.FE.IN | Age population, age 05, female, interpolated
|
||||
SP.POP.AG05.MA.IN | Age population, age 05, male, interpolated
|
||||
SP.POP.AG06.FE.IN | Age population, age 06, female, interpolated
|
||||
SP.POP.AG06.MA.IN | Age population, age 06, male, interpolated
|
||||
SP.POP.AG07.FE.IN | Age population, age 07, female, interpolated
|
||||
SP.POP.AG07.MA.IN | Age population, age 07, male, interpolated
|
||||
SP.POP.AG08.FE.IN | Age population, age 08, female, interpolated
|
||||
SP.POP.AG08.MA.IN | Age population, age 08, male, interpolated
|
||||
SP.POP.AG09.FE.IN | Age population, age 09, female, interpolated
|
||||
SP.POP.AG09.MA.IN | Age population, age 09, male, interpolated
|
||||
SP.POP.AG10.FE.IN | Age population, age 10, female, interpolated
|
||||
SP.POP.AG10.MA.IN | Age population, age 10, male
|
||||
SP.POP.AG11.FE.IN | Age population, age 11, female, interpolated
|
||||
SP.POP.AG11.MA.IN | Age population, age 11, male
|
||||
SP.POP.AG12.FE.IN | Age population, age 12, female, interpolated
|
||||
SP.POP.AG12.MA.IN | Age population, age 12, male
|
||||
SP.POP.AG13.FE.IN | Age population, age 13, female, interpolated
|
||||
SP.POP.AG13.MA.IN | Age population, age 13, male
|
||||
SP.POP.AG14.FE.IN | Age population, age 14, female, interpolated
|
||||
SP.POP.AG14.MA.IN | Age population, age 14, male
|
||||
SP.POP.AG15.FE.IN | Age population, age 15, female, interpolated
|
||||
SP.POP.AG15.MA.IN | Age population, age 15, male, interpolated
|
||||
SP.POP.AG16.FE.IN | Age population, age 16, female, interpolated
|
||||
SP.POP.AG16.MA.IN | Age population, age 16, male, interpolated
|
||||
SP.POP.AG17.FE.IN | Age population, age 17, female, interpolated
|
||||
SP.POP.AG17.MA.IN | Age population, age 17, male, interpolated
|
||||
SP.POP.AG18.FE.IN | Age population, age 18, female, interpolated
|
||||
SP.POP.AG18.MA.IN | Age population, age 18, male, interpolated
|
||||
SP.POP.AG19.FE.IN | Age population, age 19, female, interpolated
|
||||
SP.POP.AG19.MA.IN | Age population, age 19, male, interpolated
|
||||
SP.POP.AG20.FE.IN | Age population, age 20, female, interpolated
|
||||
SP.POP.AG20.MA.IN | Age population, age 20, male, interpolated
|
||||
SP.POP.AG21.FE.IN | Age population, age 21, female, interpolated
|
||||
SP.POP.AG21.MA.IN | Age population, age 21, male, interpolated
|
||||
SP.POP.AG22.FE.IN | Age population, age 22, female, interpolated
|
||||
SP.POP.AG22.MA.IN | Age population, age 22, male, interpolated
|
||||
SP.POP.AG23.FE.IN | Age population, age 23, female, interpolated
|
||||
SP.POP.AG23.MA.IN | Age population, age 23, male, interpolated
|
||||
SP.POP.AG24.FE.IN | Age population, age 24, female, interpolated
|
||||
SP.POP.AG24.MA.IN | Age population, age 24, male, interpolated
|
||||
SP.POP.AG25.FE.IN | Age population, age 25, female, interpolated
|
||||
SP.POP.AG25.MA.IN | Age population, age 25, male, interpolated
|
||||
SP.POP.BRTH.MF | Sex ratio at birth (male births per female births)
|
||||
SP.POP.DPND | Age dependency ratio (% of working-age population)
|
||||
SP.POP.DPND.OL | Age dependency ratio, old (% of working-age population)
|
||||
SP.POP.DPND.YG | Age dependency ratio, young (% of working-age population)
|
||||
SP.POP.GROW | Population growth (annual %)
|
||||
SP.POP.TOTL | Population, total
|
||||
SP.POP.TOTL.FE.IN | Population, female
|
||||
SP.POP.TOTL.FE.ZS | Population, female (% of total)
|
||||
SP.POP.TOTL.MA.IN | Population, male
|
||||
SP.POP.TOTL.MA.ZS | Population, male (% of total)
|
||||
SP.REG.BRTH.RU.ZS | Completeness of birth registration, rural (%)
|
||||
SP.REG.BRTH.UR.ZS | Completeness of birth registration, urban (%)
|
||||
SP.REG.BRTH.ZS | Completeness of birth registration (%)
|
||||
SP.REG.DTHS.ZS | Completeness of death registration with cause-of-death information (%)
|
||||
SP.RUR.TOTL | Rural population
|
||||
SP.RUR.TOTL.ZG | Rural population growth (annual %)
|
||||
SP.RUR.TOTL.ZS | Rural population (% of total population)
|
||||
SP.URB.GROW | Urban population growth (annual %)
|
||||
SP.URB.TOTL | Urban population
|
||||
SP.URB.TOTL.IN.ZS | Urban population (% of total)
|
||||
SP.UWT.TFRT | Unmet need for contraception (% of married women ages 15-49)
|
@ -20,7 +20,7 @@ px.registerViz('table', function(slice) {
|
||||
maxes[metrics[i]] = d3.max(col(metrics[i]));
|
||||
}
|
||||
var table = d3.select(slice.selector).append('table')
|
||||
.attr('class', 'dataframe table table-striped table-bordered table-condensed table-hover');
|
||||
.classed('dataframe dataframe table table-striped table-bordered table-condensed table-hover dataTable no-footer', true);
|
||||
table.append('thead').append('tr')
|
||||
.selectAll('th')
|
||||
.data(data.columns).enter()
|
||||
@ -75,7 +75,7 @@ px.registerViz('table', function(slice) {
|
||||
else
|
||||
return d.val;
|
||||
});
|
||||
var datatable = slice.container.find('table').DataTable({
|
||||
var datatable = slice.container.find('.dataTable').DataTable({
|
||||
paging: false,
|
||||
searching: form_data.include_search,
|
||||
});
|
||||
|
@ -229,3 +229,9 @@ def json_iso_dttm_ser(obj):
|
||||
|
||||
def markdown(s):
|
||||
return md(s, ['markdown.extensions.tables'])
|
||||
|
||||
|
||||
def readfile(filepath):
|
||||
with open(filepath) as f:
|
||||
content = f.read()
|
||||
return content
|
||||
|
@ -283,7 +283,10 @@ class TableViz(BaseViz):
|
||||
'all_columns',
|
||||
)
|
||||
},)
|
||||
css_files = ['lib/dataTables/dataTables.bootstrap.css']
|
||||
css_files = [
|
||||
'lib/dataTables/dataTables.bootstrap.css',
|
||||
'widgets/viz_table.css',
|
||||
]
|
||||
is_timeseries = False
|
||||
js_files = [
|
||||
'lib/d3.min.js',
|
||||
@ -291,7 +294,6 @@ class TableViz(BaseViz):
|
||||
'lib/dataTables/dataTables.bootstrap.js',
|
||||
'widgets/viz_table.js',
|
||||
]
|
||||
css_files = ['widgets/viz_table.css']
|
||||
|
||||
def query_obj(self):
|
||||
d = super(TableViz, self).query_obj()
|
||||
|
Loading…
Reference in New Issue
Block a user