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