Python Data Science Cheat Sheet,数据科学总结

版权声明:本文为博主原创文章,未经博主允许不得转载。博客主页:http://blog.csdn.net/u013390476 https://blog.csdn.net/u013390476/article/details/78067774

前言

Python是搞Data Science的不二选择。对于新手来说(比如我) ,需要快速学会使用Python的常用package。这篇博客主要就是总结一下用Python搞Data Science的大体步骤和一些细节。 PS. 我在美国的第一个学期,选了一门课叫做 Data Science Fundamentals,课程链接。使用的教材是《The Data Science Design Manual》 ,这本书的可读性很强,涉及面广,深入浅出,是给我们上课的老师自己写的一本书。




Data Science Project Main Steps

数据科学的项目大多遵循如下四个步骤:获得数据,数据预处理,建模和分析,评估和展现。

Step Name Packages
1 Get Data Pandas, Beautiful soup, …
2 Data Preprocessing Pandas, Numpy, NLTK, Scikit-image, …
3 Modeling and Analysis Scikit-learn, Numpy, Scipy, Sympy, Tensorflow, …
4 Evaluate and Present Jupyter Notebook, Matplotlab, Seaborn, …


Step 0: Environment

做 data science 项目最好使用anaconda,这个东西可以理解为:Python + 很多很多packages。安装完anaconda之后,大部分需要的packages都有了,比如 numpy, pandas, matlabplot等等。

命令 说明
conda install xxx 缺啥packages就补啥,类似于 pip install,不过既然用了conda,就不用pip了
conda list –revisions 万一conda环境蹦了,看看你做了什么,类似于 git log
conda install –revision [revision number] 退回到以前的conda版本,类似于 git reset –hard xxx
conda create -n myenv python=3.6 建立一个conda环境,类似于virtualenv -p /usr/bin/… myenv
conda activate myenv 激活某个conda环境


Step 1: Getting the Data

Python是一门面向对象的语言(object oriented programming)。但是在做data science的过程中,需要切换思维,切换成面向数组/表的编程(array or table oriented porgramming),基本上,你的数据都是以数组/表的形式组织的。这种思维在面向GPU编程的时候也是很需要的。

Pandas

Pandas is used to get data from a web url, a local file, or data you just created in the program. HERE is a great ten minute code example guide to Pandas。建议把这个网页里面的代码在Notebook里面抄一遍。

Pandas 用三种数据结构来存储数据。

数据结构 维数 元素
Series 1 维 Scalar Value
DataFrame 2 维 Series
Panal 3 维 DataFrame

其中DataFrame的使用最为广泛。DataFrame是用来存储二维数据的。二维数据包括:数据库里面的表(table),和csv格式的spreadsheet文件。table和spreadsheet这种二维关系型数据的广泛使用,使得DataFrame这个数据结构广泛使用。打印一个DataFrame对象就是一个表,垂直向下的方向是X轴(row,index,axis=0),水平向右方向是Y轴(column,axis=1)。X轴的row代表一行一行的record(记录),Y轴的column代表feature(特征属性)。 df.iloc[3,4]代表第4行记录的第5个属性(下标从0开始)。注意:这里千万不要和平面直角坐标系联系在一起。在平面直角坐标系里面,垂直向上的是Y轴,水平向右的是X轴。

Beautiful Soup

我在学习用Beautiful soup写爬虫程序的时候,主要参考了这个网页。我写爬虫脚本的最大感想是:不要有畏惧心理,勇敢的去写,不断测试改进,没有爬虫脚本一开始就是如你所愿的。这个是我自己写的爬歌曲genre的程序。


其实,真正的问题在于,数据在哪里?阿里巴巴,Kaggle等公司的大数据挑战项目,每次的挑战任务都会提供一个很大的csv spreadsheet。但是如果自己做Data Science Project呢?那么就要需要花费很多心思去寻找数据在哪里。没有数据简直就是“巧妇难为无米之炊”。数据获取方式包括:网络爬虫,网站提供API,网站直接提供数据下载,自己调研手动输入数据,给有数据的机构发邮件请求数据,花钱买数据。。。俗话说:好的开始就是成功的一半。有了高质量的数据就是好的开始。

我团队在做 Project #8:Do Popular Songs Endure时,获取歌曲数据有如下几种方式:

  1. 人工输入法。最后我们团队要找的目标在Spotify的桌面客户端里面。我们除了人工把客户端里面的数据输入到excel里面,没有找到别的办法。
  2. 网页的Ctrl C+V法。我们需要的特征在一个网页里的表格里面,我们可以直接复制,然后粘贴到Excel。
  3. 爬虫方法。我写了爬虫程序,爬Wikipedia里面的数据。
  4. API方法。韩国队友拿到了Spotify的API,直接从API里面弄到了数据。

我门在做这个项目的过程中,估计接近百分之80的时间花在搞数据上面了!



Step 2: Data Preprocessing

数据预处理主要是data cleaning,还包括scaling,encoding等等。

Data Cleaning

原始的数据常常是无法直接使用的,需要做“清洁”。做data cleaning我还是使用Pandas。常见的date cleaning包括:

  1. Missing value。数据缺失(nan)。最简单的方法是删除这一行。不过最好impute一下,把缺失的数据填补上去,这
  2. Name unification。比如”B. J. Thomas”和”B.J. Thomas”其实本是一个人,但是着两个字符串相差了一个空格,导致程序会认为是两个人。
  3. Outlier。outlier需要引起注意,有时候outlier是由一些错误引起的,那么此时可以直接把outlier删除。如果确实有正确的outlier,那么最好不要删除,删除虽然可以减小误差,但是就是自欺欺人了,很容易overfit
  4. Feature selection。在做kaggle challenge项目的时候它给你一大坨数据,有很多features。这些Highly correlated的一些features最好只保留一个,或者做一个PCA。

Scaling

Scaling的意思是,改变数值数据的范围,比如:normalization和log

在data cleaning之后,拿ML算法建模之前,把数据的取值范围按照公式运算一下,这个公式一般是Z-score。做完z-score之后,该feature的均值为0,方差为1。做normalization的目的是使feature之间的数值具有可比性。

有时候,在z-score之前,还要做一个logarithm。这就涉及到power law分布了。我们的project中,犯了这个错误被老师指出来了。Billboard排行榜是对歌曲的流行度的一个排名,从第1到第100。那么假设第一名和第三名之间的流行程度相差X,第五十一名和五十三名之间相差Y,那么X和Y想等么?显然不是,应该X>>Y。这篇论文公式6描述了billboard排行榜单和流行程度之间的函数关系。


Encoding

Encoding是指把categorical(分类)数据转换成numerical(数值)型数据。字符串就是categorical数据,sklearn的库不能接受字符串。一种方法是直接删除整个字符串特征数据。还有一种方法叫做onehotencoding。我在做project的时候,使用了pd.get_dummies。我的使用情景是:一首歌属于一个genre,但是genre属性是categorical的,为了能够使用sklearn的回归算法,就用get_dummies把genre变成了0-1的数值型数据。



Step 3: Modeling and Analysis

Sklearn

在做好前期的数据工作之后,建模和分析就变得轻松了,在我做的project中,所谓建模就是两三行代码,如下:

model = linear_model.LinearRegression()
model = model.fit(feature, target)

建模之后,就是拿模型去预测测试数据:

pred = model.predict(test)

所以到底用那个模型(机器学习算法)呢?除了大概了解这些算法的运行机理之外,就是把这些sklearn算法都拿来一一试一遍。


Step 4: Evaluate and Present

Evaluation的话,就是拿pred和真实值做对比,没有对比就没有伤害。伤害完了还要去做evaluation评估。基本的评估包括:mean/median absolute err-or(MAE), mean squeared error(MSE)等,还做图:误差分布图,和预测-真实值图,其中纵坐标为预测值,横坐标为真实值。一个evaluation report例子,这例子的permutation可以不做。

我们可以写一个程序(一个函数),一次运行就可以生成各种evaluation结果。这样可以快速得知我们的数据和模型如何。


Jupyter Notebook

Jupyter Notebook combines code, data, equations, visualizations and explanatory text all in one. Super easy to use. You code, run results and write documentations in a web browser. For data science project, I believe Jupyter notebook is better than IDEs such as Pycharm or Visual Studio. Even if you use an IDE to write your code, you still will need a tool to write the report, such as Word or LaTex, which is miseralbe. When you use Jupyter Notebook, after you finish wirting your code, your data science project’s report is already almost finished.

HERE are shortcut keys for Jupyter Notebook. In the notebook, there are two modes: command mode and edit mode (just like Vim has three modes). Press Esc to get into command mode, and press Enter to get into edit mode. In edit mode, Tab completion works just like the tab completion in Linux/Unix. Tab自动补全一个编程利器,加快效率。

HERE 是如何修改Jupyter Notebook的起始目录,可以把起始目录改成项目的路径。HERE 是如何将Notebook 连接到 remote server。Here 是如何将 Notebook连接到Google Cloud。


Seaborn

Seaborn基于Matplotlib。HERE是如何seaborn绘制一个漂亮的heatmap热力图。

Pandas.plot

没错,pandas无处不在,它也可以用来作图,我还挺喜欢用它来作图的。我觉得Pndas.plot比matplotlib用起来方便快速一些。



其他

代码优化

原生的Python程序比较慢,特别是 for loop。加快Python 程序的速度的两个简单的方法是:能用 Numpy 的地方,绝不用 list;使用 Numba,它是一个编译优化工具,HERE 是一个简易的Numba教程。最后,如果程序的瓶颈是大规模的数字,矩阵运算的话,可以使用GPU来加速程序,在这里可以使用 CUDA 库。



Talk is Cheap Show Me the Code

这个GitHub有我CSE519 Data Science Fundamentals所有的作业,代码和报告。这篇博客包含了这门课的回忆录。


Last updated: 2018/8/16

猜你喜欢

转载自blog.csdn.net/u013390476/article/details/78067774