第1讲 工具基础

Linux基础

1. 原因:

互联网公司的工作环境:linux。
适合大量数据处理。 服务器和计算的机器通常linux。

2. 操作:

2.1 文件操作

  • 创建目录:mkdir
  • 删除:rm
  • 删除非空目录: rm -rf file
  • 移动:mv
  • 复制:cp(复制目录:cp -r)
  • 找到文件/目录位置:cd
  • 显示当前目录下的文件:ls
  • 搜寻文件或目录:find
    • find ./-name"core"
  • 查看文件:cat vi more

2.2 数据分析有关操作

  • head -n 3 data.csv(查看头三行内容)
  • tail -n 3 data.csv(查看末三行内容)
  • 使用grep查询文件内容

    • grep 'data'todo.txt(在todo.txt中是否包含data字符串)
  • wc -l file 统计行数

  • wc -w file 统计单词数
  • wc -c file 统计字符数
  • 统计/home/han目录(包含子目录)下的所有js文件:
    • ls -IR /home/han | grep js | wc -l
    • 这种就是使用“命令管道”,前一个命令的输出可以作为后一个命令的输入。(这条很有意思,简直就是函数、公式、计算器嘛)
  • sort排序
    • -n 按数字进行排序(-n VS -d)
    • -d 按字典序进行排序
    • -r 逆序排序
    • -k N 指定按第N列排序
    • sort -nrk 1 data.txt
  • sort unsort.txt | uniq 消除重复行(这就是之前的管道用法,排序结果继续进行消除重复操作)
  • cat text | tr'\t''' 制表符转空格
  • cut -f2,4filename 截取文件的第2、4列
  • paste file1 file2 -d "," 按列拼接两个文件
  • 改变文件编码
    • iconv -f GBK -t UTF-8 file1 -o file2 (这是吧GBK编码改成utf-8编码)

Python 数据工具箱

1. 工具箱概略:

2. 解决问题的步骤:

  1. 定义问题;
  2. 搜集数据;(开始使用工具)
  3. 数据整理;(pandas)
  4. 数据探索;(matplotlib)
  5. 建模(model):建立不同因素之间的更新;(Scikit-learn)
  6. 数据展现和解释;

3. 数据相关各模块作用:

常用模块:

  • IPython:增强的交互式运行环境
  • NumPy:数组数据结构和矩阵计算
  • SciPy:科学计算
  • Matplotlib:数据绘图
  • Pandas:提供data frames数据结构
  • Statsmodels:统计模型
  • Scikit-learn:机器学习

不太着重的模块:

  • Requests:网页数据抓取
  • Beautifulsoup:解析网页数据
  • Flask:轻量级的web框架
  • sqlite3:轻量级数据库接口

比较高级的模块:

  • Pyspark:Spark的Python接口(数据量比较大)
  • nltk:自然语言处理
  • networkx:社交网络分析
  • theano:深度学习

4. 模块的安装:

推荐科学计算套件:Anaconda。
到官网下载已经打包好的。

5. 重要模块逐个介绍:

5.1 运行环境:ipython

ipython是一个增强的python shell。

作用和功能:

  • 提高编写、测试、调度代码的速度。
  • 提供了ipython notebook(现名Jupyter),是一个交互计算平台,也是一个记录计算过程的笔记本。
  • 满足交互计算和批处理计算,同时能保存脚本文件以记录计算过程
  • 能兼容markdown等语法,满足可重复数据分析的需求,以及课程教学、博客写作。
  • 能在本地的计算机上对远程服务器中的数据进行分析。

作业、演示将使用ipython notebook作为载体。可在浏览器运行。

5.2 数值计算:

5.2.1 numpy

numpy是一个科学计算的基础包。

作用和功能:

  • 快速高效的多维数组对象
  • 可执行向量化计算
  • 提供线性代数等矩阵运算
  • 可集成C的代码
5.2.2 SciPy

SciPy是science python的简称,用于解决科学计算中的标准问题。

作用和功能:

  • 数值积分和微分方程求解
  • 扩展的矩阵计算功能
  • 最优化工具
  • 概率分布计算和统计函数
  • 信号处理函数

5.3 数据可视化:

5.3.1 Matplotlib

Matplotlib是python下最著名的绘图库。

作用和功能:

  • 提供了一整套和matlab相似的命令API
  • 十分适合交互式绘图
  • 也可将它作为绘图控件,嵌入GUI应用程序中
5.3.2 Seaborn

强调统计绘图:如回归线、分布、直方图等。比基础的Matplotlib方便。

5.4 数据分析:Pandas

Pandas用于数据处理和分析,侧重于数据整理。整理结构化的数据(如excel形式的)

作用和功能:

  • 易用、高效的数据操作函数库
  • 执行join以及其他SQL类似的功能来重塑数据
  • 提供包括dataframe在内的数据结构
  • 支持各种格式(包括数据库)输入输出数据
  • 支持时间序列
  • 拥有基本绘图功能和统计功能(嵌入了Matplotlib的各种函数)

5.5 机器学习:Scikit-learn

Scikit-learn是一个机器学习库。

作用和功能:

  • 建立在Numpy、SciPy基础上的机器学习库
  • 作一个统一的接口来使用,有助于迅速地在数据集上实现流行的算法。
  • 含了许多用于标准机器学习任务的工具,如:聚类、分类和回归等。

iPython

后缀名:ipynb(官网下载的该python版本是2.7.11)。

1. 使用ipython

1.1 打开:

安装好之后,在终端中输入ipython,即可进入。
Windows Powershell下是这样:

1.2 第一次实践:

import numpy as np
x=np.random.randint(100)
x

运行结果是:

如果连续打印x,则x会一直是这个数。除非重新对x进行100以内随机数赋值这个动作,x才会变化。

这里在输入rand时用了tab键,系统会自动给出后续可能的变量(用户已定义,及系统中自有变量)。

1.3 退出

在命令行输入:

exit  

可退出。

注意:与退出python不同。退出python的命令为exit()

2.使用ipython notebook

记录文字、代码和运行结果,所以是一个集成环境。

2.1 打开

在终端中输入ipython notebook,即可进入。
终端:

同时打开了一个网页http://localhost:8888/tree,形如这样:

若点击客户端,还会再跳出来一个终端,效果等同。

该网页即为编辑器。

注意:运行期间不要关闭终端,否则会连接出错。

2.2 新建和保存

点击new开始新建,要想建立ipynb格式的文件,要点击new菜单下的python 2。
编辑好之后点击工具栏的保存按钮。

2.3 写代码

点击菜单insert下的insert cell,既可以在当前行之前插入,也可以在之后插入。
代码写完后要运行,点击工具栏的播放按钮即可。

2.4 获取帮助

在cell中输入英文问号,点击运行。

ps. 如果运行出错,修改代码,重新运行,错误信息会被覆盖掉,显示正确运行结果。

获取帮助运行成功后,会出现下一个cell,输入要获取帮助的具体指令。

例子代码:

import numpy as np
??np

2.5 快速参考手册

代码:

%quickref

这是ipython的参考手册。

2.6 连续计算

例如:

10+2

运行结果:12

用“_”指代上一个cell的输出,继续计算:

_*8

运行结果:84

2.7 抑制输出

代码之后加上“;”,即可不输出结果。运算还是进行了的。

2.8 调用输出缓存

如上图,Out[17]可继续调用:

Out[17]

运行结果:12

进行逻辑判断:

_==Out[17]

运行结果:True

看有多少输出:

Out

运行结果:

这实际上就是个名字为Out的数组。

Out[17]可简化为:

_17  

运行结果仍为:12

用多个下划线,一个表示上一个,两个表示再上一个,三个表示再再上一个。

print("The last output is: ", _)
print("The next last output is: ", __)
print("The next next last output is: ", ___)  

运行结果为:

('The last output is: ', 12)
('The next last output is: ', False)
('The next next last output is: ', True)  

请注意,这里忽略了对整个Out数组进行输出的Out[22]

2.9 输入调用

输入同理,使用In代替Out即可。

查看输入历史:

%history  

运行结果为:

import numpy as np
x=np.random.randint(100)
print x
?
?
??np
?print
??print
print
?
print
?print
??print
%quickref
print??
print??
compile??
re??
10+2
_*7
Out[17]
_==Out[17]
_==Out[17]
Out
_17
print("The last output is: ", _)
print("The next last output is: ", __)
print("The next next last output is: ", ___)
%history

这只是查看,非输出结果。

?和??的区别:
在用于某函数时,?会输出docstring,??会输出源代码。docstring就是函数里的注释。好像记得python里的help就是输出注释的。

cell较长时,可双击左侧框关闭,再打开只需要cell内任意位置单击。

2.10 运行系统命令

ipython也可以在cell中运行系统命令。
例如:运行pwd

2.11 magic functions

ipython特有的一些函数。 查看帮助:

%magic

其中函数的确好神奇!

%timeit range(10)  

假设程序运行很多次(100万次),看运行需要多少时间。
结果:

1000000 loops, best of 3: 230 ns per loop

如果使用两个“%”,就是整个cell中的代码段,运行需要多久:

%%timeit
range(10)
range(100)  

运行结果:

1000000 loops, best of 3: 899 ns per loop  

拿上次的mainapp试,结果显示:ImportError: No module named bottle,特地安装了bottle,仍然这样提示。

2.12 运行bash代码

%%bash

相对于声明这个cell中不是python代码,而是bash代码。

2.13 写入文件

%%file test.txt
This is a test file.
I like Jane. 

运行后,Writing test.txt,同目录下已经有了test.txt文件。

2.14 智能识别非程序符号

例如: >>> … 等,在cell中会自动识别出来,不影响运行结果。(标准python中这样的就不能运行。)

>>> #fibonacci series
... a, b =0, 1
>>> while b<10:
...    print(b)
...    a,b=b, a+b

运行结果为:

1
1
2
3
5
8

如果是标准python环境,是这样:

可以直接运行网上复制的代码了!!

2.15 画图

%matplotlib inline

声明之后的代码要开始画图。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import gcf

x=np.linspace(0, 2*np.pi, 300)
y=np.sin(x**2)
plt.plot(x,y)
plt.title("A little chirp")
f = gcf()

因为忘记写声明语句,以上代码点击执行无结果。于是重新补上执行语句,又想活用一下In调用,结果如下:

结果是把写进去的程序又写出来了……不得不重新贴一遍代码,这才开始画图:

所以in调用和out调用,本质上是传递数组中的字符串出来。

2.16 文件格式转换

文件菜单中的download as:

本文件存为md时还输出了上面打印的图形图片,为压缩包形式。存为html时只有一个文件。存为pdf时出错,提示信息:

很熟悉的500字样(内容可不熟啊~),说路径下没有pdflatex

2.17 快捷键

在help菜单中:

例如快速获取notebook帮助,进入py文档等。