Python数据分析

从本博客开始,将系统的学习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就是其中一个常用的科学计算发行版。

《Python数据分析》

安装完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 condaconda --version 命令检查是否正确。假如安装的是Python 2.7对应的版本,运行python --versionpython -V 可以得到Python 2.7.12 :: Anaconda 4.1.1 (64-bit),也说明该发行版默认的环境是Python 2.7。

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

《Python数据分析》

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

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

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

Anaconda 设置:
《Python数据分析》

固定模板设置:
《Python数据分析》

# -*- 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))           # <type 'list'>

    np_lst = np.array(lst)
    print(type(np_lst))        # <type 'numpy.ndarray'>

    # 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()

《Python数据分析》

具有属性的图:

# -*- 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()

《Python数据分析》

五、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()
   

打印结果:

<class 'pandas.core.series.Series'>
                   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

相关文章:
Anaconda使用总结
Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

    原文作者:Corwien
    原文地址: https://segmentfault.com/a/1190000011860598
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞