這篇文章主要講解了“python數(shù)據(jù)分析與挖掘知識點有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python數(shù)據(jù)分析與挖掘知識點有哪些”吧!
成都創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運維、營銷推廣、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為三輪攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
python有4個內(nèi)建的數(shù)據(jù)結(jié)構(gòu)–list(列表)、tuple(元組)、dictionary(字典)以及set(集合),它們可以統(tǒng)稱為容器。
從功能上看,列表與元組的區(qū)別是,列表可以被修改,而元組不可以。
如果已經(jīng)有了一個列表a,同時想復(fù)制a,命名為變量b,那么b==a
是無效的,這個時候b僅僅是a的一個別名(或者說引用),修改b也會修改a的。正確的復(fù)制方法應(yīng)該是b==a[:]
表2-1 列表/元組相關(guān)的函數(shù)
函數(shù) | 功能 | 函數(shù) | 功能 |
---|---|---|---|
cmp(a,b) | 比較兩個列表/元組的元素 | min(a) | 返回列表/元組元素最小值 |
len(a) | 列表/元組元素個數(shù) | sum(a) | 將列表/元組中的元素求和 |
max(a) | 返回列表/元組元素最大值 | sorted(a) | 對列表的元素進行升序排序 |
表2-2列表相關(guān)的方法
函 數(shù) | 功 能 |
---|---|
a.append(1) | 將1添加到列表a末尾 |
a.count(1) | 統(tǒng)計列表a中元素1出現(xiàn)的次數(shù) |
a.extend([1, 2]) | 將列表[1, 2]的內(nèi)容追加到列表a的末尾中 |
a.index(1) | 從列表a中找出第一個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.它不支持索引。一般我們通過花括號{} 或者set()函數(shù)來創(chuàng)建一個集合。
s = (1, 2, 2, 3} #注意2會自動去重,得到{1, 2, 3} s = set([1, 2, 2, 3]) #同樣,它將列表轉(zhuǎn)換為集合,得到{1, 2, 3}
由于集合的特殊性(特別是無序性),因此集合有一些特別的運算。
a = t | s # t和s的并集 b = t & s #t和s的交集 c = t - s #求差集(項在t中,但不在s中) d = t^s #對稱差集(項在t或s中,但不會同時出現(xiàn)在二者中)
在python中,函數(shù)式編程主要由幾個函數(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)建一個待運行的命令容器,只有其它函數(shù)調(diào)用它的時候才返回結(jié)果。
reduce()函數(shù)用于遞歸計算
reduce(lambda x,y: x*y,range(1,n+1)) 等價于 s=1 for i in range(1,n+1): s=s*i
在2.x中上述命令可以直接運行,在3.x中reduce函數(shù)已經(jīng)被移除了全局命名空間,它被置于fuctools庫中,如需使用,則需要通過 from fuctools import reduce
filter()函數(shù)是一個過濾器
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) #計算正弦 math.exp (1) #計算指數(shù) math.pi #內(nèi)置的圓周率常數(shù) import math as m m.sin (1) #計算正弦 from math import exp as e #只導(dǎo)入math庫中的exp函數(shù),并起別名e e(1) #計算指數(shù) sin (1) #此時sin (1)和math.sin(l)都會出錯,因為沒被導(dǎo)入
(2)導(dǎo)入 future 特征(For 2.x)
Python 2.x與3.x之間的差別不僅僅在內(nèi)核上,也表現(xiàn)在代碼的實現(xiàn)中。比如,在2.x 中,print是作為一個語句出現(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)擴展庫
擴展庫 | 簡 介 |
---|---|
Numpy | 提供數(shù)組支持,以及相應(yīng)的高效的處理函數(shù) |
Scipy | 提供矩陣支持,以及矩陣相關(guān)的數(shù)值計算模塊 |
Matplotlib | 強大的數(shù)據(jù)可視化工具、作圖庫 |
Pandas | 強大、靈活的數(shù)據(jù)分析和探索工具 |
StatsModels | 統(tǒng)計建模和計量經(jīng)濟學(xué),包括描述統(tǒng)計、統(tǒng)計模型估計和推斷 |
Scikit-Leam | 支持回歸、分類、聚類等的強大的機器學(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]) #引用前三個數(shù)字(切片) print(a.min()) #輸出a的最小值 a.sort() #將a的元素從小到大排序,此操作直接修改a,因此這時候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ù)、快速傅里葉變化、信號處理和圖像處理、常微分方程求解和其它科學(xué)與工程中常用的計算,這些功能都是數(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) #由微積分知識知道積分結(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)簽,就會發(fā)現(xiàn)中文標(biāo)簽無法正常顯示。這是由于Matplotlib的默認字體是英文字體所致,解決它的辦法是在作圖之前手動指定默認字體為中文字體,如黑體(SimHei)。
plt.rcParams['font.sans-serif'] = ['SimHei'] # 這兩句用來正式顯示中文標(biāo)簽
另外。保存作圖圖像時,負號有可能顯示不正常,可以通過以下代碼解決:
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題
這里有一個小建議給讀者:有時間多去Matplotlib提供的“畫廊”欣賞它做出來漂亮效果,也許你就慢慢的愛上Matplotlib作圖了。
pip install pandas
pandas是python下最強大的數(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ù)組,它的每一列都是一個Series。
代碼清單2-4,pandas的簡單例子
# -*- coding: utf-8 -*- import pandas as pd #通常用pd作為pandas的別名。 s = pd.Series([1,2,3], index=['a', 'b', 'c']) #創(chuàng)建一個序列s d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns = ['a', 'b', 'c']) #創(chuàng)建一個表 d2 = pd.DataFrame(s) #也可以用已有的序列來創(chuàng)建表格 d.head() #預(yù)覽前5行數(shù)據(jù) d.describe() #數(shù)據(jù)基本統(tǒng)計量 #讀取文件,注意文件的存儲路徑不能帶有中文,否則讀取可能出錯。 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則更注重數(shù)據(jù)的統(tǒng)計建模分析,它使得python有了R語言的味道。statsmodels支持與pandas進行數(shù)據(jù)交互,因此,它與pandas結(jié)合,成為了python下強大的數(shù)據(jù)挖掘組合。
代碼清單2-5,用statsmodels來進行ADF平穩(wěn)性檢驗的例子
# -*- coding: utf-8 -*- from statsmodels.tsa.stattools import adfuller as ADF # 導(dǎo)入ADF檢驗 import numpy as np result=ADF(np.random.rand(100)) #返回的結(jié)果有ADF值、p值等 print(result)
pip install scikit-learn
scikit-learn是python下強大的學(xué)習(xí)工具包,它提供了完善的機器學(xué)習(xí)工具箱,包括數(shù)據(jù)預(yù)處理、分類、回歸、聚類、預(yù)測和模型分析等。
scikit-learn依賴于numpy、scipy和matplotlib。
代碼清單2-6,創(chuàng)建一個簡單的機器學(xué)習(xí)模型
# -*- coding: utf-8 -*- from sklearn.linear_model import LinearRegression # 導(dǎo)入線性回歸模型 model=LinearRegression()# 建立線性回歸模型 print(model)
1)所有模型提供的接口有:
model.fit():訓(xùn)練模型,對于監(jiān)督模型來說是fit(X,y),對于非監(jiān)督模型是fit(X)。
2)監(jiān)督模型提供的接口有:
model.predict(X_new):預(yù)測新樣本
model.predict_proba(X_new):預(yù)測概率,僅對某些模型有用(比如LR)
model.score():得分越高,fit越好
3)非監(jiān)督模型提供的接口有:
model.transform():從數(shù)據(jù)間學(xué)到新的“基空間”。
model.fit_transform():從數(shù)據(jù)中學(xué)到新的基并將這個數(shù)據(jù)按照這組“基”進行轉(zhuǎn)換。
scikit-learn本身提供一些實例數(shù)據(jù),比較常見的有安德森鳶尾花卉數(shù)據(jù)集、手寫圖像數(shù)據(jù)集等。
代碼清單2-7,創(chuàng)建一個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ù)進行預(yù)測 print(result) params=clf.coef_ # 查看訓(xùn)練好模型的參數(shù) print(params)
雖然scikit-learn足夠強大,但是它并沒有包含一種強大的模型–人工神經(jīng)網(wǎng)絡(luò)。
本書用keras庫搭建神經(jīng)網(wǎng)絡(luò)。事實上,keras并非簡單的神經(jīng)網(wǎng)絡(luò)庫,而是一個基于Theano的強大的深度學(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ò)等特點,最重要的是它還實現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。
有必要介紹一下Theano,它也是python的一個庫,用來定義、優(yōu)化和高效的解決多維數(shù)組數(shù)據(jù)對應(yīng)數(shù)學(xué)表達式的模擬估計問題。它具有高效地實現(xiàn)符號分解、高度優(yōu)化的速度和穩(wěn)定性等特點,最重要的是它還實現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。
用Theano就可以搭建起高效的神經(jīng)網(wǎng)絡(luò)模型,但是對于普通讀者來說門檻還是相當(dāng)高的,keras正是為此而生,它大大簡化了搭建各種神經(jīng)網(wǎng)絡(luò)模型的步驟,允許普通用戶輕松的搭建并求解具有幾百個輸入節(jié)點的深層神經(jīng)網(wǎng)絡(luò),而且定制的自由度非常大,甚至可以驚呼:搭建神經(jīng)網(wǎng)絡(luò)可以如此簡單!
安裝keras之前需要先安裝numpy,scipy,theano。安裝theano先要準(zhǔn)備一個C++編譯器,這在linux下是自帶的。因此linux下安裝theano和keras非常簡單,在windows下就沒有那么簡單了,因為它沒有現(xiàn)成的編譯環(huán)境。一般而言是先安裝MinGW(windows下的GCC和G++)然后在安裝Theano(提前安裝好numpy等依賴庫),最后安裝keras。如果要實現(xiàn)GPU加速,還需要安裝和配置CUDA。
pip install keras pip install theano
值得一提的是,在windows下keras的速度會大大折扣。
代碼清單2-8,搭建一個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é)點)、第一隱藏層(64節(jié)點)的連接 model.add(Activation('tanh')) # 第一隱藏層用tanh作為激活函數(shù) model.add(Dropout(0.5)) # 使用Dropout防止過擬合 model.add(Dense(64,64)) # 添加第一隱藏層(64節(jié)點)、第二隱藏層(64節(jié)點)的連接 model.add(Activation('tanh')) # 第二隱藏層用tanh作為激活函數(shù) model.add(Dropout(0.5)) # 使用Dropout防止過擬合 model.add(Dense(64,1)) # 添加第二隱藏層(64節(jié)點)、輸出層(1節(jié)點)的連接 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) # 測試模型
要注意的是,keras的預(yù)測函數(shù)與scikit-learn有所差別,keras用model.predict()方法給出概率,model.predict_classes()方法給出分類結(jié)果。
gensim是用來處理語言方面的任務(wù),如文本相識度計算、LDA、word2vec等
代碼清單2-9,gensim使用word2vec的簡單例子
# -*- coding: utf-8 -*- import gensim,logging # logging是用來輸出訓(xùn)練日志的 logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO) # 分好詞的句子,每個句子以詞列表的形式輸入 sentences=[['first','sentence'],['second','sentence']] # 用以上句子訓(xùn)練詞向量模型 model=gensim.models.Word2Vec(sentences,min_count=1) print(model['sentence']) # 輸出單詞sentence的詞向量
感謝各位的閱讀,以上就是“python數(shù)據(jù)分析與挖掘知識點有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python數(shù)據(jù)分析與挖掘知識點有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
分享標(biāo)題:python數(shù)據(jù)分析與挖掘知識點有哪些
本文網(wǎng)址:http://sd-ha.com/article2/ghseoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站改版、響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站營銷、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)