大数据文摘作品
编译:王梦泽、丁慧、笪洁琼、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是开源的,并可通过www.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.com
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.com/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://www.themarketingtechnologist.co/helping-our-new-data-scientists-start-in-python-a-guide-to-learning-by-doing/