数据科学

更新(2018 Jun 6) – I’m试图学习如何使用 狮身人面像 从源代码DocStrings创建文档。 Sphinx手册令人印象深刻的不透明。一些谷歌曲出现了 这个文件,这似乎提供了有用的细节。

更新(2018年6月4日)– I’找到了一些更新的新资源:

要设置我的包,所以它可以通过pip安装,我’在这里稍微过时的教程– //python-packaging.readthedocs.io/en/latest/index.html.

I’LL培养更多的注释并按照我的方式更新这篇文章。

作为我的系列中的第二个条目,了解如何 写科学软件, 一世’m将描述选择和配置我的集成开发环境或 ide.。这是我的程序’LL用于编写和编辑我的项目的源代码。它’s更加有意义的幻想文本编辑器。

我选择的文本编辑器是 vim.. or vi improved. It’S高度可定制,强大,和那里’s lots of 网上帮助 用它。但是,它有一个非常陡峭的学习曲线和命令,速度键入,可以是非常密码的。事实上,Vim是 着名的难以退出.

在任何情况下,我开始使用vim 回来时“加勒比海盗”电影仍然很好那我’不,我没有vim guru,至少觉得至少留下了这个程序。

开放A. Mac中的终端窗口,我只是通过打字来开火“vim” or “vi”。开启编辑器窗口。 vim.. can automagically interpret and color source code, 如下:

来自Vim的屏幕截图显示语法源代码。

要打开语法着色,请转到主目录(类型“cd”在终端窗口中,通过键入编辑VIM配置文件.vimrc“vi .vimrc”。应该打开编辑器窗口。

然后,在Vim中,键入字母“i” (that starts “insert” or edit mode,允许您在文件中输入文本)和类型“syntax on” <ENTER> “filetype indent插件上”,给出一个如下所示的文件:

按转义键(退出插入模式并进入命令模式)。通过键入保存更改“:wq”。应该保存和退出。

与许多其他语言不同, Python考虑了其解释的空格,而且 Python样式指南 建议使用 每个缩进级别的四个空间。对于在Vim中的间距,具有标签键实现将很好。 ynfortony,我的vim默认情况下,为每个按下标签键插入八个空格。

但是您可以通过添加修改该行为 文件类型插件 文件到特殊的Vim配置文件夹。我按照说明 这里 在.vim目录中创建一个ftplugin目录(通过键入“cd && cd .vim && mkdir ftplugin && cd ftplugin”在终端窗口中)。然后,在目录内,我创建了python.vim(“vi python.vim”) and again pressed “i”进入插入模式。

我将以下行键入文件:

然后按转义键并键入“:wq”.

接下来,我通过键入测试新配置“vi test.py” (the “.py”很重要,因为那’vim知道您正在编辑Python文件并希望使用新的Python配置)。我按下标签,有四个空格而不是八个空间。

I’M确定还有其他配置设置是有用的,但是这个’ll do for now.

更新–2018年5月17日:我找到了这个优秀的网站– http://docs.python-guide.org/en/latest/,哪个地址 vim.. set-up以及许多其他问题。

古代软件开发人员在纸卡上精心打孔 写计划.

在我的毕业生事业之前,科学家很少,如果有史以来,如果有人公开分发他们的代码,就是为了掌握他们的编码项目。

但正如我完成博士的那样,科学家们正常见,使他们开发的代码是在互联网上随时可用的发布项目的一部分。但是,在线代码后的方法(至少 那些我知道的人)非常笨重。

如今,在线发布和共享代码的基础设施是强大的,成熟的,并且使用相对容易。因此,科学家正在创造 美好的代码存储库以及可访问的文档。

开放式代码变得越来越重要:因为代码变得更加复杂并且有能力,易于提供良好文档的代码对于支持至关重要 再现性是科学过程的基石。此外,联邦资助机构是 开始要求 调查人员将公开的代码和数据产品进行公开。

不幸的是,由于我是在这些存储库很常见之前的最后一代毕业生之一,我从未真正学习如何正确分发和文档代码。

因此,作为改善我的科学产出的持续努力的一部分(以及作为我未来的学生的助手),我’M将开始一系列半常规博客文章,描述了我学习如何编写,文档和科学代码的过程。

几个警告前期:

  • 我打算大多数(可能是专门)在Python中写下代码,它已经成为(至少在天文学)的语言中的语言,所以并非所有我写的都会是普遍相关的。
  • 我被迎来了 崇拜Mac. 很多年前,所以我写的不是所有的东西都与其他操作系统相关’s。虽然,我’缺点发现大多数天文学家使用Mac。
  • 这个博客系列绝不是全面或严谨的。一世’M只是计划描述我在我走的时候学习的内容,以及我什么时候能够奉献的时间几乎完全不够解释与项目相交的所有细节,细微差别或技术方面。

至于我打算写的实际科学代码,几年前我的同事和我写道 一篇论文 关于 椭圆形变异 巨大的外产上的肿瘤诱导非常接近他们的宿主恒星。附上的代码, 邪恶的 是写的 idl.,旧语言仍然广泛用于天文学,但需要购买昂贵的网站许可证。

我的计划是将该IDL代码转换为未来几周的Python包。

邪恶的–低质量伴侣诱导的椭圆型变化


由行星(白色/黑盘)绕过星形(橙黄盘)的潮汐扭曲(夸张)。下面的曲线显示了由于潮汐失真导致的恒星的亮度变化。

OCR. OC-GAIN

我的 phys341 学生有兴趣了解如何 OCR.常规 处理他们的出席表,所以我申请了它,如下所示。

IMG_3707_ORIG扫描左图显示原始版本的原始版本。常规是没有扭曲页面的合理工作(尽管它不是’TO糟糕,开始)。

和这里’s常规返回的文字是什么:

zolto J:)o<-&\
Qfick ${‘bt\L . .
1ZWrW(\ DQVCS
Onras Tkomag
Jam; I-Em!
De»-UV1, ?I‘L\M‘ovV\QJ3€,v'
Ia./I B,a,C/IHMC .
V.o\3 \3<<I°\Ser&eck
jengifcr Brigga
}VK°'('3E\V1c-rad LULAA
Mby Ouersfreci’ '
Tm (jivws ‘
gj)/VIOI/I  ‘
$030-4 “10u\J ‘
{NC /I/1a.V,,,,',q '
O”AKe So/ares
Skwm \<reyc}~e '

…not great.

I’不完全肯定出了什么问题。也许我应该让他们写下他们的学生编号。

更新:2016年2月5日

这里’另一个与不同的出勤表一起去。不太好。

img_3784_scanned.

I‘/\0,;/{¢r\(~  VETEK BROWN
E ? RICH/W} WLMC/(
“$2114!/~, lZoAr.‘%o Pratt.‘
D“""‘ 8'3"’ ' g/"It; /Vlar,//'/1
 Lolpef‘
kpdkl/n\‘f 2011/(IE
ANN <5©<J\M) Vfxit %'L0V\€z &}"-:5 _)_La/\/MAS _ Karm I>q'v‘-5
\Tou—o0l Hand _
'Dz\m/L ?\c\n'ksvvuu‘ev*
Ian I3/¢«'-Ckfia/If ¢
94% \5<<k*?l6<:x\.cLl¢ Jennifer BH995 N\o+‘\'V\c\.6 Luv\0\ . \/\0\\)y 0\,ers+reeJr ’\".m C"\\/Ens _ 51 m cm E 1: Y Jason May A ZPM > M
PIJW1 figu//
jam 5°0W'/J
34681 \4'€y¢}~¢>/

我花了一个kludging一个python脚本,将杂货收据转换为电子表格作为我的新年之一的一部分’S决议。似乎有 一些选择 在那里进行扫描和录制收据,但它’尚不清楚他们应用了OCR技术来自动将它们转换为电子表格。

这里’我使用的收据:

IMG_3497.这个网站 提供了一些Python源代码,以检测图像中的边缘,然后检测收据的轮廓并转换任何缩短或其他查看失真—

(左)边缘检测,(中心)大纲检测,(右)扫描版本。

(左)边缘检测,(中心)大纲检测,(右)扫描版本。

为了检测边缘,代码将彩色图像转换为灰度,并应用Canny边缘检测方案,该方案涉及应用高斯模糊以抑制噪声,计算图像导数和寻找大值。结果显示在左上方的图像中,以及关于算法的更多细节 这里.

接下来,代码通过使用来查找收据的轮廓 OpenCV.‘s findcontours.,按区域对轮廓进行排序,并找到具有最大区域的轮廓,但具有四个顶点。

然后代码应用四点变换来扭曲收据以使其成为矩形形状,最后阈值灰度为增强对比度。上图中最右侧的面板显示了最终结果。

将图像转换为文本表,我使用过 pytesseract.,提供 OCR. 能力。我安装了包 tesseract. 使用 家用: “Brew安装Tesseract.”.

然后我抓住了代码 这个网站 要将最终结果转换为文本表:

st = pytesseract.image_to_string(Image.open(save_filename), config="-psm 6")

“psm=6” option 需要正确返回文本。

不幸的是,OCR分析是缺陷的’完美。例如,
img_3497_scanned_line.被转换为
'* Cresgent R01 1 1800000401 4.82如果

所有线路的价格都罚款,但描述往往扭曲。无论如何,我决定更多地关心价格。幸运的是,Winco收据有“TF” or “TX”在最右边的一面,所以我执行了一个正则表达式搜索,以查找该字符串的开头并抓住左侧的字符。

最后,我将字符串转换为逗号分隔值列表,以加载Excel或Google纸张,留下损坏的描述和价格之间的空间,因此我可以输入我自己的描述,给予
CresgentR0111,4.82

在违法行为上,它对别人有用’ve posted the code 这里。使用我的脚本还需要源代码 pyimagesearch.,这需要提交电子邮件地址。

作为项目的一部分,我’m试图学习如何在视频上进行运动捕获。幸运的是,那里’s Python支持 为了 OpenCV.计算机视觉库.

我改编了一些 我在线找到的运动捕获代码 这是用来的 石截巴角探测器方案 找到良好的功能来追踪—灰度视频帧中的区域,具有两个正交方向的大衍生物。

然后代码估计 光流量 使用 Lucas-Kanade方法, 这适用于最小二乘拟合来解决角落特征的二维速度矢量。

作为一个测试用例,我使用了一拍的爱丽丝唱歌 “Ito Maki Maki” song.

视频中的闪亮曲目显示出最合适的模型。有趣的是,角落检测方案选择沿着眼睛和唇部的闪光追随。闪光后动作跟踪器在闪烁之后做得很好,直到她眨眼并摇摆着她的脸部。

我使用的代码在下面发布。

import numpy as np
import cv2
cap = cv2.VideoCapture('IMG_0986.mov')
size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))

# params for ShiTomasi corner detection
feature_params = dict( maxCorners = 100,
qualityLevel = 0.3,
minDistance = 7,
blockSize = 7 )

# Parameters for lucas kanade optical flow
lk_params = dict( winSize = (15,15),
maxLevel = 2,
criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))

# Create some random colors
color = np.random.randint(0,255,(100,3))

# Take first frame and find corners in it
ret, frame = cap.read()
old_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
p0 = cv2.goodFeaturesToTrack(old_gray, mask = None, **feature_params)

# Create a mask image for drawing purposes
mask = np.zeros_like(frame)

images = list()

height , width , layers = frame.shape

fourcc = cv2.cv.CV_FOURCC('m', 'p', '4', 'v')
video = cv2.VideoWriter()
success = video.open('Alice_singing.mp4v', fourcc, 15.0, size, True)

ret = True
while(ret):
  print(ret)

  frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# calculate optical flow
  p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)

# Select good points
  good_new = p1[st==1]
  good_old = p0[st==1]

# draw the tracks
  for i,(new,old) in enumerate(zip(good_new,good_old)):
    a,b = new.ravel()
    c,d = old.ravel()
    cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
    cv2.circle(frame,(a,b),5,color[i].tolist(),-1)

  img = cv2.add(frame,mask)

  video.write(img)
  ret,frame = cap.read()

# Now update the previous frame and previous points
  old_gray = frame_gray.copy()
  p0 = good_new.reshape(-1,1,2)

cap.release()
video.release()
cv2.destroyAllWindows()

借助物理贾里德手,我们’在这里开始了一周的会议组 物理 讨论科学计算—博伊西国家Scicomp工作室。

会议在物理建筑,房间MP408中进行,并将专注于科学计算的细节—如何安装和运行各种代码和包。

We’VE为该组启动了GitHub存储库: //github.com/decaelus/BoiseState_SciComp_Workshomp.

我们将记录我们在相关维基上的会议: //github.com/decaelus/BoiseState_SciComp_Workshomp/wiki/Working-with-Git.

We’目前通过演示文稿 软件木工基金会 使用git: http://slides.com/abostroem/local_version_control#.

GitHub-octocat.我们在周五中午进行了第一个科学计算讨论小组会议。这些会议旨在使我们的学生熟悉科学计算应用程序以及如何管理和维护各种科学计算模块。我们开始了一个github存储库,我们’LL邮政说明和其他信息: //github.com/decaelus/BoiseState_PAC_Workshop.

与会者包括Liz Kandziolka,Emily Jensen,Jennifer Briggs,Ahn Hyung,Tiffany Watkins,Jesus Caloca和Helena Nikolai。贾里德手帮助讨论。 (向那些参加的人道歉但我没有’t record your name.)

From http://en.wikipedia.org/wiki/Reese%27s_Pieces#/media/File:Reeses-pieces-loose.JPG.

From http://en.wikipedia.org/wiki/Reese%27s_Pieces#/media/File:Reeses-pieces-loose.JPG.

我吃 里斯’s pieces 午餐后几乎每天,他们都有三种颜色:橙色,黄色和棕色。

I’曾想知道三种颜色是否以平等的比例发生,所以今天午餐,我以为我’d尝试使用发生的速率 贝父’ Theorem.

贝父’考虑到一些新信息,定理提供了更新您对某些事件概率的估计的定量方法。在数学中,定理看起来像

$latex P\left( H | E \right) = \dfrac{ P\left( E | H \right) P\left( H \right)}{P\left( E \right)},$

达到乳胶H $的概率,鉴于满足某些条件$乳胶E $的概率,鉴于$乳胶H $发生,达到乳胶H $的概率,$乳胶H $的概率完全发生,并除以乳胶E $的概率。

$乳胶p(h)$和$乳胶p(e)$称为“priors”并且通常代表您的初始估计,即美元乳晕H $和$乳胶E $。 $乳胶p \ left(e | h \右)$被称为“likelihood”,$乳胶p(h | e)$是“posterior”,我们知道$乳胶e $满意的事情。 $乳胶p(h | e)$通常是我们的东西’重新计算计算。

大包

谢谢,Winco买入散装!

所以对于我的情况,$乳胶p(h)$将是某种颜色发生的频率,而$乳胶E $将是我的实验数据。

对于给定的频率$乳胶f _ {\ rm橙色} $的oranges(或棕色或黄色),概率$乳胶p(f _ {\ rm橙色} | e)$,我绘制$ latex n _ {\ rm oround} $橘子是〜f ^ n(1–f)^ n(不是橙色)。当我选择越来越多的糖果时,我可以继续重新评估$乳胶p $的f(0到1)的整个允许的范围,并找到最大化$乳胶p $的值。

关闭我的眼睛,我将十个不同的糖果从袋子中拉出来,下面的结果按顺序:棕色,橙色,橙色,黄色,橙色,橙色,棕色,橙色,黄色,橙色。这些结果显然暗示橙色的频率高于黄色或棕色。

这个ipython笔记本 实现所描述的计算,下面的曲线显示在一定数量的试验后的乳胶P $更改$乳胶n _ {\ rm试验} $:

应用贝叶斯推论来确定瑞茜的频率's pieces colors.

应用贝叶斯推论来确定瑞茜的频率’s pieces colors.

因此,例如,在我做任何试验之前$乳胶n _ {\ rm试验} = 0 $,我假设所有颜色都同样有可能。在第一次试验后,当我选择棕色糖果时,棕色的频率高于其他颜色的概率上升。经过三次试验(棕色,橙色,橙色),橙色拿走了铅,自从我达到了’看过任何yellows,那里’是黄色的非零概率’S频率实际上为零。我们可以了解概率在十次试验后如何安定下来。

基于这一现实简单的实验,似乎橙子的频率约为黄色和棕色的两倍。虽然没有那么有趣,如果我’d bothered to check 维基百科,我会看到那个“目标颜色分布为50%橙色,25%棕色和25%黄色” —完全符合我的估计。