{"id":20714708,"url":"https://github.com/justingosses/surviz_dcjs_googleform","last_synced_at":"2026-04-19T22:13:02.716Z","repository":{"id":91734666,"uuid":"87748759","full_name":"JustinGOSSES/SurViz_dcjs_googleform","owner":"JustinGOSSES","description":" interactive across dimensions data viz of any google forms results csv using dc.js","archived":false,"fork":false,"pushed_at":"2021-02-22T19:27:32.000Z","size":510,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-17T21:43:39.592Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://justingosses.github.io/SurViz_dcjs_googleform/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JustinGOSSES.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-10T00:07:16.000Z","updated_at":"2022-03-08T20:32:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"5cbcdd22-7ec6-4278-8c1c-2ac599c0a3d6","html_url":"https://github.com/JustinGOSSES/SurViz_dcjs_googleform","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FSurViz_dcjs_googleform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FSurViz_dcjs_googleform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FSurViz_dcjs_googleform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinGOSSES%2FSurViz_dcjs_googleform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JustinGOSSES","download_url":"https://codeload.github.com/JustinGOSSES/SurViz_dcjs_googleform/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242988242,"owners_count":20217537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T02:33:45.779Z","updated_at":"2025-12-12T05:29:19.383Z","avatar_url":"https://github.com/JustinGOSSES.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SurViz_dcjs_googleform\nby \u003ca href=\"https://github.com/JustinGOSSES\"\u003eJustin Gosses\u003c/a\u003e\n\n## What is it?\nA project you can drop any google form response csv into and an interactive website of the survey results with cross-filtering abilities will be produced. Cross-filtering is the ability to select answer B to question 1 and see what that particular subset of people answered in question 2.\n\n## Status\n90% of the original vision is complete. I haven't worked on it recently but everything works fine. The charts are successfully picked and produced automatically. Could use a little CSS love to improve look and maybe some JavaScript optimization if you want it to run fast on large surveys with \u003e 2000 responses. Issues section should have additional enhancements needed. \n\n## Example image\n\u003ci\u003eimage goes here eventually\u003c/i\u003e\n\n## Website \nYou can check it out live \u003ca href=\"https://justingosses.github.io/SurViz_dcjs_googleform/\"\u003ehere\u003c/a\u003e.\n\n## Instructions to run\n1. Fork this repo\n2. Add your google forms response CSV to the data form in your forked repo.\n3. Either change the name of your CSV to match \"cleaned_survey_results.csv\" or go into index.html then search \u0026 replace that name with the name of your CSV that you've placed in the data directory. \n\nEverything should-auto populate with the javascript picking what chart to use for each question based on number of answers, length of answer, etc.\n\n## Privacy considerations\nThe fact that charts are linked will make it possible to filter down to the level of individuals if your dataset is not large. Additionally, the data is currently being added as a flat file with each row being a unique person who filled out the answers. If this might be an issue for you privacy-wise, you might consider limiting filtering and or changing the way the data is supplied to the charts.\n\n## Why \nMost of the times when people look at survey results, the results for each question is only grouped at one level, everyone. Using DC.js it becomes super easy to also see the results for each question filtered by answers by every other question. For example, if question 1 is \"are you tall\" and question 2 is \"are you old\", you can see the results for \"are you old\" for only those that answer \"yes, I am tall\". This opens up the opportunity for \u003cb\u003einsight into data that was always there\u003c/b\u003e, just rarely taken advantage of due to the extra work involved. \n\nIn other words, all the charts are linked. When the user clicks on one bar or slice of a pie chart, it will filter all the other charts. \n\nCurrently, long-form fill-in-the-blank answers are not linked to the rest of the charts. This could be easily changed.\n\n## Demo Dataset\nCurrently using a survey on the data visualization community found here: \u003ca href=\"https://github.com/emeeks/data_visualization_survey\"\u003ehttps://github.com/emeeks/data_visualization_survey\u003c/a\u003e\n\n## Adding your own data\n\u003ci\u003e*in progress*\u003c/i\u003e \nEventually, there will be an upload option, so users can upload their csv of google forms responses into the webpage without having to fork/edit code.\n\n## Survey data format assumptions\n- \u003cb\u003eThis project assumes the input datasets is a google form response CSV.\u003c/b\u003e \n- These have a set data structure. For example, in checklist questions, multiple answers can be checked. Checklist answers are given in the form of a string with ';' that separate answers. There is a function in this project that takes strings and turns them into arrays, with the stings split into separate elements based on the ';'. Alternatives data structures not identical to google form response CSVs may require editing the data processing part of the code.\n\n## Main open source libraries used\nThis data visualization was created with open-source JavaScript libraries, including: \u003ca href=\"https://dc-js.github.io/dc.js/\"\u003eDC.js\u003c/a\u003e, \u003ca href=\"https://github.com/crossfilter/crossfilter\"\u003eCrossfilter.js\u003c/a\u003e, and \u003ca href=\"https://d3js.org/\"\u003eD3.js\u003c/a\u003e. D3.js creates the charts, crossfilter creates the links between each data dimension, and DC.js tells d3.js and crossfilter.js how to play nice and takes your directions. The code is easily adaptable to any google forms results sheet, and adaptable to a range of inputs with a little more effort\n\n## Functions\n\n#### index.html\n- d3.csv = loads data\n- function uniq(a) = helper, makes arrays unique\n- splitBasedSmCol(data) = helper, splits strings into arrays based on ;\n- takeOutSpacesinKeys(data) = helper, replaces \" \" with \"_\"\n- putInSpacesinKeys(data) = helper, replaces \"_\" with \" \"\n- examineAnswers(data) = function that runs the function identify_questions() and then uponDataLoad()\n\n#### questions.js\n- identify_questions(data) = group of functions, looks at answers \u0026 questions and populats charactersitics about them.....\n\n#### index.html\n- uponDataLoad(data,questions) = group of functions, functions that runs after data loads  \u0026 examineAnswer function runs\n\n#### pickChart.js\n- pickChart(questions) = function that picks the type of chart based on characteristics made in examineAnswers\n- makePie(cf,ID,height,width,questionWith_)\n- makeRow(cf,ID,height,width,questionWith_)\n- makeLinearBar_Number(data,cf,ID,height,width,questionWith_,uniqItemsCount)\n- * makeLinearBar_Date(cf,ID,height,width,questionWith_)\n- * makeLinearBar_Time(cf,ID,height,width,questionWith_)\n- makeSingleTable(data, cf, id,questionWith_)\n- returnChart(chartType)\n- getChartSize(chartType)\n- getScaleForLinear(chartType)\n- groupQuestIntoRows(questionsResult)\n- buildRow(data,row,cf,ID,questionNumber,questionsResult)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustingosses%2Fsurviz_dcjs_googleform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustingosses%2Fsurviz_dcjs_googleform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustingosses%2Fsurviz_dcjs_googleform/lists"}