第七讲 数据绘图 TODO
1 课前准备
安装 Matplotlib(Python 绘图) gpicview (图片查看器)等工具
apt install python3-matplotlib gpicview
2 绘图
昨天看到作业遇到的问题 不知道陈嘉杰同学 还有没有补充 关于昨天的作业 你要有补充的话 还是讲一下 那行 这个昨天的作业 还有我们还发现了一些其他的 问题 一会儿我们再补充一下 关于大作业 昨天有同学反映说 同学后两周的小学期 是电子工艺实习 那么强度会非常大 所以说我们准备改一下 ddl的日期 在昨天上传的课程文件 已经把它改了 也就是说 选了两门课的同学 大作业的 选了4周课的同学 大作业的11号 还是到26号 大作业的ddl不变 但是选了前半部分 只有一二周的同学 我大多数是工物系的同学 这些同学的大作业的ddl 延长一周 改到8月4号 但是有同学会问我 如果是选前两周的课同学 和选4周课的同学组队了 那么只要你们队伍里边 有一位选两周课的同学 你的ddl都延长到8.4 不过相信同学们 会很快把它做完的 因为大作业 我们目前这个框架 已经搭好了 放在了这些地址上面 然后我们会做最终的一遍检查 然后就会把它作为作业发布出来 那么总体来讲 大作业的难度 一个大作业 相当于 三个小作业 因为比如说我们 比如说TOLA这个部分 我昨天画了一个pipeline的流程 这是我昨天讲的流程 那么在这个流程里边 我们看 它其实本质上就是三个小作业 你看 这里边是一个程序 它读入两个输入文件 然后输出一个文件 然后这里边是一个程序 它读入一个文件 然后输出一个文件 这里边是一个程序 它读入两个文件 输出一个文件 所以说相当于是三个小作业 那么每个大作业它都是这样 它保证了它的简易性 三个小作业的同时 它还其实是 在科学的前沿之上了 所以说如果同学们 把它做得很好的话 应该可以会挑战人类知识的边界 那么第二个大作业作为 因为之前是有过竞赛 所以同学们也可以去访问 竞赛的网站来 找到更多的内容 也可以 你也可以提前来做啊 跟之前竞赛的同学 拼一下分数 在第二阶段 我们也会尽可能的 把另外两个大作业 也做成竞赛的形式 因为这是一个开放的问题 整个科学界还没有一个 完整的最终的答案 所以说同学们可能会比 你所做出来的结果 可能会比目前任何 人做的结果都要强 所以说我们把它 做成一个开放的系统 比如说 之前我们竞赛的网站是这样的 可以在这些 比如说决赛里边 我们可以看到排行榜 排行榜这边有分数 然后 如果你进来了的话 还可以看到 你可以看得到 我 网络还是比较慢 比如说可以看到这样的排行榜 因为第一阶段 是一个确定性的作业 所以第一阶段我们不做排行榜 那么第二阶段 我们也会把它 做成一个类似这样子的 这个样子大作业的形式 好 那么isoenergy的 它的框架也已经好了 数据的流程 和昨天也都是一样 大家可以查看一下 按照这个流程上所写的 大概分 这里一个程序 比如说这里一个程序有输入和 输出 这里的程序有输入和输出 然后这里有一个程序 有两个输入一个输出 所以说都是相当于三次小作业的 难度 如果同学们遇到问题 因为我们还有大概两周的时间 有同学们遇到问题 可以 大作业也可以再进行调整 那么在这些大作业里边 我使用了一个程序化的流程定义 使用的是Makefile 刚才跟同学们讲说 大家可以安装这个 make 如果还没有安装的同学 可以打 apt install make 那么它的基本结构 它的基本结构是 有一个输出的目标在 它本来是一个文本文件 它有一个输出的目标 后面接一个冒号 然后后边 接你的输入的源文件 然后在下面会有一个 打一个Tab 打一个Tab键 然后上面写上你执行的命令 所以说 这也就是说 你如果这个程序 要以冒号后边作为输入项 以冒号前面作为输出项 然后这个程序执行的 具体指令 是在这里写 那么这里边有两个特殊的变量 其中美元符号和尖号 代表的是输入源 所以说输入源 你如果把文件写在这里 这些文件在指令在执行的时候 这个变量 就会被这里的文件所替换 如果这个目标 这个目标就会把美元符号 @ 我们实际来看一下 比如说在TOLA的大作业上面 我们看到这里有一个Makefile 我看到这里有一个 Makefile 它其实定义了 定义了这一点 比如说一个叫 waves.h5 的文件 也就是要求说 你要写一个程序 叫做 oscillation.py 这个程序 会以这些个CSV文件 作为输入 这些CSV文件会传承 放在这里变成一个参数 它的输出是这里 那么输出是一个 waves.h5 那么比如说这个地方有一个 ostrength.csv 它是你的输入文件 然后offset.csv 是你的输出文件 这样你就需要写一个程序 叫做sample.py 它的输入文件是 ostrength.csv 输出文件是offset.csv 所以说整个的make 它就定义了这些关系 我看前面有一个 还有几个声明 它首先声明了一个叫做all 的一个目标 那么如果我们 对all进行执行的话 它会说我要执行这个 就需要生成signal.h5 那么signal.h5 是在这里定义的 它需要用wave.h5 offset.csv 来生成 然后这里有个superimpose 它和我们之前的 那个流程是一样的 我们可以对比一下 这是我们昨天看到的一个流程 那么比如说最后一步 我们要把 wave.h5 然后这个就是offset 它要生成最后的signal.h5 我们看到 这就是最后一步的定义 这个是在这个文件里边 在一个叫做Makefile的文件里边 依赖关系 是在一个叫Makefile的 文件里边写的 输出目标输入源 这个是在一个Makefile里面写的 然后如果我是在 比如说我把这个作业 把它拿下来 比如说我把TOLA的作业 先拿下来克隆下来 然后我看到这里是Makefile 它里边就是定义了这些依赖的 关系 我们看一下make 如果我们看它的manual 可以看到它的各种各样的 各种各样的文档 其中一个选项是-n n 是 –just-print 它只告诉我们要达到这个目标 还需要做哪些事情 我们看如果make -n的话 它会告诉我们 我们要做这些事情 首先要执行oscillation.py 然后读出这些 源文件station的文件 还有频宽的文件 还有光速的定义 然后把它输出到waves里边 然后第二步 是用sample的程序 从 ostrength 的一个强度 来对offset来进行 取样 第4步 是前一步的输出 waves.h5 和后一步的输出 offset.csv 作为它们的输入 然后输出一个signal.h5 使用一个文件 叫做superimpose.py 这个是 你需要写的程序 那么如果都写好了之后 我们不打带n的进行make 它就会执行这些命令 从而把大作业完成 对 是一个可以用的说明 对 就既可以给人读 又可以给机器读的一个说明 所以说它是符合我们透明性原则 刚才同学的问题 我重复一下 它的问题是说 当make执行的时候 Makefile到底是在哪走 这个Makefile就是在 你比如说我现在在目录里边 这个目录里面有一个Makefile 那么我打执行make的时候 它就会在当前目录里边 找到Makefile来执行它 所以说我们看到每个大作业 我们都已经定义了 流程图 然后也定义了它的Makefile 而且都有一个 就是说默认来讲 我们什么都不打 它就可以执行 我又想起了一点 那么我们看 Makefile里面 其实它有很多的阶段 如果我们只完成了 第一个阶段 我们想先生成这个位置waves.h5 然后后面两个阶段 我们还都什么都没干 所以说 先想执行第一个阶段 那么可以这样 make 然后waves.h5 这样它就只执行第一阶段 如果我想只执行这个 第二个阶段 比如说我只想生成 offset.csv 它就会只 只生成 offset.csv 所以说 这样的话 如果我们 不把后面这个目标省略的话 它就会默认在 我们Makefile之下 这一块 把最终目标把它生成出来 如果我们打一个阶段性目标 它就会输出一个阶段性的目标 这是我们大作业的总体组织形式 然后还有一个依赖性的 流程的定义 有一个图片的文件 除了图片文件 还有一个机器可读 人类也比较可读的模块文件 作为大家总体的一个提纲 在做作业的时候 可以做这部分 可以参考提纲来一步一步完成 那么git的团队协作 是我们留大作业 让大家组队的一个 一个比较重要的原因 那么在团队协作中 很快我们会 通过Github的classroom 大家可以组队分组 那么分组之后 肯定会出现 第一节课讲的 版本控制和团队协作的问题 肯定有可能会两个人分别动了 不同的部分 那么怎么把你们两个的差分 进行融合起来 那么一般来说 如果没有特别的情况 在你push之前 先执行一遍git pull 它正好与git push是对应的 我们已经用了很多次push了 push的意思是说 再把我本地的查分量 或者本地的commiu 把它传到这个服务器上 那么假如说你们是两个队友 一个同学 push了一个新的commit 那么它新的commit 就到了这个服务器上 那么另一个同学 可以通过pull 把另一个同学 把第一个同学push上的commit 接收到了它的本地 这样你就两个人 就可以交换差分了 那么如果 如果真的两个人 都进行了commit 然后都往上push的话 那么就会出现一个问题 肯定是早push的那个人 成功 后push的那个人 因为你们两个所基于的都是 同一个 同一个commit 相当于两个人有一个分支了 那么在这种情况下 你在push之前 先执行一下pull 这样的话 就可以把你的队友的分支 跟你的融合起来 这是一般的情况 但是还有一些 更加冲突的情况 也就是说 如果你和另一个同学 事先没有打好招呼 你也改了这个文件的第三行 他也改了这个文件的第三行 这样这种情况下 就没有办法自动的 把两个差分融合到一起 这个时候就会有 所谓的commit冲突 如果真的出现了这种情况 你就要修改 需要解决这个commit 那么修改肯定得沟通 如果你遇到这种情况 或者是说 你想要避免 预防这种情况 请你学习 陈嘉杰同学准备的 git教程 这也是我在第一次课程公告里面 第一次课程公告里边 第一次课程公告里面发的链接 然后还有一个 是除了陈嘉杰同学的视频教程 还有一个是在线的书籍 这个书籍已经翻译成了中文版 你可以在书籍里边找 关于合并 因为之前的小作业 都是每个人一个 一个git的仓库 那么 你只要自己不断的push 就没问题 现在涉及到多人合作 所以说要涉及到合并的问题 那么大家可以先参考这些资料 如果遇到问题 大家要多多交流 比如在群里边 或者是在答疑的时候 多多交流 关于大作业 其实还有一个 还有一个事情 有几个同学联系我说 还有一些新的大作业的话题 不知道 同学有没有准备好 大家好 我们两个是来自上海交通大学的 所以研究方向 可能就不能和大家一起做 然后我们要做的东西 其实是研究 或者各种政策评估 然后国家自然科学基金 每年给予了什么科学家的项目 然后提供了很多资助 我们经常研究一下 这些科学家的 获得这些资助之后 那么它的整个的 会去研究方向 或者是它的产出 那么我们面临的一个问题就是说 在现实世界中 不同的人 可能有相同的名字 尤其像这种比较普遍的名字 比如说我们可以看到 国家自然科学基金里面 从1955年到2015年 总共有18位不同的成功教授 组成了39个项目 我们想做的事情就是说 我们知道 这39个项目的信息 我们怎么能才能把39个 把它分归类为18个 这就是我们想做的事情 我们现在拥有 这是一篇文献的背景 我们想做的事情 就是我们的数据源 是1989年到2014年 所有国家自然科学基金项目的 负责人信息 每一个项目负责人都有 一个唯一的ID 我们就是知道18个 他们是有唯一的ID的 这就是构成了我们的精确 然后我们有一个数据库 因为刚才 他不是在我们数据库里 到我们的数据库里的信息 大概是 有点卡今天 你只能提前先整好 然后让大家看一下 这就是他的问题 我们的数据库是长的是这个样子 从1989年到2014年 所有国家自然科学基金项目 它的授权 编号就是他的项目 然后以及 就是每个人的 编号 那么我们可以 这就是一张总体的表 我们可以看一下 我们发现李华 他直接用他的机构 就可以区分出来了 所以不是很好的例子 我们又找了一个叫李丹的 是吧 我们可以看到 其实 其实很多时候我们用 因为其实在获得 国家自然科学基金的概率 就已经很小了 那么他们在来自同一个大学 然后又获得了 国家自然科学基金的概率 然后是同一个名字的概率就更小 但是我们发现了 刚好是清华大学的 两个叫做李丹的人 看到他们的不一样 所以我们可以对比上 汕头大学 它的所有的项目 名字 是不一样的 但是它的人都是一样的 这里获得 国家自然科学基金的 来自汕头大学的 都是同一个人 但是我们发现清华大学他俩 他们就不是同一个人 我们要做的事情 就是能够区分出 这两个李丹 不是同一个李丹 我们大概就是这个意思 我们第二步要做的 就是 我们要掌握我们所用的信息 包括他们申请的年份领域 然后还有他们 申请的项目的标题 然后关键字 我们要做的 就是没有 label的情况下 把它区分成两个人 我们只有在精确集的情况下 验证我的模型 好 然后我们也是初次学习 所以然后我们就构造一下 我们把我们所拥有的信息 全部构造出来 然后包括标题的相似度 关键词的相似度 他们研究领域的相似性 然后以及他们的合作者信息 我们就来判断这两个人 他是不是同一个人 然后再选择算法 然后构建模型 然后最后用我们把我们的精确集 拿一部分作为测试集 然后来比较算法的效率 然后最后得到它的 假如说以K均值算法 然后是它的F值 然后看看各个模型 哪个模型的效果更好 然后最终选择一个可以普遍应用的 整个是我们的一个 大概 然后就讲完了 你有没有什么要补充的 你把这个流程再讲 流程其实就是我们上面整个过程 我们最开始拥有的信息 就是整个项目负责人的信息 还有它的项目信息 然后它的项目产出信息 这个是后面的 然后我们就看看这些信息 有哪些是可以用的 然后把它作为提取 它一个特征 然后加在我们的模型中 然后最后我们 选择一个 自己学习的几个算法 然后比较一下 他们的哪个算法更优 然后我们要做的大概就是这个事 好 谢谢大家 因为我觉得我们这个概率非常 大的 比较匆忙 没有找到更多的数据 但是这个就是一篇文献里面 也是用到国家自然科学基金 慢慢就找到了18个 刚刚给你看的 就是精确集 我们拥有的 这个是因为 包括 整张表是长这样的 我只用解决李华这个问题上 我只用机构 就已经把它给全部区分开了 我要用李丹的话 我可能还要必须要加上他的研究 领域 那就是我们要 希望把所有人重名度高的人 都可以用一种模型 就能很快地区分出来 我们可以看一下 是一篇文献统计的 他叫陈明的 他总共分享39项 然后他其实是18个人 有3个人 还有37个的项目 然后还有18个人 我们是想训练出一个模型 能够普遍的区分出这些有多少人 而不是针对某一个人 叫什么来 谢谢分享 我理解刚才的问题 如果我们把不同名字的算一下 相似度 它肯定是不相似的 那么肯定我们的训练集里边 肯定是negative的标签是最多 的 然后positive的标签是比较少 所以说这个问题 还是 挺具有挑战性 那么如果在座的同学 如果有对物理的几个问题 不感兴趣 然后可以 也可以选择 选择作为大作业的前半部分 好 刚才抱歉 占用了大家下课时间 咱们继续往下讲 我们一会提前下课 一会 有上厕所的同学 只有一个同学上厕所 昨天我们讲到了 这个数据可视化的部分啊 我们卡在了安装上 相信同学们都已经把安装已经 完成了 是吧 然后数据也下载下来 那么我们就可以来验证一下 有没有安装成功 好像我没有安装完成 谁知我安装完成还可以 我们看一下 matplotlib 一般来说 我用 matplotlib的时候 都是 from matplotlib import pylab as plt 在matplotlib的文档里边 可能是历史原因取得 它俩是一样的吗 它们确实不一样 天哪 我刚才打了一个命令 dir 是 列出来pylab的 名字空间里面都有哪些量 比如说名字空间里边有这些量 然后 pyplot 它的名字空间里面有这些量 然后我们发现 这名字空间竟然不一样 我们还是用pylab吧 你确定 为了响应同学们的号召 我开始现场学习pyplot 这就是已经验证了 matplotlib 它已经安装成功了 那么 scipy 比如说我们 from scipy import signal 如果这个import signal 没有出问题的话 说明scipy安装好 大家执行这两个命令 都没有出现错误 出现错误的同学 马上打断我 这个数据大家也下载了 是吧 下载并且解压下载 我下载了一下 如果你没有这样 打开python地方 和下载数据地方 放在同一个地方的话 那么接下来你的操作 你需要指定一下它的路径 你就要特别指定路径 当你下载下来之后 可以把它解压缩 解压缩的命令是 tar 它是什么的缩写 它是tape 就是磁带 最开始是 对用磁带进行数据归档用的命令 现在已经 现在也在用 但是它有了很多其他的功能 比如说xf x的意思是 解压缩 然后f是指定文件 现在命令还可以操作磁带 比如说我们能不能这样prs -v 是说输出 输出它做的事情 然后-f 是把文件指定 这样 我们可以看到 我们解压缩了很多 hdf5文件 一个json文件 然后一个是jupyter的 jupyter notebook的文件 然后这个是一个python程序 这些是一个python的 一个用作于库 好 这些数据都准备好了 然后我们先用json看一下 json文件 我们在学习json的时候 也看了这个文件 我们看一下这个文件 这个文件在这里 叫做BBHeventsv3 我们把它命名叫做evts 我进行的操作是 evts json.load 然后把这个文件打开 把它laod 进去 看一下evts是什么 因为json 它就是按照 按照这个字典来设计的 所以说我load的进来 把json load进来之后 它直接就是一个字典 我们来看一下这个字典里边 大家都load进来了吗 没有 那就稍微等一会 稍微等一会 我们来下载一下这个数据 今天因为大多数同学 都下载了数据 所以说应该不会太慢 已经下载的同学 可以自己探索一下 evts 它里面都有什么 比如说我现在探索一下 没有 我刚才讲了 一会都会再重复 刚才我只是自己玩了一会 大家都下载成功了吗 解压好了是吧 好 我们就开始工作 先把 json load进来 然后用json打开这个文件 少打个括号 这个符号就是 那么这样就把json文件 给读进来 读进来之后 我们看一下evts 就是一个字典 那么字典里面 都有什么样的 键 我看这个字典里面 是有一个 引力波的示例 一共有4个示例 所以我们今天先去看第一个事例 也就是150914 我们把这个事例 赋给一个中间变量 比如说GW 然后我们再看一下 keys 里边都是什么 一共有这个name 这些 我们把GW整个都打印一下 这个看起来比较难受 我们看一下它有它的名字 就叫GW150914 然后这里有一个 fn 看起来 是 file name 的意思 然后H1和L1分别是代表 LIGO的两个基地啊 一个基地是 某个H打头的地名 一个L应该是 Louisiana 是把G2转化成字符形式 对 然后转化成字符 它变成字符串了 但是没有什么用 所以说大家忘了 是我刚才做了一个实验 发现没有成功 是的 对 所以没有什么用 我看是不是这样会好一点 这也不行 好 没什么用 大家都 我不需要管它 那么第二个是H1 L1 它指向了这些文件名 所以说看起来这些文件名都是 有用的数据 我们看一下这个文件 这个文件是什么 比如说我们用h5py把它打开 把这个文件给它打开 看一下 它里面都是什么 比如说我们取一个 我取一个变量名叫fH1 然后看一下这里边的文件 都是什么 h5py里面都有 什么 这个取的就是刚才的这个字符串 其实我们可以直接这样取 用字典的变量 是一个道理 好 我把它读进来 把hdf5的文件读进来了 读起来 我们看一下 它有什么keys 上一步我回顾一下 我们看到有4个events 我们就可以 把其中一个event 把它取出来 叫做gw 然后gw里边 我们看了一下 我们看了一下这里边 有一个看起来是数据文件的东西 什么什么.H5 所以我们要把这个数据文件 拿出来 比如说这样 我们就把字典里边的 数据文件的 文件名拿出来 那么有了hdf5的文件名 我们就把这个文件打开 这样把它打开 这样就把它打开了 我把它取一个名字叫fH1 我看一下 这里面都有什么 都什么东西 这样看不到 我把它转换成列表 看里边有 meta quality strain 我们应该先看一下meta是什么 8 members 看看能把它都 list meta 里边有 Description Dector GPSstart Observatory UTCstart 我看到它有一些 有一些变量 比如说这个变量 我们看一下 Description 看一下 这是一个 Description 我看不出来 它是什么类型 dataset类型 能把它都取出来吗 好 它是一个非常奇怪的array array里面只有一个元素 Strain data time series time series from LIGO 刚才我的探索过程是这样的 我一级一级 我打开了hdf5文件 一级一级往下看 我看到有meta data 是这样 然后Description 这个这个 给出了 这个文件的一些说明 所以说 遇到一个陌生的文件的时候 我们会经常遇到这样的 这样的探索的过程 所以说有的时候 如果我们有一个hdf5 查看器 然后或许会更好 比如说 我看这个文件好像太复杂了 我们把它dump一下看看 dump 我们不是之前有一个命令 叫h5dump 然后看一下文件 h5dump 我们现在随便当可以 看起来这些文件 应该长的都是一个样子 dump可能会非常大 所以我打一个 |
less |
注意一点 这里加一个竖线 表示说 把这个dump的内容 把它放到less里面去 你这个是 本来dump的时候 它一下很多东西 我想一点点看 那么我就让它变成一个会翻页的 部分 这就是加一个| 然后加一个less 这样就用less程序 来分页的来读这个数据 比如说这样看 可能就更舒服一点 比如说 Description Strain data time series 然后 DescriptionURL URL在这里 然后Dector Detector 是 Louisiana 然后Duration是32 然后这里GPSstart 这里有一个时间的标志 然后我们可以继续看到 quality 这里边还有一些quality的解释 我看一下那文件叫啥来着 这个文件叫gw 我们可以看一下这个文件 爆炸了 这样就看一下 大概看一下这个文件里面都是什么 哪个下划线 这个下划线是装饰 不用管了 不需要装饰 但是我也没dump成功 这个文件可能是有问题 这个文件是坏的 竟然 LIGO竟然给了我们一个 这个部分损坏的文件 那我们换一个别的文件 比如说 但是用h5py读出来 还是好 都没有问题 用h5py 一部分是好 至少 大概就是这样的一个 我可以选一个别的 hdf5文件 它们这些文件的格式 应该都是一样的 有同学 用h5dump不成功的吗 好 大家不用太过纠结这件事情 同学们不用太过纠结这件事情 这只是一个小插曲 因为LIGO合作组也知道 自己文件太复杂了 所以说 它给我们提供了一个帮助程序 这个程序叫做readligo 刚才解压的部分里边 有一个文件叫做 readligo 是这样一个程序 这个readligo 它其实是很长的 是把readligo打开 然后翻页查看 这里有个readligo 然后我们看readligo 其实很长的 它有一个非常长的辅助文件 告诉我们 给了我们一个文件 这个文件里面 定义了很多函数 这些函数来帮助我们把LIGO的数据 读进来 所以说刚才我们看到了一个 hdf5 它的内部还是很复杂的 所以说LIGO给我们提供了一个 帮助我们读入的这一个程序 所以说我们需要做的事 用LIGO自带的程序 来进行import readligo as rl 这一点其实非常有意思 不是不知道大家有没有注意到 我现在是把readligo 当成了一个模块来读入的 我是import 那么它是从哪import的呢 它就是从当前目录 import readligo的文件 所以说这是python一个 另外一个非常便利的地方 我们可以非常容易的 创建一个模块 只要把 只要把我们想要做成模块的文件 把很多函数放到里面 然后把它放到当前目录下 我们就可以import import 这个 readligo的程序 我看这个rl里边 都有什么样的函数 比如说我们用dir(rl) 看一下 readligo 里边 它都定义了什么函数 我们看一下 它定义了什么 loaddata 它也输入了numpy 还有 readframe 然后还有什么readhdf5 还有什么 getsegs fnmatch 它大概实现了这个功能 看起来就是要把 LIGO 他们约定的文件格式读进来 好 那么我们用一下 就用工具 这个工具是这样写的 刚才我们是把这个文件名 拿下来了 这个文件名叫做gw 这是我们刚才要的文件名 我们就把它load进来 它load进来是会出来三个量 rl.loaddata fnH1 这个地方要改成 我先把这个文件名 先给它一个变量 这个变量就叫fn 然后我再把命令从我的slide里面 复制过来 这个 strainH1 time chandictH1 它loaddata的时候 我就使用了 LIGO给我提供的read readligo的模块 用这个模块里边的函数 来进行读取 读取之后出来的是三个量 第一个量叫做 strain 第二辆叫做 time 第三个量叫 chandict 好 读进来了 我看一下这三个量都是什么 strainH1 这个很好 看起来是一个numpy array 那就是说 它应该是 我们比较有用的数据的 看一下它的shape 这看起来非常好 在这一步 这些都是从哪来的 在这里来的 或者你打出来 我上传了 不好意思 我记得我上传 我把原来的更新了 把原来这个更新了 那么即使不看课件也没问题 我们取一个简单的名字 就叫H1 这叫ti 这个叫cdH 这样 好吧 这样大家可以少打一点 这样就把这个文件loaf进来 我们再看一下 这个rl是我刚才把它的帮助的 模块给它 导入进来 取名字叫rl 然后loaddata 就是他rl 它里面配置的一个函数 这个函数里面第一个参数是 我需要读的hdf5的文件名 第二个参数H1 代表的是 第一个LIGO Detector的名字 具体来看 我们要看这个函数定义 我不知道它函数有没有定义 我看一下它有没有定义 是有定义的 Input file name should be a LOSC hdf5 return list 一个是STRAIN 一个TIME 一个是CHANNEL 说明它的readligo的模块 写的还挺标准的 它的函数里面都有文档 我们可以看看这个文档 刚才我执行的命令是这个 大家都可以 可以无 无坑地执行了吗 你没有那个文件 有同学问说 为什么参数只有两个返回值 就是三个 那么 因为这个函数定义 你可以有任意多的输入 和任意多的输出 它们没有必然联系
3 绘图 2
fnH1是我刚才把文件名 赋值到里面的 这一步 我为了和它的示例代码一样 我就又把文件名给改了 我的刚才输入的东西是 是吧 没写吗 ifo 说明它这个文档写得 不好 是吧 我们看不出来它是啥 我们如果啥也不输 看能怎么样 好像什么也不会发生 它那个变量 好像并没有什么用 好像还是一样的 好像并没有什么用 就这样 大家不用太纠结 说明LIGO的组 他们在不断的更新代码 然后更新的时候 他们没有坚持一次性原则 所以说旁边的一个程序改了 然后文档的这部分 还没改 所以可能会出现一个信息 不同步的问题 大家都解决了疑问吗 我们大概理解这个意思 你看他们后面都一个 不是有的同学一直有疑问 说为什么我输入一个 就出来三个 就是这个函数 相当于一个管道 然后你放进去什么东西出来什么 东西 是根据这个函数决定的 这个函数就可以返回三个 这函数也可以任何的不输入 然后返回三个 比如说我你看 我什么也不输入 然后我凭空返回三个东西 那么我执行这个函数的话 我就可以给三个变量赋值了 然后 a b c 输两个就会出问题 我说后面 首先这个函数 它的输入跟输出是没有任何关系的 就是 这个格式是没有任何关系的 然后我这个函数 既可以输一个 还可以输两个 是因为这个函数 应该是 这个函数 有一些缺省的参数 比如说这个参数 这几个参数 所以这个函数 我最多可以输4个参数 但我如果不输的话 这个参数就会给出一个 给接受一个 默认值 所以我只输一个参数的时候 它就是filename 输两个参数 就是ifo 第三个就是带 tvec的 所以这一步是我让这个函数 读这个文件 然后返回出来三个数据 进行返回了 返回来我们看 最感兴趣的 应该是 H1.shape 上面有 非常多的数 非常多的数 那就意味着 我们有非常多的数据 我们是最希望看到的事情 我们看一下这个数里边都是什么 然后我们如果看一下 我看会发现 只能看到第一个第二个第三个 然后因为这数实在太多 我们没办法 把这些数都看一遍 比如说我们可以 可以这样看 比如说每隔100个 看一下 还是很多 好吧 然后我们看 都是非常小的数 所以说 因为数据太多 我们没有办法 虽然我们可以读 但是这个还是没有办法理解全局 所以刚才我们所用到的 matplotlib 就可以上场了 我们看 H1 它一共有这么多的数 我们先画一个最简单的图 plt.plot(H1) 这样就把H1给它plot 很粗暴的plot 好像刚才退出了一次 from matplotlib import pyplot as plt 刚才同学们已经做过了 但是我忘做了 H1 它说已经plot完了 但是却没有任何显示 我们把它 有些同学可以把它show出来 但是有些同学可能show不出来 我们来把它先存一下 存一下 把它存成一个文件 plt.savefig H1.png 把它存成一个图 刚才我们要画的东西 存成一个图 存好了 我们看一下 图片是什么样呢 我们是在文件夹里面 看看有没有新的 新的图 有个H1.png 这个时候 大家可以查看一下这个图 查看这个图有多种多样的方法 比如说你可以使用VScode的remote 来查看文件 然后对于我来说 我是用另外一个工具来查看文件 但是你可能没有安装 但是你用自己的方式来看图就行 反正就是这个图 是这样 plt.savefig 然后你打一个图的文件名 他们把什么 把你刚才画的存到图里了 png 好像是 Portable Network Graphics 新文件 你要存下来的新文件 对 这个H1是这么来的吗 用你平时看图的工具看 png 你比如说用VScode的 把png打开 我平时是这么看png的 但每个人都有平时看png的方法 这个就是它画出来的图 现在还看到 不是 看到那个图 大家就能感受到 做实验的时候 一般来说看到的都是这种东西 因为它跑的时候会 它默认使用了奇怪的后端 它没有pyplot 我们先下课 好 刚才有同学遇到了一个问题 我先把它改一下 啪啪 刚才同学问 遇到这个问题 当你在打 plt.plot 时候 出现了一些没有 DISPLAY 这些的警告 那么我们课间的时候 紧急的看了一下 解决方法 你需要import matplotlib 把matplotlib的 顶层的名字空间 导入进来 然后进行mpl.use 使用 Agg 你会按汉语拼音来读吗 就是说 import matplotlib as mpl 如果刚才plot成功的 同学 就不用做这个步骤了 mpl.use("Agg") 这样即使你没有 你在你的环境里边 没有图形界面也可以 同样可以用了 Acg是什么意思 我刚才也想知道 但是我一直没找到 它是什么意思 我猜是什么 这样的话 我们就可以进行plot了 刚才我们把它存到了一些H1 plot之后 它会返回一个对象 告诉我们说plot了一个线 这个线是二维 还是不行是吧 我们就只能另开一个新的了 这个问题太悬学了 我们开一个新的 再把 pyplot 载入进来之前 就应该有设置 先这样读入 然后use Agg 要从里面打的太多了 打的太多了 那也没办法 我们刚才 如果把它存成一个脚本就好 但是今天只是说 练习一下画图 我们还没有真格的 去分析LIGO的数据 遇到问题的同学 要在 import pyplot 之前 先把 matplotlib 的 后端设成 Agg 这是一个一直以来困扰 困扰数据科学界的问题 但是这个matplotlib 到现在还没有彻底解决它 大家担待一下 工具 然后我们就得重新把它读进来 继续 import readligo as rl 是吧 我们还进行了 import json 然后有一个evts GW150914 这个是我们的evts GW有一个fnH1 就是这个文件名 然后我们要用rl,loaddata 把这个文件名读进来 对吧 读进来之后 出来了三个变量 一个变量是H1 一个变量是ti 然后一个变量是 channel data 这个文件已经被打开了 我先把这个退了 就好了 好 我刚才重新做了一遍哈 首先我把matplotlib的 它的后端改成 Agg 然后 from matplotlib import pyplot as plt 然后我把读入LIGO数据的 模块放进来 然后我读入了json 同学们如果觉得它 太长 可以把它存到一个脚本里面 然后我这样loaddata 把这个文件就读进来了 这里就有一个H1 是吧 H1 我看到非常的大 一共有 13万个数据点 那么每个数据点 相当于 是LIGO的这一台机器 每隔一个时间点 每次采样 一共采了13万个值 然后因为这个值太多了 所以我们来进行 把它进行plot 这个plot大家都能成功吗 把backend 使用Agg之后 它就应该可以成功的 不能打 Show savefig("H1.png") 这样就把我们刚才画出来的图 存成了 图像文件 我们来看一下这个图 每个同学都有自己看图的方法 可以用VScode把它打开 或者是 你用其他的方法 都可以 我是用的这个工具看图 这就是我们刚才画出来的图 大家都能画出来这个图吗 有的同学画图的时候 遇到了困难 因为Vscode打开这个图 看起来 还是很方便的 有没有同学在画图的时候 遇到了困难 我们刚才其实是遇到了 matplotlib 的一个缺陷 缺陷是 只有当matplotlib 还没有画图之前 就来打这个命令 一旦画了图之后命令就没办法 改变了 就不起作用了 没有办法 这个是matplotlib 就比较伤 但实际上新版本会自己检测出来 是吗 反正就慢慢的不知道你这东西 对 然后因为我昨天专门查了一下 操作的 这么说它已经解决了 没有跟上的同学 可以 可以参考一下这个部分 然后其实我们已经打了这么多条 命令 这么多条命令 其实已经不太适合 交互式的开发了 我们其实已经应该 把它放在一个脚本里边来运行 但是今天因为我们想 把数据读进来 然后画一个图 我们今天是比较特殊的 我看很多同学 已经把这个图已经 高级版的图 已经自己在私下画出来了非常好 比如说 HDF5里面 有各种各样的数据 你可以把它们都画出来 可以探索一下 这几步都执行完了吗 同学们 好 我们刚才把图画出来 这个图有很大问题 一个是看起来很丑 它其实告诉我们一件什么事 实际的实验数据 如果我们不做任何处理 乍一看都是这个样子 虽然我们已经知道 这里面有一个引力波的事件 在这里边 这里边是有一个引力波的事件的 是吧 但是我们如果不经过训练 或者是 不知道我们该看什么 其实我们根本看不出来 它里边有引力波的事件 这就是人类看到的 第一个引力波事件 是吧 但是我们就很不容易发现它 比如说这个图 还有一些别的问题 比如说这个画出来之后 我根本不知道它的单位是什么 是吧 这个图我只是看到一个 看起来随着时间变化 我知道它随时间变化 但是在这个图里面也不明显 但是一般来说 看这个看起来 就像一个声波一样的东西 那么它应该是一个随时间变化的 那么这个单位是什么 目前默认的单位 我们只是给它传递了一个数组 它默认的单位其实就是 它本身 这个数组的标号 就是说它一共有13万个数据 那么它 X轴就一直长到了13万 Y轴 是 这个数组里面数的值 其实是这样 看起来 看起来非常的小 10的-18次方 但是我们并不知道它是啥 说不定是米 因为它的精度是10的-19次方 我猜的 所以说 我们可能会给它加一些别的东西 比如说我给它加一个 加一个X的 xlabel 我给他加一个X的坐标说明 比如说它是 现在这个是标号 是index 发生了什么 这是一个这样的index 然后我们再存一下 reload 我也不知道是怎么reload 重新打开一下 你看 刚才我们给一个坐标轴 加了一个说明 叫做index 现在这个图里面 就出了一个index 比如说我们 再加一个别的说明 比如说开头 比如说 title 大家打什么都行 我给这个图起了个名字 然后再save 我刚才给这个图起了个名字 这个图的标题就有了 好 复习一下 刚才 我说我打xlabel 它就可以给X坐标起名字 然后打title 它就可以给这个图 给一个标题 那么大家应该可以举一反三的 比如说 ylabel就给Y坐标轴 取名字 比如说它叫 strain metre 它就可以给Y坐标轴起名字 好 假如我起的名字 我不想把它 就放在 我想给它放到外面的地方 你可以看一下这个文档 这个问题很好 但是我不知道怎么改 X坐标轴说明的位置 肯定有方法 但是你也可以说把一个 text 文字 放到这个图的任意位置 你可以看一个叫做 plt.annotate 然后说 Annotate the point 但是 但是你要说把这个 这个图上的这几个元素 然后给它换地方 比如说它换到这儿 换到这儿 这个事情你要仔细查一下 目前我也不会 平时没有做过这件事 但肯定是有这个功能 我们还可以做的 讲几个常用的命令 我们还可以做的是 比如说 Plot画一条竖线 比如说画条竖线 vlines 比如说我们看 我想在4万这儿还有8万这儿 分别画两条竖线 对吧 从-0.6画到0.8 从-0.8 画到0.8 10的-18次方 那就是-0.8 10的-18次方 0.8e-18 这个命令的意思是说 在这个图上画两条线 4万和8万 然后从-0.8 ×10的-18次方 一直画到正0.8 乘以10的-18次方 画完之后 我们再存一下这个图 我们看到了有两条线 这两条线 这有一条黑的竖线 这有一条黑的竖线 那么plt它还有非常多的 功能 我先把命令放这 给大家半分钟的时间 刚才有一个同学建议说 说这个图看起来太难受了 根本不知道它到底 到底这个信号是怎么走的 我们能不能看一个直方图呢 再给大家几秒的时间 然后我们看一下直方图 怎么样 vlines 就是竖线 为什么 你是不是把它show出来了 你如果show出来的话 可能会清空 你如果savefig 它就不会清空 然后它就会 那样 一点点叠加上去 所以说你应该可以理解 这个发生了什么 你想画成一个叠加的 我觉得你也是会的是吧 也就是说 matplotlib的 约定 它认为你show了之后 你已经看到这个图了 下一步你是想重新画一个新的图 你一旦看了 它的状态就变了 是 但是我savefig 然后我就把这两个相干性给它 解开了 这样我就能分别去看了 全部在这里 好 vlines 大家没什么问题 用于我们标记这个位置 还是很有用的一个功能 然后hlines就是标记横的横线 但是肯定有非常多的功能 比如说 我刚才看到了这个命令 比如说xkcd 就是说把 把这个图 改成一个漫画的形式 我们看一下它怎么用 比如说我们试一下 竟然没改 大家可以自己探索一下 我的notive尝试 没有成功 可以用xkcd来把这个图 变成一个漫画的风格 哪呢 我再plot一个 我先把它clear 我画一个xkcd版本的 果然变了 所以说 matplotlib 它还有非常多的功能 今天可能只举几个 非常常见的例子 好 我们刚才一个同学说 这样的一个一个图 看起来都重叠在一起 然后也找不到什么规律 我们是不是看一下直方图 我们再 介绍一下直方图的命令 直方图就是 hist 就是Histogram的缩写 看一下hist它都要什么 参数 这有一个x 就是你要给的 这个数据 然后bins是一共分成 hist分成多少个组 我们来hist一下 H1 发现它一共默认分成了 10个组 然后我们把它存一下 因为我没有把 大家可以用clf 就是说把 fig清掉 重新再打一次 还是xkcd的 风格 但是大家也可以看 是吧 看起来反而更清晰一些 我们看到 信号看起来 很像一个高斯的形状 是吧 它就是在0中间来回震荡 也看不出来什么规律 是吗 那你把它的均值和方差 非常的好 这位同学刚才做了一件事情 我怀疑它是高斯 然后他把 分布的方差和均值都算出来 然后用高斯分布模拟了一下 取出来一些数 然后跟它对比了一下 发现形状长得并不一样 那说明我们的假设是 错的 好 同学们 非常好做这些探索 好 那么hist也是这样 刚才我们plot的时候 直接plot一个方向 我们看一下其它的数据是什么样的 比如说H1是这样的 你看看time是什么样 ti 我们刚才取的名字 叫ti ti和它的shape一样 那么time既然是这样的 我们看一下time 一个什么样的 什么样的数据 我先要把这个图清空 clf 把它清空 然后我们看一下这个time 然后我们把它存起来 存一下 看一下这个ti是什么 看起来就是 一条直线 那就是时间 就是一条时间 所以说我们可能说 这个时间 我们分析一下 这个时间有这么13万个数据 然后 H1 有这么13万个 数据 说明 这个时间和H1是对应上的 那么就是说 在这个时间检测到的 剪切 不是剪切 拉伸量 是这么大 所以说我们想plot的时 其实是想把这两个关系plot出来 那么在plot两个量的时候 第一个量就是对应一个X轴 第二个量是对应于 它的因变量 所以我们要先把图先清掉 然后我们plot一下这样子 根据时间来说 然后我们看一下 它把这个图存起来 那个是H1 存完了之后 我们看一下这个是 我们看跟刚才没啥区别 但是区别在于横坐标变了 横坐标和原来不一样 它是一个什么 1.1加上 1.1×10的9次方 加上这些45 50 56 60 75啊 看起来是一个秒的单位 我们要看 LIGO的数据的 约定 我猜它是一个秒的单位 这个图和刚才图完全一样 只不过X轴画 原来 X轴 我们用的是数组的默认的标号 现在 X轴我们把它加上了时间 这样的一个图就看起来 更加的 更加具有科学性 我们再读一下别的数据 比如说L1 之前H1我们是怎么读的 H1是这么读的是吧 刚才我们这样 把H1的数据读了起来 现在 LIGO不是有两个 单元吗 一个是 H H某一个州 然后L是另一个州 路易斯安那州 然后我们这样 这样我们就把 路易斯安的数据 也读出来 把它改一下 把 H都改成L 把它再读一下 我很好奇 它这两个时间是一样的吗 刚才ti是 我没有import numpy 它这个时间确实都是一样的 也就是说这两个数据 这两个数据的X轴是一样的 然后它是在LIGO的 两个不同地点的机器上 所接收到的信息 一个是在H地点接收到 的信息 一个是在L地点接收到的信息 我们再看一下 L上面是什么样的 是什么样的 是什么样的变化趋势 我们就直接一步到位了 我好像忘了clean 我先把那个图给它清掉 再plot 然后再把存起来 这是L1 这个图 L1 就看起来 不完全一样 但是好像也是这样 比较混乱的一个信号 我们应该可以把xkcd给它关了 xkcd应该怎么关 行不管它了 我们就继续以漫画风格前进 刚才我们画了L1 看了L1 它跟 H1看起来差不多 但是不知道大家注意到没有 L1的 它的中间值就不太一样 我们如果画一个 它的LE的柱状图的话 探索一下 L1里边有什么 它的均值是-1 -1×10的-18次方 但是前面 H1它的均值是0 所以我们看 似乎它们是有一点区别 所以我们就很想 有一种冲动 因为X轴也都是一样的 刚才我们已经看到 X轴一样 我们就有一种冲动 把这两个图画在同一个 上面 让它们共享X轴 这样 好比较 L1和H1这两个 距离比较远的地点 他们接收到的信号 是什么样的 说不定我们能看到一些什么关联 所以我们要做的 所以我们要做的是 先把L1画上 然后再把H1画上 然后再把这个图存一下 然后我们看一下 它们就画到一起了 画到一起 不是很容易看出 到底哪个是 到底哪个是L地点的 哪个是H地点 然后0的这一点是 H地点的 -1的是L地点 但是我们这么画在这儿放在这儿 肯定是过一段时间 我们可能就忘了 到底哪个是哪个 所以说我们要给它加一些 加一些label 加一些标签 比如说 然后我再打H1 我再让它把标号的图例放上去 还需要图例 然后我们再savefig 把它储存起来 然后再看看 这样我们就知道 原来黄的是H1的 部分 蓝的是L1的部分 然后横轴是时间 如果我们把它写的 把它写的完整一点 然后你再把横轴放上去 是以秒为单位的 然后纵轴 纵轴是Strain 以米为单位的 然后 title 比如说 LIGO的拉伸的这些数据 这两个地点的 这样这个图就比较完善了 存起来 存起来之后就有了 就有了这样一个比较完整的图 但是我们看到会有一些瑕疵 比如说 这个跟标题被覆盖了 然后挡住了一部分数据 然后 这部分被切断了 这可能是xkcd的一些问题 我们如果用一般的 我们用一般主题的时候 有时候也会遇到这个问题 这个时候可能就需要 按照刚才同学问的 要调整一下它的位置 要不然它可能会重叠 在这一点上还没有办法做的特别智能 好 我们先下课休息一会 好 上节课我们一路 一路用漫画风格 画出了这个图 同学们都成功了吗 没问题 不一定 你用你的风格 就画出来就行 默认风格 大家都成功了吗 有没有遇到困难的同学 没有遇到困难的同学是吧 非常好 我们会 今天会有一个小作业 这个小作业就是 大家敞开心扉的画图 然后画什么样的图都行 然后我们先请陈嘉杰同学 来总结一下 昨天的特别的小作业了 这是昨天的那道题 对吧 大家做的感觉怎么样 然后给大家讲讲 数据是怎么出的 数据首先先搜了这么一张 然后我在上面取了一些点 然后就变成了大家拿到的数据 所以大家拟合出来 自然就会变成这样一个图案 理解了吧 我是先拿这样的一个图 在上面写了一个点 我把它拆成了4个组件 然后把每1个简单的案例 分成4个组件 然后最后让大家画的时候 大家画成4个的时候 合起来 然后你们今天还会 在干嘛 然后分数计算方式啊 大家可能都看到 网络学堂上给大家评分了 然后大家有没有想问 所谓的指数 它也是怎么做的 很简单 然后这个系数的话 大家可以看一下这个系数 大概怎么换算 然后乘0.8是80% 还有一个20% 然后时间大概要有一个分钟 然后大家可以验算一下 如果我们算错的话 或者大家可以看commit的 这个提交时间有疑问的话 可以下来找我 然后 然后右边这个图 就是用pyplot的方法 刚才其实上面已经讲了 用hist 然后把这个函数丢进去 然后它就能生成 另外这个图 就是最后的分数分布 看来大部分同学还是比较高的 低分主要是交得比较晚 然后发现 虽然指数 但是其实指数 因为大家都在调低的部分其实是 越来越降越来越慢 所以学生分数并不那么差 OK 然后我们提供了两个参考答案 都已经放在Github里面了 然后大家可以回去看一下 然后待会我给大家演示一下 然后这两个其实 因为我们自己 不配给自己100分 所以给大家看 对 然后这两个分别是比较经典点 大家把矩阵取出来 然后再进去 然后第二种方法 是 提供的函数 然后它能直接帮你做这件事情 然后这两个代码的话 然后 然后我主要是给大家讲讲 发现的普遍的问题 大家我们是从头写到尾 写完整个程序之后 然后跑一遍 发现不对 然后我慢慢看 我先看第一点 好 然后我发现好像看来没问题 再看第二段 好没问题 现在我从头到尾看了一遍 还是没有问题 再讨论这个问题 然后瞪了半天 然后这时候 其实最重要的需要的 大家一个能力就是说 大家需要学会 用print打印中间的一个信息 然后这样才最 方便大家一个调试 而且实际上 如果是让我们自己来写的话 就像我们并不像大家那样 而是其实我们是这么解决的 我们是先写一小段 然后print看一下效果 对不对 如果这是对的 我再继续往下写 写一段的代码分析一下 判断我没有问题继续往下走 然后给大家演示一下 好的 时间关系 我就直接抄标准答案 这个是一个终端 然后首先 txt 现在是大家原始名单 发下去的文件 然后发现它现在啥也没有 没有语法错误 对吧 好这时候我就会怎么做 比如说 这边读data是吧 我先看它是个啥 对吧 好 好 你就不这样了 但是它还是不对 但是它应该能够 对 我觉得好 好 这时候我们应该就能看到 data里面的数据是什么样子 可以看到它 然后它有个 对吧 我们应该就知道 说从这里我们要先通过 把它读出来 这时候我们可以手动确认一下 这里可以看到 每个点都正确读出来了 或者是你写的代码是没问题 这时候我们可以接着往下写 就是不要先rush的 把代码全部写完 待会再调 而是应该你写一步的话 一步接着一步 可以看到 它确实是得到了这么一个方程 然后他也确实能够非常好 然后大家如果在这里 如果细心一点的话 大家也可以 但有肯定会有要求的 可以估算一下这个位置 其实大家可以直接看数据表 如果你 大概都没问题 然后大概到这儿 你就能猜明 确实算的是差不多对的 我们继续往下做 然后这时候我们再去跑print 对 大概这么一个 说大家写代码 不要从头到尾直接写完 然后带着头脑去瞪眼 瞪眼法 去看代码 而建议大家是一个 是大家可以边写边debug 你写一段看一下 对不对 起来看对不对 然后这样的话 也可以有效的帮助你 肉眼debug 缩小了很多 然后当然主要是这门课 也没有教大家去 用一些更高级的方法去调试 比如说 你这样可以做到 每执行一行代码 然后就跑 就可以看它的各个变量 这个可以 但是这个东西 你需要配置一下 环境比较麻烦 我上课不会讲 大家下课可以过来去学习 然后现在来给大家看一看 就是今天的东西 对 然后那边应该马上我们就 好的 今天还是爱心主题 大家都在互相看 OK 好的 刚才今天刚好讲的内容是画图 对吧 然后刚才我跟大家说了 我们之前给的数据就是画出来的 我们想我们让大家自己画一下 可以了 然后能给大家一个 说白了 给大家自由发挥的空间 我们让大家写一个 然后用刚才学的那些知识 你可以给你 去网上找一个好函数 你也可以去自己设计一个 反正你可以自己决定 然后我们会有一些规则 就是说你可以 做基础 就是你画出来 你一定要一眼看上去是爱心 对吧 不能有奇怪的东西 对吧 不能在上面 一看一眼啊 那只是个圆 然后你说的爱情 但是为了让大家有一点动力 来做更多的学习 更多深入的东西 还会有一些加分项 就是说比如说 如果你画一个实心的爱心 就加个界面 对吧 然后对这些都可以加分 然后你甚至还可以加人名 我也不认识 你会写谁 对吧 你大胆放心 对吧 反正这个团队 放心 第二个就是可以有不同颜色 比如说你可以选择怎么样 这是爱心 对吧 对吧 你也可以不止 比方说可以在爱心里面 再画一个 特别的特效 大家可以自由发挥 发挥多了以后就可以把这个东西 然后也可以做些变化 比如说你爱你的爱心不够 对吧你可以搞一个爱心阵列 你可以这个爱心大一点 那个爱心小一点 看出立体三维效果 我说的都是我们实践的 然后最后一个就是 这个的话我们都可以 因为你那一张图画都做过 也可以把多个 不同的爱心都可以 反正这个题目的话我 主要是给大家分的 基础分很简单 只要你能画出爱心的 然后当然有一些像形状 然后这个也是大家主要要做的 你可能是在网上 找了一个函数过来 然后发现会有坑 就是说你在边缘上接不上 比如说你把爱心分成了4段 边缘那个可能会差一点点 你要想去弥补那个地方 然后你只要做到这些事情 就可以了就能达到满分 当然还有白盒 白盒本来就需要代码风格列举 然后后面给大家自由发挥的 我们这次没有grader 所以大家就再也不用去考虑grader了 反馈 然后大家自我发挥 这就是我们今天作业的情况 然后应该马上就布置一下 就是commit的白盒 还是 讲一下 你这么期待吗 我刚才想到了一点 昨天因为时间比较赶 所以有些同学在commit的时候 就直接写了一个 complete或者是完成 然后就commit 可以理解 昨天因为时间限制 比较严格 所以同学着急 那么肯定是没有写太多 希望大家在今后实际的使用中 能够把commit写的更加 信息更加丰富一些 然后到目前为止 今天应该是前两周的 最后一次课程 同学们主要是对大作业 还有什么问题吗 还有什么疑问吗 没有什么疑问 那么大作业的 目前的大作业 如如果你可以到这个Github 我们组里面 physics-data这个里边 发个公告是吧 我看一下这个公告 好 同学们可以把这些repository 把它克隆下来 然后可以在本地 可以先试验一些 大作业的实现了 那么 然后大家先看一下 正式开始 我明天把 让同学们的分组信息 体现在Github classroom的上面 对那个公式还没有算出来 我学弟还没有算出来 我想我目前的设想是 我来指定一个公式 或者大家自由使用公式 你用不同公式的话 就是你算一个散射的公式 把它放进去 我先给大家提供一个公式 然后你要如果觉得不合适的话 你再自己换一个公式 然后我们再讨论一下 我们来回顾一下 这两周我们都干了啥 其实 希望这两周 能够让同学们有所收获 那么我把第一天讲的部分 我又拿了出来 主要是在进行数据分析的时候 我们有4个原则 其中最重要的原则是复现原则 如果大家把这门课都忘了 这个这个原则也都忘了 但希望你还能记住这个 数据分析要保证可复现性 要不然这个分析 它就不是一个科学结果 它是一个广告 这是一定希望同学们 一定要记住复现原则 还有透明原则 还有一次原则 还有最佳工具原则 这个原则在这两周里边的各个 部分 我们都看到了 这些原则的应用 接下来我们也会继续应用这些 原则 来跟大家介绍更多的内容 在这个原则的基础上 就是我们 我觉得这门课里边 目前我们讲过的 最重要的比如说 如果按照重要性排序的话 那么最上面1个 就是4个 我觉得这个部分是最重要的 即使你没有学会写程序 你没有学会python 然后什么都没有学会 但是希望还是能够 记住这4点 如果你这4点都没记住 希望能够记住这个 复现这一点 那么在这个之下 其实我觉得最重要的是数据的 格式 数据的格式 为什么数据格式非常重要呢 因为我们得出的结果 这个过程其实很多时候 虽然这个过程 也要去被别人验证 但是大多数时候 在科学的社区里面 大家是互相信任 那么你得到结果 最重要的一步 是大家能够 能够理解这个结果 有时候理解这个结果就是说 他能够把站在你的肩膀上 继续前进 那么他站在你的肩膀上 一般用的是什么呢 一般是用的是 你生成的某一个数据格式 比如说对于你来说 是你研究工作的一个结论 那你可能放出一部分数据 那么对于其他人来说 他可以在你的结论的基础上继续 前进啊 所以说 在我们讲大作业的时候 我们都画了很多这样一些框图 是吧 这些 就是一这样一步 然后这样过来 生成的这些部分 那么这些框图 是我们做数据分析的 竹坪 而这些框图它的表示 为了让大家能够交流 其实这些框图 这些部分的格式 非常重要的 如果这个格式 不能被你的队友理解的话 或者是说 从广义上来讲 所有人都是你潜在的队友 所以你一定要让这个格式 能够让大家理解 那么 接下来我们讲的git和版本控制 对 那么所以版本控制 我把它摆到了第三位上面 就是说 如果你没有版本控制 你做到了这个数据格式的 很有效的性质 我觉得已经已经很不错了 那么版本控制 主要是对我们在工作的过程中 在 生成很好的数据 然后跟大家分享这个过程中 它的一个手段 才能够帮助我们 自己能够记住 这个过程是怎样进行的 它经历了什么样的历史 然后也帮助我们 和队友进行合作 来达到这个目标 所以说它只是 达到目标的一个辅助的工具 那么 完了 最下面的重要性 我觉得才 到我们学习的 就是在课堂学习的 学习最多的是python 那么python 其实我们可以看成 是 版本控制之下的一个手段 那么如果我们可以进行版本控制的话 那么我可以对整个的 目标下的工作流程的 一个总体的设计 那么有了设计之后 其实我们不用python 用其他的工具 比如说 其他的语言 或者是 同学们熟悉的别的数据分析软件 这都没有问题 使用pythpn只是 我们综合了各种因素考虑 认为它是 完成这件事情的最佳工具 但是它其实 如果今后出现更好的工具 同学们也希望能够 一个开放的心态 能够接受新的工具 因为它可以大大提高 我们的工作效率 那么这是我们主要的课程 在前两周所讲到的内容 那么对于python来讲 还有这个git来讲 前面这个原则和数据格式 大概 大概来说相对来说内容比较少 我们知道这个原则 在 平时的研究和学习中 能够经常碰到 再想起来就已经非常好 数据格式一共 数据格式变化的也比较少 因为如果它非常快的变化 肯定会不利于交流 所以说这个数据格式 在未来的 10年或者几十年的 可以预见的未来 可能不会太变化 所以说基本上 我觉得同学们已经 大概上掌握了前两点 但是后两点 它其实 这个内容是非常丰富的 比如说git版本控制 现在通过他来交小作业 其实还只是 它使用的一个最基本的使用 今后 今后肯定有更多各样的 使用场景 各种高级的使用场景 如果同学们感兴趣的话 相信大家可以自己去查资料 或者是看陈嘉杰同学的 这个视频教程 那么git版本 这个版本控制在接下来大作业 大家肯定也可能需要自学一部分 东西 那么这一部分东西 我们可能会通过答疑的形式 或者是同学们之间 互相帮助的形式来把它解决 我们没有办法 做到面面俱到 把各种可能的场景 都给大家讲出来 也希望同学们 在平时的学习的过程中 以一种问题驱动的形式 来对待这些工具 因为这些工具其实跟我们 跟我们的具体的学习的 目标 也没有结合那么紧密 只是我们用到的 就把它学习一下 然后那么我们用到的多的 肯定 就是我们学习的多的 肯定就会自然而然的记住 就是说我们学习一门外语 大概 类似的学习习惯 那么python更是这样 比如说 python的软件库里边 大概有10万个以上的 这样的工具 所以我们根本没有办法 把它们都 遍历一遍 在实际的工作中 肯定 肯定是会遇到各种各样的问题 希望同学们能够 有 有条件去查阅资料 第一天 不是第一天 大概在第二天的时候 给大家上传了一些 课程的文件 应该是在 这些资料的下载里面 不是不是 教材和参考书的云盘下载链接 那么昨天有同学 说看起来 感觉读书比较稍微遇到一些困难 我还找到了一些中文版的 它们 相对应的翻译版 放在了这里 那么这些 肯定我课上讲的 比如说今天讲的mtaplotlib 然后还有numpy 还有scipy 甚至都没有具体来讲 那么这些 肯定是没有办法照顾所有的 内容 所以说同学们 在实际遇到的时候 一个是可以遇到这种查阅 然后另外一个 可以在教材的基础上 先给自己获得一个知识的平台 在这个平台之上 在 现学现卖其实就会比较舒服了 因为从零开始现买 可能会比较困难 但是一定一旦 你有一个 最低限度的基础 那么再前进就会比较方便 我觉得 python的学习方式 还是计算机语言 也是各种各样很零碎的知识 那么有很多部分 是需要通过练习 来实现 我们平时的小作业 给大家的练习 其实并不是那么的充分 其中也是有些部分 也是根据同学的反馈 再调整难度 所以有感觉吃不饱的同学 觉得 作业太简单的同学 可以在这一本书 和这一本书里边 找相应的练习 来做一下 然后或者是大作业 它本身也是开放的 大家可以把它做的更加 在要求之外 可以加一些新的创新在里面 因为它本身就是来自于 科研的最前线 所以说大家 加了这些创新 肯定是会有实际的科研价值 不是一个我编出来的场景 然后做出来做的很完美 也没有什么用 所以说希望同学能够理解设计 那么在大作业里边 如果你觉得 平时练习的不够 可以把大作业做得更加 功能更加全一点 好 所以经过了 两个星期 非常感谢大家能够 能有这么多同学 每天都坚持来上课 我就感觉非常的欣慰 需要非常希望啊同学们 能够在这段时间里边 能够有所收获 然后下一周 我们会改到6A207 去上课 然后可能有一部分同学 就要去上其他的课 那么 如果大家有什么问题 也都可以随时来答疑 即使你只选了前半个 前半个小学期 你可以随时来答疑 然后你如果想来蹭课的话 也非常的欢迎 好 非常感谢大家那 今天就讲到这里 下课 好 谢谢大家