基于 Hotelling-T 的偏最小二乘变量选择
本文旨在探索基于 Hotelling-T 变量选择的偏最小二乘模型的高维光谱数据。
图片由本·哈里特拍摄
背景
O 光谱数据建模中最常见的挑战之一是从与响应变量相关的大量变量中选择一个变量子集(即波长)。对于光谱数据来说,相对于观测值的数量而言,具有大量变量是很常见的。在这种情况下,选择较少数量的变量是至关重要的,特别是如果我们希望加快计算时间并提高模型的稳定性和可解释性。通常,变量选择方法分为两组:
基于过滤器的方法:选择最相关的变量作为独立于预测模型的预处理步骤。
基于包装器的方法:使用监督学习方法。
因此,任何基于 PLS 的变量选择都是一种包装方法。包装器方法需要一个选择标准,该标准只依赖于手头数据的特征。
方法
让我们考虑一个回归问题,假设响应变量 y ( n × 1)和预测矩阵X(n×p)之间的关系可以用线性模型y=βX来解释我们的数据集由来自各种植物材料的 n = 466 个观察值组成,并且 y 对应于每种植物的钙(Ca)浓度。矩阵 X 是我们测得的 LIBS 光谱,它包括 p = 7151 个波长变量。因此,我们的目标是找到对 Ca 含量具有令人满意的预测能力的 X 的一些列子集。
ROBPCA 建模
让我们首先执行稳健的主成分分析( ROBPCA )来帮助可视化我们的数据,并检测是否存在不寻常的结构或模式。获得的分数由下面的散点图显示,其中的省略号代表霍特林 T 的 95%和 99%置信区间。大多数观察值低于 95%置信水平,尽管一些观察值似乎集中在分数散点图的右上角。
ROBPCA 得分散点图。
然而,当更仔细地观察时,例如使用异常值图,我们可以看到最终只有三个观察值似乎会造成问题。我们有两个观察被标记为正交异常值,只有一个被标记为坏的杠杆点。一些观察被标记为良好的杠杆点,而大多数是常规观察。
ROBPCA 离群图。
PLS 建模
值得一提的是,在我们的回归问题中,由于 n ≪ p ,普通最小二乘(OLS)拟合是不可选择的。PLS 通过搜索一小组所谓的潜在变量(LVs)来解决这个问题,潜在变量执行对 X 和 y 的同时分解,约束条件是这些分量尽可能多地解释 X 和 y 之间的协方差。下图是从 PLS 模型中获得的结果。我们获得的 R 为 0.85,RMSE 和平均相对误差分别为 0.08 和 0.06,这相当于平均绝对百分比误差(MAPE)约为 7%。
观察图与预测图(完整数据集)。
残差图(完整数据集)。
与 ROBPCA 异常值图类似,PLS 残差图标记了三个显示高标准化残差值的观察值。检查异常值的另一种方法是从 PLS 模型中计算 Q 残差和 Hotelling T,然后定义一个标准来判断某个观察值是否为异常值。高 Q-残差值对应于模型不能很好解释的观察,而高霍特林 T 值表示远离常规观察中心的观察(即得分= 0)。结果绘制如下。
q 残差与霍特林 T 图(完整数据集)。
基于 Hotelling-T 的变量选择
现在,让我们从我们的 PLS 模型中进行变量选择,这是通过计算 T 统计来进行的(有关更多详细信息,请参见 Mehmood,2016 ),
其中 W 是负载权重矩阵, C 是协方差矩阵。因此,基于以下标准选择变量,
其中 A 是来自我们 PLS 模型的 LV 数,1-𝛼是来自 F 分布的置信水平(𝛼等于 0.05 或 0.01)。
因此,从我们原始数据集中的 7151 个变量中,只有 217 个是基于上述选择标准选择的。观察到的与预测的图显示如下,以及模型的 R 和 RMSE。
观察与预测图(选定变量)。
在下面的结果中,标记为异常值的三个观察值已从数据集中删除。平均绝对百分比误差为 6%。
观察图与预测图(选定变量,剔除异常值)。
残差图(选定变量,剔除异常值)。
摘要
在本文中,我们使用偏最小二乘法成功地执行了基于 Hotelling-T 的变量选择。与使用具有完整数据集的模型相比,我们获得了所选变量数量的巨大减少(-97%)。
使用家庭助理的家庭自动化
我采用开源和隐私优先的家庭自动化系统的旅程
为什么选择家庭自动化?
我一直想用科技。它可以让我们的生活更轻松,也可以让我变得懒惰。🙂十几岁的时候,我的卧室拥有极致的奢华:天花板上有一台液晶显示器,可以看电影、听摇滚音乐会、玩电脑游戏,甚至不用坐起来。
当我和妻子去年买了我们的第一套房子时,我知道我想享受一些高质量的家庭自动化。我心中的工程师要求一个系统:
1.开源
2。注重隐私的
3。面向快速设置和用户友好的定制
4。当我想编码和开发定制特性时,让我得到引擎盖下面
家庭自动化软件选项
会有这样的系统吗?我在网上做了大量研究,评估了许多私有云自动化系统。最终,我找到了名为家庭助手的完美搭档。
Home Assistant 不仅是一个隐私第一的开源家庭自动化系统,而且它还有一个由出色的人组成的伟大社区,他们为大量流行的智能设备构建并支持强大的集成。作为一个刚刚尝试家庭自动化的新用户,这对于我来说是一个巨大的优势。我根据家庭助理用户社区的建议和已经开发的集成插件投资了家庭自动化硬件。
我意识到,与硬件和现有集成一样重要的是,运行 Home Assistant 的服务器也同样重要。
家庭助手靠什么运行?
家庭助理在 Raspberry Pi 或本地服务器上运行。我从 canakit 买了一个树莓 Pi 4 入门套装。
我把它连接到我的路由器的以太网上,并安装了来自这个来源的 Hassio。
Hassio 仅在 Pi 上运行家庭助理软件,允许软件充分利用其资源。没有其他软件的竞争,它可以全天候运行。我还采取措施,在一个自定义端口上安全地将我的 Hassio 实例暴露给 web,并启用双因素身份验证和 https 来建立到它的安全连接。
灯光和运动传感器:
我和妻子开始购买智能 LED 灯,作为迈向自动化的第一步。我们需要一套照明系统,能够根据我们不同房间的需求自动开关。我们还希望柔和的灯光帮助我们在漫长的一天后放松下来,醒来时没有刺眼的强光。我研究了好几个系统,最后选择了飞利浦 Hue。飞利浦系统有各种尺寸的灯泡和一个将它们连接在一起的集线器。诚然,市场上有更便宜的智能灯选择,我觉得我们在价格和性能之间做出了最好的决定。Hue hub 通过局域网连接,没有必要将 hub 暴露在互联网上,除非您想用智能手机启用地理围栏(稍后我会详细介绍)。我还买了几个飞利浦 Hue 运动传感器,放在我们家的重要位置,与灯光配合得非常好。我们告别了传统的墙壁开关,开始拥抱自动化。
我还想让我所有的户外灯在日落时亮起,在日出前熄灭。将飞利浦 Hue 中心与 Hassio 联系起来是有意义的。Hassio 有一个很棒的插件用于 node-red ,可以让你使用 GUI 拖放和连接流,快速直观地设置事件。我添加了插件的定时器功能,在适当的时候打开和关闭我的户外灯。维奥拉。我们的户外灯不再需要开关了。如果我想从运动检测器和定时器那里夺回控制权,Hassio 的 iPhone 和 Android 应用程序允许我远程控制飞利浦 Hub。
让我们谈谈安全:火警和一氧化碳探测器
我们和一只小狗和两只小鸟分享我们的家。去年,我们的邻居经历了一次短暂的恐慌,一次惊慌失措的下班回家,还有一个有故障的探测器,之后我们决定优先考虑烟雾和一氧化碳探测器的自动化。自动化还有一个额外的好处,即使你在旅行时也能知道家里发生了什么。
我认为,如果传统的烟雾和一氧化碳报警器不能向房子里的人或当地的消防和紧急救援人员发出警报,那么它们的作用是有限的。然而,你可能会得到误报,然后消防队会因为一片烤焦的烤面包而上门。这种缺乏精确性和控制的情况令人沮丧。经过一番研究后,我们选择了首款启用 Z-Wave 的电池烟雾报警&一氧化碳组合报警。感觉这是一个不错的选择,因为它们成本相对较低,而且还具有智能修改功能。
但是,它们无法直接连接到 Hassio。这些警报需要一个 z-wave 接收器连接到 Hassio,以接收警报并实时报告。我在有用的 Hassio 论坛上做了更多的研究,发现了非常容易集成的 Zoos Z-Wave S2u 盘。我所要做的就是将 USB 设备插入我的 Raspberry Pi,Hassio 会自动检测到它。在这之后,我不得不把我的第一个警报设备一次配对一个。诚然,这需要一些试验和错误,特别是为了将多个烟雾警报的名称映射到 z-wave 节点,并按位置正确标记它们。
这花了整整一个下午,但现在他们的工作没有一点瑕疵,定期报告他们的状态是空闲还是活跃。每个警报还报告状态的时间和它们当前的电池电量。这本身就是一个巨大的优势:当电池电量低时,不再需要猜测更换电池,并帮助我们知道这些设备正在频繁报告,而不是出现故障。我还在 node-red 中连接了通知服务,当探测器的状态从空闲变为火灾或一氧化碳警报时,它会向我发送电子邮件并在我的手机上提醒我。系统得到了一个很大的考验:我的妻子在做饭的时候不小心触发了警报。我当时在外面,马上就收到了手机警报。问题解决了!
下次警报发生时,我可以快速查看每个房间的运动传感器温度事件。如果是假阳性,我可以关闭警报。如果是真正的警报,无论我在地球的哪个角落,我都可以打电话给当地的消防部门。
室内和室外摄像机
受詹姆斯·邦德恶棍和他们超酷的骗子的启发,他们配备了多个摄像头的闭路电视录像,我决定投资一个强大的家庭安全摄像系统,供室内和室外使用。我想要的是能够检测运动、提醒我、记录信息、本地保存、尽可能少依赖云、便宜且易于集成的东西。易家居室内外摄像机无论是从预算上,还是从存储和检测上,都符合要求。他们可以让你在每台相机的 SD 卡上存储大量的视频。它们还具有夜视功能,能够全天候进行运动检测。我花了一段时间安装室外的。他们需要有线电源,需要一段时间来确定安装它们的最佳位置。这是值得的规划:我设法涵盖了我家的所有角落。
我计划在未来通过 Hassio 创建更多带警报的智能报告,但这是坚实的第一步。一些额外的室内摄像头有助于监视小鸟和小狗,确保它们安全,不会在我们不在的时候搞什么恶作剧。这里的外卖?只是更安心。
主场与客场模式的 Hassio 设置
Hassio 的智能手机伴侣应用程序可以让您通过网络安全地从您的设备向 Hassio 家庭服务器报告您的位置。通过应用程序设置这一点非常容易。它与 Hassio zones 配合得很好,Hassio zones 是一种地理围栏,可以让您跟踪设备的位置。我将我和我妻子的手机与 Hassio 配对,并在 node-red 上设置流程,以可靠地跟踪我们的设备。我启用了一个变量,当我们中至少有一个人在家时,该变量设置为 Home。如果我们都不在,它会设置为离开模式。
这种主场对客场的检测真的为许多额外的自动化打开了大门。例如:我们不希望运动传感器在我们不在的时候打开室内灯,如果我们的狗把灯打开了。我们希望当我们都不在家的时候,如果忘记关门,车库门会自动关闭。如果我们离开超过一定的时间阈值,假期模式应该自动激活,在晚上随机开灯,模拟人们在家,等等。自动化的可能性只受到你的想象力的限制!
时差通知
我一直很喜欢 Slack 的通知功能,并在工作中广泛使用。Hassio 应用程序有通知功能,但与 Slack 相比,它们没有那么丰富和详细。我想要一个更详细的通知系统,通过一个我通常会静音但想浏览时会浏览的频道实时通知我家里发生的任何事情。我还希望我妻子和我需要知道的一天中家里发生的重要事情有一个最小限度的通知。当然,还有用于紧急警报通知的红色警报频道。幸运的是,一位好心人在 Hassio 社区发布了这篇内容丰富的文章,满足了我所有的通知需求。Slack 也有一个功能有限的免费帐户,对于我的用例来说已经足够了,所以我设置了通知,它们工作得很好,很可靠!
结束语
经过几个月的家庭自动化集成,我意识到这是一个无止境的追求。我未来打算整合的一些例子有:想办法把我的智能洗衣机和 Hassio 连接起来,在我上班的时候继续报告洗涤进度;更智能的运动检测,适用于厨房、浴室风扇、燃气壁炉、喷水系统和类似的自动化设备。我已经投资了 MyQ Chamberlain 车库门系统,我可以将它与各种警报和自动化系统连接起来。专注于隐私的语音集成系统迈克罗夫特在本地运行,提供了优于 Alexa 或谷歌家庭云助手的优势。
我知道我可以继续投资硬件,并在家里找到更多自动化的东西,但在某些时候,你开始怀疑这是否值得。对我来说,我觉得这是一个有趣的附带项目,但我可以说这种方法并不适合每个人,除非他们愿意弄脏自己的手,花时间将东西组装在一起并进行故障排除。最终,我明白了这是一场马拉松,而不是短跑。我一直在缓慢而稳步地实现我的家庭自动化愿景。
如果你喜欢这篇文章,并想和我谈谈你已经计划或完成的其他有趣的家庭自动化想法,请在 LinkedIn 上与我联系,我很高兴听到你的想法并讨论家庭自动化项目。
自然灾害多发地区的房价预测(一)
第 1 部分:探索性数据分析(EDA)
介绍
加州以地震闻名,大地震早就该来了。在 1989 年的洛马普列塔地震中,世界见证了液化能做什么,因为码头区的街区变成了瓦砾。一些房产位于断层线上,比如在南纳帕被破坏的房产,断层线穿过这些房产。当地面在地震中裂开时,它对建筑物和公用事业线路的破坏远远超过了震动所能造成的。
除了地震灾害,2018 年的野火肆虐了超过 120 万英亩的土地,摧毁了加州 1200 多所房屋。在北加州遭受破坏后,房地产市场发生了变化。
法律要求容易“搁浅”的房产向潜在买家披露可能改变买家决策的信息。此外,在交易开始之前,信息并不总是容易找到的。
问题陈述
给定一组房产详情和自然灾害属性,使用 Zillow 房产数据结合地震、滑坡和火灾等自然灾害数据,预测圣何塞市的中值房价。主要目标是找到圣何塞市房价贡献的主要属性。
数据收集和数据争论
最初的挑战是获取不容易获得的数据,如 Kaggle 网站或其他一些网站的数据提取。在使用不同的数据争论技术从各种来源提取数据后,下一个挑战是使用 python merge & append 方法合并不同的数据框,并形成单个可分析的数据框。在下一节中,将详细讨论数据收集和数据争论方法。
数据源
住房数据
收集了圣何塞市的 Zillow 财产数据。使用 python 和 Web 抓取包(如 selenium 和 BeautifulSoup)来访问 Zillow 属性数据。
自然灾害数据
断层带、滑坡、液化和火灾等自然灾害数据从以下来源收集:
数据收集
来自 Zillow 的住房数据
Zillow 网站 API 在从 Zillow 提取数据方面存在固有的限制。另外, Zillow API 没有下载邮政编码/城市数据的规定。因此,我们决定对圣何塞不同邮政编码的待售和待售(按代理、按业主、新建、止赎、即将推出)的单户房产和联排别墅的以下字段进行网络搜集。提取纬度、经度、地址、邮政编码、卧室、浴室、平方英尺、地段大小、建造年份、价格、销售类型、zestimate、销售日期、销售天数、房屋类型、url。
编写了 Python 代码,它导入 Selenium 和 BeautifulSoup 包来抓取我在圣何塞所有邮政编码的 Zillow 特性。下面是从 Zillow 收集的样本数据。
来自 Zillow 的样本抓取数据
地震危险区数据
编写 Sql 代码以从加州地质调查局(CGS)的地震风险数据 web 应用程序中提取数据。但问题是,CGS 使用 sql 查询一次只能检索 1000 行的所有属性。决定只使用 python 程序获取对象 id,然后使用这些对象 id 获取实际的行。使用 python 请求和 json 包,所有提取的数据都存储在 csv 文件中。数据帧中的全部特征和属性:261195 & 7。
地震危险区域图
来自 CGS web 应用程序的地震风险数据示例
断层带、液化带和滑坡带柱值根据以下条件转换为 0,1,NA:
若液化区:
位于液化区内= 1
CGS 未对液化危险进行评估= NA
不在液化区= 0
如果滑坡带:
位于滑坡区= 1
CGS 未对地震滑坡危险进行评估= NA
不在滑坡区= 0
如果断层带:
位于地震断裂带内= 1
不在地震断裂带内= 0
未被 CGS 评估= NA
如上所述转换特征后,样本地震危险数据以 csv 格式存储,如下所示。
格式化地震危险数据示例
火灾危险严重区域数据
火灾数据以 pdf 格式提供。圣何塞市属于火灾危险严重区的面积非常有限。仅在火灾危险严重区域手动提取地块编号和地址。总特性和属性:53 & 6。火灾危险严重区域图和样本输出数据如下所示。
非常高火灾危险严重区域
数据争论
合并数据帧
收集 Zillow 属性、地震风险和火灾风险数据后,下一个挑战是合并所有数据框。以下步骤用于合并:
- 基于“地址”列的 Zillow 属性和地震危险性数据被合并。然后在合并的数据框中添加了“火灾”列。
- 火灾和地震危险数据根据“地址”栏合并。
- 上述第一合并数据帧被附加到第二合并数据帧。
合并数据帧信息
处理重复
根据包裹编号和地址,重复的包裹被丢弃。在 13993 行中,删除重复项后获得了 13617 行。
更正格式
- 注意到价格列类型是 object 而不是 integer。价格列被报告为售出:$ — M。使用剥离法去除文本并将单位 M 转换为美元。
- 人们还注意到,在地址一栏中,很少有房子的名称是 UNT 公寓号。但被列为单户住宅。对于地址栏中提到的 APT,UNT #的房屋类型已更改为联排别墅。
- 售出价格为 2016 年至 2019 年。为了使销售价格正常化,根据一段时间内 Redfin 销售价格中值的变化,将销售价格调整为当前价格。
一段时间内的中等销售价格变化(圣何塞)
纠正数据中的错误
- 很少有房产的售价很低或很高。它还与 Redfin 和 Trulia 等其他网站进行了交叉检查,并替换了这些值。36 处房产被替换为正确的售价和出售日期。
- 很少有房产低于 100,000 英镑,这些房产是在非 arm 交易类型下出售的。这些都不是房地产价格。因此,我们决定通过找出 Zestimate 和调整后销售价格之间的百分比差异来删除这些数据。根据频率分布图,决定删除价格差异百分比超过 38%的物业。
更正数据类型
售出日期格式已从对象类型转换为日期时间。
处理缺失数据
- Year _ built 列被替换为 median。
- 零数的卧室被移除。考虑大于或等于 1 的卧室。工作室没有被考虑。
- 没有卧室,浴室和平方英尺细节的财产被删除。
- 丢失的 sqft 属性已被删除。
- 对于缺失的卧室和浴室,基于排序的 sqft 值使用了 ffill 方法。
- 缺失的批量用中间值填充。
- 销售日期分为月份和年份,以便进一步探索性分析。
- 除了 Zestimate 和 Zillow 上的 days 之外,所有缺少的值都被处理。
处理异常值
- 绘制标准化价格箱图是为了查看数据中的异常值。在 Zillow 发现了一个超过 30 米的房子,并进行了检查。这是错误的数据。它已从数据中删除。
- 同样,很少有房子超过 4 米,如下图所示。它还与 Zillow 进行了交叉检查,发现其中一所房子不是独栋住宅。它已从数据中删除。
- 遵循以下程序移除异常值:
- 计算数据的四分位数范围。
- 四分位距(IQR)乘以数字 1.5。
- 第三个四分位数增加了 1.5 倍(IQR)。任何大于这个值的数字都被怀疑为异常值并被删除。
- 从第一个四分位数减去 1.5 x (IQR)。任何大于这个值的数字都被怀疑为异常值并被删除。
箱线图(调整后的价格)
探索性数据分析
收集数据后,对数据进行辩论,然后进行探索性分析。我想到了以下问题,并对这些问题进行了探索性分析。
- 单一家庭和联排别墅中自然灾害房屋的地理空间可视化
- 独户和联排别墅最常见的特征(卧室、浴室、年份、液化、断层带、滑坡、火灾)
- 单户家庭和联排别墅价格区间的住房数量分布
- 单户家庭和联排别墅的卧室、浴室和带价格箱的平方英尺的中位数
- 液化,断层带,滑坡,火灾危险与价格箱在单个家庭和联排别墅
- 各种邮编、单户住宅和联排别墅危险和非危险的销售价格分布
- 出售独栋和联排别墅的最佳月份
- 最受欢迎的邮政编码销售单家庭和联排别墅
- 2016 年至 2019 年出售的独栋和联排别墅的数量
- 自然灾害对销售价格的影响
- 危险和非危险房屋的中值价格/平方英尺
- 施工年度的价格趋势中值
- 液化、滑坡、断层带、火灾对单户住宅和联排别墅价格的影响
- 人们对危险地区房屋的评论
- 功能和价格之间的关联图
- 影响房价预测的特征
哪里是危险易发区?城市中最常见和最不常见的危险是什么?它们在城市中是如何分布的?
在深入数据分析的数字部分之前,我们进行了地理空间分析,以观察城市中最常见和最不常见的危险是如何分布的。树叶和底图包用于绘制这些地图。以下是单户家庭和联排别墅的地理空间分析结果。
断层带分布点聚集在东圣何塞陆地和山脉之间。
断层带分布图(单户住宅)
断层带分布图(城镇住宅)
滑坡带分布点沿山脉东侧堆积。
滑坡分布图(单户住宅)
滑坡分布图(城镇住宅)
液化是最常见的灾害,在城市中广泛分布。
液化分布图(单户住宅)
液化分布图(城镇住宅)
液化区是圣何塞最常见的灾害,当它与滑坡结合在一起时,甚至更糟。
液化和滑坡分布图(单户住宅)
在收集的数据点中,没有滑坡、液化和滑坡的复合危险。这些是收集的点,而不是圣何塞的全部分布。经过地理空间分析后,我们决定在每个要素类别中调查房屋数量。用分组数据绘制条形图,以查看数据的分布。
有多少间卧室最受欢迎?
“带房屋数量的卧室数量”柱状图的分布显示,对于独栋和联排别墅,最受欢迎的卧室数量为 3。
卧室 vs 计数(单户住宅);卧室与数量(联排别墅)
有多少间浴室最受欢迎?
“带房屋计数的浴室数量”柱状图的分布显示,最受欢迎的浴室数量是独栋住宅 2 个,联排住宅 3 个。
浴室 vs .计数(单户住宅);浴室与柜台(联排别墅)
哪个邮政编码受买家欢迎?
在 30 个邮政编码中,有十几个邮政编码同样适用于单户住宅。对于联排别墅,8 个邮政编码更受欢迎。
邮政编码与房屋数量(单户住宅);邮政编码与房屋数量(联排别墅)
哪一年建造的最常见?
“房屋建造年份”柱状图的分布显示,对于单个家庭来说,最常见的建造年份是 1959 年。对于联排别墅,大多数建于 1988-1973 年和 2005-2008 年。
建造年份与房屋数量(独栋和联排别墅)
哪个月卖房比较热门?
“出售房屋数量的月份”柱状图的分布显示,对于独栋和联排别墅来说,出售房屋的最佳月份是 5 月至 8 月。这是因为,在暑假期间,大多数人计划搬迁。
月 _ 销售与房屋数量(独栋和联排别墅)
哪一年房子卖得最多?
“year _ sold with house count”条形图的分布显示,大多数房屋是在 2018 年(独栋)和 2016–2018 年(联排别墅)售出的。
年 _ 销售与房屋数量(独栋和联排别墅)
哪种危险最常见?
“危险与房屋数量”柱状图的分布表明,在独栋和联排住宅中,许多房屋都容易发生液化。
危险与房屋数量(独栋和联排住宅)
有多少不同价位的房子?
Price_bin vs count(独栋和联排别墅)
不同价位的房间有多少间?
Price_bin vs 中值卧室(独栋和联排别墅)
各种价位的卫生间有多少个?
Price_bin vs 中值浴室(独栋和联排别墅)
在各种价格箱中,哪种平方英尺中位数是常见的?
Price_bin 与中位数平方英尺(独栋和联排别墅)
哪些价格范围的房屋处于液化区?
Price_bin vs 液化(独栋和联排住宅)
哪些价格范围的房屋处于滑坡地带?
Price_bin vs 滑坡(单家)
不同邮政编码、危险区和非危险区的价格分布
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图清楚地显示了自然灾害对房价的影响。例如,与非液化区相比,易液化区的价格较低(在第四个地块中)。同样,断层带区域的价格低于无断层带区域(在 6 号地块)。但是对于滑坡区域(在第 5 个地块)这是矛盾的。滑坡地区主要在山区。这表明人们在买房时更喜欢壮观的景色,而不是滑坡的危险。更多细节将在后续章节中介绍。
自然灾害(液化)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究液化对价格的影响,在价格/平方英尺相同的附近邮政编码中分析了相同数量的危险和非危险房屋。为此,考虑了有液化危险的邮政编码 95116 和无液化危险的邮政编码 95127。低于中间值的表格表明易液化房屋的销售量低于非液化地区。下表列出了每个邮政编码的街区名称。
自然灾害(滑坡)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究滑坡对价格的影响,在附近具有相同价格/平方英尺的邮政编码中,分析了相同数量的危险和非危险房屋。为此,考虑了有滑坡危险的邮政编码 95138 和没有液化危险的邮政编码 95135。低于中间价格值的表格表明易滑坡房屋的售价高于非滑坡地区。这表明人们在买房时更喜欢壮观的景色,而不是滑坡的危险。这里包含了来自 95138 社区的评论样本,显示了人们对这个社区的看法。
“安全友好。开放空间附近,包括公园、山麓和小路。好的小学,初中&高中。非常靠近常青谷学院。合理的杂货店购物。好餐馆刚刚开始出现。”
“很棒的小区,很好的学校,很安全的高档小区。步行即可到达杂货店、牧场高尔夫俱乐部。
自然灾害(断裂带)对价格的影响是什么?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
上图显示了价格分布,价格/平方英尺,危险和非危险单户住宅的各种邮政编码。为了研究断层带对价格的影响,在价格/平方英尺相同的附近邮政编码中分析了相同数量的危险和非危险房屋。为此,考虑了有故障风险的邮政编码 95127 和无故障风险的邮政编码 95140。低于中间值的表格表明易受故障危害房屋的销售量低于非故障危害地区。
自然灾害(火灾危险区)对价格有什么影响?
价格分配盒图(单户住宅)
价格分配盒图(联排别墅)
在所有邮政编码区出售的房产都没有火灾隐患。绘制散点图,以查看单户家庭和联排别墅的平方英尺与价格的分布。
每个邮政编码的价格分布是怎样的?
价格分布条形图(单一系列)
价格分布条形图(联排别墅)
每年建造的价格分布是怎样的?
价格分布条形图(单户住宅)
价格分布条形图(联排别墅)
所有特征的条形图分布
条形图分布
地理空间框架中的价格分布
地理空间框架中的价格分布
上图显示了圣何塞西部和南部的高价格。最南端的价格最高,因为它靠近桑尼维尔和圣克拉拉的科技公司。上面生成的图与 Trulia 观察到的价格市场趋势图一致。
散点图分布
卧室数量与价格呈正相关
浴室数量与价格呈正相关
sqft 显示与价格正相关。
批量与价格呈正相关
建造年份与价格呈弱负相关
液化与价格呈正相关
滑坡与价格呈弱负相关
断层带与价格呈正相关
火灾风险和价格之间没有关联
售出月份与价格呈负相关
房型与价格呈正相关
邮政编码与价格呈正相关
平均价格条形图分布
平均价格分布
推断统计学
进行了假设检验,以检查建造年份、液化危险、滑坡危险、平方英尺、断层带危险、邮政编码、卧室、浴室、房屋类型、地块大小和价格之间是否存在显著相关性。对于这些测试,零假设被指定为没有显著相关性,而替代假设在特征之间具有显著相关性。如果假设检验的 p 值小于显著性水平 0.05,则无效假设将被拒绝,这表明存在相关性。卧室、浴室、平方英尺、地段大小、液化、断层带、房屋类型和邮政编码的 p 值小于 0.05,表明这些特征和价格之间存在相关性。其他特征如建造年份、出售月份、滑坡、p 值都大于 0.05,这表明这些特征与价格之间没有显著的相关性。
编码
第二部分:机器学习模型
自然灾害多发地区的房价预测(二)
第 2 部分:机器学习模型
介绍
使用了不同的回归模型,即线性回归、决策树回归、梯度推进回归和随机森林回归。使用 R 对这些模型的性能进行了比较。基于这些性能得分,提出了性能更好的模型来预测房价。
首先,数据分为自变量 X 和因变量 y。自变量 X 用于预测目标变量 y。价格、id 和日期列从 new_df 数据帧中删除以创建变量 X。new _ df 数据帧中的价格列用于创建变量 y。不同的指标用于回归模型的性能,如均方误差、均方根误差、R 平方得分、平均绝对偏差、平均绝对百分比误差等。均方根误差和 R 平方分数用于评估回归模型的性能。为了保存模型的度量,创建了一个数据框,并将其命名为 metrics。接下来,数据被分成训练集和测试集。80%的随机选择数据作为训练集,20%的随机选择数据作为测试集。该模型使用 80%的数据进行学习,其余 20%的测试数据用作未知的未来数据集来预测房价。
使用默认参数构建线性回归模型,并使用训练数据集拟合该模型。X_test 数据用于使用模型进行预测。然后,计算均方误差(MSE)、均方根误差(RMSE)、R 平方得分(r2_score)、平均绝对偏差(MAD)和平均绝对百分比误差(MAPE)。
特征选择
采用特征选择的向后淘汰法。特征选择是选择可以提高模型性能的相关特征子集的过程。首先,要素中最差的属性被移除。date_sold_month 被删除,因为它与房价的相关性非常弱。然后,year _ built _ decade _ mapped 从功能集中删除。然后,尝试了来自 sklearn 库的名为选择测试的单变量特征选择包。以下是不同特征的相关系数。
使用 R2 评分比较特征选择与线性回归模型
使用 MAPE 评分比较特征选择与线性回归模型
比较所有不同的线性回归模型与特征选择,两个条形图表明,我们应该保留所有的特征,以更好地预测房价。
决策树回归
使用默认参数构建决策树回归模型,并在下面列出性能得分。示例决策树回归流程图如下所示:
决策树图表示例
梯度推进回归
使用默认参数建立梯度回归模型,并在下面列出性能得分:
随机森林回归
使用默认参数构建随机森林回归模型,并在下面列出性能得分:
如下所示的水平条形图比较不同回归量的 r2_score 和 MAPE。
使用 r2 得分比较不同回归模型的模型性能
使用 MAPE 评分比较不同回归模型的模型性能
根据 r2_score,梯度推进回归模型是表现最好的模型。对于该数据集,随机森林回归模型是性能第二好的模型。
根据平均绝对百分误差(MAPE),随机森林回归模型是表现较好的模型。梯度推进回归模型是表现第二好的模型。
超参数调谐
接下来,使用 GridSearchCV 调整模型的超参数,以提高模型的性能。GridSearchCV 是一种交叉验证方法,它允许我们使用一组我们想要在给定模型中尝试的参数。这些参数中的每一个都被用于执行交叉验证,并且最终保存模型的最佳参数。创建了一个新的 dataframe,并将其命名为 tuned_metrics,以保存优化模型的指标。的方法。get_params()用于查找模型的所有参数。对于线性回归模型,在 param_grid 中使用了“copy_X”、“fit_intercept”和“normalize”参数。param_grid 是一个字典,参数名作为键,参数设置列表作为值。使用 cv = 5,这是使用的折叠次数。我们可以使用 GridSearchCV 的 best_params_ attribute 来获得这个数据集的任何回归模型的最佳参数。使用 GridSearchCV 调整线性回归模型和决策树回归器模型。然后,使用 RandomizedSearchCV 调整梯度推进回归模型和随机森林回归模型。RandomizedSearchCV 有助于最大限度地减少计算时间,因为 GridSearchCV 对于梯度推进回归器和随机森林回归器都需要很长的计算时间。使用 RMSE 评分的不同回归模型的优化模型性能比较如下所示:
使用 RMSE 评分比较不同回归模型的优化模型性能
根据均方根误差,梯度推进回归模型是表现最好的模型,误差最小,为 147773。
使用 R2 评分比较不同回归模型的优化模型性能
根据 r2_score,梯度推进回归模型是表现最好的模型,得分最高,为 0.78。
使用 MAE 评分比较不同回归模型的调优模型性能
根据平均绝对误差(MAE ),梯度推进回归模型是表现最好的模型,误差最低为 113737。
使用 MAPE 评分比较不同回归模型的优化模型性能
根据平均绝对百分误差(MAPE),梯度推进回归模型是表现最好的模型,最低百分误差为 12%。所有指标都表明,梯度推进回归模型是该数据集的性能更好的模型。
摘要
梯度推进回归模型是一个很好的房价预测模型,因为它优于随机猜测,并且优于其他三个回归模型。随着更多数据的收集,该模型将来可能会得到改进。这里没有包括的许多其他回归模型也可以建立和尝试。对于未来的工作,我会推荐这个梯度推进回归模型来预测房价。
代码:
第 1 部分:探索性数据分析(EDA)
基于 Zillow 经济学数据集的房价预测
现实世界中的 DS
基于中等收入、学校数量、犯罪率、失业率、医院数量及其评级等因素的 XGBoost 和线性回归预测模型
我点击的照片—西雅图天际线
买房是人一生中的一个重大决定,需要相当多的思考和研究。人们希望以最好的利率和最小的风险购买一所房子,并希望这是对未来的最佳投资。各种在线网站、房地产经纪人和房地产经纪人试图通过让购房者比较可供购买的不同房屋来引导他们。
在本文中,我们将讨论一个用于房价预测的数据科学项目的结果。我们正在尝试使用机器学习算法 XGBoost 和线性回归来预测房价,考虑的因素包括一个县的中值收入、该县的犯罪率、公立学校、医院、医院评级和该县的失业率等。
该项目的目的是为寻找开发新公寓楼或购买新公寓的地方的国家房地产开发商、个人买家和银行提供美国最佳的投资县/区。另一个目标是预测某县未来几个月的房价。
未来几个月,给定邮政编码/县的房屋每平方英尺的预计价格是多少?我们能否根据 Zillow 提供的某个邮政编码/街区/县的犯罪率、学校和其他信息/指标来预测价格?
“2020 年是买房的好年吗?”以及“应该在哪里买房?”都是重要的问题。这个房屋预测项目试图借助各种来源的数据并考虑影响房价的因素来回答这些问题。
我点击的照片
此类项目的利益相关方包括:
a)客户和房地产经纪人-房地产行业长期以来一直按照自己的传统运营,但海量数据的可用性正在彻底改变该行业的工作方式。大数据分析技术正在创造一个新的房地产市场,在这个市场中,客户和代理商都比以往任何时候都更加知情。
Zillow 和 Trulia 等公司可以利用这种分析,根据当地学校、犯罪率、收入水平、医院等因素,计算房屋可能吸引的估计价格。并决定营销策略。
c)银行——不仅仅是消费者在使用大数据为他们的房屋买卖决策提供信息。银行还利用大量数据来预测特定抵押贷款申请可能带来的风险,使用的信息包括房屋价值以及申请人的财务状况和历史。此外,银行也在避免丧失抵押品赎回权和卖空的损失,因为大数据正在帮助他们预测市场可以承受的最大出售价值。
根据预测的房价,人们可以投资房地产,找到一个更适合他们需要的郡房子,在那里他们可以买房子。通过这个数据科学项目所做的预测,房屋买卖决策将变得更加容易。
用于本项目的数据
挑战
- Zillow 经济学数据集—很难从 Zillow 中找到合适的数据集进行处理,因为没有现成的描述。虽然数据字典是可用的,但它并没有指定 Zillow 经济学数据集中包含的每个数据集。没有关于各种 csv 文件及其相互关系的详细信息,也没有关于不同属性的详细信息。
2)不知道 FIPS、FIPS、FIPS 是什么,以及如何将其与县或邮政编码联系起来
3)为各种因素找到合适的数据集,如学校、犯罪率、收入水平、医院评级、失业率等。经过大量的搜索找到了可以在这个项目中使用的数据集。
4)收入水平数据集有邮政编码,但没有 FIPS 代码,因此我必须找到一个将邮政编码转换为 FIP 代码的解决方案。为此,我不得不搜索一个 FIPS 数据集,并将其与收入水平数据集合并。
5)收入水平数据集——探索并选择中等收入水平的适当属性用于项目
6)如何合并所有这些数据集,使其成为基于收入水平、犯罪率、学校、医院、失业率等因素预测房价的有用数据集。
数据故事和探索性数据分析
1。你应该在哪个州买房或租房?
根据 Zillow 排名,房价最高的州
Zillow 房屋价值指数( ZHVI )是一种平滑的、季节性调整的衡量标准,用于衡量特定地区和房屋类型的典型房屋价值和市场变化。
根据 Zillow 的估计,夏威夷是平均房价接近 40 万美元的顶级州。第二个最重视住房的州是哥伦比亚特区,平均房价为 35 万英镑。一些其他上端 ZHVI 州是加利福尼亚州,马萨诸塞州,纽约州,阿拉斯加州,华盛顿州,康涅狄格州,马里兰州和科罗拉多州。然而,问题是这些州的价格是如何随时间变化的?因为如果我们想在这些州中的一个买房子,我们需要知道价格是如何随时间变化的。
2。最贵州的房价变化
在物价最高的州,房价会随着时间的推移而上涨
根据该数据集,自 2010 年以来,夏威夷州、哥伦比亚特区和加利福尼亚州似乎都在竞相提高 ZHVI 的平均水平。与此同时,纽约和新泽西等其他高端州开始缓慢,并略有下降,直到 2012 年,价格似乎有所上升,纽约的加速略快于新泽西。另一方面,科罗拉多州在这张图表中持续上升,与康涅狄格州保持一致,在 2017 年约为 33 万。
3。租金最高的州
租金最高的州
4。不同州每平方英尺房屋价值中位数
可以看出,加州每平方英尺的房屋价值中值最高,威斯康星州最低。
5。Zillow 的每平方英尺估计价格
历年来每平方英尺的房价
我们来看看 Zillow 的每平方英尺预估价格。看起来房价在 2005-2008 年间上涨,在 2011-2012 年间下跌。
6。每平方英尺价格中位数的前 7 个州
这些是所有房屋每平方英尺挂牌价格中值最高的 7 个州
7。所有房屋每平方英尺挂牌价格中位数的后 5 个州
8。所有房屋的租金中值
从 2012 年到 2017 年,所有房屋的租金中位数都有所上升,但从 2010 年到 2012 年略有下降。
9。所有房屋的挂牌价格中位数
历年所有房屋的挂牌价格中值
从 2012 年到 2017 年,所有房屋的挂牌价格中值都有所上升,但从 2010 年到 2012 年有所下降。
XGBoost 和线性回归预测模型
为了使用 Zillow Economics 数据集构建房价预测模型,我使用了 County_time_series 数据,因为它提供了一个县中所有房屋的房价。预测房价的不同因素包括该县的收入中位数、犯罪率、公立学校、医院和医院等级、失业率。
我用过 XGBoost XGRegressor 和线性回归算法。
线性回归
监督机器学习算法有两种类型——回归和分类。前者预测连续值输出,而后者预测离散输出。例如,预测房子的美元价格是一个回归问题,而预测一封电子邮件是否是垃圾邮件是一个分类问题。用于机器学习的 Python Scikit-Learn 库用于实现线性回归。
线性回归是一种基本且常用的预测分析类型。回归的总体思路是考察两件事:(1)一组预测变量在预测一个结果(因变量)时是否做得很好?(2)哪些变量是结果变量的重要预测因子,它们是如何影响结果变量的——由β估计值的大小和符号表示?这些回归估计用于解释一个因变量和一个或多个自变量之间的关系。具有一个因变量和一个自变量的回归方程的最简单形式由公式 y = c + b*x 定义,其中 y =估计的因变量得分,c =常数,b =回归系数,x =自变量得分。
XGBoost
XGBoost 是免费的开源软件,可以在许可的 Apache-2 许可下使用。XGBoost 代表“极限梯度提升”,它是梯度提升机器的一种实现。XGBoost 是一种流行的有监督机器学习模型,具有计算速度快、并行化和性能更好的特点。
XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和可移植。XGBoost 提供了一种并行的树提升(也称为 GBDT,GBM ),可以快速准确地解决许多数据科学问题。相同的代码运行在主要的分布式环境(Hadoop、SGE、MPI)上,可以解决超过数十亿个例子的问题[11]。
XGBoost 库实现了梯度推进决策树算法。这种算法有许多不同的名字,如梯度推进、多重加法回归树、随机梯度推进或梯度推进机器。
Boosting 是一种集成技术,其中添加新的模型来纠正现有模型产生的错误。模型按顺序添加,直到不能再进一步改进。一个流行的例子是 AdaBoost 算法,它对难以预测的数据点进行加权。
梯度推进是一种方法,在这种方法中,创建新的模型来预测先前模型的残差或误差,然后将它们加在一起以做出最终预测。它被称为梯度提升,因为它使用梯度下降算法来最小化添加新模型时的损失。
这种方法支持回归和分类预测建模问题。
XGBoost 中的超参数
这些参数解释如下:
- objective ='reg:linear '指定学习任务是线性的。
- colsample_bytree 是构造每个树时列的子样本比率。子采样将在每个提升迭代中发生一次。这个数字的范围是从 0 到 1。
- learning_rate 是步长收缩,用于防止过拟合。这个数字的范围是从 0 到 1。
- max_depth 指定树的最大深度。增加该数值会使模型变得复杂,并增加过度拟合的可能性。默认值为 6。
- α是权重的 L1 正则化。增加这个数字会使模型更加保守。
- n_estimators 是要拟合的提升树的数量
使用的指标
- R 表示项(数据点)与曲线或直线的拟合程度。
- MSE - 均方误差
- RMSE- 均方根误差。它是 MSE 的平方根。
- 均方根对数误差(RMSLE) - 它只是一个以对数标度计算的 RMSE。实际上,为了计算它,我们取预测值和目标值的对数,并计算它们之间的 RMSE。
不同因素与房价的相关矩阵
矩阵中的相关值
结果:预测建模— XGBOOST 和线性回归
我合并了 8 个不同的基于 FIPS 码的数据集,构建了一个新的数据集,用于预测房价。我使用 Zillow 的 county_time_series 数据集来预测美国每个县的房价。
预测模型使用 80:20 的训练测试分割。
XGBoost
XGBoost 预测用两组超参数进行了测试。这两个结果都在这里。
XGBoost 超参数集 1 结果
xgboost = XGBRegressor(objective = ’ reg:linear ',colsample_bytree = 0.3,
learning_rate = 0.1,max_depth = 5,alpha = 10,random_state=777,
n _ 估计值= 100)
使用 XGBoost 超参数集- 1 进行预测
XGBoost 超参数集-1 的特征重要性
这里,f0 是学校数量,f1 是医院数量,f2 是平均医院评级,f3 是失业率,f4 是犯罪率,f5 是收入中位数。
从上图可以看出,在预测房价时,失业率的重要性最高,其次是犯罪率、收入中位数、学校数量,然后是平均医院等级,最不重要的是医院数量。
XGBoost 超参数集-2 结果
xgboost = XGBRegressor(objective = ’ reg:linear ',
n_estimators=100,learning_rate=0.08,gamma=0,子样本=0.75,
colsample_bytree=1,max_depth=7)
XGBoost 超参数集-2 预测
XGBoost 超参数集-2 的特征重要性
这里,f0 是学校数量,f1 是医院数量,f2 是平均医院评级,f3 是失业率,f4 是犯罪率,f5 是收入中位数。
从上图可以看出,在预测房价时,学校数量的重要性最高,其次是犯罪率、失业率、收入中位数,然后是平均医院评级,最不重要的是医院数量。
线性回归结果
线性回归预测
正如我们所看到的,与线性回归相比,XGBoost 的第二组超参数给出了更好的结果。
下一步
下一步,对于预测,我想尝试其他回归算法,如 Light GBM。
确认
我真诚地感谢我的数据科学导师 Ramakrishna Soma 博士对我完成这个项目的指导和鼓励。
参考
- Zillow 经济学数据集
【https://www.kaggle.com/zillow/zecon】T5T6
2)犯罪率数据集-美国各县的犯罪率
https://www . ka ggle . com/mikejohnsonjr/United States-crime-rates-by-county
3)学校数据集——美国公立学校
https://www.kaggle.com/carlosaguayo/usa-public-schools
4)收入水平数据集—美国人口普查局美国收入水平https://data . world/uscensusbureau/ACS-2015-5-e-Income/workspace/file?filename=USA_ZCTA.csv
5)美国人口普查局的收入数据集
https://www.census.gov/programs-surveys/acs/
6)医院数据集
https://www.kaggle.com/carlosaguayo/usa-hospitals/version/1
7)医院评级数据集
https://www . ka ggle . com/center-for-medicare-and-Medicaid/hospital-ratings
8)失业数据集-美国失业率数据集
https://www . ka ggle . com/carlosaguayo/2018-各县失业率/version/1
9)FIPS 邮政编码和县数据集-美国邮政编码和县 FIPS 数据集
https://www.huduser.gov/portal/datasets/usps_crosswalk.html
10)https://www . ka ggle . com/carlosaguayo/correlation-between-house-prices-and-other-factors
11)XG boosthttps://xgboost.readthedocs.io/en/latest/index.html
12)【https://www.zillow.com/research/data/】T2
13)https://whisper . real estate/blog/2019-2020 年住房市场预测/
15)https://machine learning mastery . com/gentle-introduction-xgboost-applied-machine-learning/
基于深度学习的房价预测
Keras 回归与多元线性回归
照片由佛罗里达州 KW insta gram 上的@ Kusseyl 拍摄
在本教程中,我们将创建一个模型来预测房价🏡基于不同市场的各种因素。
问题陈述
这一统计分析的目的是帮助我们理解房屋特征之间的关系,以及如何使用这些变量来预测房价。
目标
- 预测房价
- 在最小化预测和实际评级之间的差异方面使用两种不同的模型
所用数据:ka ggle-KC _ house Dataset
**GitHub:**你可以在这里找到我的源代码
步骤 1:探索性数据分析(EDA)
首先,让我们导入数据,看看我们正在处理哪种数据:
**#import required libraries** import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt**#import Data** Data = pd.read_csv('kc_house_data.csv')
Data.head(5).T**#get some information about our Data-Set** Data.info()
Data.describe().transpose()
我们数据集的前 5 条记录
关于数据集的信息,你的变量是哪种数据类型
数据集的统计摘要
已提供以下功能:日期: 房屋出售日期 ✔️ 价格: 价格为预测目标 ✔️ 卧室: 卧室/房屋数量 ✔️ 卫生间: 卫生间数量 拍品镜头 ✔️ 楼层: 房屋总层数 ✔️ 滨水: 可以看到滨水景观的房屋 查看: 已查看 ✔️ 根据景县分级系统 ✔️sqft _ above:房屋面积(不含地下室) ✔️sqft _ base:地下室面积 ✔️yr _ build:建造年份
【T10 坐标 ✔️ 长: 经度坐标 ✔️sqft _ living 15:客厅面积 2015 年(暗示—部分装修) ✔️sqft _ lot 15:****
让我们绘制几个特征,以便更好地理解数据
**#visualizing house prices**
fig = plt.figure(figsize=(10,7))
fig.add_subplot(2,1,1)
sns.distplot(Data['price'])
fig.add_subplot(2,1,2)
sns.boxplot(Data['price'])
plt.tight_layout()**#visualizing square footage of (home,lot,above and basement)**fig = plt.figure(figsize=(16,5))
fig.add_subplot(2,2,1)
sns.scatterplot(Data['sqft_above'], Data['price'])
fig.add_subplot(2,2,2)
sns.scatterplot(Data['sqft_lot'],Data['price'])
fig.add_subplot(2,2,3)
sns.scatterplot(Data['sqft_living'],Data['price'])
fig.add_subplot(2,2,4)
sns.scatterplot(Data['sqft_basement'],Data['price'])**#visualizing bedrooms,bathrooms,floors,grade** fig = plt.figure(figsize=(15,7))
fig.add_subplot(2,2,1)
sns.countplot(Data['bedrooms'])
fig.add_subplot(2,2,2)
sns.countplot(Data['floors'])
fig.add_subplot(2,2,3)
sns.countplot(Data['bathrooms'])
fig.add_subplot(2,2,4)
sns.countplot(Data['grade'])
plt.tight_layout()
通过价格分布图,我们可以看到大多数价格在 0 到 100 万之间,只有少数异常值接近 800 万(豪宅😉).在我们的分析中去掉那些异常值是有意义的。
房价预测
快速浏览不同特征分布与房价的关系是非常有用的。
散点图——平方英尺(住宅、地段、楼上和地下室)
计数图—卧室、浴室、地板、等级
在这里,我将日期列分解为年和月,以查看房价是如何变化的。
**#let's break date to years, months** Data['date'] = pd.to_datetime(Data['date'])
Data['month'] = Data['date'].apply(lambda date:date.month)
Data['year'] = Data['date'].apply(lambda date:date.year)**#data visualization house price vs months and years**
fig = plt.figure(figsize=(16,5))
fig.add_subplot(1,2,1)
Data.groupby('month').mean()['price'].plot()
fig.add_subplot(1,2,2)
Data.groupby('year').mean()['price'].plot()
房价与月份和年份
让我们检查一下是否有空数据,并删除一些我们不需要的列(这个数据集没有一些丢失的值)
**# check if there are any Null values**
Data.isnull().sum()**# drop some unnecessary columns** Data = Data.drop('date',axis=1)
Data = Data.drop('id',axis=1)
Data = Data.drop('zipcode',axis=1)
步骤 2:数据集准备(拆分和缩放)
数据分为Train
组和Test
组。我们使用Train
集合让算法学习数据的行为,然后在Test
集合上检查我们的模型的准确性。
- 特性(
X
):插入到我们的模型中的列将用于进行预测。 - 预测(
y
):特征预测的目标变量
X = Data.drop('price',axis =1).values
y = Data['price'].values**#splitting Train and Test** from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=101)
特征缩放将帮助我们从相同的镜头(相同的比例)看到所有的变量,它还将帮助我们的模型学习得更快。
**#standardization scaler - fit&transform on train, fit only on test** from sklearn.preprocessing import StandardScaler
s_scaler = StandardScaler()
X_train = s_scaler.fit_transform(X_train.astype(np.float))
X_test = s_scaler.transform(X_test.astype(np.float))
步骤 3:模型选择和评估
💡模型 1: 多元线性回归
多元线性回归是简单线性回归的延伸(此处阅读更多)并假设因变量Y
和自变量X
之间存在线性关系
让我们在回归模型中总结训练过程:
**# Multiple Liner Regression** from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)**#evaluate the model (intercept and slope)** print(regressor.intercept_)
print(regressor.coef_)**#predicting the test set result**
y_pred = regressor.predict(X_test)**#put results as a DataFrame**
coeff_df = pd.DataFrame(regressor.coef_, Data.drop('price',axis =1).columns, columns=['Coefficient'])
coeff_df
通过可视化残差,我们可以看到正态分布(证明与因变量具有线性关系)
**# visualizing residuals** fig = plt.figure(figsize=(10,5))
residuals = (y_test- y_pred)
sns.distplot(residuals)
剩余可视化
让我们比较实际产量和预测值,以衡量我们的预测与实际房价有多远。
**#compare actual output values with predicted values**
y_pred = regressor.predict(X_test)
df = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
df1 = df.head(10)
df1**# evaluate the performance of the algorithm (MAE - MSE - RMSE)** from sklearn import metricsprint('MAE:', metrics.mean_absolute_error(y_test, y_pred))
print('MSE:', metrics.mean_squared_error(y_test, y_pred))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))print('VarScore:',metrics.explained_variance_score(y_test,y_pred))
多元线性回归结果
💡模型 2: Keras 回归
让我们为回归问题创建一个基线神经网络模型。从所有需要的函数和对象开始。
**# Creating a Neural Network Model** from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.optimizers import Adam
由于我们有 19 个特征,让我们插入 19 个神经元作为开始,4 个隐藏层和 1 个输出层由于预测房价。
此外,ADAM 优化算法用于优化损失函数(均方误差)
**# having 19 neuron is based on the number of available features** model = Sequential()
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(19,activation='relu'))
model.add(Dense(1))model.compile(optimizer='Adam',loss='mes')
然后,我们对模型进行 400 个历元的训练,每次都在历史对象中记录训练和验证精度。为了跟踪模型在每个时期的表现,模型将在训练和测试数据中运行,同时计算损失函数。
model.fit(x=X_train,y=y_train,
validation_data=(X_test,y_test),
batch_size=128,epochs=400)model.summary()
loss_df = pd.DataFrame(model.history.history)
loss_df.plot(figsize=(12,8))
测试数据评估
y_pred = model.predict(X_test)from sklearn import metricsprint('MAE:', metrics.mean_absolute_error(y_test, y_pred))
print('MSE:', metrics.mean_squared_error(y_test, y_pred))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))print('VarScore:',metrics.explained_variance_score(y_test,y_pred))**# Visualizing Our predictions** fig = plt.figure(figsize=(10,5))
plt.scatter(y_test,y_pred)
**# Perfect predictions** plt.plot(y_test,y_test,'r')
**# visualizing residuals** fig = plt.figure(figsize=(10,5))
residuals = (y_test- y_pred)
sns.distplot(residuals)
Keras 回归 vs 多元线性回归!
我们成功了!💪
我们用两种不同的 ML 模型算法预测了房价。
我们的多元线性回归的得分在 69%左右,所以这个模型还有改进的空间。然后我们用 Keras 回归模型得到了约 81%的准确率。
另外,请注意,Keras 回归模型的 RMSE(损失函数)较低,这表明我们的预测更接近实际评级价格。
结果:喀拉斯区。vs 多个线性稳压器。
毫无疑问,这个分数可以通过特征选择或使用其他回归模型来提高。
感谢您的阅读🤓。再次反馈总是受欢迎的!
我和 190 名学生是如何学习数据科学的
学习数据科学
如何学习编码的可行策略?
约书亚·阿拉贡在 Unsplash 上拍摄的照片
两年前,我在大学上 R 的初级班。我听说过数据科学这个术语,但我甚至不知道这将是我第一次接触这个令人兴奋的世界。
老实说,我上这门课只是为了认识一些人。一周很快过去了,我学到了一些基础知识,并对编程产生了兴趣。但是我不知道我应该如何进行。
所以我在数据营上了一些额外的在线课程,但很快就停止了。为什么?即使网站本身是一个很好的起点,我只是没有让我坚持下去的目标。
我的生活还在继续,我有其他的责任,编码不再是优先考虑的事情。
快进两年。我已经用 Python 和 r 进行了几个数据科学项目,从预测到文本挖掘任务。更重要的是,我和我的团队在 TechAcademy 支持了 190 名学生学习编码。不同背景和经历的学生。
我想和你分享我的观点。这是一个个人评估,告诉你什么最能快速见效。记住每个人都是不同的。所以如果你
- 刚刚开始学习编码,
- 受不了再去上一堂网上课,或者很快厌倦了网上作业,
- 或者想知道我们曾经教 190 个学生编程的哲学,
然后继续读下去。
那么是什么改变了呢?我怎么能从零走到现在呢?
最终,唯一重要的是动机。我必须确保编码成为优先事项。直到那时,我对编码的想法都是基于外在的动机。这就是我脑子里想的:
哦,是的,我听说编码在 21 世纪是必不可少的。如果我知道如何处理一些代码,我在就业市场上会有更好的机会。
我不得不把它转换成一种更有内在动力的思考方式。
我真的很喜欢编码。我写的每一行代码都能得到令人兴奋的结果,这很有趣。它让我能做真正疯狂的事。
你认为谁更有耐力?“哦,我有更好的工作机会”的人,还是仅仅为了编码而热爱编码的人?
马修·盖伊在 Unsplash 上的照片
但是要达到这种状态,就要投入工作。只看了几个教程就不可能热爱编码。编码不是石头剪子布的快速游戏。编码更像是一场漫长的风险游戏。
开始的时候,很难理解规则。但是一旦你进入状态,每一个新的情况都会变得更容易。这是你想要到达的点。你想要理解你所选择的编程语言的基本规则。之后,每一个新的项目或方法都是可行的和令人兴奋的。
但是你怎样才能达到那种状态呢?我们怎样才能确保你会爱上编程呢?
基础
在线课程有它的位置,尤其是对初学者来说。它们是学习基础知识的完美起点。
因此,如果你从未写过一行代码,那就去一个在线学习平台,比如【数据营】 *【附属链接】*或者 Udemy。在那里你可以开始理解你想要学习的编程语言。
但是你应该上几节网络课呢?我建议坚持基础。尽量保持简单。为什么?因为在一些课程之后,你应该对这种编程语言的工作原理有了很好的了解。
你可以通过在线课程继续学习所有的东西。我怀疑这是学习数据科学的最高效和最有效的方式。
有些类会教你将数据加载到 R 或 Python 中的每一种可能方式。dta-,csv-,excel-,json-,随便什么-files…但是你真的需要花 6 个小时的宝贵时间去学这个吗?当你确实有一个你想要使用的文件时,谷歌一下如何加载你的特定文件会更有效率。这应该够了吧?
对我来说,获取大量我不会用到的信息毫无意义。这是浪费时间。还有,我就是不擅长跟网上的课。我很快就厌倦了。这扼杀了我的动力。如果你喜欢在线课程,那么你当然可以参加更多的课程。但请有意为之。
更上一层楼
现在你已经学会了基础,你应该如何进行?我们如何才能确保你保持动力?
答案简单明了。你必须自己创造一些东西。把你学到的东西拿出来,创建你的第一个个人项目。边做边学。你需要意识到仅仅通过学习基础知识你已经获得了什么样的力量。
但是乔纳森,我真的不知道我应该做什么样的项目。你能帮我吗?
当然,我支持你!
在 TechAcademy,我们给我们的学生一些项目,他们在这些项目中获得数据,并进行解释性分析。在这个简单的任务中,他们必须加载数据,
先看看它,
将其转换成正确的格式(数据操作),
通过创造情节获得第一手见解。
图基于 Lukas Jürgernsmeier 的 TechAcademy 解决方案
虽然这不是火箭科学,但这是成为数据科学家不可或缺的一部分。要处理数据,你必须理解数据。这只是一个简单的例子。你会发疯的。
那么,你为什么不现在就去 Kaggle,从著名的泰坦尼克号数据集中载入数据呢?如果你是初学者,不要试图马上预测什么。只需加载数据,查看结构,并尝试找到一些见解。这有助于你应用你的新技能。这还不够吗?去 Github 上的 tidytuesday repository 看看你的数据整理和可视化技能。
从那时起,你可以通过你所进行的每一个项目来增加你的技能。如果解释性分析变得无聊,那就试着去学习什么是机器学习。阅读一些关于它的文章,并开始预测泰坦尼克号数据集的生存变量。如果你已经掌握了这个,做一些文本挖掘的东西怎么样?
至少对我来说,解决项目是如此有趣。我正在使用我学到的工具来探索或预测事物。与你只做被告知的事情的在线课程相比,这有多酷?
此外,你正在建立一个投资组合,你可以与你的社区分享。这比颁发一门网络课的第 1000 个证书还要激动人心。
跟随一步一步的教程进行最终测试或小项目是可以的。但是创建自己的项目需要更多的思考和创造力。你真的必须理解底层数据,并使用它来达到你的目标。这是数据科学家的一项关键技能。
当然,这并不总是容易的。你得到了错误,你不知道为什么。每一行代码都可能成为一场灾难。但事实就是如此。很有可能,这个错误不只发生在你身上。Stackoverflow 或者其他任何一方都是你的救世主。只要在谷歌搜索中输入错误信息,你就会得到帮助。
结论
学习编码成为一名数据科学家不一定要成为一只你抓不到的难以捉摸的兔子。
有一些可管理的和可操作的策略,你可以用它们来非常快地达到你的目标,并且充满乐趣。
这些战略如下:
1)保持耐心,让你的动力不断增长。
确保你明白你为什么要学习编码。总的来说,我们每个人都生活在一个飞速变化的数字世界中。拥有编码技能(不仅限于数据科学)是一项伟大的技能,可以帮助你达到目标。但是一定要找到享受的方法。给它一些时间。当你掌握了必要的技能后,数据科学会变得很棒。
2)一般只在刚开始的时候用线上课。
在线课程是学习基础知识的好方法。但是没有必要通过在线课程学习所有的东西。此外,他们会变得无聊,至少对我来说是这样。如果您不喜欢这种学习,请确保不要强迫自己完成数据科学方向的所有课程。作为一名数据科学家,并不是指某个地方有证书的人。
3)通过开展项目让你的技能更上一层楼。
项目很有趣。它们能让你用你所学的技能变得有创造力。如果你想学习新的东西,读一些文章,尝试一下。一次做一个项目,让它变得更难,然后收获收益。
开始编码不是一件容易的事情。我见过很多人在开始的几步中挣扎。一旦你不断出现,一切都变得更容易接近。我希望这些策略能帮助你喜欢编码,尤其是数据科学。
如果您有任何问题或意见,请在下面留下您的反馈。另外,如果你想和我联系,你可以通过 LinkedIn 联系我。
敬请期待,下期见!
生物学家如何成为数据科学家
数据科学
我是如何从非技术背景过渡到数据科学的
具有结合变构效应物的血红蛋白的图像;由 Chanin Nantasenamat 用 PyMOL 语言渲染
在这篇文章中,我将分享我如何从生物学家转变为数据科学家的经历。本文是我的 YouTube 频道上的原始视频的扩展版本,数据教授:
简要回顾我的学术历程
所以在我们开始之前,也许先简单介绍一下我自己。我从 2004 年开始从事数据科学的工作,当时我正在攻读博士学位的第二年。到 2006 年,我已经完成了题为生物和化学应用的计算机辅助分子设计:量子化学和机器学习方法的博士论文。简而言之,我的研究位于生物学、化学和计算机科学的界面,这些领域的融合使我有可能探索蛋白质功能及其调节的潜在起源(即抑制或激活)。这种理解对于药物发现,特别是具有治疗活性的新的生物活性化合物的发现具有重要意义。
快进到 2020 年,我仍然在使用数据科学来理解来自生物、化学和医学的数据。我的大部分工作围绕着发现药物,这些药物通过特异性靶向感兴趣的靶蛋白,对疾病发挥有希望的调节特性。这是通过使用机器学习来理解和揭示药物样分子的哪些具体特征导致目标蛋白质的有希望的调节来实现的。
我是如何开始数据科学的?
我的数据科学之旅始于 2004 年。那时这个领域还不叫数据科学,更流行的术语是数据挖掘。我清楚地记得我从事的第一个数据科学项目是预测 DNA 剪接位点。我第一次开始使用的主要数据挖掘工具是一个叫做 WEKA 的程序,它是由怀卡托大学开发的。该软件是一个 GUI 软件,我们可以单击各种按钮来导入数据、执行特征选择、标准化数据、删除缺失数据以及构建机器学习模型。我使用的一些机器学习算法包括决策树、线性回归、人工神经网络和支持向量机。
我最初是作为基于 GUI 的数据挖掘软件的用户开始的,随着时间的推移,我开始意识到一些限制和障碍。特别是,我注意到运行数据挖掘工作流花费了大量时间,特别是当我想要优化学习参数时,我必须手动修改程序中的参数值(例如,想象一下对 100–1000 个不同的参数设置进行这样的操作)。几年后,我感到迫切需要学习如何自动化这些手工和平凡的任务。
下一步自然会发展到 Python 或 r 这样的编程语言。
学习编码
学习编码确实是一项具有挑战性的工作,对于非技术背景的人来说相当困难。就我个人而言,我几乎尝试了所有的方法,从阅读书籍、教程、堆栈溢出、询问同事等等。从我自己的学习经验中,我发现如果我使用我自己的研究问题作为学习编码的基础(即而不是使用示例数据集),那么感觉负担会更少。因为在完成编码任务后,我将立即得到我的研究项目进展的奖励。
我如何将编码问题分解成易于管理的部分
假设我有一个想要解决的研究问题,我要做的第一件事就是将问题分解成独立的任务(例如将几个 Excel 文件中特定列的内容合并到一个文件中)。为了解决这个问题,我会查看教程、堆栈溢出答案以及编码书籍的特定部分。所以一遍又一遍地重复这样做让我慢慢掌握了编码的概念,并意识到这并不困难,而是可以实现的。随着我解决越来越多的问题,我开始获得动力,并对编码充满信心。通过在小的、单独的编码任务上缓慢地构建,已经为项目的进展积累和最终完成做出了贡献。在这个阶段,我非常满意,因为我已经编写了一个数据科学工作流,大大提高了生产率,节省了时间和成本。因此,过去需要六个月才能完成的事情,通过使用 R 或 Python 代码编写解决方案,可能只需要几分钟。仔细想想,能够编码有点像拥有超能力!
编码=超能力
所以如果像我这样的生物学家可以学习编码,那么我相信每个人也可以学习编码。所以只要有决心和实践,任何人都可以编写代码。
我如何在研究中使用编码
作为一名生物医学数据科学家,我面临着试图理解生物医学数据的挑战。很多时候,我将不得不花费大部分时间来整理收集到的数据,以便对数据进行预处理,从而进行更有意义的分析。由于这项任务非常繁琐和重复,我很高兴能够用 R 和 Python(是的,我已经用这两种语言编写了两个不同的版本)来编程预处理数据,以便为进一步的分析提供高质量的数据。除了使用编码进行数据预处理,我还使用它来执行探索性数据分析以及机器学习模型构建。数据科学工作流中我最喜欢的部分是设计适当的数据可视化的过程,这将尽可能最好地传达数据故事。
结束语
这就是我的故事,关于我如何从一个非技术背景的生物学家转变成一个数据科学家。我希望这有助于您了解如何开始自己的数据科学之旅。
订阅我的邮件列表,获取我在数据科学方面的最佳更新(偶尔还有免费赠品)!
关于我
我是泰国一所研究型大学的生物信息学副教授和数据挖掘和生物医学信息学负责人。在我下班后的时间里,我是一名 YouTuber(又名数据教授)制作关于数据科学的在线视频。在我制作的所有教程视频中,我也在 GitHub 上分享 Jupyter 笔记本(数据教授 GitHub page )。
数据科学、机器学习、生物信息学、研究和教学是我的激情所在。数据教授 YouTube…
www.youtube.com](https://www.youtube.com/dataprofessor?sub_confirmation=1)
在社交网络上与我联系
YouTube: WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB
一本关于习惯的书如何帮助我更有效地学习数据科学
作为一名数据科学家,我从 James Clear 的原子习惯中学到了什么
卡里姆·甘图斯在 Unsplash 上拍摄的照片
阅读关于习惯和行为改变的书籍是我在过去几年中经常做的事情。作为一个对各种生产力技巧和生活优化感兴趣的人,我觉得这类书真的很有趣。尤其是当这种类型的书最终给我的生活带来意想不到的改善时。
James Clear 所著的《原子习惯:建立新习惯和改掉坏习惯的简单而行之有效的方法,是我去年非常喜欢读的一本书,因为它帮助我提高了数据科学学习的质量。它使阅读变得容易,并且如果需要的话,允许以非常愉快和方便的方式返回和重新引用它。
这本书的一大优点是它没有试图从头再来。相反,它以一种简明扼要的风格融合了它所要传达的内容。在本文中,我将解释这本书的要点如何影响我的数据科学学习过程。
微小的增量变化会带来巨大的成果
这个概念可以归结为这样一个想法,即专注的微小改进最终会产生巨大的结果。如果我们每天在某项任务上取得 1%(只有 1%)的进步,那么到每年年底,我们在这项任务上的表现会提高 37 倍。这是巨大的进步!
尽管这里的想法简单明了,但很难付诸实施。长期坚持就更难了。当我刚刚开始学习在线数据科学课程时,我不知所措。我雄心勃勃,想立刻了解外面的一切。不用说,有些事情不太顺利。
“成功是日常习惯的产物,而不是一生一次的转变”——詹姆斯·克利尔
马特·拉格兰在 Unsplash 上拍摄的照片
我必须让事情运转起来!就是这个时候,我决定换个角度,采纳复合效应倡导者的观点。这样做,我开始更好地学习概念,更彻底地理解事物,最重要的是,开始享受学习的过程。亲爱的读者,我的建议是,不要嚼得太多。让习惯培养的复合效应来关注你正在取得的进步,同时确保你每天为小的可管理的目标努力工作。
学习、进步和习惯的养成不会在一夜之间发生
你的学习和进步是有门槛的。只有跨过这个门槛,你才能在学习和习惯养成中看到切实的成果。
这是一个无价的教训,在你的学习过程中要牢记在心。期待伟大的成果和知识在一夜之间神奇地同化,是取得长久进步的最大敌人。这也适用于您学习数据科学基础知识的过程。
在一两天内完成 Python 语言基础的在线课程不应该让你期望已经完成了值得与潜在雇主分享的项目组合。您的代码和项目的质量在达到所需的“阈值”之前需要时间和奉献
动机被高估了。你的系统承载着你的进步。
在发展某项技能的过程中,再多的动力也不足以推动一个人从最底层走到最高层。将动力视为你唯一的“燃料”是不太实际的。简而言之,你总是会耗尽燃料,筋疲力尽,或者干脆放弃。
相反,你在学习和培养习惯中建立的系统应该在你有动力和没有动力的时候都带着你。当你耗尽了你所有的动力时,尤其如此。您在掌握数据科学基础知识方面的进步反映了您在整个学习过程中设置和使用的系统有多好。
“你不会上升到你的目标的高度,你会下降到你的系统的高度!”—詹姆斯·克利尔
艾萨克·史密斯在 Unsplash 上拍摄的照片
你的目标是成为一名伟大的数据科学家。你的系统是你用来成为一个人的过程!《T4 原子习惯》中让我印象深刻的一点是,赢家和输家都有相同的目标。换句话说,这既不是关于你的目标,也不是关于你的动机和野心。相反,它是关于你的系统让你失望或者为你工作。
让它变得明显、有吸引力、简单和令人满意
这四条著名的行为改变法则规定了如何培养良好的习惯。它们的对立面(即让它看不见、没有吸引力、困难和不满意)规定了打破坏习惯的过程。
让您的数据科学学习变得显而易见始于 Clear 所说的“实现意图公式”这遵循看起来非常明显和简单的食谱。然而,它所产生的心理影响是惊人的。
当您告诉自己将在[在此插入地点]的[在此插入时间]在[在此插入行为]时,食谱就开始了。一个显而易见的例子是,当你告诉自己“我将在明天上午 9:00 在洛克菲勒图书馆练习编写 20 个中级到高级的 SQL 查询。”
由 Unsplash 上的 chuttersnap 拍摄
当你把你渴望学习的东西(数据科学)和你真正喜欢做的事情联系起来时,你的学习习惯就会变得有吸引力。说你一生最大的爱好就是写作!如果你开始将你的写作习惯和你的数据科学学习习惯捆绑在一起,你很有可能会学得更好。
当你开始时,学习过程将开始变得更有吸引力,例如,写下你的数据科学学习之旅,甚至写下关于你试图掌握的数据科学概念的技术文章。
让它变得简单是双重的。第一,你想减少好习惯的摩擦。第二,你想增加坏的摩擦。然而,这两者都是从你考虑你的环境和更加意识到你周围的事物开始的。
通过将您用来学习的网站设置为打开浏览器时加载的默认页面,减少学习数据科学的摩擦。始终保持您的注册帐户登录,以减少键入您的电子邮件和密码的摩擦。每当你开始学习时,你的手机仍然是一种干扰?把手机完全移到另一个房间会增加分心的摩擦。
让它令人满意意味着理解您的数据科学学习只有在长期内才会开始有回报。但是,因为你需要短期的满足感,以便继续回到你试图建立的学习习惯,你必须通过奖励自己来使学习过程更令人满意。
奖励自己可以从做你真正喜欢的事情开始(比如长跑或弹钢琴),每次你每天在你正在培养的习惯上取得 1%的进步。这让回归习惯变得更加容易和有趣。从长远来看,你会独立于这些短暂的回报而成长。习惯本身将开始成为奖励,而不是获得奖励的方式。
养成习惯您的数据科学学习很像一个“深度”决策树。你在每个分支做出的正确选择越多,你在旅程结束时落在“好”叶子上的机会就越大!
一个损坏的内存模块是如何隐藏在众目睽睽之下的——以及我是如何指责 Linux 内核和两个无辜的硬盘驱动器的
梅斯特不高兴了— 来源:克里斯蒂安·霍林格
我们大多数人在生活中见过、调试并解决了很多技术问题——从理解廉价的 PSU 意味着大量的烟雾,通过你最喜欢的编程语言中一个接一个的错误,一直到在 grep 中寻找 segfaults。
这是一个关于 DDR-4 内存的断棒如何隐藏在众目睽睽之下近一年的故事。
卑微的出身
2019 年 4 月,我搭建了一个家庭服务器。在大多数情况下,它运行得很好。唯一奇怪的是:我的两个最老的驱动器,一对 WD Red 3TB NAS 驱动器,对他们的年龄来说很年轻,只有大约 20,000 小时,似乎拒绝接受更大的数据量。
一个简单的rsync
运行如下:
sudo rsync -P -aht --out-format="%t %f %b" /mnt/3TB/ /mnt/6TB/ --exclude=".Trash-1000" --exclude="Thumbs.db"
会随机停下来,似乎没有什么好的理由。它不仅停止了,而且使整个机器无法使用。
当将整个事件(包括stderr
)传送到日志时,输出会像这样停止:
3TB/Photos/2002/02/dad/IMG-0814.JPG # <- nothing here
配置失误
问题中的驱动器是作为软件 RAID-1,在作为文件系统的ext4
之上有mdadm
、LUKS 加密,这并不是一个非常复杂的设置,这使我相信我搞砸了配置。仍然值得一看。
使用mdadm --detail
检查阵列没有显示任何问题、挂起的重新同步或任何其他明显错误配置的迹象。关于cryptsetup luksDump
也可以这么说——一切都按照预期设置好了(关于缺少 ZFS、btrfs 甚至 LVM 的评论将通过管道传送到/dev/null
)。
甚至badblocks
,这个检查坏扇区的工具,也没有产生任何结果。
nohup badblocks -nvs /dev/sda 1>&2 | tee sda.out &
我甚至试图使用strace
找到最初的命令:
sudo strace -o strace-output.log -f rsync -P -aht --out-format="%t %f %b" /mnt/3TB/ /mnt/6TB/ --exclude=".Trash-1000" --exclude="Thumbs.db"
无济于事。
因此,肯定是一个坏的硬盘驱动器(或者可能是 SATA 电缆或一个垂死的 PCI-to-SATA 卡)。诚然,两个驱动器同时损坏的可能性很低,但并非不可能。
责怪错误的事情
因此,我干脆不挂载阵列。毕竟,服务器是全新的,在我最终将所有现有的备份驱动器迁移到它之前,它仍然有足够的空间。所以何必呢?
我的懒惰很快就咬了我。几个月后,我在服务器上移植了我的pihole
,一个基于 DNS 的网络级广告和跟踪拦截器。它也恰好是一个 DHCP 服务器。
DHCP 服务器的问题是它们缺乏可用性不会马上显现出来。如果网络上的每台设备都分配了 IP 地址,就没什么好担心的了。对于 DNS 来说也是如此——大多数设备将简单地与它们的备用 DNS 对话,如8.8.8.8
或1.1.1.1
。
有一天,我的网络似乎中断了。我很快责怪康卡斯特,愤怒地重启调制解调器和路由器,但无济于事。WiFi 是有的,但是设备得不到 IPs。嗯,奇怪。
过了一会儿,我明白了——是服务器在分配地址。如果它关闭,没有设备可以加入网络。由于时间紧迫,我重启了服务器,解密了驱动器,然后继续我的快乐之路,归咎于一个反常的事故。
回来后,我继续翻看/var/log
,愤怒地寻找罪犯。我敢说,这可能是潮人科技的错——Kubernetes、Docker、nodejs、golang——魔鬼的杰作!
嗯,在一个死内核上找到日志是很困难的——毕竟,没有一个内核做 I/O,死内核写日志是不太可能的。但是有一点很突出:munin
。
在不可避免的硬重置之前收到的最后一个日志如下所示:
bigiron smartd[786]: Device: /dev/sdd [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 113 to 112
22:43:15 bigiron smartd[786]: Device: /dev/sdf [SAT], 1 Currently unreadable (pending) sectors
22:43:15 bigiron smartd[786]: Device: /dev/sdf [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 61 to 60
22:50:01 bigiron CRON[9239]: (root) CMD (if [ -x /etc/munin/plugins/apt_all ]; then /etc/munin/plugins/apt_all update 7200 12 >/dev/null; elif [ -x /etc/munin/plug
ins/apt ]; then /etc/munin/plugins/apt update 7200 12 >/dev/null; fi)
08:09:52 bigiron systemd-modules-load[465]: Inserted module 'lp'
Munin,作为久经沙场的监控软件,可能遭遇了配置不良、软件包过时或类似的问题。有道理——北美某处房子里的一台服务器发现了监控全球成千上万台机器的软件中的一个破坏游戏的漏洞。
我不想再为此烦恼了,就把穆宁搬走了。反正我太笨了。
法伦海特 233
但是另一件困扰我的事情是:硬盘温度不太可能超过 110 摄氏度——大多数硬盘可能会在 80 摄氏度左右失效。在 reddit 的一个帖子上(关于我的服务器!),用户Tired8281
发帖:
*Unfortunately I made a single stupid mistake with the hardware setup and the software setup I used didn't catch it, and three months later half of the drives died*
*Promise you won't laugh? I installed the fan wrong. Instead of sucking the hot air from the CPU out of the case, it sent that hot air into the drive cage, slow roasting my hard drives*
https://old . Reddit . com/r/Linux/comments/CQ 9 view/building _ a _ home _ server/ewvcx 9 o/
我没有笑。我以为我也做了同样的事。坐下来,把东西拆开,检查气流,甚至搜索“如何安装机箱风扇”——我已经做了几十次了(我的电脑太多了)——结果发现一切都很好,事实上,那里没有任何东西看起来异常温暖。盒子旁边有一个空调通风口,我用了很多高质量的风扇。
肯定是 S.M.A.R.T .蠢东西,从来不靠谱。这就更有理由去责怪驱动了!
只是… /dev/sdf 从来不是看似破碎的 3TB 阵列的一部分。
追逐错误的东西
我们总结一下:融化硬盘。复制数据时系统死锁。在系统被监控软件锁定之前记录消息,可能会进行大量的 I/O 操作。
是时候追踪这个问题了:在“坏的”驱动器上启动另一个 rsync,迎接我的是:
ext4_finish_bio — 来源:克里斯蒂安·霍林格
哈,我就知道!ext4_finish_bio
!Ext4!fs
模块!一定是硬盘的问题!令人讨厌的是:
static void ext4_finish_bio(struct bio *bio)
{
int i;
struct bio_vec *bvec;bio_for_each_segment_all(bvec, bio, i) {
struct page *page = bvec->bv_page;
#ifdef CONFIG_EXT4_FS_ENCRYPTION
struct page *data_page = NULL;
#endif
struct buffer_head *bh, *head;
unsigned bio_start = bvec->bv_offset;
unsigned bio_end = bio_start + bvec->bv_len;
unsigned under_io = 0;
unsigned long flags;if (!page)
continue;#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (!page->mapping) {
/* The bounce data pages are unmapped. */
data_page = page;
fscrypt_pullback_bio_page(&page, false);
}
#endifif (bio->bi_status) {
SetPageError(page);
mapping_set_error(page->mapping, -EIO);
}
bh = head = page_buffers(page);
/*
* We check all buffers in the page under BH_Uptodate_Lock
* to avoid races with other end io clearing async_write flags
*/
local_irq_save(flags);
bit_spin_lock(BH_Uptodate_Lock, &head->b_state);
do {
if (bh_offset(bh) < bio_start ||
bh_offset(bh) + bh->b_size > bio_end) {
if (buffer_async_write(bh))
under_io++;
continue;
}
clear_buffer_async_write(bh);
if (bio->bi_status)
buffer_io_error(bh);
} while ((bh = bh->b_this_page) != head);
bit_spin_unlock(BH_Uptodate_Lock, &head->b_state);
local_irq_restore(flags);
if (!under_io) {
#ifdef CONFIG_EXT4_FS_ENCRYPTION
if (data_page)
fscrypt_restore_control_page(data_page);
#endif
end_page_writeback(page);
}
}
}
https://elixir . boot Lin . com/Linux/v 4 . 19 . 106/source/fs/ext 4/page-io . c # L62
经过搜索,以下是 2005 年以来的邮件列表主题中互联网智慧的全部:https://www . red hat . com/archives/DM-devel/2015-10 月/msg00046.html
只是……我运行的是Debian 10
,内核4.19
。
比以往任何时候都更困惑——ext4
内核模块中的一个标准调用如何会在一个最新的(稳定的)内核上导致死锁,这超出了我的理解范围。
同样,我们可以看到这一点:
invalid_op+0x14/0x20
呃,无效的操作码?
ENTRY(invalid_op) ASM_CLAC pushl $0 pushl $do_invalid_op jmp error_code END(invalid_op)
https://elixir . boot Lin . com/Linux/v 4.2/source/arch/x86/entry/entry _ 32。S#L743
嗯,中央处理器的问题?知道了旧版本的 BIOS 会引起 AMD 锐龙 CPU 的问题,我现在开始更新 BIOS,希望能有所改变。这并没有发生。
找到线索
沮丧之余,我几乎准备好花费数百美元购买一对新的 NAS 驱动器。幸运的是,一个周日下午,我和我的搭档在好市多看到一个 8TB 的外置硬盘,售价 120 美元。在最终更换驱动器之前,运行一些额外的备份似乎是一项不错的投资。除了餐馆供应的一加仑橄榄油和鸡汤,我们回到家,我开始准备开车。
像我这样天真的人,我把它插入服务器,格式化成 ext4,加上 LUKS……然后遇到了一个“无效的密码短语”,甚至是一个单字符的密码。归咎于一个坏了的 USB 端口,我把它插到我的笔记本电脑上——运行 popOS!还有一个更新的内核,我可以补充一下——它工作起来非常棒。
回到服务器,启动rsync
,我就不管它了。
第二天早上我看到了这个:
_raw_spin_lock — 来源:克里斯蒂安·霍林格
打扰一下。[_raw_sping_lock](https://www.kernel.org/doc/Documentation/locking/spinlocks.txt)
?那个跟有什么关系?嗯,我想如果机器锁死了,从多线程和中断的调用中得到一个异常是有意义的,但是这次我不能责怪ext4
。发生了什么事?
认识到真正的邪恶
我恍然大悟。服务器通常在晚上崩溃。自动备份在晚上运行,但通常情况下,考虑到它们的增量性质,它们不会做很多事情(特别是如果我只是在 Windows box 上玩魔兽世界的话)。由于这些备份从来没有接触过看似失效的驱动器,所以我从来没有完全建立起这种联系。
rsync
读取、比较和写入数据。底层内核调用缓存数据、分配页面并处理所有需要的模块——文件系统、mdadm、dm-crypt(使用内核的加密 API)——同时处理多个线程。
虽然这些操作可能不会对系统造成巨大的负载(从绝对意义上来说,如所用 CPU 内核的百分比),但它会执行许多需要同步的小操作
如果在任何时候,坏的内存导致内核弄乱了各自的锁,它很可能会死锁并导致系统不可用,而不会出现真正的内核崩溃。
我越深入调查,就越发现:
Message from syslogd@bigiron at Feb 22 12:38:40 ...
kernel:[ 7467.252060] page:ffffe29fc735a400 count:-1 mapcount:-1 mapping:0000000000000000 index:0x1
kernel:[53370.089111] watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [smbd:21214]
内存损坏也可以解释很多更奇怪的问题——比如硬盘看起来就要融化成一片火海,尽管它处于一个舒适的温度。
检验假设
这很简单:我在实时系统上运行memtester
,发现了多个问题;然后,我在一个可启动的 USB 驱动器上使用了用过的memtest86
,只发现许多问题。理论证实。
梅斯特不高兴了— 来源:克里斯蒂安·霍林格
在关掉内存之后——问题中的一个是一套海盗船复仇 LPX 2x8GB DDR 4 cmk 8 GX 4 m1 a 2400 c 16——强制一个大的rsync
工作,看着机器像为它而建一样工作。
结论
我不完全确定该说什么——但我真诚地希望有人在寻找一个模糊的、看似随机和不相关的问题时发现了这一点,并被阻止发疯。
就我而言,在走后一条路之前,我将开始更换 RAM 模块。
原载于 2020 年 2 月 25 日 https://chollinger.com。
数据科学家如何在 FAANG 进行面试
以及数据科学的未来走向
在 面试查询 ,我们爱聊我们的成功故事。本周,我与最近加入苹果公司担任数据科学家的塔赫尔进行了交谈。我问了他上一次面试的情况,他为面试做了哪些准备,以及他对数据科学未来的展望。你可以在推特上找到塔赫尔@ tahere Sheikh和 中 。
你好!你的背景是什么,你是如何进入数据科学的?
大家好,我是塔赫尔·埃尔舍伊克,我刚刚加入苹果公司,成为一名专注于苹果音乐的数据科学家。在此之前,我在 Intuit 工作,担任工资团队和产品内发现团队的数据科学家。在那之前,我在华盛顿特区完成金融数学硕士学位,同时在一家名为 Red Oak Strategic 的咨询初创公司担任数据科学家。
我知道我对很多不同的领域感兴趣,比如计算机科学、统计学、产品管理、分析学等等。因此,成为一名数据科学家似乎非常适合我。
在 Intuit 工作很棒,我学到了很多东西。那里的数据科学团队嵌入在产品中,所以这个角色更像是一个技术产品管理角色,你每天与产品经理和工程师一起工作,创建新功能,调试现有指标,并进行大量实验。不过,最终我想去一家更面向消费者的公司,从事我个人使用的产品,这就是我转投苹果的原因。
找新工作时,你的整体面试体验如何?
这次面试的时候,我考虑得很周到,争取到了很多面试机会,并确保把我最想要的安排在最后。上次我面试数据科学职位时,我收到了 Intuit 的录用通知,我就接受了。所以这一次,我想扩大我的视野,我最终得到了 6 到 7 次面试。
我的数据科学面试很艰难,因为这些面试彼此完全不同。数据科学是非结构化的,要在面试中胜出非常困难,因为你无法对每一个面试都做好 100%的准备。数据科学技能非常广泛。我觉得很多人都说在你掌握诀窍之前,你必须去很多公司面试,但事实并非如此,因为每次面试都与之前的完全不同。例如,在脸书,面试侧重于产品感觉问题和统计数据,但在谷歌,面试更多地围绕机器学习和咨询类问题。
什么帮助你为面试做准备?
面试查询上的 SQL 问题非常有用。你永远找不到专门针对数据科学家的 SQL 问题。通常,Leetcode 或 Hackerrank 都有针对软件工程师的 SQL 问题。因此,为数据科学家找到更侧重于分析和数据处理的 SQL 问题是非常有帮助的。
面试询问中的产品问题对许多面试也很有帮助。考虑到许多产品问题是如此的零星和多变,在制定指标和深入问题时了解如何思考组织你的答案是有益的。
此外,招聘人员会发给我很多材料,为即将到来的现场面试做准备。虽然有些内容可能会有帮助,但很多时候这些材料是误导性的,我最终浪费了很多宝贵的时间。LinkedIn 和脸书就是如此。
你认为数据科学未来会走向何方?
老实说,在我看来,机器学习越来越不相关了。在数据科学的工作环境中,公司更想要数据分析师和技术产品经理,而不是构建模型的核心数据科学家。例如,Intuit 的分析职位比机器学习职位空缺更多。我认为这与这样一个事实有关,即公司需要能够沟通和制定战略并且能够推动产品前进的人。
感谢阅读
- 对更多这样的故事和指南感兴趣?查看 面试查询简讯 。
- 订阅我的 Youtube 频道 了解更多数据科学访谈!
一个数据科学家如何在他梦想的行业找到工作
亚历克斯在疫情之前加入了网络
在 面试查询 ,我们爱聊我们的成功故事。本周,我与 Alex 进行了交谈,他最近以数据科学家的身份加入了 NetworkNext。我们谈到了他富有挑战性的面试经历、对其他求职者的建议,以及进入数据科学的非传统方式。可以 在 Linkedin 上关注 Alex。
你好!你的背景是什么,你是如何进入数据科学的?
嗨,我叫亚历克斯。我的背景是计算物理硕士。我刚开始的时候,数据科学在 2015 年还没那么大,但是开始快速回升。毕业后,我试图涉足数据科学,但发现这真的很难。我最终被一个训练营接受,这个训练营帮助我理解了机器学习的基础和算法。
我走了一条非常非传统的路线,最终在 Upwork 上做自由职业者的工作,并找到了一个客户,科莫多科技公司,它对我最初的一些工作印象深刻。在做了几个月的合同工后,我得到了 Statusquota 公司的一份工作,这是这位首席执行官的另一家公司,也是她帮忙工作的公司。
我听说在 Upwork 找到合同工作很难。你的体验如何?
肯定是从做零工开始的。不同的客户会有零星的工作,但有一天我联系了一个需要基本建模工作的人。当他们有一个职位,需要一个承包商时,它结束了科莫多,这是一个很好的方式进入一个更稳定的演出。我做了一年左右的顾问,直到他们资源耗尽。
我认为努力获得升级工作的经验是有用的,因为许多初级数据科学家没有与客户合作的经验,也没有搞清楚一家企业最终真正想要什么的经验。当我从事几份自由职业时,这给了我理解不同企业需要什么的经验。
你的数据科学面试经历是怎样的?
我开始在西雅图、佛罗里达和其他一些我想去的地方接受面试。我在机器学习基础和编码方面有很强的背景,但在处理所有不同类型的数据科学面试时遇到了麻烦。一般来说,如果我做得不好,我知道我搞砸了什么。
有些面试有点像 Geico 或 Statefarm,因为他们都在保险行业。例如,存在保险业特有的问题,围绕解决数据存在的不平等问题。
有没有超有挑战性的面试?
我不得不说,国家安全局在数据科学方面的立场是最令人难忘的。你被邀请参加一个数据科学考试,最后你进入一个测试机构,在那里你在一台超级安全的计算机上参加考试,不允许使用手机或任何东西。
最终在你离开后,你会收到一封邮件,询问你是否通过了考试,然后他们会在几个月内联系你进行面试。我收到的电子邮件说我通过了,但我再也没有收到回复。虽然考试对我显示我需要学习什么概念很有帮助,它填补了很多空白。
我遇到的最具挑战性的面试问题来自对 Karat 的一次面试。我最终参加了技术面试,但后来他们改变了态度,告诉我他们现在更需要一名数据工程师,而不是数据科学家。这似乎是一个非常普遍的问题,因为在构建数据基础设施之前,您无法真正进行数据科学研究。带回家的作业是超级乱的数据。试图从杂乱的数据中建立一个好的模型需要大量的探索。
你找到对你的采访有价值的资源了吗?
我发现 采访查询高级 在展示其他数据科学技术公司的问题方面对我非常有用。很容易就可以列出清单,问自己每个问题,并通过检查答案来确保自己知道正确的答案。我发现情景商务问题很有帮助,因为像脸书、亚马逊、谷歌等大公司…总是在寻找一个特定的具有行业知识的人。
面试查询 SQL 问题
我也用过几本书。其中一本是 O’reilly 写的实用统计学书籍,它确实帮助我恢复了记忆。我申请和面试的一些公司有建立模型,你需要在最后得到一个分数才能通过。这实际上给了我一个机会来了解更多关于不同的升压算法。
你会给现在正在找工作的数据科学家什么样的建议?
不要沮丧。每个公司都是不同的,只要你能从面试中学到东西,那么下一次面试会更好。我在新冠肺炎期间开始找工作,当时正处于两家公司的最后面试过程中,它们都冻结了招聘。
我的租赁合同将于四月底到期,所以我开始担心找不到地方住。3 月中旬,我开始重新搜索,试图将我申请的公司类型从一般的咨询公司改为传统的科技公司。
我发现与咨询公司交谈真的很奇怪,因为技术筛选是与顾问而不是数据科学家一起进行的。这导致了怪异的案例研究。
我最终发现我面试的最后三家公司是我最好的面试。他们也是结构化程度最低的数据科学家面试。但当我与一位数据科学家进行了一个半小时的非常随意的对话时,我真的非常喜欢,因为我们可以讨论工作和职责。
我最终接受了 NetworkNext 的邀请。面试由两个 30 分钟的面试组成。他们只是知道他们想给我一份工作,因为他们说我对在视频游戏行业工作的热情一直是我的梦想。
你认为数据科学面试的未来会怎样?
我认为数据科学面试的未来需要远离带回家和询问人。我不认为带回家做任何事情,因为他们给用户实践,但 你做了很多工作,却没有得到很多回报 。当你可以和某人谈论一个项目,谈论细节时,更多的东西会显露出来。
感谢阅读
- 如果您即将参加数据科学面试,请查看 面试查询 !
- 查看我的 Youtube 频道 了解更多数据科学内容、面试指南和解决问题的技巧&。
- 查找更多数据科学面试指南,如面试查询博客上的 谷歌数据科学家面试 和DoorDash 数据科学家面试 。
原载于 2020 年 6 月 2 日 https://www.interviewquery.com*。*
写作学位如何帮助我在数据科学领域找到工作
科学和技术交流打开了大门
Pixabay 免费图片
写作支付了我的账单
几年过去了,经济开始复苏,但金融危机导致的经济衰退让应届毕业生的就业市场变得艰难。2011 年底大学毕业后,我开始寻找一份技术写作的工作,并获得了科学和技术交流的学士学位,为了给那些 2008 年不在的人提供视角,我的学位课程不得不取消实习要求,因为学生们找不到他们。几乎没有人在招聘!过了一段时间,我满足于在一家软件公司做全职带薪实习,做产品文档专员。我需要经验,这似乎是一个很好的工作场所,而且报酬比我的零售工作高!此外,我在六个月内就完成了,如果我不喜欢,甚至更短,所以这是一个很好的风险/回报。
与一群编辑和评论我作品的人一起一天专业写作八小时是一次奇妙的经历,教会了我很多。当然,除了写作,我还做了其他事情,比如组织可视化和编辑信息,参加与业务团队的会议,以及与公司的主题专家(SME)一起工作,但是我的大型项目是编写涵盖软件功能的面向客户的文档。我钻研业务分析师概述的需求,自己摆弄软件,然后开始记录文档。如果有人想以写作为职业,我强烈推荐探索技术写作和产品文档作为职业道路!知道全国各地的人们发现我的话很有帮助,同时我磨练了我的沟通技巧,可以转化到其他行业和专业,这让我感觉很有收获。
被迫写作的瓶颈
实习结束后,我决定留在这家公司,并加入他们的支持团队,因为文档团队没有空缺。我在实习期间获得的知识和技能很容易转化到我的新工作中。虽然没有人编辑我的作品,但我仍然每天写作,通常是类似于文档的一步一步的指导,所以我仍然得到了练习。随着时间的推移,我利用我的沟通技巧创建了培训项目和内部知识文章,为团队增加了很多价值。总的来说,这份工作真的很有回报,我赚了不少钱,所以我坚持了很长时间。
几年过去了,我终于看到了两条前进的道路:
1.继续关注前端支持,寻找更多写作和培训的机会。
2.转向关注软件支持和学习数据库的技术方面。
作为一个一直对计算机感兴趣的终身学习者,我选择了第二个选项。这也让我走上了一条硬技能之路,我可以把这些硬技能添加到我的简历中。一旦我学会了如何查询数据库,我就着了迷,并把写博客放在一边,在空闲时间学习结构化查询语言(SQL) 。我向我的技术支持同事询问复杂的 SQL 示例,并在家里设计数据库来存储股票市场报价。我付出了巨大的努力,最终爬上了技术支持的阶梯。
我,一个文艺复兴时期的人
文艺复兴时期的男人(莱昂纳多·达芬奇,阿克巴大帝,伽利略,我(埃里克·克莱彭))
当我在大学开始学习技术写作时,我从未想过十年后我会成为一名计算机程序员。其实我学写作的原因之一就是因为不喜欢数学和数字。我年轻时尝试过编程,在大学里我喜欢逻辑和符号逻辑,但计算机科学和高等数学就是不适合我。无论如何,进入 SQL 充当了推动我进入数据分析的催化剂:我对金融感兴趣作为一种爱好,我研究了可用性和人体工程学作为我的技术写作学位的一部分,所以我熟悉一些统计数据。我说的重点是,查询数据感觉像是另一种形式的技术写作,因为两者都是将复杂的步骤分解成小的逻辑部分。我在技术写作方面的教育使我很容易过渡到数据分析。
这是一个艰难的决定,但我决定放弃我的空闲时间,冒险从事技术支持方面的轻松工作,并通过加倍学习分析来致力于职业发展。我不仅每天在工作中使用 SQL,而且还参加了我所在的州立大学举办的数据分析编码训练营。我回学校了!在为期六个月的项目中,我使用 Excel、Python、NoSQL、SQL、R 和 JavaScript 探索数据。这是大量的工作,但它让我接触了大量的语言和概念,如机器学习。
大约在同一时间,数据科学一词到处出现,并被吹捧为当今“最性感的工作”。我在训练营之前就听说过数据科学,我在通过一些编码书籍学习 Python 基础知识的同时也涉猎了 sci-kit learn,但是我并没有真正理解这个领域到底是什么。我知道我喜欢科学和数据,所以我想我应该去看看。训练营的重点不是数据科学,但是我的最后一个项目是使用 TensorFlow 建立的一个葡萄酒推荐网站,该网站至今仍在运行!训练营正是我需要建立势头并打入分析或数据科学的地方。
尼奥也没有进行第一次跳跃
我带着不错的项目组合从训练营毕业,并对自己的编码能力有了新的信心。我注意到数据科学部门有一个数据工程师的职位空缺,所以我申请了。在该公司工作多年后,我拥有广泛的领域知识,我有资格证明我是一个快速的学习者,能够处理一些 SQL 和 Python。不幸的是,这还不够。我需要更快地编码,并对我的算法和计算机科学概念的知识更有信心。这是一个令人失望的结果,但是这个部门需要一个比我更有经验的人,所以我接受了这个结果,全力以赴。
在我被拒绝后不久,部门经理联系我,询问团队中一个产品分析师的职位。我调查了一下,这份工作非常适合我的技能。这个职位需要大量的交流,但是给了我自由去编码,这样我就可以提高我的技能。我想从事数据科学方面的工作,我想写作和编码。这份工作似乎是天作之合!
随着我职业生涯的顺利进行,我继续在业余时间学习和编写代码,最终也回到了写作中;我不能永远离开。当我进入数据科学领域时,我经常看到在线出版物《走向数据科学》。在阅读了足够多的文章后,我建立了信心,开始在 Medium 上写博客,记录我的编码项目和生活经验。我的文章得到了很多积极的反馈,Medium 已经变成了一个巨大的额外收入来源。我强烈推荐任何对写作感兴趣的人尝试一下。
自然语言分析师
在数据科学的所有主题和子领域中,我自然地抓住了自然语言处理(NLP)。我们交流的复杂性和微妙性似乎一直是让我们成为独特而聪明的物种的决定性因素,因此训练机器理解语言将交流从模糊、有说服力和充满感情的东西转变为机械、有序和可预测的东西。然而,我对 NLP 了解得越深,我就越明白它是一个新类型的技术作家将会出现的脚手架:自然语言分析师。
几周前,在他们的人工智能博客上,谷歌宣布了使用自然语言查询数据库的进展。研究人员使用高级语言模型(BERT)和机器学习提出了一种不使用 SQL 等查询语言返回查询结果的方法:
https://ai . Google blog . com/2020/04/using-neural-networks-to-find-answers . html
虽然这篇文章的结论是这项技术还有很长的路要走,但有理由认为在十年内自然语言查询将成为普遍的做法。数据分析和技术写作将以前所未有的方式融合在一起,为这两个领域的新机遇让路!这是有意义的,因为在分析和技术写作之间有很多重叠的技能:统计、批判性思维、视觉修辞、逻辑、有说服力的讲故事…仅举几例!
探索技术写作!
作为一名产品分析师,我在数据科学领域工作,与利益相关者就团队项目进行交流,查询数据库以获得商业智能,编写 python 应用程序以共享分析,并探索机器学习模型/管道以改善内部分析基础设施。要想在这个职位上取得成功,强大的写作能力是必备的条件,所以我感谢我在科技交流方面的背景。虽然我既不是“数字迷”,也不是杰出的数据科学家,但写作背景让我能够追随自己对数据和编程的热情,这让我在数据科学领域找到了一份我非常喜欢的职业!
谢谢大家!
- 如果你喜欢这个, 在 Medium 上关注我 了解更多
- 通过订阅 获得对我的内容的完全访问和帮助支持
- 我们连线上 LinkedIn
- 用 Python 分析数据?查看我的 网站
学习如何写产生收入的文章!问问你自己写作是否适合你。找到一个合适的位置,成为一个…
medium.com](https://medium.com/swlh/the-four-principles-that-transformed-my-writing-into-content-that-earns-money-db9786086cb3)
佛兰德制图员和 PNGs 如何让网络地图成为我们日常生活的一部分
或者 web 地图的简史
你上次迷路是什么时候?真的好好想想。
除非你没有手机或者你的手机没电了,否则你很可能会有方向告诉你去哪里,或者你最终会看到一个蓝点告诉你你到底在哪里。
这个概念,在任何给定的时间知道你的确切位置,仅仅在 15 年前还是一个遥远的想法。然而,在此后的几年里,地图、位置以及我们与周围世界互动的方式都发生了变化,你可能再也不会感到迷失。
任何浏览过新闻机构网站的人都可能看过一张地图,上面显示了疫情冠状病毒每天是如何变化的。在线可视化地理空间数据并不总是一件容易的事情,这一时期也带来了我们与地理空间数据在线交互方式的重大变化。
位置以及我们如何与之互动已经在我们的生活中无处不在。我们如何走到这一步的故事包括一长串个人、公司和想法,它们最终塑造了我们与世界的互动方式。这个故事没有一个版本可以讲述每一个部分,但我希望它能帮助你了解我们是如何走到这一步的。
制图学的简要背景
这段历史与漫长的地图绘制历史紧密相连。地图学既是科学又是艺术。它是关于呈现世界的本来面目,同时也要做出巨大的妥协:对于每一个包含某些东西的选择,你都必须排除某些东西。
这适用于地图上的实际内容(不可能在一张地图上表示地球上的每个特征),也适用于地图的投影,或者 3D 地球如何投影到 2D 表面。
葡萄牙发现地图和密克罗尼西亚棒图
整个制图员都明白这个概念,他们的地图告诉一个单一的故事,只有一个目的。玻利尼西亚和密克罗尼西亚航海家创造了详细的棒图,使他们能够绘制岛屿之间的联系,了解海浪模式。葡萄牙探险家绘制了详细的海岸线地图,内部几乎空无一物,因为他们只专注于发现和航行。
墨卡托 1569 年世界地图
1569 年,一位名为杰拉杜斯·麦卡托的佛兰德制图员发布了一张带有新投影的地图,它只有一个目的:帮助水手们用一条直线在地图上找到任何航线。
数百年前创建的这种投影在我们与在线地图互动的方式中发挥了重要作用。几乎我们在网上看到的每一张地图都使用墨卡托投影或它的细微变化。
然而,网络地图提供商使用它不是因为它能够找到两点之间的直线路径,而是因为你可以将整个地球投影到一个几乎正方形的图像上。我们稍后会谈到这一点的重要性。
当然,对于从墨卡托投影中获得的东西,地图工程师也放弃了一些东西——在这种情况下,当你远离赤道时,物体的扭曲。
墨卡托投影中的尺寸失真
这在大范围内(或当地水平)你不会注意到,比如在你的街道上,甚至在你的城市或州。但是在小范围内(全球视角),这使得格陵兰岛看起来和整个非洲大陆差不多大,实际上非洲比格陵兰岛大 14 倍
在我们进入在线地图的详细历史之前,有两个关键点需要注意。首先,网络制图惯例从一开始就与制图设计和科学惯例不一致。询问任何受过 GIS 培训的人,他们可能会告诉你墨卡托不是他们显示全球地图数据的首选。
第二个后果是大多数 web 地图中地球的变形。随着网络制图成为我们与世界互动的默认方式,数十亿人对世界的理解将发生根本性的扭曲。《白宫群英》中的这个片段很好地解释了这个问题,几乎所有从事地理或制图工作的人都知道这个问题。
网络上的第一批地图
尚不清楚第一张在线地图是什么。它很可能是我们永远不知道的某个地点的静态地图图像。区别静态网络地图和真实网络地图的是交互性。事实上,用户可以参与并选择在地图上看到的内容,这使得网络地图成为一个独特的类别。有史以来第一次,地图的查看者可以决定他们看到什么,而不仅仅是制图员。
许多人都同意,施乐公司在 1993 年推出了第一批网络地图之一的 PARC 地图浏览器。功能很简单,你可以查看地图,放大和缩小,打开和关闭图层,等等。即使在这个早期的应用程序中,我们也可以了解今天网络地图的一些基础知识。
施乐 PARC 地图查看器
为了在地图上显示数据,PARC 地图查看器将读取来自用户的请求,并使用地理数据库呈现地图图像,然后将地图图像从服务器返回到浏览器。
宾夕法尼亚州立大学地理 585 课程的网络地图请求循环(链接此处
这个循环——用户请求、数据渲染、返回给用户——仍然是大多数 web 地图的核心。甚至包括经度和纬度参数的 PARC 地图浏览器 URL(见上)今天仍然在谷歌地图中。
PARC 地图查看器还用于 web 制图的另一个基本元素:在地图上显示其他数据。在这种情况下,它是显示全球地震的数据。全球地震定位器是由爱丁堡大学于 1994 年开发的,该项目页面仍然在线,并提供了地图如何工作的描述:
最初的系统使用美国地质调查局(USGS)下属的国家地震信息中心(NEIC)提供的数据。这些数据提供了地震发生后几小时内的基本信息。作为对查询的响应,数据是从科罗拉多州戈尔登市的美国地质调查局服务器上动态获取的。这些数据然后在爱丁堡被处理成适当的格式,最后在美国加利福尼亚州帕洛阿尔托的施乐 PARC 地图浏览器上显示出来。阅读原始地震定位器的完整理由。
这被称为混搭,在谷歌地图发布后不久,我们将看到一个开发者如何采用同样的概念,并开始了一系列创造新行业的活动。要让网络地图真正起飞,需要两家有相同愿景的公司:允许用户查找一个地址,并向他们展示该地址的地图。
1996 年, Mapquest 上线。同年不久, Multimap 在英国推出。这些是第一批面向消费者的 web 地图服务,从这一点开始,世界上每个人与位置交互的方式开始改变。
********
早期输入你的地址并看到一颗红星出现在他们家所在的地图上的新奇感是如此独特,以至于这些服务很快成为最受欢迎的在线网站。Mapquest 最终成为一家上市公司,并最终在 1999 年被 AOL 以 11 亿美元收购。
当然,这不仅仅是在地图上找到你家的新奇感,而是在两个地点之间获取驾驶方向的能力。印刷道路地图的缓慢衰落已经开始,显然基于消费者的在线地图有着巨大的市场。
Mapquest 本身为我们今天所知的网络地图添加了一些基本元素。缩放栏以及平移地图位置的功能是 web 地图的新增功能。
带有平移和缩放功能的 Mapquest
对于用户来说,平移和缩放地图的主要缺点是每次地图移动时,都会重新加载完整的地图视图。因此,虽然地图是交互式的,但最终还是相当慢。
在可预见的未来,大多数 web 地图将使用这种基本结构。这一时期见证了其他几个地图提供商的兴起:传统的 GIS 提供商也推出了他们的网络服务(MapInfo 和 ESRI),一个名叫 Steve Coast 的人在 2004 年启动了一个名为 OpenStreetMap 的项目,同时雅虎和微软也开始探索地图服务。
在此期间,谷歌一直在进行几项重要的收购,这些收购最终构成了谷歌地图的基础。然后在 2005 年 2 月 8 日,一切都变了。
谷歌地图和地图切片
谷歌地图(2005 年)
谷歌地图并不是第一次尝试基于位置的搜索。该公司在 2003 年推出了一项名为“谷歌本地”的功能,用户可以在搜索中加入一个地点。如果你想找到伊利诺伊州芝加哥附近的咖啡店,你只需输入你的位置和搜索词。
谷歌本地搜索
该功能在一天结束时并不是很受欢迎。 Recode 采访了 2015 年谷歌地图早期的几名团队成员,本地产品经理 Bret Taylor 分享了他对该项目的见解:
“这是一个几乎无用的项目,”泰勒说。
按位置搜索的最大例子是你应该能够搜索帕洛阿尔托附近的咖啡店。但是 Taylor 记得 Sun Microsystems 把它的地址放在了它网站的每一页的底部,并且它用咖啡来命名它的产品(最著名的是 Java)。这破坏了整个例子。
“它每天的用户数为零,”泰勒说,他现在是生产力初创公司 Quip 的首席执行官,此前他曾担任脸书的首席技术官。
但是谷歌并没有尝试将位置引入他们的搜索产品,2004 年,该公司开始了收购 Keyhole、T2 where 2 Technologies 和 T4 Zipdash 的进程。这三种技术将分别形成我们所知的谷歌地球、谷歌地图和谷歌地图移动版。
Chris Sacca 现在因他的各种投资而闻名,他是领导收购 Keyhole 的投资团队的一员,他分享了来自同一篇 Recode 文章的内容:
我永远不会忘记,我们在一次会议上讨论收购 Picasa,这个看起来有点像莫里西的年轻人 Adrian Graham 正在浏览幻灯片,推销我们如何整合 Picasa,而[谷歌联合创始人] Sergey [Brin]完全被分散了注意力。这是在 42 号楼的一个会议室里,里面有一个爬梯机,因为谢尔盖想在会议中更好地利用他的时间。
他把他的笔记本电脑给几个人看,人们说,'哦,妈的,干我,干我。'这个做演示的家伙真的开始流汗了,谢尔盖最终站起来拔掉投影仪,说‘这东西很酷,我们应该买下来’,然后他把笔记本电脑插到投影仪上,给我们看了锁眼。从字面上看,这些高管喊出他们的地址是因为他们想从太空中放大他们的房子。
用户在 Mapquest 地图上看到一颗红星时的兴奋感,谷歌团队和谷歌地球推出后的数百万用户,都来自于从太空放大他们的房子。
Zipdash 将成为谷歌地图移动版的第一个版本,谷歌于 2004 年收购了这个版本。该应用程序允许用户在手机上看到交通延误,还允许用户利用手机的 GPS 定位来获取与他们实际位置相关的信息。
Where2 是我们在笔记本电脑和电脑上使用的谷歌地图的基础,事实上,也是今天所有网络地图的基础。他们的愿景是将地图放在导航体验的中心,而 Mapquest 依赖于一系列打印的方向和街道标志图标。
这家澳大利亚公司几乎被红杉资本收购,红杉资本最终放弃了这笔交易,但最终将团队介绍给了拉里·佩奇。然而,2 构建的技术是桌面应用程序。 Stephen Hutcheon 描述了团队如何快速将它转变为一个网络应用:
但是拉里·佩奇和谷歌对应用软件不感兴趣。“我们喜欢网络,”据说他对戈登的合伙人之一拉斯·拉斯穆森说。他给团队设定了一个截止日期,让他们的想法在网络浏览器中工作。
该团队完成了交易,并于 2004 年 8 月签署了一项金额未披露的交易,这是谷歌有史以来第二次收购 Where 2。
该团队使用了相同的基本循环,即从浏览器向服务器传递请求以返回地图数据,然后将其加载到浏览器中。主要区别是他们如何使用 AJAX,这是 Web 2.0 转换中的一个基本工具,它允许这个循环在后台发生,而不会中断用户的体验。
一旦这三家公司正式加入谷歌,他们就开始构建谷歌地图。从现在开始,他们构建的东西最终将成为所有网络地图的标准,并允许用户用鼠标来平移、缩放和移动地图——滑动地图。****
技术上称为切片 web 地图,让地图以这种方式工作的关键是,地图图像不是一个单一的图像,而是许多拼接在一起的切片。这很重要,原因有几个。
首先,瓷砖本身非常小。他们想出的尺寸,256 像素乘 256 像素,成为网络地图的默认尺寸,可能只有几千字节。每一个都可以很快加载,当它从服务器返回时就会显示出来。
不像 Mapquest 和 PARC 地图查看器那样每次都要为完整的地图做一次完整的往返旅行,地图分块会做 10 到 20 次非常短的旅行。这些地图也足够智能,可以加载地图视图之外的切片,因此当您开始平移地图时,这些切片将可供您使用。
Google Maps 上加载地图切片的示例
每个缩放级别都有自己的一组切片,因此当您放大时,会加载另一个切片图层用于该缩放。缩放级别为 0 时,整个地球将适合一个单幅图块,缩放级别为 1 时,它将拆分为 4 个单幅图块,缩放级别为 2 时,它将拆分为 16 个单幅图块,以此类推。艾伦·麦康琪的演讲非常详细地解释了瓷砖是如何工作的。
来自 OpenStreetMap 的图块 0(链接此处)
不同缩放级别的地图分块
来自 OpenStreetMap 的一个单幅图块(链接此处)
在已经开发的所有地图投影中,有一种非常适合将整个地图放在一个正方形的 PNG 图块上,这就是墨卡托投影。为航海导航设计的地图投影现在将被推向数十亿台计算机和手机,仅仅因为它为创建小正方形 PNG 瓦片提供了效率。
第二个效率提升体现在图块的缓存上。虽然以前的地图服务每次都必须渲染地图,但一旦生成了切片,谷歌只需将其放入存储中,如果再次请求,它就会使用缓存的版本。这意味着更快的地图。第三,如果一个图块出现故障,地图上不会显示该图块,整个地图也不会受到影响。
当谷歌地图在 2005 年推出时,它获得牵引力的速度很慢,但最终,随着他们添加卫星图像,它变得越来越受欢迎,因为人们开始找到谷歌高管在地图上找到自己房子时找到的那种快乐。第一次发射将作为“岛屿地图”被永远记住,因为地图上唯一的陆地是北美,四面环水。
岛屿地图
许多其他公司纷纷效仿:雅虎、必应、Teleatlas(现在是 TomTom)、Navteq(现在是诺基亚的一部分)、Yandex 和百度。ESRI 也跟上了,但他们都使用了谷歌地图的相同基础和创新。
谷歌最终赢得了面向消费者的在线地图之战。以至于当苹果公司需要一个地图提供商来发布他们的新 iPhone 时,他们形成了一个高度秘密和令人不安的忠诚,这种忠诚从 2007 年开始持续了五年。
当谷歌添加一个小蓝点显示你的确切位置时,它开启了一个基于你的位置的整个行业。Foursquare 和 Yelp 等公司,以及从嵌入在其他应用程序中的广告工具收集位置数据的数据提供商将开始涌现,并继续改变我们与周围世界的互动方式。
到目前为止,大多数创新都涉及到地图本身——道路、水和你看到的其他一切。但是一个好奇的开发人员问了一个问题“我可以把我自己的数据放在地图上吗”,而其他许多人问,“如果我想使用我在地图上看到的数据怎么办”。这两个问题将推动网络地图的下一阶段创新。
Mashups 和 OpenStreetMap
到目前为止,大多数 web 地图都集中在基础地图上:道路、高速公路、公园、水景等。然而,即使在最初的网络地图中,也很明显需要在地图上显示其他数据。
保罗·拉德马赫破解了混搭地图,或者使用你拥有的数据并将其放在网络地图服务之上,保罗·拉德马赫有效地找到了一种方法,使用谷歌地图中未经批准的 API在谷歌地图之上显示 Craigslist 的租房列表。****
********
HousingMaps.com
结果是housingmaps.com(现在是一个活着的遗迹),它允许你在地图上查看房屋列表,过滤结果,并点击打开 Craigslist 中的列表。这种功能是我们今天认为理所当然的,但这是这种类型的第一张地图。
Rademacher 有效地破解了谷歌地图,在免费提供的谷歌地图基础上开发了自己的产品。虽然谷歌本可以采取关闭网站和限制访问这些 API 的路线,但他们看到了一个机会。
他们最终雇佣了 Rademacher,根据他的 LinkedIn,他现在在苹果工作,并创建了谷歌地图 API 。这使得任何开发者都可以将谷歌地图作为一项服务来使用,并将地图产品商业化。
这项服务已经有了很大的发展,包括许多其他工具和产品,并取得了财务上的成功。在优步 IPO 的披露表格中,该公司在 2016 年 1 月至 2018 年 12 月期间向谷歌支付了 5800 万美元。
在 2000 年代后期,在线地理数据的整体可视化仍然非常不成熟。首先,数据仍然很难访问,除非你知道在哪里可以找到和如何使用 GIS 数据。
许多 web 地图可视化都是在 Flash 中构建的,完全由制图员/开发人员定制和管理。D3.js 开放了许多在线显示地图数据的选项,但对于新手用户来说,这个库仍然很难掌握。
虽然谷歌为用户在地图上放置数据开辟了许多不同的途径,但地图上的数据仍然完全掌握在谷歌手中。
地图空间开始像 2010 年代初那样增长的原因并不单一。这在一定程度上与用户希望创建自己定制风格的底图有关,谷歌在这方面的灵活性有限。
其中一些与数据访问有关。谷歌地图允许你进行编辑,但你自己以后不能访问这些数据。有些是出于需要。在人道主义危机或地图绘制不足的地区使用地图是国际援助界日益增长的需求,或者在地图上显示比谷歌允许的更多的数据,如森林砍伐数据。
不管是什么原因,有越来越多的公司和项目在这个时候开始或受到欢迎。始于 2004 年的 OpenStreetMap 随着更多的贡献者和更多的数据被添加到地图中而慢慢获得了关注。
********
与 2010 年相比,2006 年 OpenStreetMap 的贡献
OpenStreetMap (OSM)或多或少起到了地图维基百科的作用,允许任何注册用户在地图上添加或编辑特征:道路、水路、兴趣点等。世界各地的社区正在慢慢地向地图添加更多的数据(你可以在这里看到一段时间的贡献,在 OSM 维基上看到更详细的事件时间表)。
OSM 在美国的贡献
随着地图上的数据成为一个可行的来源,其他公司开始起步,其中许多是开源社区。 Mapbox 成立于 2010 年,目的是在 Development Seed 的资助下,使用 OpenStreetMap 数据为非营利组织提供定制地图服务。CartoDB (现在的 CARTO)成立于 2011 年,是一个可视化大量森林砍伐数据的项目。以及同年发布的 Leaflet.js ,允许用户用 Javascript 开发任何底图和数据的 web 地图。
对地图感兴趣的用户群体正在世界各地扩大。Maptimemeetups、 免费开源地理空间软件(FOSS4G) 和 地图状态 会议,许多不同的 MeetUps 正在成长和扩大。
所有这些趋势的共同点是,他们都在探索网络地图技术,使用与谷歌地图相同的技术基础,但使用开放的工具和技术。
发生了两件大事,改变了数据在线可视化的方式:2010 年海地地震和谷歌地图 API 的变化。
2010 年海地发生地震时,该国没有可行的受灾地区在线地图。谷歌地图几乎没有任何数据,地面救援工作没有任何地图导航太子港提供援助。
所发生的事情会戏剧性地改变 OSM 的道路。地震后几天,来自世界各地的用户开始在地图上添加数据,几天后,OSM 成为该国救援工作使用的地图。这篇来自世界银行的博客详细回顾了人们的反应:
来自大约 29 个国家的 450 多名 OpenStreetMap 志愿者使用这些图像对道路、建筑物和其他特征进行数字化处理,在短短几周内创建了现有的最详细的海地地图。OpenStreetMap 很快成为许多参与响应和重建的组织的实际底图。
2010 年地震前后的 OSM 太子港
人道主义开放街道地图团队(HOT) 至今仍然活跃,社区成员向有需要的地区提供地图数据。这次活动显示了这个社区的力量有多大,OpenStreetMap 中的数据可以创建一个可行的地图,其数据可以与谷歌和其他提供商相媲美。
OSM 是建立在开放数据的基础上的,这意味着你可以下载和使用该项目的数据,并根据他们的服务条款使用它。新的地图提供商现在有了一种可行的方法来创建带有不断增长的全球数据库的底图。
第二个事件是谷歌地图 API 的重大价格变化。对于那些对创建简单的 mashups 来将地图集成到他们的产品中感兴趣的用户来说,Google 是他们的首选平台。对于许多组织来说,免费或低成本的工具现在非常昂贵,成本高得令人望而却步。
谷歌最终改变了他们的限制,但在此之前,许多人已经离开了这项服务,最突出的是 Foursquare 转而使用 Mapbox 提供服务。
诞生于开源社区的地图公司现在有了一条可行的路线来进行商业竞争,并为那些想要在线创建地图的人提供新的工具。
这些新工具和数据帮助地图成为我们日常生活的一部分。地图成为 Yelp 和 Foursquare 等热门应用的入口。新闻媒体将更多地图添加到他们的故事中,应用程序开发人员可以围绕地图创建完整的体验。
********
各种 web 地图和应用程序
随着 OpenStreetMap 提供更多位置数据,开发人员能够创建自己的位置数据服务,如路线指引或地理编码(从地址获取地理位置),以直接与谷歌产品竞争。用于可视化地理数据的网络地图空间发展如此之快,以至于谷歌最终在 2016 年关闭了其用于可视化数据的谷歌地图引擎产品。
在此期间发生的一项重大创新是矢量瓷砖。该技术的工作方式与前面讨论的地图切片相同,请求发送到服务器,切片返回给用户。然而,返回的不是图像块,数据本身存储在块中,浏览器在数据上添加样式。
矢量缩放
不带样式的矢量单幅图块(来自地图框)
这意味着不仅地图控制更加流畅,而且地图可以根据其他数据改变样式,比如用户偏好。谷歌地图这样做是为了让广告出现在他们的地图上,并根据你的谷歌活动强调你可能喜欢的兴趣点。这意味着谷歌地图的每个用户在地图上可能会有不同的体验。
随着我们继续与周围的世界互动,我们也产生了大量关于我们的运动、偏好和位置的数据。为了可视化这些数据,出现了一套新的技术,也是来自开源社区,将这些数据放到地图上。
更多数据、人类流动性和未来
近年来,随着地图数据从地图切片进入浏览器,web 制图突然向一批新的开发人员开放。 WebGL 于 2011 年发布,旨在更高效地在浏览器中渲染图形。
从 3D 渲染到视频游戏,它被广泛应用于各种技术中。随着数据以更快的速度在浏览器中可用,这项技术最终非常适合在地图上可视化地理空间数据。
这些创新源于需求——产生了越来越多需要可视化的数据。优步是一家在这方面苦苦挣扎的公司,它拥有包含数百万乘车记录的数据,这些记录可用于确定从高峰定价到寻找更有效的城市出行方式的一切事情。
********
虽然许多其他公司已经开发了具有类似技术基础的工具,但优步接受了创建工具的挑战,这些工具使大量数据的可视化既高效又具有视觉吸引力。利用将矢量数据传入浏览器的先进技术,优步数据可视化团队开发了 Deck.gl 。
由于 WebGL 使用 Javascript 并且被所有主流浏览器支持,它成为了前端开发者的热门。几年前,Mapbox 发布了 Mapbox GL ,它将相同的技术引入了基础地图,但 Deck.gl 允许任何开发者在地图上显示大量数据,并执行聚合和 3D 可视化。
来自 Nicolas Belmonte 的 Deck.gl 演示
优步不久后也发布了Kepler . GL,允许非开发者上传数据,并通过用户界面创建自己的可视化。我们很可能会看到更多的 GL 可视化,这些第一批项目提供了一个令人兴奋的视图,我们可以开始期待在线地图。
开普勒
海量数据的可视化当然离不开海量数据。我们所有使用移动设备的人都以这样或那样的方式通过手机上的应用程序贡献了这些数据。
从嵌入在移动应用、地图或其他应用中的 SDK 中获得的位置数据已经爆炸式地成为一个主要行业,随着时间的推移,它使用你的位置 ping 来做从城市规划到广告定位的一切事情,最近还跟踪了社交距离的有效性。
虽然这些数据可以为城市交通规划等广泛的分析提供有价值的见解,但该行业实际上不受监管,这意味着数据的收集和分发方式因公司而异。这些数据对营销人员来说非常有价值,追踪你在哪里生活和购物可以告诉他们很多关于你的行为,并允许非常有针对性的广告。
一个国家的登陆页面,跟踪
《纽约时报》发表了一个围绕位置数据行业的强大系列,名为, 【一个国家】,跟踪了 潜入数据的,它如何保护和不保护你的个人信息,以及你如何跟踪个人,包括总统。
Foursquares 首席执行官呼吁政府监管行业,尽管他们的业务已经从消费者应用转向移动数据提供商本身,但立法可能会在某个时候更好地保护消费者。
虽然位置数据行业与我们互动的网络地图没有直接关系,但你手机上的蓝点是一个不那么微妙的提醒,表明你的设备知道你在哪里,并在某种程度上可能让消费者知道他们为什么会看到一个小时前刚刚逛过的商店的广告。
自从最初的地图首次出现在网上以来,网络地图已经发生了几次变化和转变。当前围绕通过像 Deck.gl 这样的库在浏览器中可视化数据的开发将继续前进,特别是随着支持技术的进步。
作为一个开源项目,尚不清楚它将如何以及是否会商业化,但很可能许多公司将开始赶上一些已经发生的进步。
随着监管或其他控制措施将被置于行业之上,位置跟踪领域可能会看起来非常不同,最有可能的是首先从州级开始,因为加利福尼亚州已经围绕这些数据探索了立法。然而,在短期内,移动性数据提供了关于行为如何影响感染率和住院率的重要见解。
在新的地理区域,数据的需求只会增加,包括质量和更广泛的可用性。Mapbox,这家开始使用 OpenStreetMap 数据来帮助非营利组织的公司,已经将汽车用例作为一个主要焦点,包括使用相同 OSM 数据的增强现实导航。
随着机器学习的增加,对机器学习模型中使用的大量空间数据的需求也将增加。全球人口普查和兴趣点等数据仍由商业提供商控制。一些公司,如 CARTO,已经开始为来自公共和私人提供商的位置数据创建一个中心资源。
道路和物理特征已经被世界各地的合作者开放,不同类型的数据如何进入开放环境还有待观察。随着需求的扩大,这很可能会成为一些合作项目的一部分。
这些年来,Web 地图发生了巨大的变化,然而发展的步伐似乎并没有放慢。它是由我们对世界的答案和信息的渴望和需要所驱动的。最终,接下来会发生什么,就像第一张地图被人类创造出来时一样,将由我们想知道的关于我们世界的事情来驱动,并由我们所有人来决定。
GPT 3 博客如何在两周内获得 2.6 万访客
Adolos 的热门帖子截图(来源)
学习机
GPT-3 匹配人类作家的写作技巧吗?还是写作质量杠杠定的太低了?
OpenAI 的 GPT 3 号已经成为公众关注的焦点很久了。它目前被认为是 NLP 相关任务的最先进技术,取得了比其前辈更好的结果。
GPT-3 还没有公开。然而,OpenAI 允许 beta 测试人员访问该模型的 API,让人们对该模型进行实验。
事实证明,该模型甚至可以通过处理自然语言的描述来创建各种语言的代码。这是 Twitter 上发布的一个例子。
Sharif Shameem 发的推文(来源
这些关于 GPT 3 号能力的推文引发了很多反应。一篇题为“最新的 AI 会杀死编码吗?“考虑人工智能接管编程工作的想法,紧接着是另一篇文章” GPT-3 不会接管你的编程工作
在推文的视频中,该模型将处理诸如“彩虹的每种颜色都有一个按钮”的提示,并正确地创建了 7 个按钮,每个按钮代表彩虹的一种颜色。
在大约 50 秒的时候,您会注意到模型生成了一个带有语法错误的代码。它实际上在创作者稍微调整之后工作了,这是相当令人惊奇的。然而,我不认为它会让程序员在不久的将来被淘汰。
虽然创建编程脚本可能不是 GPT-3 的最强领域,但一名大学生将继续展示该模型在何处可以取代人类。博客。
GPT-3 不擅长逻辑,所以励志的帖子可能是最好的,也许还有一些关于生产力的文章。(来源)
在他自己的博客中,利亚姆·波尔说他选择自助主题是因为“GPT 三号擅长创造触动情感的优美语言,而不是硬逻辑和理性思考。”
利亚姆创建了子堆栈页面 Adolos ,这是一个关于希腊欺骗之神 dolos 名字的巧妙的文字游戏。他为每篇文章定义了标题和介绍,并让模型根据它们创建内容。在做了一点语法和事实更正后,他发布了这些文章。
第一贴,感觉不毛之地?也许你应该停止过度思考。”,最终登上黑客新闻榜首。这是上述文章中的几段。
定义#1:创造性思维(CT)是用你的头脑想出现实中不存在或以前从未存在过的想法的行为。它是一种涉及逻辑和理性运用的精神活动形式。
定义#2:过度思考(OT)是试图提出别人已经思考过的想法的行为。OT 通常会产生不切实际、不可能甚至愚蠢的想法。
那么,这两个概念是如何相互联系的呢?嗯,如果你像我一样,那么你可能会发现自己有时两者都在做。你可能整天都在做一个项目,但是你仍然觉得你只是在走过场。这是因为你想太多了!
读到一半,我很难相信这不是人类写的。我读过 GPT-2 产生的一些文章,过一会儿就会跑题,但 GPT-3 不是这样。
这两段话泄露了我的秘密。
例如,如果你正在写一个关于沙漠中一个角色的故事,你画了这个角色的照片,你的大脑会建立一个联系,并给你一些想法,让这个角色在你的故事中接下来做什么。或者,如果你正在画一个故事中的人物,并写一首关于他们的感受的诗,你的大脑会建立联系,并给你一些如何更好地画出那个人物的想法。
…
例如,如果你正在写一个关于沙漠中一个角色的故事,你画了这个角色的一幅画,你可以写一首诗来描述这个角色在沙漠中的感受。
这些段落非常相似,我认为一个作家不可能在一篇文章中公然重复相同的段落。
然后我意识到。我已经知道文章是 GPT-3 写的。
如果我第一次读的时候没有这些信息,我可能会相信这真的是一个人类作家写的东西。重复是因为作者想在故事中加入更多的词。有道理,对吧?
一个特别挑剔的人在黑客新闻页面上评论说,这篇文章很可能是 GPT-3 写的。然而,他被否决了,因为评论侮辱了作者的能力。
黑客新闻页面评论截图(来源)
如果你深入阅读其他文章,你会发现一些有趣的摘录。这里有一个帖子的标题是“我从努力变得更有效率中学到的东西
我想过简单的生活。另一点营销引起了我的注意,这一次是一个好的副本,而不是一个坏的。引起我注意的是我真的读了它。我从中得到的是,我们不能把事情看得太严重。我们最大的头痛来自于把一切都放在心上。有一些关于远离流行文化的宣传,但是我不一定在乎这个信息。我不喜欢把外人的批评放在心上。我想沉浸在我喜欢的音乐中,不管他们在 MTV 上说些什么,或者让那些旧石器时代的饮食时尚见鬼去吧。我更喜欢在我生命中可以过简单生活的季节。
仔细一看,这些句子并不真正连贯。他们在一起没什么意义。然而,GPT-3 写的这些文章成功地唤起了你从阅读人类写的励志文章中获得的同样的“有动力”的感觉。
想象一下,如果利亚姆不承认使用 GPT-3 来创作这些文章。我认为读者要理解它还需要一段时间。
对于博客作者来说,这应该是一个值得关注的信号,尤其是那些专门写励志的、感觉良好的故事的人。
当你每天写一篇文章的时候,有的作家甚至每天发表 2 篇甚至更多(!),你迟早会没主意的。很多作家都求助于自助和生产力这个话题。也许因为它是最不需要努力的?你不需要为这类文章做研究或事实核查。
我们需要赞扬 GPT 3 在模仿作家方面的表现。它现在当然不能完全取代人类作家,但它可以作为一种工具来帮助作家写作或克服作家的障碍。
另一方面,我们也需要重新评估我们阅读并为之叫好的文章的质量。我并不是说写出这些乏味的励志文章完全是作者的错。如果你用最少的努力写了一篇关于生产力的文章,并且得到了和你花了一周时间写的东西一样的认可,你会怎么做?
此外,很多这些关于自助和生产力的文章感觉你以前在什么地方读过。我不确定这是因为大多数都是回收的文章,还是因为阅读它们给了我同样的,熟悉的情感。
目前的反馈循环需要停止,可以通过奖励更有意义的文章来解决,而不是在你已经读了三遍的旧帖子上打转。
学习机是一系列关于机器学习世界中发生的事情的故事,我觉得很有趣,可以分享一下。哦,有时也是关于机器学习的基础。关注我,定期获取新故事的更新。
数据科学家。我写的是 DS & ML。有时候。
chandraseta.medium.com](http://chandraseta.medium.com/membership)
一名 ML 工程师如何在找到工作之前与 50 多家公司进行沟通
原载于 采访查询博客
找一份数据科学的工作有多难?我喜欢与当前的数据科学家和机器学习工程师交谈,他们来自非传统背景,已经成功地在数据科学就业市场上导航。今天我写了一篇对 Jerry 的采访,Jerry 是一名前数据科学训练营和硕士毕业生,在获得目前的机器学习工程师工作之前,他经历了大量的面试。
你好!你是什么背景,怎么进入数据科学的?
大家好,我是美国银行的机器学习工程师 Jerry。我最初是作为一名数据分析师工作了几年,然后在纽黑文大学获得了数据科学的硕士学位,并与 genville 合作。我知道我想更多地进入机器学习领域,但在这个项目结束后很难获得面试机会。最终,在接受美国银行的邀请之前,我在丹佛野马队的分析团队实习。
我现在的角色更多的是软件工程,但是包括大量的数据知识。大量构建机器学习系统和基础设施意味着知道如何将工程效率应用于生产中的服务模型。
你的整体面试体验如何?你最终接受了多少次数据科学采访?
最后从 2019 年 4 月到 8 月面试了五个月。有些星期我只有一次面试,有些星期大约有 7-8 次面试。这是一个相当累人的过程,我想我最终跟 50 多家公司谈过。
我最终接受了这么多的采访,因为我觉得数据科学是一门很难学习的学科,而且我不知道应该关注什么。一些公司问了关于软件工程类结构和面向对象编程的问题,而其他公司则更关注统计。但我觉得我一般能通过 95%的招聘和招聘经理筛选,但只有 30%的技术筛选和带回家的挑战。
主要问题是,每次数据科学面试都非常不同。我参加了一个分析经理职位的面试,在去现场之前,我面试了六个人!我不得不与产品副总裁、招聘经理、总经理、工程师、数据科学家等交谈
“鉴于 SQL 中有许多不同的方法,即使你用一种方法来做,面试官有时也会要求你用一种更有效的方式来写。”
什么帮助你为面试做准备?
带回家的挑战和技术筛选最初真的很难。数据科学家是一个非常宽泛的术语,可以涵盖纯分析、机器学习、应用深度学习或更面向业务。我觉得因为每个职位都不一样,所以一开始就很难理解该期待什么。面试提问题库无疑帮助我看到了不同公司每个问题的共性,明确了如何有效地利用我的时间学习。
面试中的 SQL 问题也是我有一段时间的弱项。我总是在 Pandas 中做一些东西,并使用 SQL 来提取数据以在 Pandas 中操作。因此访谈查询解决方案对于理解如何思考和构建 SQL 问题非常有帮助。考虑到在 SQL 中有很多不同的方式来做事情,即使你用一种方式,面试官有时也会要求用更有效的方式来写。
但是最终面试是一件苦差事,练习是获得成功并为每次面试做好准备的最好方法。随着我做更多的采访和练习更多的问题,我变得更好了。
你想传授的最后一课是什么?
面试真是一件苦差事。尤其是如果你是新来的,没有很多经验。一旦你有了经验,那就不一样了,因为尽管我觉得我的技能相当相似,但因为我有一年额外的实习经验,我会更容易进入下一轮。
能够真正深入地谈论我参与的项目也确实有助于巩固我过去的经验。招聘经理想知道你能影响企业,让它变得更好。但是作为一个进入数据科学的新人,你没有太多的方式来展示这一技能组合,这就是为什么技术面试如此严格。许多公司更害怕假阳性而不是假阴性。
对数字的热情是如何将这位机械工程师变成了一位围棋大师的
与 Sudalai Rajkumar 的对话:Kaggle 双特级大师,H2O 大学的数据科学家。
有人说得对,一个人永远不应该寻求表扬,相反,让努力来证明自己。成功人士的基本特征之一是从不吹嘘他们的成功,而是不断学习。在数据科学领域,当我们谈到谦逊时,一个引起共鸣的名字是 Sudalai Rajkumar,他以谦逊的天性和分析能力而闻名。作为同事和他一起工作,每天学习新的东西,这确实是一种特权和绝对的荣誉。
在本期采访中,我将展示成功数据科学家的旅程,我将与 Sudalai Rajkumar,又名 SRK、 a Kaggle 竞赛和内核的大师、和数据科学家在 H2O.a i. Sudalai 完成了他在 PSG 技术学院的工程,然后继续在印度管理学院-班加罗尔获得了商业分析和情报的执行学位。
RK 在机器学习和数据科学方面拥有十年的经验。他在印度和国外都有大量的追随者,对全世界有抱负的数据科学家来说,他是一个巨大的鼓舞。除了在 Kaggle 的几个比赛中获得高排名之外,SRK 也因其深入的内核而闻名。事实上,他已经是 Kaggle 内核部分的前第一号人物。
SRK 在 Linkedin 上用一封漂亮的感谢信宣布了他在数据科学行业十年的结束。因此,有什么比这更好的时机来与他本人谈论他进入数据科学的旅程以及他对该领域新进入者的建议。
以下是我与苏达莱对话的摘录:
- 你有机械工程背景。向软件工程的过渡是如何发生的?
SRK :当我完成学位后,我收到了两份工作邀请——一份是在一家知名的机械工程公司,另一份是在一家创业分析公司。机械工程的工作对我来说是梦寐以求的,就像其他机械工程毕业生一样。然而,入职日期离毕业还有四个月,所以我决定接受另一份工作。
最初,我的想法是加入分析公司,以更多地了解公司和工作性质,因为他们的面试过程非常有趣。在这个过程中,我完全被在数据中寻找模式所吸引,尽管我对软件工程完全是个新手。我对数字的热情让我继续做那份工作,今天回头看,我非常高兴我做了那个决定。
- 你和 Kaggle 的幽会是如何开始的,是什么让你在你的一代宗师的旅程中一直保持动力?
SRK :我来自机械工程专业,没有受过软件工程或数据科学方面的正规教育。因此,我开始学习 MOOCs 来了解这些概念。我遇到了像随机森林,SVM 等算法。但是没有看到任何人在工作中使用它们。这促使我寻找途径来试验这些新算法,以便更好地理解它们。就这样我偶然发现了 Kaggle,开始了我的 Kaggle 之旅。
我想说,一旦我们开始做 Kaggle,它也是一种瘾,我也不例外。建立更好的模型和获得更好的排名的瘾有时会控制你。在多项比赛中有几次失败,但痴迷和激情让我坚持了下来。当然,这花费了很多下班后的私人时间,但是在这个过程中有大量的学习。
- 你如何决定参加哪些比赛?
SRK :在最初的日子里,我几乎参加了所有的比赛。我们可以从他们每个人身上学到新的东西。
我曾经一次至少做两个,因为当我在其中一个遇到障碍时,我会去另一个,几天后带着全新的心态回到第一个。这经常帮助我。
目前,我主要参加 NLP 比赛,我在其他比赛中并不活跃。
- 你通常如何处理一个难题?任何喜欢的 ML 资源(MOOCS,博客等。)有什么想分享的吗?
SRK :在临近比赛的时候,我会记住一些重要的方面:
- 我做的第一件事是为问题建立一个适当的交叉验证框架。
- 下一件事是构建一个简单的建模管道,以确保端到端的代码运行良好。
- 我阅读论坛,探索内核部分,以了解更多关于这个问题和其他人的观点。
- 我确保在探索性分析、阅读相关论文或文章以及特性工程上花费大量时间。
- 最后的步骤是关于建模和组装。
这是一场关于数据科学竞赛的优秀 课程 。除此之外,阅读过去的解决方案并尝试在正在进行的解决方案中实施一些想法也是很好的。我创建了 一个方便的内核 来帮助解决这个问题。
SRK 内核关于卡格尔竞赛的获奖方案
- 作为 H2O.ai 的数据科学家,你的角色是什么,在哪些具体领域工作?
2019 年纽约 H2O 世界期间,SRK 和 H2O.ai 的同事们在一起。
SRK :作为 H2O.ai 的数据科学家,我参与了无人驾驶 AI 的开发,这是一个自动化的机器学习平台,具体是在自然语言处理领域。我的职责是探索 NLP 领域的最新发展,并将它们集成到产品中。NLP 在过去的两年里经历了巨大的变化,所以我的工作很有趣,因为它涉及到赶上他们。
- 如果你要和 H2O.ai 的大师们组队,他们会是谁,为什么?
SRK:我们已经作为一个团队在 H2O 建立自动化机器学习平台😃
在 Kaggle 比赛中,当然是所有的比赛!到目前为止,我已经在 Kaggle 与 Rohan 、 Marios 、 Mark 和 Mathias 合作过,但没有与其他人合作过,所以我很乐意有机会在 H2O.ai 与其他 GM 合作,以学习更多新东西。
- 你在 H2O.ai 的专业工作中运用到的通过 Kaggle 学到的最好的东西有哪些?
SRK :结构化和逻辑思维是我从 Kaggle 身上学到的一些重要的东西。在数据科学领域,试图解决问题时很容易迷失方向。解决 Kaggle 问题帮助我发展了一个结构化的逻辑思维过程,并应用到我的工作中。
大多数时候,当一些新的技术或模型出现在 ML 领域时,它们首先在 Kaggle 比赛中进行实验,然后才成为主流。像 XGBoost 这样的模型,今天在社区中使用得更多,最初在 Kaggle 中广泛使用。因此,我们可以及早发现这些趋势,并保持自我更新。
模型泛化和特征工程技术是从 Kaggle 学到的两个更重要的知识,它们在专业工作中帮助了我。
- 数据科学领域正在迅速发展。你是如何设法跟上所有最新发展的?
SRK:博客和社交媒体是我了解最新发展的两种方式。我定期关注的一些博客有Analytics vid hya走向数据科学KD nuggets。这些博客帮助我详细理解这些概念。**
SRK 在他的 TED 演讲中解释了自然语言处理的关键方面。
为了立即跟上最新的趋势,我在 Twitter 上关注了许多数据科学家和 ML 研究人员。ML 社区在 twitter 上非常活跃。每当有新的东西出现,无论是一篇论文还是一个项目,Twitter 上通常都会有很多关于它的活动。
- 你想在 ML 中应用你的专业知识吗?
SRK :我希望把机器学习应用到有助于社会进步的问题上。例如,我最近收集了发生干旱时钦奈市 (我居住的城市)的 水数据,以了解不同水库的水位。一个简单的预测模型将有助于提前预测病情并制定相应的计划。这些项目将会给人们带来巨大的好处,并有助于改善社会。
探险解渴SRK
我感兴趣的另一个领域是将自然语言处理技术应用于印度的方言。英文版的 NLP 资源很多,白话版的资源不多。
- 对刚刚开始或希望开始数据科学之旅的数据科学有志者有什么建议吗?
SRK :首先,数据科学爱好者必须明白这个领域是他们真正感兴趣的,还是仅仅因为对它的大肆宣传而想与之相关联。这是一个快速发展的领域,需要不断的学习,所以只有热情才能帮助长期持续下去。
一旦人们从课程或书籍中理解了机器学习的基本概念,关键的一步就是获得实践知识。有多种方式可以做到这一点,包括参加数据科学黑客马拉松,为开源项目做贡献,写博客,实习等。你可以选择上述一项或几项技能来磨练和展示自己的才能。
SRK 的旅程鼓舞了我们所有人。然而,从这个讨论中得出的一个重要结论是,认识到你的兴趣是否真正在于数据科学是至关重要的。这个领域是由激情驱动的,需要大量的自我激励和学习。不要仅仅因为周围的大肆宣传而选择这个领域,因为这可能很容易失败。想一想为什么你首先会想成为一名数据科学家,以及你将如何把这些技能应用到长期工作中。
- Bojan Tunguz:从学术界到 Kaggle:物理学家如何在数据科学中找到爱情
- Rohan Rao:数据科学家从数独到 Kaggle 的旅程
- Shivam Bansal:数据科学家,负责 Kaggle 上的“数据科学为善”竞赛
- Yauhen Babakhin:认识一下 Yauhen:第一位也是唯一一位来自白俄罗斯的围棋大师。
本文原载于 H2O.ai 的博客网站 。