Coder Social home page Coder Social logo

fuc's Introduction

README

image

Documentation Status

image

image

image

Introduction

The main goal of the fuc package (pronounced "eff-you-see") is to wrap some of the most frequently used commands in the field of bioinformatics into one place.

The package is written in Python, and supports both command line interface (CLI) and application programming interface (API) whose documentations are available at the Read the Docs.

Currently, fuc can be used to analyze, summarize, visualize, and manipulate the following file formats:

  • Sequence Alignment/Map (SAM)
  • Binary Alignment/Map (BAM)
  • CRAM
  • Variant Call Format (VCF)
  • Mutation Annotation Format (MAF)
  • Browser Extensible Data (BED)
  • FASTQ
  • FASTA
  • General Feature Format (GFF)
  • Gene Transfer Format (GTF)
  • delimiter-separated values format (e.g. comma-separated values or CSV format)

Additionally, fuc can be used to parse output data from the following programs:

Your contributions (e.g. feature ideas, pull requests) are most welcome.

Author: Seung-been "Steven" Lee
Email: [email protected]
License: MIT License

Citation

If you use fuc in a published analysis, please report the program version and cite the following article:

Lee et al., 2022. ClinPharmSeq: A targeted sequencing panel for clinical pharmacogenetics implementation. PLOS ONE.

Support fuc

If you find my work useful, please consider becoming a sponsor.

Installation

The following packages are required to run fuc:

biopython lxml matplotlib matplotlib-venn numpy pandas pyranges pysam scipy seaborn statsmodels

There are various ways you can install fuc. The recommended way is via conda (Anaconda):

$ conda install -c bioconda fuc

Above will automatically download and install all the dependencies as well. Alternatively, you can use pip (PyPI) to install fuc and all of its dependencies:

$ pip install fuc

Finally, you can clone the GitHub repository and then install fuc locally:

$ git clone https://github.com/sbslee/fuc
$ cd fuc
$ pip install .

The nice thing about this approach is that you will have access to development versions that are not available in Anaconda or PyPI. For example, you can access a development branch with the git checkout command. When you do this, please make sure your environment already has all the dependencies installed.

Getting help

For detailed documentations on the fuc package's CLI and API, please refer to the Read the Docs.

For getting help on the fuc CLI:

$ fuc -h
usage: fuc [-h] [-v] COMMAND ...

positional arguments:
  COMMAND
    bam-aldepth  Compute allelic depth from a BAM file.
    bam-depth    Compute per-base read depth from BAM files.
    bam-head     Print the header of a BAM file.
    bam-index    Index a BAM file.
    bam-rename   Rename the sample in a BAM file.
    bam-slice    Slice a BAM file.
    bed-intxn    Find the intersection of BED files.
    bed-sum      Summarize a BED file.
    cov-concat   Concatenate depth of coverage files.
    cov-rename   Rename the samples in a depth of coverage file.
    fa-filter    Filter sequence records in a FASTA file.
    fq-count     Count sequence reads in FASTQ files.
    fq-sum       Summarize a FASTQ file.
    fuc-bgzip    Write a BGZF compressed file.
    fuc-compf    Compare the contents of two files.
    fuc-demux    Parse the Reports directory from bcl2fastq.
    fuc-exist    Check whether certain files exist.
    fuc-find     Retrieve absolute paths of files whose name matches a
                 specified pattern, optionally recursively.
    fuc-undetm   Compute top unknown barcodes using undertermined FASTQ from
                 bcl2fastq.
    maf-maf2vcf  Convert a MAF file to a VCF file.
    maf-oncoplt  Create an oncoplot with a MAF file.
    maf-sumplt   Create a summary plot with a MAF file.
    maf-vcf2maf  Convert a VCF file to a MAF file.
    ngs-bam2fq   Pipeline for converting BAM files to FASTQ files.
    ngs-fq2bam   Pipeline for converting FASTQ files to analysis-ready BAM
                 files.
    ngs-hc       Pipeline for germline short variant discovery.
    ngs-m2       Pipeline for somatic short variant discovery.
    ngs-pon      Pipeline for constructing a panel of normals (PoN).
    ngs-quant    Pipeline for running RNAseq quantification from FASTQ files
                 with Kallisto.
    ngs-trim     Pipeline for trimming adapters from FASTQ files.
    tabix-index  Index a GFF/BED/SAM/VCF file with Tabix.
    tabix-slice  Slice a GFF/BED/SAM/VCF file with Tabix.
    tbl-merge    Merge two table files.
    tbl-sum      Summarize a table file.
    vcf-call     Call SNVs and indels from BAM files.
    vcf-filter   Filter a VCF file.
    vcf-index    Index a VCF file.
    vcf-merge    Merge two or more VCF files.
    vcf-rename   Rename the samples in a VCF file.
    vcf-slice    Slice a VCF file for specified regions.
    vcf-split    Split a VCF file by individual.
    vcf-vcf2bed  Convert a VCF file to a BED file.
    vcf-vep      Filter a VCF file by annotations from Ensembl VEP.

optional arguments:
  -h, --help     Show this help message and exit.
  -v, --version  Show the version number and exit.

For getting help on a specific command (e.g. vcf-merge):

$ fuc vcf-merge -h

Below is the list of submodules available in the fuc API:

  • common : The common submodule is used by other fuc submodules such as pyvcf and pybed. It also provides many day-to-day actions used in the field of bioinformatics.
  • pybam : The pybam submodule is designed for working with sequence alignment files (SAM/BAM/CRAM). It essentially wraps the pysam package to allow fast computation and easy manipulation. If you are mainly interested in working with depth of coverage data, please check out the pycov submodule which is specifically designed for the task.
  • pybed : The pybed submodule is designed for working with BED files. It implements pybed.BedFrame which stores BED data as pandas.DataFrame via the pyranges package to allow fast computation and easy manipulation. The submodule strictly adheres to the standard BED specification.
  • pychip : The pychip submodule is designed for working with annotation or manifest files from the Axiom (Thermo Fisher Scientific) and Infinium (Illumina) array platforms.
  • pycov : The pycov submodule is designed for working with depth of coverage data from sequence alingment files (SAM/BAM/CRAM). It implements pycov.CovFrame which stores read depth data as pandas.DataFrame via the pysam package to allow fast computation and easy manipulation. The pycov.CovFrame class also contains many useful plotting methods such as CovFrame.plot_region and CovFrame.plot_uniformity.
  • pyfq : The pyfq submodule is designed for working with FASTQ files. It implements pyfq.FqFrame which stores FASTQ data as pandas.DataFrame to allow fast computation and easy manipulation.
  • pygff : The pygff submodule is designed for working with GFF/GTF files. It implements pygff.GffFrame which stores GFF/GTF data as pandas.DataFrame to allow fast computation and easy manipulation. The submodule strictly adheres to the standard GFF specification.
  • pykallisto : The pykallisto submodule is designed for working with RNAseq quantification data from Kallisto. It implements pykallisto.KallistoFrame which stores Kallisto's output data as pandas.DataFrame to allow fast computation and easy manipulation. The pykallisto.KallistoFrame class also contains many useful plotting methods such as KallistoFrame.plot_differential_abundance.
  • pymaf : The pymaf submodule is designed for working with MAF files. It implements pymaf.MafFrame which stores MAF data as pandas.DataFrame to allow fast computation and easy manipulation. The pymaf.MafFrame class also contains many useful plotting methods such as MafFrame.plot_oncoplot and MafFrame.plot_summary. The submodule strictly adheres to the standard MAF specification.
  • pysnpeff : The pysnpeff submodule is designed for parsing VCF annotation data from the SnpEff program. It should be used with pyvcf.VcfFrame.
  • pyvcf : The pyvcf submodule is designed for working with VCF files. It implements pyvcf.VcfFrame which stores VCF data as pandas.DataFrame to allow fast computation and easy manipulation. The pyvcf.VcfFrame class also contains many useful plotting methods such as VcfFrame.plot_comparison and VcfFrame.plot_tmb. The submodule strictly adheres to the standard VCF specification.
  • pyvep : The pyvep submodule is designed for parsing VCF annotation data from the Ensembl VEP program. It should be used with pyvcf.VcfFrame.

For getting help on a specific submodule (e.g. pyvcf):

>>> from fuc import pyvcf
>>> help(pyvcf)

In Jupyter Notebook and Lab, you can see the documentation for a python function by hitting SHIFT + TAB. Hit it twice to expand the view.

CLI examples

SAM/BAM/CRAM

To print the header of a SAM file:

$ fuc bam-head in.sam

To index a CRAM file:

$ fuc bam-index in.cram

To rename the samples in a SAM file:

$ fuc bam-rename in.sam NA12878 > out.sam

To slice a BAM file:

$ fuc bam-slice in.bam chr1:100-200 > out.bam

BED

To find intersection between BED files:

$ fuc bed-intxn 1.bed 2.bed 3.bed > intersect.bed

FASTQ

To count sequence reads in a FASTQ file:

$ fuc fq-count example.fastq

FUC

To check whether a file exists in the operating system:

$ fuc fuc-exist example.txt

To find all VCF files within the current directory recursively:

$ fuc fuc-find .vcf.gz

TABLE

To merge two tab-delimited files:

$ fuc tbl-merge left.tsv right.tsv > merged.tsv

VCF

To merge VCF files:

$ fuc vcf-merge 1.vcf 2.vcf 3.vcf > merged.vcf

To filter a VCF file annotated by Ensembl VEP:

$ fuc vcf-vep in.vcf 'SYMBOL == "TP53"' > out.vcf

API examples

BAM

To create read depth profile of a region from a CRAM file:

>>> from fuc import pycov
>>> cf = pycov.CovFrame.from_file('HG00525.final.cram', zero=True,
...    region='chr12:21161194-21239796', names=['HG00525'])
>>> cf.plot_region('chr12:21161194-21239796')

image

VCF

To filter a VCF file based on a BED file:

>>> from fuc import pyvcf
>>> vf = pyvcf.VcfFrame.from_file('original.vcf')
>>> filtered_vf = vf.filter_bed('targets.bed')
>>> filtered_vf.to_file('filtered.vcf')

To remove indels from a VCF file:

>>> from fuc import pyvcf
>>> vf = pyvcf.VcfFrame.from_file('with_indels.vcf')
>>> filtered_vf = vf.filter_indel()
>>> filtered_vf.to_file('no_indels.vcf')

To create a Venn diagram showing genotype concordance between groups:

>>> from fuc import pyvcf, common
>>> common.load_dataset('pyvcf')
>>> f = '~/fuc-data/pyvcf/plot_comparison.vcf'
>>> vf = pyvcf.VcfFrame.from_file(f)
>>> a = ['Steven_A', 'John_A', 'Sara_A']
>>> b = ['Steven_B', 'John_B', 'Sara_B']
>>> c = ['Steven_C', 'John_C', 'Sara_C']
>>> vf.plot_comparison(a, b, c)

image

To create various figures for normal-tumor analysis:

>>> import matplotlib.pyplot as plt
>>> from fuc import common, pyvcf
>>> common.load_dataset('pyvcf')
>>> vf = pyvcf.VcfFrame.from_file('~/fuc-data/pyvcf/normal-tumor.vcf')
>>> af = pyvcf.AnnFrame.from_file('~/fuc-data/pyvcf/normal-tumor-annot.tsv', sample_col='Sample')
>>> normal = af.df[af.df.Tissue == 'Normal'].index
>>> tumor = af.df[af.df.Tissue == 'Tumor'].index
>>> fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(2, 2, figsize=(10, 10))
>>> vf.plot_tmb(ax=ax1)
>>> vf.plot_tmb(ax=ax2, af=af, group_col='Tissue')
>>> vf.plot_hist_format('#DP', ax=ax3, af=af, group_col='Tissue')
>>> vf.plot_regplot(normal, tumor, ax=ax4)
>>> plt.tight_layout()

image

MAF

To create an oncoplot with a MAF file:

>>> from fuc import common, pymaf
>>> common.load_dataset('tcga-laml')
>>> maf_file = '~/fuc-data/tcga-laml/tcga_laml.maf.gz'
>>> mf = pymaf.MafFrame.from_file(maf_file)
>>> mf.plot_oncoplot()

image

To create a customized oncoplot with a MAF file, see the Create customized oncoplot tutorial:

image

To create a summary figure for a MAF file:

>>> from fuc import common, pymaf
>>> common.load_dataset('tcga-laml')
>>> maf_file = '~/fuc-data/tcga-laml/tcga_laml.maf.gz'
>>> mf = pymaf.MafFrame.from_file(maf_file)
>>> mf.plot_summary()

image

fuc's People

Contributors

sbslee 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

Watchers

 avatar

fuc's Issues

[BAM] Add function to slice BAM

Hi!

I'm not too sure if a lot of people do this, but I generally like to split up my bam into sequence wise bams, for variant calling or genome polishing etc.

This would be a really useful command to have in general!

[VCF] Question on usage

Follow up question after resolving this(#62) on the usage.

  1. I want to find common variants, and unique to each of the vcf. (2 vcf files from mutect both)
  2. Secondly, I want to concatenate vcf calls from strelka and mutect, and remove duplicates.

Could you suggest which methods to use for these?

thanks,
Rohan

[General] Error during installation fuc via conda

Hi @sbslee again,
I have a problem with installation fuc on the new computer with Ubuntu. When I try to run installation via conda, I receive such a call:

(burak) โžœ  fuc git:(main) conda install -c bioconda fuc
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: \ 
Found conflicts! Looking for incompatible packages.                                                                                                                                                    failed                                                                                                                                                                                                     

UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versionsThe following specifications were found to be incompatible with your system:

  - feature:/linux-64::__glibc==2.27=0
  - python=3.10 -> libgcc-ng[version='>=7.5.0'] -> __glibc[version='>=2.17']

Your installed version is: 2.27`

Finally, I have installed required packages but fuc not. Any ideas how to fix it and install fuc? I've tried to do it wit git clone but then I've got an error too.

Thanks a lot!

[VCF] Issue reading vcf from mutect2, strelka2

Hello,

I am trying to read vcf file from mutect2 and strelka2 and getting this error below.

Code:

from fuc import pyvcf
vf = pyvcf.VcfFrame.from_file('mutect2.vcf')
vf.df

Error:

DtypeWarning: Columns (0) have mixed types.Specify dtype option on import or set low_memory=False.
  vf = pyvcf.Vcf

Could you please help?

Thanks
Rohan

[MAF/VCF] `pymaf.MafFrame.from_vcf` assumes CSQ is the first field in the INFO record

This is not necessarily true. Example INFO record I have:

'AC=2;ACGTNacgtnMINUS=0,0,0,0,0,0,0,0,0,0;ACGTNacgtnPLUS=5,0,61,0,0,0,0,0,0,0;AN=4;AS_FilterStatus=SITE;AS_SB_TABLE=9,41|1,5;CALLERS=mutect2;CSQ=A|3_prime_UTR_variant|MODIFIER|MTOR|ENSG00000198793|Transcript|ENST00000361445|protein_coding|58/58||ENST00000361445.9:c.*700C>T||8471/8721|||||||-1|||SNV|HGNC|HGNC:3942|YES|1|P1|CCDS127.1|ENSP00000354558|P42345||UPI000012ABD3||Ensembl|G|G||1|||||chr1:g.11106785G>A|||||||||||||||||||||||||||;ClippingRankSum=-0.79;DKFZBias=damage;DP=85;ECNT=2;EPR=pass;FS=0;GERMQ=93;MBQ=34,33;MFRL=153,154;MMQ=60,60;MPOS=28;MQ=60;MQ0=0;MQRankSum=0;POPAF=7.3;ReadPosRankSum=0.452;TLOD=12.45

As one can see, CSQ is further down the line. If that happens, parsing breaks, because the wrong field is selected:

fields = r.INFO.replace('CSQ=', '').split(',')[0].split('|')

This will get whatever field is at the first comma. The parsing should probably split the VCF info first by ; then look for CSQ.

[DOC] Read the Docs automodule not working properly

I noticed that automodule is working fine with the make html command, but it fails to render when built by Read The Docs on the web. This issue is most likely related to this issue. When I looked at the build in Read The Docs, I found this message:

Running Sphinx v3.5.4
loading translations [en]... done
making output directory... done
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 5 source files that are out of date
updating environment: [new config] 5 added, 0 changed, 0 removed
reading sources... [ 20%] api
reading sources... [ 40%] changelog
reading sources... [ 60%] cli
reading sources... [ 80%] index
reading sources... [100%] readme

WARNING: autodoc: failed to import module 'api.BedFrame' from module 'fuc'; the following exception was raised:
No module named 'fuc'
WARNING: autodoc: failed to import module 'api.FastqFrame' from module 'fuc'; the following exception was raised:
No module named 'fuc'
WARNING: autodoc: failed to import module 'api.VcfFrame' from module 'fuc'; the following exception was raised:
No module named 'fuc'
WARNING: autodoc: failed to import module 'api.common' from module 'fuc'; the following exception was raised:
No module named 'fuc'
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [ 20%] api
writing output... [ 40%] changelog
writing output... [ 60%] cli
writing output... [ 80%] index
writing output... [100%] readme

generating indices... genindex done
writing additional pages... search done
copying static files... done
copying extra files... done
dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 4 warnings.

The HTML pages are in _build/html.
Updating searchtools for Read the Docs search...

[VCF] How to remove all rows with the same variant in VCF file using `pyvcf`

Hello,
I try to remove all records with the same genotype calls in all samples from my vcf file (finally I need data representing differences between samples)? Which method will be appropriate to do that? I've tried to do it with filter_sampall() but it is not satisfactory for me. Here is my code:

from fuc import pyvcf
import pandas as pd

vf = pyvcf.VcfFrame.from_file('P1_short_test.vcf')

just_gt = vf.strip('GT').df

new_vf = pyvcf.VcfFrame([''], just_gt)

no_the_same_variant = new_vf.filter_sampall().df

Thanks a lot!

[VCF] Error related to `pyvcf.VcfFrame.plot_hist`

Hello,
I am using the command to plot AF distribution for vcf files. But I am getting some error.

The command:

#!/bin/python
from fuc import common, pyvcf
common.load_dataset('pyvcf')
vcf_file = 'GEUVADIS.chr22.genotype.vcf'
vf = pyvcf.VcfFrame.from_file(vcf_file)
vf.plot_hist('AF')

the error:

file.python:5: DtypeWarning: Columns (5) have mixed types.Specify dtype option on import or set low_memory=False.
  vf = pyvcf.VcfFrame.from_file(vcf_file)
Traceback (most recent call last):
  File "file.python", line 6, in <module>
    vf.plot_hist('AF')
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/fuc/api/pyvcf.py", line 1991, in plot_hist
    df = self.extract(k, as_nan=True, func=d[k])
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/fuc/api/pyvcf.py", line 3912, in extract
    df = self.df.apply(one_row, axis=1)
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/pandas/core/frame.py", line 8736, in apply
    return op.apply()
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/pandas/core/apply.py", line 688, in apply
    return self.apply_standard()
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/pandas/core/apply.py", line 805, in apply_standard
    results, res_index = self.apply_series_generator()
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/pandas/core/apply.py", line 821, in apply_series_generator
    results[i] = self.f(v)
  File "/home/kxj190026/anaconda3/envs/var/lib/python3.7/site-packages/fuc/api/pyvcf.py", line 3901, in one_row
    i = r.FORMAT.split(':').index(k)
ValueError: 'AF' is not in list

[DOC] Add sphinx-issues extension

The sphinx-issues extension provides a simple way to link to a GitHub project's issues, pull requests, user profiles, etc. For more details, visit the extension's website.

[General] Error while importing pyvcf

Hi,

I wanted to follow your tutorial on creating an OncoPlot.
However, when I am trying to import pyvcf I get this error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/var/folders/93/lz6gxd9906z7wqwc1tx7hgsc0000gn/T/ipykernel_7020/1344064430.py in <module>
      1 from pysam import VariantFile
----> 2 from fuc import pyvcf

~/miniconda3/envs/ICR/lib/python3.7/site-packages/fuc/__init__.py in <module>
----> 1 from .api import *

~/miniconda3/envs/ICR/lib/python3.7/site-packages/fuc/api/pybed.py in <module>
     39 
     40 import pandas as pd
---> 41 import pyranges as pr
     42 from copy import deepcopy
     43 from . import common

~/miniconda3/envs/ICR/lib/python3.7/site-packages/pyranges/__init__.py in <module>
     18 import pkg_resources
     19 
---> 20 from pyranges.pyranges import PyRanges
     21 from pyranges import data
     22 from pyranges.methods.concat import concat

~/miniconda3/envs/ICR/lib/python3.7/site-packages/pyranges/pyranges.py in <module>
      4 import numpy as np
      5 
----> 6 from natsort import natsorted
      7 
      8 import pyranges as pr

~/miniconda3/envs/ICR/lib/python3.7/site-packages/natsort/__init__.py in <module>
      1 # -*- coding: utf-8 -*-
      2 
----> 3 from natsort.natsort import (
      4     NatsortKeyType,
      5     OSSortKeyType,

~/miniconda3/envs/ICR/lib/python3.7/site-packages/natsort/natsort.py in <module>
    239 
    240 # Exposed for simplicity if one needs the default natsort key.
--> 241 natsort_key = natsort_keygen()
    242 natsort_key.__doc__ = """\
    243 natsort_key(val)

~/miniconda3/envs/ICR/lib/python3.7/site-packages/natsort/natsort.py in natsort_keygen(key, alg)
    210             sep = natsort.compat.locale.null_string_locale
    211         else:
--> 212             sep = natsort.compat.locale.null_string
    213         pre_sep = natsort.compat.locale.null_string
    214     regex = utils.regex_chooser(alg)

AttributeError: module 'natsort' has no attribute 'compat'

Do you think it is a problem between the different dependencies of libraries? If not, how can I fix this?
Thank you in advance!

[MAF] Variant color coding mismatch

First, thanks for providing us with this awesome tool! ๐Ÿ˜Š

I recently noticed some strange behavior when creating a custom oncoplot. Specifically, the coloring of the variant classification in the gene plot did not match the variant color coding in the waterfall plot when count was set to 1.

data_mf.plot_waterfall(count=1)

I eventually resolved it by setting vmin andvmaxto the maximum/minimum index of NONSYN_COLORS as the anchors were not correctly inferred by seaborn.heatmap in plot_waterfall

[MAF] Update Ensembl VEP consequences mapping

Hi Steven,

I tried running fuc maf-vcf2maf in.vcf > out.maf on a VEP-annotated VCF today but got an error as below:
ValueError: Found unknown Ensembl VEP consequence: splice_donor_region_variant
I'm guessing there are additional consequence terms that need to be added?

Thank you for all your hard work. fuc is fabulous.

p.s. My version of VEP is 109.3

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.