Visualize statistics from the MOOC "Functional Programming Principles in Scala" using Scala!
This repository contains the data from the Fall 2013 "progfun" survey, and the source code for many of the plots seen in the Functional Programming Principles in Scala: Impressions and Statistics (Fall 2012) article on scala-lang.org. (Of course, adapted to the statistics gathered from the Fall 2013 iteration of the course).
We encourage you to checkout the repository, to generate the plots shown in the article yourself, and to explore the data further. Given sufficient interest, we plan on writing a follow-up article, and we'd love to hear from you! If you've found anything interesting in the data, or otherwise have a cool/interesting visualization to share, please don't hesitate to let us know! We'll include as many as we can in our follow-up article.
Pull requests are also welcome. Please either post in the comments in the article or contact Heather if need be.
The survey was emailed to the ~36,000 students enrolled in the Fall 2013 Functional Programming Principles in Scala MOOC on Coursera. Out of those students, 3,786 responded.
The following questions (with their available choices) were on the survey:
You need SBT 0.12 installed. If you don't already have SBT, make sure to grab it.
If you've got a mac, you can use either Macports:
$ sudo port install sbt
Or HomeBrew:
$ brew install sbt
For Linux users, you can use APT (other package managers are available on the getting started page)
apt-get install sbt
Windows users can either install the msi or create a batch file.
The code in this repository generates HTML/JavaScript visualizations of some of the data collected in the above survey.
To run,
run
ProgfunStatsto generate them all.
To generate a new graph, define a new singleton object in ProgfunStats.scala, and make sure to extend the proper
GraphFactory(current choices are
GroupedBarGraphFactory,
SimpleBarGraphFactory,
PieChartFactory,
WorldMapFactory).
In all cases, there are a few fields that you need to implement-- for example, the
namefield, which corresponds to the name of the HTML file you wish to output, as well as the
datafield, which represents that data that you would like to display on a graph.
Have a look at the visualizations already implemented (the ones visible in the article) in ProgfunStats.scala
There are two ways to get to the data, depending on what you'd like to do with it. In general, all of the survey data lives in the
CourseraDataobject. You can:
import CourseraData.degrees(have a look at
CourseraDatato see all other possible options for import)
Users, each has a field for each question asked in the survey (luckily no more than 22!). Simply
import CourseraData.users.This is useful when you want to plot two qualities against each other. For example, in the graph of perceived difficulty vs background/field we need to know what a single user inputted for two different fields. That is, we needed to first filter out only Java/C/C++/FP experts, and then for those users, we needed to examine how difficult they believed the course to be.
The source code and data within this repository are open source under the Apache License V2.
A summary of the license can be found here. Like all licences the Apache License v2 grants certain rights under certain conditions. In brief a licensee of Apache Licensed V2 software can:
See the V2 Apache License itself, or the summary for more information.
Copyright 2012-2014 École Polytechnique Fédérale de Lausanne (EPFL)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.