Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
155 lines (145 loc) · 11.6 KB
/
Copy pathindex.html
File metadata and controls
155 lines (145 loc) · 11.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!doctype html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>UW Course Lookup — Grades, GPA by Instructor & Sections for UW–Madison</title>
<meta name="description" content="Grade history, instructor-by-instructor GPA, current sections and student discussion for UW–Madison courses, in one page. English / 中文.">
<link rel="canonical" href="https://courses.madisonstudents.com/">
<meta property="og:type" content="website">
<meta property="og:site_name" content="UW Course Lookup">
<meta property="og:url" content="https://courses.madisonstudents.com/">
<meta property="og:title" content="UW Course Lookup">
<meta property="og:description" content="Grade distributions, instructor GPA, this term's sections and r/UWMadison threads for UW–Madison courses.">
<meta property="og:image" content="https://courses.madisonstudents.com/docs/light.png">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="/favicon.ico" sizes="48x48">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600;700&family=Source+Serif+4:opsz,wght@8..60,600&family=Noto+Serif+SC:wght@600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/style.css">
<link rel="stylesheet" href="assets/css/planner.css">
<script src="assets/config.js"></script>
<script src="assets/js/guard-client.js"></script>
</head><body>
<a class="skip" href="#main" data-t="skip"></a>
<header>
<div class="wrap">
<div class="top">
<a class="home" href="./">
<div class="mark" aria-hidden="true"><i style="height:6px"></i><i style="height:14px"></i><i style="height:20px"></i><i style="height:10px"></i></div>
<h1 class="serif">UW Course Lookup</h1>
</a>
<div class="hbtns">
<button class="btn" id="askBtn" aria-expanded="false" aria-controls="agent" data-t="ask"></button>
<button class="icon-btn" id="langBtn" data-tt="langTip"></button>
<button class="icon-btn" id="themeBtn" data-tt="themeTip">◐</button>
</div>
</div>
<nav class="tabs" aria-label="Sections">
<a href="#/courses" data-tab="courses" data-t="tabCourses"></a>
<a href="#/plan" data-tab="plan" data-t="tabPlan"></a>
<a href="#/reviews" data-tab="reviews" data-t="tabReviews"></a>
<a href="#/insights" data-tab="insights" data-t="tabInsights"></a>
</nav>
</div>
</header>
<div class="notice" id="notice" role="status"><div class="wrap"><span class="dot" aria-hidden="true"></span><span data-t="notice"></span></div></div>
<div class="band" id="band" aria-live="polite">
<div class="wrap">
<div class="band-row" id="bandRow"></div>
<div class="band-cap"><span class="l" id="bandL"></span></div>
</div>
</div>
<main class="wrap" id="main">
<section id="v-courses">
<div class="toolbar">
<label class="search">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
<input id="q" type="search" autocomplete="off" data-tp="searchPh" data-tt="searchPh">
</label>
<select id="sort" data-tt="sortBy">
<option value="m" data-t="s_m"></option>
<option value="gpa" data-t="s_gpa"></option>
<option value="gpaL" data-t="s_gpaL"></option>
<option value="en" data-t="s_en"></option>
<option value="code" data-t="s_code"></option>
</select>
<button class="btn ftoggle" id="fToggle" aria-expanded="false" aria-controls="filters"></button>
</div>
<div class="filters" id="filters">
<select id="fSubj" data-tt="subject"><option value="" data-t="allSubj"></option></select>
<select id="fLvl" data-tt="level">
<option value="" data-t="anyLvl"></option><option value="1">100s</option><option value="2">200s</option><option value="3">300s</option><option value="4">400s</option><option value="5">500+</option>
</select>
<select id="fBr" data-tt="breadth"><option value="" data-t="anyBr"></option></select>
<select id="fGpa" data-tt="minGpa">
<option value="" data-t="anyGpa"></option><option value="3.8">GPA ≥ 3.8</option><option value="3.5">GPA ≥ 3.5</option><option value="3.2">GPA ≥ 3.2</option><option value="3">GPA ≥ 3.0</option>
</select>
<label class="chk"><input type="checkbox" id="fNow"> <span id="fNowLbl"></span></label>
<label class="chk"><input type="checkbox" id="fSaved"> <span data-t="savedOnly"></span></label>
<button class="linkbtn" id="reset" data-t="clear"></button>
</div>
<div class="resline"><span id="cnt"></span></div>
<div class="list" id="list"></div>
<div class="more" id="moreWrap" hidden><button class="btn" id="more" data-t="more"></button></div>
</section>
<section id="v-plan" hidden></section>
<section id="v-reviews" hidden></section>
<section id="v-insights" hidden></section>
<section id="v-about" class="prose" hidden>
<div data-lang="en">
<h2 class="serif">Where the numbers come from</h2>
<ul>
<li><b>Grades</b>: <a href="https://madgrades.com" target="_blank" rel="noopener">MadGrades</a>, which republishes UW–Madison's public grade reports by term, section and instructor. GPA counts letter grades only (A=4, AB=3.5, B=3, BC=2.5, C=2, D=1, F=0); S/U, credit and incomplete grades are left out.</li>
<li><b>Catalog and current sections</b>: the public <a href="https://public.enroll.wisc.edu" target="_blank" rel="noopener">Course Search & Enroll</a> API. Credits, breadths, prerequisites and who teaches this term come from there. Seat numbers are a snapshot from the build date, so check Enroll before you plan around them.</li>
<li><b>Discussion mentions</b>: how often a course code came up in student discussion. Only aggregate counts were ever exported: no messages, names or ids.</li>
<li><b>Reddit</b>: public threads in <a href="https://www.reddit.com/r/UWMadison/" target="_blank" rel="noopener">r/UWMadison</a> that name the course, found by web search. Only the thread title and link are stored. Tone is a rough keyword score (words like "easy" vs "cooked").</li>
<li><b>Rate My Professors</b>: not copied. Each instructor has a link that searches RMP at UW–Madison.</li>
</ul>
<h2 class="serif">How courses were checked</h2>
<p>Course codes pulled from student discussion are messy ("cs300", "comp sci 300", "stats 240"). Each one was matched against the real catalog, and codes that don't exist were dropped, including a few that were really "comp sci" misread as nutrition science. Cross-listed courses such as COMP SCI 240 / MATH 240 were merged into one row. The largest courses of the current term were added even if nobody mentioned them. Every other course in the catalog is listed too, with grades and seats but no chat or Reddit data.</p>
<h2 class="serif">Reading the derived numbers</h2>
<ul>
<li><b>Recent GPA</b> uses the last six terms with grades.</li>
<li><b>Trend</b> is a weighted least-squares slope of term GPA since fall 2016, in GPA points per year.</li>
<li><b>Instructor spread</b> is the gap between the most and least generous instructor with at least 30 graded students in that course.</li>
<li><b>Adjusted GPA</b> (used for "Highest GPA") pulls small courses toward their subject's average, so a 12-student seminar with a 4.0 doesn't outrank a 900-student course with a 3.9.</li>
</ul>
<h2 class="serif">Open data</h2>
<p>The full SQLite database (<code>data/uwcourses.db</code>) and the scripts that build it are in the <a href="https://github.com/WEBGRS/uw-course-lookup" target="_blank" rel="noopener">GitHub repo</a>. The analysis write-up lives in <code>docs/ANALYSIS.md</code>.</p>
</div>
<div data-lang="zh">
<h2 class="serif">数据从哪来</h2>
<ul>
<li><b>成绩</b>:来自 <a href="https://madgrades.com" target="_blank" rel="noopener">MadGrades</a>,它按学期、section 和教授公开 UW–Madison 的官方成绩报告。GPA 只算字母成绩(A=4、AB=3.5、B=3、BC=2.5、C=2、D=1、F=0),S/U、学分制和 Incomplete 不计入。</li>
<li><b>课程目录和本学期开课</b>:来自公开的 <a href="https://public.enroll.wisc.edu" target="_blank" rel="noopener">Course Search & Enroll</a> 接口,学分、breadth、先修要求和本学期教授都从这里拿。座位数是建站当天的快照,选课前请以选课系统为准。</li>
<li><b>讨论次数</b>:某个课号在学生讨论中出现的次数。导出的只有汇总计数,没有任何消息内容、名字或 ID。</li>
<li><b>Reddit</b>:<a href="https://www.reddit.com/r/UWMadison/" target="_blank" rel="noopener">r/UWMadison</a> 里提到这门课的公开帖子,通过网页搜索找到。只保存帖子标题和链接。语气是粗略的关键词打分(比如 "easy" 和 "cooked")。</li>
<li><b>Rate My Professors</b>:没有复制任何内容,每位教授旁边只放了一个跳到 RMP 搜索的链接。</li>
</ul>
<h2 class="serif">课程是怎么核对的</h2>
<p>讨论里的课号写法很乱("cs300"、"comp sci 300"、"stats 240")。每个课号都和真实的选课目录比对过,不存在的直接删掉,其中有几个其实是 "comp sci" 被误认成了营养学。交叉挂牌的课(比如 COMP SCI 240 / MATH 240)合并成一行。本学期人数最多的大课即使没人提过也一并收录;目录里的其余课程也都列出,有成绩和座位,但没有讨论和 Reddit 数据。</p>
<h2 class="serif">衍生指标怎么看</h2>
<ul>
<li><b>近 6 学期 GPA</b>:只算最近六个有成绩的学期。</li>
<li><b>趋势</b>:2016 年秋以来每学期 GPA 的加权最小二乘斜率,单位是每年多少绩点。</li>
<li><b>教授差距</b>:同一门课里给分最松和最严的两位教授之间的 GPA 差(每位至少 30 个学生)。</li>
<li><b>调整后 GPA</b>("GPA 最高"排序用的就是它):把小班课往本学科平均值拉,免得 12 人的研讨课靠运气拿 4.0 排到 900 人、3.9 的大课前面。</li>
</ul>
<h2 class="serif">开放数据</h2>
<p>完整的 SQLite 数据库(<code>data/uwcourses.db</code>)和生成脚本都在 <a href="https://github.com/WEBGRS/uw-course-lookup" target="_blank" rel="noopener">GitHub 仓库</a>里,分析报告在 <code>docs/ANALYSIS.md</code>。</p>
</div>
</section>
</main>
<footer><div class="wrap" id="foot"></div></footer>
<aside class="plan" id="plan" aria-label="Saved courses" hidden></aside>
<div class="scrim" id="scrim"></div>
<div class="drawer" id="drawer" role="dialog" aria-modal="true" aria-label="Course details" inert></div>
<dialog id="cmp"></dialog>
<dialog id="importDlg"></dialog>
<aside class="agent" id="agent" aria-label="Assistant" hidden></aside>
<script src="assets/js/feedback.js" data-site="courses" data-star="WEBGRS/uw-course-lookup" defer></script>
<script src="assets/js/account.js" data-mount=".hbtns" data-class="btn" data-compact="640" defer></script>
<script type="module" src="assets/js/main.js"></script>
<!-- Cloudflare Web Analytics --><script type='module' src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "bac1569834fa4682962ab1c4355c6474"}'></script><!-- End Cloudflare Web Analytics -->
</body></html>