Code Monkey home page Code Monkey logo

fingertipsr's Introduction

codecov R build status

fingertipsR

This is an R package to interact with Public Health England’s Fingertips data tool. Fingertips is a major public repository of population and public health indicators for England. The site presents the information in many ways to improve accessibility for a wide range of audiences ranging from public health professionals and researchers to the general public. The information presented is a mixture of data available from other public sources, and those that are available through user access agreements with other organisations. The source of each indicator presented is available using the indicator_metadata() function.

This package can be used to load data from the Fingertips API into R for further use.

Installation

rOpenSci

Get the latest released, stable version from rOpenSci:

# Enable repository from ropensci
options(repos = c(
  ropensci = 'https://ropensci.r-universe.dev',
  CRAN = 'https://cloud.r-project.org'))

# Download and install fingertipsR in R
install.packages('fingertipsR')

With remotes

You can install the latest development version from github using remotes:

# install.packages("remotes")
remotes::install_github("rOpenSci/fingertipsR",
                        build_vignettes = TRUE,
                        dependencies = "suggests")

Example

This is an example of a workflow for downloading data for the indicator on Healthy Life Expectancy at Birth from the Public Health Outcomes Framework profile.

The profiles() function presents all of the available profiles:

library(fingertipsR)
profs <- profiles()
profs <- profs[grepl("Public Health Outcomes Framework", profs$ProfileName),]
head(profs)
#> # A tibble: 6 x 4
#>   ProfileID ProfileName                        DomainID DomainName              
#>       <int> <chr>                                 <int> <chr>                   
#> 1        19 Public Health Outcomes Framework    1000049 A. Overarching indicato~
#> 2        19 Public Health Outcomes Framework    1000041 B. Wider determinants o~
#> 3        19 Public Health Outcomes Framework    1000042 C. Health improvement   
#> 4        19 Public Health Outcomes Framework    1000043 D. Health protection    
#> 5        19 Public Health Outcomes Framework    1000044 E. Healthcare and prema~
#> 6        19 Public Health Outcomes Framework 1938132983 Supporting information

This table shows that the ProfileID for the Public Health Outcomes Framework is 19. This can be used as an input for the indicators() function:

profid <- 19
inds <- indicators(ProfileID = profid)
print(inds[grepl("Healthy", inds$IndicatorName), c("IndicatorID", "IndicatorName")])
#> # A tibble: 2 x 2
#>   IndicatorID IndicatorName                          
#>         <int> <fct>                                  
#> 1       90362 A01a - Healthy life expectancy at birth
#> 2       93505 A01a - Healthy life expectancy at 65

Healthy Life Expectancy at Birth has the IndicatorID equal to 90362.

Finally, the data can be extracted using the fingertips_data() function using that IndicatorID:

indid <- 90362
df <- fingertips_data(IndicatorID = indid, AreaTypeID = 202)
head(df)
#>   IndicatorID                    IndicatorName ParentCode ParentName  AreaCode
#> 1       90362 Healthy life expectancy at birth       <NA>       <NA> E92000001
#> 2       90362 Healthy life expectancy at birth       <NA>       <NA> E92000001
#> 3       90362 Healthy life expectancy at birth  E92000001    England E12000001
#> 4       90362 Healthy life expectancy at birth  E92000001    England E12000002
#> 5       90362 Healthy life expectancy at birth  E92000001    England E12000003
#> 6       90362 Healthy life expectancy at birth  E92000001    England E12000004
#>                          AreaName AreaType    Sex      Age CategoryType
#> 1                         England  England   Male All ages         <NA>
#> 2                         England  England Female All ages         <NA>
#> 3               North East region   Region   Male All ages         <NA>
#> 4               North West region   Region   Male All ages         <NA>
#> 5 Yorkshire and the Humber region   Region   Male All ages         <NA>
#> 6            East Midlands region   Region   Male All ages         <NA>
#>   Category Timeperiod    Value LowerCI95.0limit UpperCI95.0limit
#> 1     <NA>  2009 - 11 63.02647         62.87787         63.17508
#> 2     <NA>  2009 - 11 64.03794         63.88135         64.19453
#> 3     <NA>  2009 - 11 59.71114         59.19049         60.23179
#> 4     <NA>  2009 - 11 60.76212         60.39880         61.12544
#> 5     <NA>  2009 - 11 60.84033         60.38649         61.29417
#> 6     <NA>  2009 - 11 62.60207         62.07083         63.13332
#>   LowerCI99.8limit UpperCI99.8limit Count Denominator Valuenote RecentTrend
#> 1               NA               NA    NA          NA      <NA>        <NA>
#> 2               NA               NA    NA          NA      <NA>        <NA>
#> 3               NA               NA    NA          NA      <NA>        <NA>
#> 4               NA               NA    NA          NA      <NA>        <NA>
#> 5               NA               NA    NA          NA      <NA>        <NA>
#> 6               NA               NA    NA          NA      <NA>        <NA>
#>   ComparedtoEnglandvalueorpercentiles ComparedtoRegionvalueorpercentiles
#> 1                        Not compared                       Not compared
#> 2                        Not compared                       Not compared
#> 3                               Worse                       Not compared
#> 4                               Worse                       Not compared
#> 5                               Worse                       Not compared
#> 6                             Similar                       Not compared
#>   TimeperiodSortable Newdata Comparedtogoal Timeperiodrange
#> 1           20090000    <NA>           <NA>              3y
#> 2           20090000    <NA>           <NA>              3y
#> 3           20090000    <NA>           <NA>              3y
#> 4           20090000    <NA>           <NA>              3y
#> 5           20090000    <NA>           <NA>              3y
#> 6           20090000    <NA>           <NA>              3y

Use

Please see the vignettes for information on use.

browseVignettes("fingertipsR")

More information

  • Please note that the ‘fingertipsR’ project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
  • License: GPL-3

ropensci_footer

fingertipsr's People

Contributors

1b7 avatar annabelwestermann96 avatar daudi avatar hadleynanayakkara avatar jeroen avatar maelle avatar samuel-cutler-phe avatar sckott avatar sebastian-fox avatar sebsfox avatar simonthelwall 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fingertipsr's Issues

Contradictory information in fingertips_data() documentation

The manual states
AreaTypeID Numeric vector, the Fingertips ID for the area type; default is NULL
for the arguments section. However, the Usage section states
fingertips_data(... AreaTypeID = 102 ...)
Which is correct?

Also, code would suggest that AreaTypeID cannot be NULL, but this doesn't seem to return an error if AreaTypeID is left blank. Presumably, this is because AreaTypeID defaults to 102?

if (is.null(AreaTypeID)) {
                stop("AreaTypeID must have a value. Use function area_types() to see what values can be used.")

git tag and use release notes

can you please make sure to git tag each cran release (you do have some git tags, but not for recent CRAN release)

also, you do have some release notes, but no notes for the recent CRAN release

thanks!

Include inequality data option

In fingertips_data() function have a field for whether or not to include inequality information, inequalities = FALSE as default?

Newdata and Comparedtogoal contents mixed up

library(fingertipsR)
inds <- c(10101, 10501, 11401, 20101, 20201, 20202, 20401, 20601, 20602, 21001, 22001, 22301, 22302, 22303, 22304, 30309, 30311, 30315, 41001, 90356, 90362, 90366, 90630, 90631, 90776, 90791, 91102, 91361, 91367, 91414, 91720, 92196, 92319, 92432, 92441, 92488, 92517, 93203)
df <- fingertips_data(inds)

This provides Comparedtogoal values in the Newdata field

Extreme values detection

New function that detects and/or displays outliers for an area:

  1. Reports which of latest indicators are statistically significant (data is already there)
  2. If indicators have time series – which have changed significance e.g. high -> not, low -> high
  3. Could pipe this to a plot [plot_outliers()]?
  4. Geom_tile()?

Get some simple stats on Fingertips

Could we add a simple function to extract basic stats on number of profiles/ indicators etc. Janine Dellar wanted these stats and they maybe useful for anyone who wants to know how much there is in Fingertips

`

counts profiles, total published indicators, and distinct indicators in fingertips

fingertips_stats <- function(){

cat("This may take a few moments... ")

require(glue, quietly = TRUE)
require(fingertipsR, quietly = TRUE)

profiles_n <- length(unique(profiles()$ProfileName))
indicatorid_n <- length(unique(indicators()$IndicatorID))
indicators_n <- length(indicators()$IndicatorID)

result <- glue(

"On ",  {format(Sys.Date(), "%d/%m/%Y")}, " Fingertips consisted of ",  {profiles_n},  " profiles, ",
{indicators_n},  " indicators and ", {indicatorid_n}, " distinct indicators."

)

result
}
`

gives
This may take a few moments... On 02/01/2018 Fingertips consisted of 73 profiles, 4559 indicators and 1647 distinct indicators.

AreaCode for ParentAreaTypeID don't work

In fingertips_data - when AreaCode is specified but includes the area code of a parent area (which should exist in the dataset), it causes an error because parent area codes aren't currently an allowable option

Area rank

It would be really useful to have the rank of area for an indicator

Updated/new indicators

Compiling the list of new indicators to feed into the program is a lot easier now that the IndicatorID is prominently displayed at the top of each ‘Definitions’ page. However, it would be helpful if these numbers could find their way into the advance publicity about forthcoming updates – especially if it’s a brand new indicator, such as the new Dementia indicator (92949, replacing 90842).

Create DT::datatable of all current indicators in Fingertips by profile and area

A function to create a data table of live indicators - which profile and what geography

`
indicator_List<- function(){
require(tidyverse)

fingertipsR::areatypes_by_indicators %>%
left_join(area_types()) %>%
group_by(IndicatorID) %>%
select(IndicatorID, AreaTypeName) %>%
arrange(IndicatorID) %>%
left_join(indicators()) %>%
select(IndicatorID, IndicatorName, ProfileName, AreaTypeName) %>%
distinct() %>%
DT::datatable(filter = "top", extensions = 'Buttons', options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
)
)
}
`

Cannot get fingertipsR to load

Apologies if this is an issue with my own R installation - or simple user error - rather than a genuine issue or bug!

I have successfully used fingertipsR in the past (as recently as last month) but today I cannot get it to load. It does appear in my list of installed packages in R studio.

I created a new project in R studio and then ran the following.

library(fingertipsR)
search()

The search() was to find out which packages are loaded. This was the result in the console:

library(fingertipsR)
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
there is no package called ‘rlang’
In addition: Warning message:
package ‘fingertipsR’ was built under R version 3.3.3
Error: package or namespace load failed for ‘fingertipsR’
search()
[1] ".GlobalEnv" "tools:rstudio" "package:stats" "package:graphics" "package:grDevices"
[6] "package:utils" "package:datasets" "package:methods" "Autoloads" "package:base"

I then tried re-installing the package to see if this would make any difference and added some lines from the README file to try and looks at the available profiles:

install.packages("fingertipsR")
library(fingertipsR)
profs <- profiles()
profs <- profs[grepl("Public Health Outcomes Framework", profs$ProfileName),]
head(profs)

The (re-)installation bit worked, but loading the package failed again:

package ‘fingertipsR’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\david.nolan\AppData\Local\Temp\RtmpGacky9\downloaded_packages

library(fingertipsR)
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : there is no package called ‘rlang’ In addition: Warning message: package ‘fingertipsR’ was built under R version 3.3.3
Error: package or namespace load failed for ‘fingertipsR’
profs <- profiles()
Error: could not find function "profiles"
profs <- profs[grepl("Public Health Outcomes Framework", profs$ProfileName),]
Error: object 'profs' not found
head(profs)
Error in head(profs) : object 'profs' not found
--

Noting mention of a missing package called "rlang", I tried installing and loading that prior to loading fingertipsR but I still got "Error: package or namespace load failed for ‘fingertipsR’".

The version of R I am using is now quite old (3.3.2), but the CRAN page for the package seems to suggest it should run on any version greater than 2.10.

Red-reds

Function to identity indicators and areas which are worse than comparators and trend is worsening. Suggested code based on latest indicator value

Add option stringsAsFactors to fingertips_data

ccgs <- fingertips_data(IndicatorID = amr_indicators$IndicatorID[amr_indicators$ccg == 1], 
                        AreaTypeID = 19, inequalities = TRUE)
head(ccgs)
class(ccgs$AreaCode)

returns factor.
I think it should default to character, and an option to import as factors should be added.
Thanks!

Error message when using fingertips_data command: sysdata.rdb

Hi

I'm getting an error message when using the fingertips_data command:

fingertips_data(,,,19)
Error in date_names_lang(date_names) :
cannot open file '~/R/win-library/3.4/readr/R/sysdata.rdb': No such file or directory

I've tried reinstalling readr already.

Grateful for any help = I'm new to R :-)

Thanks
Cameron Russell
Worcestershire County Council

area_types() naming conventions

Current names (what names should be)

  • AreaID (not ‘AreaTypeID’)
  • AreaName (not ‘AreaTypeName’)
  • ParentAreaID (not ‘ParentAreaTypeID’), and
  • ParentAreaName (not ‘ParentAreaTypeName’)

latest_indicators()

A function that returns the indicators included at the latest data release

fingertips_data function returns error

When trying sample code in vignette

indid <- 90362
df <- fingertips_data(IndicatorID = indid)
head(df)

I got following error.
Error in mutate_impl(.data, dots) :
Evaluation error: object 'Compared to subnational parent value or percentiles' not found.
Many thanks

indicator sequence number

provide sequence number for indicator id so they can be plotted in the same order as on the website

Vignette issues highlighted by Anne Cunningham

  • When I tried the knitr::kable command in the RStudio console, it looked like nothing on earth. Probably need to tell users to do it in R Markdown, or else use DT::datatable instead.
  • It’s a slight over-simplification to say ‘ParentAreaID is 6 by default for the fingertips_data() function’ (last line of ‘AreaTypeID’ section). Doesn’t that depend on the area type? Also, ParentAreaID is not what it’s actually called in the fingertips_data() function.
  • CIPFA didn’t produce the Indices of Deprivation (‘Deprivation’ section). It was the DCLG.
  • I’m not getting the same plot at the end – see right. This was produced by forking the repo and running the lifeExpectancy.Rmd file from start to finish.
  • I think it’s because of all the inequality indicators that are included in the database for Life Expectancy (there aren’t any for Healthy Life Expectancy). There’s nothing in the vignette code to filter them out (such as the command I’ve suggested on the previous page).
  • Maybe the inequality indicators are a new addition to the database since the vignette was written? There have obviously been some changes (hence the fact that my Shiny app doesn’t work any more).

Getting a proxy error but there's no proxy (direct internet)

I'm getting the following error after install. Not sure how to troubleshoot it further but willing to investigate...

prof <- profiles() Error in ie_get_proxy_for_url(.) : ERROR_WINHTTP_UNRECOGNIZED_SCHEME

df <- fingertips_data(IndicatorID = indid) Error in ie_get_proxy_for_url(.) : ERROR_WINHTTP_UNRECOGNIZED_SCHEME

Fingertips metadata wordcloud

Bit of fun - a word cloud of fingertips metadata

`
ftips_cloud <- function(){

library(fingertipsR)
library(tidyverse)
library(tidytext)
library(stringr)
library(wordcloud2)

profid <- profiles() %>%
filter(!ProfileID %in% c(46, 108, 109, 110, 111, 116, 137))

meta <- indicator_metadata(ProfileID = profid$ProfileID) %>%
janitor::clean_names()

meta1 <- meta %>%
select(indicatorid, indicator_full_name, definition) %>%
mutate(text = str_c(indicator_full_name, definition))

wc <- meta1 %>%
unnest_tokens(bigram, text, token = "ngrams", n = 2) %>%
count(bigram, sort = TRUE) %>%
separate(bigram, c("w1", "w2"), sep = " ") %>%
filter(!w1 %in% stop_words$word) %>%
filter(!w2 %in% stop_words$word) %>%
unite(bigram, w1, w2, sep = " ") %>%
wordcloud2()

wc

}

`

Missing CategoryType causes NAs

When CategoryType field has no values, R enters NAs. I am filtering for blanks currently when inequalities = FALSE, so need to also filter for NAs

Indicator comparator different to what is displayed on website

For PHOF indicator 1.08i (IndicatorID = 90282). The latest result (2015/16) for Blackburn with Darwen (E06000008), as retrieved by FingertipsR, has the ‘ComparedtoEnglandvalueorpercentiles’ column set to ‘Not compared’. However, the value does have confidence intervals, and is displayed as green (i.e. significantly better than England) on the PHOF tool.

Retrieving England only data when there is no data for AreaType = 102

The only way I seem to be able to successfully retrieve the England data for indicator 90409, and others like it, seems to be to specify 'AreaTypeID = 153' - but that is the code for CCGs, not the code for countries! At least I have a workaround now, but it just seems a little bit unintuitive.

Extracting data for Area Type of "combined authorities"

Some Fingertips downloads contain combined authority level data for some indicators - for example the sickness absence indicators 90286 and 90287 – but I have been unable to extract this data using fingertipsR. Am I doing something wrong, or is this not supposed to be possible for some reason? Is this because of issue #51 ?

The following code outputs the data for these indicators at various geographies but not the combined authority grouping:

sick <- fingertips_data(c(90286, 90287), AreaTypeID = 102) %>%
  group_by(IndicatorID) %>%
  filter(TimeperiodSortable == max(TimeperiodSortable) &
           Sex == "Persons")
sick <- sick[order(sick$IndicatorID),]

The AreaTypeID for combined authorities is 126, but when I change the code as follows I get “No data available in table”.

sick <- fingertips_data(c(90286, 90287), AreaTypeID = 126) %>%
  group_by(IndicatorID) %>%
  filter(TimeperiodSortable == max(TimeperiodSortable) &
           Sex == "Persons")
sick <- sick[order(sick$IndicatorID),]

I tried specifying an area code (as below) but that does not return anything either.

sick <- fingertips_data(c(90286, 90287), AreaCode = 'E47000004', AreaTypeID = 126) %>%
  group_by(IndicatorID) %>%
  filter(TimeperiodSortable == max(TimeperiodSortable) &
           Sex == "Persons")
sick <- sick[order(sick$IndicatorID),]

I also tried specifying the ParentAreadTypeID for country (which is 15):

sick <- fingertips_data(c(90286, 90287), AreaTypeID = 126,
                        ParentAreaTypeID = 15) %>%
  group_by(IndicatorID) %>%
  filter(TimeperiodSortable == max(TimeperiodSortable) &
           Sex == "Persons")
sick <- sick[order(sick$IndicatorID),]

`profiles()` should probably return unique values

Currently running profiles() returns a data frame with redundant combinations, e.g. 6 rows of ProfileID == 8 and ProfileName == "Adult Social Care"
As a user, exploring data, I would find a non-redundant list easier to read. What do you think?

Feature request: get list of available area types by indicator id

To use fingertips_data() one needs to provide the appropriate AreaTypeID. Currently there isn't a function to check the available area types for an indicator. I suggest that there is a function to return all the area types for an indicator id or list of indicator ids.

Help file error in profiles()

The ‘Help’ facility tells us that doing profiles(ProfileName = "Public Health Outcomes Framework") will return a data frame of all of the indicators in the Public Health Outcomes Framework. In fact, it returns a data frame of all the domains in the Public Health Outcomes Framework

predict_indicator()

A function that predicts the next year value of an indicator.
predict_indicator():

  • IndicatorID
  • R asks for area type for prediction (eg, UTLA), then:
    • Extracts all indicator data for indicators in same profile(s) at the same geography
    • Identifies latest year for target indicator
    • Subsets dataframe of latest year information for all indicators
    • Creates flat, wide table of remaining indicators with variables for each previous year of data available for each indicator (eg, indicator_x_1yr_previous, indicator_x_2yr_previous, … , indicator_x_nyr_previous)
    • Trains and tests model on second latest year for target indicator (maybe multiple machine learning methods)
    • Uses best model to predict next year of data for indicator
      • Lasso
      • Glm
      • Svm
      • Randomforest

nearest_neighbours() for counties

Hi, first of all thanks very much for this great package.

I do have one issue, which may be due to my own misunderstanding. At the moment there does not appear to be a way to get the CIPFA nearest neighbour group for counties. For example, for Buckinghamshire, the code

nearest_neighbours(AreaCode = 'E10000002', AreaTypeID = 102)

returns 10 area codes. This is presumably the Clinical Commissioning Group (CCG), rather than the 15 authorities in the CIPFA nearest neighbour group.

In contrast, for say Barking & Dagenham, we can return both the CCG and CIPFA nearest neighbour group by using, respectively:

nearest_neighbours(AreaCode = 'E09000002',AreaTypeID = 101) #and
nearest_neighbours(AreaCode = 'E09000002',AreaTypeID = 102)

It would be great to be able to get the CIPFA nearest neighbour group for counties, and perhaps also to make it clearer which group was being returned by the nearest_neighbours() function.

Thanks again and apologies if I've misunderstood anything.

Find indicator function

Write more wrapper/convenience functions to make use of your library simpler. For example, instead of expecting users to understand grepl, you could have a find_indicators function which would allow users to give a pattern and have returned matching indicators. You could even go full “point and click” with a Shiny Gadget as an add-in – see http://rstudio.github.io/rstudioaddins/#shiny-gadgets so users don’t have to remember any specific syntax if they just want to do it interactively.

Trend of the outcome variable - fit_trend()

New function to add trend onto outcome variable

  1. Paul has this cumulative chi-squared algorithm to try and detect change
  2. Could model fit and make use purrr and nest models to all variables and broom to extract performance metrics
  3. Probs not enough data but getting into the prophet package – haven’t tried it on fingertips

Repo description and topics to review

👋 @sebastian-fox!

I've updated the repo description and topics to increase its discoverability, see below.

image

Of course feel free to update them until you like them. The topics and description will be useful not only for discovery via GitHub but also via rOpenSci registry which will use them.

Thank you! 😺

curl errors

Some local authorities are getting curl errors. Likely to be a result of proxy issues. I have been pointed towards this issue: rOpenGov/eurostat#99

Also, workaround created by one LA doing the following:

Chosen_Profile = 87 # Profile for LAPE
Chosen_Ind = 92778 #  This is the indicator for percentage of adults who drink over 14 units per week
Chosen_area = 102 # This is the code for upper tier LA, 101 is for lower tier LA, 7 for GPs, 6 for region
Chosen_parent_area = 6

LAPE_over14  <- read_csv(url(paste("https://fingertips.phe.org.uk/api/all_data/csv/by_indicator_id?indicator_ids=", Chosen_Ind,"&child_area_type_id=", Chosen_area ,"&parent_area_type_id=",Chosen_parent_area,"&profile_id=", Chosen_Profile, sep = "")))

Has deprivation_decile() stopped working

Last time I tried to compile the paper, the function didn't pull in any data. I did:
dep <- deprivation_decile(AreaTypeID = 102, Year = 2015)
And got a zero length dataframe as a result

Nearest neighbours

Add function to return nearest neighbours for an area.

The nearest neighbour codes follow a pattern: nn-1- E10000007

Where 1 is the nearest neighbour type and E10000007 is the area code whose neighbours will be returned. You should be able to use the neighbour code for any service which takes a parent area code as a parameter. The neighbour types available are:

NeighbourTypeId Name Description
1 CIPFA local authority nearest neighbours  
2 10 most similar CCGs CCGs pre April 2017
3 Children's services statistical neighbours  
4 10 most similar CCGs CCGs post April 2017

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.