关于数据科学:数据科学在文本分析中的应用-中英文-NLP上

在《后疫情时代,数据迷信赋能游览行业服务质量晋升》这篇博文中,咱们介绍了猫途鹰文本剖析我的项目的背景和解决方案,并展现了最终的剖析后果。接下来,对于中英文 NLP 感兴趣的读者,咱们会为大家具体解说数据采集、数据入库、数据清理和数据建模步骤中波及的原理和代码实现。因为篇幅的限度,上篇会重点解说数据采集、数据入库和数据清理这三个步骤,下篇则会解说数据建模的残缺流程。 数据采集1. 抓取工具剖析网页内容抓取是从互联网上获取数据的形式之一。对于应用 Python 进行网页抓取的开发者,比拟支流的工具有以下几种: Beautiful SoupBeautiful Soup 是几种工具中最容易上手的网页抓取库,它能够疾速帮忙开发者从 HTML 或 XML 格局的文件中获取数据。在这个过程中,Beautiful Soup 会肯定水平上读取这类文件的数据结构,并在此基础上提供许多与查找和获取数据内容相干的方程。除此之外,Beautiful Soup 欠缺、易于了解的文档和沉闷的社区使得开发者不仅能够疾速上手,也能疾速精通,并灵活运用于开发者本人的利用当中。 不过正因为这些工作个性,相较于其余库而言,Beautiful Soup也有比拟显著的缺点。首先,Beautiful Soup 须要依赖其余 Python库(如 Requests)能力向对象服务器发送申请,实现网页内容的抓取;也须要依赖其余 Python 解析器(如 html.parser)来解析抓取的内容。其次,因为Beautiful Soup须要提前读取和了解整个文件的数据框架以便之后内容的查找,从文件读取速度的角度来看,Beautiful Soup 绝对较慢。在许多网页信息抓取的过程中,须要的信息可能只占一小部分,这样的读取步骤并不是必须的。 ScrapyScrapy 是十分受欢迎的开源网页抓取库之一,它最突出的个性是抓取速度快,又因为它基于 Twisted 异步网络框架,用户发送的申请是以无阻塞机制发送给服务器的,比阻塞机制更灵便,也更节俭资源。因而,Scrapy 领有了以下这些个性: 对于 HTML 类型网页,应用XPath或者CSS表述获取数据的反对可运行于多种环境,不仅仅局限于 Python。Linux、Windows、Mac 等零碎都能够应用 Scrapy 库扩展性强速度和效率较高须要的内存、CPU 资源较少纵然 Scrapy 是功能强大的网页抓取库,也有相干的社区反对,但生涩难懂的文档使许多开发者望而生畏,上手比拟难。 SeleniumSelenium 的起源是为了测试网页应用程序而开发的,它获取网页内容的形式与其余库截然不同。Selenium 在结构设计上是通过自动化网页操作来获取网页返回的后果,和 Java 的兼容性很好,也能够轻松应答 AJAX 和 PJAX 申请。和 Beautiful Soup 类似,Selenium 的上手绝对简略,但与其余库相比,它最大的劣势是能够解决在网页抓取过程中呈现的须要文本输出能力获取信息、或者是弹出页面等这种须要用户在浏览器中有染指动作的状况。这样的个性使得开发者对网页抓取的步骤更加灵便,Selenium 也因而成为了最风行的网页抓取库之一。 因为在获取景点评论的过程中须要应答搜寻栏输出、弹出页面和翻页等状况,在本我的项目中,咱们会应用 Selenium 进行网页文本数据的抓取。 2. 网页数据和构造的初步理解各个网站在开发的过程中都有本人独特的构造和逻辑。同样是基于 HTML 的网页,即便 UI 雷同,背地的层级关系都可能天壤之别。这意味着理清网页抓取的逻辑不仅要理解指标网页的个性,也要对将来同一个网址的更新换代、同类型其余平台的网页个性有所理解,通过比拟类似的局部整顿出一个绝对灵便的抓取逻辑。 ...

March 22, 2023 · 4 min · jiezi

关于数据科学:后疫情时代数据科学赋能旅游行业服务质量提升

通宵灯火人如织,一派歌声喜欲狂。新冠 “乙类乙管” 的施行加上春节假期的到来,使得人们的出行激情空前低落。依据中国游览研究院的考察显示,23 年春节假期全国国内游览出游达到了 3.08 亿人次,同比增长 23.1%,期间游览支出达 3758.43 亿元。以杭州西湖景区为例,该景区在春节期间款待游客 292.86 万人次,数量近上年的 4 倍。各大景区热闹非凡、游客川流不息的新闻也成为了人们对 23 年春节独特的回顾。 因为先前的新冠风控,许多景区在财政和园区治理方面经验了难熬的两年。在游客反馈方面,因为人次过少,景区非常容易陷入无奈对游客需要进行精确判断的窘境。理解游客的实在感触和评估,并依据这些信息对景区硬件、软件、治理等进行降级,是景区应答暴涨的游客需要和期待最无效的解决方案之一。 面对后疫情时代下,游览行业逐步迈向复苏,景区该如何把握机会,通过晋升服务来满足游客需要呢?基于以上背景,咱们决定建设这样一个实验性我的项目,让数据来通知大家答案。 我的项目背景与构造寰球旅游业权威钻研机构 PhoCusWright 指出,公众对于景区的点评值得被加以分析与使用,能够为游览企业带来微小的价值。很多景区治理部门因为对游客需要的误会、信息技术的落后、或是相干反馈部门的缺失,对于网络上的评论并未做到无效的收集与剖析。在进入大数据时代后,一些适应了新型数据平台的景区治理部门通过在网络上收集与景区相干的评论,并对这些数据进一步剖析来重点调整、降级景区中让游客在意的局部。其中就波及了对各大游览点评网站中景点评论的演绎总结,包含对游客类别的统计和评论文本信息的建模与剖析。 游览网站的品种泛滥,但商业价值的侧重点会有所不同。猫途鹰(TripAdvisor)是一款侧重于记录用户旅行数据的国际性游览网站,领有着数十亿条国内外实在旅行者的点评和倡议。许多游客在出行前会在该平台查问目的地酒店、餐厅和景点的相干点评,多而全的点评信息不仅能帮忙旅客做出出游决定,也是景区收集游客反馈的好渠道。 本我的项目以热门景点 “上海外滩” 为例,采集猫途鹰网站上与该景点相干的评论,查看随着工夫与出行政策的变动,国内外游客在出游形式和态度上的转变,联合 NLP(自然语言解决)技术,开掘评论中值得借鉴的意见和倡议,寻找游客对景点需要的趋势。总体的解决方案构造如下: 确定数据起源数据采集数据入库数据荡涤探索性数据分析数据建模数据洞察我的项目步骤解析1. 确定数据起源首先,咱们确定应用来自猫途鹰中文版网站(www.tripadvisor.cn)和国际版网站(www.tripadvisor.com)截至 2023 年 2 月 20 日的数据。重点关注旅游者对 “上海外滩” 这个景点的中英文评论,收集来自世界各地的评论有助于晋升景区的剖析维度,让决策更具包容性,这也是咱们抉择猫途鹰这个国际化游览平台的起因。 2. 数据采集在对网页抓取工具做了深度评估、对网页数据和构造的初步理解后,咱们决定应用 Selenium 进行网页文本数据的抓取。依据评论格局的特点,咱们能够抓取的信息如下: 用户用户所在地评分点评题目到访日期旅行类型具体点评撰写日期留神,对于中文评论的抓取,咱们把用户所在地锁定至城市,而对于英文评论,用户所在地的抓取会具体至国家和城市。最终,咱们执行的网页抓取程序大抵能够分成两个步骤: 第一步:发送申请,应用 Selenium 操作浏览器找到指定景点的评论页面第二步:进入评论页面,抓取评论数据 因为中文评论的数量远少于英文评论,为了保持数据总量的一致性,咱们采集了中文评论的全量数据(1710 条,时间跨度 2009-2022 年)和英文评论的局部数据(2000 条,时间跨度 2018-2022 年)。如果大家想从残缺的工夫线维度比照中英文评论,能够自行获取更多英文评论数据,在本我的项目中咱们就不多加赘述了。 3. 数据入库在采集结束评论数据后,咱们能够将数据存进数据库,以便数据分享,进行下一步的剖析与建模。以 PieCloudDB Database 为例,咱们能够应用 Python 的 Postgres SQL 驱动与 PieCloudDB 进行连贯。在《PieCloudDB Database 云上商业智能的最佳实际》中,咱们具体介绍了 PieCloudDB 的内部连贯形式,如有需要请参考这篇技术博文。 咱们实现数据入库的形式是,在获取了评论数据并整合为 Pandas DataFrame 构造后,借助 SQLAlchemy 引擎将该数据通过 psycopg2 上传至数据库。因为中英文的文本剖析技巧略有不同,所以咱们将中英文数据寄存在两张表中。最终,咱们能够在 PieCloudDB 中查看如下两张源数据表构造: ...

February 28, 2023 · 3 min · jiezi

关于数据科学:数据科学在量化金融中的应用指数预测下

回顾上篇,咱们对股票指数数据进行了收集、探索性剖析和预处理。接下来,本篇会重点介绍特色工程、模型抉择和训练、模型评估和模型预测的具体过程,并对预测后果进行剖析总结。 特色工程在正式建模之前,咱们须要对数据再进行一些高级解决 — 特色工程,从而保障每个变量在模型训练中的公平性。依据现有数据的特点,咱们执行的特色工程流程大抵有以下三个步骤: 解决缺失值并提取所需变量数据标准化解决分类变量1. 解决缺失值并提取所需变量首先,咱们须要剔除蕴含缺失值的行,并只保留须要的变量 x_input,为下一步特色工程做筹备。 x_input = (df_model.dropna()[['Year','Month','Day','Weekday','seasonality','sign_t_1','t_1_PricePctDelta','t_2_PricePctDelta','t_1_VolumeDelta']].reset_index(drop=True))x_input.head(10) 而后,再将指标预测列 y 从数据中提取进去。 y = df_model.dropna().reset_index(drop=True)['AdjPricePctDelta']2. 数据标准化因为价格百分比差与交易量差在数值上有很大差距,如果不标准化数据,可能导致模型对某一个变量有倾向性。为了均衡各个变量对于模型的影响,咱们须要调整除分类变量以外的数据,使它们的数值大小绝对近似。Python 提供了多种数据标准化的工具,其中 sklearn 的 StandardScaler 模块比拟罕用。数据标准化的办法有多种,咱们抉择的是基于均值和标准差的标准化算法。这里,大家能够依据对数据个性的了解和模型类型的不同来决定应用哪种算法。比方对于树形模型来说,标准化不是必要步骤。 scaler = StandardScaler()x = x_input.copy()x[['t_1_PricePctDelta','t_2_PricePctDelta','t_1_VolumeDelta']]=scaler.fit_transform(x[['t_1_PricePctDelta','t_2_PricePctDelta','t_1_VolumeDelta']])3. 解决分类变量最常见的分类变量解决办法之一是 one-hot encoding。对于高基数的分类变量,通过编码解决后,变量数量减少,大家能够思考通过降维或更高阶的算法来升高计算压力。 x_mod = pd.get_dummies(data=x, columns=['Year','Month','Day','Weekday','seasonality'])x_mod.columns x_mod.shape 至此,咱们实现了特色工程的全副步骤,解决后的数据就能够进入模型训练环节了。 模型抉择和训练首先,咱们须要拆分训练集和测试集。对于不须要思考记录程序的数据,能够随机选取一部分数据作为训练集,剩下的局部作为测试集。而对于工夫序列数据来说,记录之间的程序是须要思考的,比方咱们想要预测 2 月份的价格变动,那么模型就不能接触 2 月份当前的价格,免得数据泄露。因为股票指数数据为工夫序列,咱们将工夫序列前 75% 的数据设为训练数据,后 25% 的数据设为测试数据。 模型抉择在模型抉择阶段,咱们会依据数据的特点,初步确定模型方向,并抉择适合的模型评估指标。因为变量中蕴含历史价格和交易量,且这些变量的相关性过高(high correlation),以线性模型为根底的各类回归模型并不适宜指标数据。因而,咱们模型尝试的重心将放在集成办法(ensemble method),以这类模型为主。在训练过程中,咱们须要酌情思考,抉择适合的指标来评估模型体现。对于回归预测模型而言,比拟风行的抉择是 MSE(Mean Squared Error)。而对于股票指数数据来说,因为其工夫序列的个性,咱们在 RMSE 的根底上又抉择了 MAPE(Mean Absolute Percentage Error),一种绝对度量,以百分比为单位。比起传统的 MSE,它不受数据大小的影响,数值放弃在 0-100 之间。因而,咱们将 MAPE 作为次要的模型评估指标。模型训练在模型训练阶段,所有的候选模型将以默认参数进行训练,咱们依据 MAPE 的值来判断最适宜进一步细节训练的模型类型。咱们尝试了包含线性回归、随机森林等多种模型算法,并将经过训练集训练的各模型在测试集中的模型体现以字典的模式打印返回。模型评估通过运行以下方程,咱们能够依据预测差值(MAPE)的大小对各模型的体现进行排列。大家也能够摸索更多种不同的模型,依据评估指标的高下择优选取模型做后续微调。 trail_result = ensemble_method_reg_trails(x_train, y_train, x_test, y_test) ...

January 12, 2023 · 2 min · jiezi

关于数据科学:数据科学在量化金融中的应用指数预测上

自 2018 年末以来,寰球金融根本盘由晚期的稳步回升变得起伏不定。因为投资者对市场走向和将来瞻望的不确定,这样的市场情绪带动着大盘和指数起起伏伏。同时中美贸易战给批发带来的微小关税压力让市场情绪再度低迷;2020 年初,新冠肺炎疫情在寰球肆虐蔓延,造成医疗资源缓和,疫情防控措施使商品和人员流动速度减慢,多地商店开业甚至开张,大大影响了人们的经济生存,进一步导致寰球各地股票市场呈现熔断甚至跌停的情况。面对动荡的金融市场,政府和金融监管机构推广了各式各样的政策以应答疫情造成的影响,稳住经济与股票根本盘。 对于许多金融从业者而言,市场的动荡意味着新的投资时机,而 2008 年金融危机的教训也时刻揭示着人们,时机背地往往随同着微小的危险。驰名的《巴塞尔协定 III》就是在应答寰球金融危机、强化金融监管的背景下应运而生的,它也是现阶段被宽泛使用于各大金融机构的寰球金融监管规范之一。如何辨认危险、保障资产平安并放弃其相应的流动性始终都是风险管理中重要的组成部分。在股票市场的风险管理中,金融从业者须要先查看价格变动是否在预期范畴内,并判断这样的变动是由零碎危险还是政策变动或重大事件所产生。如非零碎危险,金融从业者则须要在对政策或重大事件充沛的理解后,决定是否须要调整当下的策略,买入或发售相应的资产来保障机构金融层面的平安。判断零碎危险的办法有多种,其中较为风行的办法是通过历史价格信息来预测将来价格,并比拟实在价格与预测后果的差距。在本篇中,咱们将应用这样的办法进行股价预测,并与实在价格进行比照。 解决方案构造为了实现对历史数据进行建模来预测将来价格,本篇采纳如下构造的解决方案,同时大部分数据迷信的我的项目也都能够应用相似的构造来实现: 确定预测指标数据收集探索性数据分析数据预处理特色工程模型抉择和训练模型评估模型预测确定预测指标在股票市场中,稳定较大的股票不占多数。为理解市场情况,金融从业人员会偏向于钻研剖析股票指数而非单个股票的价格。因为指数绝对于单个股票来说更稳固,也更利于精准地建模。指数通常由多种股票形成,个别反映市场绩效的是广基指数,如道琼斯指数、标普 500 指数、日经指数、恒生指数等。这样的指数既能够反映出股票根本盘情况,又能够反映出投资人对经济现况的敏感度。在本篇中,咱们抉择的指标预测指数是标普 500 指数,是寰球最具标志性的追踪美国高市值公司的股票指数之一。 数据收集收集金融数据的平台泛滥,其中像 Bloomberg、Qliq、Quandl 这样的国外市场平台,抑或是如同花顺、万德这样的国内平台都受到公众的青睐。大部分企业为了保证数据的准确性、安全性和时效性,在生产环境下会应用成熟的免费平台。在本篇中,咱们应用的是 Yahoo Finance,一个收费的公开金融数据平台,它不仅蕴含了大部分公开股票的实时数据,还提供了 Python API,能够通过股票代码和工夫区间间接查问历史价格。 import yfinance as yf df_sp = yf.download('^GSPC',start="2012-11-01",end="2022-11-01") Pandas 数据集 “df_sp” 蕴含了从 2012 年 11 月 1 日至 2022 年 10 月 31 日十年以来的标普 500 指数数据,记录了每个日期所对应的开市价格、最高价格、最低价格、闭市价格、闭市调整价格和交易量。  探索性数据分析在收集完须要的数据后,首先能够查看数据集中可能存在的空缺记录和须要调整的字段。咱们应用以下函数来理解数据集中蕴含多少条记录、是否有空缺值以及每个字段所对应的数据类型。 df_sp.info() 能够看到,数据集中没有须要解决的空缺值,并且每个字段的类型都是对立的。除日期以外(Python Datetime 类型格局),其余字段都是数字类型。价格相干的都为浮点数,交易量相干的为整数。接下来,咱们通过以下函数查看数据的统计类信息。 df_sp.describe() 能够看到,指数数据都是负数,大部分以千为单位。惟一在单位上与其余列有所区别的是交易量数据。交易量的相对数值与价格相比相差微小,为了更有可比性,咱们须要调整交易量的相对数值大小。在本步骤中,咱们抉择先将交易量除以 1000000,使其变成以百万为单位,那么在数值上,交易量数值大小放大至千,与价格类似。  初步剖析数据后,咱们能够将价格信息的工夫序列可视化,更加直观地理解价格趋势。  通过图像,咱们发现开市、闭市、最高、最低和闭市调整的价格在趋势上十分类似;交易量和价格之间也有肯定的分割。咱们须要对交易量和价格做进一步的剖析来明确两者之间的关系。这里,咱们应用相关性矩阵(correlation matrix)来钻研变量之间的关系。  由此能够看出,交易量与价格之间没有十分高的相关性,但这并不能证实交易量不应该在价格预测中被思考。从另一个角度来说,各价格变量之间的相关性十分高,咱们只需筛选其中一个(闭市调整价格)进行预测即可。在下一步中,咱们只保留须要用到的信息即可。  df = df_sp[['Adj Close','Volume_in_M']] ...

January 10, 2023 · 1 min · jiezi

关于数据科学:数据科学的起源与发展

本文由 PieCloudDB Database 社区成员美国南加州大学陈振宇参加奉献。  1. 数据迷信的起源现如今,当人们被问到什么学科最火爆,就业率最高时,” 数据迷信” 想必肯定是其中的一个答案。《哈佛商业评论》曾一度将 “数据科学家” 这一职业评为 21 世纪最性感的工作 (“Data Scientist: The sexiest job of the 21th century” - Harvard Business Review)。近年来,随着可用的数据量日益激增,数据挖掘和剖析给企业带来了微小的经济效应,数据迷信畛域也失去了蓬勃的倒退。各行各业掀起了对数据科学家的招聘浪潮,越来越多的大学设立了数据迷信相干学科来满足社会需要。在数据迷信成立之前,数据钻研始终都是学术统计学畛域的工作,通过数据建模来对某种景象进行推论。随着数据的倒退,越来越多的人发现数据自身的价值,通过对数据的剖析和利用,咱们能够解决许多生存中的理论问题,而不仅仅是停留在学术实践的钻研。第一个提出对传统统计学进行改革的吹哨人是 John W. Tukey,他发表的文章《The Future of Data Analysis》始终被人们看做是数据迷信的起源。 2. 数据分析的将来John W. Tukey 是 20 世纪美国驰名的统计学家。早在六十多年前,他就曾呐喊学术统计学家们缩小对统计实践的关注,转而重视统计学的理论利用,其中最重要的局部就是对数据的解决和剖析。1962 年,他发表的《The Future of Data Analysis》文章震惊了过后的统计学界。他提出了数据分析(Data Analysis)这一新迷信和其将来倒退的可能性,并预言冲破数理统计学边界的数据时代将会到来。在文章中,他指出数据分析的目标是通过对数据的收集、解决和剖析来学习数据中的信息,解决咱们生存中所遇到的理论问题。《The Future of Data Analysis》这篇文章为将来数据迷信的倒退奠定了根底。John W. Tukey 对该畛域的趣味与他的人生经验非亲非故。1939 年,Tukey 顺利地取得普林斯顿大学数学硕士学位和博士学位。在研究生期间,他次要从事数学方面的钻研工作。然而随着二战的到来,他开始关注解决国家所面临的理论问题。1941 年 5 月,Tukey 退出了普林斯顿大学设立的火控研究室 (Fire Control Research Office)。在研究室工作期间,Tukey 与工程师 Charlie Winsor 结识,并与多位统计学家深入探讨。最终通过数据分析,Tukey 和他的团队帮助美国在二战期间优化了其武器管理系统,他也因而对这种数学模式产生了浓重的趣味。  3. 突破传统统计学的边界在 John W. Tukey 发表了《The Future of Data Analysis》之后的几十年里,数据迷信畛域并没有设想中那般疾速地倒退,其次要的起因有 3 点: ...

November 24, 2022 · 2 min · jiezi

关于数据科学:ApacheCN-数据科学译文集-20211109-更新

计算与推断思维 一、数据迷信二、因果和试验三、Python 编程四、数据类型五、表格六、可视化七、函数和表格八、随机性九、教训散布十、假设检验十一、预计十二、为什么均值重要十三、预测十四、回归的推断十五、分类十六、比拟两个样本十七、更新预测利用 Python 进行数据分析 · 第 2 版 第 1 章 筹备工作第 2 章 Python 语法根底,IPython 和 Jupyter 笔记本第 3 章 Python 的数据结构、函数和文件第 4 章 NumPy 根底:数组和向量计算第 5 章 pandas 入门第 6 章 数据加载、存储与文件格式第 7 章 数据荡涤和筹备第 8 章 数据规整:聚合、合并和重塑第 9 章 绘图和可视化第 10 章 数据聚合与分组运算第 11 章 工夫序列第 12 章 pandas 高级利用第 13 章 Python 建模库介绍第 14 章 数据分析案例附录 A NumPy 高级利用附录 B 更多对于 IPython 的内容Python 自然语言解决 第二版 ...

November 13, 2021 · 2 min · jiezi

关于数据科学:小码匠数据科学之旅猿门又多一枚女生

失败 老码农:有个数学问题,看看你会吗? 小码匠:(一听数学问题,就来劲)快说啥问题? 老码农:一个1到99之间的数字,你有6次机会,而后猜中有奖。 小码匠:猜中奖啥? 老码农:冰激凌! 小码匠:哈,这还不简略,我自认为我的命中率还是很高的。 老码农:小码匠同学,走起,我等你翻车的那一刻! import randomsecret = random.randint(1, 99)guess = 0tries = 0print("啊!我是可怕的海盗罗伯茨,我有一个机密!是一个1到99之间的数字。你有6次机会.")while guess != secret and tries < 6: guess = int(input("你猜是哪个数字?")) if guess < secret: print("太低了!从新猜!") elif guess > secret: print("太高了!从新猜!") tries = tries + 1if guess == secret: print("啊,你猜到了!运气真好,发现了我的机密!")else: print("别再猜了!祝你下次好运,伙计!") print("机密号码是", secret)老码农点了一下运行键,而后发表,小码匠的猜数挑战,正式开始! 小码匠:只猜了两次就猜中了,我厉害吧。 老码农:你……你这不算,你这根本就是走了大运嘛! 老码农:有本事你再来一次! 小码匠:来就来,谁怕谁,哼! 小码匠:啊这…… 老码农:(同病相怜)看,你翻车了吧。 小码匠:这……这不算,这只是一个小失误,我下一次肯定能猜出来!(满脸自信) 小码匠:看,我说到做到,猜出来了。 老码农:(这小家伙,居然能无师自通,我肯定要拉她“入猿门”) 老码农:哎呀,你咋这么厉害啊,你咋猜到的呀,教教我呗。 小码匠:这可是我的机密,谁要通知你啊,哼!我去吃冰激凌了。。。 中招 老码农:来,给你玩个好玩的。(滑雪者游戏) 小码匠:我先试试,你去干你的事吧! 10分钟后…… 老码农走过去,说:喂,别玩啦。 ...

October 20, 2021 · 1 min · jiezi

关于数据科学:一年数十万次实验背后的架构与数据科学

导读:人工智能时代,A/B Test试验是数据驱动型组织的外围依赖。一套好的试验零碎能撑持产品疾速迭代,用数据谈话,辅助疾速做出正确产品决策。那么如何保障几百上千人的团队在超简单零碎中放弃高效迭代?如何在超大规模数据量下疾速产出报表?如何升高抽样稳定尽快产出相信的数据论断?本文次要从以上几个方面探讨A/B Test平台在理论生产环境的具体实际和思考。全文预计浏览工夫 9分钟。

September 13, 2021 · 1 min · jiezi

关于数据科学:Anaconda-发布-2021-数据科学报告Python-最流行开源得到重视自动化受期待

近期,Anaconda 公布了 2021 State of Data Science 报告。该报告考察了超过 140 个国家的 4200 多名应用数据迷信和机器学习工具的受访者,旨在探寻数据迷信畛域的倒退状况,以及在商业环境和学术机构中的整体趋势。 以下是该报告的次要见解。 大多数组织器重开源考察显示,大多数受访者(65%)称其雇主通过减少对开源我的项目开发的资金投入来激励员工为开源我的项目做奉献。通过应用开源软件,组织可能节俭大量的工夫和资源。 最受欢迎的语言:Python考察显示 Python 是往年最风行的编程语言,63% 的受访者称总是或频繁应用 Python。此外,71% 的教育工作者教 Python,88% 承受 Python 教学的学生筹备进入数据迷信 / 机器学习畛域。也就是说,对于数据科学家、研究者、学生和业余人员而言,Python 的受欢迎水平逐步增长。 除了 Python 以外,SQL、R、JavaScript 也很受欢迎。 自动化受欢迎过后下新闻都在探讨自动化正在接管并将最终取代人类的主题时,数据迷信畛域并未对此恐慌。考察显示,自动化在数据迷信畛域受到欢送,从业者并未将其视作竞争者,而是补充工具。53% 的受访者心愿看到数据迷信畛域呈现更多自动化和 AutoML 利用,仅有 4% 的受访者放心自动化对数据迷信畛域的影响。 新冠疫情期间,数据迷信投资未呈现显著降落COVID-19 对简直所有行业都有影响,包含医疗、政府、金融机构等等。它们都须要寻找适合的形式解决数据,找到新问题的解决方案。 在商业组织方面,50% 的受访者示意新冠疫情期间其所在组织在数据迷信方面的投资有所增加或者持平,37% 的受访者示意这方面投资有所降落。 在被问及对于商业决策的参加水平时,14% 的受访者示意 “所有” 决策依赖于他们或其团队的见解,39% 的受访者示意 “许多” 商业决策依赖他们。Anaconda 示意,数据科学家的价值在组织中失去认可,这或者是数据迷信畛域未呈现投资急剧缩小状况的起因。 报告地址:https://www.anaconda.com/stat...

August 2, 2021 · 1 min · jiezi

从机械转行数据科学吐血整理了这些白嫖的学习网站

作者:东哥起飞Python数据科学大家好,我是东哥。 前方高能,准备开启收藏夹吃灰模式。 本篇东哥分享几个数据科学入门的学习网站,全部免费资源,且内容优质,是小白入门的不二选择。东哥当年从机械转行也从这些学习网站收获很多。 下面开始进入正题。 一、Kaggle什么是Kaggle?kaggle是全球最先也是目前规模最大的数据科学竞赛组织了。之所以这么受欢迎,是因为很多大的公司奉献出自家真实的数据给kaggle,提出真实业务场景面临的痛点,需要数据科学上的解决方案。 我个人觉得是非常有意思的,因为很多人苦学理论,正愁着没有真实数据去实践,有了这个机会,不论方案是否可以排上名次,都是宝贵的实践经验啊。 当然,作为方案最优的前三名可以得到一笔丰厚的报酬,几千美元到几万美元不等,这更加刺激广大数据爱好者了。竞赛已经有上百场了,各种场景和需求,并且随着需求增多,竞赛也在不断增加。 Kaggle上有什么?原来的kaggle只有单一的竞赛,现在的kaggle已经不只是竞赛这么简单了。它还有丰富的社区、免费的学习课程、在线实操的环境。 下面是一在线操作提交模型的环境,非常奈斯。 各路神仙在社区共享自己的kernels和源代码,是个非常好的交流学习机会,有兴趣可以自己去看。这里主要说下免费的学习课程,下面是地址。 https://www.kaggle.com/learn/... 学习列表中有python、机器学习、深度学习、可视化、pandas数据处理、SqL入门和进阶等等。打开每个学习项目,内容非常丰富,虽是英文我相信对于有心的人都不是问题了。 二、CourseraCoursera很多朋友应该熟悉,吴恩达的机器学习课程最早就是从这里开始分享的。里面有各个名校大学的公开课,很多都是免费公开的课程,听课是免费的,但学完后认证证书需要付费。 这里分享几个东哥收藏的宝藏课程,每一个都很经典,好评无数。 1.机器学习 (Andrew Ng / 斯坦福大学) https://www.coursera.org/lear...2.专业数据科学(10门课/JHU) https://www.coursera.org/spec...3.数据科学实战(5门课/JHU) https://www.coursera.org/spec...4.专业数据挖掘(6门课/伊利诺伊大学) https://www.coursera.org/spec...5.数据科学硕士(8门课/伊利诺伊大学圣巴巴拉分校) https://www.coursera.org/degr...6.数据科学应用硕士(密歇根大学) https://www.coursera.org/degr...三、UdacityUdacity(优达学成)是个美国的付费类培训机构,内容涉及所有编程和计算机类的课程,是歪果仁拍的视频课程,质量很高,但收费很贵。 仔细观察,其实也有很多免费的课程供学习的,东哥把收藏的存货也拿出来分享下。 1.数据科学导论总共10个章节,以titanic和NewYork Subway data项目为例介绍数据分析、可视化、数据处理、Mapreduce大数据。 https://www.udacity.com/cours...2.数据分析导论 https://www.udacity.com/cours...3.数据可视化分析这个课程是基于R语言的,介绍了R语言基础、逻辑回归、线性回归、正则化等内容。 https://www.udacity.com/cours...4.使用SQL做数据分析 https://www.udacity.com/cours...5. 统计推理入门主要介绍推断性统计的知识,比如各种检验,假设检验、t检验、卡方检验、ANOVA方差分析、回归等等。 https://www.udacity.com/cours...当然,除了这些还有很多付费的,感兴趣可自行查找,本篇只谈免费。 四、其它社区和博客下面是几个很好的国外数据科学社区和个人博客,内容不如前面三个学习网站有组织和条条理,但是有很多优秀的文章分享也可以作为参考学习。 1. 面向数据科学https://towardsdatascience.com/这里着重说下这个社区,专门的数据科学学习平台,里面都是一些国外爱好者的分享,涵盖了data science、machine learning、deep learning、visualization、programming等,缺点是需要特殊工具才能上去,用谷歌访问助手也可以。 2. 方差解释http://varianceexplained.org/3. 成为一名数据科学家https://www.becomingadatascie...4. Mark Meloonhttps://www.markmeloon.com/5. Julia Silgehttps://juliasilge.com/blog/以上就是东哥分享的一些免费课程资源,资源多少不是关键,关键的是迈开第一步,深入进去开始学习。 先分享这些,如果觉得有帮助,还请多分享和点个赞。 欢迎大家关注我的原创微信公众号 Python数据科学,专注于写基于Python的数据算法、机器学习、深度学习硬核干货。

June 20, 2020 · 1 min · jiezi

2019年十大高薪技能您的专业在里头吗

作者 | GreyCampus 来源 | 网络大数据随着科技的不断进步,工业世界的“饥饿游戏”越演越烈,如何始终在市场保有竞争力? 是的,快速获得新兴行业知识技能的人在一定时间内将会更容易成功。但是,新兴行业适中的改变,在前进。 所以要养成提高技能和保持竞争力的习惯,随着新的行业知识的出现,不断提高自己的技能。 据领英介绍,以下是2019年最受欢迎的新兴行业技能: 1.云计算云计算是一种在internet上可用的数据中心。如今,人们的生活和工作有离不开互联网,互联网服务依赖于云计算。全球可获得的云计算职位空缺数量为101,913个。2018年的工资中位数为146,350美元。云产业的收入预计在两年内达到3000亿美元。 最受欢迎的云计算技能是: Amazon Web Services (AWS)LinuxSoftware developmentJavaDevOpsDockerInfrastructure as a Service (IaaS)2.人工智能人工智能正在兴起并得到越来越多的应用。它主要吸引了需要高度开发技术的应用程序的使用。人工智能赋予机器像人类一样工作的能力。 我们可以把人工智能描述成具有思考、推理和自我修正能力的机器智能。人工智能目前在语音识别和聊天机器人中应用最多。 到2019年底,人工智能预计将创造约200万个职位。虽然人工智能领域将涵盖各个领域,但卫生、教育和公共事业等行业是人工智能的领头羊。 3.数据科学数据科学同样也是应用于各种行业领域,这些领域使用科学的方法、算法和系统来获取数据,从而解读出行业领域的隐藏规律和预测未知的结果等。 事实上,招聘网站称,去年对数据科学家的需求增加了29%。在真实的就业数字中,全国范围内的就业需求增加了4000多个。 4. 数字营销互联网的蓬勃发展促使各行各业开始进行数字营销。数字营销是通过各种网络媒体平台将产品推广到消费者手中。一个典型的渠道是展示或横幅广告。最终,你想要在有大量网络流量的平台上吸引人们对你的产品的注意,然后创造好奇心,从而带动销售。 今天的经济使得数字营销成为一个主要的经济驱动力。这对数字营销人员的薪酬产生了连锁反应。数字广告专业人士的实得工资超过12.8万美元。 数字营销应用程序的激增正推动该领域的职位空缺数量。到目前为止,专家预计2024年将有2万个工作机会。 5.UI or UX Design设计用户界面和用户体验都是软件产品和网站设计的重要组成部分。 此外,在不同的求职网站上,有超过15万个UI/UX职位空缺。 同样,UI或UX设计师职位也在25个高薪职位之列,平均年薪为96,885美元。 6. 移动应用程序开发移动应用正在蓬勃发展。现在几乎所有的东西都有一个应用程序APP。在Android、iOS和web平台上每天都有无数个各个领域的应用程序上线。 由于移动应用的快速增长,对移动应用开发者的需求也随之增加。目前,移动应用程序开发人员的收入超过10万美元,而招聘网站显示,有30万个工作机会在招聘! 7.软件测试每个软件都需要定期测试,使其在质量和功能方面保持更新。 软件测试人员的收入大约在45000美元到81000美元之间。然而,他们的工资因公司而异。同样薪资水平取决于测试人员的工作职位、描述和经验水平。 8. 业务分析业务分析是了解业务的需求、问题和找到相关的解决方案。 根据调查,到2024年,对业务分析师的需求将增长14%。业务分析师的薪资中值约为81,500美元,甚至可能随着对该职业需求的增长而上升。 9. 自然语言处理自然语言处理(NLP)集成了计算机科学、信息工程和人工智能。它的目标是让电脑机器理解人类的语言。 在实践中,NLP涉及到计算机和自然语言之间的交互。机器携带的代码使它们能够理解人类的表情。这些机器还能解读用户的意图。 目前,NLP程序员的年薪中位数是66,500美元,专家预测每年将增长5%。仅英国就有超过5.5万个自然语言处理方面的职位空缺。 10. 工业设计针对大众的产品设计被称为工业设计,大多数产品都要经过多次设计迭代,才能最终成型。此外,这些产品迭代通常涉及关于产品功能和设计的许多决策。所以工业设计师的知识和技能是必要的。 工业设计领域有超过39,700个职位空缺。尽管这些就业机会大多来自制造业。工业设计师的年薪中位数为64,910美元-但是,赚钱最多的建筑师为年薪70,000美元。 总结:本文重点介绍的技能展示了数字世界的影响和进步,无论你如何选择,在未来几年都会保有一定的优势。

October 17, 2019 · 1 min · jiezi

Usama-Fayyad博士谈首席数据官

作者 | Kate Strachnyi来源 | CDA数据分析师“标题'首席数据官'开始是一个笑话!”,世界上第一个CDO的Usama Fayyad说道,并继续说道。“我猜,现在它变成了一件严肃的事情。” IADSS联合创始人Usama Fayyad博士在ODSC 2019 East活动的主题演讲后接受了Kate Strachnyi的采访。这个有趣的访谈的一个重要部分是关于“首席数据官”角色的演变及其在推动公司数据素养和文化方面的未来。 Kate Strachnyi: 您是雅虎的第一位首席数据官,最近,您担任巴克莱的全球首席数据官。您能告诉我们这些CDO角色是如何产生的以及它是如何演变的吗?我知道你说这开始是一个笑话。告诉我们。 Usama Fayyad: 是的。最初是由执行团队开始,Jerry Yang聚集在一起欢迎我加入雅虎,然后说:“好的。我们应该在这里打电话给你什么?” 这个话题来自首席数据官,房间里的每个人都笑了起来,认为听起来很有趣。雅虎实际上拥有这种不相关标题的文化,例如,杨致远称自己为雅虎首席执行官,等等。所以这是第一个真正定义它意味着什么,我们当时将它定义为一个操作角色,也不得不担心标准和治理,并确保一切都得到妥善处理,并且架构良好,等等。所以它至少在开始时对我有双重作用。 然后我离开了雅虎,五年,六年后,我加入了巴克莱银行,这是一家拥有325年历史的银行,是欧洲主要的银行之一,总部设在伦敦。在那里,对比度是显着的,因为该领域已经成熟。我记得第一次作为巴克莱高管做了一次公开讲话,有人走到我面前说:“你知道这个行业有大约1000名首席数据官吗?” 当然,我当时没有提到,“哦,是的。这开始是一个笑话。” 因此,更多的组织认真对待它。许多组织意识到了这一需求。 在银行,更多地强调治理方面,政策方面,以及隐私和数据的正确使用,尤其是对于欧洲银行而言,其中许多法律都有了更多的进化关于你可以保留多少数据,你可以使用多少数据等等,比美国更先进。我想说,这些差异非常重要,无论是在时间上还是在角色就像,你花费更多精力的地方。 Kate Strachnyi: 对。在这一点上,每家银行都有CDO的角色吗?他们被授权吗? Usama Fayyad: 它几乎到了那里。我想很多银行担心如果他们现在没有CDO就会陷入困境。该行业基本上要求一个负责任的个人,他们正在查看该组织是否正确使用数据,他们如何使用数据,他们对其使用是否有正确的限制。我曾经在巴克莱调用我的角色负责任地使用数据,但在你负责任地使用它之前,你需要确保它可用,可用,并且可以实际应用于许多这些创新的应用程序中。在安全方面。所以我推到那里的一个大项目是我称之为KYC,这是银行业务,知道你的客户,是一个很大的支出领域。我称之为从KYC到UYC的旅程,UYC代表了解您的客户. Kate Strachnyi: 你提到了技能差距,这是由Qlik 领导的数据素养项目验证的,他说只有24%的全球劳动力具备数据素养。CDO应该采取什么措施来推动公司内部的数据素养和数据文化 Usama Fayyad: 这是一个很好的问题,也是我作为Open Insights参与的很多事情之一,我和世界上一些最大的组织说过,我们很快意识到数据素养和数据文化是使这些东西变得有用和可用的很大一部分。为此,我们实际上在很多大公司中推出了我们称之为数据学院的东西,这些大公司的目标是基本上实现数据素养。有两个级别的识字率。普通员工应该了解数据,为什么重要,为什么保证数据的安全,为什么对它敏感是很重要的,为什么确保数据安全是很重要的。 然后有一部分可能与它有关,这更多地涉及分析。许多数据分析师和许多业务分析师甚至都不知道使用机器学习算法可以用数据挖掘算法做些什么。我的意思是,货币化是一个很好的例子,当我在两年内加入雅虎,投入正确的机器学习系统,数据系统,数据管理制度和一些大数据技术时,我们能够生成,没有太多工作,从雅虎定位中获得8亿美元的额外收入。基本上,他们以之前销售价格的10至20倍的价格销售相同的广告。因为现在,他们实际上可以做一些他们可以向客户证明的目标, “好吧,这个目标明确。这对于正确的受众,这导致了一个更好的动态!“ 广告商愿意支付更多,而且消费者稍微快乐一点。没有人喜欢看广告,但如果您看到相关的广告,那么与完全不相关或错误的广告相比,这是一种更好的体验。这创造了一个良好的动态,实际上让我们创造了价值。因此,拥有这种数据文化非常重要,而这种意识和部分内容既是数据素养,也是数据科学素养。 Kate Strachnyi: 好的。假设你有一家像巴克莱这样的大公司。你如何实际实现某些东西,让我们说平均管理员或者偶尔可能会触摸数据的人,但实际上并不是数据分析师或专门处理数据,你教多少钱?他们应该知道多少? Usama Fayyad: 是的。这是不同的水平。当我们运行这些数据学院时 - 我们在Barclays做过。我们在巴克莱非洲做到了这一点,我们在非洲最大的电信公司MTN做到了这一点,我们在美国和欧洲的许多公司做过 - 你这样做的方法是为不同的意识水平创建不同的层级以及您想要强调的不同概念。所以有些人没有接触到大量数据,我们可能希望他们足够了解KPI的重要性,他们应该注意哪些KPI。我们的理念是每个关键绩效指标或关键绩效指标都应该有一个从董事会到首席执行官的整个版本,一直到公司的最低层。如果你没有那个,那么你的方式就会被打破…… Kate Strachnyi: 你的意思是它应该是完全相同的KPI或…… Usama Fayyad: 不,不。它处于不同的粒度级别,对吗?操作人员可能希望看到更多细节。董事会成员不希望看到任何细节,但希望看到重大信号,他们应该在哪里注意出现问题,比如哪个地区正在偏离预测等等。从文化角度来说,坚持说:“每个报告都有一个从董事会到最低级别的版本,即使它可能不会出现在董事会中。” 灌输那种思考文化的文化。大多数培训都是关于意识的,当你接触到专业角色时,它变得更具技术性,更多地围绕着可能的事情,因为那些人实际上可以发挥作用,并帮助你实现目标。 我亲自参与了许多数据科学项目,在那里我们会努力想出一些惊人的预测器。想到的一个例子是与一家大型汽车制造商合作,我们试图通过汽车和不同微型市场的模型来预测销量。问题非常严重。我们以非常创新的方式破解了它,最后,我们发现执行团队无法对这些预测做很多事情,即使它们非常准确。 在那些年里,对汽车的激励是一个大问题。我们认为,在购买汽车时向消费者支付退款的激励措施是最容易重新编程的,对吧?你可以根据市场,需求等来改变它们。基本上我们与行政助理一起工作,他们准备......所以我们与行政助理合作,将电子表格带到执行团队,并且只允许我们将某些细胞的颜色编码为红色,因为你可能付出了过多的代价。这些是绿色的,它们很棒。这需要注意或改变。只是做了那种颜色编码,从很好的预测来看,人们只是把它们视为一种观赏性的运动,“哦,现在,我可以采取行动。在这个市场中,我需要改变它。” 现在,它变得可行了。这是基本上涉及每个人的重要性,因为整个数据供应链和消费者链依赖于很多人做很多不同的角色。 ...

September 20, 2019 · 1 min · jiezi

机器学习数据科学和数据挖掘中的数据集类型

作者:Tarun Gupta翻译:疯狂的技术宅 https://towardsdatascience.co... 未经允许严禁转载 数据集有三个一般特征,即:维度,稀疏度,和分辨率。接下来我们将讨论它们究竟是什么意思。 什么是维度?→数据集的维度是数据集中对象所具有的属性的数量。 在特定数据集中,如果存在大量属性(也称为高维度),则可能很难分析这样的数据集。当遇到这个问题时,它被称为维度的诅咒。 为了理解维度的诅咒到底是什么,我们首先需要了解数据的另外两个特征。 什么是稀疏?→对于某些数据集,例如具有非对称特征的数据集,其对象的大多数属性值为 0;在通常情况下,只有不到 1% 的条目是非零的,这样的数据称为稀疏数据或者可以说数据集具有稀疏性。 什么是分辨率?→数据中的模式取决于分辨率级别。如果分辨率太细,则模式可能会不可见或有可能被埋没在噪声中;如果分辨率太粗糙,模式可能会消失。例如大气压力变化反映了风暴和其他天气系统的运动。在几个月的时间里,这种现象是无法察觉的。 现在,回到维度的诅咒,这意味着随着数据集维度(数据集中的属性数量)的增加,许多类型的数据分析变得困难。具体而言,随着维数的增加,数据在其占据的空间中变得越来越稀疏。对于分类,这可能意味着没有足够的数据对象来允许创建可靠的分类模型。 最后,来看数据集的类型,我们将它们定义为三个类别,即记录数据,基于图的数据和有序数据。 记录数据 →数据挖掘工作的大部分假定数据是记录(数据对象)的集合。 →记录数据的最基本形式是在记录或数据字段之间没有明确的关系,并且每个记录(对象)都具有相同的属性集。记录数据通常存储在文件或关系数据库中。 记录数据有一些具有某些特征属性的变体,。 交易或市场篮子数据:这是一种特殊类型的记录数据,其中每个记录包含一组项目。例如在超市或杂货店购物。对于任何特定客户,记录将包含客户购买的一组物品。这种类型的数据称为市场篮子数据。交易数据是一组项目集合,但它可以被视为一组记录,其字段是非对称属性。通常属性是二进制的,表示是否购买了商品。数据矩阵:如果数据集中的数据对象都具有相同的固定数值属性集,那么数据对象可以被认为是多维空间中的点(向量),其中每个维度表示描述对象的不同属性。一组这样的数据对象可以被解释为 m×n 矩阵,其中有 n 行 m 列,每行一个对象,每列一个属性。可以用标准矩阵运算来转换和操纵数据。因此数据矩阵是大多数统计数据的标准数据格式。稀疏数据矩阵:稀疏数据矩阵(有时也称为文档 - 数据矩阵)是数据矩阵的一种特殊情况,其中属性是相同的类型,而且是不对称的;即,只有非零值才很重要。基于图的数据 这可以进一步分为几种类型: 对象间关系的数据:数据对象映射到图的节点,而对象之间的关系由对象和链接属性之间的链接表示,例如方向和权重。比如互联网上的网页,其中包含文本和其指向他页面的链接。为了处理搜索查询,Web 搜索引擎爬取并处理网页来提取其内容。具有图对象的数据:如果对象具有结构,即对象中包含具有关系的子对象,则此类对象通常表示为图。例如,化学化合物的结构可以用图表示,其中节点是原子,节点之间的链接是化学键。有序数据 对于某些类型的数据,属性具有涉及时间或空间顺序的关系。正如你在上图中所看到的,它可以分为四种类型: 顺序数据:也称为时间数据,可以被认为是记录数据的扩展,其中每个记录都有一个与之相关的时间。比如零售交易数据集,该数据集还存储交易发生的时间序列数据:序列数据由数据集组成,该数据集是单个实体的序列,例如单词或字母序列。它与顺序数据非常相似,只是没有时间戳;相反,有序序列中存在位置。例如,植物和动物的遗传信息可以用基因的核苷酸序列的形式表示。时间序列数据:时间序列数据是一种特殊类型的有序数据,其中每个记录是一个时间序列,即随时间进行的一系列测量。例如,财务数据集可能包含各种股票的每日价格的时间序列的对象。空间数据:某些对象具有空间属性,例如位置或区域,还有其他类型的属性。空间数据的例子是针对各种地理位置收集的天气数据(降水,温度,压力)。本文首发微信公众号:硬核智能

September 7, 2019 · 1 min · jiezi

干货满满-不容错过的数据科学入门数学指南

作者 | Randall Hall来源 | 机器之心想要入行数据科学而又不知如何开始吗?先看看这篇使用的数据科学入门数学指南吧! 数学就像一个章鱼:它的「触手」可以触及到几乎所有学科。虽然有些学科只是沾了点数学的边,但有些学科则被数学的「触手」紧紧缠住。数据科学就属于后者。如果你想从事数据科学工作,你就必须解决数学问题。如果你已经获得了数学学位或其它强调数学技能的学位,你可能想知道你学到的这些知识是否都是必要的。而如果你没有相关背景,你可能想知道:从事数据科学工作究竟需要多少数学知识?在本文中,我们将探讨数据科学意味着什么,并讨论我们到底需要多少数学知识。让我们从「数据科学」的实际含义开始讲起。 对于数据科学的理解,是「仁者见仁,智者见智」的事情!在 Dataquest,我们将数据科学定义为:使用数据和高级统计学进行预测的学科。这是一门专业学科,重点关注理解有时有些混乱和不一致的数据(尽管数据科学家解决的问题因人而异)。统计学是我们在该定义中提到的唯一一门数学学科,但数据科学也经常涉及数学中的其他领域。学习统计学是一个很好的开始,但数据科学也使用算法进行预测。这些算法被称为机器学习算法,数量达数百种。 深入探讨每种算法需要多少数学知识不属于本文的范围,本文将讨论以下常用算法所需的数学知识: 朴素贝叶斯线性回归Logistic 回归K-Means 聚类决策树现在让我们来看看每种算法实际需要哪些数学知识! 朴素贝叶斯分类器 定义:朴素贝叶斯分类器是一系列基于同一个原则的算法,即某一特定特征值独立于任何其它特征值。朴素贝叶斯让我们可以根据我们所知道的相关事件的条件预测事件发生的概率。该名称源于贝叶斯定理,数学公式如下: 其中有事件 A 和事件 B,且 P(B) 不等于 0。这看起来很复杂,但我们可以把它拆解为三部分: P(A|B) 是一个条件概率。即在事件 B 发生的条件下事件 A 发生的概率。P(B|A) 也是一个条件概率。即在事件 A 发生的条件下事件 B 发生的概率。P(A) 和 P(B) 是事件 A 和事件 B 分别发生的概率,其中两者相互独立。所需数学知识:如果你想了解朴素贝叶斯分类器算法的基本原理以及贝叶斯定理的所有用法,一门概率论课程就足够了。 线性回归 定义:线性回归是最基本的回归类型。它帮助我们理解两个连续变量间的关系。简单的线性回归就是获取一组数据点并绘制可用于预测未来的趋势线。线性回归是参数化机器学习的一个例子。在参数化机器学习中,训练过程使机器学习算法变成一个数学函数,能拟合在训练集中发现的模式。然后可以使用该数学函数来预测未来的结果。在机器学习中,数学函数被称为模型。在线性回归的情况下,模型可以表示为: 其中 a_1, a_2, …,a_n 表示数据集的特定参数值,x_1, x_2, …, x_n 表示我们选择在最终的模型中使用的特征列,y 表示目标列。线性回归的目标是找到能描述特征列和目标列之间关系的最佳参数值。换句话说,就是找到最能最佳拟合数据的直线,以便根据线的趋势来预测未来结果。 为了找到线性回归模型的最佳参数,我们要最小化模型的残差平方和。残差通常也被称为误差,用来描述预测值和真实值之间的差异。残差平方和的公式可以表示为: 其中 y ^ 是目标列的预测值,y 是真实值。 所需数学知识:如果你只想简单了解一下线性回归,学习一门基础统计学的课程就可以了。如果你想对概念有深入的理解,你可能就需要知道如何推导出残差平方和的公式,这在大多数高级统计学课程中都有介绍。 逻辑回归 定义:Logistic 回归重点关注在因变量取二值(即只有两个值,0 和 1 表示输出结果)的情况下估算发生事件的概率。与线性回归一样,Logistic 回归是参数化机器学习的一个例子。因此,这些机器学习算法的训练结果是得到一个能够最好地近似训练集中模式的数学函数。区别在于,线性回归模型输出的是实数,而 Logistic 回归模型输出的是概率值。 ...

August 20, 2019 · 1 min · jiezi

从事SQL相关工作者可以成为数据科学家吗

作者 | Saurabh Hooda来源 | CDA数据分析研究院简短的回答是肯定的。只要数据科学家中存在“数据”,结构化查询语言(或我们称之为“quel”)将仍然是其中的重要部分。本文将深入探讨数据科学及其与SQL的关系,包括5 W和1H的答案 - 如何,为什么,何地,何时,谁和什么。我们还将学习数据库管理系统(DBMS)的基础知识,并了解数据科学家如何成为您职业生涯的最佳选择。 什么是数据科学数据科学的视角非常广泛,作为一名数据科学家需要深入了解各种数学流,机器学习、计算机科学、统计研究、数据处理以及多个领域的专业知识。这些数学流中的每一种知识系统都需要对数据进行大量地研究和探索,无论是收集、分析还是处理。 为什么数据科学如此受欢迎目前来说数字世界正处于巅峰时期,随着市场需求和广泛营销策略的不断增长,数据已成为所有营销目的的关键。例如,如果我想购买一部新手机,我会去亚马逊或Flipkart这样的网上商店,浏览不同的品牌,挑选心仪的品牌手机添加到我的购物车中,最后经过一些对比研究后决定购买。在网站后台,在线商店会保存我的购物车信息和浏览历史记录,并在我下次登录时向我展示更多相关品牌的手机推荐。即使我不买,在线商店也会给我发电子邮件或短信,提醒我购物车里的商品“还在等着我”。 因此,数据在建立买卖双方关系中起着至关重要的作用。客户展现的历史行为数据越多,向买方呈现的个人定制化推荐程度就越高。这种个性化推荐算法不仅适用于电子商务,也同样适用于各行各业用户价值分析和个性化营销方案中。 怎么样实现收藏:假设您在宜家选购家居用品,查看对比相关产品的价目单。你够买了一款喜欢的产品然后离开,但后来你发现你还需要购买更多相关的产品,你还会回来宜家选购。你告诉你的朋友这个产品是多么有用和便宜,他们相信你的推荐也会来宜家购买。制造商使用这些数据来了解客户的喜好并更新他们的库存以储备更多更受欢迎的产品。此外,持续的反馈也有助于他们改进现有产品。处理:制造商收集用户的数据,并在数据建模和规划阶段考虑可操作的方案。例如,越来越多的客户为他们的窗帘寻找特定的彩色床单或特定的布料。分析:想象一下,如果你想要买一个蓝色的床单,为了搭配你的房间的氛围,绿色将是一个更好的选择,但是目前还没有绿色的。绿色是一种常见的流行色。通过对人工输入的数据和数据管理工具中存储的数据进行分析,可以确定引入绿色搭配的产品是否是一个好主意,是否能满足更多客户的需求,并带来更多的利润。对于需求预测和库存管理,我们需要存储所有用户信息,包括他们的购买浏览记录,行为偏好指数,评价反馈信息等。数据在哪里所有的数据都存储在数据库中。因此,SQL对于处理需要定期加工和转换的大量数据至关重要,同时它也是数据科学打算做的精准营销和用户反馈的重要工具。例如,如果您不喜欢Facebook给您推荐的视频,您可以选择'隐藏此项',Facebook会立即向您询问隐藏原因。用户的这些选项数据也需要存储在数据库中。 通过像SQL这样的关系数据库,数据科学提供了一个连续的系统来处理和改进数据的呈现和处理方式。 SQL应用领域SQL是整个数据科学领域的重要组成部分。但是,在企业实际业务工作中它究竟适用于哪些工作呢?如果您想成为数据分析师,数据工程师或数据架构师,您将需要学习SQL以及C,R和Python等编程语言。这是一个简单的图表,显示了使用SQL的阶段: 图片中突出显示的交集部分是我们需要SQL知识的地方:大数据,大数据分析和数据分析。 为何选择SQL尽管NoSQL数据库提供了高性能和高速度,但SQL数据库仍然被广泛用于所有实际业务工作中。有更多的开发人员了解SQL技术,因此支持和翻译帮助文档使其更加丰富。此外,数据完整性是使SQL与任何NoSQL数据库分开的一个关键因素,通过确保没有重复或未经授权的数据可以进入系统。此外,对于复杂的查询和连接,结构良好的关系数据库可以更好地管理数据。 什么是SQLSQL是一种关系数据库管理系统,用于存储,检索,更新和读取数据库中的数据。 在本文中,我们将专注于SQL如何对数据科学起作用。让我们举一个简单的例子,说明您作为数据科学家如何使用SQL来收集和分析数据。 假设您想通过检查有多少用户订购它的副本来了解作者'Carl Shan'的一本名为'The Data Science Handbook'的书的受欢迎程度。因为SQL是具有适当模式的结构良好的语言,所以您可以使用如下结构: customer table order_details table book table 要获取此类数据,我们需要使用一些关键字段或主键和外键字段来连接这三个表。在这种情况下,order_id对于所有三个表都是共有的关键字段,可以用来作为连接字段,使用这些连接后的数据,我们可以编写查询语句来获取必要的字段信息。 在现实生活中,这种系统可以处于多个层次的分析需求中,我们需要使用SQL分析和处理大量数据。来自数百万用户的日常行为记录数据被存储在SQL数据库中,用于不同目的的分析需求。想象一下,在不使用SQL的情况下我们能够完成这些海量数据的处理和分析工作吗? 虽然有些人认为SQL在数据科学家工作中的作用正在减少,但事实并非如此。SQL在数据分析工作中依然十分的重要。 以下是数据科学家应该了解的一些关键SQL概念: 关系数据库模型在关系数据库模型中,所有数据点都相互关联或相互连接。在创建这种类型的数据库时,必须在设计阶段本身定义各种表和列之间的关系。在上面的例子中,这三个表是相关的。客户表的主键(“在关系(表)中唯一指定元组(行)的最小属性集(列)的特定选择”)将是customerid,而orderid将是外键(“属性集主题”)某种包含依赖性约束,特别是一种约束,即由一个关系中的外键属性R组成的元组R也必须存在于某种其他(不一定是不同的)关系中,S“)。以同样的方式,bookid和orderid组合可以是书表的复合键。必须在创建阶段本身定义这些关系。DBMS规范化规范化是设计过程,其中数据库中的表以规范化的方式组织,以避免数据的冗余和依赖性。使用不同形式的规范化,我们可以将数据划分为更小的结构并在它们之间建立链接,以便最佳地存储数据。这篇好文章以一种非常简单易懂的方式介绍了有关规范化的信息。数据库架构数据库模式是数据库的逻辑视图。应用于数据的所有关系(如约束,表,视图,触发器等)构成模式。基本SQL命令SQL可以执行以下类型的语句:DML(数据操作语言)声明 - select, insert, delete, updateDDL(数据定义语言)声明 - create, drop, alterDCL(数据控制语言)声明 - grant, revokeTCL(交易控制语言)声明 - begin, commit, rollback谁应该学习SQL到现在为止,您应该明白SQL相关从业者是否可以成为数据科学家以及如何成为一名数据科学家。如果您对数据非常感兴趣,并希望将数据科学作为您的职业选择,那么您一定要学习SQL。 数据科学家作为职业选择当今社会每天都会产生大量数据,需要将其转换为新的业务解决方案,设计和产品,这些只能来自数据科学家的创造性思维。这种需求至少会在几十年内增加。除了行业为数据科学家提供的脂肪包之外,吸引专业人士参与这项工作的挑战和不断增长的角色也是如此。从数据管理员,数据架构师,数据分析师,业务分析师到数据管理员或商业智能经理,在数据科学圈中有很多机会可供选择。了解SQL,R和Python等编程语言,统计和应用数学,结合批判性思维和行业知识,可以比你想象的更快。 作者:Saurabh Hooda曾在全球范围内为各种电信和金融巨头工作。在Infosys和Sapient工作了十年之后,他开始了他的第一家创业公司Leno,以解决超本地书籍共享问题。他对产品营销和分析感兴趣。

August 19, 2019 · 1 min · jiezi

用Python实现数据预处理

作者:Afroz Chakure翻译:疯狂的技术宅 原文:https://towardsdatascience.co... 未经允许严禁转载 机器学习的核心是处理数据。你的机器学习工具应该与数据的质量一样好。本文涉及清理数据的各个步骤。你的数据需要经过几个步骤才能用于预测。 数据预处理涉及的步骤:导入所需的库导入数据集处理缺失的数据。编码分类数据。将数据集拆分为测试集和训练集。特征缩放。那么让我们逐一学习这些步骤。 步骤1:导入所需的库你先需要下载此数据集:Data.csv 每次我们制作新模型时,都会要求导入 Numpy 和 Pandas。 Numpy 是一个包含数学函数的库,用于科学计算,而 Pandas 用于导入和管理数据集。 import pandas as pdimport numpy as np在这里我们导入 pandas 和 Numpy 库并分别命名名 “pd” 和 “np”。 第2步:导入数据集数据集以 .csv 格式提供。 CSV 文件以纯文本格式存储表格数据。该文件的每一行都是一个数据记录。我们使用 pandas 库的 read_csv 方法将本地 CSV 文件读取为数据帧(dataframe)。 dataset = pd.read_csv('Data.csv')在仔细检查数据集之后,我们将在数据集(X)中创建一个特征矩阵,并创建一个依赖向量(Y)及其各自的观察结果。我们用 pandas 的 iloc (用于修复索引以进行选择)读取列,它包含两个参数 — [行选择,列选择]。 X = dataset.iloc[:, :-1].valuesy = dataset.iloc[:, 3].values步骤3:处理缺失的数据 我们得到的数据很少是同质的。有时数据可能会丢失,所以需要对其进行处理,以免降低机器学习模型的性能。 我们需要用整列的 Mean 或 Median 替换缺失的数据。为此,我们将使用 sklearn.preprocessing 库,其中包含一个名为 Imputer 的类,它将帮助我们处理丢失的数据。 ...

July 9, 2019 · 1 min · jiezi

USF-MSDS501-计算数据科学中文讲义-27-如何阅读代码

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:How to read code 译者:飞龙 协议:CC BY-NC-SA 4.0 从根本上说,程序员与代码交流。我们不仅向计算机,也向其他开发人员表达了我们的想法。到目前为止,我们专注于设计程序和编写 Python 代码。这是关键的创作过程,但是,为了编写代码,程序员必须能够阅读其他人编写的代码。 为什么阅读代码我们阅读代码以便: 获得新体验。就像在自然语言中,我们通过倾听他人来学习说话一样,我们通过识别他人代码中的酷炫模式来学习编程技巧。能够快速阅读代码,使您可以获得观看编程讲座或视频的经验。查找并修改代码段。我们经常可以通过试用 Google 搜索或 StackOverlow找到的代码段,找到编码问题的提示或解决方案。 请注意,您不违反版权法,如果是学生项目,则不违反学术诚信规则。发现库函数或其他共享代码的行为。 从名称或参数列表中并不总是清楚库函数的完整行为。 查看该函数的源代码是了解它的作用的最佳方法。代码就是文档。在我们的代码或其他代码中发现错误。 所有代码都有错误,特别是我们刚刚编写,但没有经过详尽测试的代码。作为编码过程的一部分,我们不断跳来跳去,阅读我们现有的代码库,来确保一切都组合在一起。<img src="https://gitee.com/wizardforce...; width="30" align="left"> 在我们讨论库函数时,让我强调一条黄金法则:你永远不应该向你的程序员询问参数的细节和库函数的返回值。你可以通过 PyCharm 中的“跳转到定义”或网络搜索来自己发现它。 本文档的目的是解释程序员如何读取代码。 我们的第一个线索来自于我们不是计算机这一事实,因此,我们不应该像计算机一样阅读代码,一个接一个地检查一个符号。 相反,我们将寻找关键元素和代码模式。 这就是我们用外语阅读句子时所做的事情。 例如,我的法语非常糟糕,因此,在阅读法语句子时,我必须有意识地询问谁在对谁做什么。在实践中,这意味着识别主语,动词和宾语。从这些关键要素中,我试图想象作者心中的思维模式。基本上我试图反转作者所遵循的过程。 在编程世界中,过程如下:代码作者可能会想到“通过除以 2 将价格转换为新列表”,然后将它们转换为“映射”的伪代码,最后转换为 Python for循环。在阅读循环代码时,我们的工作是反转过程,并想象作者的原始目标。 我们不是试图通过在我们的头脑或纸上模拟它,来弄清楚代码的突现行为;相反,我们正在寻找模式,它们能够告诉我们正在执行哪些高级操作。 这就是为什么在编写代码时应该强调清晰度,以便读者阅读更多内容。约翰 F. 伍兹 有一个很好的引言,总结了很多东西: 写代码的时候总是想象,维护你代码的家伙是一个知道你住在哪里的暴力精神病患者。获得程序的要点在第一次查看教科书时,扫描目录来获得书籍内容的整体视图,是有意义的。 第一次看节目时也是如此。 查看所有文件以及这些文件中包含的函数的名称。 同时,找出主程序的位置。 根据您在程序中的目标,您可能会开始单步执行主程序或立即跳转到感兴趣的函数。 从样例运行或单元测试中查看程序的输入 - 输出对也很有用,因为它可以帮助您了解程序的功能。 从某种意义上说,我们通过检查和测试程序,对程序的工作计划进行逆向工程。 以前,我们在前进方向使用程序的工作计划来设计程序。 获得函数的要点一旦我们确定了要检查的主程序或函数,就应该对函数的工作计划进行反向工程。 函数的名称可能是函数功能的最大线索,假设代码作者是一个不错的程序员。 (使用像f这样的通用函数名称,是教师在不泄露答案的情况下,编写代码阅读问题的方式。)例如,毫无疑问,以下函数的目标是什么: def average(...): ...即使不查看参数或函数语句。 程序员通常会提供函数用法的注释,但要小心。 程序员通常会在不更改注释的情况下更改代码,因此注释会产生误导。可接受的注释可能如下所示: def average(...): "Compute and return the average of a list of numbers" ...如果我们幸运的话,该注释对应于工作计划中的函数目标描述。 ...

July 2, 2019 · 2 min · jiezi

USF-MSDS501-计算数据科学中文讲义-28-面向对象编程

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Object-oriented programming 译者:飞龙 协议:CC BY-NC-SA 4.0 大揭秘到目前为止,我们一直在使用函数和函数包,以及定义我们自己的函数。 但事实证明,我们一直在使用对象,我们只是没有认识到它们。 例如, x = 'Hi'x.lower()# 'hi'字符串x是我们可以发送消息的对象。 print( type(x) )# <class 'str'>甚至整数都是对象: print(dir(99))# ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']类是对象的蓝图,基本上是类型的名称,在这种情况下是str。 对象称为类的实例。 ...

July 2, 2019 · 4 min · jiezi

USF-MSDS501-计算数据科学中文讲义-11-一些动机音频处理

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:A bit of motivation (Audio processing) 译者:飞龙 协议:CC BY-NC-SA 4.0 学习编程涉及学习很多细节。 为了简单起见,教师倾向于从简单的代码示例开始,但这些最终变得非常无趣。 我想用一个有趣的计算应用开始本课程,来激励你学习如何编写代码。 我想表明,即使是一点点代码,回报也可能是巨大的。 我不希望你最初了解所有的细节,只是广泛的笔画。 在第一个讲义/实验中,我们将利用现有的代码库,来了解计算机如何表示音乐和其他音频文件。 随着我们进行下去,您将遇到许多全新的任务,例如从命令行在您的计算机上安装软件。 我们将研究一些实际应用,需要跨主题技能和知识,而不是针对特定主题提供一些讲座。 最好看看所有部分是如何组合在一起的,而不是孤立地看待主题。 随着您获得更多经验,您将回顾这些早期的例子,当你了解了一切,你会觉得“啊哈!” 。 播放声音文件我们都在电脑上播放音乐文件。 例如,这里有两个有趣的:Kiss by Prince,Kiss.aiff 的初始序列和ahhh sound,ahhh.mp3。 您可以下载这些并使用音乐播放器播放它们。 但是,如果我们正在构建游戏,或进行语音识别,并且我们需要 Python 来加载声音文件并播放它们呢?通过利用类似烹饪书的代码库,我们可以使用几行 Python 代码来播放音频文件。您将有机会在本课程的声音实验中,尝试所有这些 Python 代码,但现在只是尝试获取代码的要点,和数字音频背后的原理。 要在 Python 中播放音频文件,我们首先必须将该音频文件加载到内存中。 我们很快就会看到,音频文件只不过是一系列数字。 这里有一些 Python 示例,加载了 Prince's Kiss 的一首歌: import soundfile as sffrom IPython.display import Audiokiss, samplerate = sf.read('sound/Kiss.aiff')Audio(kiss, rate=samplerate)<audio controls="controls" > <source src="https://gitee.com/wizardforcel/usf-msds501-notes-zh/raw/master/docs/img/Kiss.wav" type="audio/wav" /><a href='https://gitee.com/wizardforcel/usf-msds501-notes-zh/raw/master/docs/img/Kiss.wav'>Kiss.wav</a></audio> 代码首先从一些有用的 Python 包中导入一些必要的代码。 sf.read(...)是将文件加载到内存中的关键元素。 在该语句之后,变量kiss持有音频数据。 Audio(kiss,...)在技术上是 Python 代码,但它是特定于 Jupyter 笔记本的东西,让我可以使用浏览器播放声音。 这纯粹是为了演示目的。 在你的实验里,你会做一些像sd.play(kiss, ...)之类的东西。 ...

July 2, 2019 · 2 min · jiezi

USF-MSDS501-计算数据科学中文讲义-26-使用函数组织你的代码

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Organizing your code with functions 译者:飞龙 协议:CC BY-NC-SA 4.0 <img src="https://gitee.com/wizardforce...; width="75" align="right"> 几年前,我学会了从头开始制作泰国红咖喱酱,包括烘烤,然后在巨大的研钵和杵中研磨和捣碎种子。这需要很长时间,所以我一般都会从商店购买现成的咖喱酱。 <img src="https://gitee.com/wizardforce...; width="70" align="right"> 类似地,大多数烹饪书提供了许多其他食谱所使用的基本食谱,例如制作调味汁。烹饪书被组织成一系列可执行的食谱,其中一些“调用”其他食谱。 为了做晚餐,我打开一本食谱,获取一些原料,然后按照特定的顺序执行一个或多个食谱。 编写程序的方式也是一样的。打开烹饪书与导入库相同。获取原材料可能意味着将数据加载到内存中。主程序调用函数(食谱)来完成特定任务。作为编写程序的一部分,我们通常会将代码的逻辑部分分解为特定于我们问题的函数,而库中的函数则倾向于广泛适用。 我们组织代码的方式很重要。 如果我们对风格和组织不严格,程序很快就会成为难以理解的老鼠窝。 以下是我们将编写的 Python 程序的一般结构: 导入任何库定义任何常量,简单的数据值定义任何函数主程序体作为子程序的函数分组为单个命名实体的一系列操作称为函数。函数就像迷你程序或子程序,我们可以像完整的程序一样规划。 Python 程序由零个或多个函数和所谓的“主”程序组成,它由让事情开始的一系列操作组成。 函数不从磁盘加载数据,而是操作由调用程序提供给它们的数据。 这个输入数据类似于食谱的成分列表,并以一个或多个命名形式参数(或者称为参数)的形式指定。函数不像程序那样打印结果或显示图形,而是返回值。函数是指广泛有用的辅助例程。 我们通过确定以下内容开始规划函数: 1.描述性函数名称2.它操作的值的类型(参数类型)3.它返回的值的类型(返回类型)4.函数做了什么和返回的值 如果我们无法确切地指定函数的内部和外部,那么就没有希望确定处理步骤,更不用说实现该函数了的 Python 代码了。 与程序的工作计划一样,我们手动写出一些示例函数调用,来展示输入数据和输出数据。 一旦我们完全理解了我们的目标,我们就会规划出函数所需的操作顺序,来计算所需的结果。在设计整个程序时,我们从返回值开始,向后工作,以相反的顺序确定操作。注意:操作应该纯粹是数据的函数,数据作为参数传递给它们 -- 函数应该完全不知道任何其他数据。(当我们实际将函数伪代码转换为 Python 时,会有更多相关内容。) 函数模板Python 函数就像黑盒子,通常接受输入数据和并yield(或返回)值。每次调用函数都会触发与执行该函数的关联代码,并返回一个或多个结果值。例如,这是一个名为pi的函数,它不带参数,但每次调用时返回值3.14159: def pi(): return 3.14159没有参数的函数的代码模板是: def funcname(): statement 1 statement 2 ... return expression带有函数名称,与函数关联的语句以及描述返回值的表达式的空位。 没有返回值的函数没有return语句。 <img src="https://gitee.com/wizardforce...; width="30" align="left"> 我们将语句与 Python 中的函数关联的方式是缩进。 所以return 3.14159是函数的一部分,因为它在函数头之后缩进。与def在同一列中的第一个语句是函数外的第一个语句。 def pi(): return 3.14159print("this is not part of function")# this is not part of function<img src="https://gitee.com/wizardforce...; width="30" align="left"> ...

July 2, 2019 · 4 min · jiezi

USF-MSDS501-计算数据科学中文讲义-21-编程导论

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Introduction to programming 译者:飞龙 协议:CC BY-NC-SA 4.0 <!--break--> 计算机科学不仅关于计算机,就跟天文学不仅关于望远镜一样。-- Edsger Dijkstra 我记得面对我的第一个编程任务(1980 年的 BASIC!),我完全没做出来。我甚至不知道如何开始解决这个问题。我很难过,尽管编码对我来说很快就会变得非常自然。我最初的困难的原因现在显而易见:教师完全没有提供将问题转换为正在运行的程序的技术或策略。我必须自己解决这个问题。 在介绍性课程中关注编程语言语法的方法是可以理解的。 解决问题不是一种精确,定义好的技能。 它更像是一种通过练习磨练的整体能力。 因此,教学和评分是具有挑战性的。 立即跳转到一些简单的编程语言语句的语法,要容易得多。 这种方法具体,原则上易于理解,但完全忽略了我们什么时候以及为什么需要这些语句。 可以在这种环境中作为学生而生存的教授,在教其他程序员时通常会继续使用孤注一掷的方法。 在本课程中,我想通过专注于解决问题和学习编写复杂的 Python 代码来纠正这一问题。要做到这一点,我们将遵循一个整体的问题解决策略,包括设计“工作计划”或“算法”,无论是纸上还是头脑中(当你获得更多经验时)。在我们进入编码阶段很久之前,该计划就帮助我们思考问题。计划的一部分是确定一个解决我们问题的合适操作顺序。这是一个棘手的问题,因此我们将通过以下方式缩小解决方案空间的范围:(1)将自己限制在一组通用的操作和数据结构中,(2)应用成熟的方法,我们称之为“向后工作”和“简化为一个已知的解决方案“,最后,(3)利用这个入门课程的主题特性,采用一个适用于大多数数据科学问题的程序大纲。当我们最终进入 Python 编程时,我们将自己局限于该语言的有用子集。目标是教你编程,而不是教你完整的 Python 语言。 请允许我首先区分编程(问题解决)和编码(用特定编程语言表达我们的解决方案)。 编程是什么?当我们考虑编程时,我们会立即考虑编程语言,因为我们使用特定的语言语法表达自己。 但是,这就像向物理学家询问他们讨论物理学的语言。 编程主要是将“单词问题”(项目描述)转换为执行计划。 当然,编码(输入代码)的最终行为是必需的,但学习在精神上解决编程问题是最困难的过程,也是最重要的过程。 自然语言也是如此。 学习证明数学定理比学习用某种自然语言编写证明更难。 实际上,大多数数学语法在自然语言中都是相同的,就像编程语言一样。 像在数据科学计划中一样,用 Python 或 R 表达您的想法是编程过程中最简单的部分。 也就是说,编写正确的代码通常是该过程中最令人沮丧和耗时的部分,即使对于有经验的程序员也是如此。 编程更多是要表达什么而不是如何表达。 用计算机解决问题意味着识别一系列操作,每个操作都解决了整个问题的一部分。 每个操作本身可能是一系列子操作。 用 Python 或 R 表达这些操作并不困难。 确定哪些操作及其相对顺序是困难的部分。 让我们从解决编程问题的整体策略入手。 解决问题的策略无论我们尝试编写什么软件,我们都可以遵循解决问题的整体策略。 在任何问题解决的情况下,第一步是充分理解问题并清楚地确定目标。 这可能听起来很明显,但是我们对这个问题的理解中的任何模糊性都可能使我们走错方向。 在数据科学环境中,目标通常是我们试图回答的问题,例如“哪个销售区域的同比增长最快?”(摘要统计量),“哪些交易是欺诈性的?”(分类器)或“未来某个日期股票价格是多少?”(预测器)。 我们应该能够使用英语单词精确地表达目标和预期输出。 如果我们不能这样做,那么 Python 或 R 中没有任何编码的专业知识可以解决问题。 我们很快就会看到一些例子。 问题解决过程的第二步(或可能是第一步的一部分)是手动写出一些输入 - 输出对。 这样做有助于我们了解程序需要做什么以及如何执行。 我们将要看到,这种技术不仅适用于整体输入和输出,而且适用于设计函数(可重用的代码段)。 如果我们无法手动识别和执行操作,我们无法使用代码自动执行操作。此外,列出一堆案例通常会突出特殊情况,例如“当输入为负时,输出应为空”。 换句话说,程序不应该以负数作为输入而崩溃。 程序员称之为测试驱动设计。 ...

July 2, 2019 · 1 min · jiezi

USF-MSDS501-计算数据科学中文讲义-22-在内存中表示数据

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Representing data in memory 译者:飞龙 协议:CC BY-NC-SA 4.0 典型的程序要求我们从磁盘加载数据并放入组织成数据结构的内存中。我们在内存中表示数据的方式对于构建程序至关重要。数据科学大纲尤其如此,因为处理数据是我们的焦点。 首先,让我们直接了解数据。数据元素具有值和类型,例如32和整数 或"hi"和字符串。我们通过组合和组织这些数据元素(例如整数列表)来构建数据结构。 我们还有一个名为指针或引用的特殊元素,它引用另一个元素。这就像一个电话号码“指向”手机,但不是手机本身。使用指针我们可以找到手机。指针列表就像指向人们的电话簿,但电话簿实际上并不是人的列表。(我们稍后会看到,即使我们做了像x = 3之类的简单操作,变量x也是秘密地指向值为 3 的整数对象的指针。) 接下来,让我们稍微了解一下计算机体系结构,来了解将内容加载到内存中的含义。 计算机体系结构计算机由三个主要组件组成:一个用于存放数据的磁盘,一个存储器(在断电时擦除),以及一个处理该数据的处理器(CPU)。 这是一张实际 CPU 和一些内存芯片的图片: <img src="https://gitee.com/wizardforce...; width="400"> 计算机内存(RAM == 随机存取内存)要快得多,但通常比磁盘小很多,并且当计算机关机时所有内存都会丢失。 将内存视为工作空间或临时空间,将磁盘视为永久存储。内存芯片有点像人类的短期以及,相对于一张读写速度较慢而且持久的纸张而言,它很容易消失。 存储器被分解成固定大小的离散单元。单元的大小是一个字节,由 8 位(二进制开/关数字)组成。 存放 0 到 255 之间的数字就足够了。每个单元都用整数地址标识,就像邮箱上的数字一样(见下图和右图)。 处理器可以请求特定地址处的数据,并且还可以在特定存储器位置存储一条数据。例如,这是字节可寻址的计算机内存的抽象表示: <img src="https://gitee.com/wizardforce...; width="80"> <img src="https://gitee.com/wizardforce...; width="70"> 在这种情况下,存储器在地址 0 处具有值 100。在地址 1 处,存储器具有值 0。地址 4 具有我们可以存储在单个字节中的最大值:255。 从实际数字到音乐到视频的所有内容,使用一个或多个称为字节的原子存储单元来存储。 所有内容都存储为计算机中的数字或数字序列,甚至是文本。 数据存在于内存中,磁盘上,或者可以从网络中检索。作为编程计划的一部分,您需要知道数据所在的位置,以便将这些数据作为计划的一部分加载到内存中。 计算机体系结构的指标以下是我们在计算机体系结构中使用的关键单位: Kilo. $10^3 = 1,000$ or often $2^{10} = 1024$Mega. $10^6 = 1,000,000$Giga. $10^9 = 1,000,000,000$Tera. $10^12 = 1,000,000,000,000$您需要知道这些单位,因为您需要知道数据集是否适合内存,或者它是否适合磁盘,甚至需要多长时间才能通过网络传输。 ...

July 2, 2019 · 3 min · jiezi

USF-MSDS501-计算数据科学中文讲义-23-计算模型

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Model of Computation 译者:飞龙 协议:CC BY-NC-SA 4.0 现在我们知道计算机如何在内存中存储数据,我们需要对计算机如何处理数据有基本的了解。 让我们探索一下计算机可以执行的最简单,细粒度的操作。 最终,我们将从这些操作中抽取设计模式。程序员考虑高级操作,例如映射,搜索或过滤,但是我们的手指键入与这些高级操作相关联的细粒度代码模式。 规范处理器操作我们在在内存中表示数据中看到,在处理器处理数据时计算机的内存暂时保存数据。 我们通常将数据从磁盘加载到内存中,并将其组织成适合我们想要执行的计算的结构。 但最后,内存只保存数据。 所有操作都发生在计算机处理器(CPU)中,它执行五个主要操作: 将小块数据从内存加载到 CPU 中对 CPU 中的数据执行算术计算将小块数据存储回内存跳转到新位置(这是我们的循环方式)如果条件为真,则跳转到新位置处理器执行低级机器指令,它执行一个或多个主要操作。 每条指令都做了很少的工作(比如相加两个数字),但处理器可以非常快速地完成它们,大约数十亿个每秒。在这些低级机器指令中编写程序将非常繁琐,因此我们通常使用 Python 等编程语言来简化我们的工作。 为了让您了解这些低级别的机器操作,请考虑以下简单赋值语句。 total = cost + tax即使是这么简单的事情也需要处理器执行多个低级指令。处理器必须在内存中查看"cost"和"tax"的值,相加这两个值,然后将结果存储到内存中与"total"相关联的地址。 操作顺序除非相反地给出,否则处理器一个接一个地执行指令。 例如,给定以下伪代码序列,处理器将执行赋值语句,然后执行打印。 cost = 100.0tax = 8.1total = cost + taxprint(total)# 108.1使用食谱烹饪时,我们熟悉按顺序执行一系列操作的概念。例如,食谱可能会指导我们: 将食材放入碗中将成分混合在一起倒入烤盘以 375 度烘烤 40 分钟我们自然地假设步骤按执行顺序给出。 条件执行一些食谱给出了条件指令,例如 如果不够甜,加一些糖 类似地,处理器可以有条件地执行一个或一组操作。 x = -3if x<0: x = 0 print("was negative")print(x)'''was negative0'''仅当条件表达式为真时才执行条件运算。 为清楚起见,处理器不执行程序中存在的所有操作。 将现实问题映射到条件语句时,您的目标是识别以下关键元素: 条件表达式如果它为真,所执行的操作条件执行的模板如下所示: if condition: operation 1 operation 2 ...该条件必须可由计算机操作。例如,条件“猫饿了”不可由计算机操作,因为计算机无法在其内存中测试任何等同于猫饿了的内容。条件几乎总是由算术的相等或关系运算符组成,例如cost > 10,cost + tax < 100或quantity == 4。 ...

July 2, 2019 · 3 min · jiezi

USF-MSDS501-计算数据科学中文讲义-24-Python-中的编程模式

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Programming Patterns in Python 译者:飞龙 协议:CC BY-NC-SA 4.0 现在我们已经了解了计算机如何组织数据,并进行一些低级编程操作,现在让我们看一些常见的高级编程模式。 每一个这些操作都有一个使用条件和循环模式的实现,我们可以使用 python 语法很容易地表达。我们也可以使用现有的库函数来实现相同的功能,我们也将探索它们。 当我们进行时,你会发现程序设计和编程是一个单词关联的游戏。 高级操作(例如map)应该在您的脑海中触发伪代码(类似英语的“代码”)的循环模板,然后应该触发for-each Python 代码模板。 请记住,我们通过选择和应用操作来设计程序,而不是特定的代码序列。编程是设计过程中的最后一步,我们在这里获得可执行文档。因此,直观地思考如何操作数据列表,或从数据中提取信息。我经常把事情画出来或者把它们放到电子表格中,来帮助我想象。在纸上手动移动一些数据有助于我理解要执行的操作。 在设计了高级操作的序列或组合之后,我们可以用伪代码或直接使用 Python 语法来写出东西。随着您获得更多经验,从操作直接转到代码将更容易,但我们仍然在使用操作而不是代码来设计程序。对于复杂的问题,尽管有 35 年以上的编程经验,我仍然写出伪代码。 编程模式选择程序的整体计划时,程序员从一组模式或模板中提取。个别行动本身也是如此。程序员有一个常见操作目录,他们在选择计划步骤时依赖他。 毫无疑问,您熟悉以下操作: 求和列表中的数字计数列表中的数字但我们可以将这些进一步抽象为: 查找满足条件的列表中的所有值对列表中的每个元素应用操作......操作越抽象,它就越广泛适用。我们使用的操作类型部分取决于程序员的风格,但很大程度上受编程语言的能力及其预先存在的功能库的影响。 数据练习在我们浏览这些材料时,我们将做几个小练习。 请将此 Python 代码剪切并粘贴到您正在使用的笔记本中。 请尝试在不查看练习描述正下方的解决方案的情况下进行练习。 UnitPrice = [38.94, 208.16, 8.69, 195.99]Shipping = [35, 68.02, 2.99, 3.99, 5.94, 4.95, 7.72, 6.22]names=['Xue', 'Mary', 'Bob']Oscars = [ [1984, "A Soldier's Story", 0], [1984, 'Places in the Heart', 0], [1984, 'The Killing Fields', 0], [1984, 'A Passage to India', 0], [1984, 'Amadeus', 1], [1985, "Prizzi's Honor", 0], [1985, 'Kiss of the Spider Woman', 0], [1985, 'Witness', 0], [1985, 'The Color Purple', 0], [1985, 'Out of Africa', 1]]Quantity = [6, 49, 27, 30, 19, 21, 12, 22, 21]A = [ [1, 3, 10], [4, -9, 0], [2, 5, 8]]B = [ [7, 4, 0], [4, 3, 1], [1, 6, 8]]first=['Xue', 'Mary', 'Robert']last=['Li', 'Smith', 'Dixon']累积让我们从一个非常简单但非常常见的模式开始,称为累积。该模式遍历一系列元素并累积一个值。例如,为了对序列中的数字求和,我们使用带有+运算符的累加器运算。当我们遍历序列时,我们更新一个初始化为 0 的流动总和: ...

July 2, 2019 · 7 min · jiezi

USF-MSDS501-计算数据科学中文讲义-12-Python-工具的初次尝试

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:A first taste of Python tools 译者:飞龙 协议:CC BY-NC-SA 4.0 加载命令行应用启动Terminal.app(Mac)或任何bash 终端,shell,它是 UNIX 风格的命令行提示符程序。你应该看到一个闪烁的光标和一个$提示符: $ 上面的$符号只是提示,终端正在等待您输入内容。执行命令后,您将再次看到$提示符。 命令行是一个非常低级的接口,用于与计算机的操作系统进行通信。您可以将终端视为诊断计算机,机械师可以将其插入汽车中,来获取控制权。仪表板类似于我们大多数时候使用的窗口图形界面。成为一名程序员就像成为一名机械师;有时你需要更强大但更复杂的工具来操作机器。 你应该或多或少总是运行一个命令行 shell,以防你需要做一些低级别的事情。机械师在他或她开始工作时所做的第一件事,就是连接诊断计算机。你也应该这样。 命令行实际上是一个完整的编程语言,包含循环和所有内容,但大多数时候我们只是执行命令。命令具有参数,就像编程语言中的函数调用具有参数一样。以下是如何在命令行打招呼: $ echo "hello"hello$ 通过按返回键终止命令。 echo命令类似于 Python 代码中的print命令。 执行该命令后,提示符将返回,指示您可以键入另一个命令。 我们可以做很多事情; 这是另一个: $ dateWed Jul 12 14:18:51 PDT 2017我们可以将一个参数传递给命令(类似 Python 中的函数调用): $ date "+%Y-%m-%d"2018-07-08这是一个很酷的例子,来自命令行的循环检查所有.md文件(你不需要在实验中运行这个文件;我只是在这里展示): $ for f in *.md; do echo $f; doneaws.mdbash-intro.mdcombinations.mdcomplexity.mdcomputation.mddata-in-memory.mddata.mdfiles.mdgit.mdoperations.mdplanning.mdprogramming.mdreading-code.mdsqrt.md环境健全性检查在命令行中,键入以下命令以验证您是否可以访问python3: $ which python3/Users/parrt/anaconda3/bin/python3或者,更好的是,确保默认的 Python 是版本 3: $ which python/Users/parrt/anaconda3/bin/pythonPython 程序应该在 Anacondabin(二进制)目录中,该目录包含所有二进制可执行文件。如果你没有在which命令的输出中看到 anaconda,你需要查看 Anaconda 的文档,并找出你没有运行适当的 Python 的原因。(很可能你的PATH环境变量有问题。)现在可以使用任何 3.X 版本的 Python 运行了。 ...

July 2, 2019 · 2 min · jiezi

USF-MSDS501-计算数据科学中文讲义-13-播放声音

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Playing sounds 译者:飞龙 协议:CC BY-NC-SA 4.0 本实验的目标是让您感到惊讶,您可以使用 Python 处理一些音频文件。您将无法获得所有详细信息,但您可以剪切并粘贴此实验来启动 Python 会话。作为次要目标,您将习惯于安装 Python 包和命令行工具。 首先,下载以下两个音频文件,以便我们拥有一些要处理的原材料。 来自 Kiss by Prince的初始序列,Kiss.aiffahhh 声音,ahhh.mp3我建议你将它们存储在如下目录中: /Users/YOURID/msan501/labs/sound 其中YOURID是您的计算机登录名。 例如,我的登录名是parrt。在 Linux 上它会像: /home/YOURID/msan501/labs/sound 安装命令行工具事实证明,我们将在 Python 中使用的声音库,不知道如何处理 mp3 文件。 我们需要将ahhh.mp3文件转换为ahhh.wav,这些库知道如何处理它。 为此,我们将使用名为 mpg123 的工具。 要在 Mac 上安装大多数免费软件,我们使用一个名为 homebrew(家酿啤酒)的程序(从命令行访问只是brew)。它可能已预先安装在您的计算机上,但如果没有,请阅读说明并进行安装。这是一个切割和粘贴以/usr/bin/ruby...开头的单行的问题 一旦安装完毕,我们就可以用它来安装mpg123。 从终端运行以下brew命令,该命令应该给出指示的输出: $ brew install mpg123...==> Downloading https://homebrew.bintray.com/bottles/mpg123-1.25.0.el_capitan.bottle.tar.gz######################################################################## 100.0%==> Pouring mpg123-1.25.0.el_capitan.bottle.tar.gz==> Using the sandbox /usr/local/Cellar/mpg123/1.25.0: 26 files, 765.2KB在 Linux 上,mpg123 的安装是: sudo apt-get install mpg123或者: $ sudo yum install mpg123将mp3转换为wav文件现在,我们安装了 mpg123,我们可以使用它将.mp3转换为.wav文件。 使用cd(更改目录)命令进入保存ahhh.mp3文件的目录,并使用ls列出文件: ...

July 2, 2019 · 3 min · jiezi

Awesome-Data-Science-in-Python-一文整理Python常用数据科学第三方模块

1. 机器学习EDAlantern特征工程yellowbrickFeaturetools模型解释SHAPLime通用Scikit-learn自动化机器学习mljar-supervised2. 统计方法通用StatsModels:通用概率派Scipy:含常见分布、统计量计算pyro:基于pyTorch的通用统计模型库Edward:基于tensorflow的通用统计模型库贝叶斯PyStan:贝叶斯模型(stan实现)pymc3/pymc4(还在pre-release版本):贝叶斯模型(theano/tensorflow实现)3. 特殊算法集时间序列pyflux:实现常用时间序列模型Prophet:基于强解释的GAM(线性可加模型)生存模型Lifetimes聚类hdbscan网络networkXGBMCatBoost:对类别变量比较友好xgboostLightGBM4. 可视化plotnineSeabornplotlyaltair5. NLP通用spaCynltk主题模型gensim常用Embedded集fastText6. ETLbubbles7. 因果推理DoWhy8. 符号运算SymPy

June 16, 2019 · 1 min · jiezi

为什么我们需要更多数据科学领域的专家

当我与越来越多的数据科学和 "大数据" 社区合作时,我震惊地发现,大部分从业者基础都狭隘地集中在统计和计算专业知识上,并没有对正在研究的领域有扎实的基础。不管是政府机构,还是商业公司,许多岗位都有数据科学家的身影。我曾共事过的同事,多是从计算机科学或硬件科学领域开始他们的职业生涯。这种特定领域知识的缺乏如何影响当今的大数据和数据分析世界? 在我接触过的数据科学家中,极少数在他们目前研究的学科和领域拥有深厚的背景或严格的培训。与我合作过的许多组织中,数据科学家被视为即时问题解决者, 在组织的整个运作中快速移动,分析一个领域中的深层技术。然后第二天去解决在另一个完全不同的领域中出现的复杂问题。每天早上,数据科学者制作出电子报表,当天下午便会收到模型的结果,然而数据分析流程中的生产者和消费者之间几乎没有互动或沟通。 这造成了一种危险的情况,数据科学家往往不熟悉他们所使用的数据中的细微差别或他们所研究的领域的专业假设,并可能会无意中产生误入歧途的分析。这并不是说数据科学是一门糟糕的科学,而是数据分析只是一种工具,而不是某种形式的普遍真理。其实所有的数据都是一样,大量数据以及用于分析这些数据的统计方法、算法和软件包必须与无数潜在错误作斗争。 正如我在无数场合所指出的,挖掘数据和回答问题有很大的不同。任何给定的数据集都只是对实际情况的某一方面体现,但单一的数据集不可能提供了对所有现实存在的完美、全面和公正的体现。这意味着, 在分析数据方面,对自己正在关注的数据有任何了解远比拥有统计博士要重要得多。正如我去年为《卫报》撰写的文章那样,即使是像内特·西尔弗这样最著名的统计学家,也会对他们正在处理的数据做出错误的假设。 进行数据挖掘与进行其他领域的实验是一样的: 实验的实际执行是一个非常长的流程的最后阶段,即使在收集结果之后,仍然有一个漫长而详细的过程来验证结果。然而,我遇到的数据科学家很少接受过实验设计方面的严格培训,也很少有人完全理解和认可他们在分析的每个阶段所做的无数假设。 与任何实验一样, 数据分析有很长的流程,每个阶段都会对环境产生影响。首先是利用通过调查或传感器仪器新收集的数据或推特等存储库的现有数据收集数据。与任何实验一样,用于收集数据的仪器和收集数据的条件会对最终数据产生巨大影响,甚至有可能使数据捕捉感兴趣现象的能力消失。一旦收集到数据,就必须隔离收集环境的各种影响和偏见,以尝试清理数据和隔离错误。这可能需要规范化来处理随着时间的推移对集合环境的更改。有一系列的算法或统计方法用于清理和分析数据,但这些方法往往可能会对数据的组成做出假设,而这些假设可能不成立,可能需要替代方法对错误和噪声更加稳健。最后,分析的最终结果要求仔细考虑整个处理流程,以彻底消除假设所提议的结果以外的任何其他来源。 我所看到的数据科学往往从抓取任何最容易访问的数据集开始: 因此,驱动查找的基础数据更多的是基于哪些数据可以最快速地获得,而不是哪些数据实际上最能回答问题。一位域名专家可以告诉你, 从英语西方社交媒体平台挖掘直播流媒体视频可能不是评估偏远森林村观点的最佳方式,这个村庄只有一部太阳能非数据功能手机作为其唯一的手机与外界的联系。同样, 在一个没有移动数据渗透、只有功能手机的地区,很少有居民有手机。在打电话吃饭的手续上,使用开放餐桌餐厅预订来衡量疾病爆发可能不是一个可行的解决方案预订不是当地传统的一部分。然而,这两者都给我被要求审查的重大项目带来了严峻的惊喜。问题是,很少有数据科学项目涉及大量能够对数据选择过程进行这种检查和深入了解的领域专家。 也许接下来最关键的部分是: 验证和清洁。这就是领域专业知识对于验证当前数据是否可以转换为实际支持所需分析的内容更为关键的地方。例如, 我曾经被要求帮助监督一个按国家汇编失业数据的项目, 该项目可以追溯到几百年前。问题是, 每个国家对 "失业" 概念的定义都不同。有些人将所有失业者混为一谈, 而另一些人则将寻找的人与不找工作的人分开, 或将残疾人排除在外或包括残疾人、在家工作、社会福利收据、大学生等。这些定义往往会随着时间的推移而变化, 这意味着在一年的数据中, "失业" 可能只指一个国家的失业砖匠, 可能会将国家支持的福利领取者排除在另一个国家, 并可能包括所有个人, 包括所有个人全日制大学生在另一个, 然后改变第二年在一些国家, 但不是其他国家。这在比较需要对数据进行广泛研究和修补才能修复的国家时, 在数据中产生了非常奇怪的渗出和楼梯步进效应。 不幸的是, 很少有数据科学家在探索性和魔鬼的数据集分析方面接受过广泛的培训。他们经常会下载一个数据集, 阅读随数据所附的文档, 并完全根据文档所说的数据应该是什么样子进行分析。当然, 在现实生活中, 数据很少与文档完全匹配。也许最著名的是, 在创建广泛报道的2012年全球推特心跳分析时, 我们发现, 当时的文档和其他数据科学家提供的公共统计数据表明, 推特数据所包含的数据不到1% 的地理标记推特。然而, 当我对 Twitter Decahose 进行各种模式和异常的初步扫描时, 一个早期的发现是, iPhones 将其地理位置信息存储在一个没有记录和非标准的字段中, 这在推特中增加了1%可用的地理位置信息 (推特规模的大量信息)。虽然有几篇奇怪的论文评论说, 在这里和那里看到了一些奇怪的数据点, 但没有人坐下来, 带着完整的推特数据, 在上面进行详尽的扫描, 寻找任何与文件不同的东西, 或者是像奇怪的一样突出的东西,如 JSON 工程中的技术错误等。 也许最致命的是, 我所遇到的数据科学家很少有在理解规范化和测量对结果的影响方面有过广泛的培训或背景, 从调查设计和管理到错误的数字精度。随着时间的推移, 几乎所有数据集的可用性和准确性都呈指数级增长, 尤其是在后数字时代。无论是看失业数据, 还是看提及特定主题的新闻文章数量, 任何数据集中捕捉到的现实的基本观点都不是静态的: 它是高度流动和动态的, 往往以非常非线性的方式变化。这就需要广泛的领域知识来了解数据集是如何编译的, 以及它所测量的字段或现象的功能和细微差别。 ...

June 12, 2019 · 1 min · jiezi

数据科学家常犯的10个编程错误附解决方案

作者:Norman Niemer Norman Niemer是一家大规模资产管理公司的首席数据科学家,他在其中发布数据驱动的投资见解。他有哥伦比亚大学的金融工程专业理学硕士学位,和卡斯商学院(伦敦)的银行与金融专业理学学士学位。 本文为Norman Niemer资深数据科学家为大家罗列的10个常见错误及其解决方案。 数据科学家是“比软件工程师更擅长统计学,比统计学家更擅长软件工程的人”。许多数据科学家都具有统计学背景,但是在软件工程方面的经验甚少。我是一名资深数据科学家,在Stackoverflow的python编程方面排名前1%,并与许多(初级)数据科学家共事。以下是我经常看到的10大常见错误,本文将为你相关解决方案: 不共享代码中引用的数据 对无法访问的路径进行硬编码 将代码与数据混合 在Git中和源码一起提交数据 编写函数而不是DAG 写for循环 不编写单元测试 不写代码说明文档 将数据保存为csv或pickle文件 使用jupyter notebook 1. 不共享代码中引用的数据 数据科学需要代码和数据。因此,为了让别人可以复现你的结果,他们需要能够访问到数据。道理很简单,但是很多人忘记分享他们代码中的数据。 解决方案:使用d6tpipe(https://github.com/d6t/ d6tpipe)来共享你的代码中的数据文件、将其上传到S3/web/google驱动等,或者保存到数据库,以便于别人可以检索到文件(但是不要将其添加到git,原因见下文)。 2. 对无法访问的路径进行硬编码 与错误1相似,如果你对别人无法访问的路径进行硬编码,他们将无法运行你的代码,并且必须仔细查看代码来手动更改路径。令人崩溃! 解决方案:使用相对路径、全局路径配置变量或d6tpipe,使你的数据易于访问。 d6tpipe: https://github.com/d6t/d6tpip 3. 将代码与数据混合 既然数据科学的代码中包含数据,为什么不把它们放到同一目录中?那样你还可以在其中保存图像、报告和其他垃圾。哎呀,真是一团糟! 解决方案:将你的目录进行分类,比如数据、报告、代码等。请参阅Cookiecutter Data Science或d6tflow项目模板[见#5],并使用#1中提到的工具来存储和共享数据。 Cookiecutter Data Science: https://drivendata.github.io/cookiecutter-data-science/ d6tflow项目模板: https://github.com/d6t/d6tflow-templat 4. 在Git中和源码一起提交数据 现在,大多数人对他们的代码使用版本控制(如果你不使用,那就是另外一个错误,请参阅git:https://git-scm.com/)。在尝试共享数据时,很容易将数据文件添加到版本控制中。当文件很小时是可以的,但是git并没有针对数据进行优化,尤其是大文件。 解决方案:使用第1点中提到的工具来存储和共享数据。如果你真的希望对数据进行版本控制,请参阅d6tpipe,DVC和Git大文件存储。 d6tpipe: https://github.com/d6t/d6tpipe DVC: https://dvc.org/ Git大文件存储: https://git-lfs.github.com 5. 编写函数而不是DAG 关于数据部分已经够多了,现在来谈一谈实际的代码!在学习编程时最先学习的内容之一就是函数,数据科学代码通常由一系列线性运行的函数组成。 这会导致一些问题,请参阅“为什么你的机器学习代码可能不好的4个原因”: https://github.com/d6t/d6t-python/blob/master/blogs/reasons-why-bad-ml-code.rst 解决方案:数据科学代码不是一系列线性连接的函数,而是一组具有依赖关系的任务集合。请使用d6tflow或airflow。 d6tflow: https://github.com/d6t/d6tflow-template airflow: https://airflow.apache.org 6. 写for循环 与函数类似,for循环也是你学习编程时最初学习的内容。它们易于理解,但是运行缓慢且过于冗长,通常意味着你不了解矢量化的替代方案。 解决方案:Numpy,scipy和pandas为你需要for循环的情况提供了矢量化函数。 Numpy: ...

June 3, 2019 · 1 min · jiezi

ApacheCN-编程大数据数据科学人工智能学习资源-20196

Special Sponsors 我们组织了一个开源互助平台,方便开源组织和大 V 互相认识,互相帮助,整合资源。请回复这个帖子并注明组织/个人信息来申请加入。请回复这个帖子来推荐希望翻译的内容。如果大家遇到了做得不错的教程或翻译项目,也可以推荐给我们。我们会联系项目的维护者,一起把它变得更好。我们的公众号接受大家的投稿。将文章链接通过消息发给公众号,我们会和你联系。我们近期有制作 Kaggle 教学视频的计划,如果你有兴趣参与,请联系片刻(QQ 529815144)。为了能够将开源事业做大做强,ApacheCN 需要与公益基金会(IT、教育类)合作,欢迎大家提供帮助。如果你不希望再收到我们的邮件,请在这里添加你的邮箱来退订。开源不是一个人的事情,我们的各个模块(请见组织架构)都需要人手来维护。如果你有兴趣参与,请联系片刻(QQ 529815144)。权限分配灵活,能者居之。特色项目AILearning - 机器学习实战 文字教程教学版视频讨论版视频Kaggle 学习系列视频简历分享系列视频AI 路线图(知识树)Machine Learning Mastery 博客文章翻译PyTorch 0.2/0.3/0.4/1.0 中文文档和教程人工智能/机器学习/数据科学比赛系列 Kaggle 项目实战教程:文档 + 代码 + 视频数据科学比赛收集平台LeetCode,HackRank,剑指 offer,经典算法实现斯坦福 AI 系列笔记 斯坦福 CS229 机器学习中文笔记DeepLearning.ai 深度学习中文笔记UCB CS/DS 系列课本 UCB CS61a 课本:SICP Python 描述UCB CS61b 课本:Java 中的数据结构UCB Data8 课本:计算与推断思维UCB Prob140 课本:面向数据科学的概率论UCB DS100 课本:数据科学的原理与技巧Numpy 技术栈中文文档 NumPy 中文文档Pandas 中文文档Matplotlib 中文文档Sklearn 0.19 中文文档statsmodels 中文文档seaborn 0.9 中文文档Girls In AI:面向编程零基础女孩子的AI算法工程师养成计划Daily Interview - 人工智能面经编程语言Java Java 编程思想Java 8 简明教程Java 从0~1个人笔记Java8 中文官方教程Python ...

June 1, 2019 · 2 min · jiezi

基于机器学习的信用卡之行为评分卡是如何建立的

作者:余子娟,CDA L3 数据科学家学员 & CDA L2持证人,专注于金额科技领域,为银行赋能,助力银行信用卡中心全生命周期经营问题。 身处互联网金融时代,信用无处不在。为对客户进行一个优质与否的评判,使用信用评分,对客户实行打分制成为当前风控领域的难点。而基于机器学习的信用评分卡则是其中关键的环节。 信用评分卡分为A卡(Application scorecard)、B卡(Behavior scorecard)和C卡(Collection scorecard)。A卡是申请评分卡,用于贷前审批阶段对借款申请人的量化评估;B卡为行为评分卡,用于贷后管理,通过借款人的还款及交易行为,结合其他维度的数据预测用户是否会逾期;C卡即催收评分卡,用于催收管理,在借款人当前还款状态为逾期的情况下,预测未来该笔贷款变为坏账的概率。 本文就带大家揭秘信用卡风控评分体系之行为评分卡是如何建立的? 客户信息涉及很多因素,因此敏感信息已在之前脱敏。 目标通过某银行客户的个人基本资料、过去的信用数据及交易资料,依循评分卡建模的步骤,分析归纳出好客户和坏客户的特征,并建立一个客户是否会持续逾期的评分卡预测模型。 步骤对客户交易数据结合还款情况进行数据处理;使用机器学习构建B类评分卡,并对模型进行评价;再由新样本集对评分卡进行测试,并输出验证结果。数据我使用了Kaggle的多个数据集,Kaggle数据集链接: https://www.kaggle.com/yuzijuan/behavior-scorecard 其中m0_200411.txt为训练集,m0_200412.txt为测试集,TXN_DATA.TXT为交易数据集,MccCode.csv为交易码。 代码我将本文涉及到的代码全部放在github项目集中。 https://github.com/ICBC-123/scorecard 环境和工具: Jupyter notebook 、Pandas、Numpy、woebin、var_filter、perf、scorecard、splitdf(后5个为自有评分卡程序) 数据处理1.训练集处理首先对数据集中不同类别变量进行数据探索,查看了数据的分布情况。 训练集中PAY_COND(缴费状态码)是可加工的变量,从24位缴费状态中可以获得: 每三个月的逾期次数,形成一个6位数的变量,例如012121;获取最大逾期月份,最小为0,最大为9;获得客户的使用月份数和实动月份数代码实现如下: 账单金额、缴费金额及归属额度是可加工的变量: 近6个月各月的额度使用率近6个月各月的还贷比,由于还贷比分布不均,将头尾取[-2,2]作为截断。 2.交易数据集处理交易数据集共计1886.8万笔,有8个交易属性,可加工较多变量: 月均消费次数月均消费金额月均入账次数月均入账金额笔均消费金额交易月份数…… 交易数据集中有MccCode,可以和客户目标属性结合,得到客户高中低风险交易占比。 高风险交易占比中风险交易占比低风险交易占比风险程度来源:先将训练集与交易数据按照ID匹配,求每个客户不同交易类别的交易数量和交易占比;再求得坏客户的交易数占总交易的占比为风险切分点,高于该占比15%的交易类别为高风险类别,低于该占比15%的为低风险类别;最后将各个风险类别对应的风险程度代入交易数据,求得每个客户高中低风险交易占比。 最终形成了基本特征、交易特征、信用卡特征及其衍生变量共计53个指标。 建立评分卡依据根据CRISM-DM数据挖掘理论,设计模型建立步骤,通过数据检验、数据初筛、分箱及计算WOE、IV筛选,最终建模及评分卡。 数据检验对已处理好的数据集进行数据检验,包括缺失程度、单变量检验、超多分类检验、异常值、空值填充及正负样本平衡检验。本案例中正负样本比为1:3,由于是金融领域逾期类问题,现实中并不认为这个比例属于不平衡样本,一般样本比例小于1:5,需要进行不平衡类问题处理。常用欠采样、过采样或混合采样来填充样本浓度,预测结果不可直接应用,排序之后可用顺序结果应用于实际。 分箱及计算WOE分箱其实是当前信用卡风险领域较为困难的操作,如何合理分箱是数据处理之外较难的话题。本案例的分类变量是按照将多个类别合并为一类分箱再计算WOE的,连续数据是有监督分箱,按照CART分类树最优分箱计算各变量的WOE。随机选取WOE值查看如下: 可以看到逾期最大月份的IV值较高,坏样本在不同分类上的区隔较大;归属额度的WOE呈现明显的单调,表明这个变量对结果的贡献较大,变量越重要。 而从这四个变量可知,坏样本在不同分类上的区隔不大,WOE值在水平线左右小幅度浮动,表明这个变量对结果的贡献不大,变量不算重要。 分箱代码如下: 建立评分卡计算出IV值后,由于该模型变量较多,可以选择筛选掉IV小于0.02的变量,剩余37个变量输入模型。并将数据字典保存成文件,用于后续预测调用使用。 按照7:3生成训练集和测试集,计算出各个变量的WOE后用WOE值替换原始数据,并计算各个变量之间的相关性。 ...

May 24, 2019 · 1 min · jiezi

USF-MSDS501-计算数据科学中文讲义翻译完成

原文:parrt/msds501译者:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 机器学习交流群 629470233ApacheCN 学习资源<!-- break --> 在线阅读PDF格式EPUB格式MOBI格式代码仓库目录USF MSDS501 计算数据科学中文讲义一、起步 1.1 一些动机(音频处理)1.2 Python 工具的初次尝试1.3 播放声音二、设计和构建程序 2.1 编程导论2.2 在内存中表示数据2.3 计算模型2.4 Python 中的编程模式2.5 数据别名2.6 使用函数组织你的代码2.7 如何阅读代码2.8 面向对象编程三、关键编程模式 3.1 加载文件3.2 数据帧3.3 操纵和可视化数据四、用于计算和优化的迭代式方法 4.1 生成均匀的随机数4.2 近似平方根4.3 单变量梯度下降五、常见编程工具 5.1 使用 bash 走向胜利5.2 使用 git 版本控制工具5.3 在 Amazon Web Services 上启动虚拟机六、可选 6.1 链表赞助我

May 9, 2019 · 1 min · jiezi

数据科学从业者常见的不良小习惯

文章选自:Medium 作者:Norm Niemer 京东云开发者社区编译数据科学家是“比任何软件工程师都更擅长统计数据,比统计学家更擅长软件工程的一批人”。许多数据科学家都有统计学背景,同时也有着一些软件工程方面经验。我是一名在Stackoverflow上使用Python代码排名前1%的高级数据科学家,并与许多(初级)数据科学家们一起工作。在这个过程中,我发现大家其实都或多或少有着一些不太好的小习惯,以下是我列出的10个数据科学从业者常见的不良习惯列表。 1.没有共享代码中引用的数据数据科学需要代码和数据,这点毋庸置疑。因此,如果别人要查证到你的结果,他们就需要访问数据。这看起来似乎很基本,但很多人都会忘记共享他们代码中引用数据。 1import pandas as pd2df1 = pd.read_csv('file-i-dont-have.csv') # fails3do_stuff(df)解决方案:使用d6tpipe(https://github.com/d6t/d6tpipe)来共享您的代码数据文件或将其上传到S3/Web/Google Drive等,或者保存到数据库也可以。这样做的目的在于可以便于大家进行文件检索。(Notice:但不要将它们添加到Git,详情见下文)。 2.硬编码无法访问的路径与错误1类似,如果您的硬编码路径别人无权访问,那他们则无法运行您的代码并且必须查看许多地方以手动更改路径。????????????! 1import pandas as pd2df = pd.read_csv('/path/i-dont/have/data.csv') # fails3do_stuff(df)4# or 5impor os6os.chdir('c:\\Users\\yourname\\desktop\\python') # fails解决方案:使用相对路径、全局路径配置变量或用d6tpipe使您的数据易于访问。 3.将数据与代码混在一起有人会问,由于数据科学代码需要数据,因此为什么不将它们转存到同一目录中呢?但这也意味着,当你在使用它的时候,你的图像、报告和其他垃圾也都会存在里面。Emm……可以说是一团糟呢! 1├── data.csv2├── ingest.py3├── other-data.csv4├── output.png5├── report.html6└── run.py解决方案:将您的目录进行分类,如数据、报告、代码等。具体请参阅Cookiecutter Data Science或d6tflow项目模板(https://github.com/d6t/d6tflo...)。(可用本文第1点中提到的工具来存储和共享数据。) 4. 使用Git提交源代码数据大多数人现在用版本控制系统来管理他们的代码(如果你不这样的话,那将会是另一个错误!!????)。在尝试共享数据时,可能很容易将数据文件添加到版本控制中。这对于非常小的文件是可以的,但是git没有针对数据进行优化,尤其是大文件。 1git add data.csv解决方案:建议使用第1点中提到的工具来存储和共享数据。如果您真的想要版本控制系统来数据,请参阅d6tpipe,DVC和Git大文件存储。 5.编写函数而不是DAGs聊完数据相关的内容后,让我们来谈谈实际的代码部分!由于您在学习编码时学到的第一件事就是函数,因此数据科学代码主要被组织为一系列线性运行的函数。 1def process_data(data,parameter):2 data = do_stuff(data)3 data.to_pickle('data.pkl')4data = pd.read_csv('data.csv')5process_data(data)6df_train = pd.read_pickle(df_train)7model = sklearn.svm.SVC()8model.fit(df_train.iloc [:,:- 1],df_train [ 'Y'])解决方案:数据科学代码不是线性地链接函数,而是更好地编写为一组具有它们之间依赖关系的任务。 6.写入循环与函数一样,for循环是学习编码时学到的第一件事。这个东西不难理解,但它们很慢而且过于冗长,如果你使用他们,通常就表明你并没有发现矢量化的替代方案。 1x = range(10) 2avg = sum(x)/len(x); std = math.sqrt(sum((i-avg)**2 for i in x)/len(x)); 3zscore = [(i-avg)/std for x] 4# should be: scipy.stats.zscore(x) 5# or 6groupavg = [] 7for i in df['g'].unique(): 8 dfg = df[df[g']==i] 9 groupavg.append(dfg['g'].mean())10# should be: df.groupby('g').mean()解决方案:Numpy,Scipy和Pandas为您认为可能需要循环的大多数情况提供了矢量化函数,可随时进去拽去您需要的。 ...

May 7, 2019 · 1 min · jiezi

2019年最新的机器学习项目

翻译:疯狂的技术宅原文:https://www.edureka.co/blog/m...更多文章请关注微信公众号:硬核智能 机器学习显然是一个在近几年里疯狂进步的领域。这一趋势和进步为该行业创造了许多就业机会。对机器学习工程师的需求很高,这种激增是由于技术的发展和巨大的产生数据量大数据。在本文中,我将按以下顺序讨论你绝对应该知道和使用的机器学习项目: 什么是机器学习?机器学习的步骤机器学习的类型行业用例2019年开源机器学习项目什么是机器学习?机器学习是一个概念,它允许机器从示例和经验中进行学习,而且不用去明确的进行编程。因此你不是去写代码,而是需要将数据提供给通用算法,算法或机器会根据给出的数据构建逻辑。 机器学习的步骤任何机器学习算法都遵循一个共同的模式或步骤: 收集数据:此阶段涉及从各种来源收集所有相关数据 数据处理:对“原始数据”进行清洗并转换为方便处理的格式的过程 分析数据:通过分析对数据进行选择和过滤,以准备模型所需的数据 训练算法:算法在训练数据集上进行训练,通过该算法理解数据的模式和规则 测试模型:通过测试数据集来检测所生成模型的准确性。 部署:如果模型的速度和准确性是可接受的,那么该模型应该被部署在真实系统中。在根据其性能部署模型之后,如果性能下降,模型将会被重新训练,然后更新和改进模型。 机器学习的类型机器学习分为三类: 监督学习:使用算法来学习从输入变量(x)到输出变量(Y)的映射函数。 无监督学习:有时候给出的数据是非结构化和未标记的。所以很难把这些数据分到不同的类别中。无监督学习有助于解决这个问题,它利用基于统计的特性将输入的数据进行聚类。 强化学习:为了在特定情况下得到最大化奖励而采取适当的行为。 在强化学习方面,并没有预期的产出。在执行给定任务时由增强代理决定要采取的操作。在没有训练数据集的情况下,从其经验中学习。 接下来让我们看一些能够帮助公司创造利润的真实机器学习项目。 行业用例1. MOTION STUDIO领域:媒体 焦点:优化选择过程 业务挑战: Motion Studio 是欧洲最大的无线广播节目制作公司。该公司的年收入超过十亿美元,他们决定推出一个新的真人秀节目:RJ Star。观众们对节目的反响是史无前例的,公司收到了大量的语音片段。作为 ML 专家,你必须将声音分类为男性或女性,以便能够更快的进行初选流程。 关键问题:语音样本的音调。 商业利益:由于 RJ Star 是一个真人秀,选择候选人的时间非常短。整个节目的成功和利润取决于是否能够快速和顺利的执行。 import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inlineimport warningswarnings.filterwarnings('ignore')df = pd.read_csv('voice-classification.csv')df.head() # Check the no. of recordsdf.info() df.describe() df.isnull().sum() print ("Shape of Data:" , df.shape)print("Total number of labels: {}".format(df.shape[0]))print("Number of male: {}".format(df[df.label == 'male'].shape[0]))print("Number of female: {}".format(df[df.label == 'female'].shape[0])) ...

April 29, 2019 · 3 min · jiezi

用-Matplotlib-库生成动画图表

翻译:疯狂的技术宅https://towardsdatascience.co... 更多文章请关注微信公众号:硬核智能 动画是一种展示现象的有趣方式。相对于静态图表,人类总是容易被动画和交互式图表所吸引。在描述多年来的股票价格、过去十年的气候变化、季节性和趋势等时间序列数据时,动画更有意义,因为我们可以看到特定的参数是怎样随时间变化的。 上面的图是雨滴的模拟并且已经使用 Matplotlib 库实现,该库是一个广为人知的祖父级别的 python 可视化包。 Matplotlib 通过对 50 个散点的比例和透明度进行设置来模拟雨滴。今天,Python 拥有大量强大的可视化工具,如 Plotly、Bokeh、Altair等等。这些库能够实现最先进的动画和交互特性。尽管如此,本文的目的是强调这个库的另一个方面,这个方面没有人进行过太多的探索,这就是动画。 概述Matplotlib 是一个广受欢迎的 Python 2D 绘图库。很多人都是从 Matplotlib 开始数据可视化之旅的。可以使用matplotlib轻松生成图表、直方图、功率谱,条形图,错误图表,散点图等。它还与 Pandas 和 Seaborn 等库无缝集成,创造出更加复杂的可视化效果。 matplotlib 的优点是: 它的设计类似于 MATLAB,因此很容易在在两者之间切换。在后端进行渲染。可以重现任何图表(需要一点努力)。已经存在了十多年,拥有庞大的用户群。然而,也有一些方面 Matplotlib 落后于同类的库。 Matplotlib 有一个过于冗长的规则 API。有时候风格很差。对 Web 和交互式图表的支持不佳。对于大型复杂数据而言通常很慢。这份复习资料是来自 Datacamp 的 Matplotlib 小抄,你可以通过它来提高自己的基础知识。 动画Matplotlib 的 animation 基类负责处理动画部分。它提供了一个构建动画功能的框架。使用下面两个接口来实现: FuncAnimation 通过重复调用函数 func 来产生动画。ArtistAnimation: 动画使用一组固定的 Artist 对象。但是,在这两个接口中,FuncAnimation 是最方便使用的。你可以通过阅读文档 得到的更多信息,因为我们只关注 FuncAnimation 工具。 要求安装 numpy 和 matplotlib 。要将动画保存为 mp4 或 gif,需要安装 ffmpeg 或 imagemagick。准备好之后,我们就可以在 Jupyter note 中开始创建第一个动画了。可以从 Github 得到本文的代码。 ...

April 26, 2019 · 3 min · jiezi

像数据科学家一样思考:12步指南(下)

摘要: 数据科学家思维到底是什么样的?这篇文章告诉你!像数据科学家一样思考:12步指南(上)像数据科学家一样思考:12步指南(中)第三阶段-完成一旦产品构建完成,你仍然需要做一些事情来使项目更加成功并使你的未来生活更轻松。那么我们如何完成数据科学项目呢?10-交付产品完成阶段的第一步是产品交付。为了创建可以交付给客户的有效产品,首先必须了解客户的观点。其次,你需要选择最佳的方式将项目成果反馈给客户。最后,你必须选择要包含在产品中的信息和结果以及要放弃的内容。在产品创建和交付过程中做出好的选择可以大大提高项目的成功机会。沟通媒介可以采取多种形式。在数据科学中,产品最重要的一个方面是客户是否积极参与产品并且能够使用产品来回答多种可能的问题。具体的沟通媒介有很多方式:向客户提交结果可能是最简单的选项,其中包括文本、表格、图表和其他信息,这些信息可以解决你的项目要回答的部分或全部问题。在一些数据科学项目中,数据集的分析和结果也可用项目原始数据范围之外的数据,其中可能包括原始数据生成的数据、其他不同来源的类似数据、或由于某种原因尚未分析的其他数据。在这种情况下,如果你可以为客户创建可以执行分析新数据集并生成结果的分析工具,对客户有所帮助。同时客户可以有效地使用此分析工具,并继续在将来和各种(但类似的)数据集中回答他们的主要问题,这是最好的情况。如果你想提供比分析工具更好的产品,你可能需要构建某种类型的完整的应用程序。如果你正在考虑提供交互式图形应用程序,那么你必须设计,构建和部署它。通常,这些都不是一项小任务。如果你希望应用程序具有许多功能并且具有灵活性,那么设计它并构建它将变得更加困难。除了决定提供结果的媒介外,你还必须决定它将包含哪些结果。有些结果和内容可能是包含的明显选择,但对于其他信息位,可能不那么明显。通常,你希望包含尽可能多的有用信息和尽可能多的结果,但你希望避免客户可能误解或误用你选择包含的结果。在许多情况下,这可以是微妙的平衡,并且它在很大程度上取决于具体项目以及客户和其他人对结果的知识和经验。11-进行修订产品交付后,我们会在初步反馈后继续修改产品。一旦客户开始使用该产品,就有可能出现一系列全新的问题。尽管你付出了最大努力,但你可能没有预料到客户使用产品的方式的各个方面。即使产品完成了它应该做的事情,你的客户和用户也可能不会做这些事情并且有效地完成这些工作。通常很难从客户、用户或其他任何人那里获得建设性的反馈。因此一些数据科学家提供完产品后就会忘记它们,一些数据科学家提供产品后会选择等待客户提供反馈。进行产品修订可能会非常棘手,找到合适的解决方案和实施策略取决于你遇到的问题类型以及你需要更改以解决问题的方法。如果在整个项目过程中,你始终保持对不确定性和许多可能结果的认识,那么你发现自己现在面临的结果与你之前预期的结果不同可能就不足为奇了。但是,如果你一直勤奋,问题很小,修复相对容易。一旦你发现产品出现问题并弄清楚如何修复产品,仍然需要决定是否修复产品。一些人最初的倾向是每个问题都需要解决,这不一定是真的。如果有理由可以说服你不想进行修复问题,那就需要慎重考虑了,因为如果选择盲目地修复发现的每个问题,那一定会花费大量的时间和精力。12-结束项目数据科学过程的最后一步是将其包装起来。随着数据科学项目的结束,似乎所有的工作都已完成,剩下的就是修复任何剩余的错误,然后才能完全停止思考并继续下一个。但在完成项目调试之前,你可以采取一些措施来增加未来成功的机会,无论是扩展同一个项目还是完全不同的项目。现在有两种方法可以增加你未来成功的机会。一种方法是确保在将来的任何时候你都可以轻松地再次获取该项目并重做、扩展或修改它。通过这样做,你将增加在后续项目中获得成功的机会,所以,你需要从现在开始开始挖掘项目材料和代码并记下你用什么做的或者你是怎么做到的。最实用的方法是通过文档和存储。提高未来项目成功率的第二种方法是尽可能多地从这个项目中学习,并将这些知识带到每个未来的项目中。通过进行项目分解,你可以从中梳理出有用的知识,这包括审查旧目标、旧计划、技术选择、团队协作等。是否可以应用于未来项目,通过项目回溯在事后进行思考,可以帮助发现有用的知识,使你能够以不同的方式做事,并在下次更好。不确定性充斥在我们每个人工作的方方面面,记住过去给你带来问题的所有不确定因素,可以防止类似的事情再次发生。从数据到分析再到项目目标,几乎任何事情都可能在短时间内发生变化。了解所有可能性不仅是一项艰巨的挑战,而且几乎是不可能的。良好的数据科学家和伟大的数据科学家之间的区别在于能够预见可能出现的问题并做好准备。结论数据科学仍然具有新领域的光环。它的大多数组成部分:统计学、软件开发、基于证据的问题解决等等,这些可能是属于旧领域的知识,但数据科学似乎是这些部分的新组合成新的东西。数据科学的核心并不关心特定的数据库实现或编程语言,即使这些对于从业者来说是必不可少的,其核心应该是数据内容,给定项目的目标以及用于实现这些目标的数据分析方法之间的相互作用。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 17, 2019 · 1 min · jiezi

Python 数据科学基础知识

翻译:疯狂的技术宅原文:https://towardsdatascience.co…Python 数据类型在 Python 中有许多数据类型。最常见的是float(浮点型),int(整型),str(字符串),bool(布尔),list 和 dict(字典)。float - 用于表示实数。int - 用于表示整数。str - 表示文本。可以使用单引号 ‘value’ 、双引号 “value” 或三引号 “““value””” 来定义字符串。三引号字符串可以用在多行文本上,还可以用于注释。bool - 用于布尔值。list - 用于存储值的集合。dict - 用于存储键值对。可以用 type(variable_name) 函数来检查特定变量的类型。 Python 中的运算符根据变量的类型而表现不同,每个运算符都有不同的内置方法。下面是在 Python 中创建浮点数、整数、字符串和布尔值变量的例子。year_of_birth = 1994height_cm = 170.50subject = “Data Science"is_success = Trueprint(type(year_of_birth), type(height_cm), type(subject), type(is_success))# 输出: <class ‘int’> <class ‘float’> <class ‘str’> <class ‘bool’>Python 列表Python 列表是一种基本的序列类型。我们可以使用此类型来存储值的集合。一个列表可以包含任何类型的值,同时一个列表也可以包含另一个列表进行嵌套。你也可以创建一个混合使用 Python 类型的列表,不过这并不常用。可以使用如下方法创建一个列表:fruits = [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”]列表子集可以用索引从列表中获取单个或多个元素。在Python中,索引从 0 开始。因此,列表中的第一个元素对应索引 0。我们还可以使用负索引来访问元素,列表中的最后一个元素的索引为 -1,倒数第二个元素的索引是 -2,依此类推。我们在Python中也有一个名为 切片 的东西,可用于从列表中获取多个元素。可以这样使用: sliceable[start_index:end_index:step]。start_index 是切片的起始索引,此索引所在的元素包含在结果中,默认值为 0。end_index 是切片的结束索引,此索引处的元素不会被包含到结果当中,默认值将是列表的长度。此外,如果 step 为负值,则默认值可以是 负的列表的长度 - 1。如果跳过此步骤,你会得到从开始索引到结尾的所有元素。step 是索引增加的数量,默认值为 1。如果把 step 设为负值,会从后向前移动。fruits = [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”]fruits[1] # applefruits[0] # “pineapple"fruits[-1] # “kiwi"fruits[5] # “kiwi"fruits[-3] # “strawberry”# List slicingfruits[::] # [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”]fruits[0:2] # [“pineapple”, “apple”]fruits[-2:-1] # [“orange”]fruits[3:] # [“strawberry”, “orange”, “kiwi”]fruits[:4] # [“pineapple”, “apple”, “lemon”, “strawberry”]fruits[:] # [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”]fruits[::-1] # [“kiwi”, “orange”, “strawberry”, “lemon”, “apple”, “pineapple”]fruits[::-2] # [“kiwi”, “strawberry”, “apple”]fruits[::2] # [“pineapple”, “lemon”, “orange”]# Understanding some default valuesfruits[0:6:1] # 与fruits[::]的结果相同fruits[-1:-7:-1] # 与fruits[::-1]的结果相同操作列表可以用 append 方法或 + (加法运算符)将单个或多个元素添加到列表当中。如果你对两个列表使用加法运算符,Python 将给出两个列表合并后的新列表。可以用方括号来修改列表中的单个或多个元素。可以用 remove(value) 方法从列表中删除一个元素。此方法用参数传入的值删除列表中存储的第一个相同元素。# 添加一个元素fruits.append(“peach”)fruits #输出 [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”, “peach”]fruits = fruits + [“fig”, “melon”]fruits #输出 [“pineapple”, “apple”, “lemon”, “strawberry”, “orange”, “kiwi”, “peach”, “fig”, “melon”]# 修改fruits[0:2] = [“grape”, “mango”]fruits #输出 [“grape”, “mango”, “lemon”, “strawberry”, “orange”, “kiwi”, “peach”, “fig”, “melon”]# 从列表中删除fruits.remove(“mango”)fruits #输出 [“grape”, “lemon”, “strawberry”, “orange”, “kiwi”, “peach”, “fig”, “melon”]了解列表背后的工作机制非常重要。当创建新列表 my_list 时,列表会存储在计算机内存中,该列表的地址被存储在 my_list 变量中。变量 my_list 不包含列表中的元素,它只包含对列表的引用。如果我们用等号去复制一个列表时,比如 my_list_copy = my_list,你复制的只是列表的引用而不是列表的值。所以如果要复制列表实际的值,可以用 list(my_list) 函数或切片 [ : ]。numbers = [10, 42, 28, 420]numbers_copy = numbersnumbers_copy[2] = 100numbers # [10, 42, 100, 420]numbers_copy # [10, 42, 100, 420]ratings = [4.5, 5.0, 3.5, 4.75, 4.00]ratings_copy = ratings[:]ratings_copy[0] = 2.0ratings # [4.5, 5.0, 3.5, 4.75, 4.0]ratings_copy # [2.0, 5.0, 3.5, 4.75, 4.0]characters = [“A”, “B”, “C”]characters_copy = list(characters)characters_copy[-1] = “D"characters # [“A”, “B”, “C”]characters_copy # [“A”, “B”, “D”]Python字典字典用于存储键值对形式的数据。当你希望通过唯一键对值进行索引时很有用。在 Python 中,可以使用花括号创建字典,键和值由冒号分隔。如果想获得给定键的值,可以这样做:our_dict[key]。字典与列表让我们看一个例子,比较一下列表和词典。假如有一些电影,我们想存储它们的评级,另外还希望通过电影名称来非常快速地访问电影的评级。这时可以用两个列表或一个字典来完成这类操作。在例子中,movies.index(“Ex Machina”)代码返回电影 “Ex Machina” 的索引。使用列表movies = [“Ex Machina”, “Mad Max: Fury Road”, “1408”]ratings = [7.7, 8.1, 6.8]movie_choice_index = movies.index(“Ex Machina”)print(ratings[movie_choice_index]) # 7.7使用字典ratings = { “Ex Machina”: 7.7, “Mad Max: Fury Road”: 8.1, “1408” : 6.8}print(ratings[“Ex Machina”]) # 7.7可以看出,使用字典更加直观和方便。操作字典可以对词典中的数据进行添加,更新和删除操作。当添加或更新数据时,可以简单地使用 our_dict[key] = value,想要删除一个键值对时,可以用 del(our_dict[key]) 操作。ratings[“Deadpool”] = 8.0print(ratings) # {‘Ex Machina’: 7.7, ‘Mad Max: Fury Road’: 8.1, ‘1408’: 6.8, ‘Deadpool’: 8.0}ratings[“Ex Machina”] = 7.8print(ratings) # {‘Ex Machina’: 7.8, ‘Mad Max: Fury Road’: 8.1, ‘1408’: 6.8, ‘Deadpool’: 8.0}del(ratings[“1408”])print(ratings) # {‘Ex Machina’: 7.8, ‘Mad Max: Fury Road’: 8.1, ‘Deadpool’: 8.0}还可以检查给定的键是否在字典中:key in our_dict。print(“Ex Machina” in ratings) # True函数函数是解决特定问题的可重用代码。可以用 def 关键字编写函数:def is_prime(n): if n <= 1: return False elif n <= 3: return True elif n % 2 == 0 or n % 3 == 0: return False current_number = 5 while current_number * current_number <= n: if n % current_number == 0 or n % (current_number + 2) == 0: return False current_number = current_number + 6 return True不过 Python 中有许多内置函数,例如 max( iterable[,key] ),min( iterable [,key] ),type( object ),round( number[,ndigits] ) 等。所以当我们需要一个解决某个问题的函数时,可以先研究一下是否存在相关的内置函数或 Python 包。没有必要去“重新发明轮子”。方法我们已经知道 Python 中有字符串,浮点数,整数,布尔值等类型。这些数据结构都是一个对象。方法是一种可用于给定对象的函数,具体取决于对象的类型。所以每个对象都有一个特定的类型和一组方法,具体形式取决于给出的类型。# 字符串方法text = “Data Science” text.upper() # “DATA SCIENCE"text.lower() # “data science"text.capitalize() # “Data science”# 列表方法numbers = [1, 4, 0, 2, 9, 9, 10]numbers.reverse()print(numbers) # [10, 9, 9, 2, 0, 4, 1]numbers.sort()print(numbers) # [0, 1, 2, 4, 9, 9, 10]# 字典方法ratings = { “Ex Machina”: 7.7, “Mad Max: Fury Road”: 8.1, “1408” : 6.8}print(ratings.keys()) # dict_keys([‘Ex Machina’, ‘Mad Max: Fury Road’, ‘1408’])print(ratings.values()) # dict_values([7.7, 8.1, 6.8])print(ratings.items()) # dict_items([(‘Ex Machina’, 7.7), (‘Mad Max: Fury Road’, 8.1), (‘1408’, 6.8)])不同类型的对象可以有相同名称的方法。根据对象的类型,方法有各自不同的行为。numbers = [10, 30, 55, 40, 8, 30]text = “Data Science"numbers.index(8) # 4text.index(“a”) # 1numbers.count(30) # 2text.count(“i”) # 1务必要小心!某些方法可以更改调用它们的对象。例如在列表类型上调用append()方法时。包模块是包含 Python 定义和声明的文件。用于定义解决特定问题的函数、方法和新的 Python 类型。包是模块的集合。有许多 Python 包涵盖了不同领域的解决方案。例如,NumPy、matplotlib、seaborn 和 scikit-learn 是非常着名的数据科学支持包。NumPy 用于有效地处理数组matplotlib 和 seaborn 是流行的数据可视化库scikit-learn 是一个功能强大的机器学习库默认情况下,Python 中有一些内置包,但是我们还需要更多的包,这些默认是不安装的。如果想要使用某个软件包,它就必须是已经安装好的,或者先用 pip 安装( Python的包管理系统 )。另外,还有一种叫做Anaconda 的东西。Anaconda Distribution 是一个免费,易于安装的包管理器、环境管理器和 Python 发行版,其中包含1,000多个开源软件包,并提供免费的社区支持。所以如果你不想安装太多的包,我建议你用 Anaconda。这个发行版中有很多有用的包。导入声明安装所需的包后,可以把它们导入 Python 代码文件。可以从中导入整个包、子模块或特定函数。另外还可以为包设置别名。可以从下面的例子中看到 import 语句的不同方式。简单的导入import numpynumbers = numpy.array([3, 4, 20, 15, 7, 19, 0])导入的同时设置别名import numpy as np # np 是 numpy 包的别名numbers = np.array([3, 4, 20, 15, 7, 19, 0]) # 工作正常numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出错,NameError: name ’numpy’ is not defined从包导入子模块并设置别名# 从 matplotlib 包中导入 pyplot 子模块并设置别名 “plt"import matplotlib.pyplot as plt仅从包中导入一个函数from numpy import arraynumbers = array([3, 4, 20, 15, 7, 19, 0]) # 工作正常numbers = numpy.array([3, 4, 20, 15, 7, 19, 0]) # 出错,NameError: name ’numpy’ is not definedtype(numbers) # 输出:numpy.ndarray我们也可以这样导入: from numpy import *。星号表示从该模块导入所有内容。这条 import 语句会在当前命名空间中为 numpy 模块定义的所有公共对象创建引用。换句话说,我们可以使用 numpy 中的所有可用函数,在函数名称可以不带前缀。例如,现在我们可以这样使用 NumPy 的绝对值函数: absolute(),而不是numpy.absolute()。但是,我不建议你使用它,因为:如果从某些模块中导入所有函数,那么当前的命名空间将填充过多的函数,如果有人查看我们的代码的话,他可能会对某个函数到底属于哪个包而感到困惑。如果两个模块具有相同名称的函数,则第二个导入的将会覆盖第一个模块的函数。NumPyNumPy 是用 Python 进行科学计算的基础包。它非常快速且易于使用。这个包能够帮助我们按元素进行计算(逐个元素)。常规的 Python 列表不知道如何以元素方式进行操作。当然我们也可以用 Python 列表去做科学计算,但是它非常慢,而且还需要编写更多的代码来得到想要的结果。更多时候使用 NumPy 才是一个聪明的主意。与常规 Python 列表不同,NumPy 数组中的元素总是只有一种类型。如果我们将一个不同类型的数组传递给np.array(),可以用参数 dtype 设定想要的类型。如果没有给出此参数,则会将类型确定为保存对象所需的最小类型。NumPy 数组 —— 类型转换np.array([False, 42, “Data Science”]) # array([“False”, “42”, “Data Science”], dtype="<U12”)np.array([False, 42], dtype = int) # array([ 0, 42])np.array([False, 42, 53.99], dtype = float) # array([ 0. , 42. , 53.99])# 无效的类型转换np.array([False, 42, “Data Science”], dtype = float) # 不会把字符串 ‘Data Science’ 转化为浮点型NumPy 数组有自己的属性和方法。你是不是还记得前面说过 Python 运算符在不同的数据类型上表现也不一样?在NumPy 中运算符在这方面表现得很好。NumPy 数组上的运算符np.array([37, 48, 50]) + 1 # array([38, 49, 51])np.array([20, 30, 40]) * 2 # array([40, 60, 80])np.array([42, 10, 60]) / 2 # array([ 21., 5., 30.])np.array([1, 2, 3]) * np.array([10, 20, 30]) # array([10, 40, 90])np.array([1, 2, 3]) - np.array([10, 20, 30]) # array([ -9, -18, -27])如果检查 NumPy 数组的类型,结果会是 numpy.ndarray。 ndarray 意味着是 n 维数组。在前面的例子中用了一维数组,但是也可以使用 2, 3, 4 甚至更多维数组。我们可以在数组上进行子集化,而这与该数组的维数无关。下面是一些二维数组的例子。二维数组的子集numbers = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])numbers[2, 1] # 8numbers[-1, 0] # 10numbers[0] # array([1, 2, 3])numbers[:, 0] # array([ 1, 4, 7, 10])numbers[0:3, 2] # array([3, 6, 9])numbers[1:3, 1:3] # array([[5, 6],[8, 9]])如果想要知道一个 numpy 数组有多少个维度,以及每个维度有多少个元素,可以用 shape 属性。下面的代码得到二维数组的shape,返回的元组中的第一个元素是行数,第二个元素是列数。NumPy 的 shape属性numbers = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])numbers.shape # (5, 3)基本统计分析数据的第一步是熟悉数据。 NumPy 有一些基本方法来帮助我们做到这一点。np.mean() - 返回算术平均值(元素之和除以元素的个数)。np.median() - 返回中位数(传入的数组的中间值,如果数组的长度是偶数,将计算两个中间值的平均值)np.corrcoef() - 返回一个相关矩阵。当我们想要查看数据集中两个变量之间是否存在相关性时,或者在两个具有相同长度的数组之间存在相关性时,这个函数非常有用。np.std() - 返回标准偏差learning_hours = [1, 2, 6, 4, 10]grades = [3, 4, 6, 5, 6]np.mean(learning_hours) # 4.6np.median(learning_hours) # 4.0np.std(learning_hours) # 3.2np.corrcoef(learning_hours, grades) # 输出:[[ 1. 0.88964891][ 0.88964891 1. ]]使用 NumPy 生成基本统计信息从上面的例子中,我们可以看到学习时间和成绩之间存在高度相关性。此外还可以看到:学习时间的平均值是 4.6学习时间的中位数为 4.0学习时间的标准差为 3.2NumPy 还有一些基本函数,如 np.sort() 和 np.sum() ,在基本的 Python 列表中也有同样的函数。不过需要注意的是 NumPy 在数组中会强制统一类型,这加快了计算速度。 ...

April 15, 2019 · 5 min · jiezi

像数据科学家一样思考:12步指南(上)

摘要: 数据科学家思维到底是什么样的?这篇文章告诉你!文中可获得免费电子书地址!介绍目前,数据科学家正在受到很多关注,因此,有关数据科学的书籍正在激增。我看过很多关于数据科学的书籍,在我看来他们中的大多数更关注工具和技术,而不是数据科学中细微问题的解决。直到我遇到Brian Godsey的“像数据科学家一样思考”,它讨论了哪些工具最有用以及为什么,但主要目标是在智能,高效和成功的情况下完成数据科学工程,以解决实际数据中心问题的解决方案。数据科学项目的生命周期在书中,Brian提出数据科学项目包括3个阶段:第一阶段是准备阶段:在项目开始时收集信息所花费的时间和精力可以避免以后的麻烦。第二阶段是构建产品:从规划到执行,使用你在准备阶段学到的知识以及可以用的所有工具。第三阶段即将完成:交付产品,获得反馈,进行修订,产品运维以及完成项目。从图像中可以看出,这3个阶段包含12个不同的任务。我想用这篇文章总结这12个步骤,因为我相信任何有抱负的数据科学家都可以从熟悉它们中受益。第一阶段:准备数据科学项目始于准备。你需要建立你所知道的、拥有的、能得到什么、你在哪里以及你想成为什么样。最后一个是最重要的,数据科学项目需要有目的和相应的目标。只有当你有了明确的目标时,才能开始调查可用资源以及实现这些目标的所有可能性。1-设定目标数据科学项目与许多其他项目一样,主要目标应在项目开始时设定。在设定目标后,你所做的所有工作都是利用数据、统计数据和编程来实现这些目标。首先,数据科学的每个项目都是有一个“客户”的。有时,“客户”是向你或你的企业支付费用的人,例如,客户或承包代理商。在学术界,“客户”可能是一位要求你分析数据的实验室科学家。有时,“客户”是你的老板或其他同事。无论“客户”是谁,他们都会对可能从你那里得到的东西抱有一些期望。为了理解这些期望,你需要对“客户”提供的数据提出好的问题。提出好的问题是一项重要且微妙的挑战,因为改变世界的是问题。在他们的假设中好的问题是具体的,但好的答案是可衡量的而且不必要太多的成本。虽然有时候好问题、相关数据或富有洞察力的分析比其他要素更容易获得,但这三者对于获得有用的答案至关重要。任何旧问题,数据和分析的产品并不总是一个答案。值得注意的是,你需要在项目的每个步骤中都要深思熟虑,而且关键性的要素必须存在。例如,如果你个好问题但不相关的数据,则很难找到答案。开始的时候是在数据和答案的背景下评估项目目标的好时机。通常,初始目标的设定需要考虑一些商业目的。如果你不从事商业活动,例如,你正在进行研究,那么目的通常是对结果进行一些外部使用,例如在特定领域中推进科学知识或为其他人提供分析工具。虽然目标源于项目本身的背景,但每个目标都应该通过基于数据科学的实用过滤器来实现。此过滤器包括以下几个问题:(1)有什么可能?(2)什么是有价值的?(3)什么是有效的?将此过滤器应用于好问题、可能的答案、可用数据和可预见的障碍,可以帮助你实现一系列可靠、有价值且高效的项目目标。2-探索数据数据科学项目准备阶段的第二步是探索现有数据。下图显示了数据科学家可能访问数据的3种基本方式。数据可以是文件系统上的文件,数据科学家可以将文件读入他们最喜欢的分析工具中。数据也可以在数据库中,数据库也在文件系统上,但是为了访问数据,数据科学家必须使用数据库的接口,这是一个帮助存储和提取数据的软件层。最后,数据可能位于应用程序编程接口(API)之后,API是数据科学家与某些系统之间的软件层。熟悉数据可能需要接触到表单以及如何查看和操作这些表单,以下是其中一些:平面文件(csv,tsv)、HTML、XML、JSON、关系数据库、非关系数据库、API。有时你无法决定选择哪种格式,数据会以你想象不到的格式出现,但你必须处理它。如果你发现某个格式效率低下、笨拙或不受欢迎,你可以尝试设置可能使事情变得更容易的辅助数据存储格式,但需要花费大量时间和精力来设置辅助数据商店。但对于访问效率至关重要的应用程序而言,这个成本是值得的。对于较小的项目,也许不是。当你到达那里时,你必须越过那座桥。现在你已经了解了常见的数据形式,你需要对它们进行侦察。以下是你应该考虑的方法:Google搜索,组合不同的数据源,从网络爬虫或自行收集它们。就个人而言,我是网络爬虫的忠实粉丝。Web scraper必须做的两件重要事情是以编程方式访问大量URL并从页面中捕获正确的信息。如果你想在Facebook上了解你的朋友网络,理论上可以编写一个脚本来访问所有朋友的Facebook个人资料,保存个人资料页面,然后解析这些页面以获取他们的朋友列表,访问他们的朋友配置文件等等。3-数据整理第三步是数据整理,就是将困难、非结构化或其他任意格式获取数据和信息转换为传统软件可以使用的内容的过程。整理不是一项任务,并不可以事先准确地规定步骤,因为每个案例都不同,需要解决的问题也不一样。在整理之前,好的整理归结为可靠的计划,然后进行一些猜测和检查,看看哪些有效,花费一点时间进行数据整理可以为你减少很多痛苦。通常,数据整理计划的选择应在很大程度上取决于你在首次调查数据时发现的信息。如果你可以想象解析数据或以某种假设的方式访问它,你可以尝试编写一个执行操作的脚本。数据整理是一个不确定的过程,因此最好先探索一下,然后根据你所看到的内容制定整理计划。没有一种方法或一种工具可以实现使混乱数据清洁的目标。市面上有许多工具可以做很多事情,但没有一个工具能够处理任意格式数据。数据以如此多的形式存在,并且出于不同的目的,甚至目前没有一个应用程序能够以任意目的读取任意数据。简而言之,数据整理是一个不确定的事情,需要在特定情况下使用特定工具来完成工作。你可以尝试使用文件格式转换器或专有数据管理器并编写脚本来处理数据。4-评估数据在开发以数据为中心的产品之前,了解数据内容值得花费一点时间和精力。如果你对数据有更多了解,你将在整个数据科学项目的每一步做出更明智的决策,并在获益到最后。如果没有初步的评估,你可能会遇到异常值、偏差、精、特异性或数据其他固有的问题。为了更好地发掘这些数据并更好地了解数据,整理数据后的第一步应该是计算一些描述性统计数据。描述性统计是定量描述信息集合的主要特征或定量描述本身的学科。考虑描述、最大值、最小值、平均值、数据集的摘要。如果不提及推论统计数据,通常很难讨论描述性统计数据。推论统计是指你在没有完全统计数据的情况下得出的结论。对于数据集,你可以说以下内容:描述性统计数据:“我有什么?”推论统计数据:“我能得出什么结论?”大多数统计学家都认为推论统计数据可以得到大部分很酷的结论:当世界人口达到峰值然后开始下降时,病毒流行病的传播速度有多快;当股市上涨时,人们是否会在Twitter上对一个主题有一般积极或消极的情绪等等。而描述性统计在使这些结论成为定论方面起了非常重要的作用。总之,了解你拥有的数据以及它可以为你做些什么是值得的。使用描述性统计信息,你可以在数据集中找到与特定概念描述匹配的实体。如果你从事在线零售业务,你可能会将客户视为你的实体,并且你希望识别那些可能购买特定作者新书的。如果你在金融领域工作,你可能会在股票市场上寻找即将上涨的股票。如果可以对这些特征进行简单搜索,那么工作就很容易,你不需要数据科学或统计数据。但是,如果这些特征并不是所有数据固有的。第二阶段-建设在询问了一些问题并设定一些目标后,你调查了数据世界,整理了一些具体数据,并了解了这些数据。在每一步中,你都学到了一些东西,现在你应该能够回答在项目开始时提出的一些问题。现在让我们进入建设阶段。5-制定计划第五步是制定计划。与早期的规划阶段一样,不确定性和灵活路径应该是你的首要考虑因素。你现在对你的项目了解了更多,所以之前存在的一些不确定因素已不复存在,但某些新的不确定因素已经出现。把你的计划想象成一条通往城市的试验性路线,这条城市的街道正在不断建设中。你知道你想去哪里以及去往那里的几种方法,但是在每个十字路口都可能有道路封闭、交通不畅或人行道坍塌和破碎。当你遇到这些障碍时,你必须做出决定,但是现在只需要一两个备用计划就足够了。如果给了新信息或新约束或其他原因,计划和目标可随时改变。你必须向与项目有关的每个人(包括客户)传达重大更改信息。该项目的客户对项目的最终产品具有既得利益,因此应该让客户了解目标的任何变化。客户可能也对进度报告感兴趣,包括你到目前为止的初步结果以及如何获得它们,但这些是最低优先级。关注客户关心的事情:客户是整个项目的核心,它们希望我们实现什么,他们到底关心什么,知道这些很重要。如果他们的目标错误,及时的沟通很重要。在此阶段与客户会面的唯一必须结论是,你清楚地沟通新目标是什么以及他们批准这些目标。你也可以考虑将你的基本计划传达给客户,特别是涉及使用他们的资源时,例如数据库、计算机和其他员工,他们会有兴趣了解你将如何以及使用它们的程度。6-分析数据第六步是数据的统计分析。统计方法通常被认为是进行良好数据科学所需技能和知识的近一半或三分之一,另一大部分是软件开发,剩下的较小部分是主题或领域专业知识。统计学的一方面是数学,另一方面是数据。数学 ,尤其是应用数学,我们需要通过一组工具提供统计数据,以便进行分析和解释。无论如何,数学通常不会触及现实世界,它完全是基于逻辑并始终从一组假设开始,每个数学陈述都可以用if开头(如果假设是真的),这可以将语句及其结论提升为抽象性。这并不是说数学在现实世界中没用,恰恰相反数学而不是科学,更多的是我们可以用来描述事物的词汇。其中一些可能在现实世界中与词汇表包含的单词一样,但很少有描述完全正确。然而,数学确实提供了统计使用的大量基础。统计分布通常由复杂的方程式描述,其根源在实际的科学意义上是有意义的。拟合统计模型通常是使用数学优化技术,即使假设项目数据所在的空间也必须用数学方法描述,描述可能仅仅是“N维欧几里德空间”。除数学外,统计学还拥有一套专属的以数据为中心的技术。描述性统计是一种通常直观或简单的统计数据,可以提供对数据的良好概述,不会过于复杂或难以理解。在某种意义上,描述性统计通常与数据保持接近。推理统计本质上是从数据中删除的一个或多个步骤。推断是基于可测量的相关量来估计未知量的过程。通常,推论统计涉及统计模型,该模型定义数量,可测量和不可测量,以及它们彼此之间的关系。推论统计的方法可以从简单到复杂,也可以在抽象性和可解释性方面有所不同。统计建模是使用描述性统计系统后使用模型来帮助分析和解释与系统相关数据的一般实践。描述性和推论性统计都依赖于统计模型,但在某些情况下,模型本身的明确构造和解释起次要作用。通过统计建模,主要关注的是理解模型及其描述的底层系统。数学建模是一个相关概念,它更强调模型构建和解释,而不是与数据的关系。统计建模侧重于模型与数据的关系,以下是你应该了解的统计建模中的一些重要概念:线性、指数、多项式、样条、微分、非线性方程;潜在变量;量化不确定性:随机性,方差和误差项;拟合模型:最大似然估计、最大后验估计、变分贝叶斯、马尔可夫链蒙特卡罗、过拟合。贝叶斯与频率统计;假设检验;聚类;成分分析;离原始数据最远的是一组统计技术,通常称为黑盒方法。机器学习和人工智能的许多方法都是黑盒方法。如果你尝试将出现在数据集中的个体分类为几个类别,并且你应用机器学习技术(如随机森林或神经网络),事后往往很难说为什么是以某种方式分类。数据进入黑匣子,分类出来,最后你通常不能解释两者之间究竟发生了什么。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

April 12, 2019 · 1 min · jiezi

ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.4

我们是一个大型开源社区,旗下 QQ 群共 9000 余人,Github Star 数量超过 20k 个,网站日 uip 超过 4k,拥有 CSDN 博客专家和简书程序员优秀作者认证。我们组织公益性的翻译活动、学习活动和比赛组队活动,并和 DataWhale、LinuxStory 等国内著名开源组织保持良好的合作关系。 与商业组织不同,我们并不会追逐热点,或者唯利是图。作为公益组织,我们将完成项目放在首要位置,并有足够时间把项目打磨到极致。我们希望做出广大 AI 爱好者真正需要的东西,打造真正有价值的长尾作品。【主页】apachecn.org【归档】home.apachecn.org【社区】bbs.apachecn.org【Github】@ApacheCN自媒体平台微博:@ApacheCN知乎:@ApacheCN公众号:@ApacheCNCSDN | OSChina | 博客园简书 | 搜狐号 | bilibili 专栏We are ApacheCN Open Source Organization, not ASF! We are fans of AI, and have no relationship with ASF!合作 or 侵权,请联系 <apachecn@163.com> | 请抄送一份到 <wizard.z@foxmail.com>特色项目AILearning - 机器学习实战文字教程教学版视频讨论版视频PyTorch 0.2/0.3/0.4/1.0 中文文档和教程Sklearn 与 TensorFlow 机器学习实用指南人工智能/机器学习/数据科学比赛系列Kaggle 项目实战教程:文档 + 代码 + 视频数据科学比赛收集平台LeetCode,HackRank,剑指 offer,经典算法实现Girls In AI:面向编程零基础女孩子的AI算法工程师养成计划司镜的数据结构课程(持续更新)UCB CS/DS 系列课本UCB CS61a 课本:SICP Python 描述UCB CS61b 课本:Java 中的数据结构UCB Data8 课本:计算与推断思维UCB Prob140 课本:面向数据科学的概率论UCB DS100 课本:数据科学的原理与技巧Numpy 技术栈中文文档NumPy 中文文档Pandas 中文文档Matplotlib 中文文档Sklearn 0.19 中文文档statsmodels 中文文档seaborn 0.9 中文文档编程语言JavaJava 编程思想Java 从0~1个人笔记后端/大数据Spark 2.2.0 中文文档Storm 1.1.0 中文文档Kafka 1.0.0 中文文档Beam 中文文档Zeppelin 0.7.2 中文文档Elasticsearch 5.4 中文文档Kibana 5.2 中文文档Kudu 1.4.0 中文文档Spring Boot 1.5.2 中文文档Airflow 中文文档HBase 3.0 中文参考指南Flink 1.7 中文文档工具Git 中文参考区块链Solidity 中文文档数学笔记MIT 18.06 线性代数笔记Python 数据科学NumPy 中文文档Pandas 中文文档Matplotlib 中文文档 |UCB Data8 课本:计算与推断思维UCB Prob140 课本:面向数据科学的概率论UCB DS100 课本:数据科学的原理与技巧利用 Python 进行数据分析 · 第 2 版fast.ai 数值线性代数讲义 v2Pandas Cookbook 带注释源码statsmodels 中文文档数据科学 IPython 笔记本seaborn 0.9 中文文档CS 教程LeetCode,HackRank,剑指 offer,经典算法实现GeeksForGeeks 翻译计划UCB CS61a 课本:SICP Python 描述UCB CS61b 课本:Java 中的数据结构数据结构思维中国大学 MOOC 计算机操作系统笔记简单数据结构实现司镜的数据结构课程(持续更新)AI 教程AILearning - 机器学习实战文字教程教学版视频讨论版视频Sklearn 与 TensorFlow 机器学习实用指南面向机器学习的特征工程Python 数据分析与挖掘实战(带注释源码)SciPyCon 2018 Sklearn 教程TensorFlow 学习指南fast.ai 机器学习和深度学习中文笔记HackCV 网站文章翻译台湾大学林轩田机器学习笔记Scikit-learn 秘籍写给人类的机器学习数据科学和人工智能技术笔记Girls In AI:面向编程零基础女孩子的AI算法工程师养成计划Machine Learning Mastery 博客文章翻译AI 文档Sklearn 0.19 中文文档PyTorch 0.2/0.3/0.4/1.0 中文文档和教程XGBoost 中文文档LightGBM 中文文档FastText 中文文档Gensim 中文文档OpenCV 4.0 中文文档AI 比赛Kaggle 项目实战教程:文档 + 代码 + 视频数据科学比赛收集平台其它独立开发/自由职业/远程工作资源列表通往财富自由之路精细笔记5 分钟商学院精细笔记翻译征集要求:机器学习/数据科学相关或者编程相关原文必须在互联网上开放不能只提供 PDF 格式(我们实在不想把精力都花在排版上)请先搜索有没有人翻译过请回复这个帖子。赞助我们 ...

April 3, 2019 · 1 min · jiezi

这些数据科学家必备的技能,你拥有哪些?

摘要: 想要成为数据科学家,没有这些技能怎么能行?1.教育背景88%的数据科学家受过高等教育且拥有硕士学位,其中46%拥有博士学位。虽然有些人是例外,但通常需要非常强大的教育背景才能拥有成为数据科学家所必需的知识深度。要想成为数据科学家,你可以先获得计算机科学、社会科学、物理科学和统计学的学士学位,最常见的是数学和统计学(32%),其次是计算机科学(19%)和工程学(16%),任何这些课程的学位都可以为你提供处理和分析大数据所需的技能。完成学位课程后,大多数数据科学家还进行在线培训,例如学习如何使用Hadoop或大数据查询等特殊技能。除课堂学习外,你还可以通过构建应用程序或探索数据分析来练习你在课堂上学到的知识,以便你了解更多信息。2.R编程对于数据科学家来说,R的至少是所有分析工具最应该深入了解工具,因为R专为满足数据科学需求而设计。你可以使用R来解决数据科学中遇到的任何问题,事实上,43%的数据科学家正在使用R来解决统计问题。然而,R有一个陡峭的学习曲线。如果你已经掌握了某种编程语言,那么就会更难学习。不过不要担心,互联网上还有很多资源可以帮助你开始使用R,例如Simplilearn的R编程语言数据科学培训,它是有抱负的数据科学家的重要资源。技术技能:计算机科学3.Python编码Python是适合数据科学家学习的一种优秀编程语言,也是我在数据科学角色中看到的最常见的编码语言,其中还有Java,Perl或C/C ++。O’Reilly曾经调查过数据科学家,调查的受访者中有40%使用Python作为他们的主要编程语言。由于python的多功能性,你可以将其用于数据科学过程中涉及的几乎所有步骤。它可以采用各种格式的数据,同时可以轻松地将SQL表导入代码中,并且还允许你创建数据集,这样你就可以在Google上找到所需的任何类型的数据集。4.Hadoop平台虽然这个不是硬性要求,但在许多情况下它是非常有用的,拥有Hive或Pig的经验也是一个很好的加分项。CrowdFlower对3490个LinkedIn上数据科学工作者进行的一项研究发现Apache Hadoop被评为数据科学家第二重要技能。作为数据科学家,你可能会遇到这样的情况,即你拥有的数据量超过系统内存或需要将数据发送到不同的服务器,这时Hadoop就能发挥其作用了。你可以使用Hadoop快速将数据传输到各种系统上的点。同时你还可以使用Hadoop进行数据探索、数据过滤、数据采样和汇总。5.SQL数据库/编码尽管NoSQL和Hadoop已经成为数据科学的一个重要组成部分,但大多数人还是希望能够在SQL中编写和执行复杂查询。SQL(结构化查询语言)是一种编程语言,可以帮助你执行添加,删除和从数据库中提取数据等操作。它还可以帮助你执行分析功能和转换数据库结构。作为数据科学家,你需要精通SQL,因为SQL可以专门用于帮助你访问和处理数据。当你使用它来查询数据库时你会发现,它简洁的命令可以帮助你节省时间并减少执行困难查询所需的编程量。学习SQL将帮助你更好地理解关系数据库并提升你作为数据科学家的形象。6.Apache SparkApache Spark正在成为全球最受欢迎的大数据技术。它就像Hadoop一样是一个大数据计算框架,唯一的区别是Spark比Hadoop更快。这是因为Hadoop需要读取和写入磁盘,这使得速度变慢,但Spark将其计算缓存在内存中。Apache Spark专为数据科学而设计,它可以帮助更快地运行复杂的算法。它还有助于数据科学家处理复杂的非结构化数据集,你可以在一台机器或一组机器上使用它。Apache spark使数据科学家能够防止数据科学中的数据丢失。Apache Spark的优势在于其速度和平台,这使得开展数据科学项目变得容易。借助Apache spark,你可以执行从数据采集到分布式计算的分析。7.机器学习和AI大量数据科学家并不精通机器学习领域和技术,这包括神经网络,强化学习,对抗性学习等。如果你想从其他数据科学家中脱颖而出,你需要了解机器学习技术,如监督机器学习、决策树、逻辑回归等。这些技能将帮助你解决基于主要组织结果预测的不同数据科学问题。数据科学需要应用于机器学习的不同领域。Kaggle在其中一项调查中发现,一小部分数据专业人员具备先进的机器学习技能,如监督机器学习、无监督机器学习、时间序列、自然语言处理、异常值检测、计算机视觉、推荐引擎、强化学习和对抗性学习。8.数据可视化商业世界经常产生大量数据,这些数据需要被翻译成易于理解的格式。与原始数据相比,人们可以更自然地以图表和图形的形式理解数据,常言道:“一张图片胜过千言万语”。作为数据科学家,你必须能够借助数据可视化工具(如ggplot,d3.js和Matplottlib以及Tableau)可视化数据。这些工具将帮助你将项目中的复杂结果转换为易于理解的格式。问题是,很多人不了解序列相关性或p值,你需要直观地向他们展示这些术语在结果中的表示。数据可视化使组织有机会直接处理数据,他们可以快速掌握并且帮助他们在竞争中抓住新商机。9.非结构化数据数据科学家能够处理非结构化数据至关重要。非结构化数据是未定义的内容,不适合数据库表,其中包括视频、博客文章、客户评论、社交媒体帖子、音频等。对这些类型的数据进行排序很困难,因为它们没有逻辑可言。由于其复杂性,大多数人将非结构化数据称为“黑暗分析”。使用非结构化数据可以帮助你揭示对决策有用的洞察力。作为数据科学家,你必须能够理解和操纵来自不同的平台的非结构化数据。非技术技能10.好奇心“我没有特殊才能。我只是充满好奇心。”-爱因斯坦。毫无疑问,你最近可能多次看到过这句话,因为它与数据科学家有关。一位资深数据科学家描述过它的含义,并在几个月前的博客中将其视为必要的“软技能。好奇心可以被定义为获得更多知识的愿望。作为数据科学家,你需要能够提出有关数据的问题,因为数据科学家花费大约80%的时间来发现和准备数据。这是因为数据科学领域是一个发展非常快的领域,你必须学习更多以跟上节奏。你需要通过在线阅读内容和阅读有关数据科学趋势的相关书籍来定期更新你的知识。不要被在互联网上飞来飞去的大量数据所淹没,你必须能够知道如何理解这一切。好奇心是成为数据科学家所需要的技能之一。例如,最初你可能没有太多了解你收集的数据。好奇心将使你能够筛选数据以查找答案和更多见解。11.商业头脑要成为一名数据科学家,你需要对你正在从事的行业有充分的了解,并了解贵公司正在努力解决的业务问题。在数据科学方面,除了确定企业应利用其数据的新方法之外,能够识别哪些问题对于业务而言至关重要是重要的。为了能够做到这一点,你必须了解你解决的问题如何影响业务。这就是你需要了解企业运营方式的原因,以便你可以将你的工作指向正确的方向。12.沟通技巧寻找强大数据科学家的公司正在寻找能够清晰流利地将技术发现转化为非技术团队的人员,例如市场营销部门或销售部门。数据科学家必须使企业能够通过量化的洞察力来制定决策,此外还要了解非技术同事的需求,以便恰当地纠正数据。除了说出公司理解的相同语言外,你还需要使用数据叙述进行沟通。作为数据科学家,你必须知道如何围绕数据创建故事情节,以便任何人都能轻松理解。例如,呈现数据表不如以叙事格式从这些数据中分享见解那样有效。使用讲故事将帮助你将你的发现正确地传达给你的雇主。沟通时,请注意嵌入在你分析的数据中的结果和值。大多数企业主不想知道你分析的内容,他们对如何积极地影响他们的业务感兴趣。学会专注于通过沟通提供价值和建立持久的关系。13.团队合作数据科学家不能单独工作,你不得不与公司高管合作制定战略,与产品经理和设计师一起创造更好的产品,还要与营销人员合作以推出更好的营销活动,最重要的还要与客户和服务器软件开发人员合作创建数据管道并改进工作流程,你必须与组织中的每个人(包括你的客户)合作。从本质上讲,你将与你的团队成员合作开发应用,以了解解决问题所需的业务目标和数据。你需要了解正确的方法来解决问题以及如何将结果转换并呈现给所有相关人员都能轻松理解的内容。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

March 26, 2019 · 1 min · jiezi

数据科学家为什要用Git?怎么用?

摘要:也许你在别的地方听说过Git。也许有人告诉过你,Git只适合软件开发人员。如果你是数据科学家,那么Git其实对你很重要。本文作者希望能够通过经验分享让你了解Git的重要性,以及如何在你的数据科学工作中使用它。什么是Git?Git是一个分布式版本控制系统,用于在软件开发期间跟踪源代码的更改。看看维基百科给出的这个定义,好像Git专门是为软件开发人员而设计的。实际上,Git是当今世界上使用最广泛的现代版本控制系统,它是以分布式的协作方式为项目(开源或商业)做出了伟大的贡献。除了分布式版本控制系统之外,Git的还考虑了性能、安全性和灵活性。现在你已经了解了Git是什么,但是你脑海中的问题可能是,“如果我是做数据科学项目的人,它与我的工作有什么关系?”以前我也一样不能理解Git的重要性,直到我开始在现实工作环境中,我才发现它时如此重要!为什么是Git?我们来谈谈为什么?一年前,我决定学习Git。我在Github上分享并发布了我的代码,这是我在CERN的论文项目。虽然很难理解Git中常用的术语(git-add、commit、push、pull等),但我知道这在数据科学领域很重要,这使我的数据科学工作比以往任何时候都更加充实。所以我保持学习状态,并坚持“committing”。当我加入我目前的公司时,我在Git方面的经验就派上了用场,因为Git是跨不同团队进行代码开发和协作的主要方式。更重要的是,当你的组织遵循敏捷软件开发框架时,Git尤其有用,在该框架中,Git的分布式版本控制使整个开发工作流更加高效、快速且易于适应变化。那么什么是版本控制呢?版本控制是一个系统记录一个文件或一组文件随时间的变化,以便你以后可以调用特定的版本。比如说,你是一个数据科学家,与一个团队合作,在这个团队中你和另一个数据科学家在构建机器学习模型的时候,对同一个特征进行工作。如果你对该特征做了一些更改并上传到远程存储库,并且这些更改与主分支合并,那么你的项目现在变成了1.1版本。另一位数据科学家也对版本1.1的相同功能进行了一些更改,新的更改现在与主分支合并。模型就变成1.2版本。在任何时候,如果你的团队发现版本1.2在发布期间有一些错误,他们随时可以调用以前的版本1.1,这就是版本控制的美妙之处。作为数据科学家如何使用Git?我们已经讨论过什么是Git及其重要性。现在的问题归结为:作为数据科学家如何使用Git?作为数据科学家,你不需要成为一个Git领域的专家。关键是要理解Git技术的工作流程以及如何在日常工作中使用Git。准确地说,我在这里使用的是Git Feature Branch Workflow,它通常被开源和商业项目使用。如果你想更多地了解这里使用的术语,点击这里进行了解。Git Feature Branch WorkflowFeature Branch Workflow像一个中央存储库,master分支代表正式的项目历史记录。开发人员每次开始处理一个新特性时,都会创建一个新的分支,而不是直接提交到他们的本地主分支上。新的分支可以(也应该)推送到中央存储库。在这种情况下,可以在不修改master分支的情况下与其他开发人员共享一个该分支。在开始执行任何操作之前,请键入git remote -v以确保工作区指向要使用的远程存储库。1、从主分支开始,创建一个新分支git checkout mastergit pullgit checkout -b branch-name如果总是维护和更新主分支,则切换到本地主分支,并将最新的提交和代码提取到本地主分支。假设你希望创建一个本地分支,向代码中添加一个新功能,并稍后上传到远程存储库。一旦你将最新的代码更新到本地master分支,我们就创建并checkout出一个名为branch-name的新分支,所有的更改都将在此本地分支上进行。这意味着你本地的master分支不会受到任何影响。2、更新、添加、提交并将更改推送到远程存储库git statusgit add <your-files>git commit -m ‘your message’git push -u origin branch-name上面我们做了很多操作,让我们详细了解它。一旦发生了一些更新,就将新的操作add到本地分支,并且希望将该操作上传到远程分支,以便合并到远程主分支。git status将输出你对文件的所有更改(跟踪或未跟踪)。在使用git commit-m“your message”提交消息更改之前,你将使用git add <your files>决定要暂存哪些文件。在此阶段,你的更改仅显示在本地分支中。为了使你的更改显示在BitBucket上的远程分支中,你需要使用git push -u origin branch-name命令进行提交。此命令将该分支推送到中央存储库,并且-u表示将其添加为远程跟踪分支。在设置了跟踪分支之后,可以在没有任何参数的情况下调用git push,以自动将新的功能分支推送到BitBucket上的中央存储库。3、创建pull请求现在你已经成功地添加了一个新功能并推送到远程分支。你为自己的贡献感到骄傲,你希望在将远程分支与远程主分支合并之前得到团队成员的反馈。在该分支合并到主分支之前,让其他团队成员有机会对其进行审查。你可以在BitBucket上创建pull请求。现在,你的团队成员已经查看了你的代码,并决定在代码可以合并到主代码库-master分支之前,需要你进行一些其他更改。git statusgit add <your-files>git commit -m ‘your message’git push现在,你可以按照与之前相同的步骤进行更改、提交并最终将更新推送到中央存储库。一旦使用了git push,你的更新将自动显示在pull请求中。如果其他人已将目标更改为你所接触的同一代码,则会发生合并冲突,这在工作中很常见。你可以在这里看到如何解决合并冲突。一旦一切顺利完成,这些功能将会合并到master分支中。当我第一次开始学习Git时,我感到非常沮丧,因为我仍然没有真正理解工作流。这也是写这篇文章的主要原因之一,它真正分解并在更高层次的理解上向你解释工作流程。因为我相信,对工作流程中发生的事情有一个清晰的了解将使学习过程更加有效。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

March 25, 2019 · 1 min · jiezi

seaborn 0.9 文档翻译活动期待大家的参与~

参与方式:https://github.com/apachecn/s…整体进度:https://github.com/apachecn/s…项目仓库:https://github.com/apachecn/s…贡献指南请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)负责人:飞龙:562826179章节列表An introduction to seabornInstalling and getting startedVisualizing statistical relationshipsPlotting with categorical dataVisualizing the distribution of a datasetVisualizing linear relationshipsBuilding structured multi-plot gridsControlling figure aestheticsChoosing color palettesseaborn.relplotseaborn.scatterplotseaborn.lineplotseaborn.catplotseaborn.stripplotseaborn.swarmplotseaborn.boxplotseaborn.violinplotseaborn.boxenplotseaborn.pointplotseaborn.barplotseaborn.countplotseaborn.jointplotseaborn.pairplotseaborn.distplotseaborn.kdeplotseaborn.rugplotseaborn.lmplotseaborn.regplotseaborn.residplotseaborn.heatmapseaborn.clustermapseaborn.FacetGridseaborn.FacetGrid.mapseaborn.FacetGrid.map_dataframeseaborn.PairGridseaborn.PairGrid.mapseaborn.PairGrid.map_diagseaborn.PairGrid.map_offdiagseaborn.PairGrid.map_lowerseaborn.PairGrid.map_upperseaborn.JointGridseaborn.JointGrid.plotseaborn.JointGrid.plot_jointseaborn.JointGrid.plot_marginalsseaborn.setseaborn.axes_styleseaborn.set_styleseaborn.plotting_contextseaborn.set_contextseaborn.set_color_codesseaborn.reset_defaultsseaborn.reset_origseaborn.set_paletteseaborn.color_paletteseaborn.husl_paletteseaborn.hls_paletteseaborn.cubehelix_paletteseaborn.dark_paletteseaborn.light_paletteseaborn.diverging_paletteseaborn.blend_paletteseaborn.xkcd_paletteseaborn.crayon_paletteseaborn.mpl_paletteseaborn.choose_colorbrewer_paletteseaborn.choose_cubehelix_paletteseaborn.choose_light_paletteseaborn.choose_dark_paletteseaborn.choose_diverging_paletteseaborn.load_datasetseaborn.despineseaborn.desaturateseaborn.saturateseaborn.set_hls_values流程一、认领首先查看整体进度,确认没有人认领了你想认领的章节。然后回复 ISSUE,注明“章节 + QQ 号”(一定要留 QQ)。二、翻译可以合理利用翻译引擎(例如谷歌),但一定要把它变得可读!如果遇到格式问题,请随手把它改正。三、提交fork Github 项目将译文放在docs文件夹下pushpull request请见 Github 入门指南。

March 14, 2019 · 1 min · jiezi

人工智能/数据科学比赛汇总 2019.2

内容来自 DataSciComp,人工智能/数据科学比赛整理平台。Github:iphysresearch/DataSciComp本项目由 ApacheCN 强力支持。微博 | 知乎 | CSDN | 简书 | OSChina | 博客园第二届中国“高分杯”美丽乡村大赛1月23日 - 3月5日, 2019 // Host by 点石 // Prize: 85000RMBNote: 要求参赛队利用深度学习等智能算法自动识别出所给图像对应的农作物,包括玉米、大豆、水稻三种农作物区块和其他区块共四种区块,根据参赛团队对场景的识别准确度和时效性进行评分。“默克”杯逆合成反应预测大赛2019-01-21 至 2019-04-12 // Host by Kesci // Prize: ¥50,000 + ¥20,000 GPU资源Note: 基于给定的化学反应数据建立模型,从而可对任给定的反应试剂和反应产物数据,模型输出该化学反应的反应物。智能盘点—钢筋数量AI识别1月10日-4月, 2019 // Host by DataFountain // Prize: ¥1,000,000Note: 本赛题基于广联达公司提供的钢筋进场现场的图片和标注,希望参赛者综合运用计算机视觉和机器学习/深度学习等技术,实现拍照即可完成钢筋点根任务,大幅度提升建筑行业关键物料的进场效率和盘点准确性,将建筑工人从这项极其枯燥繁重的工作中解脱出来。海上风场SCADA数据缺失智能修复1月10日-4月, 2019 // Host by DataFountain // Prize: ¥1,000,000Note: 本赛题使用的数据来源于实际海上风电场运营期间产生的远程监控数据(也称SCADA数据),包含机组运行状态密切相关的传感器数据和报警信息等,每隔一定时间周期(大约为7秒)记录一次。该数据主要用于机组的运行状态监控、故障诊断分析以及机组性能优化等方面。消费者人群画像—信用智能评分1月10日-4月, 2019 // Host by DataFountain // Prize: ¥1,000,000Note: 中国移动福建公司提供2018年x月份的样本数据(脱敏),包括客户的各类通信支出、欠费情况、出行情况、消费场所、社交、个人兴趣等丰富的多维度数据。文化传承—汉字书法多场景识别1月10日-4月, 2019 // Host by DataFountain // Prize: ¥1,000,000Note: 首批提供的数据集为包含多种背景、多种字体的书法图片及对应的label,使参赛团队在挑战之余感受中国传统文化。大数据医疗——肝癌影像AI诊断1月10日-4月, 2019 // Host by DataFountain // Prize: ¥1,000,000Note: 赛题共包含数据近7600例肝癌病例影像,其中3600例作为训练,3974例作为测试。影像数据层厚分布为0.6mm-7.5mm。津南数字制造算法挑战赛【赛场二】2月15日-5月16日, 2019 // Host by 天池 // Prize: ¥300,000Note: 2019津南数字制造算法挑战赛,赛场二以物流货物限制品监测为课题,要求选手针对给出的限制品种类,利用X光图像及标注数据,研究开发高效的计算机视觉算法,监测图像是否包含危险品及其大致位置。通过自动化监测包裹携带品算法,降低漏检风险及误报率,提升危险品管理效率。短视频内容理解与推荐竞赛1月10日-4月22日, 2019 // Host by Biendata & ICME2019 & 字节跳动 // Prize: $20,000Note: 本次竞赛提供多模态的短视频内容特征,包括视觉特征、文本特征和音频特征,同时提供了脱敏后的用户点击、喜爱、关注等交互行为数据。参赛者需要通过一个视频及用户交互行为数据集对用户兴趣进行建模,然后预测该用户在另一视频数据集上的点击行为。AI Competition for the Legends of the Three Kingdoms Game (三国杀))Now - April 03, 2019 // Host by GECCO 2019 // Prize: NaNNote: In this competition, we offer a programming-language-free competition system, where agent receive and send data according to the JSON format. Thus, competition teams can develop AI algorithms via any programming language with a JSON parser support.阅读更多 ...

February 18, 2019 · 1 min · jiezi

被裁员后,我是如何成功找到了一份数据科学工作?

作者 Kristen Kehrer中文翻译 MikaCDA 数据分析师原创作品,转载需授权本文的目的为了告诉你们我是如何成功找到一份数据科学的工作。从被裁员到成功签约,这两个月对我来说即辛苦又紧张。我拥有统计学硕士学位,并且自2010年以来一直从事高级分析工作。如果你是该领域的新手,那么你的体验可能会有所不同,但希望本文能有所帮助。我们将介绍如何利用LinkedIn,搜寻各种职位申请,如何在同时提高你的技能,以及当收到offer时该如何协商。被裁员的第1天Vistaprint公司决定减少员工人数,很不幸我是其中一员。但我知道如今市场对数据科学家的需求很火,因此从被裁员的第1天起,我就很乐观。我收到了遣散费,这让我能够真正考虑接下来该怎么做。在我把头发染成亮粉色后的第4天,我碰巧被裁员了,这真是很无奈。在被裁员后的第4天,我顶着一头粉色的头发。这是我的儿子哈利,他当时差不多3个月。实际上,之后我的第一场面试就是顶着一头粉色头发,面试官很喜欢。但是,之后我决定把头发染回之前的颜色,以便之后的求职。做的第一件事在LinkedIn上,招聘人员经常会联系我。我一般都会回复。如果你刚进入这个领域,你可能不会在LinkedIn邮件中收到招聘人员的消息,提出这一点的目的在于,你之后在职业生涯中可以关注这方面。如今我正在求职,我所做的第一件事就是浏览这个清单,给每个人留言:“你好,我正在求职中。如果你们有任何空缺的职位那就太好了,我们可以聊聊。“有很多人回复说他们有空缺的职位,但是在与他们交谈之后,我发现这并不适合我。除了去联系来找我的招聘人员之外,我还进行了谷歌搜索(以及LinkedIn搜索),寻找分析领域的相关招聘人员。与职业导师第一次见面在被裁员之后,Vistaprint为我安排了职业导师。她教给我的信息非常有用,这让我在之后的职业生涯都受益匪浅。我的职业导师是来自Transition Solutions的Joan Blake。在我们的第一次会面时,我带来了我的简历,我们谈论了之后我想找哪方面的工作。由于我的简历和LinkedIn在过去帮我找到了工作,她并没有对简历进行太大的修改,但把我的专业技能和经验放在顶部,把学历背景放在底部。并且我们把简历的篇幅尽量控制在一页以内。这是我的简历:我还在简历中附上了求职信。这让我能够有机会明确地表明,我的情况很符合他们的工作描述。我列了一个电子表格,当中包含了我所申请的所有公司。在表格中,包含了以下信息:公司名称;申请的日期;收到回复的日期;招聘经理的姓名等。这帮助我掌握目前求职的情况和进度。求职申请对我申请的每个工作,我都会在LinkedIn进行搜索。查看我的人脉网络中是否有人目前在这家公司。如果有的话,我会让他们知道我在申请,因为如今很多公司都提供推荐奖金。我大概会这么说:你好,Michelle。我正在申请XX公司的数据科学家职位。你愿意帮我引荐一下吗?如果我认识的人中,没有人在这家公司,那么我会试着找到该职位的招聘经理。可能是“数据科学与数据分析”主管(或副总裁)这类头衔。我给招聘经理发的信息如下所示:你好,Sean。我对远程数据科学的职位感兴趣。我有统计学硕士学位,以及7年的建模经验。我很擅长使用SQL,以及用R进行建模,并且对Python有一定的了解。我很期待有机会与你聊聊,我想谈谈我将如何通过统计方法为公司提供有效的分析见解并创造价值。Kristen大多数人都会回复。当我告诉职业导师我在LinkedIn上求职所获得成功后,她为此感到有些惊讶。开始面试和电话面试电话面试基本大同小异,有些电话面试更紧张一些,有些耗时更长,基本都在半小时左右,通常会是HR。既然是与HR进行沟通,那么不用涉及太深的技术问题,你只希望能够通过电话面试,并试着与招聘经理约定时间进行面试。介绍一下自己:这里HR只想大致了解你,以及你的经历。我的介绍如下:我是一名数据科学家,拥有7年的统计和分析经验,可以解决各行业的业务问题。我能够熟练使用SQL,在R中进行模型构建,并且目前正在学习Python。你想要做什么?我会确保我想做的基本与职位描述相符合。我可能会说“ 我期待不断学习新工具和新技术。我希望能够处理有意思的问题,从而带来商业价值“。你的薪资要求是怎样的?如果可以的话,尽量避免这个问题,你会被问到,但是尝试用不同的角度回答。你可以回答:“我过去的薪资比较符合我的期望,我相信(公司名称)会付出相应的薪资,你怎么看这个职位的薪资范围呢?”他们会有该职位的薪资范围,但他们可能会告诉你他们没有。大多数时候我会给出我的薪资期望,但这并不意味着当收到offer时你无法进行协商。收到offer很棒,你马上就要拿到offer了。这时,你可以联系发offer的公司,询问“我收到通知说我能拿到offer,有什么办法可以让流程加快吗?”我向两家公司提过这个问题。其中一个加快了流程,给我发了额外offer。协商你拿到了offer,现在应该进行协商了。只有很少一部分人会就薪资进行协商,女性更少。一定要协商!当你了解了薪资、休假时间、以及福利信息,你可以这么说:非常感谢您的offer,我很感激。我希望能提高一些薪资。然后等待回应,保持积极的心态。他们可能会说,需要把这些信息提给招聘经理。谢谢。我会花一些时间了解福利的内容。期待再和您协商,我感觉我们能达成一致。然后就结束谈话,并且定下下次协商的具体时间,最后让他们知道你很高兴与他们进行交流,保持积极的态度。就这样我成功地获得了心仪的工作,并在一周后开始上班。我感觉特别的欣喜,经过多次面试我终于找到了适合自己的工作,这一切都是值得的。结语有针对性的求职信,并直接在公司网站上申请会大大提高求职的响应率。同时,你可以有效地利用LinkedIn联系招聘人员,直接进行交流。同时在这个过程中,我的表达能力和自信心都得到了很大的提升。最后希望你能成功找到心仪的工作。

February 15, 2019 · 1 min · jiezi

如何成为数据科学家?数据科学业界大牛们倾囊相授

在大家的眼中,科学家的形象可能是一位表情严肃、着装单一、不修边幅、戴着一副厚重眼镜且天庭饱满,发际线无限上移的中老年理共男。但实际上,他们正式体面,幽默无比,可谓是集涵养和趣味于一身的真正撩妹达人!那么现实中,你是否有见过真正的数据科学家呢?数据科学家,一个大数据时代的新兴称号,被《哈佛商业评论》中被誉为“21世纪最性感的职业”,2015年,美国白宫首次设立数据科学家的岗位。他们可能不发表学术论文,没有科研项目,也没有得过学术大奖,但在商业帝国里扮演着至关重要的角色。他们是技术驱动,没日没夜与数据打交道的匠人;他们是创意源泉,为业务出谋划策的参谋者;他们是幕后之王,未雨绸缪粮草先行。在国内,CDA以寻找数据科学家活动,汇聚了一批真正称得上大佬的实战派先锋,无论是在商业领域摸爬滚打,还是在学术界科研探索,都硕果累累,名副其实。所谓前人栽树后人乘凉,他们为数据科学做出了模范般的躬先表率。CDA也授予其“荣誉数据科学家”称号。荣誉数据科学家九屠曾就职于阿里巴巴·饿了么,集团首席数据架构师、P10科学家。负责饿了么、百度外卖的大数据技术统筹。2014年加入百度,先后带团队建设为百度地图6大Place场景做数据分析,后专注于百度外卖大数据生态从0开始孵化并最终完善。自主研发涉及到数据采集3大平台、开放式ETL4件套、OLAP分析平台、Adhoc、大数据分布式调度、数据集市、数据仓库等,另外技术驱动数十个辅助业务分析角色的分析挖掘平台。为大数据研发打造离线、实时数据整套解决方案,目前构建并推广AI学习平台系统;在AI和大数据技术创新层面,作为发明型专利第一发明人拥有44项发明。李御玺国立台湾大学资讯工程博士,铭传大学资讯工程学系教授,铭传大学大数据研究中心主任,中华数据挖掘协会理事,中国人民大学数据挖掘中心顾问,IBM SPSS-China顾问,SAS-Taiwan顾问,CDA命题组负责人。在其相关研究领域已发表超过260篇以上的研究论文,同时也是国科会与教育部多个相关研究计划的主持人。服务过的客户包括:中国工商局、中信银行、台新银行、联邦银行、新光银行、 第一银行、永丰银行、远东银行、美商大都会人寿、嘉义基督教医院、台湾微软、航空公司如东方航空公司、中华航空公司、汽车行业如福特(Ford)汽车公司;政府行业如国税局等。赵卫东东南大学博士,复旦大学博士后,主要负责本科生和各类研究生大数据核心技术和商务数据分析等课程的教学。商务智能被评为上海市精品课程,获得2013年高等教育上海市教学成果奖二等奖。目前主要研究方向包括商务数据分析和大数据分析等。主持2项国家自然科学基金以及上海市浦江人才、企业合作课题等20多项项目。已在Knowledge and Information Systems ,Information Processing & Management,Information Systems Frontiers等国内外刊物和学术会议发表论文90多篇。出版著作《智能化的流程管理》、《数据挖掘实用案例分析》以及教材《商务智能(第四版)》、《机器学习》、译作《商务智能 数据分析的管理视角(第四版)》、《人机共生——洞察和规避数据分析中的机遇与误区》等10多部。获得上海市2015年上海市科技进步二等奖。付波博士,电子科技大学副教授,2009年获电子科技大学工学博士学位,2007-2008加拿大Univ. of Guelph的ARIS实验室访问学者。多年从事模式识别、信号处理和机器学习相关工作,曾先后主持/参与国家自然科学基金、国家863及省市各项课题20余项。在包括IEEE Trans. IFS, SPL, Int. Jour. of PR, PRAI等国内外权威期刊、重要国际会议上发表论文30余篇,其中SCI检索20余篇。合作参与编写专著3部。获国家授权发明专利7项,省市科技进步奖2项。曾担任国家自然基金及多个期刊或会议的评审人和特约审稿人。目前,主要关注医疗健康大数据分析和产业化运用,近几年主持或合作医疗及人工智能相关科研项目400余万,并参与创办了2家科技公司。阎志涛Talkingdata,研发副总裁,负责企业数据治理,数据平台及客户精准营销等实务。王学武首席数据官。毕业于华中科技大学计算机专业。PRINCE2,PMP,CMMI评审员,IBM电子商务架构师,工信部项目管理工程师,工信部软件设计师。具有12年的项目管理与技术研发经验,曾参与实施某航企多个核心的商业智能、数据仓库项目;曾作为该企业工程过程管理组的Lead,负责推进CMMI L3评审工作。目前专注于大数据、机器学习、自然语言处理、人工智能等创新技术的研究和在行业的应用。薛松美国佛罗里达大学管理学与经济学硕士,曾于美国微策略公司等多家企业担任数据科学家,现任某初创公司数据科学总监。设计并主持多项大数据与人工智能项目,项目内容涵盖多源异构数据自动化采集、社交媒体舆情分析、多语言自然语言处理、图数据库集成与图算法应用等领域。长期为全球500强客户提供数据产品咨询,搭建企业级大数据平台与应用,在安全、交通、金融、媒体等行业的大数据项目管理方面有丰富经验。教学案例以上的实战派数据科学大佬们,也正式成为了CDA数据分析研究院荣誉科学家成员,共同参与制定CDA LEVEL 3数据科学家人才标准大纲及数据科学家精英培训,将自身在大数据发展这几年的实战成果,以教学案例的形式倾囊相授。案例包括:案例一大数据指标模型治理与实践案例介绍:大数据对业务数据ETL处理后,面临在数据仓库层面对业务词库定义、指标建模、元数据统一等问题;后期对外数据通过产品化和AdHoc方式交付数据,存在指标定义相同,但是语义理解存在较大偏差,如何进行指标模型的多口径计算逻辑统一,避免繁琐的人工维护和迭代,是本议题主张的部分;通过一处定义数据指标,多处交付统一的模型抽象、定义、训练和交付整体实践。技能涉及:元数据、大数据计算、ETL、数据建模、计算口径、血缘关系、语义理解、统一模型。案例二:用户画像在O2O互联网场景的实践案例介绍:在外卖的物流场景下的调度是一个时空最优解的模型评估,模型的演进的过程中,都有重要的特征支持着变革,边界非常清晰。模型演进对于画像部分,是开始在配送服务精细化运营的落地步骤;画像是为了满足个体的真实差异而对个性化的支撑方式。分享围绕互联网企业在智能调度系统方向上从的逐步演进,画像贯穿在整个生态当中,在大刀阔斧的业务版本演进同时,能够细致入微的解决落地场景的实践。技能涉及:用户画像、特征挖掘、模型评估、个性化推荐、时空最优案例三文本挖掘实战案例介绍:文本分析(Text analysis)是文本挖掘、信息检索的一个基本问题。它将文本中抽取出的特征词进行量化,进而表示其文本信息。由于文本是由特定的人进行编撰的,文本的语义结构不可避免地会反映人的特定立场、观点、价值和利益。通过大量数据的支撑,并结合文本内容的分析,可以推断出文本编撰者的意图和目的,以进行各种不同场景应用。技能涉及:分词、词性标注、命名实体标订、情绪标订、词关联分析、文件分类、文件摘要、文件聚类、文字云案例四生鲜智能补货案例介绍:生鲜补货在特定行业模式下的特点与面临的问题,商业模式与智能补货相结合中用到的智能算法,相关架构与业务效果,以及在系统的整个构建过程,生鲜智能补货是一个跟、供应链、仓储、物流、人员配送、促销、商品展现、推荐、广告、渠道运营等多系统协同的复杂系统,尤其生鲜类商品,保质期短,口味、消费者人群、地域分布等都与传统电商商品具有很大的差异。目前生鲜电商面临的最大问题就是运营成本难以下降,传统电商运营生鲜面临着保质期太短,对新鲜度的极高要求,冷链问题解,配送耗材损耗居高不下等问题。面对这样的问题,可以从供给侧通过智能补货系统对商品进行预测控制,降低损耗,降低周转期,提高库容利用率。更多业界成熟案例都会融入到CDA LEVEL 3数据科学家精英培训中!Lesson周期:三个月,线上约20课时,线下50+课时(周末面授)Lesson目标:将数据分析师、数据工程师打造为数据科学家2019年2月23日开学,限额30人哟,机不可失——https://www.cda.cn/kecheng/53…

February 13, 2019 · 1 min · jiezi

ApacheCN 数据科学/人工智能/机器学习知识树 2019.2

【主页】 apachecn.org【Github】@ApacheCN暂时下线: 社区暂时下线: cwiki 知识库自媒体平台微博:@ApacheCN知乎:@ApacheCNCSDN简书OSChina博客园我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者!合作or侵权,请联系【fonttian】<fonttian@gmail.com> | 请抄送一份到 <apachecn@163.com>预处理离散化等值分箱等量分箱独热 one-hot标准化最小最大 min-maxz-scorel2 标准化归一化特征选择ANOVA信息增益/信息增益率模型验证评价指标回归MSER 方分类准确率精确率召回率F1 得分宏平均 F1微平均 F1聚类互信息轮廓距离交叉验证K 折网格搜索最优化方法梯度下降随机梯度下降 SGD牛顿法/拟牛顿法动量法RMSPropAdam传统机器学习基本概念欠拟合/过拟合距离汉明距离曼哈顿距离欧几里得距离切比雪夫距离余弦相似度pearson 相似度损失函数MSE交叉熵Hinge线性模型线性回归Lasso/岭回归正则化逻辑回归softmax 回归支持向量机拉格朗日对偶软边界支持向量机核方法树和森林决策树随机森林GDBT/XGBoostLightGBM集成学习BaggingBoostingAdaboostBlending/StackingKNN聚类KMenas层次聚类凝聚聚类分裂聚类DBSCAN谱聚类高斯混合模型 GMM概率图朴素贝叶斯隐马尔科夫 HMM降维PCA/SVDT-SNE深度学习基本概念正向传播反向传播激活函数sigmoidsoftmaxtanhReLUELULeaky ReLU丢弃 Dropout微调 Fine-Tune批量归一化 BatchNorm前馈神经网络 DNN/多层感知机 MLP输入层隐层输出层卷积神经网络 CNN层卷积层池化层全连接层经典结构LeNetAlexNetZFNetGoogLeNetVGGResNetDenseNet循环神经网络 RNN循环层经典结构LSTMGRUBiLSTM注意力Seq2Seq自编码器栈式自编码器稀疏自编码器去噪自编码器变分自编码器生成对抗网络 GANDCGAN应用领域(待扩展)推荐系统机器视觉 CV自然语言处理 NLP生物信息常用工具数据分析NumPyPandas科学计算SciPy可视化MatplotlibSeaborn机器学习scikit-learn/sklearnXGBoostLightGBM深度学习KerasTensorFlowPyTorch

February 4, 2019 · 1 min · jiezi

展望2019 | 数据科学、机器学习和人工智能领域的五大预测

作者:William VorhiesCDA数据分析研究院原创作品, 转载需授权2018年刚刚结束,在2019年到来之际,让我们一起展望在今年数据科学、机器学习和人工智能领域会有怎样的发展趋势。首先让我们快速回顾一下,去年我们曾做出了哪些预测。2018年预测回顾预测1模型生产和数据准备都将越来越自动化。大型的数据科学操作将集中在一个平台上。这两种趋势都是为了提高效率,从而让更少的数据科学家完成更多工作。 结果预测正确。 无代码数据科学和端对端集成平台都处于上升发展阶段。预测2数据科学将继续专业化,意味着全栈型数据科学家将消失。结果是的。如今比起数据科学家,数据工程师更受关注。数据工程师是那些让数据科学模型在现实中发挥作用的人。预测3非数据科学家将比数据科学家执行更多复杂的分析。结果这是真的。Data Viz和Visual Analytics等技术作为桥梁,让非数据科学家能够从复杂的数据科学工具中获取更多价值。预测4深度学习很复杂。很少有数据科学家掌握刚领域的技能,这将阻碍人工智能的应用,直到深度学习平台得到更为简化和产品化。 结果微软和谷歌都在2018年推出了自动化深度学习平台。这些平台从转移学习开始,但正朝着完整自动化深度学习发展。同时也还有一些集成自动深度学习平台。OneClick.AI有完整的自动化机器学习和自动化深度学习平台。预测5尽管有大肆宣传和炒作,但人工智能和深度学习在各大市场中渗透的速度和广度都比你想象更慢更窄。结果除了聊天机器人的出现,人工智能在商业中的实际应用非常有限。他们来了,但还没有。在我知道最全面的研究表明,在大型公司中,只有五分之一到三分之一的公司在大规模实施人工智能。在较小的公司中,这个比例要小得多。而且我们不确定哪些是否是“真正的”人工智能。预测6政府将开始认真看待人工智能对社会和隐私的影响,无论是有意的还是无意的。结果只要看到这方面的新闻就会发现,政府在针对这方面出台相关的监管机制。对人工智能设计的隐私等方面进行规定。我们队2018年的预测基本正确,当中有些预测趋势也可以用于新的一年,下面继续看到对2019年数据科学、机器学习和人工智能领域的预测。 2019年预测预测1:数据变得比算法更重要我们已经有一年多美元在深度学习和机器学习方面取得任何重大突破了。当中也有一些渐进式的改进,比如使用时间卷积网(TCN)而不是RNN来减少NLP的延迟,但没有很大的新创新。性能最佳的算法很有名,或者可通过自动机器学习轻松发现。目前,随着公司开始实现数字化转型,拥有更多更好的数据是成功的关键。实际上,这为同时想多个方向提供数据相关解决方案的提供了竞争机会。一个方面,获得准确标记的图像或文本的训练数据仍然非常昂贵且耗时。Figure Eight这样专注于标记数据的公司正在推广智能的成本效益策略,比如Active Learning,让你在标记数据和模型准确性之间取得最佳权衡。这涉及多次迭代,添加人工标记或机器标记的数据,然后重新训练以找到最佳方案。第二个方面是访问第三方数据。像DymstData这样的服务公司已经进入该领域,作为数百种附加数据的结算方。他们还承担着确保敏感PII受到保护等服务,这些信息在金融和医疗服务中尤为重要。第三个方面是自动跟踪并记录模型中使用数据的来源。特别是当不同来源的流数据被集成,且随时间变化时,知道其来源以和使用方式对准确性和合规性都是至关重要的。Tibco和其他分析平台正在整合此功能。围绕数据的服务产品在今年将大幅扩展。预测2:随着人工智能和机器学习从分析平台转移到行业或流程特定应用,一切将变得更容易。纵观人工智能和机器学习创业公司,可以看到竞争正在转向行业或流程特定的应用。这些应用程序或小型平台主要解决市场营销、B2B销售、医疗保健、金融技术等行业特定问题。这些新应用程序专注于嵌入人工智能和机器学习,从而企业在进行更新和改进时,只需依赖这些开发人员,而无需大型内部数据科学家团队。有人将这称之为人工智能和机器学习商品化,但更准确地说,你可以将其视为人工智能和机器学习的专业化。 如果你熟悉90年代后期从流程再造(Reengineering)到企业资源计划(ERP)的过渡,其实这是一回事。最初,流程再造呼吁公司使用复杂的定制IT解决方案来改进流程,因为当时还不存在标准化解决方案。这为Oracle、PeopleSoft、SAP等采用集成ERP的企业带来了机遇。我们的行业目前正在经历同样的变化。这些新的企业都致力于在各自特定领域提供广泛的解决方案,但不可避免地最终得到不太大的ERP规模平台。 还要注意中小型公司中人工智能和机器学习的采用率,这些公司不再需要大型数据科学团队,而可以完全依赖定制的开发模型。预测3:数据工程师和数据分析师的崛起这并不是说数据科学家以及不受欢迎了,远非如此。当你缺乏某种技能时,市场会以不同的方式填补这种短缺。一种方法是通过上文讨论的行业和流程特定智能应用,这些应用程序不需要大量的内部数据科学家。第二种方法是自动机器学习平台在迅速涌现。这意味着效率的提高,更少的数据科学家能够完成更多的工作。模型的数量没有减少,而是增加了,这将工作负荷转移到具备两方面技能的数据工程师上。 第一是能够创建数据科学所需的基础架构,如数据湖和Spark实例。 第二是采用模型,确保模型在操作系统中实现,并跟踪模型的准确性和更新。 一些数据工程师还负责数据操作,确保数据流干净和预处理环节。分析平台的另一个发展是视觉分析和数据可视化工具的发展。如今,这些工具大多与数据科学工具集完全集成,让数据分析师和高层能从中提取更多价值,甚至指导分析工作。他们不会取代数据科学家,但强化了高级分析中的团队作用。预测4:神经形态芯片:人工智能与物联网走向前沿两种不同的技术同时达到半成熟阶段,从而解决长期存在的延迟问题。例如,当你想用移动设备自动将文本或图像外来词翻译成其他语言时,你的设备将信号发送到云端进行翻译,然后传回设备。 谷歌等即时翻译服务已经从RNN转为专门的CNN结构,称为时间卷积网,因为RNN 不能很好地适应大规模并行处理,而CNN可以。这样能够减少延迟,但仍然保证信号的完整传输。解决这个问题的两种技术之一是5G网络。5G速度更快,但其真正的好处是能够承载的流量密度。这能够让一切信息都能在互联网上传输,具体的传输量还有待观察。第二种解决方案是引入新的且更好的神经形态芯片(又称脉冲神经网络)。我们希望这些全新的神经网络能够实现通用人工智能,虽然这还有很长的路要走。 如今,主要的芯片制造商和几家初创公司都在发布现在正在发布脉冲神经芯片,专门针对芯片上的CNN和RNN型号进行了优化。其中一些还针对极低功耗进行了优化。这些特性结合在一起非常适合将深度学习转移到网络边缘的芯片上。从今年开始,随着这些新功能的出现,物联网和其他流媒体数据应用程序将出现爆炸式增长。预测5:不同的人工智能框架将学会相互交流现在,文本、语音、图像和视频模型已成为主流,我们遇到了意想不到的障碍。在一个框架(Caffe2、PyTorch、Apache MXNet、Microsoft Cognitive Toolkit和TensorFlow)上构建的模型无法轻松移植到不同的框架。幸运的是,这个痛点推动了创新。AWS、Facebook和Microsoft合作构建了开放式神经网络交换(ONNX),使模型可以在不同的框架上实现互操作。随着开发人员、应用程序和设备之间共享的模型数量越来越多,ONNX将成为今年的关键技术。以上就是2019年数据科学、机器学习和人工智能领域的相关预测。让我们拭目以待,期待这些领域在今年的发展和创新。https://www.cda.cn/?seo

January 18, 2019 · 1 min · jiezi

成为靠谱的数据科学家——从提出正确的问题开始

作者 | Admond Lee翻译 | MikaCDA 数据分析研究院原创作品,转载需授权作为一名数据科学家,在我们讨论如何通过正确的提问对问题进行定义前,让我们首先看到为什么提出正确的问题是如此重要。在我的第一份数据科学实习中,我对这个项目非常兴奋,只是想尽快动手,而没有弄清楚全局情况。我首先试着弄清楚我要解决的问题,但却没有深入细节确定具体的目标。更糟糕的是,我没有质疑所要分析和预测的数据集。最终经过两周的数据清理和分析,我才意识到我对数据做出了错误的假设。所有这些都是因为我对问题和数据缺乏了解。这就是我的故事。我认为提出正确的问题和定义问题陈述是许多数据科学初学者(包括我)面临的一项挑战。提问很容易,每个人都会提问。但是提出正确的问题就不容易了,因为我们不知道哪些问题才是正确的。在本文中,我将与你分享作为数据科学家,该如何提出正确问题并定义问题陈述。希望能够帮助你应对数据科学生涯中的这些挑战。让我们开始吧!如何通过提出正确的问题来定义问题陈述?不管你是否承认,定义问题陈述(或数据科学问题)是数据科学管道中最重要的步骤之一。在下面的部分中,我们将通过四个步骤来定义问题陈述。1.理解需要解决的问题需要确定的机会是什么?你的受众所面临的痛点是什么?通常情况下,Kaggle竞赛中的问题陈述都是明确定义的。我们可以放心使用给出的数据集,而不必担心问题陈述给其他人带来的问题,或如何获取数据等。但是,实际工作环境中的问题并没有被定义,有些问题很暧昧,很模糊。大多数时候,公司领导层只会给我们一个问题:我有这个“问题”,你能帮我解决这个问题吗?仅此而已。我们的任务是帮助他们将问题构建成数据科学问题,从他们的角度看问题。换句话说,我们需要有同理心。这时我们需要从领导层的角度,将我们的技术知识与数据结合起来,提出一个促进商业价值的解决方案。2.根据问题评估情况在构建了数据科学问题之后,接下来就需要根据问题对形势进行评估。这意味着我们需要谨慎分析风险、成本、收益、突发事项、法规、资源和需求。为了进一步说明,这里可以大致分为以下几个问题:这个问题有什么要求?有哪些假设和约束条件?有哪些资源?这里指的是人员和资金,计算机系统(GPU,可用的CPU),仪器等。3.了解项目的潜在风险和收益这个步骤是可选的,具体取决于项目的大小和规模。有些项目可能只处于探索阶段,因此如果项目投入生产,潜在风险可能会降低,且未来收益会更大。这个项目相关的主要成本是多少?有哪些潜在的收益?有哪些潜在的风险?潜在风险中会有哪些突发情况?回答这些问题有助于更好地了解情况,并了解项目涉及的内容。对项目有深入的了解有助于评估之前定义问题陈述的有效性。4.定义评估项目成功的指标这个很重要。你不能只有需要解决的问题,而没有任何指标来评估项目是否成功。这归结为一个简单的问题:你希望在项目结束时实现什么目标?成果应该是可衡量的,而不是无法量化的。某些指标可能无法立即使用,因此还需要进行数据收集和预处理。你必须与领导层讨论要使用的指标,并且在提出正确问题的早期就应该进行讨论。定义成功标准非常重要,因为这有助于你在项目整个生命周期内对其进行评估。结语我们的最终目标是提出更好的问题和定义明确的问题陈述,从而用数据科学方法进行解决,并生成业务见解和可操作的计划。谢谢你的阅读。希望本文能够让你理解提出正确问题以及如何构建问题陈述的重要性。

January 16, 2019 · 1 min · jiezi

被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变

摘要: 自从阿法狗战胜人类顶级棋手之后,深度学习、人工智能变得再一次火热起来,但有一个基本的误解是更大的数据会产生更好的机器学习结果。然而,更大的数据池/仓库并不一定有助于模型学习到更深刻的见解。正确的答案是? 自从阿法狗战胜人类顶级棋手之后,深度学习、人工智能变得再一次火热起来。有些人认为,深度学习的再一次兴起是源于硬件的提升、数据量的增多以及高效算法的研究。这并不完全精确,有一个基本的误解是更大的数据会产生更好的机器学习结果。然而,更大的数据池/仓库并不一定有助于模型学习到更深刻的见解。正确的答案是,要把重心专注于数据的质量、价值以及多样性,而不仅仅是数据的规模——“深度数据”(deep data)比大数据(big data)好。随着研究的进行,人们对大数据的炒作逐渐在减弱。云计算、Hadoop及其变种已经能够解决一些大数据的问题。但是“大数据”是指许多人仍在花费大量资金建设更大的基础设施来处理、保存和管理的庞大数据库。这种盲目追求“大”的做法,在基础设施和人力资源方面产生了巨大的、且本可避免的成本。目前,越来越多的声音讨论是否从“大数据”转向为“深度数据”了,我们现在需要更加的明智和思考全面,而不是收集所有可能的数据来实现“大数据”。我们现在需要让一些数据落实到位,并寻求数量和质量的多样性,这将给我们带来许多长期的收益。被神话的大数据 要理解从“大”到“深”的这种转变,让我们首先看一下我们对大数据的一些错误观念:可以并且应该捕获和存储所有数据;更多数据总是有助于构建更准确的预测模型;存储更多的数据,其存储成本几乎为零;更多数据的计算成本几乎为零;以下是现实:来自物联网和网络流量的数据仍然超过了我们目前具备的捕获所有数据的能力。有些数据必须在摄取时被丢弃。我们需要变得聪明,这就需要我们根据价值对数据进行分类;重复一千次的相同数据示例并不会提高预测模型的准确性;存储更多数据的成本不仅仅是网络服务向用户收取的费用(比如云盘),这也是查找和管理多个数据源的额外复杂性以及员工移动和使用该数据的隐藏代价,这些成本通常高于存储和计算费用。人工智能算法对计算资源的需求甚至可以快速超越弹性云基础设施。虽然计算资源可以线性增长,但计算需求可以超线性增长,甚至指数级增长。 相信这些神话的问题在于,我们将以一种在纸上或长期看来都很好的方式构建信息系统,但在即时时间框架内过于繁琐,无法发挥作用。大数据的四个问题以下是在数据方面盲目相信“越多越好”时存在的四个问题:更多相同的数据是没有作用的。为人工智能构建机器学习模型时,训练示例的多样性至关重要,原因是模型是根据数据来试图确定概念边界。例如,如果模型试图通过使用年龄和职业来定义“退休工人”的概念,那么32岁的注册会计师的重复示例对该模型并没有什么好处,因为它们表示的含义都是没有退休。在65岁的概念边界获得示例并了解退休如何随职业而变化对模型会更有帮助;嘈杂的数据可能会伤害模型。如果新数据中存在错误或者不精确,那么它只会混淆模型试图学习的两个概念之间的界限。在这种情况下,更多的数据将无济于事,实际上可能会降低现有模型的准确性;大数据让一切都变慢了。在数TB的数据上构建模型可能比在数GB的数据上构建模型花费一千倍的时间,或者它可能需要一万倍的时间,这都取决于学习算法。数据科学就是快速实验,快速实验,快速更新以获得较为合适的模型;大数据可实现的模型。任何预测模型的最终目标都是创建一个可以为业务部署的高度准确的模型。有时使用来自数据池深处更加模糊的数据可能会导致更高的准确性,但所使用的数据对于实际部署可能是不可靠的。最好有一个不太准确的模型,它可以快速运行并可供企业使用。能做得更好的四件事以下是我们可以采取的一些措施来对抗大数据的“黑暗面”,并将大数据思维转向深度数据思维:了解准确性/执行权衡。数据科学家常常认为目标是获得更准确的模型。而是要根据准确性和部署速度,以明确的ROI预期启动项目;使用随机样本构建每个模型。如果你的数据集足够大,那么你就没有理由一次性全部使用整个数据集。如果数据集具有良好的随机抽样功能,那么我们就可以使用来自大数据集中的小样本构建模型,并进行准确预测。小样本使得模型迭代更新更加快速,然后使用整个数据库构建最终模型。丢弃一些数据。如果对来自物联网设备和其他来源的数据流感到不知所措,那么就可以聪明地随意丢弃一些数据。这个方法适合于构建模型的早期阶段,如果到后期的话,这样操作会使得后期工作一团糟。寻找更多的数据源。人工智能最近的许多突破并非来自更大的数据集,而是源于机器学习算法利用到了以前无法获得数据的能力。例如,二十年前,现在普遍存在的大型文本、图像、视频和音频数据集在那个时代并不存在,因此,我们应该不断寻找产生这些新的数据的机会。变得更好的四件事如果我们转换思路,专注于深度数据而不仅仅是大数据,这样将享受到以下这些好处:一切都会变得更快。使用较小的数据,对数据进行移动、实验、训练和模型评估都会快得多;需要更少的存储和计算资源。专注于深度数据意味着我们将更加智能地使用更小的磁盘并通过云计算,这样会直接降低基础设施的成本,节省下来的资金就可以聘请更多数据科学家和人工智能专家;减轻研究人员的压力并变得更加快乐。在有了深度数据思维后,团队将发现自己不太可能只是做一些打杂工作,比如制作数据集或者杀死那些占用所有云资源的错误程序等。同样,数据科学家也会花更多的时间在构建和测试模型上,而不是被数据移动或等待长时间的训练过程,这样也会使其变得更快乐。可以解决更难的问题。构建一个人工智能模型并不是一个只有像巫师一样的研究人员才能完成的神奇体验。与其说人工智能是魔法,不如说是一种逻辑。这类似于一个艺术老师告诉他班上一半的学生,他们的分数将基于他们制作的艺术作品的数量,另一半的学生将根据他们最好的作品的质量来评分。毫不奇怪,学生创作的艺术品数量会大大增加。令人震惊的是,在产量增多的同时,高品质的产品也会出现——数量有时会产生质量。在我们的例子中,在相同资源约束下尝试的更多模型可能意味着更好的最佳模型。大数据和支持它的技术突破极大地促进了许多公司在决策过程中成为数据驱动的动力。随着人工智能的兴起以及处理这些强大资源的能力,现在需要更加精确地根据我们的数据需求建立一种理解深度数据的思维,而不仅仅是大数据。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

January 14, 2019 · 1 min · jiezi

入行数据科学一定要有研究生学历吗?

作者 | Jeremie Harris翻译 | MikaCDA 数据分析师原创作品,转载需授权首先我要说的是,我是一名博士肄业生。这个头衔给我带来了所谓的光环,它暗示我在研究生院待过,做过一些学术研究。完成博士学位,意味着你不过是千万个”书呆子”中的一员,而在学了几年后辍学似乎显得你更有个性。人们期待知道你之后会做些什么。他们可能会说,“特斯拉的CEO Elon Musk就选择放弃研究生学位,离开学校去创业,你也可能成为下一个Elon!”那么如果想入行数据科学,学历重要吗?一定需要博士学历或研究生学历吗?在本文中我将分享我的看法。我在数据科学导师制创业公司工作。在工作中,我已经面试过数千位有抱负的数据科学家,当中有些人有博士学位,有些有硕士学位,有些是本科生,也有各个阶段的肄业生。这也让我对数据科学职业有了更深的认识。STEM:科学(Science),技术(Technology),工程(Engineering),数学(Mathematics)这四门学科有许多人会向他人咨询,是否要继续深造读研或读博,而当中很多人对前景没有全面的分析。其实不是所有的学位都适合每个人,原因如下。一、博士学位(这可能会让许多有博士学位的人感到不舒服,在此我提前道歉。)“我看到许多数据科学工作都需要博士学位。我是否要有博士学位才能成为数据科学家呢?“不,并不需要。不要误会我的意思,博士头衔的确会给你带来明显的优势。但也要考虑一些现实因素。如果你的目标是成为数据科学家或机器学习工程师/研究员,那么有博士学位会给你加分不少。但与此同时也要考虑以下两点:1.获得博士学位需要非常长的时间。2.除非你跟着合适的导师,攻读合适的学位,否则你可能学不到任何有价值的东西。针对第1点,在美国或加拿大,获得博士学位需要4年到8年才能完成。平均需要5到6年,具体取决于学校。现在让我们把它放到透视中。在数据科学领域瞬息万变,5年内各种成果层出不穷。要知道,在5年前Spark、XGBoost、jupyter notebook、GloVe、spaCy、TensorFlow、Keras、Pytorch、InceptionNet、ResNet、强化学习等等都还不存在。因此,除非你打算当新技术出现时,花时间自己钻研。否则你会发现学习期间接触到的技术远远跟不上当下的发展。这意味着即使你毕业后,还需要自己学习这些技术。关键在于,数据科学和机器学习的发展非常快,在未来只会发展得更快。因此,当考虑攻读数据科学或机器学习相关领域的博士学位时,你实际上是把赌注都下在你所要学习的领域。你希望在毕业时,该领域还是炙手可热的。而这样的赌注很冒险,而且赌注很高。第2点,思考一下你的导师是谁,为什么他们没有在Google或Facebook工作。当然,有些人更喜欢学术研究,而不是在行业中运用数据科学或机器学习。但值得记住的是,行业顶级的机器学习人才的薪资是非常丰厚的,因此学术界的可能会稍逊一筹。当然,有些地方也有些例外。这主要指的是加拿大的Vector Institute或MILA;麻省理工学院和美国伯克利的数据科学课程等顶级精英项目。总结一下:如果你只想成为Airbnb的深度学习工程师,那么博士学位一定程度上能成为你的敲门砖。但是,如果你不是在顶级项目中攻读博士学位,那么不要期望被行业顶尖的公司录用。但是,如果你想找份普通的数据科学工作,获得博士学位可能并不是正确的举措。你可以用4到8年的时间获得丰富的工作经验,去成长为一名真正的数据科学家,那么出现新技术时,你能更好的进行预测,保持领先的位置。如果你考虑攻读与数据科学无关领域的博士学位(例如物理,生物学,化学),并且目标是找数据科学方面的工作,那么这条建议可能有些刺耳:如果你离毕业还有18个月或更长时间,而且你确定自己想成为一名数据科学家,那么可以考虑辍学。考虑到沉没成本,你应该对之前决策感到质疑,根据我之前的经验来看放弃可能是正确的选择。二、硕士学位入行数据科学需要硕士学位吗?视情况而定。以下是我列出的记分表,如果根据你的情况,分数大于6,那么答案是“硕士学位可能会有所帮助”。你有非常相关的STEM背景(物理、数学、计算机科学等本科学历):0分你有较为相关的STEM背景(生物学、生物化学、经济学等本科学历):2分你没有相关的STEM背景:5分你有不到1年的Python使用经验:3分你没有编程相关的工作经验:3分你不认为自己擅长独立学习:4分当我说这个记分表实际是一个逻辑回归算法时,你不明白我的意思:1分注意:需要考虑的是,你是否需要数据科学硕士学位或数据科学训练营。如果选择参加训练营,要注意他们的激励措施:是否课程完成后保证聘用?是否有与训练营相关的求职指导服务?许多人都对训练营持怀疑态度,这是有道理的。但大多数忽略的是,他们对待大学所提供的相关硕士学位也该如此。巩固硕士学位就相当于训练营。如果你不在乎你的成绩,那么要注重你从中学到了什么。在选择相应的硕士学位和课程项目时要询问其研究生就业率。有的大学希望学生选一个简单的专业,而不是好的专业,这是一场心理博弈。你的目标是最终被聘用,找到理想的工作,而不是仅仅为了一纸文凭而付出时间和精力。即使完成了硕士学位,你还需要学习很多技能,可能比你预想的还要多。但只要硕士课程的时间较短(最好不超过2年),成本不是太高。三、本科学位总的来说,是的,成为数据科学家你需要相关本科学位。不仅仅是因为你需要掌握相关知识,而且公司并不认为你通过自学,参加训练营和一些在线课程就能胜任数据科学的工作 。但关于本科学位你要注意的是,如果你和科技行业的人聊聊,你很快会发现科技型工作中涉及到的内容要远远超出学校课本。这是因为学校所教的本科课程一般比现实情况要滞后5到10年。如果你学的是不会发生很大变化的专业是没有太大问题的,比如如物理、数学或统计数据等。但是如果你是工程或计算机科学专业,并且你在一家出色的公司实习,你想休学或肄业来获得更多的工作经验,那么你可以考虑这样做。如果你读本科的目的是为了获得一份工作,你已经在一家有不错前景的公司获得职位,那么何必多付几年学费呢。我的意思并不是你应该不读完本科就去工作,我想说的是,如果你完成了实习并且获得了相应的全职工作,那么对于是否完成学业应该有更开放的观念。而不是因为大家都这么做,才做出这种选择。结语在本文中,我给出的一些建议可能不是那么常规。但在数据科学这样快速发展的领域,惯例往往并不是最优选择。当今社会中,人们对传统教育价值的看法应该与时俱进。当然,这并不意味着正规教育以及研究生学位是不值得的。但是,不应该认为获得硕士或博士学位是必备的。如果你读研读博只是为了符合数据科学职业轨迹的刻板印象,那么你可能需要重新考虑了。

January 11, 2019 · 1 min · jiezi

为什么Kaggle不会让你成为一名出色的数据科学家?

作者 | Pranay DaveCDA 数据分析师原创作品,转载需授权毫无疑问,Kaggle是非常适合学习数据科学的平台。许多数据科学家在Kaggle上投入了大量时间。但同时,你不应该只依靠Kaggle来学习数据科学技能。以下就是当中的原因:1.数据科学不仅仅是预测Kaggle主要针对预测相关的问题。然而许多现实问题是与预测无关的。例如,许多公司都想知道用户流失的最常见途径。这些类型的问题需要了解不同的数据类型和用户接触点,例如web导航、计费、客服中心交互、商店访问等问题。同时还需要识别重要事件,例如超额计费或导航错误。在确定所有事件后,你需要应用路径算法来了解导致用户流失的常见路径。解决这类问题不能仅靠预测算法,而需要能够根据事件构建时间线的算法。同样,解决许多其他问题也需要预测之外的技能。能够解决预测性问题是很强大的,但作为数据科学家你需要解决多种类型的问题。现实情况中有更多类型的问题需要解决,因此你不能仅局限于Kaggle,还需要用其他技能解决现实的数据科学挑战。2.无法提高图算法方面的技能社交网络分析、影响预测、社区分析、欺诈网络分析等,这些有趣的分析问题都是数据科学家需要解决。解决这类问题需要有关图形算法的知识,如Pagerank、Modularity、ShortestPath、EigenVectorCentrality等等。网络或社区类型问题在Kaggle中很少见。解决图形和网络方面问题需要节点和链接相关数据,而Kaggle中大多数数据并不是这种形式的。当然,你可以将问题转换为使用图算法,但这种情况很少。Kaggle上缺少这类的比赛,这也表明了于数据科学家日常需要解决问题的巨大差距。3.无法提高算法可解释性算法的可解释性越来越重要。你可以使用高大上的方法和最复杂的算法,但如果无法解释算法是怎样得到预测的,在企业中这将是一个大问题。这种说不清缘由的算法被称为“黑匣子”算法。使用黑盒算法存在一定的隐患,而且也可能造成法律方面的问题。假设,你开发了一种非常精确的算法集合来预测信用风险。在投入生产时,它将用于预测信贷风险。其中有些人的信用得分会很低,被拒绝贷款的人有权知道他们申请被拒的原因。如果算法无法提供解释,则可能会产生法律问题。在Kaggle比赛中,获胜者是基于准确性,而不是基于可解释性。这意味着比赛中数据科学家可以使用复杂的算法来保证高准确性,而不必关心可解释性。这种方法能够赢得比赛,但在企业的数据科学项目中就行不通了。4.缺少投资回报率的分析环节公司正在加大数据科学技能方面的投入。他们希望数据科学项目能够提供投资回报率。通常,成功的分析项目需要数据科学算法与投资回报率紧密相关。其中一个例子是预测性维护,其中能够对设备故障进行预测。假设设备的故障率为10%,那么你需要派维护人员去进行检查吗?可能并不需要。但如果故障率为95%,那是肯定需要的。然而在实际情况中,故障率通常为55%,63%等,这时就不确定了。如果公司派维护人员检查所有这些设备,则可能产生巨大的成本。如果不派人检查,则会有很大的设备故障风险。那么故障率的阈值应该是多少呢?这时就需要计算投资回报率了。因此非常需要数据科学家给出当中的阈值,从而帮助公司确定相关决策。Kaggle并不涉及这方面的分析,而只专注预测,并不考虑如何把数据科学结果应用于投资回报率。5.不会涉及到模拟和优化问题关于模拟和优化算法,比如系统动态仿真、基于代理模拟或蒙特卡罗模拟等应该是所有数据科学家的必备技能。金融优化、路线优化、定价等许多问题都是数据科学家需要解决的问题。以价格预测为例,你可以使用机器学习,根据季节、日期、地点、竞争对手价格等数据来预测产品价格。但机器学习算法预测的价格是否是最优价格?也许不是。为了确定最优价格,你首先要确定优化目标。优化目标可以设为利润优化。在这种情况下,你需要确定提供最佳利润的价格范围。为了留住用户,这样的价格不能设太高。同时,为了保持良好的利润率,也不应该太低。因此,你需要通过优化算法来确定最佳价格范围。如果预测价格在价格范围内,那么机器学习的结果是可以接受的,否则应被拒绝。在Kaggle上,通常不会给出利润优化等优化目标。因此,当中涉及的问题仍然局限于机器学习,而并没有探索优化方面的问题。6.无法体验模型部署和操作假设你的模型在Kaggle排行榜位居前列。然而部署模型是完全另外一回事,这是在Kaggle上无法体验的。生产部署模型会涉及到docker、kubernetes等技术。虽然数据科学家并不需要成为docker和kubernetes方面的专家,但至少要能够熟练使用。很多情况下,数据科学家需要用docker创建评分管道。操作和部署还包括定期监控模型性能,并在必要时采取改进措施。假设有一个产品推荐模型。你在某个时间点观察到,由于推荐而导致销售额下降。那么问题是出在模型上吗?还是其他方面呢?数据科学家需要参与到模型部署环节,从而获得获得真实而丰富的体验。结语数据科学家需要涉及算法可解释性、投资回报率评估、优化等技能。在这一系列问题中,你将解决各种有趣的现实问题,从而更全面的提高数据科学相关技能。对于数据科学家而言,不要仅局限于Kaggle,而是要从其他角度解决不同类型的数据科学问题。

January 8, 2019 · 1 min · jiezi

ApacheCN 学习资源汇总 2018.12

【主页】 apachecn.org【Github】@ApacheCN暂时下线: 社区暂时下线: cwiki 知识库自媒体平台微博:@ApacheCN知乎:@ApacheCNCSDN简书OSChina博客园我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI)的爱好者!合作or侵权,请联系【fonttian】<fonttian@gmail.com> | 请抄送一份到 <apachecn@163.com>Java 基础Java 编程思想Java Web 和大数据Spark 中文文档Storm 中文文档Kafka 中文文档Flink 中文文档Beam 中文文档Zeppelin 0.7.2 中文文档Elasticsearch 5.4 中文文档Kibana 5.2 中文文档Kudu 1.4.0 中文文档Spring Boot 1.5.2 中文文档Airflow 中文文档区块链Solidity 中文文档数学笔记MIT 18.06 线性代数笔记Python 数据科学NumPy 中文文档Pandas 中文文档Matplotlib 中文文档UCB Data8 课本:计算与推断思维UCB Prob140 课本:面向数据科学的概率论UCB DS100 课本:数据科学的原理与技巧利用 Python 进行数据分析 · 第 2 版Quant Wikifast.ai 数值线性代数讲义 v2Pandas Cookbook 带注释源码statsmodels 中文文档CS 教程LeetCode 中文文档GeeksForGeeks 翻译计划UCB CS61a 课本:SICP Python 描述UCB CS61b 课本:Java 中的数据结构数据结构思维中国大学 MOOC 计算机操作系统笔记简单数据结构实现AI 教程AILearning - 机器学习实战Sklearn 与 TensorFlow 机器学习实用指南面向机器学习的特征工程Python 数据分析与挖掘实战(带注释源码)SciPyCon 2018 Sklearn 教程TensorFlow 学习指南fast.ai 机器学习和深度学习中文笔记HackCV 网站文章翻译台湾大学林轩田机器学习笔记Scikit-learn 秘籍写给人类的机器学习数据科学和人工智能技术笔记AI 文档sklearn 中文文档pytorch 0.3 中文文档TensorFlow R1.2 中文文档xgboost 中文文档lightgbm 中文文档fasttext 中文文档gensim 中文文档AI 比赛Kaggle 中文文档比赛收集平台其它独立开发/自由职业/远程工作资源列表 ...

December 28, 2018 · 1 min · jiezi

从入门到求职,成为数据科学家的终极指南

作者 | Admond Lee翻译 | Mika本文为 CDA 数据分析师原创作品,转载需授权你想成为一名数据科学家?很棒,说明你是很有上进心的人,而且对数据科学充满热情,并希望通过解决复杂的问题为公司带来价值。但是你在数据科学方面毫无经验,也不知道如何开始。我很懂你,因为曾经我也是如此。本文就是特别针对热情且有抱负的数据科学家,解答进入该领域最常见的问题和挑战。我希望通过分享我自己的经验,帮助你了解入科从事数据科学的职业,并为你提供一些指南,让你的学习之旅更加愉快。让我们开始吧!数据科学人才缺口根据国际数据公司(IDC)预测,2020年全球大数据和业务分析收入将超过2100亿美元。根据LinkedIn 与2018年8月发布的美国劳动力报告, 2015年美国的数据科学人才过剩。三年后,随着越来越多公司面临数据科学技能人才的短缺,这一趋势发生了巨大变化。越来越多的公司开始使用大数据得出分析见解和制定决策。从经济角度讲,这完全取决于供需关系。好消息是:形势以及发生了转变。坏消息是:随着数据科学领域的就业机会不断增加,但很多有抱负的数据科学家由于技能不符合市场的需求,而难以找到心仪的工作。在接下来的部分中,你将看到该如何提高数据科学技能,从而在大量求职者中脱颖而出,最终收获梦想的工作。终极指南1.需要哪些技能以及如何掌握?说实话,要掌握数据科学领域所有技能几乎是不可能的,因为范围太广了。总有一些技术是数据科学家没有掌握的,因为不同的业务需要不同的技能。但有一些核心技能是数据科学家所必须掌握的。技术能力,数学和统计学,编程和商业知识。尽管无论使用何种语言,编程能力都是必备的。作为数据科学家,我们应该运用商业沟通能力想企业高层说明模型结果,同时基于数学和统计学的支持。数学和统计学关于数学和统计学,可以查看Randy Lao的相关文章,当中的资源非常丰富。https://medium.com/@randylaosat当我刚开始学习数据科学时,我读了这本书 An Introduction to Statistical Learning — with Applications in R(统计学习导论 - 与R中的应用)。我强烈推荐这本书给初学者,因为本书侧重于统计建模和机器学习的基本概念,并提供详细而直观的解释。如果你特别喜欢数学,也许你更喜欢这本书:The Elements of Statistical Learning(统计学习中的元素)。编程关于学习编程,特别是对于没有经验的初学者,我建议专注于学习一种语言,我个人更喜欢Python,因为Python更容易学习。关于Python或R哪种语言更好一直都存在争论,我个人认为重点应放在如何帮助企业解决问题,而不是使用哪种语言。商业知识最后,我要强调的是对商业知识的理解也是至关重要的。软技能事实上,软技能比硬技能更重要。在LinkedIn询问了2000名商业领袖,我们发现2018年他们最希望员工具备的软技能包括:领导力、沟通能力、合作能力和时间管理能力。我认为这些软技能在数据科学家的日常工作中起着至关重要的作用。2.如何选择合适的训练营和在线课程?随着人工智能和数据科学的兴起,大量课程课程、训练营如雨后春笋般涌现,都不希望错失良机。因此问题来了,该如何选择适合你的学习资源呢?我的选择方法如下:没有一门课程能涵盖你需要的所有资源。有些课程在某些方面是重叠的,因此不值得花钱购买不同但有重复性的课程。首先要知道你需要学什么。不要因为花哨和吸引人的标题就盲目选择课程。通过查看求职网站上数据科学家的职位描述,你会发现一些公司需要的通用技能。然后通过了解自己缺乏的技能去搜索相应课程。比较不同平台提供的优质课程。类比几个课程,并且查看其他人的评论(非常重要!)。另一方面,Coursera、Udemy、Lynda、Codecademy、DataCamp、Dataquest等平台也提供许多免费课程。以下是我个人特别喜欢的一些课程:1.Machine Learning ,主讲人: Coursera的联合创始人吴恩达2.Python for Data Science and Machine Learning Bootcamp,主讲人 :Jose Portilla3.Deep Learning A-Z™: Hands-On Artificial Neural Networks,主讲人: Kirill Eremenko,Hadelin de Ponteves4.Python for Data Science Essential Training ,主讲人:Lillian Pierson5.The Ultimate Hands-On Hadoop — Tame your Big Data,主讲人:Frank Kane3.能否通过开源学习成为数据科学家?我想说的是,通过开源学习足以让你开始从事数据科学,之后可以根据业务需求进一步发展自己的职业生涯。4.对于零基础的初学者有什么推荐的书籍吗?没有固定的学习途径,条条大路通罗马。阅读相关书籍是掌握基础知识的良好。注意不要试图去记忆具体的数学和算法细节,因为当应用于实际问题进行编程时,你可能会忘记这些内容。你只需了解一定的基础知识,并继续学习,要务实。不要试图完全了解所有知识,因为有时完美主义会给你的学习拖后腿。关于Python、机器学习和深度学习的基础知识,我推荐以下书籍:Learning PythonPython for Data AnalysisAn Introduction to Statistical LearningMachine Learning for Absolute BeginnersPython Machine LearningPython Data Science HandbookIntroduction to Machine Learning with PythonDeep Learning with PythonDeep Learning with Keras5.如何在理解商业问题(制定解决方案)和提高技术技能(编程、数学知识等)之间取得平衡?在理解商业问题和制定解决方案之前,我首先去提高自己的技术技能。商业问题在于”是什么”和”为什么”。要解决商业问题,首先必须解决问题。而技术技能是注重于”怎么做”。我的建议主要基于个人经验。6.如何克服开启数据科学家职业生涯的挑战?对于许多数据科学家来说,主要挑战就是数据科学是信息的海洋。我们可能失去方向,因为有太多的建议和资源,大量的在线课程、研讨会等等,你需要保持专注,知道你拥有什么,你需要什么。在我的数据科学历程中,我主要通过这些方法克服这些挑战:有效地筛选学习资源在刚开始时,我因为大量的资源感到困惑。通过听数据科学家的播客,阅读如何开启数据科学领域的文章,尝试不同在线课程。最终我关注我在本文中分享的这些优质资源。不要放弃当学习过程太过艰难时,我开始怀疑自己,我真的有能力做到吗?我追求的道理是正确的吗?最终对数据科学的热情和耐心让我重新开始,继续不断努力和前行。获得数据科学相关的工作由于就业市场竞争激烈,找到心仪的数据科学工作对我来说并非易事。我提交了大量的简历都毫无结果。因此我开始改进找工作的方法,参加聚会和研讨会,在网上分享我的学习经历,在招聘会上于潜在雇主接触等等。7.如何有效地在简历中加入自己的工作经验,从而提高被录用的几率?这是一种误解,你并不能通过简历中的经验就被聘用。事实上,简历是面试的敲门砖。因此,学习如何写简历对于获得面试机会至关重要。研究表明,招聘人员在确定求职者是否适合该职位时,平均看简历的时间仅为6秒。关于完善简历,我推荐以下网站和文章:VaultTopResumeOptimize GuideA Resume Expert Gives Career Advicehttps://www.facebook.com/busi…How to Pass the 6-Second Resume Testhttps://www.topresume.com/car…How to tailor your Academic CV for Data Science roleshttps://www.linkedin.com/puls…What do Hiring Managers Look For in a Data Scientist’s CV?https://www.linkedin.com/puls…The 14 Things You Need On Your Resume To Land Your Dream Jobhttps://www.elitedaily.com/mo…8.怎样的作品集能帮助我们找到第一数据科学或机器学习方面的工作?简历是不够的,你还需要作品集的支撑。在看了简历之后,招聘人员希望更多地了解你的背景,这时就需要作品集了。可以试着在社交媒体平台分享自己的学习经历,写文章和做播客都是不错的选择。更多资源 学习平台 :Towards Data Science, Quora, DZone, KDnuggets, Analytics Vidhya, DataTau, fast.ai推荐视频:Webinars——Data Science Office Hours, Data Science Connect, Humans of Data Science (HoDS)推荐文章:A Badass’s Guide to Breaking Into Datahttp://www.data-mania.com/blo…10 Must Have Data Science Skillshttps://www.kdnuggets.com/201…My Data Science & Machine Learning, Beginner’s Learning Pathhttps://www.linkedin.com/puls…24 Ultimate Data Science Projects To Boost Your Knowledge and Skillshttps://www.analyticsvidhya.c…值得关注的数据科学家LinkedIn上的数据科学社区非常棒,以下是我认为值得关注的数据科学家和专业人士:Randy LaoKyle McKiouFavio VázquezVin VashishtaEric WeberSarah NooraviKate StrachnyiTarry SinghKarthikeyan P.T.R.Megan SilveyImaad Mohamed KhanAndreas KretzAndriy BurkovCarla GentryNic RyanBeau Walker结语希望本文能够解决你的问题。每当你在数据科学旅程中遇到任何障碍,快要放弃时请记住,坚持是关键。 ...

December 27, 2018 · 1 min · jiezi

机器学习与数据科学决策树指南

摘要: 一份关于决策树的基本介绍,用实例说明详细讲解。还在为如何抉择而感到纠结吗?快采用决策树(Decision Tree)算法帮你做出决定吧。决策树是一类非常强大的机器学习模型,具有高度可解释的同时,在许多任务中也有很高的精度。决策树在机器学习模型领域的特殊之处在于其信息表示的很清楚,而不像一些机器学习方法是个黑匣子,这是因为决策树通过训练学到的“知识”直接形成层次结构,该结构以这样的方式保存和显示学到的知识,即使是非专业人士也可以容易地弄明白。现实生活中的决策树在现实生活中,我们常常用过类似于决策树的方式来决定自己的生活。例如,决定周末安排什么样的活动。采取怎样的活动可能取决于一些因素,比如是否愿意和朋友一起出去或独自度过周末、周末的天气如何等。假设就这两个因素影响你做出决定的话,如果天气晴朗,并且你的朋友可以一起参与,那么你可能想踢足球。如果是下雨天,可能会一起去看电影。如果朋友有事无法参加,那么无论天气如何,可能会去看会书、玩会电子游戏。这就是现实中的一个明显的决策树例子,上述已经构建了一个树来模拟一组顺序的、层次化的决策,最终得到一个结果。这里,为了保持树的小巧,还选择了相当“高级”的决策。例如,如果为天气设置了许多可能的选项,例如晴天(25度)、下雨(25度)、晴天(26度)、下雨(26度)、晴天(27度)…… 等等,这样会使得树尺寸会很大,这种精确的温度对于最后做出的决策没有太相关的关系,因为只是想知道是外界是否下雨,根据下雨的情况决定是否外出,而温度的高低对其影响很小。当然,极寒极热天气还是在家比较舒服。 机器学习中的决策树的概念和上面的思想是相同的,需要构建一个具有一组分层决策的树,最终给出决策结果,即分类或回归预测。尽可能使得决策树尺寸较小,同时要实现高分类/回归准确性。机器学习中的决策树决策树模型的构建一般分为两个步骤:归纳(induction)和修剪(pruning)。归纳是实际构建树的步骤,即根据我们的数据设置所有的分层决策边界。但由于训练决策树的性质,树模型可能容易出现严重的过拟合现象。这个时候就需要采用修剪处理,修剪就是从决策树中删除不必要的分支结构的过程,有效地降低了对抗过拟合的复杂性,并使其更容易解释。归纳|Induction从高层次来看,决策树归纳需要经过4个主要步骤:训练数据集应具有一些特征变量、分类或回归输出;确定数据集中的“最佳特征”以分割数据;将数据拆分为包含此最佳特征的可能值的子集,这种分裂基本上定义了树上的节点,即每个节点是基于数据中的某个特征的分裂点;使用从步骤3创建的数据子集递归地生成新的树节点,保持分裂直到达到一个优化点,在该点已经通过某种度量优化了最大精度,同时最小化了分裂/节点的数量。第1步很简单,只需好好分析数据集。对于步骤2,通常使用贪婪算法来选择要使用的特征和特定分割,以最小化代价函数。构建决策树时执行的拆分相当于划分特征空间。我们将迭代地尝试不同的分割点,最后选择成本最低的分割点。也可以只在数据集中的值范围内进行拆分,这将使得我们免于浪费计算来测试那些表现差的分裂点。对于回归树,可以使用简单的平方误差作为模型的代价函数:其中,Y是期望输出,Y-hat是预测值,对数据集中的所有样本求和以获得总误差。对于分类,使用的是基尼指数函数(Gini Index Function):其中pk是特定预测节点中第k类的训练实例样本的比例。理想情况下, 节点的错误值应为零,这意味着每个拆分输出的类正是我们想要的,一旦到达那个特定的决策节点,无论处于决策边界的这一边还是另一边,其输出也确定好了。在数据集中具有单个分类的概念被称为信息增益。以下是举例:如果选择了某种划分,其中每个输出根据输入数据混合类别,这种情况实际上根本没有获得任何信息; 另一方面,如果采取的分割对于每个输出的类的正确率都很高,那么已经获得 了在具体特征变量上以特定方式分割的信息。之后是对树模型进行分裂,直到树有数千个分支,但这不是一个好主意!这样得到的决策树将是巨大的、缓慢的,并且会过拟合训练数据集。因此,需要设置一些预定义的停止标准来停止树的构造。最常见的停止方法是对分配给每个叶节点的训练样本的数量使用最小数量。如果计数小于某个最小值,则不接受拆分,并将该节点作为最终叶节点。如果所有的叶子节点都成为最终节点,则训练停止。较小的最小数量将提供更精细的分割和信息,但也容易过拟合训练数据。因此,最小数量的取值通常基于数据集设置,具体取决于每个类中预计有多少个示例样本。修剪|Pruning由于训练决策树的性质,可能容易会出现严重的过拟合现象。为每个节点设置最小实例数的正确值可能具有挑战性。大多数情况下,可能只是希望做出合适的决定,而无需最优的决定。因此,无需使得最小值非常小获得非常复杂的树,且有很多分裂是多余的,并没有提高模型的准确性。树修剪是一种利用修剪树中不必要的分裂的技术。从上层开始,修剪将树的一部分从严格的决策边界压缩为更平滑、更通用的树,从而有效地降低树的复杂性。决策树的复杂性定义为树中的分裂数。一种简单而高效的修剪方法是遍历树中的每个节点,并评估将其移除后其代价函数上的效果。如果移除后,代价函数变化不大,那就修剪掉该节点。实例实践使用Scikit Lear中内置的函数来实现分类和回归的决策树是非常容易的。首先加载数据集并初始化决策树以进行分类。from sklearn.datasets import load_irisfrom sklearn import tree# Load in our datasetiris_data = load_iris()# Initialize our decision tree objectclassification_tree = tree.DecisionTreeClassifier()# Train our decision tree (tree induction + pruning)classification_tree = classification_tree.fit(iris_data.data, iris_data.target)Scikit.还允许使用graphviz库可视化构建的树,它附带了一些选项,这些选项将有助于可视化决策节点,并将模型学到的内容进行分割,下面根据特征名称对节点进行着色,并显示每个节点的类和特征信息:import graphviz dot_data = tree.export_graphviz(classification_tree, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = graphviz.Source(dot_data) graph.render(“iris”) 也可以在Scikit Learn中为决策树模型设置几个参数。以下是一些有趣的尝试以获得更好的结果:max_depth:树的最大深度,类似于深度神经网络中的最大层数。较浅会使得模型更快但不准确;更深的模型可能会使得准确性更高,但过拟合的风险也增大,且运行很慢;min_samples_split: 拆分节点所需的最小样本数, 将其设置为合适的值将有助于减轻过拟合;max_features:查找最佳拆分时要考虑的特征数,更高可能意味着更好的结果,但训练也需要更长的时间;min_impurity_split:树生长早期停止的阈值,如果节点的杂质高于阈值,则该节点将分裂,可用于权衡对抗过拟合(高值、小树)与高精度(低值、大树);presort:是否预先分配数据以加快拟合中最佳分割的发现。如果事先对每个特征的数据进行排序,训练算法将更容易找到合适的分裂值;实际中应用决策树的技巧以下是决策树的优缺点总结,可以帮助读者确定它是否适合各自的问题,以及有关如何有效应用它们的一些提示:优点| Pros易于理解和解释:在每个节点都能够确切地看到模型做出了什么决定。在实践中,能够完全理解准确度和误差来自何处,模型可以很好地处理哪种类型的数据,以及输出如何受到特征值的影响。Scikit learn的可视化工具是可视化和理解决策树的绝佳选择;需要准备很少的数据:许多机器学习模型可能需要大量的数据预处理,例如归一化,并且可能需要复杂的正则化方案。另一方面,在调整了一些参数后,决策树可以很好地做到开箱即用;使用树进行推理的计算成本与训练树的数据集呈对数关系,这是一个巨大的优势,意味着输入更多的数据不一定会对推理速度产生巨大的影响;缺点|Cons由于训练的性质,过拟合在决策树中很常见。通常建议执行某种类型的降维,例如PCA, 以便树不必学习如此多的特征上的拆分;出于与过拟合情况类似的原因,决策树也容易变得偏向于在数据集中占多数的类别,对不平衡数据进行某种类平衡(例如类权重、采样或专门的损失函数)操作是一个不错的主意。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

December 26, 2018 · 1 min · jiezi

GAN是一种特殊的损失函数?

摘要: 从本质上来说,生成对抗网络(GAN)是一种特殊的损失函数,我们来深入探索下这句话的含义。数据科学家Jeremy Howard在fast.ai的《生成对抗网络(GAN)》课程中曾经讲过这样一句话:“从本质上来说,生成对抗网络(GAN)是一种特殊的损失函数。”你是否能够理解这句话的意思?读完本文,你会更好的理解这句话的含义。神经网络的函数逼近理论在数学中,我们可以将函数看做一个“机器”或“黑匣子”,我们为这个“机器”或“黑匣子”提供了一个或多个数字作为输入,则会输出一个或多个数字,如下图所示:一般来说,我们可以用一个数学表达式来表示我们想要的函数。但是,在一些特殊的情况下,我们就没办法将函数写成一堆加法和乘法的明确组合,比如:我们希望拥有这样一个函数,即能够判断输入图像的类别是猫还是狗。如果不能用明确的用数学表达式来表达这个函数,那么,我们可以用某种方法近似表示吗?这个近似方法就是神经网络。通用近似定理表明,如果一个前馈神经网络具有线性输出层和至少一层隐藏层,只要给予网络足够数量的神经元,便可以表示任何一个函数。作为损失函数的神经网络现在,我们希望设计一个猫和狗的分类器。但我们没办法设计一个特别明确的分类函数,所以我们另辟蹊径,构建一个神经网络,然后一步一步逐渐实现这一目标。为了更好的逼近,神经网络需要知道距离目标到底还有多远。我们使用损失函数表示误差。现在,存在很多种类型的损失函数,使用哪种损失函数则取决于手头上的任务。并且,他们有一个共同的属性,即这些损失函数必须能够用精确的数学表达式来表示,如:1.L1损失函数(绝对误差):用于回归任务。2.L2损失函数(均方误差):和L1损失函数类似,但对异常值更加敏感。3.交叉熵损失函数:通常用于分类任务。4.Dice系数损失函数:用于分割任务。5.相对熵:又称KL散度,用于测量两个分布之间的差异。在构建一个性能良好的神经网络时,损失函数非常有用。正确深入的理解损失函数,并适时使用损失函数实现目标,是开发人员必备的技能之一。如何设计一个好的损失函数,也是一个异常活跃的研究领域。比如:《密度对象检测的焦点损失函数(Focal Loss)》中就设计了一种新的损失函数,称为焦点损失函数,可以处理人脸检测模型中的差异。可明确表示损失函数的一些限制上文提到的损失函数适用于分类、回归、分割等任务,但是如果模型的输出具有多模态分布,这些损失函数就派不上用场了。比如,对黑白图像进行着色处理。如上图所示:1.输入图像是个黑白鸟类图像,真实图像的颜色是蓝色。2.使用L2损失函数计算模型输出的彩色图像和蓝色真实图像之间的差异。3.接下来,我们有一张非常类似的黑白鸟类图像,其真实图像的颜色是红色。4.L2损失函数现在尝试着将模型输出的颜色和红色的差异最小化。5.根据L2损失函数的反馈,模型学习到:对于类似的鸟类,其输出可以接近红色,也可以接近蓝色,那么,到底应该怎么做呢?6.最后,模型输出鸟类的颜色为黄色,这就是处于红色和蓝色中间的颜色,并且是差异最小化的安全选择,即便是模型以前从未见过黄色的鸟,它也会这样做。7.但是,自然界中没有黄色的鸟类,所以模型的输出并不真实。在很多情况下,这种平均效果并不理想。举个例子来说,如果需要模型预测视频中下一个帧图像,下一个帧有很多种可能,你肯定希望模型输出其中一种可能,然如果使用L1或L2损失函数,模型会将所有可能性平均化,输出一个特别模型的平均图像,这就和我们的目标相悖。生成对抗网络——一种新的损失函数如果我们没办法用明确的数学表达式来表示这个损失函数,那么,我们就可以使用神经网络进行逼近,比如,函数接收一组数字,并输出狗的真实图像。神经网络需要使用损失函数来反馈当前结果如何,但是并没有哪个损失函数可以很好的实现这一目标。会不会有这样一种方法?能够直接逼近神经网络的损失函数,但是我们没必要知道其数学表达式是什么,这就像一个“机器”或“黑匣子”,就跟神经网络一样。也就是说,如果使用一个神经网络模型替换这个损失函数,这样可以吗?对,这就是生成对抗网络(GAN)。我们来看上面两个图,就可以更好的理解损失函数。在上图中,白色框表示输入,粉色和绿色框表示我们要构建的神经网络,蓝色表示损失函数。在vanilla GAN中,只有一个损失函数,即判别器D,这本身就是一个特殊的神经网络。而在Alpha-GAN中,有3个损失函数,即输入数据的判别器D,编码潜在变量的潜在判别器C和传统的像素级L1损失函数。其中,D和C不是明确的损失函数,而是一种逼近,即一个神经网络。梯度如果使用损失函数训练生成网络(和Alpha-GAN网络中的编码器),那么,应该使用哪种损失函数来训练判别器呢?判别器的任务是区分实际数据分布和生成数据分布,使用监督的方式训练判别器比较容易,如二元交叉熵。由于判别器是生成器的损失韩式,这就意味着,判别器的二进制交叉熵损失函数产生的梯度也可以用来更新生成器。结论考虑到神经网络可以代替传统的损失函数,生成对抗网络就实现了这一目标。两个网络之间的相互作用,可以让神经网络执行一些以前无法实现的任务,比如生成逼真的图像等任务。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

December 21, 2018 · 1 min · jiezi

作为数据科学家,我都有哪些弱点?

作者 | William Koehrsen翻译 | Mika本文为 CDA 数据分析师原创作品,转载需授权如果现代工作面试教会了我们什么,那就是关于“你最大的弱点是什么?”这个问题,正确答案是“我工作太努力了。”显然,说出自己的弱点是很可笑的。虽然在个人简历中列出弱点不太好,但是如果不承认自己的不足,我们就无法采取措施改善它们。做出改进的方法很简单:明确现在的位置:找出弱点想变成什么样:制定实现的计划执行计划:一步步改进我们很少能跨越第一步,特别是对于在技术领域工作的人群。我们埋头苦干,不断工作,使用已掌握的技能,而不是获得哪些能让我们工作更轻松或能带来新机会的新技能。自我反省,客观地评估自己,这似乎是一个陌生的概念。但若能够退后一步,弄清我们哪些方面能做得更好,从而在该领域取得进步,这是至关重要的。考虑到这一点,我试着客观地评价自己,并总结了目前自己的三个弱点,改善以下这几点能让我成为更好的数据科学家:软件工程扩展数据科学深度学习本文中我列出这些弱点主要的目的在于:首先,我非常想提高自己的能力,通过列出自己的不足以及如何解决它们,希望能够激励自己继续学习,完成目标。其次,我希望鼓励其他人思考自己有哪些没掌握的技能,以及该如何获取这些技能。最后,我想告诉你,成为出色的数据科学并不需要做到无所不知。关于数据科学和机器学习的知识是无线的,你能够掌握的是有限的。我常常听到初学者抱怨,要掌握的知识太多了,我给出的建议就是:从基础开始,你并不需要掌握所有内容。对于每个弱点,我都列出了具体的问题,以及我目前在做什么进行改进。发现自己的不足很重要,但制定改进计划也同样重要。学习一项新技能需要时间,但计划好一步步的具体步骤会大大增加你成功的几率。1. 软件工程在大学时进行我的第一个数据科学项目后,我开始试着避免一些数据科学方法中的坏习惯。其中包括编写仅运行一次的代码,缺少文档,没有一致性且难阅读的代码,硬编码特定值等。这些都是写论文所带来的,为了写一篇论文,开发针对特定数据集且只能运行一次的解决方案。其中一个典型的例子是,我们有个项目使用建筑能源数据,最初每隔15分钟获取一次数据。当我们把时间增加为20分钟时,数据管道完全崩溃了,因为许多地方已明确将时间编为15分钟。我们不能进行简单的查找和替换,因为该参数被设定为多个名称,如electricity_interval timeBetweenMeasurements还有dataFreq。我们当中没有人想过让代码更易阅读或能够灵活改变输入。相比之下,从软件工程的角度来看,代码必须使用大量不同的输入进行测试,在现有框架内工作,并遵守编程标准,以便其他开发人员能够理解。尽管我的初衷是好的,但我偶尔会像数据科学家那样写代码,而不是像软件工程师那样。现在我正在训练自己像计算机科学家一样思考。我在做什么学习技能没有比练习更好的方法。幸运的是,在我目前的工作中,我能够为内部工具和开源库(Featuretools)做出贡献。这迫使我学习了很多技能,包括:编写单元测试遵循编码风格编写接受更改参数的函数彻底记录代码让他人检查代码重构代码,使其更简单、更易于阅读对于还未工作的数据科学家,你也可以通过参与开源项目获得这些经验。除此之外,你还可以通过查看GitHub上流行库的源代码。像软件工程师一样思考需要改变思维模式,但做到这一点并不难。例如,每当我发现自己在Jupyter Notebook中复制和粘贴代码并更改一些值时,我就会停下来,并意识到从长远的角度看用函数会更高效。我还想研究计算机科学的许多其他方面,例如编写有效的实现,而不是用蛮力方法(例如使用矢量化而不是循环)。同时要注意想一下子全部改变是不显示的,这也是我为什么专注于一些实践,并将其融入到我的工作流程中。虽然数据科学自成一体,但从业者仍可以通过借鉴软件工程等领域的最佳实践从中受益。2. 扩展数据科学虽然你可以自学数据科学中的所有内容,但要将其应用到实践中还是存在一些限制。一个是难以将分析或预测模型扩展到大型数据集。我们中大多数人无法访问计算集群,也不想为一台个人超级计算机掏钱。这意味着当我们学习新方法时,我们倾向于将它们应用于小型且表现良好的数据集。然而在现实情况中,数据集并不符合一定的大小或干净程度,你需要用不同的方法来解决问题。首先,你可能需要打破个人计算机的安全限制,使用远程实例(例如通过AWS EC2)甚至多台计算机。在学习数据科学时,我尝试在EC2机器上练习,这有助于让我熟悉命令行,但是,我仍然没有解决当数据集大于机器的内存情况。最近,我意识到这一点限制了我的前进,是时候学习如何处理更大数据集的了。我在做什么即使不在计算资源上花费大量金钱,就可以实践超出内存限制的数据集的处理方法。其中包括每次迭代数据集的一部分,将大型数据集分成较小的数据集,或者使用Dask这样的工具来处理大数据。我目前采用的方法是将数据集分为多个子集,开发能够处理每个部分的管道,然后使用Dask或Spark,与PySpark并行地运行管道中的子集。这种方法不需要用到超级计算机或集群,你可以在个人计算机上并行操作。此外,由于像Kaggle等数据存储库,我能够找到一些大型的数据集,并查看其他数据科学家的处理它们的方法。我已经学到了很多有用的技巧,例如通过更改数据框中的数据类型来减少内存消耗。这些方法有助于更有效地处理任何大小的数据集。虽然我还没处理过TB级的数据集,但这些方法帮助我学习了处理大数据的基本方法。对于最近的一些项目,我能够运用目前学到的技能对在AWS上运行的集群进行分析。希望在之后的几个月,我能逐步提高处理数据集的大小。3. 深度学习虽然人工智能在繁荣和萧条中更迭,但是它最近在计算机视觉、自然语言处理、深度强化学习等领域的成功应用让我确信基于神经网络的深度学习不是昙花一现。与软件工程或扩展数据科学不同,我目前的职位不需要用到深度学习,例如随机森林等传统的机器学习技术已经能够解决所有问题。但是,我认识到并非每个数据集都是结构整齐的,而神经网络是目前处理文本或图像项目的最佳选择。在深度学习中有许多不同的子领域,很难弄清楚哪些方法最终会胜出。尽管如此,我认为熟悉该领域能够让人们能够处理更广泛的问题。我在做什么我学习深度学习的方法与成为数据科学家的方法相同:阅读着重部署应用的书籍和教程在实际项目中练习技术和方法通过写作分享和解释我的项目在学习一项技术时,最有效的方法是边做边学。对我来说,这意味着不是从基础的基础理论开始,而是通过找出如何实现解决问题的方法。这种自上而下的方法意味着我更重视关于动手的书籍,即当中包括许多代码例子。对于深度学习,我主要看了以下三本书:Deep Learning Cookbook,作者:Douwe OsingaDeep Learning with Python,作者: Francois Chollet Deep Learning,作者:Ian Goodfellow、Yoshua Bengio、Aaron Courville前两本重点是用神经网络构建实际解决方案,而第三本重点是深入理论。当阅读有关技术主题的书籍时,你需要更主动参与其中,尽可能试着书中的代码。像前两本提供代码例子的书籍很棒,我经常会在Jupyter Notebook中逐行输入代码,弄清当中的原理。此外,我不仅试着复制这些代码,还会将它们用于自己的项目。这方面的一个应用是我最近构建的图书推荐系统,该系统是根据Deep Learning Cookbook的类似代码改编的。从头开始创建自己的项目可能会令人生畏,但这也是提升自己最好的方法。最后,学习技术最有效方法之一是教别人。只有当我试着用简单的术语向其他人解释时,我才能我完全理解这个概念。随着学习深度学习的每个知识,我将写下了,分享当中的技术实现细节和概念性解释。教学是最好的学习方式之一,我打算将其作为学习深度学习的一个重要组成部分。结语罗列自己的弱点可能会有点奇怪,但这能让我成为更好的数据科学家。而且,我发现很多人,包括雇主们,会对你坦诚自己的弱点并探讨如何解决它们留下深刻印象。缺乏某些技能并不是缺点——真正的缺点是假装你什么都懂,而且没有想改进的意思。通过发现我在数据科学方面的弱点:软件工程,扩展分析/建模,深度学习,我的目标是提高自己,鼓励其他人思考自己的弱点。要成为成功的数据科学家,你并不需要什么都懂。虽然反思自己的弱点可能是痛苦的,但学习是愉快的:最有成就感的事情莫过于,经过一段时间的持续学习后,你会发现自己比刚开始时已经懂了很多。

December 21, 2018 · 1 min · jiezi

想入门数据科学领域?明确方向更重要

作者 | Jeremie Harris翻译 | MikaCDA 数据分析师原创作品,转载需授权我在一家数据科学培训公司工作。对于学员,我常常给出的建议并不是推荐库或者工具,而是让他们首先明确自己想成为什么样的数据科学家,确定自己的方向。当中的原因在于,数据科学并不是单一且定义明确的领域,公司并不会雇用所谓的全能型数据科学家,而是会选择有拥专业技能的个人。为了更好的理解,假设你们公司想聘请数据科学家。那么,你们肯定有明确的问题需要解决,而这需要具体的技术知识和专业知识。例如,有些公司将简单模型应用于大型数据集;有些公司将复杂模型应用于小型模型;有些公司需要动态训练模型;有些公司根本不使用(传统)模型。以上这些都需要完全不同的技能。对于想进入数据科学领域的人群收到的建议往往是:学习使用Python,构建分类/回归/聚类等项目在开始找工作,这其实是不太合理的。数据科学家在工作中承担了很多责任。人们会将过多的内容归入“数据科学”的范畴。为生产构建强大的数据管道,这应该是数据科学方面的问题。开发一种新的神经网络,这应该是数据科学方面的问题。这种现象并不好,因为这会让有抱负的数据科学家失去方向和对特定问题的关注。为了避免成为全能型数据科学家,再次之前让我们先了解数据科学领域主要有哪些职位,以及他们常常被混淆的原因:1. 数据工程师职位描述为处理大量数据的公司管理数据管道。这意味着在数据需要从源头进行有效地收集和检索,而且在使用前需要进行清理和预处理。重要性如果你只使用过存储在.csv或.txt文件中的相对较小的数据集(小于5G),那么你可能很难理解为什么需要专人维护数据管道。当中的原因在于:1)计算机很难承载大小为50 G的数据集,因此需要以其他方式将其提供给模型;2)大量数据可能需要花费大量时间来处理,并且经常需要冗余存储。进行管理存储需要专业的技术知识。技能要求你需要使用Apache Spark、Hadoop、Hive和Kafka。还需要有扎实的SQL的基础。处理的问题如何构建每分钟能处理1万个请求的管道?如何在不将其全部加载到RAM的情况下清理该数据..]2. 数据分析师职位描述将数据转化为可操作的商业见解。你通常会成为技术团队和商业策略业,销售或营销团队之间的中间人。数据可视化是你日常工作的重要组成部分。重要性有些人很难理解为什么数据分析师如此重要,但他们确实如此。数据分析师需要将经过训练和测试的模型,以及大量用户数据转换为易于理解的格式,以便转化为围商业策略。数据分析师帮助确保数据科学团队不会浪费时间来解决无法提供商业价值的问题。技能要求技能包括Python,SQL,Tableau和Excel。你还需要出色的沟通能力。处理的问题是什么带来了用户增长?如何向管理层解释最近的使用费让用户望而却步?3. 数据科学家职位描述清理和探索数据集,并进行能带来商业价值的预测。你的日常工作包括训练和优化模型,并将其部署到生产中。重要性当你有大量难以被解析的数据,你需要从中提取出可理解的分析见解。这是数据科学家的基本工作:将数据集转换为易于理解的结论。技能要求包括Python、scikit-learn、Pandas、SQL、也许还需要掌握Flask、Spark、TensorFlow、PyTorch。有些数据科学职位纯粹是技术性的,但大多数人要求你具备一定的商业意识。处理的问题我们有多少种不同的用户类型?是否能建立一个模型来预测哪些产品将销售给哪些用户?4. 机器学习工程师职位描述构建、优化机器学习模型,以及部署到生产。你的工作离不开机器学习模型,而且需要将其放入全栈应用程序或硬件中,但也需要自己设计模型。技能要求需要掌握Python、Javascript、scikit-learn,TensorFlow 、PyTorch,以及SQL或MongoDB。处理的问题如何将此Keras模型集成到我们的Javascript应用程序中?如何减少推荐系统的预测时间和预测成本?5. 机器学习研究员职位描述找到解决数据科学和深度学习中的挑战性问题的新方法。你不会使用开箱即用的解决方案,而是需要创建解决方案。技能要求需要用到Python、TensorFlow、PyTorch和SQL。处理的问题如何将模型的准确性提高到最高水平?自定义优化器有助于减少训练时间吗?结语我在这里列出的五个职位绝对不是孤立的。例如,在早期创业公司,数据科学家也需要充当数据工程师或数据分析师的角色。但是大多数工作会按类别分类,公司规模越大,类别则越具体。总的来说,为了找到心仪的工作,你需要明确具体的方向。如果你想成为一名数据分析师,就不用学习TensorFlow;如果你想成为一名机器学习研究员,那么不用先学Pyspark。可以思考一下你希望为公司带来哪方面的价值,并朝着这个方向努力,这是入门的最佳方式。

December 18, 2018 · 1 min · jiezi

求职 | 一份理想的数据科学家简历中要包括哪些技能?

作者 | George Liu翻译 | MikaCDA 数据分析师原创作品,转载需授权如果你是一名数据科学方面的求职者,你肯定想知道在简历上写些什么才能获得面试的机会;如果你想进入这个领域,你一定想知道具备哪些技术才能成为一名有竞争力的求职者。在本文中,我们对Indeed中一千份数据科学相关的招聘信息进行了分析,主要针对数据工程师、数据科学家和机器学习工程师这三个职位,希望能解答你的疑问。首先,让我们来看看不同职位的技能要求。一、必备语言1、 目前Python处于主导地位关于数据科学中的首选语言,究竟是Python还是R曾有过争论。显然,市场需求说明如今Python是处于主导地位。同样值得注意的是,R语言可能还排在SAS之后。因此,如果你打算进入数据科学领域,不妨把学习重点放在Python上。作为数据库语言,SQL是数据科学家第二重要的语言。由于数据科学家职业的广泛性,其他语言也扮演着重要角色。数据科学家必备语言排名为:Python、SQL、Scala、Lua、Java、SAS、R、C ++和Matlab。2、机器学习工程师使用的语言更加多样化Python是机器学习工程师的首选语言,这并不令人惊讶。机器学习工程师需要从头开始实现算法,并在大数据环境中部署ML模型,因此C ++和Scala等相关语言也很重要。总的来说,机器学习工程师使用的语言更加多样化。机器学习工程师必备语言排名为:Python、Scala、Java、C ++、Lua、SQL、Javascript、Matlab、CSS和C#。3、SQL 是数据工程师的必备技能数据工程师一直都在于数据库打交道,而SQL是数据库语言,因此SQL是首选语言也就不足为奇了。同时Python也重要,但重要性排在Scala和Java之后,因为后者能够帮助数据工程师处理大数据。数据工程师必备语言排名为:SQL、Scala、Java、Python和Lua。4、Scala 逐渐成为数据科学中第二重要的语言(而不是R语言)当我们研究分析不同职位时发现,Scala要么的重要性排在第二或第三。因此我们可以,数据科学领域中排名中前三的语言是Python、SQL和Scala。如果你打算学一门新语言,可以试试Scala。二、大数据技能Spark是除数据工程师之外,最必备的大数据技能仅对数据工程师而言,Hadoop比Spark更为重要。但总的来说,Spark绝对是应该首先学习的大数据框架。相对于数据科学家,Cassandra对工程师更为重要,而似乎只有数据工程师才需要用Storm。数据科学领域必备的大数据技术排名为:Spark、Hadoop、Kafka、Hive。三、 深度学习框架深度学习方面,TensorFlow 占主导地位在数据工程师的招聘中很少提到深度学习框架,因此该职位可能不需要用到深度学习框架;在机器学习工程师招聘中,常常提到深度学习框架,这表明机器学习工程师需要常常处理机器学习建模,而不仅仅是模型部署。此外,TensorFlow在深度学习领域绝对占据主导地位。尽管Keras作为高级深度学习框架在数据科学家中非常受欢迎,但对于机器学习工程师职位,很少要求要掌握Keras,这可能表明机器学习从业者大多使用较低级别的框架,如TensorFlow。数据科学中要掌握的深度学习框架排名为:TensorFlow、Torch、Caffee和MXNet。四、云计算平台AWS占据主导地位五、机器学习应用机器学习方面计算机视觉是最主要的技能需求对于一般数据科学家来说,机器学习最大的应用领域是自然语言处理,其次是计算机视觉、语音识别、欺诈检测和推荐系统。有趣的是,在机器学习工程师职位招聘中,最大的需求是计算机视觉,其次才是自然语言处理。另一方面,机器学习方面数据工程师再次成为备受专注,然而这些机器学习应用领域与他们并没有关系。如果想成为数据科学家,你可以想进入的领域,选择不同类型的项目来展现专业知识,但对于机器学习工程师来说,计算机视觉是最佳选择!六、可视化工具Tableau是可视化方面的必备技能在招聘中,数据科学家大多都要求需要掌握可视化工具,而很少要求数据工程师和机器学习工程师掌握。然而对以上每个职位来说,Tableau都是首选。对于数据科学家,Shiny、Matplotlib、ggplot和Seaborn都同样重要。七、其他技能在数据科学领域,Git对每种职位都很重要,而Docker仅适用于工程师八、词云接下来,我们使用词云来分析每个职位最常用的关键词,并结合相应的技能为所有数据科学角色构建理想的技能清单!数据科学家:更注重机器学习,而不是业务或分析数据科学家一直被认为是需要统计、分析、机器学习和商业知识的全方位职业。然而,现在看来在招聘数据科学家时,比起其他技能,更多地关注机器学习技能。其他主要要求包括:业务、管理、通信、研究、开发、分析、产品、技术、统计、算法、模型、客户和计算机科学。系统设计和构建与一般的数据科学家相比,机器学习工程师的技能要求更为集中,包括研究、设计和工程。显然,解决方案、产品、软件和系统是主要技能要求。除此之外还伴随着研究、算法、人工智能、深度学习和计算机视觉等要求。同时商业、管理、客户和沟通等也很重要。另一方面,管道和平台也很重要,这也印证了机器学习工程师主要负责构建数据管道以部署机器学习系统。数据工程师:技能要求更为集中与机器学习工程师相比,数据工程师的技能要求更集中。重点是通过设计和开发管道来支持产品、系统和解决方案。最主要的要求包括:技术技能、数据库、构建、测试、环境和质量。机器学习也很重要,可能是因为构建管道主要为了支持机器学习模型部署数据需求。结语希望通过本文能帮助你了解,在数据科学方面雇主最需要求职者哪些技能。最重要的是,解答关于要学习哪些技能,如何更好的写求职简历等问题。

December 14, 2018 · 1 min · jiezi

如何创建一个数据科学项目?

摘要: 在一个新的数据科学项目,你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面?读完本文,会让你拥有一个更加科学的工作流程。假如你想要开始一个新的数据科学项目,比如对数据集进行简单的分析,或者是一个复杂的项目。你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面?数据科学是当前一个不太成熟的行业,每个人都各成一家。虽然我们可以在网上参照各种模板项目、文章、博客等创建一个数据科学项目,但是目前也没有教科书对这些知识做一个统一的回答。每个数据科学家都是从经验和错误中不断的探索和学习。现在,我逐渐了解到什么是典型的“数据科学项目”,应该如何构建项目?需要使用什么工具?在这篇文章中,我希望把我的经验分享给你。工作流程尽管数据科学项目的目标、规模及技术所涉及的范围很广,但其基本流程大致如下:如上图所示,项目不同,其侧重点也会有所不同:有些项目的某个过程可能特别复杂,而另一些项目可能就不需要某一过程。举个例子来说,数据科学分析项目通常就不需要“部署”(Deployment)和“监控”(Monitoring)这两个过程。现在,我们逐一来细说各个过程。源数据访问不管是你接触到人类基因组还是iris.csv,通常都会有 “原始源数据”这一概念。数据有很多种形式,可以是固定的,也可以是动态变化的,可以存储在本地或云端。其第一步都是对源数据访问,如下所示:源数据是*.csv文件集合。使用Cookiecutter工具在项目的根文件夹中创建一个data/raw/子目录,并将所有的文件存储在这里;创建docs/data.rst文件描述源数据的含义。源数据是*.csv文件集合。启动SQL服务器,创建一个raw表,将所有的CSV文件作为单独的表导入。创建docs/data.rst文件描述源数据及SQL Server位置。源数据是基因组序列文件、患者记录、excel及word文档组合等,后续还会以不可预测的方式增长。这样可以在云服务器中创建SQL数据库,将表导入。你可以在data/raw/目录存储特别大的基因组序列,在data/raw/unprocessed目录存储excel和word文件;还可以使用DVC创建Amazon S3存储器,并将data/raw/目录推送过去;也可以创建一个Python包来访问外部网站;创建docs/data.rst目录,指定SQL服务器、S3存储器和外部网站。源数据中包含不断更新的网站日志。可以使用ELK stack 并配置网站以流式传输新日志。源数据包含10万张大小为128128像素的彩色图像,所有图像的大小则为100,0001281283,将其保存在HDF5文件images.h5中。创建一个Quilt数据包并将其推送给自己的私人Quilt存储库;创建/docs/data.rst文件,为了使用数据,必须首先使用quilt install mypkg/images导入工作区,然后再使用 from quilt.data.mypkg import images导入到代码中。源数据是模拟数据集。将数据集生成实现为Python类,并在README.txt文件中记录其使用。通常来说,在设置数据源的时候可以遵循以下规则:存储数据的方式有意义,另外还要方便查询、索引。保证数据易于共享,可以使用NFS分区、Amazon S3存储器、Git-LFS存储器、Quilt包等。确保源数据是只读状态,且要备份副本。花一定的时间,记录下所有数据的含义、位置及访问过程。上面这个步骤很重要。后续项目会你可能会犯任何错误,比如源文件无效、误用方法等等,如果没有记住数据的含义、位置及访问过程,那将很麻烦。数据处理数据处理的目的是将数据转化为“干净”的数据,以便建模。在多数情况下,这种“干净”的形式就是一个特征表,因此,“数据处理”通常归结为各种形式的特征工程(feature engineering),其核心要求是:确保特征工程的逻辑可维护,目标数据集可重现,整个管道可以追溯到源数据表述。计算图(computation graph)即满足以上要求。具体例子如下:根据cookiecutter-data-science规则,使用Makefile来描述计算图。通过脚本实现每个步骤,该脚本将一些数据文件作为输入,然后输出一个新的数据文件并存储在项目的data/interim或data/processed目录中。可以使用 make -j <njobs>命令进行并行运算。使用DVC来描述和执行计算图,其过程与上面类似,此外还有共享生成文件等功能。还可以使用Luigi、Airflow或其他专用工作流管理系统来描述和执行计算图。除此之外,还可以在基于web的精美仪表板上查看计算进度。所有源数据都以表的形式存储在SQL数据库中,在SQL视图中实现所有的特征提取逻辑。此外,还可以使用SQL视图来描述对象的样本。然后,你可以根据这些特征和样本视图创建最终的模型数据集。首先,允许用户轻松的跟踪当前所定义的特征,而不用存储在大型数据表中。特征定义仅在代码运行期间有效;其次,模型从部署到生产非常简单,假设实时数据库使用相同的模式,你就只需要复制相应的视图。此外,还可以使用CTE语句将所有的特征定义编译为模型最终预测的单个查询语句。在进行数据处理时,请注意一下问题:1.重复以计算图的形式处理数据。2.考虑计算基础架构。是否进行长时间计算?是否需要并行计算还是聚类?是否可以从具有跟踪任务执行的管理UI作业中获益?3.如果想要将模型部署到生产环境中,请确保系统支持该用例。如果正在开发一个包含JAVA Android应用程序模型,但是还是想用Python开发,为了避免不必要的麻烦,就可以使用一个专门设计的DSL,然后将这个DSL转换为Java或PMML之类的中间格式。4.考虑存储特征或临时计算的元数据。可以将每个特征列保存在单独的文件中,或使用Python函数注释。建模完成数据处理和特征设计后即可开始进行建模。在一些数据科学项目中,建模可以归结为单个m.fit(X,y)或某个按钮;而在其他项目中则可能会涉及数周的迭代和实验。通常来说,你可以从“特征工程”建模开始,当模型的输出构成了很多特征时,数据处理和建模这两个过程并没有明确的界限,它们都涉及到计算。尽管如此,将建模单独列出来作为一个步骤,仍然很有意义,因为这往往会涉及到一个特殊的需求:实验管理(experiment management)。具体例子如下:如果你正在训练一个模型,用于在iris.csv数据集中对Irises进行分类。你需要尝试十个左右的标准sklearn模型,每个模型都有多个不同的参数值,并且测试不同的特征子集。如果你正在设计一个基于神经网络的图像分类模型。你可以使用ModelDB(或其他实验管理工具,如TensorBoard,Sacred,FGLab,Hyperdash,FloydHub,Comet.ML,DatMo,MLFlow,…)来记录学习曲线和实验结果,以便选择最佳的模型。使用Makefile(或DVC、工作流引擎)实现整个管道。模型训练只是计算图中的一个步骤,它输出model-<id>.pkl 文件,将模型最终AUC值附加到CSV文件,并创建 model-<id>.html报告,还有一堆用于评估的模型性能报告。实验管理/模型版本控制的UI外观如下:模型部署在实际应用中,模型最终都要部署到生产环境中,一定要有一个有效的计划,下面有些例子:建模管道输出一个训练过模型的pickle文件。所有的数据访问和特征工程代码都是由一系列Python函数实现。你需要做的就是将模型部署到Python应用程序中,创建一个包含必要函数和模型pickle文件的Python包。管建模道输出一个训练过的模型的pickle文件。部署模型需要使用Flask创建一个REST服务将其打包为一个docker容器,并通过公司的Kubernetes云服务器提供服务。训练管道生成TensorFlow模型。可以将TensorFlow服务当做REST服务。每次更新模型时,都要创建测试并运行。训练管道生成PMML文件。你可以用Java中的JPMML库来读取,一定要确保PMML导出器中要有模型测试。训练管道将模型编译为SQL查询,将SQL查询编码到应用程序中。我们对模型部署做一下总结:1.模型部署的方式有很多种。在部署之前一定要了解实际情况,并提前做计划:是否需要将模型部署到其他语言编写的代码库中?如果使用REST服务,服务的负载时多少?能否进行批量预测?如果打算购买服务,费用是多少?如果决定使用PMML,那么就要确保它能够支持你的预期预处理逻辑。如果在训练期间使用第三方数据源,那么就要考虑是否在生产中能够与它们集成,以及如何在管道导出模型中对访问信息进行编码。2.模型一旦部署到生产环境,它就转变为一行行实际的代码,所以也要满足所有需求,因此,这就需要测试。在理想情况下,部署管道应该产生用于部署的模型包以及测试时需要的所有内容。模型监控将模型成功部署到生产环境,也许训练集中的输入分布与现实不同,模型需要重新练或重新校准;也许系统性能没有达到预期。因此,你需要收集模型性能的数据并对其进行监控。这就需要你设置一个可视化仪表板,具体事例如下:将模型的输入和输出保存在logstash或数据表中,设置Metabase(或Tableau,MyDBR,Grafana等)并创建可视化模型性能和校准指标报告。进一步探索和报告在整个数据科学项目中,你还需要尝试不同的假设,以生成图标和报告。这些任务与构建管道有所不同,主要体现在两个方面:首先,大部分任务不需要可再现性,即不用包含在计算图中。另外,也没必要使用模型的可重复性,在Jupyter中手动绘制图即可。其次,这些“进一步探索”的问题往往具有不可预测性:可能需要分析性能监控日志中的一个异常值;或者测试一个新的算法。这些探索会塞满你的笔记本中,团队中的其他人可能看不懂你的记录。因此按照日期排列子项目很重要。在项目中创建project目录,子文件夹命名格式为:projects/YYYY-MM-DD -项目名称。如下所示:./2017-01-19 - Training prototype/ (README, unsorted files)./2017-01-25 - Planning slides/ (README, slides, images, notebook)./2017-02-03 - LTV estimates/ README tasks/ (another set of date-ordered subfolders)./2017-02-10 - Cleanup script/ README script.py./… 50 folders more …注意,你可以根据需要自由组织每个子项目的内部目录,因为每个子项目很可能也是一个“数据科学项目”。在任何情况下,在每个子项目中都要有个README文件夹或README.txt文件,简要列出每个子项目目录的信息。如果项目列表太长,你需要重新组织项目目录,比如压缩一部分文件移动到存档文件夹中。“探索性”的任务有两种形式,即一次性分析和可重复性使用的代码,这时候建立一些约定很有必要。服务清单数据科学项目可能会依赖一些服务,可以指定提供以下9个关键服务,来描述期望:1.文件存储。任何一个数据科学项目都必须有个存储项目的地方,且需要整个团队共享。它是网络驱动器上的一个文件夹?还是Git存储库中的一个文件夹?2.数据服务。如何存储和访问数据?这里的“数据”指的是计算机读取或输出的所有内容,包括源数据、中间结果及第三方数据集访问、元数据、模型及报告等。3.版本。代码、数据、模型、报告和文档都需要有版本控制,另外一定要备份!4.元数据和文档。如何记录项目及子项目?是否有任何机器都可读的特征、脚本、数据集或模型的元数据?5.交互式计算。在交互式计算中,你选择JupyterLab、RStudio、ROOT、Octave还是Matlab?您是否为交互式并行计算设置了一个聚类(如ipyparallel或dask)?6.作业队列和调度程序。代码如何运行?是否需要安排定期维护?7.计算图。如何描述计算图并建立可重复性?8.实验管理。如何收集、查看和分析模型培训进度和结果?使用 ModelDB、Hyperdash还是 FloydHub?9.监控仪表板。如何收集和跟踪模型在生产环境中的具体表现?使用元数据库、Tableau、 PowerBI还是Grafana?最后,我总结了一个电子表格,包含了本文提到的所有工具,可自行下载使用。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

December 14, 2018 · 1 min · jiezi

转型为一名数据科学家的正确打开方式

摘要: 如果你是一名初级入门者,或者是一名软件工程师,亦或者是一名数学物理系毕业生,想要转型为一名数据科学家,按照我的建议一步一个脚印的去做,你会事半功倍。维基百科是你在数据科学领域解惑最佳的方式之一,但它所提供的信息要么就是特别简单,要么就是特别复杂。同样的,在数据科学职业建议这方面也一样:有些帖子针对的是初学者,有些则针对的是软件工程师,亦或者是针对入门后希望有所提升的入门级群体。因此,对于那些想要进入该领域的数据科学家来说,真的不知道去哪里寻找建议。没有完美的建议可以适合所有人,在这里我就初级入门者、软件工程师以及数学物理系毕业生分别提出一些正确进入数据科学领域的建议,按照我所说的去做,你会事半功倍。一、假如你是一名初级入门者……如果你是一个初级入门人员,那么请你一定要牢记:这个领域的发展速度令人咋舌,我在给你的任何建议基本上都是过时的。2017年的数据科学工作者在今天就不一定能在这个领域工作下去,同样的,今天的数据科学招聘标准在两年以后同样派不上多少用场。但假如你现在还没有编码或STEM背景,下面这些建议或许对你有所裨益:1、一定要有一个相对开阔的思路。如果你什么都不会,那么你可能并不了解什么是数据科学,所以数据科学这一领域并不一定是你特别想要接触的领域。你可以在LinkedIn上关注一些数据科学家,或者关注一些相关的博客。了解这个领域的人究竟都在做什么。成为一个真正的数据科学家需要你付出大量的时间和精力,因此,纯粹因为无人驾驶看起来很酷并不是你想成为数据科学家的理由。你要了解的是,数据科学并不是表面上那么光鲜,枯燥繁琐的数据整理、构建数据通道等占据了数据科学家们大部分时间和精力。2、了解到这些以后,如果你依然决定进入数据科学领域,那么你即将进入数据科学领域的学习!首先,学习Python和慕课网上的课程,然后尽快创建一个基础性的项目。在你熟悉Python的基本技能后,还得学习如何使用Jupyter笔记本。3、作为一个初学者,将目标一步定位到数据科学家并不明智。相反,适当的降低目标会更加有助于你成功,比如数据可视化或数据分析。这些专业的技术人员需求量很大,并且很容易找到工作,在这些领域工作后,你就会有机会经常和数据科学家一起工作。在积累了一定的经验后,你就可以在数据科学的各个领域横向发展了!二、假如你是一名软件工程师……以我的应验来看,20%的数据科学家可能都是软件工程师。一方面来说,作为一名软件工程师,将代码部署到生产环境中,他们有着相当丰富的经验,除此以外,他们还有强大的团队合作能力,这很重要。另一方面,全栈工程师的需求量很大,因此很多公司都会向倾向于招聘软件工程师,即便是他们在招聘时写的是“招聘数据科学家”,这也是虚的。因此,你要避免成为一名软件工程师!另外,我还有一些建议:1.如果你是一名软件工程师,你可以先熟悉数据管道,这能够帮助你学习核心的数据操作技巧。2.机器学习工程可能是最接近数据科学家的一个角色,如果你能成为一名机器学习工程师,那么再进阶为一名数据科学家对你来说就很容易了。机器学习重点在于部署模型或者是将现有的模型部署到应用程序中,可以有效的利用你所学到的技能。3.你可以创建机器学习或者数据科学项目来打动招聘主管,利用你所学的软件工程技能,向招聘人员展示你的应用程序,证明你是一个全栈数据科学家的潜力股。4.你要知道,在转型期间,你的薪水肯定会有所降低。即便是高级软件工程师,在转型到数据科学领域的时候,也是一个初级角色,也会面临薪水降级。很多人没有意识到这点,以至于面对薪资降低会感到特别失望。三、假如你是一名数学或物理系毕业生……如果你是数学或物理系的本科、硕士或博士毕业生,那么你一定已经在统计学和数学方面打下了坚实的基础。但是遗憾的是,你并没有工作经验,而且也不知道如何准备面试。即便是你在读书期间一直在学习编程,也不可能写出一个简洁、结构完整的代码。下面是我的一些建议供你参考:1.你在学校所学到的R语言、MATLAB或Mathematica远远不够,建议你学习下Python语言。除此之外,你还要学习协作版本控制(即如何与其他人一起使用GitHub)、容器化(即如何使用Docker)、Devops(即如何部署模型)和SQL。2.学习Python中的测试开发,并了解如何使用docstrings。除此之外,了解下如何将代码模块化。如果你还没准备好学习这些,那么你可以先学习如何使用Jupyter笔记本。3.如果你是一个数学系毕业生,那么深度学习可能是比较适合你的方向。如果想进入深度学习领域,可以从传统的““Scikit-Learn”开始,然后就可以很轻松的进入深度学习领域。最重要的是,你要进入这个行业,然后尽可能快的开始写代码。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

December 5, 2018 · 1 min · jiezi

想成为数据科学家?先做到这6点吧!

摘要: 想成为数据科学家?先做到这6点吧!世界变化很快,各行各业在大环境的变化也发生着非常大的改动。传统的行业比如会计师、审计师、同声翻译、点餐员等许多职业逐渐被机器所替代。根据相关报道,未来top10的行业都与数据有关,比如数据分析科学家、AI专家等。最近一则新闻——校招薪资超80万让一些工作数年的员工羡慕不已,该类职业大多都与数据相关。因此,很多相关行业的人都在思考是否应该转行进入与数据相关的职业。在这里,我给的建议是,大的趋势是趋向数字化、智能化,那些在以技术为中心领域工作的人不管是否转行成为一名数据科学家,都应该自学相关的知识,以便在未来的时代里不被淘汰。《未来简史》中说道“未来,数据为王,谁掌握了数据,谁就处于领先。”2018年即将过去,2019年即将到来。如果你想成为一名数据科学家,本文提出6点建议,希望你在新的一年里能够尽量完成。1.成为相关组织的成员与对数据科学感兴趣的其他人建立联系可以让自己了解到现有的教育选择,了解哪些工具在数据科学行业中最为突出,并从曾经也想成为数据科学家的人那里得到鼓励。运营研究和管理科学研究所(INFORMS)是最大的此类国际组织,拥有数千名成员。该组织有不仅组织线下活动,也有一个仅限会员在线讨论的论坛。然而,有抱负的数据科学家也可能会在他们各自的社区中进行探索。MeetUp.com提供全球各类会有议,并有超过https://www.meetup.com/topics/data-science/个与数据科学相关的活动。2.熟悉新兴趋势并将其应用于职业目标数据科学是一个快速发展的行业,能够很好地跟上不断变化的环境的专业人士通常是那些有意识地努力实现这一目标的人。物联网、开源工具和预测分析是2019年可能突出的趋势。寻求成为数据科学家的人不仅要了解趋势并及时了解相关的最新消息,还需要研究如何将这些趋势应用于他们的职业目标中去。例如,一个人可以探索新的开源数据科学软件,并尽快开始使用它以熟悉其工作原理。或者,参加有关预测分析基础知识的在线课程,并了解为什么该领域知识对于雇用数据科学家的公司如此重要,掌握好基础,为成为一名数据科学家打下了很好的基础。3.制定具体目标以促进数据科学项目的进展许多数据科学家或想在该领域工作的人都有自己学习的时期,这意味着即使还没有正式的数据科学训练,也可以独立启动数据科学项目,这些是可以通过好奇心和自我技能提升的渴望来推动的。那些着眼于数据科学职业的人应该尝试一个具体的目标设定系统,比如阿里、谷歌和其他知名公司的团队开发的数据科学项目,一般涉及提出的目标和关键结果(OKR)。个人目标与项目的目标相关,关键结果代表了一个人如何实现目标。一个人,如果能够满足70%的关键结果,OKR就是成功的。一个人可以通过选择与之相关的最有意义的指标,将OKR应用于数据科学项目。这类指标塑造目标,个人必须经历一些过程才能使项目富有成效,取得一些关键性结果,在每次取得关键结果时最好都记录一个与之关联的日期,便于掌握自己的成长以及项目的进程。4.考虑获得高级数据科学学位一个人如果希望在未来的数据科学职业中大幅提升收入,一种快速的方法就是取得高级数据科学学位,目前有许多学校提供数据科学专业的工商管理硕士(MBA)学位。收集相关学校和课程信息,并将其列入候选名单,每周抽出一个晚上探索一所学校的课程。采用这种方法每月大约可以获得20所学校的详细信息,并且获取的信息都比较详细,收集得也不仓促。MBA毕业生的平均工资取决于所选择的岗位的专注度和个人工作年限等因素。由于数据科学技能需求非常高,因此专注数据科学MBA可能会使求职者脱颖而出。最近调查的统计数据显示,国内外大多数行业对数据科学人才的需求还有很大的缺口。高等学位可以使一个人有足够的能力投身于这个行业,并使他们能够获得高于平均水平的工资。5.提高数据讲故事能力在数据集合中查找有意义的信息是数据科学家必备的技能,但该人员也必须是一位出色的讲故事者,能够将分析信息生动且清晰传递给别人。否则,企业的决策者将无法理解为什么从数据中得出的特定结论是有价值的。如果只是自己明白数据所传递的信息,而无法将信息传递给听众的话,且没有引起他们的注意,他们就不会根据信息做出改变,影响公司的决断。在2019年里,一个好的练习方法是将得到的数据科学结果传达给没有数据科学背景的朋友,并听取他们的意见,进而做出调整与改变。6.学习一些新的编程语言数据科学家在其工作中会使用各种编程语言。每年积极学习一些新的编程语言,以获得必要的知识,进而在未来的职业生涯中取得优异成绩。如果想要从事数据科学工作的人还不没有掌握任何一门编程语言,那么2019年是扩充自己知识的重要时刻。Python是一种容易快速上手且流行的编程语言,在数据科学领域非常流行,可以从该语言学起,但如果是想从事金融或游戏行业,可以从R语言开始。另外,也需要学习一些数据相关知识,比如SQL、Hadoop等工具。但是当努力提高编程语言能力时,要注意一点,不要贪求了解其它许多编程语言,最好是能够熟练掌握一两种编程语言。拥有正确的心态至关重要除了上述这些目标之外,还要保持良好的心态。自学的道路是比较坎坷的,摸着石头过河,即使遇到挫折,也应该保持自己的积极性。此外,发展投身于数据科学工作的精神可以使未来的数据科学家为他们工作的公司提供更大的资本。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

November 26, 2018 · 1 min · jiezi

Python数据科学“冷门”库

摘要: 这些python库真“冷”,但真的很强大!Python是一种神奇的语言。事实上,它是近几年世界上发展最快的编程语言之一,它一次又一次证明了它在开发工作和数据科学立场各行业的实用性。整个Python系统和库是对于世界各地的用户(无论是初学者或者高级)都是一个恰当的选择。其成功和受欢迎的原因之一是它强大的库,这些库使其具有动态性和快速性。在本文中,我们将看到一些除了常用的像pandas、scikit-learn、 matplotlib之外的数据科学任务的Python库。虽然一看见像pandas,scikit-learn这些库就让人脑子浮现出机器学习任务,但了解并学习这个领域的其他python库总归是有益的。1、Wget从网页提取数据是数据科学家的重要任务之一。Wget是一个免费的非交互性的从网上下载文件的实用工具。它支持HTTP、HTTPS和FTP协议,以及通过HTTP代理检索。因为它是非交互性的,所以即使用户没有登录,也可以在后台工作。所以下次你想下载一个网站或页面的图片,wget可以帮助你。安装:$ pip install wget例子:import wget url = ‘http://www.futurecrew.com/skaven/song_files/mp3/razorback.mp3' filename = wget.download(url) 100% […………………………………………] 3841532 / 3841532 filename ‘razorback.mp3'2、Pendulum对于那些在python中使用日期时间感到沮丧的,可以使用Pendulum。它是一个python包,可以缓解日期时间操作,是一个python的原生类替代。如果想深入了解请参考该文档。安装:$ pip install pendulum例子:import pendulum dt_toronto = pendulum.datetime(2012, 1, 1, tz=‘America/Toronto’) dt_vancouver = pendulum.datetime(2012, 1, 1, tz=‘America/Vancouver’) print(dt_vancouver.diff(dt_toronto).in_hours()) 33、imbalanced-learn我看到过大多数分类算法效果,每个类的样本数量几乎是相同的,如balanced。但是现实生活情况下大部分是不平衡数据集,它会影响学习阶段和随后的机器学习算法的预测。幸运的是,创建了这个imbalanced库来解决这个问题。它兼容了scikit-learn并且是scikit-learn-contrib项目的一部分。当下次遇到不平衡数据集,可以尝试使用这个库。安装:pip install -U imbalanced-learn #or conda install -c conda-forge imbalanced-learn例子:用法和例子请参考文档。4、FlashTextNLP任务中清理文本数据常常需要在句子中换关键字或从句子中提取关键字。通常,这些操作可以用正则表达式来完成,但如果搜索方面遇到了数以千计的数量,可能会成为麻烦。Python的FlashText模块,该模块基于FlashText算法提供了恰当的替代等情况。FlashText最好的部分是运行时间与搜索词的数量无关,你可以在这里了解更多。安装:$ pip install flashtext例子:提取关键字from flashtext import KeywordProcessor keyword_processor = KeywordProcessor() # keyword_processor.add_keyword(<unclean name>, <standardised name>) keyword_processor.add_keyword(‘Big Apple’, ‘New York’) keyword_processor.add_keyword(‘Bay Area’) keywords_found = keyword_processor.extract_keywords(‘I love Big Apple and Bay Area.’) keywords_found [‘New York’, ‘Bay Area’]替代关键字keyword_processor.add_keyword(‘New Delhi’, ‘NCR region’) new_sentence = keyword_processor.replace_keywords(‘I love Big Apple and new delhi.’) new_sentence ‘I love New York and NCR region.‘5、Fuzzywuzzy这个名字听起来确实很奇怪,但在处理字符串匹配时,fuzzywuzzy是一个非常有用的库,可以轻松实现操作,比如字符串比较比率,令牌比率等。它也方便匹配保存在不同数据库的记录。安装:$ pip install fuzzywuzzy例子:from fuzzywuzzy import fuzz from fuzzywuzzy import process # Simple Ratio fuzz.ratio(“this is a test”, “this is a test!”) 97 # Partial Ratio fuzz.partial_ratio(“this is a test”, “this is a test!”) 100可以在GitHub repo找到更多有趣的例子。6、PyFlux时间序列分析是机器学习领域最常见的问题之一。PyFlux是一个在Python中为了时间序列问题而建立的开源库。该库有一个良好的现代时间序列模型包括但不限于ARIMA、GARCH和VAR模型。简而言之,PyFlux针对时间序列建模提供了一种概率方法,值得一试。安装:pip install pyflux例子:用法例子请参考相关文档。7、Ipyvolume结果可视化是数据科学的一个重要方面。能够可视化结果具有很大的优势。 IPyvolume是一个Python库,只需最少的配置和精力就可以在Jupyter notebook中可视化3d体积和字形(例如3d散点图)。但是,它目前处于1.0之前的阶段。一个很好的比喻是这样的:IPyvolume的volshow是3d数组而matplotlib的imshow是2d数组。你可以在这里读更多关于它的内容。安装:Using pip $ pip install ipyvolume Conda/Anaconda $ conda install -c conda-forge ipyvolume例子:动画立体渲染8、DashDash是一个用于构建Web应用程序的高效Python框架。它写在Flask,Plotly.js和React.js之上,并将现有的UI元素(如下拉列表,滑块和图形)与你的分析Python代码联系起来,而无需使用javascript。Dash非常适合构建数据可视化应用程序,然后可以在Web浏览器中呈现这些应用程序。用户指南可在此处访问。安装pip install dash==0.29.0 # The core dash backend pip install dash-html-components==0.13.2 # HTML components pip install dash-core-components==0.36.0 # Supercharged components pip install dash-table==3.1.3 # Interactive DataTable component (new!)例子下面的示例显示了下拉表的高度交互式图形。当用户在下拉列表中选择一个值时,应用程序代码会将Google财经中的数据动态导出到Pandas DataFram中。源代码9、GymOpenAI的Gym是一个用于开发和比较强化学习算法的工具包。它与任何数值计算库兼容,如TensorFlow或Theano。Gym库是测试问题的必要集合,也称为环境 – 你可以使用它来训练强化学习算法。这些环境具有共享接口,允许编写通用算法。安装pip install gym例子以下是运行环境CartPole-v0中1000个步骤的实例的例子,在每个步骤渲染环境。你可以在这里了解更多的环境。结论这些是我选的对于数据科学有用的python库,而不是常见的如numpy,pandas等。如果你知道可以添加到列表中的其他库,请在下面的评论中提及。别忘了尝试一下。本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

November 16, 2018 · 1 min · jiezi

数据科学家应当了解的五个统计基本概念

摘要: 本文讲述了数据科学家应当了解的五个统计基本概念:统计特征、概率分布、降维、过采样/欠采样、贝叶斯统计从高的角度来看,统计学是一种利用数学理论来进行数据分析的技术。象柱状图这种基本的可视化形式,会给你更加全面的信息。但是,通过统计学我们可以以更富有信息驱动力和针对性的方式对数据进行操作。所涉及的数学理论帮助我们形成数据的具体结论,而不仅仅是猜测。利用统计学,我们可以更深入、更细致地观察数据是如何进行精确组织的,并且基于这种组织结构,如何能够以最佳的形式来应用其它相关的技术以获取更多的信息。今天,我们来看看数据科学家需要掌握的5个基本的统计学概念,以及如何有效地进行应用。特征统计特征统计可能是数据科学中最常用的统计学概念。它是你在研究数据集时经常使用的统计技术,包括偏差、方差、平均值、中位数、百分数等等。理解特征统计并且在代码中实现都是非常容易的。请看下图:上图中,中间的直线表示数据的中位数。中位数用在平均值上,因为它对异常值更具有鲁棒性。第一个四分位数本质上是第二十五百分位数,即数据中的25%要低于该值。第三个四分位数是第七十五百分位数,即数据中的75%要低于该值。而最大值和最小值表示该数据范围的上下两端。箱形图很好地说明了基本统计特征的作用:当箱形图很短时,就意味着很多数据点是相似的,因为很多值是在一个很小的范围内分布;当箱形图较高时,就意味着大部分的数据点之间的差异很大,因为这些值分布的很广;如果中位数接近了底部,那么大部分的数据具有较低的值。如果中位数比较接近顶部,那么大多数的数据具有更高的值。基本上,如果中位线不在框的中间,那么就表明了是偏斜数据;如果框上下两边的线很长表示数据具有很高的标准偏差和方差,意味着这些值被分散了,并且变化非常大。如果在框的一边有长线,另一边的不长,那么数据可能只在一个方向上变化很大;概率分布我们可以将概率定义为一些事件将要发生的可能性大小,以百分数来表示。在数据科学领域中,这通常被量化到0到1的区间范围内,其中0表示事件确定不会发生,而1表示事件确定会发生。那么,概率分布就是表示所有可能值出现的几率的函数。请看下图:常见的概率分布,均匀分布(上)、正态分布(中间)、泊松分布(下):均匀分布是其中最基本的概率分布方式。它有一个只出现在一定范围内的值,而在该范围之外的都是0。我们也可以把它考虑为是一个具有两个分类的变量:0或另一个值。分类变量可能具有除0之外的多个值,但我们仍然可以将其可视化为多个均匀分布的分段函数;正态分布,通常也称为高斯分布,具体是由它的平均值和标准偏差来定义的。平均值是在空间上来回变化位置进行分布的,而标准偏差控制着它的分布扩散范围。与其它的分布方式的主要区别在于,在所有方向上标准偏差是相同的。因此,通过高斯分布,我们知道数据集的平均值以及数据的扩散分布,即它在比较广的范围上扩展,还是主要围绕在少数几个值附近集中分布。泊松分布与正态分布相似,但存在偏斜率。象正态分布一样,在偏斜度值较低的情况下,泊松分布在各个方向上具有相对均匀的扩散。但是,当偏斜度值非常大的时候,我们的数据在不同方向上的扩散将会是不同的。在一个方向上,数据的扩散程度非常高,而在另一个方向上,扩散的程度则非常低。如果遇到一个高斯分布,那么我们知道有很多算法,在默认情况下高思分布将会被执行地很好,因此首先应该找到那些算法。如果是泊松分布,我们必须要特别谨慎,选择一个在空间扩展上对变化要有很好鲁棒性的算法。降维降维这个术语可以很直观的理解,意思是降低一个数据集的维数。在数据科学中,这是特征变量的数量。请看下图:上图中的立方体表示我们的数据集,它有3个维度,总共1000个点。以现在的计算能力,计算1000个点很容易,但如果更大的规模,就会遇到麻烦了。然而,仅仅从二维的角度来看我们的数据,比如从立方体一侧的角度,可以看到划分所有的颜色是很容易的。通过降维,我们将3D数据展现到2D平面上,这有效地把我们需要计算的点的数量减少到100个,大大节省了计算量。另一种方式是我们可以通过特征剪枝来减少维数。利用这种方法,我们删除任何所看到的特征对分析都不重要。例如,在研究数据集之后,我们可能会发现,在10个特征中,有7个特征与输出具有很高的相关性,而其它3个则具有非常低的相关性。那么,这3个低相关性的特征可能不值得计算,我们可能只是能在不影响输出的情况下将它们从分析中去掉。用于降维的最常见的统计技术是PCA,它本质上创建了特征的向量表示,表明了它们对输出的重要性,即相关性。PCA可以用来进行上述两种降维方式的操作。过采样和欠采样过采样和欠采样是用于分类问题的技术。例如,我们有1种分类的2000个样本,但第2种分类只有200个样本。这将抛开我们尝试和使用的许多机器学习技术来给数据建模并进行预测。那么,过采样和欠采样可以应对这种情况。请看下图:在上面图中的左右两侧,蓝色分类比橙色分类有更多的样本。在这种情况下,我们有2个预处理选择,可以帮助机器学习模型进行训练。欠采样意味着我们将只从样本多的分类中选择一些数据,而尽量多的使用样本少的分类样本。这种选择应该是为了保持分类的概率分布。我们只是通过更少的抽样来让数据集更均衡。过采样意味着我们将要创建少数分类的副本,以便具有与多数分类相同的样本数量。副本将被制作成保持少数分类的分布。我们只是在没有获得更多数据的情况下让数据集更加均衡。贝叶斯统计完全理解为什么在我们使用贝叶斯统计的时候,要求首先理解频率统计失败的地方。大多数人在听到“概率”这个词的时候,频率统计是首先想到的统计类型。它涉及应用一些数学理论来分析事件发生的概率,明确地说,我们唯一计算的数据是先验数据(prior data)。假设我给了你一个骰子,问你掷出6点的几率是多少,大多数人都会说是六分之一。但是,如果有人给你个特定的骰子总能掷出6个点呢?因为频率分析仅仅考虑之前的数据,而给你作弊的骰子的因素并没有被考虑进去。贝叶斯统计确实考虑了这一点,我们可以通过贝叶斯法则来进行说明:在方程中的概率P(H)基本上是我们的频率分析,给定之前的关于事件发生概率的数据。方程中的P(E|H)称为可能性,根据频率分析得到的信息,实质上是现象正确的概率。例如,如果你要掷骰子10000次,并且前1000次全部掷出了6个点,那么你会非常自信地认为是骰子作弊了。如果频率分析做的非常好的话,那么我们会非常自信地确定,猜测6个点是正确的。同时,如果骰子作弊是真的,或者不是基于其自身的先验概率和频率分析的,我们也会考虑作弊的因素。正如你从方程式中看到的,贝叶斯统计把一切因素都考虑在内了。当你觉得之前的数据不能很好地代表未来的数据和结果的时候,就应该使用贝叶斯统计方法。云服务器99元拼团购!拉新还可赢现金红包!300万等你瓜分!马上一键开团赢红包: http://click.aliyun.com/m/1000019899/本文作者:【方向】阅读原文本文为云栖社区原创内容,未经允许不得转载。

October 30, 2018 · 1 min · jiezi