Blog of Stuff: Posts tagged 'Department Data'urn:http-www-brinckerhoff-org:-tags-Department-Data-html2019-12-06T15:36:00Zupdated course dependencies graphurn:http-www-brinckerhoff-org:-blog-2019-12-06-updated-course-dependencies-graph2019-12-06T15:36:00Z2019-12-06T15:36:00ZJohn Clements
<p>I’ve updated the dependency chart to match the 2019–2020 catalog.</p>
<p><a href="/img/calpoly-2198-colored-dependencies.svg"><img src="/img/calpoly-2198-colored-dependencies.svg" width="700" /></a></p>
<p>This now includes DATA classes as well as CPE and CSC classes.</p>
<!-- more-->
<p>As before, the arrows just mean that the catalog refers in some way to the pointed-to course in the prerequisites section; it might be that only one of them is required, or some subset.</p>
<p>Also, colors relate to number of students that have taken a class. Here’s what I wrote before:</p>
<p>The colors relate to the number of students that have enrolled in each class. Specifically, the log of the number of students that have taken the class from fall 2010 through spring 2019. Classes with zero enrollment are given log(0.5). The class with the highest value is red, the one with the lowest value is green. Yes, there should be a legend. Classes that aren’t in the Computer Science catalog are gray.</p>class size updateurn:http-www-brinckerhoff-org:-blog-2019-01-17-class-size-update2019-01-17T18:45:51Z2019-01-17T18:45:51ZJohn Clements
<p>Again: not too much new here, but the spring and fall quarters quarter is new:</p>
<p><a href="/img/calpoly-2088-2188-computerscience-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2188-computerscience-enrollment-likelihood.svg" width="700" /></a></p>
<p>Here’s the college as a whole (we’re better):</p>
<p><a href="/img/calpoly-2088-2188-ceng-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2188-ceng-enrollment-likelihood.svg" width="700" /></a></p>class size updateurn:http-www-brinckerhoff-org:-blog-2018-03-16-class-size-update2018-03-16T19:28:48Z2018-03-16T19:28:48ZJohn Clements
<p>Not too much new here, but the winter quarter is new:</p>
<p><a href="/img/calpoly-2088-2182-computerscience-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2182-computerscience-enrollment-likelihood.svg" width="700" /></a></p>
<p>Here’s the college as a whole (we’re better):</p>
<p><a href="/img/calpoly-2088-2182-ceng-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2182-ceng-enrollment-likelihood.svg" width="700" /></a></p>cohort progress 2178urn:http-www-brinckerhoff-org:-blog-2018-02-26-cohort-progress-21782018-02-27T03:46:04Z2018-02-27T03:46:04ZJohn Clements
<p>Okay, I’ve replaced this blog post with a perma-link so I can update it without keeping huge amounts of old data around:</p>
<p><a href="/cohort-progress/index.html">permanent location</a></p>123 appears to help 357 completionurn:http-www-brinckerhoff-org:-blog-2018-02-24-123-appears-to-help-357-completion2018-02-25T03:04:46Z2018-02-25T03:04:46ZJohn Clements
<p>Some good news, here.</p>
<p>On my way home from SIGCSE, I drew some more pictures.</p>
<p>This shows how each year of incoming students handles 357. Specifically, the x axis shows quarters since the students’ first one, and the y axis shows what fraction of the students have passed 357. Each line shows a different cohort.</p>
<p><a href="/img/calpoly-2058-2168-357-passage.svg"><img src="/img/calpoly-2058-2168-357-passage.svg" width="700" /></a></p>
<p>Some of the lines are longer than others. This is because some cohorts that take a <em>really long time</em> to pass 357, and also because some cohorts haven’t yet had more than 6 or 9 or 12 quarters since entry.</p>
<p>There’s some sobering news here—since 2005, we’ve <em>never</em> managed to heave more than 75% of the students over the 357 bar.</p>
<p>However, looking more closely, we see that more recent cohorts—specifically, those since 2010 (a.k.a. “when we started 123”) look a lot better.</p>
<!-- more-->
<p>First, the old cohorts:</p>
<p><a href="/img/calpoly-2058-2098-357-passage.svg"><img src="/img/calpoly-2058-2098-357-passage.svg" width="700" /></a></p>
<p>And here are the cohorts since we added 123:</p>
<p><a href="/img/calpoly-2108-2168-357-passage.svg"><img src="/img/calpoly-2108-2168-357-passage.svg" width="700" /></a></p>
<p>Looks better, doesn’t it? In fact, there’s no overlap in the 9-qtr outcomes; every year since the change has been better than every year before the change. Also, the most recent ones look like they’re going to be even better.</p>
<p>I’m also interested to see that 123 didn’t actually push 357 back at all; it still looks like the big jump occurs in the winter of the second year.</p>
<p>Yay, us!</p>incoming students updatedurn:http-www-brinckerhoff-org:-blog-2018-02-22-incoming-students-updated2018-02-23T03:23:02Z2018-02-23T03:23:02ZJohn Clements
<p>As part of our work on our recent SIGCSE paper (citation forthcoming), I took another look at our numbers of incoming students. The results surprised me. This table combines CSC, CPE, and SE students, and associates them with the quarter in which they first took a lower-level CS class.</p>
<p><a href="/img/calpoly-2058-2174-incoming.svg"><img src="/img/calpoly-2058-2174-incoming.svg" width="700" /></a></p>
<p>The surprising thing about this—to me, anyway—is that our enrollments have actually been <em>dropping</em> over the past few years. I’m surprised.</p>Cal Poly Quarter Numberingurn:http-www-brinckerhoff-org:-blog-2017-11-16-cal-poly-quarter-numbering2017-11-16T18:22:42Z2017-11-16T18:22:42ZJohn Clements
<p>People often ask me what the heck is going on with Cal Poly’s nutty quarter numbering system. I’m going to try to summarize it.</p>
<p>Before I begin, I think I’m probably suffering from Stockholm syndrome, here; I’m kind of fond of it, even though it’s non-intuitive.</p>
<h3 id="actual-history">Actual History</h3>
<p>Based on a very brief conversation with Debbie Dudley, it appears that the current system was designed in 2006, during the migration to PeopleSoft. At that time, Cal Poly had to devise a system for numbering quarters both in the future and in the past (that is, the new system also had to represent existing records of past students).</p>
<p>The rest of this is still largely hypothetical; please feel free to write and correct me about anything I’ve gotten wrong; I think that trying to understand how the system arose helps me (and you?) to understand its quirks a bit better.</p>
<h3 id="semi-hypothetical-history">(Semi) Hypothetical History</h3>
<p>Problem: we need a way to represent a particular quarter (e.g.: Fall 2006) as a number. It would be really convenient to be able to sort in a sane way, etc. etc.</p>
<p>Solution: well, let’s use integers, not floats (for what are hopefully obvious reasons). Let’s use the year, then a digit for the quarter. What digits should we use for the quarters? Well, we should probably stay away from zero, because it’s not clear what year a zero would belong to. Okay, let’s use 2, 4, 6, and 8 for the four quarters. This spaces out the four quarters, and allows for the insertion of additional terms, should it become necessary.</p>
<p>So, how should we write Fall 2006? We could write “20068”. But… let’s try to cut that down to four digits.</p>
<p>(Knowing what I now know, I can’t see why you would want to do this unless PeopleSoft has some kind of internal restriction or performance penalty regarding numbers with more digits. Let’s assume this is the case.)</p>
<p>Well, maybe we can encode the century as a single digit. Let’s use “2” for the century from 2000 — 2099. So Fall 2006 becomes 2068.</p>
<p>Great! So how do we represent Spring 1997?</p>
<p>If we’re using century codes, then the one before “2” should be “1”. So in this case, Winter 1997 would be written as 1972.</p>
<p>Apparently, though, we decided that this was confusing, and that we should instead use a “0” for the 1900s, so that Winter 1997 is instead written as 0972.</p>
<p>This scheme is not awful, but it does have some problems if you try to subtract numbers or increment or decrement quarter numbers, because going from a fall quarter to the next winter quarter requires adding four… unless the year is 1999, in which case you have to add 1004. Oh well.</p>
<p>Okay, so let’s summarize. How the heck do we actually read one of these numbers?</p>
<h3 id="examples-of-quarter-numbers">Examples of quarter numbers:</h3>
<ul>
<li>
<p>2174 : 2000 + 17 = 2017, 4 = Spring. Spring 2017.</p></li>
<li>
<p>2102 : 2000 + 10 = 2010, 2 = Winter. Winter 2010.</p></li>
<li>
<p>976 : 1900 + 97 = 1997, 6 = Summer. Summer 1997.</p></li></ul>
<h3 id="parsing-a-cal-poly-san-luis-obispo-quarter-number">Parsing a Cal Poly (San Luis Obispo) quarter number:</h3>
<p>Actually, I’m going to be precise, and just give you some code.</p>
<p>Yes, in Racket.</p>
<div class="brush: Racket">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span></pre></div></td>
<td class="code">
<div>
<pre><span></span><span class="kn">#lang </span><span class="nn">typed/racket</span><span class="w"></span>
<span class="c1">;; given a quarter, return its season: "Fall", "Winter", etc.</span><span class="w"></span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="n">qtr->season</span><span class="w"> </span><span class="p">[</span><span class="n">qtr</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="p">])</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Season</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">match</span><span class="w"> </span><span class="p">(</span><span class="nb">modulo</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="w"> </span><span class="s2">"Winter"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">4</span><span class="w"> </span><span class="s2">"Spring"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">6</span><span class="w"> </span><span class="s2">"Summer"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">8</span><span class="w"> </span><span class="s2">"Fall"</span><span class="p">]))</span><span class="w"></span>
<span class="c1">;; return the year in which a quarter number falls</span><span class="w"></span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="n">qtr->year</span><span class="w"> </span><span class="p">[</span><span class="n">qtr</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="p">])</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">century-code</span><span class="w"> </span><span class="p">(</span><span class="nb">floor</span><span class="w"> </span><span class="p">(</span><span class="nb">/</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">1000</span><span class="p">)))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">year-code</span><span class="w"> </span><span class="p">(</span><span class="nb">modulo</span><span class="w"> </span><span class="p">(</span><span class="nb">floor</span><span class="w"> </span><span class="p">(</span><span class="nb">/</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">10</span><span class="p">))</span><span class="w"> </span><span class="mi">100</span><span class="p">))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">century-offset</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">match</span><span class="w"> </span><span class="n">century-code</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="w"> </span><span class="mi">1900</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="w"> </span><span class="mi">2000</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="k">_</span><span class="w"> </span><span class="p">(</span><span class="nb">raise-argument-error</span><span class="w"> </span><span class="o">'</span><span class="ss">qtr-year</span><span class="w"></span>
<span class="w"> </span><span class="s2">"qtr with century code of 0 or 2"</span><span class="w"></span>
<span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">qtr</span><span class="p">)]))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="n">century-offset</span><span class="w"> </span><span class="n">year-code</span><span class="p">))</span><span class="w"></span>
</pre></div></td></tr></tbody></table></div>
</div>more students in smaller classesurn:http-www-brinckerhoff-org:-blog-2017-11-15-more-students-in-smaller-classes2017-11-15T21:07:59Z2017-11-15T21:07:59ZJohn Clements
<p><a href="/img/calpoly-2088-2178-csc-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2178-csc-enrollment-likelihood.svg" width="700" /></a></p>
<p>Good news, folks! We’re continuing to deliver reasonably sized classes for our students. Specifically, more than 90% of our SCUs are currently delivered in classes of size less than 40. The last time we managed that was back in winter of 2011. On the other hand, if you think that class sizes should be below 30, we’re not doing so well.</p>
<p>Here’s the college as a whole (we’re better):</p>
<p><a href="/img/calpoly-2088-2174-ceng-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2174-ceng-enrollment-likelihood.svg" width="700" /></a></p>updated course dependenciesurn:http-www-brinckerhoff-org:-blog-2017-05-23-updated-course-dependencies2017-05-23T16:16:54Z2017-05-23T16:16:54ZJohn Clements
<p>I’ve updated the dependency chart to match the 2017–2019 catalog.</p>
<p><a href="/img/calpoly-2108-2172-colored-dependencies.svg"><img src="/img/calpoly-2108-2172-colored-dependencies.svg" width="700" /></a></p>
<p>This now includes DATA classes as well as CPE and CSC classes.</p>
<!-- more-->
<p>As before, the arrows just mean that the catalog refers in some way to the pointed-to course in the prerequisites section; it might be that only one of them is required, or some subset.</p>
<p>Also, colors relate to number of students that have taken a class. Here’s what I wrote before:</p>
<p>The colors relate to the number of students that have enrolled in each class. Specifically, the log of the number of students that have taken the class from fall 2010 through spring 2016. Classes with zero enrollment are given log(0.5). The class with the highest value is red, the one with the lowest value is green. Yes, there should be a legend. Classes that aren’t in the Computer Science catalog are gray.</p>
<p>What about classes that are no longer offered, like CPE 102 or CSC 141? They appear as gray, as well. Note that I didn’t use cross-listing info to join these, so some classes show CPE 102 and some show CSC 102.</p>
<p>One other tiny note: you can’t currently take CPE 431, because it depends on CPE 430, which isn’t a thing any more. I believe the registrar needs to fix this :).</p>cpe/csc/se graduation ratesurn:http-www-brinckerhoff-org:-blog-2017-02-23-cpe-csc-se-graduation-rates2017-02-23T19:26:31Z2017-02-23T19:26:31ZJohn Clements
<p>Some data: how long is it taking our students to graduate? How is that changing over time?</p>
<p><a href="/img/CSC-grad-rates.svg"><img src="/img/CSC-grad-rates.svg" width="700" /></a></p>
<p><a href="/img/SE-grad-rates.svg"><img src="/img/SE-grad-rates.svg" width="700" /></a></p>
<p><a href="/img/CPE-grad-rates.svg"><img src="/img/CPE-grad-rates.svg" width="700" /></a></p>
<p>It looks like CSC and CPE are improving. It looks like CPE students are having trouble getting out in 4 years. On the other hand, the 5-year graduation rate for CPE majors is steadily rising.</p>
<p>It looks like <em>lots</em> of students graduate in four years and one quarter.</p>
<p>It looks like very few students graduate in their sixth year; that may be because there’s nobody left; this graph doesn’t distinguish between those who haven’t yet graduated, and those who are discontinued or disqualified. However, given the very small numbers for six years, it seems reasonable to assume that most of those that haven’t finished after six years already gave up, possibly years earlier.</p>
<p>Note that for students admitted in 2012, none of them are shown as having graduated in 4 years plus 2 quarters or more… because it hasn’t yet been that long since they were admitted. By the same token, we don’t see six-year numbers for 2011 admits, etc.</p>
<p>Also, all of this data uses “adjusted cohorts”. That is, those that change majors out of the program are removed from the denominator and the numerator, and those changing majors into the program are added to the denominator and the numerator.</p>CSSE service coursesurn:http-www-brinckerhoff-org:-blog-2017-02-10-csse-service-courses2017-02-10T14:14:23Z2017-02-10T14:14:23ZJohn Clements
<p>(EDIT: images updated with 2174 data.)</p>
<p>Here’s a picture of (lecture, non-supervisory) sections taught by CSSE faculty since Fall 2008:</p>
<p><a href="/img/calpoly-2088-2174-sections-taught.svg"><img src="/img/calpoly-2088-2174-sections-taught.svg" width="700" /></a></p>
<p>Because the number of sections taught has gone up rather dramatically, here’s the same data, normalized by sections per year, to show the fraction of classes taught in each category:</p>
<p><a href="/img/calpoly-2088-2174-sections-taught-frac.svg"><img src="/img/calpoly-2088-2174-sections-taught-frac.svg" width="700" /></a></p>
<p>There are many caveats and things to explain about these pictures.</p>
<!-- more-->
<p>First, the x axis is labeled using Cal Poly’s goofy but customary numbering scheme, where 2158 represents fall of 2014 and 2148 represents Fall of 2014.</p>
<p>Second, the data for partial years can pretty broken; in particular, if it only includes data for the Fall and Winter quarters, the final numbers for the year will be approximately 3/2 times that high in the top graph. For the same reason, you should disregard (or underweight) partial-year data in the lower graph as well.</p>
<p>Third, as I mentioned before, I’ve stripped out all labs and supervisory courses. This is because supervisory courses aren’t scheduled by the department, and because labs are typically associated with a lecture section.</p>
<p>Next, what the heck are the categories?</p>
<ul>
<li>First-year : 123, 101, 102, 103, 202, 203</li>
<li>All-req : required by CPE, SE, and CSC: 141, 357, 348</li>
<li>CPE-CSC-req : required by CPE and CSC but not SE: 453, 315</li>
<li>SE-CSC-req : required by SE and CSC but not CPE: 225, 300, 349, 430</li>
<li>SE-track : SE classes. 305, 307, 308, 309, 402, 405, 406</li>
<li>half-TE : classes required by one program but often taken as nechnical electives by the rest. 431, 445, 464</li>
<li>Tech Elects : 300-, 400-, and 500-level classes eligible as technical electives.</li>
<li>Other : everything else. This is where all of the service courses live.</li></ul>
<p>The interesting thing is the degree to which our “other” category has declined: in Fall 2008, it was about 23% of our sections. Now, it’s just over 10%.</p>
<p>Thoughts?</p>dependencies chart with colorsurn:http-www-brinckerhoff-org:-blog-2016-12-10-dependencies-chart-with-colors2016-12-10T16:29:09Z2016-12-10T16:29:09ZJohn Clements
<p>Following Zoe’s excellent suggestion, I added color to the course dependency chart:</p>
<p><a href="/img/calpoly-2108-2158-colored-dependencies.svg"><img src="/img/calpoly-2108-2158-colored-dependencies.svg" width="700" /></a></p>
<p>The arrows should be the same as the previous chart, though you’ll notice that because of the way I generated it, the chart now includes the classes that don’t have any edges connected to them.</p>
<p>The colors relate to the number of students that have enrolled in each class. Specifically, the log of the number of students that have taken the class from fall 2010 through spring 2016. Classes with zero enrollment are given log(0.5). The class with the highest value is red, the one with the lowest value is green. Yes, there should be a legend. Classes that aren’t in the Computer Science catalog are gray.</p>
<p>Note that I have no idea how many of these enrolls are repeats. That would be interesting, but I’ll need a different data source to answer that question.</p>
<p>The numbers for each class are interesting, and I think I’ll just publish them separately.</p>CS Dept Enrollment Likelihoodurn:http-www-brinckerhoff-org:-blog-2016-12-08-cs-dept-enrollment-likelihood2016-12-08T14:56:24Z2016-12-08T14:56:24ZJohn Clements
<p>(EDIT: updated with 2174 data.)</p>
<p>Another picture!</p>
<p><a href="/img/calpoly-2088-2174-csc-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2174-csc-enrollment-likelihood.svg" width="700" /></a></p>
<p>This picture shows the evolution of class sizes in classes taught by Computer Science faculty since Fall 2008. Specifically, it shows the likelihood that a randomly chosen scu will belong to a class of a given size.</p>
<p>So, for instance, you can see that in Fall 2008, more than 50% of our SCUs were delivered in classes of size less than 30, and that in Winter 2017 (2172), about 90% of our SCUs were delivered in classes of size 40 or less.</p>
<p>Here’s the picture for the College as a whole:</p>
<p><a href="/img/calpoly-2088-2174-ceng-enrollment-likelihood.svg"><img src="/img/calpoly-2088-2174-ceng-enrollment-likelihood.svg" width="700" /></a></p>
<p>You may be wondering why I keep yammering on about SCUs, rather than saying things like “50% of classes…”.</p>
<!-- more-->
<p>This distinction turns out to be important. To take an extreme example, suppose that a department taught 99 classes of size 1, and one class of size 901. If we looked at the distribution of class sizes, we could say that 99% of our classes were of size 1, but this would be pretty deceptive, because 90% of our students wind up in the giant class. The fix is to use SCUs (student credit units) as our metric, rather than classes. This ensures that larger classes are (correctly) weighted more heavily, and answers the question we actually want to answer, which is: what is the chance that your child will wind up in a reasonably sized class?</p>
<p>Looking at this picture, I would say that the CS department has actually done a pretty good job; we’ve consistently kept between 80% and 90% of our SCUs in classes of size 40 or less. It’s true that we don’t have many classes of less than 30 students, any more. On the other hand, for the college, only about 70% of SCUs are taught in classes of size 40 or less.</p>WTUs taught by CSC depturn:http-www-brinckerhoff-org:-blog-2016-12-06-wtus-taught-by-csc-dept2016-12-07T00:50:40Z2016-12-07T00:50:40ZJohn Clements
<p>Here’s another interesting picture. (Well, <em>I</em> thought it was interesting, anyway.) It shows the number of WTUs taught by the CS department faculty, from Fall 2008 up through Spring 2016. It includes courses with a bunch of different prefixes: CSC, CPE, HNRS, EE, ENGR, LAES, ME, and DATA.</p>
<p><a href="/img/calpoly-2088-2164-csc-wtus-taught.svg"><img src="/img/calpoly-2088-2164-csc-wtus-taught.svg" width="700" /></a></p>
<p>This graph is broken up by the level of the course. The lowest (white) region shows courses whose names start with “01” (like “0123” and “0101”), the second region shows courses whose names start with “02”, and so forth. The “Sup” region shows the supervisory courses; senior project, master’s thesis, etc.</p>
<p>One note on “adjusted WTUs”: this data is taken from the FAD report, which misclassifies senior projects as lab courses, resulting in some very broken data. I’ve corrected this by re-assigning WTUs according to the CSU’s formulae.</p>
<p>Also, these are all classes taught by faculty associated with the department, so it includes lots of courses taught to nonmajors, as well as some courses taught by department faculty with other prefixes (for instance, a Mechanical Engineering course).</p>
<p>To me, the most interesting thing about this picture is frankly how flat it is. Our enrollments have gone way up, but the number of WTUs we’re teaching is pretty much unchanged.</p>
<p>I think the next picture to draw is how class sizes have changed over the years.</p>
<p>All parsing and rendering done in <a href="http://www.racket-lang.org">Racket</a>. Isn’t it time that you learned Racket for yourself? :).</p>CSC course dependenciesurn:http-www-brinckerhoff-org:-blog-2016-12-04-csc-course-dependencies2016-12-05T02:08:02Z2016-12-05T02:08:02ZJohn Clements
<p>Here’s an SVG showing all of the dependencies associated with CSC courses:</p>
<p><a href="/img/calpoly-2168-csc-course-dependencies.svg"><img src="/img/calpoly-2168-csc-course-dependencies.svg" width="700" /></a></p>
<p>Yes, it’s a little small to read. <a href="/img/calpoly-2168-csc-course-dependencies.svg">Click on it to see a bigger version</a>. It’s an SVG, so you can blow it up arbitrarily. (Note: this picture is a <em>lot more readable</em> since Aaron Keen made the eminently sensible suggestion that it be left-to-right rather than bottom-to-top.)</p>
<p>Things to know about this data:</p>
<ul>
<li>It’s scraped from the 2015–2017 course catalog in HTML format.</li>
<li>All cross-listed courses are normalized to their CSC equivalents.</li>
<li>Arrows are shown to all courses mentioned in the prereqs.</li></ul>
<p>The last of these is significant. If a course has a pre-requisite like “Both CSC 124 and one of MATH 117 or MATH 118”, I just draw arrows to all of them. So don’t assume that the number of outgoing arrows is an indication of the number of courses required to take this course.</p>
<ul>
<li>There are lots of courses shown here that haven’t been taught in a long time. CSC 108 jumps out at me, but there are others.</li>
<li>Some courses have a prerequisite that can be fulfilled by a no-longer-existing course. For instance, CSC 141 changed into 348, but there are still a bunch of courses that list CSC 141. Since 141 is not displayed as a hyperlink in the catalog, we assume that it’s defunct, and we don’t show it.</li>
<li>No dependencies are shown for non-CSC courses.</li></ul>
<p>All scraping and processing done in <a href="http://www.racket-lang.org">Racket</a>, natch. Graph drawn with <a href="http://www.graphviz.org">Dot</a>.</p>123 dramatically improves first-year retentionurn:http-www-brinckerhoff-org:-blog-2016-05-11-123-dramatically-improves-first-year-retention2016-05-11T13:22:26Z2016-05-11T13:22:26ZJohn Clements
<p>Okay, here’s a nice picture:</p>
<div class="figure"><img src="/img/first-year-data/pre-post-cumulative-outcomes.png" alt="first-year retention pre- and post-change" />
<p class="caption">first-year retention pre- and post-change</p></div>
<p>This compares the outcomes in the years 2005 through 2009, before we instituted 123, with the outcomes in the years since. This is a cumulative graph, showing for a number of classes how many students finished by taking that many classes or fewer, and whether they succeeded or failed. Success is defined as having gotten a grade of C- or better in 103 (that is, the condition that allows them to continue with higher-level classes in the major).</p>
<p>So, for instance, we see that in the years before 123 was added, more than 90% of students took four classes or fewer, and that about 38% of those students did not successfully finish. In the years after 123 was added, slightly less than 90% of students took four classes or fewer, and of those, only about 23% left without finishing.</p>
<p>The big picture here is the post-change years have a much lower dropout rate; our first-year retention has improved from 63% to 77%, a dramatic increase.</p>
<!-- more-->
<p>Here’s a related picture:</p>
<div class="figure"><img src="/img/first-year-data/pre-post-outcomes.png" alt="first-year retention pre- and post-change" />
<p class="caption">first-year retention pre- and post-change</p></div>
<p>This is just the non-cumulative version of the previous graph, showing how many students took <em>exactly</em> N classes. This graph makes it easier to see where it is that students dropped out of the program. What we see is that before the change, a huge slice of students dropped out after one or two classes (presumably 101 & 102 or 101 & 101). After the change, though, the largest chunk of students drop out after their third class, likely 102.</p>
<h2 id="resource-usage">Resource Usage</h2>
<p>A related analysis asks how much work it takes to educate a first-year student. Does the institution of 123 consume huge resources?</p>
<p>There are two ways of answering this question, depending on whether you consider the outcome of the first-year program to be “a student that knows the 103 material” or “a student that has completed N credits.” The first analysis penalizes us for adding a course at the beginning of the sequence, the second one does not.</p>
<p>Using the first lens, we can ask how many SCUs are required to produce one successful first-year student. In the pre–123 world, the answer is 17.76. In the post–123 world, the answer is 18.60. By this measure, educating a student costs about 5% more.</p>
<p>However, in the post–123 world, a student finishing 103 has completed 16 SCUs, rather than 12. So, if we instead compute the excess SCUs taught to the SCUs completed, we get 5.76 excess SCUs taught in the pre–123 world, representing an additional overhead of 47.98%, whereas in the post–123 world, we have only 2.6 excess SCUs, for an overhead of 16%.</p>
<h2 id="other-factors">Other Factors</h2>
<p>One major missing element in this analysis is change made to 101 in the last two years (?), where 101 was completely overhauled. It’s hard to say what effect this has had on student success, but it could definitely have lowered the dropout rate for 101.</p>
<h2 id="source-data">Source Data</h2>
<p>The source data for this analysis comes from grades earned by students in the years 2005–2016 for students that were CSC, SE, and CPE majors at any point during that time. For the analyses shown here, students starting in Winter 2015 and later were omitted, since they haven’t yet had time to complete the first-year sequence.</p>
<h2 id="tools">Tools</h2>
<p>All analysis done using <a href="https://www.racket-lang.org/">Racket</a>.</p>first-year outcomes by # of classes takenurn:http-www-brinckerhoff-org:-blog-2016-05-10-first-year-outcomes-by-of-classes-taken2016-05-10T12:52:59Z2016-05-10T12:52:59ZJohn Clements
<p>Here’s a pair of pictures showing the distribution of # of classes taken in the first-year curriculum. There are only four classes, so this is really a picture of students repeating classes, and how many times they repeat them. So, for instance, we see that about 8% of students take exactly five courses (most likely repeating one), and that in this group, approximately 85% are then finished successfully.</p>
<div class="figure"><img src="/img/first-year-data/outcomes.png" alt="first-year student outcomes" />
<p class="caption">first-year student outcomes</p></div>
<p>This graph shows the cumulative distribution; it’s just the discrete integral of the prior picture.</p>
<div class="figure"><img src="/img/first-year-data/cumulative-outcomes.png" alt="cumulative first-year student outcomes" />
<p class="caption">cumulative first-year student outcomes</p></div>
<p>Note that a lot of people come in with AP credit, and skip one or more classes, which is why we see a lot of people finished after one or two classes.</p>
<p>It’s also interesting how many people stop after one or two classes. You can look at that either as bad news or good, depending on whether you see these students as promising ones that we squandered, or students that quickly discovered that computer science was not for them.</p>
<p>Also note that since these pictures span 2005 to 2015, they cover the period from 2005–2010 when the course sequence was only three courses long. The obvious next step is to split these graphs into two graphs, to see whether the addition of 123 to the curriculum had a major effect.</p>
<p>All analysis done in <a href="https://www.racket-lang.org/">racket</a>, naturally.</p>
<p>All analysis code (though not the source data) available as part of <a href="https://github.com/jbclements/csc-first-year-data">this github repo</a>.</p>Students Entering the Majorurn:http-www-brinckerhoff-org:-blog-2016-05-05-students-entering-the-major2016-05-05T20:49:43Z2016-05-05T20:49:43ZJohn Clements
<p>A quick picture of the number of students entering cal poly’s computing majors (CSC, CPE, SE) from 2005 through 2016:</p>
<div class="figure"><img src="/img/first-year-data/students-entering.png" alt="students entering the majors" />
<p class="caption">students entering the majors</p></div>First-year Animationsurn:http-www-brinckerhoff-org:-blog-2016-05-05-first-year-animations2016-05-05T17:32:10Z2016-05-05T17:32:10ZJohn Clements
<p>First, a disclaimer: I can’t imagine this will be interesting to anyone not at Cal Poly. I’m using these blog posts as a way of dumping a bunch of interesting-to-me graphs and visualizations of the behavior of students in our first-year sequence here at Cal Poly.</p>
<p>First, an animation:</p>
<p><a href="https://www.brinckerhoff.org/tmp/2005-2016-animation-480p.mov">path of students through the first year</a></p>
<p>Using racket and OpenGL, I generated movies showing individual students (each one represented as a blue square) moving through our first-year sequence. This data is based on information about grades earned by students in our courses from Winter 2005 through Winter 2016.</p>
<p>The four columns represent the courses in our first-year sequence: CPE 123, CPE 101, CPE 102, and CPE 103. Note that CPE 123 was not offered before Fall 2010.</p>
<p>Time is represented as time in the animation. That is, the first thing you’ll see is a bunch of students entering the program in 2005. The vertical placement of the dot represents the grade they got in the course (with some noise added to prevent all students from landing on top of each other).</p>
<p>Notice that the reduced size (480p) makes the animation run smoother. You can full-screen it to see it better. There’s also a higher-resolution version that I made, but it looks to me like it doesn’t actually convey any more information.</p>
<p>Finally, I really should figure out how to slap text on the screen as part of an OpenGL animation, so that I can label the thing.</p>