溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-11-23 09:49:20 來源:億速云 閱讀:128 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python數(shù)據(jù)分析與挖掘知識(shí)點(diǎn)有哪些”吧!

python數(shù)據(jù)分析簡(jiǎn)介

2.2、python使用入門

2.2.3、數(shù)據(jù)結(jié)構(gòu)

python有4個(gè)內(nèi)建的數(shù)據(jù)結(jié)構(gòu)–list(列表)、tuple(元組)、dictionary(字典)以及set(集合),它們可以統(tǒng)稱為容器。

(1)列表/元組

從功能上看,列表與元組的區(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的元素
(2)字典
dict([['today',20],['tomorrow',30]]) #也相當(dāng)于{'today':20, 'tomorrow':30 }

dict.fromkeys(['today', 'tomorrow'],20) #相當(dāng)于{'today':20, 'tomorrow':20}
(3)集合

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)在二者中)
(4)函數(shù)式編程

在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]
2.2.4、庫的導(dǎo)入與添加

(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.3、python數(shù)據(jù)分析工具

表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用來做文本主題模型的庫,文本挖掘可能用到
2.3.1、numpy
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]]
2.3.2、scipy

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的一半
2.3.3、matplotlib
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作圖了。

2.3.4、pandas
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指定編碼。
2.3.5、statsmodels
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)
2.3.6、scikit-learn
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)
2.3.7、keras

雖然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é)果。

2.3.8、gensim

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)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI