第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. 解决问题的步骤:
- 定义问题;
- 搜集数据;(开始使用工具)
- 数据整理;(pandas)
- 数据探索;(matplotlib)
- 建模(model):建立不同因素之间的更新;(Scikit-learn)
- 数据展现和解释;
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文档等。