现代计算机科学和数据科学基础介绍课程
课程简介
此课程适合没有编程经验但具备基本计算机操作知识的学生(需要一台笔记本电脑或台式机)。本课程是一个面向高中生的现代计算机科学和数据科学基础介绍课程。
数据科学和编程技术被广泛应用于许多研究领域。学习完本课程后,学生不仅在竞争激烈的大学环境中比同龄人更具优势,还能使用编程技能尽早构建自己的编程项目作品集,这对未来的实习和长期就业机会至关重要。为了支持学习,每周将为学生布置两个项目(一个是计算机科学,另一个是数据科学)进行评分。
计算机科学(CS)部分将侧重于基础编程技能和概念,为未来的计算机科学教育奠定基础。课程将强调创造力和解决问题的能力。到课程结束时,学生将制作一个基本的计算器、待办事项列表、预算应用程序以及一个可以应用于任何数据集的统计回归工具。数据科学(DS)部分将侧重于R中的数据管理基础以及简单的机器学习算法。课程结束时,学生将制作一个能够应用于任何数据集的回归算法。这种实用的、项目导向的课程方法将使学生能够亲身体验代码的实际应用。
数据科学和编程技术被广泛应用于许多研究领域。学习完本课程后,学生不仅在竞争激烈的大学环境中比同龄人更具优势,还能使用编程技能尽早构建自己的编程项目作品集,这对未来的实习和长期就业机会至关重要。为了支持学习,每周将为学生布置两个项目(一个是计算机科学,另一个是数据科学)进行评分。
计算机科学(CS)部分将侧重于基础编程技能和概念,为未来的计算机科学教育奠定基础。课程将强调创造力和解决问题的能力。到课程结束时,学生将制作一个基本的计算器、待办事项列表、预算应用程序以及一个可以应用于任何数据集的统计回归工具。数据科学(DS)部分将侧重于R中的数据管理基础以及简单的机器学习算法。课程结束时,学生将制作一个能够应用于任何数据集的回归算法。这种实用的、项目导向的课程方法将使学生能够亲身体验代码的实际应用。
时间安排
每节课计划涵盖的主题细分,可能会有变动。
第一周
第一节课 (DS):介绍数据科学领域(了解其用途),包括数据在现代世界中的作用。展示公开可访问的数据库并讨论其使用方法。讨论数据中可能存在的固有问题、用数据撒谎的容易度,并介绍避免这些陷阱的采样方法。
项目
从提供的数据集中选择一个并回答以下问题:
第二节课 (CS):讨论计算机科学和编程在现代世界中的作用。介绍编码环境、JavaScript句法以及编写代码的意义。介绍p5.js的两个主要功能:setup和draw。如果时间允许,老师将开始讨论p5.js画布的运作原理(RGB颜色和像素坐标),以及如何用代码绘制图形。
项目:句法和错误
学生将获得一份包含各种代码行的文件,其中包含错误,学生需圈出错误并解释如何修复它们。有些代码行不完整,学生需填写正确的句法代码。目标是让学生练习编写代码和查找错误的技巧。如果课堂上讲解了坐标和颜色的概念,作业也将包括这些概念的问题。
第二周
第一节课 (DS):通过Kahoot回顾上节课的重点。介绍RStudio并使用R将数据读入编程环境。讨论不同的文件格式。展示数据集的一些特性。讨论训练数据和测试数据的区别。处理训练和测试数据集之间的数据不平衡。
项目
使用COVID-19数据的案例研究。从网上加载数据到R中。将数据分为训练集和测试集。评论数据比例。重复这个过程,但使用另一个数据集,这次直接从网上导入数据。
第二节课 (CS):回顾上节课的内容并介绍如何在p5.js中绘图。学生将有一些课堂时间练习制作各种形状。然后老师将介绍p5.js中的基本用户交互以及如何与已介绍的功能结合使用。学生将了解到功能更正式的定义,并有机会制作自己的功能来增强他们的程序。如果时间允许,老师将开始介绍字符串、数字和布尔值等基本数据类型。
项目:互动艺术
通过写代码并练习创造力!学生将使用课堂上学到的知识以及其他资源,创建一些独特的数字艺术作品。他们将通过让程序响应鼠标或键盘输入来结合用户输入。
第三周
第一节课 (DS):回顾数据加载。数据操作:介绍如何整理数据、其重要性以及如何将数据整洁化。
项目
整理数据集!学生将获得老师提供的自定义数据集, 学生需要A)将数据集加载到编程环境中,然后B)在少量指导下整理数据集。老师会指定数据集的其中一部分,并要求学生能够用代码获取这些部分。老师将强调对数据的解释,要求学生批判性地思考数据质量及可能存在的偏见。
第二节课 (CS):回顾上节课的功能并展示一些可视化内容(学生上周制作的或可能性)。介绍数据类型:字符串、数字和布尔值。使用功能操作字符串和数字。然后老师将学习如何使用变量存储和使用数据,以及如何操作变量。
项目:编程练习
学生将进行一系列常见的基本编程练习,练习使用变量和设计功能来解决所给的问题。练习示例如下:
第四周
第一节课 (DS):通过各种指导练习回顾整理数据。介绍标准差、均值/中位数和概率的基础知识。介绍蒙提霍尔问题。学习如何从数据表中获取和解释摘要统计量(使用不同的功能实现不同的目标)。
项目
加载给定数据集到R中。分成训练集和测试集。学生需从数据中提取各种统计量并回答分析问题,以基本统计量进行思考。
第二节课 (CS):回顾上周的作业。介绍程序的控制流以及如何通过条件语句(if、else if、else)进行操作。随后介绍布尔逻辑及其在代码中的使用。
项目:计算器
结合变量和条件语句与用户交互,制作一个简单的计算器程序。程序的具体运作方式由学生决定,无论是使用浏览器提示、屏幕按钮还是键盘。一旦他们制作出一个基本的计算器,他们需要想出5种方法来改进或使其更复杂化。他们将研究这些改进并尝试用到目前为止学习的技能实现这些改进。如果不能,老师将来会讲到更多,希望他们能回头升级他们的计算器!
第五周
第一节课 (DS):回顾基本统计量及其获取方法。数据可视化:讨论目的和用途,学习使用R的不同数据可视化方法。
项目
首先让学生加载一个自定义数据集,然后按照老师的粗略指导整理数据。然后让学生用代码生成一个可视化,并论证该可视化的适用性,将其与其他类型的数据可视化进行比较和对比。老师将提供简短的问答题,要求学生对一些数据的不同可视化进行简要分析,进行比较和对比等。老师还会让学生通过评论偏差、分布以及数据的可见问题或有趣特征来分析可视化。
第二节课 (CS):介绍数组和循环(另一种改变控制流的方法),介绍基本的遍历算法,如线性搜索和查找数组中的最大数。将涵盖for循环和while循环,并探讨每种循环的不同示例。老师将在课堂上讲解练习题,以确保学生理解数组和循环的运作方式。
项目:待办事项列表
学生将创建一个基本的待办事项列表,用户可以通过按钮添加和删除任务。这需要使用数组来跟踪任务,添加/删除任务,并需要循环在屏幕上显示任务。
第六周
第一节课 (DS):回顾数据可视化。介绍机器学习的基本概念。介绍线性回归。讨论线性回归的优缺点。讨论过拟合和欠拟合,涉及偏差-方差权衡。在R中通过案例研究实现。
项目
学生将实现一个线性回归算法来预测房屋价格与面积的关系,然后预测超重多少磅与寿命的关系。需要绘制说明性图表。
第二节课 (CS):介绍算法、它们的用途和使用方法。解释两种算法:搜索和排序。在课堂上,老师将讨论选择排序、插入排序和冒泡排序的运作原理。然后通过解释选择排序,将其转换为代码来练习编写算法。老师将展示一种将该算法在代码中可视化的方法,使其更直观。
项目:可视化算法
学生将实现并可视化插入排序或冒泡排序。他们将首先一步一步地编写算法(一个功能),然后将其分解为每个步骤都作为一个独立的帧来展示。学生们将被鼓励尝试并创意地进行算法的可视化。
第七周
第一节课 (DS):回顾线性回归。介绍KNN回归。在回归分析中比较这两种方法。在R中通过案例研究实现。
项目
学生将实现一个KNN回归算法,回答同一数据集的两个预测问题。需要可视化,并在提供的案例研究中进行线性回归和KNN回归的分析对比。
第二节课 (CS):了解不同的数据类型以及如何使用类创建自己的数据类型。老师将讨论如何给类赋予属性和方法,以及如何创建新对象(实例)。这种面向对象编程的基础介绍引出了关于分解的讨论:如何通过分解问题来解决问题。本周的项目将在课堂上进行展示,让学生练习分解和规划代码。
项目:流媒体服务
学生将模拟流媒体服务,包含电影和电视节目,每种服务有不同的月费,还有订阅了不同服务的人。程序必须使用各种类来构建,老师将在课堂上讨论。鼓励学生以任何他们选择的方式来可视化程序,唯一的要求是用代码实现功能。
第八周
第一节课 (DS):回顾线性和KNN回归。介绍决策树及其实现。总结AI的发展状态,定性地概述诸如ChatGPT等技术,并展示强化学习的运作原理(有许多插图)。讨论AI的未来。
项目
实现两个决策树用于两个不同的案例研究。第一:邮件是否为垃圾邮件?第二:根据肿瘤的特征判断其是否为恶性。
第二节课 (CS):下一步该怎么走?首先老师将回顾对象,并涉及一些更高级的对象使用方法,如继承。在课堂上老师将提到并展示其他稍微高级一些的编程概念,如递归和图,使用现实生活中的例子如分形和社交网络来解释这些概念。老师将讨论计算机科学的应用,从Web开发到工程再到AI开发。老师将通过讨论学生在本课程中学到的知识及其他基本编程概念如何在日常生活中帮助他们,即使他们不选择进一步学习STEM来结束课程。
项目:预算应用程序
学生将设计一个简单的程序来帮助跟踪他们的财务状况。用户应能够添加多种收入来源、支出,并调整储蓄目标。老师将提供一个基本的用户界面,以便学生能够在生活中实际使用这个应用程序,并鼓励学生扩展界面以更好地满足他们的需求。
第一周
第一节课 (DS):介绍数据科学领域(了解其用途),包括数据在现代世界中的作用。展示公开可访问的数据库并讨论其使用方法。讨论数据中可能存在的固有问题、用数据撒谎的容易度,并介绍避免这些陷阱的采样方法。
项目
从提供的数据集中选择一个并回答以下问题:
- 数据的收集地点和方式
- 研究人员可能对数据的用途
- 你认为可以用这些数据回答的现实世界问题
- 数据中可能存在的潜在问题/偏见
第二节课 (CS):讨论计算机科学和编程在现代世界中的作用。介绍编码环境、JavaScript句法以及编写代码的意义。介绍p5.js的两个主要功能:setup和draw。如果时间允许,老师将开始讨论p5.js画布的运作原理(RGB颜色和像素坐标),以及如何用代码绘制图形。
项目:句法和错误
学生将获得一份包含各种代码行的文件,其中包含错误,学生需圈出错误并解释如何修复它们。有些代码行不完整,学生需填写正确的句法代码。目标是让学生练习编写代码和查找错误的技巧。如果课堂上讲解了坐标和颜色的概念,作业也将包括这些概念的问题。
第二周
第一节课 (DS):通过Kahoot回顾上节课的重点。介绍RStudio并使用R将数据读入编程环境。讨论不同的文件格式。展示数据集的一些特性。讨论训练数据和测试数据的区别。处理训练和测试数据集之间的数据不平衡。
项目
使用COVID-19数据的案例研究。从网上加载数据到R中。将数据分为训练集和测试集。评论数据比例。重复这个过程,但使用另一个数据集,这次直接从网上导入数据。
第二节课 (CS):回顾上节课的内容并介绍如何在p5.js中绘图。学生将有一些课堂时间练习制作各种形状。然后老师将介绍p5.js中的基本用户交互以及如何与已介绍的功能结合使用。学生将了解到功能更正式的定义,并有机会制作自己的功能来增强他们的程序。如果时间允许,老师将开始介绍字符串、数字和布尔值等基本数据类型。
项目:互动艺术
通过写代码并练习创造力!学生将使用课堂上学到的知识以及其他资源,创建一些独特的数字艺术作品。他们将通过让程序响应鼠标或键盘输入来结合用户输入。
第三周
第一节课 (DS):回顾数据加载。数据操作:介绍如何整理数据、其重要性以及如何将数据整洁化。
项目
整理数据集!学生将获得老师提供的自定义数据集, 学生需要A)将数据集加载到编程环境中,然后B)在少量指导下整理数据集。老师会指定数据集的其中一部分,并要求学生能够用代码获取这些部分。老师将强调对数据的解释,要求学生批判性地思考数据质量及可能存在的偏见。
第二节课 (CS):回顾上节课的功能并展示一些可视化内容(学生上周制作的或可能性)。介绍数据类型:字符串、数字和布尔值。使用功能操作字符串和数字。然后老师将学习如何使用变量存储和使用数据,以及如何操作变量。
项目:编程练习
学生将进行一系列常见的基本编程练习,练习使用变量和设计功能来解决所给的问题。练习示例如下:
- 平均值计算器:编写一个程序,要求用户输入4门课程的分数,然后显示平均分。注意:使用括号来进行运算顺序!
- 小测验!向用户提问5个简单的数学问题。在用户输入答案后,显示问题、正确答案和用户的答案。正确答案应由你的程序计算(不是硬编码)。
- 编写一个程序,首先要求用户输入圆的半径,然后在屏幕上不断地在用户的鼠标位置绘制该大小的圆。中间的文本应显示圆的面积。
- 附加:每次用户点击时圆的半径增加5。
- 猪拉丁语翻译器:要求用户输入一句话并将其翻译成猪拉丁语。
第四周
第一节课 (DS):通过各种指导练习回顾整理数据。介绍标准差、均值/中位数和概率的基础知识。介绍蒙提霍尔问题。学习如何从数据表中获取和解释摘要统计量(使用不同的功能实现不同的目标)。
项目
加载给定数据集到R中。分成训练集和测试集。学生需从数据中提取各种统计量并回答分析问题,以基本统计量进行思考。
第二节课 (CS):回顾上周的作业。介绍程序的控制流以及如何通过条件语句(if、else if、else)进行操作。随后介绍布尔逻辑及其在代码中的使用。
项目:计算器
结合变量和条件语句与用户交互,制作一个简单的计算器程序。程序的具体运作方式由学生决定,无论是使用浏览器提示、屏幕按钮还是键盘。一旦他们制作出一个基本的计算器,他们需要想出5种方法来改进或使其更复杂化。他们将研究这些改进并尝试用到目前为止学习的技能实现这些改进。如果不能,老师将来会讲到更多,希望他们能回头升级他们的计算器!
第五周
第一节课 (DS):回顾基本统计量及其获取方法。数据可视化:讨论目的和用途,学习使用R的不同数据可视化方法。
项目
首先让学生加载一个自定义数据集,然后按照老师的粗略指导整理数据。然后让学生用代码生成一个可视化,并论证该可视化的适用性,将其与其他类型的数据可视化进行比较和对比。老师将提供简短的问答题,要求学生对一些数据的不同可视化进行简要分析,进行比较和对比等。老师还会让学生通过评论偏差、分布以及数据的可见问题或有趣特征来分析可视化。
第二节课 (CS):介绍数组和循环(另一种改变控制流的方法),介绍基本的遍历算法,如线性搜索和查找数组中的最大数。将涵盖for循环和while循环,并探讨每种循环的不同示例。老师将在课堂上讲解练习题,以确保学生理解数组和循环的运作方式。
项目:待办事项列表
学生将创建一个基本的待办事项列表,用户可以通过按钮添加和删除任务。这需要使用数组来跟踪任务,添加/删除任务,并需要循环在屏幕上显示任务。
第六周
第一节课 (DS):回顾数据可视化。介绍机器学习的基本概念。介绍线性回归。讨论线性回归的优缺点。讨论过拟合和欠拟合,涉及偏差-方差权衡。在R中通过案例研究实现。
项目
学生将实现一个线性回归算法来预测房屋价格与面积的关系,然后预测超重多少磅与寿命的关系。需要绘制说明性图表。
第二节课 (CS):介绍算法、它们的用途和使用方法。解释两种算法:搜索和排序。在课堂上,老师将讨论选择排序、插入排序和冒泡排序的运作原理。然后通过解释选择排序,将其转换为代码来练习编写算法。老师将展示一种将该算法在代码中可视化的方法,使其更直观。
项目:可视化算法
学生将实现并可视化插入排序或冒泡排序。他们将首先一步一步地编写算法(一个功能),然后将其分解为每个步骤都作为一个独立的帧来展示。学生们将被鼓励尝试并创意地进行算法的可视化。
第七周
第一节课 (DS):回顾线性回归。介绍KNN回归。在回归分析中比较这两种方法。在R中通过案例研究实现。
项目
学生将实现一个KNN回归算法,回答同一数据集的两个预测问题。需要可视化,并在提供的案例研究中进行线性回归和KNN回归的分析对比。
第二节课 (CS):了解不同的数据类型以及如何使用类创建自己的数据类型。老师将讨论如何给类赋予属性和方法,以及如何创建新对象(实例)。这种面向对象编程的基础介绍引出了关于分解的讨论:如何通过分解问题来解决问题。本周的项目将在课堂上进行展示,让学生练习分解和规划代码。
项目:流媒体服务
学生将模拟流媒体服务,包含电影和电视节目,每种服务有不同的月费,还有订阅了不同服务的人。程序必须使用各种类来构建,老师将在课堂上讨论。鼓励学生以任何他们选择的方式来可视化程序,唯一的要求是用代码实现功能。
第八周
第一节课 (DS):回顾线性和KNN回归。介绍决策树及其实现。总结AI的发展状态,定性地概述诸如ChatGPT等技术,并展示强化学习的运作原理(有许多插图)。讨论AI的未来。
项目
实现两个决策树用于两个不同的案例研究。第一:邮件是否为垃圾邮件?第二:根据肿瘤的特征判断其是否为恶性。
第二节课 (CS):下一步该怎么走?首先老师将回顾对象,并涉及一些更高级的对象使用方法,如继承。在课堂上老师将提到并展示其他稍微高级一些的编程概念,如递归和图,使用现实生活中的例子如分形和社交网络来解释这些概念。老师将讨论计算机科学的应用,从Web开发到工程再到AI开发。老师将通过讨论学生在本课程中学到的知识及其他基本编程概念如何在日常生活中帮助他们,即使他们不选择进一步学习STEM来结束课程。
项目:预算应用程序
学生将设计一个简单的程序来帮助跟踪他们的财务状况。用户应能够添加多种收入来源、支出,并调整储蓄目标。老师将提供一个基本的用户界面,以便学生能够在生活中实际使用这个应用程序,并鼓励学生扩展界面以更好地满足他们的需求。