设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2263|回复: 0

10个加速数据分析的小技巧

[复制链接]

17

主题

158

金钱

257

积分

入门用户

发表于 2019-8-23 15:48:47 | 显示全部楼层 |阅读模式

10个加速数据分析的小技巧
本文列举了一些使用Python和Jupyter Notebook的技巧,讨论了如何轻松分析数据以及如何进行格式化编码、输出和调试等操作。

在编程领域,有时一个小技巧就能节省大量时间,甚至能起到救命的效果。这些“必杀技”往往能在未来的数据分析中发挥重大作用。


1. 分析Pandas数据框架
Profiling(分析)是一个帮助理解数据的过程,Pandas Profiling(数据预览分析)作为一个python工具包,就是用来帮助理解数据的。该工具能够简单快速地对熊猫数据框架进行探索性数据分析。pandas df.describe()和df.info()functions通常是EDA过程的第一步。然而,这个步骤只提供一个基本的数据预览,对大型数据集帮助不大。另外,Pandas Profiling功能使用df.profile_report()扩展了熊猫数据框架,可以快速进行数据分析。该功能仅用一行代码就可以显示很多信息,这也可以应用在交互式的HTML报告中。

对于给定数据集,数据预览分析包会处理以下数据:
1.jpg
Pandas Profiling工具包计算的统计数据
安装
  1. pip install pandas-profiling
  2. or
  3. conda install -c anaconda pandas-profiling
复制代码


使用
用古老的大数据集来演示python profiler的功能。
  1. #importing the necessary packages
  2. import pandas as pd
  3. import pandas_profiling
  4. # Depreciated: pre 2.0.0 version
  5. df = pd.read_csv('titanic/train.csv')
  6. pandas_profiling.ProfileReport(df)
复制代码


最近,Pandas-Profiling发布了一个重要的2.0.0升级版本。事实上,该版本对语法作了一点改变,这个功能也已经包含在熊猫数据框架中了,报告也变得更加全面。以下是最新的语法用法:

使用
要在Jupyter笔记本中显示报告,并运行:
  1. #Pandas-Profiling 2.0.0
  2. df.profile_report()
复制代码

这一行代码就是用户在Jupyter笔记本中显示数据分析报告所需的全部内容。显示的报告非常详细,必要时还包括图表。
2.gif
通过下列代码用户还可以将该报告导出到交互式HTML文件中:
  1. profile = df.profile_report(title='Pandas Profiling Report')
  2. profile.to_file(outputfile="Titanic data profiling.html")
复制代码

3.gif
更多详细信息和示例:https://pandas-profiling.github.io/pandas-profiling/docs/


2. 增强Pandas plots的互动性
Pandas有一个内置的 .plot() 功能,是数据框架类的一部分。然而,该功能不尽人意的地方在于呈现的可视化不是交互式的。相反,用pandas.DataFrame.plot()功能绘制图表就很容易。如果不对代码做重大修改,可以绘制出像熊猫图表一样的交互式图表吗?答案是可以的,Cufflinks库能够帮助做到这一点。

Cufflinks库将plotly的功能与Pandas的灵活性结合起来,使绘图简单化。现在就来看看如何安装这个库,并让它在pandas上运行。

安装
  1. pip install plotly # Plotly is a pre-requisite before installing cufflinks
  2. pip install cufflinks
复制代码

使用
  1. #importing Pandas  
  2. import pandas as pd
  3. #importing plotly and cufflinks in offline mode
  4. import cufflinks as cf
  5. import plotly.offline
  6. cf.go_offline()
  7. cf.set_config_file(offline=False, world_readable=True)
复制代码


现在来看看大数据集的魔力
  1. df.iplot()
复制代码

4.gif
5.jpg
  1. df.iplot() 与 df.plot()
复制代码

右边的可视化显示的是静态图表,而左边则是交互式图表,更为详细。这些图表在语法上都没有作出重大改变。
更多示例:https://github.com/santosjorge/cufflinks/blob/master/Cufflinks%20Tutorial%20-%20Pandas%20Like.ipynb


3. 少许魔法
魔法命令(Magic commands)是Jupyter笔记本中的一组便捷功能,旨在解决标准数据分析中的一些常见问题。在 %lsmagic的帮助下,用户可以看到所有可用的魔法功能。
6.jpg
所有可用魔法功能的清单

魔法命令有两种:行魔法,即以单个%字符为前缀,在单行输入上操作;单元格魔法,即以%%为前缀,在多行输入上操作。如果设置为1,则无需键入初始%即可调用魔术功能。

一起来看看两种魔法命令在常见数据分析任务中的应用:
①% pastebin
%pastebin将代码上传到Pastebin并返回url地址。Pastebin属于在线内容托管服务,在这里,用户可以存储如源代码片段等纯文本,然后与他人共享网址。事实上,Github的要点也类似于pastebin,尽管存在版权限制。
考虑一个包含以下内容的python脚本file.py:
  1. #file.py
  2. def foo(x):
  3. return x
复制代码

在Jupyter笔记本中使用 %pastebin会生成一个pastebin网址。
7.jpg
②%matplotlib notebook
%matplotlib inline功能用于渲染Jupyter笔记本中的静态matplotlib图。尝试用notebook替换inline,以轻松获得可变焦、可调整大小的绘图。请确保在导入matplotlib库之前启用该功能。
8.jpg
%matplotlib inline 与 %matplotlib notebook
③%run
%run 功能在笔记本内部运行python脚本。
  1. %run file.py
复制代码

④%%writefile
%%writefile 将单元格的内容写入文件。通过该功能,代码将被写入一个名为foo.py的文件,并保存在当前目录中。
9.jpg
⑤%%latex
%%latex 功能将单元格内容呈现为 LaTeX格式。这对于在单元格中编写数学公式和方程很有用。
10.jpg


4. 查找并消除错误
Interactive debugger也是一个有魔力的功能,但本文对它进行单独分类。如果在运行代码单元时出现异常,用户可以在新的一行中键入 %debug 并恢复运行。这一操作将打开一个交互式调试环境,找到发生异常的位置。用户还可以检查程序中分配的变量值,并在此执行操作。点击q即可退出调试。
11.gif


5. 美观排版
如果想建立美观的数据结构,pprint是一个直接的模块,在打印字典或JSON数据时特别有用。下面来看一个使用print 和 pprint 来显示输出的例子。
12.jpg


6. 笔记突出显示
可以在Jupyter笔记本中使用alert/Note boxes来标记一些重要的或需要突出的内容。笔记的颜色取决于突出内容的重要程度。用户只需在需要突出显示的单元格中添加以下任意或所有代码。
①蓝色笔记框:信息
  1. <div class="alert alert-block alert-info">
  2. <b>Tip:</b> Use blue boxes (alert-info) for tips and notes.  
  3. If it’s a note, you don’t have to include the word “Note”.
  4. </div>
复制代码

13.jpg
②黄色笔记框:警告
Example: Yellow Boxes are generally used to include additional examples or mathematical formulas.
14.jpg
③绿色笔记框:完成
  1. <div class="alert alert-block alert-success">
  2. Use green box only when necessary like to display links to related content.
  3. </div>
复制代码

15.jpg
④红色笔记框:危险
  1. <div class="alert alert-block alert-danger">
  2. It is good to avoid red boxes but can be used to alert users to not delete some important part of code etc.  
  3. </div>
复制代码

16.jpg


7. 打印单元格的所有输出
例如包含以下代码行的Jupyter笔记本单元格:
  1. In [1]: 10+5  
  2. 11+6
  3. Out [1]: 17
复制代码

只打印最后一个输出是单元格的正常属性,而其他输出,则需要添加 print()功能。事实证明,只要在笔记本顶部添加以下代码段,就可以打印所有的输出内容。
  1. from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"
复制代码

现在所有输出可以一个接一个地打印出来。
  1. In [1]: 10+5  
  2. 11+6
  3. 12+7
  4. Out [1]: 15
  5. Out [1]: 17
  6. Out [1]: 19
复制代码

输入以下代码可恢复到初始设置:
  1. InteractiveShell.ast_node_interactivity = "last_expr"
复制代码



8. 使用‘i’选项运行python脚本
从命令行运行python脚本的一种典型方式是:python hello.py。但是,如果在运行相同脚本时添加一个额外的-i,例如python -i hello.py,则会带来更多优势。具体操作如下:
首先,一旦程序结束,python就不会退出解释程序。此时,用户可以检查变量值和程序中定义功能。
17.gif
其次,因为用户仍然在解释程序中,所以可以通过以下方式轻松调用python调试器:
  1. import pdb
  2. pdb.pm()
复制代码

该方式可帮助用户找到异常发生的位置,然后可以处理代码。
18.jpg
漏洞的原始来源


9. 自动注释代码
Ctrl/Cmd + / 可以自动注释掉单元格中选定的行。再次点击该组合键可以取消同一行代码的注释。
19.gif


10. 撤销删除操作
你曾经有不小心删除过笔记本中的单元格吗?如果有,那么这里有一个快捷键可以撤销删除操作。

如果删除了单元格的内容,可以通过点击CTRL/CMD+Z来轻松恢复它
如果需要恢复整个删除的单元格,可以点击ESC+Z或者 EDIT > Undo Delete Cells
20.gif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表