网站性能检测评分
注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。
统计学python
手把手 | 数据科学速成课:给Python新手的实操指南 新手视频课程
大数据文摘作品
编译:王梦泽、丁慧、笪洁琼、Aileen
数据科学团队在持续稳定的发展壮大,这也意味着经常会有新的数据科学家和实习生加入团队。我们聘用的每个数据科学家都具有不同的技能,但他们都具备较强的分析背景和在真正的业务案例中运用此背景的能力。例如,团队中大多数人都曾研究计量经济学,这为概率论及统计学提供了坚实的基础。
典型的数据科学家需要处理大量的数据,因此良好的编程技能是必不可少的。然而,我们的新数据科学家的背景往往是各不相同的。编程环境五花八门,因此新的数据科学家的编程语言背景涵盖了R, MatLab, Java, Python, STATA, SPSS, SAS, SQL, Delphi, PHP to C# 和 C++。了解许多不同的编程语言在有些时候确实很有必要,然而我们更希望使用一种编程语言来完成大多数的项目,这样我们可以在项目上更容易的进行合作。由于无人知晓一切,一种首选的编程语言让我们有机会互相学习。
我们公司更倾向于使用Python。在开源社区的大力支持下,Python已经成为了处理数据科学强有力的工具。Python容易使用的语法,强大的数据处理能力和极好的开源统计库,例如Numpy, Pandas, Scikit-learn, Statsmodels等,使我们可以完成各种各样的任务,范围从探索性分析到构建可伸缩的大数据管道和机器学习算法。只有对那些较宽松的统计模型我们有时会将Python和R结合使用,其中Python执行大量的数据处理工作和R进行统计建模。
我的理念是通过实践来学习,因此为了帮助新数据科学家使用Python进行数据科学研究,我们创建了Python数据科学(速成)课(Python Data Science (Crash) Course)。这门课的目标是使我们的新员工(也包括其他部门的同事)以互动的方式和自己的节奏来学习解决实际的业务问题。与此同时,更有经验的数据科学家可以回答任何问题,但也不要小看从StackOverflow或者图书馆的文档中寻找答案的的技能,我们也当然愿意向新数据科学家传授这项技能!
在文章中,我们会按阶段来介绍这个实践课程。
阶段一:学习Python的基础知识
显而易见,第一步是学习Python这个软件,即学习Python语法及基本操作。幸运的是,如果你能处理好代码缩进的话,Python语法就不没那么难了。我在使用Java编程语言时无需考虑注意缩进问题,然而当我之后开始使用Python时在缩进上容易出错。
因此,如何开始学习Python?由于我们更喜欢通过实践来学习的方式,所以我们总是让新员工从Codecademy Python课程开始。Codecademy提供了交互式的Python课程体验,无需担心安装软件会麻烦,可以在浏览器中直接学习使用Python。
Codecademy Python课程用时大约13个小时,完成之后,你应该能够在Python中进行简单的操作。
提示:数据科学家还可以在Codecademy上学习SQL,这门课程也十分重要。
阶段二:在Anaconda环境下本地安装Python
在结束了Codecademy课程后,我们显然会想去开始编写自己的代码,然而因为我们不继续在浏览器中运行Python,需要在我们本地电脑上安装Python。
Python是开源的,并可通过python.org.免费下载。然而官方版本只包含了标准的Python库,标准库中包含文本文件、日期时间和基本算术运算之类的函数。Python标准库不够全面,无法进行多样化的数据科学分析,但开源社区已经创建出了很棒的库来扩展Python的功能,使其能够进行数据科学研究。
为了避免单独下载安装所有的库,我建议使用Anaconda Python发行版。Anaconda实际上是与大量的库结合在一起的Python,因此你不需要手动安装它们。此外,Anaconda附带了一个简单的命令行工具,在必要时安装新的或更新现有的库。
提示:尽管默认情况下Anaconda几乎涵盖了所有很棒的库,但还有一些没有包含在内。你可以通过conda install package_name or pip install package_name语句来安装新的包。例如,我们经常在项目中使用进度条库 tqdm。因此,我们需要先执行pip install tqdm语句来完成Anaconda的新安装。
阶段三:使用PyCharm进行简单的编码
安装了Python之后,我们可以在本地电脑上运行Python代码。打开编辑器写下Python代码,打开命令行并运行新创建的Python文件,路径为python C:\Users\thom\new_file.py。
为了使事情变得简单一些,我更喜欢在Pychanm环境中编写Python代码。PyCharm是一种所谓的集成开发环境,对开发人员编写代码时提供支持。它可以处理常规任务,例如通过提供一个简单的运行脚本按钮来运行程序,此外它还可以通过提供自动完成功能和实时错误检查来提高效率。如果忘记了某处的空格或使用了未被定义的变量名称,PyCharm会发出警告提示。想要使用版本控制系统例如Git来进行项目合作?PyCharm会帮助你。不管怎样,使用Pycham可以在编写Python程序时节省大量的时间,charm名副其实。
阶段四:解决一个模拟的业务问题
定义研究的问题
假设现在经理提出了一个他面对的业务问题,他希望能够预测用户在公司网站上进行首次点击/参与(例如订阅简报)的概率。在给出了一些想法后,我们提出可以基于用户的页面浏览量来预测订阅转换概率,此外,你构建了以下假设:更多的页面浏览量会导致用户首次订阅的概率增大。
为了检验假设是否成立,我们需要从网络分析师处获得两个数据集:
Session数据集 包含所有用户的所有页面浏览量。
1. user_id: 用户标识符
2. session_number: 会话数量(升序排列)
3. session_start_date: 会话的开始日期时间
4. unix_timestamp: 会话的开始unix时间标记
5. campaign_id: 将用户带到网站的活动的ID
6. domain: 用户在会话中访问的(子)域
7. entry: 会话的进入页面
8. referral: 推荐网站,例如:google
9. pageviews: 会话期间的页面访问量
10. transactions: 会话期间的交易量
Engagement数据集 包含所有用户的所有参与活动。
1. user_id:唯一的用户标识符
2. site_id: 产生参与活动的网站ID
3. engagement_unix_timestamp: 发生参与活动的unix时间标记
4. engagement_type: 参与活动的类型,例如订阅简报
5. custom_properties: 参与活动的其他属性
不幸的是,我们有两个单独的数据集,因为它们来自不同的系统。然而,两个数据集可以通过唯一用户标识符user_id来匹配。我已经在GitHub上放置了我用来解决业务问题的最终代码 ,然而我强烈建议你仅在自己解决了这个问题后再去查看代码。此外,你还可以找到创建两个虚构数据集的代码。
代码链接:
https://github/thomhopmans/themarketingtechnologist/tree/master/7_data_science_in_python
使用Pandas进行简单的数据处理
无论我们应用任何统计模型解决问题,都需要预先清洗和处理数据。例如,我们需要为会话数据集中的每个用户找到其首次活动的数据(如果有的话)。这就要求在user_id上加入两个数据集,并删除首次活动后的其他所有活动数据。
Codecademy Python课程已经告诉你如何逐行阅读文本文件。Python非常适合数据管理和预处理,但不适用于数据分析和建模。
Python的Pandas库克服了这个问题。Pandas提供了(数值)表和时间序列的数据结构和操作。因此,Pandas让Python数据科学工作变得更加简单!
使用pd.read_csv()读取数据集
我们的Python代码中的第一步是加载Python中的两个数据集。Pandas提供了一个简单易用的函数来读取.csv文件:read_csv()。本着学习的原则,我们建议您自己找出如何读取这两个数据集。最后,你应该建立两个独立的DataFrames,每个数据集都需要有一个。
小贴士:在这两个文件中,我们都有不同的分隔符。此外,请务必查看read_csv()中的date_parser选项,将UNIX时间标记转换为正常的日期时间格式。
过滤无用数据
任何(大)数据问题中的下一步是减少问题规模的大小。在我们的例子中,有很多与我们问题无关的列,例如会话的媒介/来源。因此,我们在Dataframes上应用索引和选择只保留相关的列,比如user_id(必需加入这两个DataFrames),每个会话和活动的日期(在此之前搜索首次活动和会话)以及页面访问量(假设验证的必要条件)。
另外,我们会筛选出DataFrame中所有非首次的活动。可以通过查找每个user_id的最早日期来完成。具体怎样做呢?使用GroupBy:split-apply-combine逻辑!
Pandas最强大的操作之一是合并,连接和序列化表格。它允许我们执行任何从简单的左连接和合并到复杂的外部连接。因此,可根据用户的唯一标识符结合会话和首次活动的DataFrames。
删除首次活动后的所有会话
在上一步中使用简单的合并,我们为每个会话添加了首次活动的时间标记。通过比较会话时间标记与首次活动时间标记,你应该能够过滤掉无用的数据并缩小问题的规模。
添加因变量y:参与/订阅活动转换
如上所述,我们希望预测页面访问量对转换(即首次活动)概率的影响。因此,我们的因变量y是一个二进制变量,用它表示会话内是否发生了转换。由于我们做了上面的过滤(即在首次活动后删除所有非首次活动和会话),所以这种转换按照定义在每个用户的最近一次会话中进行。同样,使用GroupBy:split-apply-combine逻辑,我们可以创建一个包含观察值的新列,如果它是用户的最后一个会话,观察值将为1,否则为0。
添加自变量X:访问量的累计总和
我们的自变量是页面访问量。但是,我们不能简单地将会话中的页面访问量计算在内,因为早期会话中的页面访问会影响转换概率。因此,我们创建一个新的列,用来计算用户页面访问量的累计总和。这才是我们的自变量X。
使用StatsModels拟合逻辑回归
通过Pandas库我们最终得到了一个包含单个离散X列和单个二进制Y列的小型DataFrame。并用(二元)逻辑回归模型来估计基于一个或多个独立变量的因变量的二元响应概率。StatsModels是Python的统计和计量经济学库,提供了参数估计和统计测试工具。因此,它包含逻辑回归函数也就不足为奇了。那么,如何通过StatsModels来拟合逻辑回归模型呢?请自行百度...
技巧1:不要忘记给逻辑回归添加一个常数。
技巧2:另一个非常棒的拟合统计模型(如逻辑回归)库是scikit-learn。
使用Matplotlib或Seaborn进行可视化
在拟合逻辑回归模型之后,我们可以预测每个累计访问量的转换概率。但是,我们不能仅仅通过交付一些原始数据来将我们最新发现的结果传达给管理层。因此,数据科学家的重要任务之一就是要清晰有效地展示他的成果。在大多数情况下,这意味着提供我们的可视化结果,因为众所周知,一图胜千言...
Python包含几个非常棒的可视化库,其中MatplotLib是最知名的。而Seaborn是建立在MatplotLib上的另一个很棒的库。
MatplotLib的语法大概是以前使用过MatLab的用户所熟知的。但是,我们倾向选择Seaborn,是因为它提供更漂亮的图表而且外观很重要。
我们通过Seaborn得到了模型拟合的可视化结果,如下所示:
我们可以很好地利用这个可视化结果来证明我们的假设是否成立。
验证假设
最后一步是就验证我们提出的假设是否成立。回想一下,我们认为更多的网页访问量导致首次活动的可能性更高。
首先,我们从以前的可视化结果中可以看出,假设是成立的。不然,预测的概率也不会单调递增。尽管如此,我们还是可以从拟合的模型总结中得出同样的结论,如下所示。
Logit Regression Results ==============================================================================Dep. Variable: is_conversion No. Observations: 12420Model: Logit Df Residuals: 12418Method: MLE Df Model: 1Date: Tue, 27 Sep 2016 Pseudo R-squ.: 0.3207Time: 21:44:57 Log-Likelihood: -5057.6converged: True LL-Null: -7445.5 LLR p-value: 0.000==================================================================================== coef std err z P>|z| [95.0% Conf. Int.]------------------------------------------------------------------------------------const -3.8989 0.066 -59.459 0.000 -4.027 -3.770pageviews_cumsum 0.2069 0.004 52.749 0.000 0.199 0.215====================================================================================
我们看到,统计结果中,pagesviews_cumsum系数在显著性水平为1%时显示为正。因此,这足以表明我们的假设成立,加油!此外,您刚刚已经完成了第一个Python数据科学分析工作!:)
是不是感觉很棒?快上手试试吧!
原文链接:
https://themarketingtech...
2017年最流行的十大Python库 企业视频课程
年末是你需要思考过去一年的成就的时候。对于程序员来说,这通常是回顾今年发布的或者最近流行的开源库,因为它们是解决特定问题的绝佳工具。
在过去的两个多年中,我们都会在博客中选取我们认为在Python社区最有用的库。今年也是如此。
这一次,这份列表基本都是机器学习(ML)的库。请非ML库的作者而且能够谅解,这都怪我们的偏见。希望在读到本文的人能评论并提出一些被我们忽略的伟大的库帮助我们矫正它。
那么,让我们开始盘点吧!
1. Pipenv
链接:https://github/pypa/pipenv
我们为今年年初发布的这个工具排到榜首,它有能力影响每个Python开发者的工作流程,它已经成为Python管理依赖项的官方推荐工具。
https://packaging.python.org/tutorials/managing-dependencies/#installing-pipenv
Pipenv最初是由Kenneth Reitz创立的一个周末项目,旨在将其他包管理者(如npm或yarn)的创意带入Python中。不再去安装virtualenv,virtualenvwrapper,管理requirements.txt文件,并确保对依赖项的依赖版本的再现性(https://kennethreitz.org/essays/a-better-pip-workflow)。使用Pipenv,你可以在Pipfile中指定所有的依赖关系(通常使用命令添加,删除或更新依赖关系)。该工具可以生成一个Pipfile.lock文件,使你的构建deterministic,帮助你避免那些因为你不知道是否需要的模糊依赖产生的难以捕捉的bug。
当然,Pipenv还有很多其他的特性,并且它的文档非常好,所以一定要看一下,并且在你所有的Python项目中使用它,就像我们在Tryolabs中做的那样。
2. PyTorch
链接:http://pytorch.org/
说到今年流行,尤其是在深度学习(DL)社区流行的库,那就要提到今年Facebook推出的DL框架PyTorch。
PyTorch构建并改进了流行的Torch框架,与Lua不同它是基于Python的。由于最近几年人们大多转向使用Python进行数据科学研究,它是让DL更容易接近的重要一步。
最值得注意的是,PyTorch已经成为众多研究人员的首选框架之一,因为它实现了动态计算图(Dynamic Computational Graph)范式。当使用TensorFlow,CNTK或MXNet等其他框架编写代码时,必须首先定义计算图。该图指定了我们的代码运行的所有操作,这些操作稍后会被编译并可能被框架优化,以便能够在GPU上并行运行得更快。这个范式被称为静态计算图,因为你可以利用各种优化,而且这个图形一旦建成,就有可能运行在不同的设备上(因为执行与构建分离)。然而,在自然语言处理等许多任务中,工作的量通常是可变的:在将图像提供给算法之前,可以将图像调整为固定的分辨率,但不能对可变长度的句子进行相同的处理。这是PyTorch和动态图的亮点,通过在代码中使用标准的Python控制指令,图在执行时被定义,给了你很多这对于一些任务来说必不可少的自由。
当然,PyTorch也为你计算梯度(就像你期望从任何现代的DL框架中获得的那样),速度非常快,而且是可扩展的,所以为什么不试试呢?
3. caffe2
链接:https://caffe2.ai/
这可能听起来很疯狂,但Facebook今年也发布了另一个很棒的DL框架。
原来的Caffe框架已被大众使用多年,以无与伦比的性能和久经考验的代码库而闻名。然而,最近DL的趋势使这个框架在某些方面停滞不前。Caffe2是将Caffe带入“现代世界”的尝试。
它支持分布式训练,部署(即使在移动平台上),最新的CPU并且支持CUDA的硬件。虽然PyTorch可能更适合研究,但Caffe2适合在Facebook上看到的大规模部署。
另外,请看看近期的ONNX。你可以在PyTorch中构建和训练模型,同时使用Caffe2进行部署!
4. Pendulum
链接:https://github/sdispater/pendulum
去年,Arrow被列入榜单,它旨在通过使用Python的datetime让你生活轻松一些。而今年,我们轮到Pendulum了。
Pendulum的优点之一是它是Python标准datetime类嵌入式的替代品,因此可以轻松地将其与现有代码集成,并且只有在实际需要时才使用它的功能。者已经特别注意确保正确地处理时区,默认每个实例的timezone-aware和UTC。你也将得到一个扩展timedelta,使datetime算法更简单。
与其他现有的库不同,它努力使API具有可预测的行为,所以你知道会发生什么。如果你正在做任何与datetimes有关的重要工作,这会让你更快乐!(查看更多:https://pendulum.eustace.io/docs/)。
5. Dash
https://plot.ly/products/dash/
如果你正在做数据科学,你会使用Python生态系统中的优秀工具,比如Pandas和scikit-learn。并在工作流程使用Jupyter Notebooks,这对你和你的同事来说非常棒。但是,你如何与那些不知道如何使用这些工具的人分享这项工作呢?你如何建立一个界面,使人们可以轻松地使用数据,可视化过程?过去,你需要一个前端团队,用Javascript知识来构建这些GUI。但现在不用了。
今年宣布的Dash是一个用于构建Web应用程序的Python开源库,尤其是那些充分利用数据可视化的Web应用程序。它建立在Flask,Plotly.js和React的基础上,并提供了抽象,使你不必学习这些框架,更高效的研发。这些应用程序可以在浏览器中呈现并响应,因此在移动设备中也能使用。
了解更多关于Dash:https://plot.ly/dash/gallery
6.PyFlux
Python中有许多库用来做数据科学和ML,但是当你的数据点是随着时间的推移而变化的度量(例如股票价格,从仪表中获得的度量等等)时,这样的库就很少了。
PyFlux是一个专门为时间序列而开发的 Python开源库。时间序列研究是统计学和计量经济学的一个分支,目标可以描述时间序列的表现(依据隐藏组件或特征),也能预测时间序列未来的表现。
PyFlux允许用于时间序列建模的概率方法,并且已经实现了几个像GARCH这样的现代时间序列模型。
7.Fire
https://github/google/python-fire
通常情况下,你需要为自己的项目制作命令行界面(CLI)。除了传统的argparse,Python中还有click或docopt可用。谷歌今年宣布的Fire,在解决同样的问题上提出了不同的方法。
Fire是一个开源的库,可以为任何Python项目自动生成一个CLI。没错,是自动的:你几乎不需要编写任何代码或文档来构建你的CLI!想完成你的CLI,只需要调用一个Fire方法并把它传递给一个CLI:一个函数,一个对象,一个类,一个字典,甚至你可以不传递任何参数(这会将你的整个代码转换为一个CLI)。这个库可以为你节省很多时间。
8.imbalanced-learn
https://github/scikit-learn-contrib/imbalanced-learn
在一个完美世界的里,我们会有完美平衡的数据集,我们将它们都拿来将训练模型,多么美好。可惜现实世界不是这样的,某些任务更倾向于不平衡的数据。例如,在预测信用卡交易中的欺诈行为时,你会预测绝大多数交易(+ 99.9%)实际上是合法的。如果我们简单的训练ML算法会出现令人沮丧的性能,所以在处理这些类型的数据集时需要特别小心。
幸运的是,这是一个已经被研究过的问题,存在各种各样解决的技术。Imbalanced-learn是一个Python包,它提供了关于这些技术的实现。它与scikit-learn兼容,是scikit-learn-contrib项目的一部分。
9. FlashText
https://github/vi3k6i5/flashtext
如果您需要搜索某些文本并将其替换为其他内容(如大多数数据清理工作),则通常将其转为正则表达式。他们能很好地完成这项工作,但是有时会发生这样的情况:需要搜索的数以千计的内容,正则表达式可能会非常缓慢。
为此,FlashText是一个更好的选择。它使整个操作的运行时间大大提高了。FlashText的优点在于无论搜索条件有多少,运行时都是一样的,而正则表达式中运行时几乎是随着条件数呈线性增长。
FlashText证明了算法和数据结构设计的重要性,即使对于简单的问题,更好的算法也可以很容易地胜过最快的cpu运行简单的实现。
10. Luminoth
https://luminoth.ai/
现在,图像无处不在,理解它的内容对于许多应用程序来说至关重要。值得庆幸的是,由于DL的进步,图像处理技术已经进步了很多。
Luminoth是一个使用TensorFlow和Sonnet构建的用于计算机视觉的开源Python工具包。目前,它可以支持以Faster R-CNN模型的形式进行对象检测。
但是Luminoth不仅是一个特定模型的实现。它是被构建为模块化和可扩展,所以可以直接定制现有的部分或者将其扩展为新的模型来处理不同的问题,尽可能多地复用代码。它提供的工具可以轻松完成构建DL模型所需的工程工作:将数据(在本例中为图像)转换合适的格式输送到数据管道(TensorFlow的tfrecords)中,执行数据增强,在一个或多个gpu上运行训练(使用大型数据集时必须进行分布式培训),运行评估度量,轻松地在TensorBoard中可视化 并用简单的API或浏览器界面部署训练号的模型,以便人们使用。
此外,Luminoth直接与Google Cloud的ML Engine集成,所以即使你没有强大的GPU,也可以使用命令在云端进行训练。
本文为编译文章,转载请注明出处。
来源:atyun_com
来源网址:http://atyun/13563_2017最流行的十大python库.html