您好,登錄后才能下訂單哦!
這篇文章主要講解了“python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些”吧!
python有4個(gè)內(nèi)建的數(shù)據(jù)結(jié)構(gòu)–list(列表)、tuple(元組)、dictionary(字典)以及set(集合),它們可以統(tǒng)稱為容器。
從功能上看,列表與元組的區(qū)別是,列表可以被修改,而元組不可以。
如果已經(jīng)有了一個(gè)列表a,同時(shí)想復(fù)制a,命名為變量b,那么b==a
是無效的,這個(gè)時(shí)候b僅僅是a的一個(gè)別名(或者說引用),修改b也會(huì)修改a的。正確的復(fù)制方法應(yīng)該是b==a[:]
表2-1 列表/元組相關(guān)的函數(shù)
函數(shù) | 功能 | 函數(shù) | 功能 |
---|---|---|---|
cmp(a,b) | 比較兩個(gè)列表/元組的元素 | min(a) | 返回列表/元組元素最小值 |
len(a) | 列表/元組元素個(gè)數(shù) | sum(a) | 將列表/元組中的元素求和 |
max(a) | 返回列表/元組元素最大值 | sorted(a) | 對(duì)列表的元素進(jìn)行升序排序 |
表2-2列表相關(guān)的方法
函 數(shù) | 功 能 |
---|---|
a.append(1) | 將1添加到列表a末尾 |
a.count(1) | 統(tǒng)計(jì)列表a中元素1出現(xiàn)的次數(shù) |
a.extend([1, 2]) | 將列表[1, 2]的內(nèi)容追加到列表a的末尾中 |
a.index(1) | 從列表a中找出第一個(gè)1的索引位置 |
a.insert(2, 1) | 將1插入列表a的索引為2的位置 |
a.pop(1) | 移除列表a中索引為1的元素 |
dict([['today',20],['tomorrow',30]]) #也相當(dāng)于{'today':20, 'tomorrow':30 } dict.fromkeys(['today', 'tomorrow'],20) #相當(dāng)于{'today':20, 'tomorrow':20}
Python內(nèi)置了集合這一數(shù)據(jù)結(jié)構(gòu),同數(shù)學(xué)上的集合概念基本上是一致的,它與列表的區(qū) 別在于:1.它的元素是不重復(fù)的,而且是無序的;2.它不支持索引。一般我們通過花括號(hào){} 或者set()函數(shù)來創(chuàng)建一個(gè)集合。
s = (1, 2, 2, 3} #注意2會(huì)自動(dòng)去重,得到{1, 2, 3} s = set([1, 2, 2, 3]) #同樣,它將列表轉(zhuǎn)換為集合,得到{1, 2, 3}
由于集合的特殊性(特別是無序性),因此集合有一些特別的運(yùn)算。
a = t | s # t和s的并集 b = t & s #t和s的交集 c = t - s #求差集(項(xiàng)在t中,但不在s中) d = t^s #對(duì)稱差集(項(xiàng)在t或s中,但不會(huì)同時(shí)出現(xiàn)在二者中)
在python中,函數(shù)式編程主要由幾個(gè)函數(shù)的使用構(gòu)成:lambda()、map()、reduces()、filter(),
f=lambda x : x+2 #定義函數(shù)f(x)=x+2 g=lambda x,y : x+y # 定義函數(shù)g(x,y)=x+y a=[1,2,3] b=map(lambda x: x+2,a) b=list(b) # 結(jié)果是[3,4,5]
在3.x需要b=list(b)這一步,在2.x不需要這步,原因是在3.x中,map函數(shù)僅僅是創(chuàng)建一個(gè)待運(yùn)行的命令容器,只有其它函數(shù)調(diào)用它的時(shí)候才返回結(jié)果。
reduce()函數(shù)用于遞歸計(jì)算
reduce(lambda x,y: x*y,range(1,n+1)) 等價(jià)于 s=1 for i in range(1,n+1): s=s*i
在2.x中上述命令可以直接運(yùn)行,在3.x中reduce函數(shù)已經(jīng)被移除了全局命名空間,它被置于fuctools庫中,如需使用,則需要通過 from fuctools import reduce
filter()函數(shù)是一個(gè)過濾器
b=filter(lambda x :x>5 and x<8,range(10)) b=list(b) # 結(jié)果是[6,7]
(1)庫的導(dǎo)入
import math math.sin (1) #計(jì)算正弦 math.exp (1) #計(jì)算指數(shù) math.pi #內(nèi)置的圓周率常數(shù) import math as m m.sin (1) #計(jì)算正弦 from math import exp as e #只導(dǎo)入math庫中的exp函數(shù),并起別名e e(1) #計(jì)算指數(shù) sin (1) #此時(shí)sin (1)和math.sin(l)都會(huì)出錯(cuò),因?yàn)闆]被導(dǎo)入
(2)導(dǎo)入 future 特征(For 2.x)
Python 2.x與3.x之間的差別不僅僅在內(nèi)核上,也表現(xiàn)在代碼的實(shí)現(xiàn)中。比如,在2.x 中,print是作為一個(gè)語句出現(xiàn)的,用法為print a :但是在3.x中,它是作為函數(shù)出現(xiàn)的,用 法為print(a)。為了保證兼容性,本書的基本代數(shù)是使用3.x的語法編寫的,而使用2.x的讀 者,可以通過引入fbture特征的方式兼容代碼,如,
#將print變成函數(shù)形式,即用print (a)格式輸出 from __future__ import print_function #3.x的3/2=1.5, 3//2才等于 1; 2.x中3/2=1 from __future__ import division
表2-4 Python數(shù)據(jù)挖掘相關(guān)擴(kuò)展庫
擴(kuò)展庫 | 簡(jiǎn) 介 |
---|---|
Numpy | 提供數(shù)組支持,以及相應(yīng)的高效的處理函數(shù) |
Scipy | 提供矩陣支持,以及矩陣相關(guān)的數(shù)值計(jì)算模塊 |
Matplotlib | 強(qiáng)大的數(shù)據(jù)可視化工具、作圖庫 |
Pandas | 強(qiáng)大、靈活的數(shù)據(jù)分析和探索工具 |
StatsModels | 統(tǒng)計(jì)建模和計(jì)量經(jīng)濟(jì)學(xué),包括描述統(tǒng)計(jì)、統(tǒng)計(jì)模型估計(jì)和推斷 |
Scikit-Leam | 支持回歸、分類、聚類等的強(qiáng)大的機(jī)器學(xué)習(xí)庫 |
Keras | 深度學(xué)習(xí)庫,用于建立神經(jīng)網(wǎng)絡(luò)以及深度學(xué)習(xí)模型 |
Gensim | 用來做文本主題模型的庫,文本挖掘可能用到 |
pip install numpy
代碼清單2-1,numpy基本操作
# -*- coding: utf-8 -*- import numpy as np #一般以np作為numpy的別名 a = np.array([2, 0, 1, 5]) #創(chuàng)建數(shù)組 print(a) #輸出數(shù)組 print(a[:3]) #引用前三個(gè)數(shù)字(切片) print(a.min()) #輸出a的最小值 a.sort() #將a的元素從小到大排序,此操作直接修改a,因此這時(shí)候a為[0, 1, 2, 5] print(a) b= np.array([[1, 2, 3], [4, 5, 6]]) #創(chuàng)建二維數(shù)組 print(b*b) #輸出數(shù)組的平方陣,即[[1, 4, 9], [16, 25, 36]]
scipy包含的功能有最優(yōu)化、線性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變化、信號(hào)處理和圖像處理、常微分方程求解和其它科學(xué)與工程中常用的計(jì)算,這些功能都是數(shù)據(jù)挖掘和建模必備的。
scipy依賴于numpy
pip install scipy
代碼清單2-2,scipy求解非線性方程組和數(shù)值積分
# -*- coding: utf-8 -*- #求解非線性方程組2x1-x2^2=1,x1^2-x2=2 from scipy.optimize import fsolve #導(dǎo)入求解方程組的函數(shù) def f(x): #定義要求解的方程組 x1 = x[0] x2 = x[1] return [2*x1 - x2**2 - 1, x1**2 - x2 -2] result = fsolve(f, [1,1]) #輸入初值[1, 1]并求解 print(result) #輸出結(jié)果,為array([ 1.91963957, 1.68501606]) #數(shù)值積分 from scipy import integrate #導(dǎo)入積分函數(shù) def g(x): #定義被積函數(shù) return (1-x**2)**0.5 pi_2, err = integrate.quad(g, -1, 1) #積分結(jié)果和誤差 print(pi_2 * 2) #由微積分知識(shí)知道積分結(jié)果為圓周率pi的一半
pip install matplotlib
代碼清單2-3,matplotlip作圖的基本代碼
# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt #導(dǎo)入Matplotlib x = np.linspace(0, 10, 1000) #作圖的變量自變量 y = np.sin(x) + 1 #因變量y z = np.cos(x**2) + 1 #因變量z plt.figure(figsize = (8, 4)) #設(shè)置圖像大小 plt.plot(x,y,label = '$\sin x+1$', color = 'red', linewidth = 2) #作圖,設(shè)置標(biāo)簽、線條顏色、線條大小 plt.plot(x, z, 'b--', label = '$\cos x^2+1$') #作圖,設(shè)置標(biāo)簽、線條類型 plt.xlabel('Time(s) ') # x軸名稱 plt.ylabel('Volt') # y軸名稱 plt.title('A Simple Example') #標(biāo)題 plt.ylim(0, 2.2) #顯示的y軸范圍 plt.legend() #顯示圖例 plt.show() #顯示作圖結(jié)果
如果讀者使用的是中文標(biāo)簽,就會(huì)發(fā)現(xiàn)中文標(biāo)簽無法正常顯示。這是由于Matplotlib的默認(rèn)字體是英文字體所致,解決它的辦法是在作圖之前手動(dòng)指定默認(rèn)字體為中文字體,如黑體(SimHei)。
plt.rcParams['font.sans-serif'] = ['SimHei'] # 這兩句用來正式顯示中文標(biāo)簽
另外。保存作圖圖像時(shí),負(fù)號(hào)有可能顯示不正常,可以通過以下代碼解決:
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題
這里有一個(gè)小建議給讀者:有時(shí)間多去Matplotlib提供的“畫廊”欣賞它做出來漂亮效果,也許你就慢慢的愛上Matplotlib作圖了。
pip install pandas
pandas是python下最強(qiáng)大的數(shù)據(jù)分析和探索工具,pandas的名稱來自于面板數(shù)據(jù)(Panel Data)和python數(shù)據(jù)分析(Data Analysis)。
pip install xlrd # 為python添加讀取excel的功能 pip install xlwt # 為python添加寫入excel的功能
pandas基本的數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame。Series就是序列,類似一維數(shù)組;DataFrame則是相當(dāng)于一張二維的表格,類似二維數(shù)組,它的每一列都是一個(gè)Series。
代碼清單2-4,pandas的簡(jiǎn)單例子
# -*- coding: utf-8 -*- import pandas as pd #通常用pd作為pandas的別名。 s = pd.Series([1,2,3], index=['a', 'b', 'c']) #創(chuàng)建一個(gè)序列s d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns = ['a', 'b', 'c']) #創(chuàng)建一個(gè)表 d2 = pd.DataFrame(s) #也可以用已有的序列來創(chuàng)建表格 d.head() #預(yù)覽前5行數(shù)據(jù) d.describe() #數(shù)據(jù)基本統(tǒng)計(jì)量 #讀取文件,注意文件的存儲(chǔ)路徑不能帶有中文,否則讀取可能出錯(cuò)。 pd.read_excel('data.xls') #讀取Excel文件,創(chuàng)建DataFrame。 pd.read_csv('data.csv', encoding = 'utf-8') #讀取文本格式的數(shù)據(jù),一般用encoding指定編碼。
pip install statsmodels
pandas著眼于數(shù)據(jù)的讀取、處理和探索,而statsmodels則更注重?cái)?shù)據(jù)的統(tǒng)計(jì)建模分析,它使得python有了R語言的味道。statsmodels支持與pandas進(jìn)行數(shù)據(jù)交互,因此,它與pandas結(jié)合,成為了python下強(qiáng)大的數(shù)據(jù)挖掘組合。
代碼清單2-5,用statsmodels來進(jìn)行ADF平穩(wěn)性檢驗(yàn)的例子
# -*- coding: utf-8 -*- from statsmodels.tsa.stattools import adfuller as ADF # 導(dǎo)入ADF檢驗(yàn) import numpy as np result=ADF(np.random.rand(100)) #返回的結(jié)果有ADF值、p值等 print(result)
pip install scikit-learn
scikit-learn是python下強(qiáng)大的學(xué)習(xí)工具包,它提供了完善的機(jī)器學(xué)習(xí)工具箱,包括數(shù)據(jù)預(yù)處理、分類、回歸、聚類、預(yù)測(cè)和模型分析等。
scikit-learn依賴于numpy、scipy和matplotlib。
代碼清單2-6,創(chuàng)建一個(gè)簡(jiǎn)單的機(jī)器學(xué)習(xí)模型
# -*- coding: utf-8 -*- from sklearn.linear_model import LinearRegression # 導(dǎo)入線性回歸模型 model=LinearRegression()# 建立線性回歸模型 print(model)
1)所有模型提供的接口有:
model.fit():訓(xùn)練模型,對(duì)于監(jiān)督模型來說是fit(X,y),對(duì)于非監(jiān)督模型是fit(X)。
2)監(jiān)督模型提供的接口有:
model.predict(X_new):預(yù)測(cè)新樣本
model.predict_proba(X_new):預(yù)測(cè)概率,僅對(duì)某些模型有用(比如LR)
model.score():得分越高,fit越好
3)非監(jiān)督模型提供的接口有:
model.transform():從數(shù)據(jù)間學(xué)到新的“基空間”。
model.fit_transform():從數(shù)據(jù)中學(xué)到新的基并將這個(gè)數(shù)據(jù)按照這組“基”進(jìn)行轉(zhuǎn)換。
scikit-learn本身提供一些實(shí)例數(shù)據(jù),比較常見的有安德森鳶尾花卉數(shù)據(jù)集、手寫圖像數(shù)據(jù)集等。
代碼清單2-7,創(chuàng)建一個(gè)SVM模型
# -*- coding: utf-8 -*- from sklearn import datasets # 導(dǎo)入數(shù)據(jù)集 iris=datasets.load_iris() # 加載數(shù)據(jù)集 print(iris.data.shape) # 查看數(shù)據(jù)集大小 from sklearn import svm # 導(dǎo)入SVM模型 clf=svm.LinearSVC() # 建立線性SVM分類器 clf.fit(iris.data,iris.target) # 用數(shù)據(jù)訓(xùn)練模型 result=clf.predict([[5.0,3.6,1.3,0.25]]) # 訓(xùn)練好模型之后,輸入新的數(shù)據(jù)進(jìn)行預(yù)測(cè) print(result) params=clf.coef_ # 查看訓(xùn)練好模型的參數(shù) print(params)
雖然scikit-learn足夠強(qiáng)大,但是它并沒有包含一種強(qiáng)大的模型–人工神經(jīng)網(wǎng)絡(luò)。
本書用keras庫搭建神經(jīng)網(wǎng)絡(luò)。事實(shí)上,keras并非簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)庫,而是一個(gè)基于Theano的強(qiáng)大的深度學(xué)習(xí)庫,利用它不僅僅可以搭建普通的神經(jīng)網(wǎng)絡(luò),還可以搭建各種深度學(xué)習(xí)模型,如自編碼器、循環(huán)神經(jīng)網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等特點(diǎn),最重要的是它還實(shí)現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。
有必要介紹一下Theano,它也是python的一個(gè)庫,用來定義、優(yōu)化和高效的解決多維數(shù)組數(shù)據(jù)對(duì)應(yīng)數(shù)學(xué)表達(dá)式的模擬估計(jì)問題。它具有高效地實(shí)現(xiàn)符號(hào)分解、高度優(yōu)化的速度和穩(wěn)定性等特點(diǎn),最重要的是它還實(shí)現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。
用Theano就可以搭建起高效的神經(jīng)網(wǎng)絡(luò)模型,但是對(duì)于普通讀者來說門檻還是相當(dāng)高的,keras正是為此而生,它大大簡(jiǎn)化了搭建各種神經(jīng)網(wǎng)絡(luò)模型的步驟,允許普通用戶輕松的搭建并求解具有幾百個(gè)輸入節(jié)點(diǎn)的深層神經(jīng)網(wǎng)絡(luò),而且定制的自由度非常大,甚至可以驚呼:搭建神經(jīng)網(wǎng)絡(luò)可以如此簡(jiǎn)單!
安裝keras之前需要先安裝numpy,scipy,theano。安裝theano先要準(zhǔn)備一個(gè)C++編譯器,這在linux下是自帶的。因此linux下安裝theano和keras非常簡(jiǎn)單,在windows下就沒有那么簡(jiǎn)單了,因?yàn)樗鼪]有現(xiàn)成的編譯環(huán)境。一般而言是先安裝MinGW(windows下的GCC和G++)然后在安裝Theano(提前安裝好numpy等依賴庫),最后安裝keras。如果要實(shí)現(xiàn)GPU加速,還需要安裝和配置CUDA。
pip install keras pip install theano
值得一提的是,在windows下keras的速度會(huì)大大折扣。
代碼清單2-8,搭建一個(gè)MLP(多層感知器)
# -*- coding: utf-8 -*- from keras.models import Sequential from keras.layers.core import Dense,Dropout,Activation from keras.optimizers import SGD model=Sequential() # 模型初始化 model.add(Dense(20,64)) # 添加輸入層(20節(jié)點(diǎn))、第一隱藏層(64節(jié)點(diǎn))的連接 model.add(Activation('tanh')) # 第一隱藏層用tanh作為激活函數(shù) model.add(Dropout(0.5)) # 使用Dropout防止過擬合 model.add(Dense(64,64)) # 添加第一隱藏層(64節(jié)點(diǎn))、第二隱藏層(64節(jié)點(diǎn))的連接 model.add(Activation('tanh')) # 第二隱藏層用tanh作為激活函數(shù) model.add(Dropout(0.5)) # 使用Dropout防止過擬合 model.add(Dense(64,1)) # 添加第二隱藏層(64節(jié)點(diǎn))、輸出層(1節(jié)點(diǎn))的連接 model.add(Activation('sigmoid')) # 輸出層用sigmoid作為激活函數(shù) sgd=SGD(lr=0.1,decay=1e-6,momentum=0.9,nesterov=True) #定義求解算法 model.compile(loss='mean_squared_error',optimizer=sgd) # 編譯生成模型,損失函數(shù)為平均誤差平方和 X_train=None y_train=None X_test=None y_test=None model.fit(X_train,y_train,nb_epoch=20,batch_size=16) # 訓(xùn)練模型 score=model.evaluate(X_test,y_test,batch_size=16) # 測(cè)試模型
要注意的是,keras的預(yù)測(cè)函數(shù)與scikit-learn有所差別,keras用model.predict()方法給出概率,model.predict_classes()方法給出分類結(jié)果。
gensim是用來處理語言方面的任務(wù),如文本相識(shí)度計(jì)算、LDA、word2vec等
代碼清單2-9,gensim使用word2vec的簡(jiǎn)單例子
# -*- coding: utf-8 -*- import gensim,logging # logging是用來輸出訓(xùn)練日志的 logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO) # 分好詞的句子,每個(gè)句子以詞列表的形式輸入 sentences=[['first','sentence'],['second','sentence']] # 用以上句子訓(xùn)練詞向量模型 model=gensim.models.Word2Vec(sentences,min_count=1) print(model['sentence']) # 輸出單詞sentence的詞向量
感謝各位的閱讀,以上就是“python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。