Python數據分析

從本博客開始,將系統的學習Python的數據分析的六大模塊numpy、scipy、matplotlib、pandas、scikit-learn、keras,有關Python的基礎知識,能夠看個人博客 http://digtime.cn/

1、概念

python特色:簡潔,開發效率高,運算速度慢,膠水特性
主要有三點:統計分析方法,提取有用的信息,研究、歸納、總結。
數據分析六大模塊:numpy、scipy、matplotlib、pandas、scikit-learn、keraspython

  • numpy:數據結構基礎
  • scipy:強大的科學計算方法(矩陣分析、信號分析、數理分析...)
  • matplotlib:豐富的可視化套件
  • pandas:基礎數據分析套件
  • scikit-learn:強大的數據分析建模塊
  • keras:人工神經網絡

2、Python環境安裝

一、Anaconda集成包環境安裝

要利用Python進行科學計算,就須要一一安裝所需的模塊,而這些模塊可能又依賴於其它的軟件包或庫,於是安裝和使用起來相對麻煩。幸虧有人專門在作這一類事情,將科學計算所須要的模塊都編譯好,而後打包以發行版的形式供用戶使用,Anaconda就是其中一個經常使用的科學計算髮行版。程序員

clipboard.png

安裝完anaconda,就至關於安裝了Python、IPython、集成開發環境Spyder、一些包等等。macos

對於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環境變量設置:bash

➜ 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可查看安裝了哪些包:數據結構

clipboard.png

Conda的包管理就比較好理解了,這部分功能與pip相似。dom

二、設置編輯器環境和模板

個人編輯器使用的是 Pycharm,能夠給其設置開發環境和模板,進行快速開發。機器學習

Anaconda 設置:
clipboard.png編輯器

固定模板設置:
clipboard.png

# -*- coding:utf-8 -*-
"""
@author:Corwien
@file:${NAME}.py
@time:${DATE}${TIME}
"""

3、numpy

NumPy(Numeric Python)系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結構要高效的多(該結構也能夠用來表示矩陣(matrix))。聽說NumPy將Python至關於變成一種免費的更強大的MatLab系統。

numpy特性:開源,數據計算擴展,ndarray, 具備多維操做, 數矩陣數據類型、矢量處理,以及精密的運算庫。專爲進行嚴格的數字處理而產生。

一、基本操做

小試牛刀:

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

二、矩陣操做與線性方程組

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

4、matplotlib

matplotlib 是用來繪圖表的,官網 matplotlib.org

一、正弦和餘弦

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

clipboard.png

具備屬性的圖:

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

clipboard.png

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

6、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 網頁爬蟲 & 文本處理 & 科學計算 & 機器學習 & 數據挖掘兵器譜

相關文章
相關標籤/搜索