GithubHelp home page GithubHelp logo

d-place / dplace-data Goto Github PK

View Code? Open in Web Editor NEW
77.0 14.0 37.0 387.68 MB

The data repository for the D-PLACE Project (Database of Places, Language, Culture and Environment)

Home Page: https://d-place.org

License: Creative Commons Attribution 4.0 International

Python 0.02% Makefile 0.02% TeX 4.03% R 0.01% Turing 95.93%
d-place datasets cultural-heritage cross-cultural cultural-evolution

dplace-data's Introduction

dplace-data

Data for D-PLACE.

Build Status

Research that uses data from D-PLACE should cite both the original source(s) of the data and the paper by Kirby et al. in which D-PLACE was first presented e.g., for research using cultural data from the Binford Hunter-Gatherer dataset:

Binford (2001); Binford and Johnson (2006); Kirby et al. (2016).

The reference list should include the version of the data used and URL for D-PLACE, in addition to the full references for Binford (2001), Binford and Johnson (2006), and Kirby et al. (2016).

Versions

See the list of releases for available released versions of D-PLACE data, and see the changelog for the changes made in each version.

Acknowledgements

D-PLACE would not exist without the cultural datasets upon which it relies; we would like to acknowledge the years of work by George P. Murdock and Lewis R. Binford, and the enormous contributions made by other scholars in the field towards their maintenance and updating.

Finally, a number of people provided assistance in preparing data for inclusion in D-PLACE, including Christopher Blackford, Kaylin Clements, Anna Kellogg, Hannah Haynie, Patrick Kavanagh, Ameena Khan, Beata Opalinska, Anum Rafiq, Anastasia Stellato, and George Tsourounis.

The phylogenies in D-PLACE have been generously provided by many researchers. In particular we would like to thank:

D-PLACE was developed with generous support from the National Evolutionary Synthesis Center, the Max Planck Institute for the Science of Human History, and the National Science Foundation (award numbers 1519987, BCS-1423711, and EF-0905606).

dplace-data's People

Contributors

dleehr avatar hedvigs avatar kirbykat avatar mnacamura avatar seannyd avatar simongreenhill avatar stefelisabeth avatar xflr6 avatar xrotwang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dplace-data's Issues

Merge references

References from all datasets should be merged, and the references field in data.csv should be enhanced to also include pages, e.g.

"Memmott, 1983a:123-234; Memmott, 1983b"

i.e. using syntax like semikolon-separated reference keys of the form <key>:<pages>.

Parsing of this syntax should be done when initializing a Data object.

Proposal for a unification of datasets

Datasets

Variables and associated values coded for D-PLACE societies are organized into datasets,
according to their source.

Each dataset is identified by a short textual ID, e.g. "EA" for data originating from the
Ethnographic Atlas or "Binford" for the data from the Hunter- and Gatherer Database. The
data files for a dataset are kept in a subdirectory of datasets named with the dataset ID and must
consist of the following files:

  • variables.csv: The list of variables, coded in a dataset; must contain columns
    • id: D-PLACE-wide unique identifier for the variable
    • title
    • definition
    • type: one of Ordinal, Continuous, Categorical
    • category: comma-separated list of categories a variable belongs to.
    • units
    • source
    • changes
    • notes
  • data.csv: The coded values; must contain columns
    • soc_id: Reference to a D-PLACE society ID.
    • var_id: Reference to a D-PLACE variable ID.
    • code: Reference to a categorical value described in codes.csv or a literal value.
    • sub_case
    • year
    • comment
    • references: Semicolon-separated list of reference keys.
    • source_coded_data
    • admin_comment

and may optionally also provide files:

  • codes.csv: A list of category descriptions for categorical variables:
    • var_id: Reference to a D-PLACE variable ID.
    • code
    • description
    • name
  • references.csv: A list of references:
    • key: The key used to refer to this source in the data
    • citation: The full citation.
  • societies.csv: A list of additional societies coded in the dataset with columns:
    • soc_id: D-PLACE-wide unique identifier for the society
    • xd_id
    • pref_name_for_society
    • ORIG_name_and_ID_in_this_dataset
    • alt_names_by_society
    • main_focal_year
    • HRAF_name_ID
    • HRAF_link
    • origLat
    • origLong
    • Lat
    • Long
    • Comment on location
    • glottocode: Code for the most specific Glottolog languoid which can be assigned to this society.
    • glottocode_comment: Comment on the assignment of a glottocode to this society.
  • societies_mapping.csv: A CSV file mapping society IDs to similar societies in other datasets.

For a dataset to be considered for import into D-PLACE it must be registered, i.e. listed in the file datasets/index.csv, which also provides additional metadata for the dataset. index.csv has the following columns:

  • id: The dataset ID, i.e. the name of the subdirectory of datasets the data is kept in.
  • type: one of environmental, cultural.
  • name
  • description
  • year
  • author
  • reference

Explicit registration may be somewhat redundant in keeping the dataset ID in two places - the registry and the directory name - but allows for better control over what is considered ready for import, thus makes it possible to work on datasets in their "final place" until they are finished.

Current datasets:

  • EA
  • Binford
  • MODIS
  • CRUTS
  • TEOW
  • GTOPO30

Relations

Each dataset may contribute its own set of societies. Relations among the societies from different datasets are stored in a CSV mapping file societies_mapping.csv in the form

id,related
<soc-id>,<qualified-soc-id>[;<qualified-soc-id>]*

where <qualified-soc-id> is a string composed as <dataset-abbr>-<soc-id>.

Currently the only type of relation specified in the data is "equivalence", but this may be a misnomer, since this implies that the sets of equivalent societies form a partition of the set of all societies, which is not the case.

Identify and tag version 1

We need to identify which commit to use as our version one marker and tag it so Zenodo can archive a V1

Fix incorrect xd_ids

Are these related to missing Jorgensen/SCCS data?

  • ERROR sicoli_and_holton2014: invalid xd_id xd1425
  • ERROR dunn_et_al2011_utoaztecan: invalid xd_id xd1439
  • ERROR dunn_et_al2011_utoaztecan: invalid xd_id xd1440
  • ERROR sicoli_and_holton2014: invalid xd_id xd1434
  • ERROR sicoli_and_holton2014: invalid xd_id xd1431
  • ERROR sicoli_and_holton2014: invalid xd_id xd1423
  • ERROR sicoli_and_holton2014: invalid xd_id xd1438

Can we include the parent id for every glottolog id in the language csv?

If parent id was a column in the csv, users could do their own mapping of dialects to iso codes.

E.g.

asan1239 > does not have an iso code in the csv file, or any 'parent' info

  • i had to go to glottolog to decide whether to link asan1239 to iso [twi] twii1234 or iso [aka] akan1250.

  • and even if we want to totally drop iso codes, having the parent info would allow users to identify relationships among dialects based on a shared parent.

@xrotwang, what do you think?

Add new environmental data from ecoclimate.org

Carlos Botero has extracted data from ecoclimate for d-place societies. Advantage is that ecoclimate data are closer match to time foci of d-place cultural data. Carlos has data, and we (Mike Gavin and Patrick Kavanagh) do too, when team is ready to add it to d-place.

Once PR #80 is merged, `sources.bib` should be completed

Tasks to clean/complete datasets/sources.bib:

  • Find records with citation_ea and citation_binford, figure out if they are the same, if so, identifiy, i.e. complete the record and remove the citation_* fields. If not, leave as is.
  • Find records without glottolog_* field and complete them.

Update text on "how to cite" that is included at top of every downloaded csv file

Research that uses data from D-PLACE should cite both the original source(s) of the data and the paper by Kirby et al. in which D-PLACE was first presented (e.g., research using cultural data from the Binford Hunter-Gatherer dataset: "Binford (2001); Binford and Johnson (2006); Kirby et al. 2016)." The reference list should include the date data were accessed and URL for D-PLACE (https://d-place.org), in addition to the full references for Binford (2001), Binford and Johnson (2006), and Kirby et al. 2016.

[changed from "Kirby et al. Submitted" to "Kirby et al. 2016." Open to other adjustments.

dplace check should check phylogenies too.

Add some more checks

  • each directory must contain summary.trees, which contains ONE newick tree
  • each directory must be listed in index.csv
  • taxa.csv must contain all tips names in summary.trees (or just the linkable ones?)

Add more checks to dplace check

It strikes me that the specification in ./datasets/README.md could make the start of a set of testcases for the datasets e.g.

  • each dataset must have variables.csv which contains a set of columns.
  • each dataset must have data.csv with a set of specific columns
  • each dataset must be listed in index.csv
  • each dataset may have other files which must contain specific columns
  • some columns have a distinct format (e.g. Lat/Long should be floats, glottocode should a valid glottocode)

Identify glottolog mapping of Binford B62.

B62 ("Bambote of Lake Tanganyika") is currently mapped to a placeholder glottocode [tempxx04] as we do not know what it should be:

"Note that Terashima (1980), the main source of cultural data for this group, says further research is needed to confirm whether Bambote speak language of a neighbouring group, or their own language. Both the Bambote and their neighbours say the group speaks a distinct language, ""Kimbote."" Rebecca Grollemund said this society should NOT be matched to iso ""tap""; she said ""Bambote is a pygmy language related to D20 languages"""

R's default phylogenetics library APE misreads glottolog global tree

This will generate a lot of support emails so we should fix it.

> library('ape')
> tree <- read.nexus('summary.trees')
> plot(tree)

Error in plot.phylo(tree) : there are single (non-splitting) nodes in your tree; you may need to use collapse.singles()

# and collapse.singles doesn't work either:
> tree <- collapse.singles(tree)

Error in tree$node.label[oldnodes - n] : only 0's may be mixed with negative subscripts

Unsure where this error is coming from, I will have to investigate when I get time.

Add Jorgensen WNAI data

These dplace check errors should go away:

  • ERROR sicoli_and_holton2014: invalid soc_id J34
  • ERROR sicoli_and_holton2014: invalid soc_id J4
  • ERROR sicoli_and_holton2014: invalid soc_id J38
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J85
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J86
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J87
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J135
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J83
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J81
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J159
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J79
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J82
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J117
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J72
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J71
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J114
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J115
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J116
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J118
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J146
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J145
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J84
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J124
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J133
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J134
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J132
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J131
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J129
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J130
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id J78
  • ERROR sicoli_and_holton2014: invalid soc_id J152
  • ERROR sicoli_and_holton2014: invalid soc_id J153
  • ERROR sicoli_and_holton2014: invalid soc_id J156
  • ERROR sicoli_and_holton2014: invalid soc_id J155
  • ERROR sicoli_and_holton2014: invalid soc_id J147
  • ERROR sicoli_and_holton2014: invalid soc_id J148
  • ERROR sicoli_and_holton2014: invalid soc_id J149
  • ERROR sicoli_and_holton2014: invalid soc_id J150
  • ERROR sicoli_and_holton2014: invalid soc_id J151
  • ERROR sicoli_and_holton2014: invalid soc_id J93
  • ERROR sicoli_and_holton2014: invalid soc_id J94
  • ERROR sicoli_and_holton2014: invalid soc_id J35
  • ERROR sicoli_and_holton2014: invalid soc_id J40
  • ERROR sicoli_and_holton2014: invalid soc_id J42
  • ERROR sicoli_and_holton2014: invalid soc_id J43
  • ERROR sicoli_and_holton2014: invalid soc_id J41
  • ERROR sicoli_and_holton2014: invalid soc_id J157
  • ERROR sicoli_and_holton2014: invalid soc_id J158
  • ERROR sicoli_and_holton2014: invalid soc_id J2
  • ERROR sicoli_and_holton2014: invalid soc_id J1

Check discrepancies in Kate/repository language file

Here are the differences between my language file and the file in the repository. The first list are changes I've just made (patches have been proposed, not yet pushed), based on comments from Harald.

soc_id,xd_id,glottocode,NEWglottoID,NEWiso,kate_change
Cj2,xd588,nort3137,east2690,avl,Changed from ars to avl on 8 April 2017 based on comment from H. Hammarström: The sources pertain to Bedouin tribes of the Sinai (like the Rwala) they are covered in the Eastern Egyptian Bedawi Arabic entry in Ethnologue [avl].
Cj4,xd590,jewi1240,akka1240,akk,Changed from tmr to akk on 8 April 2017 based on comment from H. Hammarström: several [of the sources] deal with Babylonia in Hammurabi's time. The language spoken by this culture was Akkadian [akk].
Ed4,xd647,nort2747,horn1235,hrm,"Changed from hea to hrm on 8 April 2017 based on comment by H. Hammarström: Based on where Ruey worked, language should be cqd or hrm (they are intelligible, which is why glottolog only has one entry for them)."
Eh1,xd686,apuc1241,akab1249,abj,Changed to abj from apq on 8 April 2017 based on comments from H. Hammarström: Man (1885) worked most with (and whose variety he spoke best) Bojingya or Aka-Bea [abj]
Ia3,xd743,bata1298,tuwa1243,ifk,"Changed to ifk from ifb on 8 April 2017 based on comment from H. Hammarström: Barton is source, and while he doesn't say specifically which group his observations pertain to, he was working using Kiangan as his base, which would make it Ifugao-Tuwali [ifk]"
Ic2,xd764,alor1247,abui1241,abz,Changed from aol to abz on 8 April 2017 based on comment from H. Hammarström: Sources are DuBois and Nicolspeyer. They both worked with Abui (abz) speakers.
Nc1,xd1107,wint1259,noml1242,nol,Changed 15Nov2016 to nol/noml1242 to differentiate Nomlaki from Wintu wnw/nucl1651
Nc14,xd1112,wint1259,nucl1651,wnw,Changed 15Nov2016 to wnw/nucl1651 to differentiate Wintu from Nomlaki nol/noml1242 

The second list are differences I still need to check. Some may be changes made by you @xrotwang and @SimonGreenhill that I didn't note in my file.

soc_id,xd_id,glottocode,KATEglottoID,iso_code,KATEiso,family_name,kate_notes
Ae21,xd140,yela1238,kela1254,yel,kel,Atlantic-Congo,"ISO recognized by SIL, but considered bookkeeping by Glottolog"
Ae23,xd142,ngan1302,lali1242,nxd,lal,Atlantic-Congo,"ISO recognized by SIL, but considered bookkeeping by Glottolog; could POTENTIALLY be linked to nxd - ngan1302, as a few online sources suggest that Lalia people speak ""Longando"" (Ngando, nxd), which wikipedia reports is a sister(?) langage of Lalia (lal)."
Ch10,xd547,baya1255,baya1254,,ron,Indo-European,0
ch25,xd563,mold1248,mold1247,mol,ron,Indo-European,0
Eg7,xd683,oriy1255,nucl1284,ory,ori,Indo-European,0
Id12,xd775,jirj1239,yiry1247,yyr,yyr,Pama-Nyungan,"Note, previously yiy and yiry1245, however both codes have been retired"
Nc6,xd1137,kumi1248,tipa1240,dih,dih,Cochimi-Yuman,0
Nh20,xd1271,kumi1248,kimi1238,dih,dih,Cochimi-Yuman,0
Nh9,xd1285,nort1550,picu1240,twf,twf,Kiowa-Tanoan,0

Add a RELEASING.md doc

Add a RELEASING.md doc to dplace-data, describing relations among the different pieces of data, like which ones are generated, from which input, and when.

This could replace/remove this

Fix these incorrect glottocodes

Probably an outcome of moving to glottolog3, although the last two might need one or other chosen

  • ERROR bouckaert_et_al2012: invalid glottocode nucl1284
  • ERROR bowern_and_atkinson2012: invalid glottocode nucl1331
  • ERROR bowern_and_atkinson2012: invalid glottocode ump1239
  • ERROR chang_et_al2015: invalid glottocode nucl1284
  • ERROR gray_et_al2009: invalid glottocode bauu1243, nort2843
  • ERROR gray_et_al2009: invalid glottocode bana1287, nuii1237

Add tests for phylogenies directory

The phylogenies directory could also be tested:

  • each directory must contain summary.trees
  • each directory must contain taxa.csv
  • each directory must be listed in index.csv
  • taxa.csv must contain all tips names in summary.trees (or just the linkable ones?)
  • taxa.csv column glottocode must be a valid glottocode or null
  • taxa.csv column xd_ids must contain valid xd_ids or null
  • taxa.csv column soc_ids must contain valid soc_ids or null

Population size data?

It used to be in EA202, but it's not in our data. I know we decided to leave it out for various reasons (@kirbykat?) but it'd be nice to have it in the database

Add SCCS Data

These dplace check errors should go away:

  • ERROR bouckaert_et_al2012: invalid soc_id SCCS48
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS56
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS51
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS57
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS49
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS58
  • ERROR bouckaert_et_al2012: invalid soc_id SCCS54
  • ERROR chacon_and_list2015: invalid soc_id SCCS167
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id SCCS153
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id SCCS147
  • ERROR chang_et_al2015: invalid soc_id SCCS51
  • ERROR chang_et_al2015: invalid soc_id SCCS49
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id SCCS152
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id SCCS137
  • ERROR dunn_et_al2011_utoaztecan: invalid soc_id SCCS151
  • ERROR gray_et_al2009: invalid soc_id SCCS86
  • ERROR gray_et_al2009: invalid soc_id SCCS109
  • ERROR gray_et_al2009: invalid soc_id SCCS113
  • ERROR gray_et_al2009: invalid soc_id SCCS102
  • ERROR gray_et_al2009: invalid soc_id SCCS85
  • ERROR gray_et_al2009: invalid soc_id SCCS112
  • ERROR gray_et_al2009: invalid soc_id SCCS98
  • ERROR gray_et_al2009: invalid soc_id SCCS107
  • ERROR gray_et_al2009: invalid soc_id SCCS104
  • ERROR gray_et_al2009: invalid soc_id SCCS105
  • ERROR gray_et_al2009: invalid soc_id SCCS108
  • ERROR gray_et_al2009: invalid soc_id SCCS81
  • ERROR gray_et_al2009: invalid soc_id SCCS83
  • ERROR gray_et_al2009: invalid soc_id SCCS111
  • ERROR gray_et_al2009: invalid soc_id SCCS106
  • ERROR gray_et_al2009: invalid soc_id SCCS87
  • ERROR gray_et_al2009: invalid soc_id SCCS100
  • ERROR grollemund_et_al2015: invalid soc_id SCCS14
  • ERROR grollemund_et_al2015: invalid soc_id SCCS13
  • ERROR grollemund_et_al2015: invalid soc_id SCCS11
  • ERROR grollemund_et_al2015: invalid soc_id SCCS10
  • ERROR grollemund_et_al2015: invalid soc_id SCCS6
  • ERROR grollemund_et_al2015: invalid soc_id SCCS12
  • ERROR grollemund_et_al2015: invalid soc_id SCCS4
  • ERROR grollemund_et_al2015: invalid soc_id SCCS8
  • ERROR grollemund_et_al2015: invalid soc_id SCCS7
  • ERROR grollemund_et_al2015: invalid soc_id SCCS5
  • ERROR grollemund_et_al2015: invalid soc_id SCCS3
  • ERROR grollemund_et_al2015: invalid soc_id SCCS16
  • ERROR kitchen_et_al2009: invalid soc_id SCCS37
  • ERROR kitchen_et_al2009: invalid soc_id SCCS44
  • ERROR lee_and_hasegawa2011: invalid soc_id SCCS117
  • ERROR michael_et_al2015: invalid soc_id SCCS173
  • ERROR michael_et_al2015: invalid soc_id SCCS177
  • ERROR sicoli_and_holton2014: invalid soc_id SCCS148
  • ERROR sicoli_and_holton2014: invalid soc_id SCCS130
  • ERROR sicoli_and_holton2014: invalid soc_id SCCS122
  • ERROR sicoli_and_holton2014: invalid soc_id SCCS129
  • ERROR sicoli_and_holton2014: invalid soc_id SCCS128

Command to list societies covered for given variables

To easily assess D-PLACE coverage for particular topics, it would be nice to be able to list societies (including glottocode, top-level language family, region and macroarea) given a set of variables (or datasets) and maybe ways to filter NA or missing data values.

Rearrange trees

Re-arrange trees and the corresponding sub-commands to regenerate them. Concerns:

  1. Re-use phylogenies functionality.
  2. Remove unneeded tips from trees.
  3. Remove unneeded tree files.
  4. Add soc_id mapping so that .taxa property works.
    etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.