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

這篇文章主要講解了“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數(shù)據(jù)分析簡介

2.2、python使用入門

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

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

(1)列表/元組

從功能上看,列表與元組的區(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)對列表的元素進(jìn)行升序排序
  • 表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的元素
(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.它不支持索引。一般我們通過花括號{} 或者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)在二者中)
(4)函數(shù)式編程

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

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

表2-4 Python數(shù)據(jù)挖掘相關(guān)擴(kuò)展庫

擴(kuò)展庫簡 介
Numpy提供數(shù)組支持,以及相應(yīng)的高效的處理函數(shù)
Scipy提供矩陣支持,以及矩陣相關(guān)的數(shù)值計算模塊
Matplotlib強(qiáng)大的數(shù)據(jù)可視化工具、作圖庫
Pandas強(qiáng)大、靈活的數(shù)據(jù)分析和探索工具
StatsModels統(tǒng)計建模和計量經(jīng)濟(jì)學(xué),包括描述統(tǒng)計、統(tǒng)計模型估計和推斷
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]) #引用前三個數(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]]
2.3.2、scipy

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的一半
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)簽,就會發(fā)現(xiàn)中文標(biāo)簽無法正常顯示。這是由于Matplotlib的默認(rèn)字體是英文字體所致,解決它的辦法是在作圖之前手動指定默認(rèn)字體為中文字體,如黑體(SimHei)。

plt.rcParams['font.sans-serif'] = ['SimHei'] # 這兩句用來正式顯示中文標(biāo)簽

另外。保存作圖圖像時,負(fù)號有可能顯示不正常,可以通過以下代碼解決:

plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號'-'顯示為方塊的問題

這里有一個小建議給讀者:有時間多去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ù)組,它的每一列都是一個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指定編碼。
2.3.5、statsmodels
pip install statsmodels

pandas著眼于數(shù)據(jù)的讀取、處理和探索,而statsmodels則更注重數(shù)據(jù)的統(tǒng)計建模分析,它使得python有了R語言的味道。statsmodels支持與pandas進(jìn)行數(shù)據(jù)交互,因此,它與pandas結(jié)合,成為了python下強(qiáng)大的數(shù)據(jù)挖掘組合。

代碼清單2-5,用statsmodels來進(jìn)行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)
2.3.6、scikit-learn
pip install scikit-learn

scikit-learn是python下強(qiáng)大的學(xué)習(xí)工具包,它提供了完善的機(jī)器學(xué)習(xí)工具箱,包括數(shù)據(jù)預(yù)處理、分類、回歸、聚類、預(yù)測和模型分析等。
scikit-learn依賴于numpy、scipy和matplotlib。

代碼清單2-6,創(chuàng)建一個簡單的機(jī)器學(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ù)按照這組“基”進(jìn)行轉(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ù)進(jìn)行預(yù)測
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ò)。事實上,keras并非簡單的神經(jīng)網(wǎng)絡(luò)庫,而是一個基于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ò)等特點,最重要的是它還實現(xiàn)了GPU加速,使得密集型數(shù)據(jù)的處理速度是CPU的數(shù)十倍。

有必要介紹一下Theano,它也是python的一個庫,用來定義、優(yōu)化和高效的解決多維數(shù)組數(shù)據(jù)對應(yīng)數(shù)學(xué)表達(dá)式的模擬估計問題。它具有高效地實現(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é)果。

2.3.8、gensim

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://muchs.cn/article2/ghseoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站改版、響應(yīng)式網(wǎng)站、全網(wǎng)營銷推廣網(wǎng)站營銷、網(wǎng)站維護(hù)

廣告

聲明:本網(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)

網(wǎng)站優(yōu)化排名