Giter VIP home page Giter VIP logo

divine's Introduction

Divine_workflow

Divine : Prioritizing Genes for Rare Mendelian Disease in Whole Exome Sequencing Data

Divine is designed to make a daily-routine molecular diagnosis with high-throughput whole exome sequencing data more efficient. Using both patient phenotypic information and genetic variants, Divine that integrates patients’ phenotype(s) and WES data with 30 prior biological knowledge (e.g., human phenotype ontology, gene ontology, pathway database, protein-protein interaction networks, etc.) to prioritize potential disease-causing genes.

Divine_workflow

Website

https://github.com/hwanglab/divine

Tutorial

A tutorial is available, from the installation to case studies.

Input

  • a text file containing Human Phenotype Ontology (HPO) IDs (e.g., HP:0002307) that describe patient's clinical features

  • or (and) VCF file

Algorithm

Output

  • When only HPO IDs are given, Divine generates a prioritized gene list and an inferred disease list.

  • If VCF file (or with HPO IDs), Divine also generates an annotated variant table with a ranking score in Microsoft Excel format.

Developer note

  • Divine is in active development. Please check the above website for newer available versions. Please contact the developer at hongc2{at}ccf.org to report any problems or for additional help.

Setup

Prerequisite:

  • Linux, 4 GB RAM, and 130 GB available hard disk space
  • python 2.7+
  • make sure that 'pip', 'wget' (with Internet connection), 'grep', 'awk', and 'sort' command in $PATH
  • locate your shell configuration file (e.g., $HOME/.bash_profile, $HOME/.profile, or $HOME/.cshrc)
  • It does not require a super user (root) account.

Python modules to be installed

Divine requires the following modules but, during the setup process, the modules will be installed automatically if necessary.

  • hgvs: https://github.com/counsyl/hgvs

  • hpo_similarity: https://github.com/jeremymcrae/hpo_similarity

  • *ConfigParser, backports-abc, html5lib==0.999999999, backports.ssl-match-hostname, certifi,decorator, matplotlib, networkx, nose, numpy, pandas, pygr, pyparsing, pysam, python-dateutil, pytz,scipy, scikit-learn, singledispatch, six, tornado, xlwt, dill, ped_parser, fastsemsim, genmod

  • [*]: the python modules are defined in the requirements.txt.

Install

download divine source codes from github

$ git clone https://github.com/hwanglab/divine.git

Option 1: fresh install

It requires downloading 21 GB database files and so be patient!

$ setup.py --install

Optional 2: Previously installed but want to upgrade Divine database/resource/examples/3rd-party python modules (when you previously installed Divine)

$ setup.py --install --update_db

Configuration

  • Get updated environment variables (PATH, DIVINE, and PYTHONPATH) at the end of the installation setup message. Then,

  • Add the environment variables into your shell configuration (e.g., $HOME/.bash_profile, $HOME/.profile, or $HOME/.cshrc)

  • Make sure that the new configuration is applied by

    • logoff and login your account, or
    • running
    $ source $HOME/your_shell_config_file
    

Uninstall

Optional 1: only uninstall python modules of dependency

$ setup.py --uninstall

Optional 2: also, uninstall resource files

$ setup.py --uninstall --remove_db

Usage

Input: a text file containing HPO IDs

First, visit either http://compbio.charite.de/phenomizer, https://hpo.jax.org/app, or https://mseqdr.org/search_phenotype.php. Enter the patient phenotype terms, description, or specific keywords you think important. Get the best matching HPO IDs. Paste the HPO IDs in the format of HP:XXXXXXX (e.g., HP:0002307) into a text file line by line and save it as a text file (e.g., P0001.hpo)

For example, an HPO file looks like

$ cat P0001.hpo
#my_patient_ID
HP:0002307
HP:0000639
HP:0001252
HP:0100543
HP:0002120
HP:0000708
HP:0001344
HP:0008872
HP:0000510
HP:0001513
HP:0006979
HP:0000752
HP:0012469
HP:0000577
HP:0001010
HP:0006887
HP:0002650
HP:0005469
HP:0002312
HP:0010808
HP:0002136
HP:0200085
HP:0002311

Input: a VCF file

Any VCF file following the standard format (e.g., https://samtools.github.io/hts-specs/VCFv4.2.pdf). Refer to by GATK, samtools, or, freebayes to convert FASTQ to VCF file.

Output

Known disease matching by patient phenotypes

hpo_to_diseases.tsv: From an input HPO file, Divine prioritize which disease the patient likely has. The output format is

$ head -n3 hpo_to_disease.tsv
#disease_ID    genes    score[FunSimMax]
OMIM:101600    FGFR1,FGFR2    0.000911782
OMIM:101200    FGFR2    0.000674322
:
:
  • disease_ID: OMIM, ORPHANET, or DECIPHER disease ID
  • genes: gene symbol
  • score[FunSimMax]: patient phenotype matching score to the disease

Gene rank

  • gene: gene symbol
  • predicted_score: finalized score after heat diffusion
  • seed_score: a score combined by phenotype matching score and genetic damage score
  • gt_dmg_score: a genetic pathogenicity score assessed in VCF file
  • pheno_score: score[FunSimMax]
$ head -n6 gene_rank.tsv
#gene   predicted_score seed_score      gt_dmg_score    pheno_score     contain_known_pathogenic
FGFR2   0.00925436      1.60806e-06     0.00545116      0.00117607      NA
EVC     0.00634702      1.08469e-06     0.00981397      0.000439834     NA
VPS13B  0.00477042      8.25496e-07     0.00322986      0.00102016      NA
CCT4    0.0045629       7.92439e-07     0.00648582      0.000487018     NA
ZMYND11|ENSP00000452959 0.00405376      6.66455e-07     0.00745641      0.000356124     NA

Gene enrichment from known diseases matched by patient phenotypes

$ head -n6 diseases_rank.tsv
  • disease_ID: disease ID
  • disease_description: disease description
  • inheritance: - inheritance model, autosomal recessive or dominant assoc_pheno_genes (^:mutated, *:known_pathogenic)known to be associated with the disease - ^: Does this gene have a mutated variant in the patient VCF file? - *: if yes, then variant is reported to a known pathogenic in either ClinVar or HGMD?
  • num_of_assoc_pheno_genes: the number of genes associated with the disease
  • num_of_gt_dmg_genes: the number of genes containing variants
  • pheno_match_score: A phenotype matching score to the disease
  • avg_combined_dmg_score: average combined pathogenic score
  • max_combined_dmg_score: maximum combined pathogenic score
  • avg_harmonic_score: average finalized score yi
  • max_harmonic_score: max finalized score yi
  • external_genes_of_interest(kegg-ppi_or_GO_enriched[harmonic_score]): mutated gene enriched by KEGG pathway, PPI, or Gene Ontology database
  • PPI-KEGG_pathway_desc: PPI and KEGG pathway description

Annotated VCF files

  • divine.vcf A VCF file annotated by Varant where we improve the original method significantly. Refer to Varant website (http://compbio.berkeley.edu/proj/varant).

  • vfilter.vcf A subset of the VCF file above (i.e., divine.vcf). This VCF file contains variants after filtering out all variant calls that are either located in an intergenic region or its MAF is high or in repeated region.

Prioritized genes and Microsoft Excel file

  • divine.xls An excel table generated by Varant. Divine annotates a ranking score per gene so that you can sort the variant list by the ranking score (refer to 'Comments_on_Genes', an interpreted column in the 2nd tab, VCF).

Log files

  • check log files under a subdirectory logs in an output directory

Cases

  • When HPO file is only given,
$ divine.py -q dir_to_the_hpo/P0001.hpo -o dir_to_output/P0001
  • When VCF file is only given,
$ divine.py -v dir_to_the_vcf/P0002.vcf -o dir_to_output/P0002
  • When both HPO file and VCF file are given,
$ divine.py -q dir_to_the_hpo/P0003.hpo -v dir_to_the_vcf/P0003.vcf -o dir_to_output/P0003
  • For family sample analysis, specify proband ID and pedigree file.
$ divine.py -q dir_to_the_hpo/proband.hpo -v dir_to_the_vcf/multisample.vcf -f dir_to_ped/pedigree.ped -p proband_id -o dir_to_output/proband_id

Examples

We include 4 to 5 demo samples in the resource package,

$ cd $DIVINE/gcn/bin/prioritize/examples
$ ./runme_angelman.sh #when only HPO data is available
$ ./runme_pfeisffer_noHpo.sh #when only VCF is available 
$ ./runme_pfeisffer.sh #when both HPO and VCF are available
$ ./runme_millerSyndrome.sh #when both HPO and VCF are available
$ ./runme_trio.sh #analyze family samples (PED file requires and sample ID should be matched with the ones in VCF file)

Help

usage: divine.py [-h] [-q HPO_QUERY] [-v VCF] [-o OUT_DIR] [-c VCF_FILTER_CFG]
                 [-f PED] [-p PROBAND_ID] [-d EXP_TAG] [-i INDEL_FIDEL]
                 [-K TOP_K_DISEASE] [-r GO_SEED_K] [-e REF_EXON_ONLY]
                 [-C CADD] [-j COSMIC] [-D DBLINK] [-H HGMD] [-k VKNOWN]
                 [-t CAPKIT] [--reuse]

Divine (v0.1.2) [author:hongc2<at>ccf.org]

optional arguments:
  -h, --help            show this help message and exit
  -q HPO_QUERY, --hpo HPO_QUERY
                        Input patient HPO file. A file contains HPO IDs (e.g.,
                        HP:0002307), one entry per line. Refer to
                        http://compbio.charite.de/phenomizer or
                        https://mseqdr.org/search_phenotype.php
  -v VCF, --vcf VCF     input vcf file
  -o OUT_DIR, --out_dir OUT_DIR
                        output directory without white space. If not exist,
                        the directory will be created.
  -c VCF_FILTER_CFG, --vcf_filter_cfg VCF_FILTER_CFG
                        vcf filter configuration file [None]
  -f PED, --family_fn PED
                        family pedigree file [None]
  -p PROBAND_ID, --proband_id PROBAND_ID
                        proband sample ID [None]
  -d EXP_TAG, --exp_tag EXP_TAG
                        specify experiment tag without white space. The tag
                        will be contained in the output file name.[None]
  -i INDEL_FIDEL, --indel INDEL_FIDEL
                        the level of fidelity of indell call in VCF, [1]:low
                        (e.g., samtools), 2:high (GATK haplotype caller)
  -K TOP_K_DISEASE      focus on top-K disease associated with the input
                        phenotypes [0], set 0 to consider all
  -r GO_SEED_K, --go_seed_k GO_SEED_K
                        the number of top-k diseases for GO enrichment [3];
                        set to 0 to disable
  -e REF_EXON_ONLY, --ref_exon_only REF_EXON_ONLY
                        the annotation process only runs on RefSeq coding
                        regions 0:No, [1]:Yes
  -C CADD, --cadd CADD  use CADD prediction score, 0:No, [1]:Yes
  -j COSMIC, --cosmic COSMIC
                        enable COSMIC, [0]:No, 1:Yes
  -D DBLINK, --dblink DBLINK
                        enable dblink, [0]:No, 1:Yes
  -H HGMD, --hgmd HGMD  enable HGMD (requires a license), [0]:No, 1:Yes
  -k VKNOWN, --vknown VKNOWN
                        apply variant-level pathogenic annotation (e.g.,
                        either ClinVar or HGMD) to prioritization strategy,
                        0:No, [1]:Yes
  -t CAPKIT             capture kit symbol [None],SureSelect_V6,SeqCapEZ_Exome
  --reuse               Reuse previous annotation file (divine.vcf) if it is
                        available [False]

FAQ

  • Q.1: I have a VCF file generated from either WGS or WES dataset, and the number of variants is a lot! It seems that Divine is slow and I want to have a result as soon as possible.

  • A.1: Depending on your hardware specification and the number of variants in an input VCF file, the computational time varies. In my computer setting (e.g., Intel Core 2 Duo @ 2.93GHz), it takes 30 min to handle 37,000 variants. The computational bottleneck is directly associated with hard disk drive I/O. HDD connected to USB 3.0 or SDD (solid-state drive) can be helpful. Also, we are actively working on Divine to speed up the process. For now, Divine is optimized to analyze WES or targeted panel samples but not WGS. As a default option, Divine focuses on NCBI RefGene exon regions with +/-20bp flanking. However, be aware that it may not detect a pathogenic variant in an intergenic region or up/downstream. For a VCF file containing a small number of variants, we suggest -e 0 instead.

  • Q.2: I don't like a default filtering scheme used in Divine. I want my own filtering strategy (e.g., include a specific flag in FILTER; not to use ExAC; 0.03 for MAF cutoff).

  • A.2: open $DIVINE/gcn/config/filterconf.txt and edit the configuration file. For example, set excl=LowQual to filter out all LowQual in the VCF file. Specify the option with -c in Divine option. Later, we will provide more comprehensive instruction for this file. The default configuration is

[fltr]
excl=LowDP:LowGQ:LowGQX:LowQual:IndelGap:SnpGap
#incl=PASS
[infoflag]
excl=DB137
[infoval]
kgaf=yes
espaf=yes
exacaf=yes
splice_dist=20
hgmd_filter=2
regulome=no
#min_depth=10
[reg]
incl=CodingExonic:NonCodingExonic:CodingIntronic:NonCodingIntronic
[freq]
incl=0.01
[freq_cli]
incl=0.05
[gid]
min=0.1
  • Q.3: I purchase HGMD professional license and how can I use this feature?

  • A.3: Contact to hongc2ccf.org

  • Q.4: Previously, I ran Divine on a patient sample dataset which took so long. Now, I want to prioritize genes with a different setting (e.g., filtering condition or a different option in divine.py) and I am sure that I didn't update Divine/GCN database. How can I make the repeat analysis faster?

  • A.4: Unless Divine database is changed, or purchase HGMD license newly, or divine.vcf created previously is truncated, you can reuse the previous annotated VCF file using --reuse. If you want to compare a new result with the previous one, try

$ $DIVINE/gcn/bin/prioritize/divine.py -q dir_to_the_hpo/P0005.hpo \
   -v dir_to_the_vcf/P0005.vcf --reuse -d rev -o dir_to_the_output/P0005
  • Q.5: For the same input and configuration, will Divine generate the same output?

  • A.5: Yes, Divine is deterministic. There is no randomness in the analysis. Also, Divine generates all log files so that you can audit/trace the previous experimental results and database maintenance at any time.

  • Q.6: I think database or annotation Divine provides is outdated. I would like to keep all the latest database so that I can improve my diagnosis result at best.

  • A.6: Divine uses Varant as an annotation framework. We will frequently update the database. Each resource package will be archived. Furthermore, we plan to provide a stream pipeline to update annotation database.

  • Q.7: I know Divine is designed for germline or constitutional disease samples. Can I use Divine for somatic mutation (cancer sample) analysis?

  • A.7: COSMIC annotation is available. Later, more feature will be available.

  • Q.8: I have a patient dataset but I concern if Divine collects the patient dataset without my permission and send it somewhere.

  • A.8: This standalone package never collects any user information or input dataset the user works. But, we need your feedback and bug report!

  • Q.9: Does Divine support analysis for trio samples (e.g., proband, mother, and father)?

  • A.9: Yes, if VCF file contains multiple samples, then trio analysis can be done in divine.xls. The next release of Divine will provide more systematic trio analysis. A demo family sample is available at $DIVINE/gcn/bin/prioritize/examples.

  • Q.10: I don't have a Linux computer. Can Divine run on MacOS or Windows?

  • A.10: Not now but we are currently working on the compatibility issue.

  • Q.11: What is the memory requirement?

  • A.11: In Varant annotation step, memory usage peaks around 1.5GB.

  • Q.12: My company wants to use Divine.

  • A.12: Divine is free for academic or research purpose. Contact to hongc2{at}ccf.org for commercial use.

  • Q.13: I follow this README file and help. My Divine run fails. Can you help me?

  • A.13: Four sample scripts with datasets in $DIVINE/gcn/bin/prioritize/examples are available. Use the examples as a template. All three scripts should work if your installation were successful. If the problem is not resolved, send me a log file (e.g., divine_err.log) by running,

$ your_divine_command 2>&1 | tee divine_err.log
  • Q.14: Can Divine detect a gene previously never known to be associated with a specific disease?

  • A.14: This is a challenging task, but it is essential. Currently, Divine uses gene ontology enrichment and also it uses a system biology approach (heat diffusion model) over STRING protein functional network.

Change Log

  • v.0.1.1 (June 15 2016)
    • Original release
  • v.0.1.2 (Sep 12 2018)
    • Minor fix
    • protein domain pathogenicity
    • enhanced the new gene-to-disease association discovery
    • Add trio sample in the demo example directory

License

GNU GENERAL PUBLIC LICENSE https://www.gnu.org/licenses/gpl-3.0.en.html

Disclaimer

Not intended for direct clinical application. Divine suggests an order of genes to be inspected so that it can make molecular diagnosis efficient. The validation is the responsibility of the user. Neither Divine developer nor any software module integrated is responsible for clinical actions that may result from the use of this software. By using this tool, the user assumes all responsibility for any information that may be generated.

Reference

Contact

  • Changjin Hong, Ph.D (hongc2{at}ccf.org)

divine's People

Contributors

cjhong avatar

Stargazers

Karan Kapuria avatar  avatar Perry avatar  avatar Jeff Hammerbacher avatar Juan Caballero avatar  avatar Najeeb Ashraf Syed avatar Hyunmin Kim (Brandon) avatar  avatar  avatar Wendy Wong avatar

Watchers

James Cloos avatar data_traveller avatar  avatar

Forkers

kalon33

divine's Issues

KeyError: '*' when a given position is not covered in a VCF

When an allele is missing due to an upstream deletion, it is marked as "*" in the ALT field from the VCF as per https://samtools.github.io/hts-specs/VCFv4.2.pdf

Currently, that is not dealt properly by Divine, leading to that error:

Traceback (most recent call last):
  File "/opt/divine/gcn/bin/annotpipe.py", line 118, in <module>
    main()
  File "/opt/divine/gcn/bin/annotpipe.py", line 115, in main
    ap.annotate_varant()
  File "/opt/divine/gcn/bin/annotpipe.py", line 83, in annotate_varant
    annotator.main(self.invcf, self.outvcf, self.logger, options)
  File "/opt/divine/gcn/lib/varann/vartype/varant/annotator.py", line 1421, in main
    for annt in snpa.annotate(chrom, pos, ref, alt):
  File "/opt/divine/gcn/lib/varann/vartype/varant/annotator.py", line 880, in annotate
    cdna_pos = self.hgvs.to_cDNA(self.chrom, pos0, ref0, alt0, refseq_acc)
  File "/opt/divine/gcn/bin/hgConvert/hgvs_resource.py", line 91, in to_cDNA
    cdna = pyhgvs.format_hgvs_name(chrom, offset, ref, alt, self.genome, transcript)
  File "/usr/lib/python2.7/dist-packages/pyhgvs/__init__.py", line 1471, in format_hgvs_name
    use_counsyl=use_counsyl)
  File "/usr/lib/python2.7/dist-packages/pyhgvs/__init__.py", line 1434, in variant_to_hgvs_name
    alt = revcomp(alt)
  File "/usr/lib/python2.7/dist-packages/pyhgvs/variants.py", line 15, in revcomp
    return ''.join(_COMP[base] for base in reversed(seq))
  File "/usr/lib/python2.7/dist-packages/pyhgvs/variants.py", line 15, in <genexpr>
    return ''.join(_COMP[base] for base in reversed(seq))
KeyError: '*'

configuration file requirments

I have install the Divine tool (https://github.com/hwanglab/divine/blob/master/documents/tutorial/divine_tutorial.md) but when I run the following command, I have got the error as shown below.
$ divine.py -v ./Pfeiffer.vcf -o ./Pfeiffer.noHpo

IOError: check [beta_fit = /home/genomic-lab/Documents/kfmc/tools/divine/gcndata/snv_training/clin_tr.dill] in the file [/home/genomic-lab/Documents/kfmc/tools/divine/gcn/config/divine.conf]

It is showing related to configuration file that needs the following files in database part.

[database]
ext_disease_to_gene = gcndata/hpo/ALL_SOURCES_disgnet_TYPICAL_FEATURES_diseases_to_genes_to_phenotypes.txt
beta_fit = gcndata/snv_training/clin_tr.dill
esp_to_gene = gcndata/stringDB/est2geneSymbol_20160306.tsv

What I should do to fix the issue.

Best regards,
Hussain

Issues running multi-sample VCF

Hello,

I'm trying to run divine on a multi-sample family VCF. Looks like a PED file is required but the ones I have don't seem to be capable of loading into divine for some reason. I've used the PED files for other software without issue. Here's the exact error I'm getting:

Traceback (most recent call last):
  File "[MASKED]/divine/gcn/bin/prioritize/divine.py", line 1414, in <module>
    main()
  File "[MASKED]/divine/gcn/bin/prioritize/divine.py", line 1342, in main
    dv = Divine(args)
  File "[MASKED]/divine/gcn/bin/prioritize/divine.py", line 99, in __init__
    self.vcf,uargs.ped,uargs.proband_id)
  File "[MASKED]/divine/gcn/lib/utils/lib_ped.py", line 16, in check_consistency_ped_vcf
    family_parser = FamilyParser(family_file, family_type)
  File "build/bdist.linux-x86_64/egg/ped_parser/parser.py", line 102, in __init__
  File "build/bdist.linux-x86_64/egg/ped_parser/parser.py", line 211, in ped_parser
SyntaxError: ped line is in wrong format

Any ideas? Or do you have an example PED file I can compare to?

Issues running tutorial examples

Hello,

I was testing the tutorial datasets (to verify that my installation works). The first one (HPO only) worked fine, but the second one (VCF only, Pfeiffer) failed with the following output:

root@a13a700f319d:/divine/gcn/bin/prioritize/examples# divine.py -v ./Pfeiffer.vcf -o ./Pfeiffer_noHpo
############################################
2018-08-31 20:36:14.181851 [PART:<module>] Divine (v0.1.2) is running on [HPO:None ,VCF:./Pfeiffer.vcf]

############################################
2018-08-31 20:36:14.181916 [INFO:Divine] initializing Divine ...

2018-08-31 20:36:14.181991 [INFO:_set_args] storing input condition ...

2018-08-31 20:36:14.182265 [INFO:_set_args] prepared log directory[./Pfeiffer_noHpo/logs]  ...

2018-08-31 20:36:14.182914 [INFO:<module>] reading configuration file [_read_config;/divine/gcn/config/divine.conf] ...

2018-08-31 20:36:14.184094 [INFO:<module>] done. [_read_config]

2018-08-31 20:36:14.184240 [INFO:<module>] capturing user command line [record_commandline] ...

2018-08-31 20:36:14.184837 [INFO:<module>] done. [record_commandline]

2018-08-31 20:36:14.184940 [INFO:<module>] <divine> initialization completed [_set_args]

opening VCF [./Pfeiffer.vcf] and parse heads ...
predicting gender from the sample [./Pfeiffer.vcf]
gender identified [1], Done.
Sample ID [manuel] is identified for a proband analysis!
setting up damaging factors ...
2018-08-31 20:36:14.521744 [INFO:<module>] VCF is going to be masked by RefGene coding region

2018-08-31 20:36:14.521898 [INFO:<module>] done. initialization

2018-08-31 20:36:14.522384 [INFO:<module>] analyzing variants on [./Pfeiffer.vcf] ...

2018-08-31 20:36:14.522525 [INFO:<module>] annotating VCF file[vannotate;./Pfeiffer.vcf] ...

Traceback (most recent call last):
  File "/divine/gcn/bin/prioritize/divine.py", line 1414, in <module>
    main()
  File "/divine/gcn/bin/prioritize/divine.py", line 1368, in main
    dv.vannotate(args.reuse)
  File "/divine/gcn/bin/prioritize/divine.py", line 449, in vannotate
    cRef = annotateRegion.RefGeneUcscTB(work_dir=self.out_dir,logger=self.logger)
  File "/divine/gcn/lib/varann/vartype/varant/annotateRegion.py", line 25, in __init__
    raise IOError('refseq file [%s] not exist!'%self.refGene_fn)
IOError: refseq file [/divine/gcndata/refgene/refseq.txt] not exist!

I installed this using the Docker's python:2 image following the exact commands provided in the tutorial. Is there an additional step not listed to acquire the refseq.txt file? I found no mention of it in the tutorial.

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.