从本博客开始,将系统的学习Python的数据分析的六大模块numpy、scipy、matplotlib、pandas、scikit-learn、keras,有关Python的基础知识,可以看我的博客 http://digtime.cn/。

一、概念

python特点:简洁,开发效率高,运算速度慢,胶水特性

主要有三点:统计分析方法,提取有用的信息,研究、概括、总结。

数据分析六大模块:numpy、scipy、matplotlib、pandas、scikit-learn、keras

numpy:数据结构基础

scipy:强大的科学计算方法(矩阵分析、信号分析、数理分析...)

matplotlib:丰富的可视化套件

pandas:基础数据分析套件

scikit-learn:强大的数据分析建模块

keras:人工神经网络

二、Python环境安装

1、Anaconda集成包环境安装

要利用Python进行科学计算,就需要一一安装所需的模块,而这些模块可能又依赖于其它的软件包或库,因而安装和使用起来相对麻烦。幸好有人专门在做这一类事情,将科学计算所需要的模块都编译好,然后打包以发行版的形式供用户使用,Anaconda就是其中一个常用的科学计算发行版。

zwPython集成版 python集成包_ci

安装完anaconda,就相当于安装了Python、IPython、集成开发环境Spyder、一些包等等。

对于Mac、Linux系统,Anaconda安装好后,实际上就是在主目录下多了个文件夹(~/anaconda)而已,Windows会写入注册表。安装时,安装程序会把bin目录加入PATH(Linux/Mac写入~/.bashrc,Windows添加到系统变量PATH),这些操作也完全可以自己完成。以Linux/Mac为例,安装完成后设置PATH的操作是

# 将anaconda的bin目录加入PATH,根据版本不同,也可能是~/anaconda3/bin

echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc

# 更新bashrc以立即生效

source ~/.bashrc

MAC环境变量设置:

➜ export PATH=~/anaconda2/bin:$PATH

➜ conda -V

conda 4.3.30

配置好PATH后,可以通过 which conda 或 conda --version 命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --version或 python -V 可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7。

在终端执行 conda list可查看安装了哪些包:

zwPython集成版 python集成包_Python_02

Conda的包管理就比较好理解了,这部分功能与pip类似。

2、设置编辑器环境和模板

我的编辑器使用的是 Pycharm,可以给其设置开发环境和模板,进行快速开发。

Anaconda 设置:

zwPython集成版 python集成包_ci_03

固定模板设置:

zwPython集成版 python集成包_python数据分析要安装哪些东西_04

# -*- coding:utf-8 -*-

"""

@author:Corwien

@file:${NAME}.py

@time:${DATE}${TIME}

"""

三、numpy

NumPy(Numeric Python)系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。

numpy特性:开源,数据计算扩展,ndarray, 具有多维操作, 数矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

1、基本操作

小试牛刀:

# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: numpyTest.py
@time: 17/11/5 01:32
"""
import numpy as np
def main():
lst = [[1, 3, 5], [2, 4, 6]]
print(type(lst)) # 
np_lst = np.array(lst)
print(type(np_lst)) # 
# bool, int, int8, int16, int64 ..., uint8, float, float8
np_list = np.array(lst, dtype = np.float)
# 1 numpy property
print(np_list.shape) # pirnt: (2, 3)
print(np_list.ndim) # pirnt: 2
print(np_list.dtype) # pirnt: float64
print(np_list.itemsize) # pirnt: 8
print(np_list.size) # pirnt: 6
# 2 some arrays
print(np.zeros([2, 4])) #
print(np.ones([4, 3])) #
print("RandNum:")
print(np.random.rand(2, 4))
print("RandInt:")
print(np.random.randint(1, 10, 3))
print("Randn:")
print(np.random.randn(2, 4))
print("Distribute:")
print(np.random.beta(1, 10, 100))
# 3 Aarray Opers
lst = np.arange(1, 11).reshape([2, -1])
print("Exp")
print(np.exp(lst))
print(np.exp2(lst))
print(np.sqrt(lst))
print(np.sin(lst))
print("Log")
print(np.log(lst))
lst1 = np.array([10, 20, 30, 40])
lst2 = np.array([1, 2, 4, 5])
print("Add")
print(lst1 + lst2) # [11 22 34 45]
if __name__ == "__main__":
main()
2、矩阵操作与线性方程组
# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: liner.py
@time: 17/11/6 00:17
"""
import numpy as np
# 4 liner
from numpy.linalg import *
print(np.eye(3))
lst = np.array([[1, 2],
[3, 4]])
print("Inv: ")
print(inv(lst))
print("T: ")
print(lst.transpose())
print("Det:")
print(det(lst))
print(eig(lst))
y = np.array([[5.], [7.]])
print("Slove")
print(solve(list, y))
四、matplotlib
matplotlib 是用来绘图表的,官网 matplotlib.org
1、正弦和余弦
# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: matplo.py
@time: 17/11/6 00:44
"""
import numpy as np
def main():
#line
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
c, s = np.cos(x), np.sin(x) # 余弦和正弦
plt.figure(1)
plt.plot(x, c)
plt.plot(x, s)
plt.show()
if __name__ == "__main__":
main()

zwPython集成版 python集成包_zwPython集成版_05

具有属性的图:

# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: matplo.py
@time: 17/11/6 00:44
"""
import numpy as np
def main():
#line
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
c, s = np.cos(x), np.sin(x) # 余弦,正弦
plt.figure(1)
plt.plot(x, c, color="blue", linewidth=1.0, linestyle="-", label="COS", alpha=0.5) # x 自变量, c 余弦
plt.plot(x, s, "r*", label="SIN")
plt.title("COS & SIN")
ax=plt.gca()
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")
for label in ax.get_xticklabels()+ax.get_yticklabels():
label.set_fontsize(10)
label.set_bbox(dict(facecolor="white", edgecolor="None", alpha=0.2))
plt.legend(loc="upper left")
plt.grid()
plt.axis([-1, 1, -0.5, 1])
plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green",alpha=0.25)
t = 1
plt.plot([t, t], [0, np.cos(t)], "y", linewidth=3, linestyle="--")
plt.annotate("cos(1)", xy=(t, np.cos(1)), xycoords="data", xytext=(+5, +10),
textcoords="offset points", arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.1"))
plt.show()
if __name__ == "__main__":
main()

zwPython集成版 python集成包_科学计算_06

五、scipy

scipy 是一个数值计算库,官网 https//www.scipy.org,

scipy包包含致力于科学计算中常见问题的各个工具箱。它的不同子模块相应于不同的应用。像插值,积分,优化,图像处理,,特殊函数等等。

scipy可以与其它标准科学计算程序库进行比较,比如GSL(GNU C或C++科学计算库),或者Matlab工具箱。scipy是Python中科学计算程序的核心包;它用于有效地计算numpy矩阵,来让numpy和scipy协同工作。

在实现一个程序之前,值得检查下所需的数据处理方式是否已经在scipy中存在了。作为非专业程序员,科学家总是喜欢重新发明造轮子,导致了充满漏洞的,未经优化的,很难分享和维护的代码。相反,Scipy程序经过优化和测试,因此应该尽可能使用。

Integral
Optimize
Interpolation
Liner
Others
1.Integral 积分
# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: sciTest.py
@time: 17/11/7 00:57
"""
import numpy as np
def main():
#1--integral
from scipy.integrate import quad, dblquad
print(quad(lambda x:np.exp(-x), 0, np.inf)) # print: (1.0000000000000002, 5.842606742906004e-11)
# print(dblquad(lambda t, x:np.exp(-x*t)/t**3, np.inf.lambda x:1, lambda x:np.inf))
if __name__ == "__main__":
main()

六、pandas

pandas官网 为了解决数据分析而创建的库。

基本操作:

# -*- coding:utf-8 -*-
"""
@author: Corwien
@file: pandasTest.py
@time: 17/11/7 00:57
"""
import numpy as np
import pandas as pd
def main():
#Data Structure
s=pd.Series([i*2 for i in range(1, 11)])
print(type(s))
dates = pd.date_range("20171110", periods=8)
df = pd.DataFrame(np.random.randn(8, 5), index = dates, columns=list("ABCDE"))
print df
if __name__ == "__main__":
main()
打印结果:
A B C D E
2017-11-10 -0.634174 -0.075550 1.029316 0.548124 1.556995
2017-11-11 1.060133 -0.392410 -0.007274 -0.555487 1.350169
2017-11-12 0.443465 -0.635941 -0.194218 0.195767 -0.732606
2017-11-13 0.760449 -0.526587 0.007155 0.554792 -1.230684
2017-11-14 1.624870 -0.304462 0.646139 0.187635 1.537512
2017-11-15 -1.312318 1.145372 -0.226041 -0.463330 0.446066
2017-11-16 -0.586573 0.803408 -1.565312 1.949908 -0.959705
2017-11-17 0.863814 -0.949896 1.880501 -0.032511 -0.116557
Process finished with exit code 0