主頁 > 知識庫 > Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解

Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解

熱門標(biāo)簽:ai電話機(jī)器人哪里好 宿遷星美防封電銷卡 長沙高頻外呼系統(tǒng)原理是什么 百度地圖標(biāo)注沒有了 湛江智能外呼系統(tǒng)廠家 西藏房產(chǎn)智能外呼系統(tǒng)要多少錢 ai電銷機(jī)器人源碼 地圖標(biāo)注審核表 外呼并發(fā)線路

統(tǒng)計(jì)學(xué)是什么?概率與數(shù)學(xué)。用概率與數(shù)學(xué)來分析人,分析的永遠(yuǎn)不是人。用永遠(yuǎn)不是人的結(jié)論指導(dǎo)人實(shí)在是一種偏誤。在這個(gè)意義上講,解讀強(qiáng)于技術(shù)。

——劉德寰

1.數(shù)據(jù)導(dǎo)入

在訓(xùn)練機(jī)器學(xué)習(xí)的模型時(shí),需要大量的數(shù)據(jù),最常用的方法是利用歷史數(shù)據(jù)來訓(xùn)練模型。這些歷史數(shù)據(jù)通常是以csv文件儲存,或者能夠方便地轉(zhuǎn)化為csv文件。在開始機(jī)器學(xué)習(xí)時(shí),我們首先要導(dǎo)入csv數(shù)據(jù)文件。

csv文件是用逗號(,)分隔的文本文件。在csv文件中注釋是以(#)開頭。

在接下來的文章中,將使用Pima Indians數(shù)據(jù)集,它是從UCI機(jī)器學(xué)習(xí)倉庫(https://archive.ics.uci.edu/ml/index.php)中獲取的。也可到網(wǎng)盤中下載(https://pan.baidu.com/s/1nv2xuVpXWHC1HUdS1c5QaQ)提取碼:d4im。

Pima Indians是一個(gè)分類問題的數(shù)據(jù)集,主要記錄了印第安人最近五年內(nèi)是否患有糖尿病的醫(yī)療數(shù)據(jù)。

1.1使用標(biāo)準(zhǔn)Python類庫導(dǎo)入數(shù)據(jù)

Python提供了一個(gè)標(biāo)準(zhǔn)的類庫CSV,用來處理CSV文件。

from csv import reader
 
#python標(biāo)準(zhǔn)庫導(dǎo)入數(shù)據(jù)
 
filename = 'pima_data.csv'
with open(filename, 'rt') as raw_data:
    readers = reader(raw_data, delimiter=",")
    x = list(readers)
    data = np.array(x).astype('float')
    print(data.shape)

代碼比較簡單,此處不做過多贅述。

運(yùn)行結(jié)果:

(768, 9)

1.2使用Numpy導(dǎo)入數(shù)據(jù)

使用numpy的loadtxt()方法導(dǎo)入數(shù)據(jù)。使用這個(gè)函數(shù)處理的數(shù)據(jù)沒有文件頭,并且所有的數(shù)據(jù)結(jié)構(gòu)都一樣,也就是說,數(shù)據(jù)類型都一樣。

import numpy as np
#使用Numpy導(dǎo)入數(shù)據(jù)
from numpy import loadtxt
filename = 'pima_data.csv'
with open(filename, 'rt') as raw_data:
    data = loadtxt(raw_data, delimiter=',')
    print(data.shape)

loadtxt中的第一個(gè)參數(shù)為數(shù)據(jù)實(shí)例,第二個(gè)參數(shù)為分隔符。

輸出結(jié)果同上

(768, 9)

1.3使用Pandas導(dǎo)入數(shù)據(jù)

通過Pandas來導(dǎo)入CSV文件要使用pandas.read_csv()函數(shù)。這個(gè)函數(shù)的返回值使Data Frame。在機(jī)器學(xué)習(xí)的項(xiàng)目中,經(jīng)常利用pandas來做數(shù)據(jù)處理和準(zhǔn)備工作。因此,推薦使用Pandas來導(dǎo)入數(shù)據(jù)。

#推薦使用?。。?!
#使用Pandas導(dǎo)入數(shù)據(jù)
from pandas import read_csv
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
#設(shè)置文件頭
data = read_csv(filename, names=names)
print(data.shape)
print(data.head(10))

使用Pandas導(dǎo)入數(shù)據(jù)可以設(shè)置文件頭,便于后續(xù)數(shù)據(jù)理解。read_csv()方法有兩個(gè)參數(shù),一個(gè)是文件名,一個(gè)是文件頭數(shù)組。

輸出結(jié)果同上

(768, 9)

2.數(shù)據(jù)理解

為了得到更準(zhǔn)確的結(jié)果,必須理解數(shù)據(jù)的特征、分布情況,以及需要解決的問題,一邊建立相關(guān)的算法模型并進(jìn)行優(yōu)化。

2.1數(shù)據(jù)基本屬性

對數(shù)據(jù)的簡單審視,是加強(qiáng)對數(shù)據(jù)理解最有效的方法之一。通過對數(shù)據(jù)的觀察,可以發(fā)現(xiàn)數(shù)據(jù)的內(nèi)在關(guān)系。這些發(fā)現(xiàn)有助于對數(shù)據(jù)進(jìn)行整理。

2.1.1查看前10行數(shù)據(jù)

使用的數(shù)據(jù)集依然是Pima Indians數(shù)據(jù)集:

from pandas import read_csv
 
filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass', 'pedi','age','class']
data = read_csv(filename,names=names)
#查看前十行數(shù)據(jù)
print(data.head(10))

先使用pandas導(dǎo)入數(shù)據(jù)集,再使用print函數(shù)數(shù)據(jù)data的head屬性以查看前10行數(shù)據(jù)。

輸出結(jié)果:

preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.63 50 1
1 1 85 66 29 0 26.6 0.35 31 0
2 8 183 64 0 0 23.3 0.67 32 1
3 1 89 66 23 94 28.1 0.17 21 0
4 0 137 40 35 168 43.1 2.29 33 1
5 5 116 74 0 0 25.6 0.20 30 0
6 3 78 50 32 88 31.0 0.25 26 1
7 10 115 0 0 0 35.3 0.13 29 0
8 2 197 70 45 543 30.5 0.16 53 1
9 8 125 96 0 0 0.0 0.23 54 1

2.1.2查看數(shù)據(jù)維度,數(shù)據(jù)屬性和類型:

'''
數(shù)據(jù)維度
'''
#查看數(shù)據(jù)維度
#通過DATa Frame的shape屬性來查看數(shù)據(jù)集中有多少行多少列
print(data.shape)
 
 
'''
數(shù)據(jù)屬性和類型
'''
#查看數(shù)據(jù)屬性和類型
#通過DATa Frame的Type屬性來查看每一個(gè)字段的數(shù)據(jù)類型
print(data.dtypes)

運(yùn)行結(jié)果:

(768, 9)
preg int64
plas int64
pres int64
skin int64
test int64
mass float64
pedi float64
age int64
class int64
dtype: object

2.1.3查看數(shù)據(jù)描述性統(tǒng)計(jì)

通過DataFrame的describe()方法來查看描述性統(tǒng)計(jì)的內(nèi)容。包括:數(shù)據(jù)數(shù)量、平均值、標(biāo)準(zhǔn)方差、最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值。(省略前方讀取數(shù)據(jù)部分)

from pandas import set_option
 
'''
描述性統(tǒng)計(jì)
'''
#通過DATa frame的describe()方法來查看描述性統(tǒng)計(jì)
#數(shù)據(jù)記錄數(shù)、平均住、標(biāo)準(zhǔn)方差、最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值
set_option('display.width',100)
#設(shè)置數(shù)據(jù)的精確度
set_option('precision',2)
print("數(shù)據(jù)描述性分析:")
print(data.describe())

運(yùn)行結(jié)果:

數(shù)據(jù)描述性分析:
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00

2.2數(shù)據(jù)相關(guān)性和分布分析

2.2.1數(shù)據(jù)相關(guān)矩陣

數(shù)據(jù)屬性的相關(guān)性是指數(shù)據(jù)的兩個(gè)屬性是否相互影響,以及這種影響是何種方式。常用皮爾遜相關(guān)系數(shù)來表示兩個(gè)屬性之間的關(guān)聯(lián)性,它介于(-1,1)。當(dāng)數(shù)據(jù)的關(guān)聯(lián)性比較高時(shí),有些算法(如Liner、邏輯回歸算法等)的性能會降低。所以需要查看一下算法的關(guān)聯(lián)性。使用Data Frame的corr()方法來計(jì)算數(shù)據(jù)屬性之間的相關(guān)矩陣。

print("數(shù)據(jù)屬性的相關(guān)性:")
print(data.corr(method='pearson'))

結(jié)果如下:

數(shù)據(jù)屬性的相關(guān)性:
preg plas pres skin test mass pedi age class
preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22
plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47
pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07
skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07
test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13
mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29
pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17
age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24
class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00

2.2.2數(shù)據(jù)分布分析

通過分析數(shù)據(jù)的高斯分布情況來確認(rèn)數(shù)據(jù)的偏離情況。使用Data Frame的skew()方法來計(jì)算所有數(shù)據(jù)屬性的高斯分布偏離情況。

print("數(shù)據(jù)的高斯分布偏離情況:")
print(data.skew())

結(jié)果如下:

數(shù)據(jù)的高斯分布偏離情況:
preg 0.90
plas 0.17
pres -1.84
skin 0.11
test 2.27
mass -0.43
pedi 1.92
age 1.13
class 0.64
dtype: float64

3.數(shù)據(jù)可視化

對數(shù)據(jù)進(jìn)行理解最快、最有效的方式是通過數(shù)據(jù)的可視化。我們將使用Matplotlib來可視化數(shù)據(jù)以更好地理解數(shù)據(jù)。

3.1單一圖表

3.1.1直方圖

直方圖使用較多,此處不做過多介紹。

from pandas import read_csv
import matplotlib.pyplot as plt
 
filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass', 'pedi','age','class']
data = read_csv(filename,names=names)
 
'''
直方圖
'''
data.hist()
plt.show()

3.1.2密度圖

密度圖是一種表現(xiàn)與數(shù)據(jù)值對應(yīng)的邊界或域?qū)ο蟮膱D形表示方法,一般用于呈現(xiàn)連續(xù)變量。密度圖類似于對直方圖進(jìn)行抽象,用平滑的線來描述數(shù)據(jù)的分布。

'''
密度圖
'''
data.plot(kind='density',subplots=True,layout=(3,3),sharex=False,sharey=False)
plt.show()

3.1.3箱線圖

箱線圖又稱盒須圖、盒式圖或箱行圖,是一種用于顯示一組數(shù)據(jù)分散情況的統(tǒng)計(jì)圖。

'''
箱線圖
'''
data.plot(kind='box',subplots=True,layout=(3,3),sharex=False,sharey=False)
plt.show()

3.2多重圖表

3.2.1相關(guān)矩陣圖

from pandas import read_csv
import matplotlib.pyplot as plt
import numpy as np
 
filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names=names)
 
#相關(guān)矩陣圖
correlations = data.corr()
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(correlations, vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,9,1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(names)
ax.set_yticklabels(names)
plt.show()

3.2.2散點(diǎn)矩陣圖

from pandas import read_csv
import matplotlib.pyplot as plt
import numpy as np
from pandas.plotting import scatter_matrix
 
filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names=names)
 
scatter_matrix(data)
plt.show()

總結(jié)

本文主要講了機(jī)器學(xué)習(xí)項(xiàng)目開始前的一些準(zhǔn)備工作:導(dǎo)入數(shù)據(jù),數(shù)據(jù)理解和數(shù)據(jù)可視化。導(dǎo)入數(shù)據(jù)有三種方法:Python庫函數(shù),Numpy和Pandas導(dǎo)入,推薦使用Panads導(dǎo)入CSV文件。數(shù)據(jù)理解包括查看數(shù)據(jù)的一些基本屬性以及查看數(shù)據(jù)相關(guān)矩陣和高斯分布情況。數(shù)據(jù)可視化主要介紹了Matplotlib的一些常用方法。

到此這篇關(guān)于Python機(jī)器學(xué)習(xí)(二)數(shù)據(jù)理解的文章就介紹到這了,更多相關(guān)Python機(jī)器學(xué)習(xí)(二)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列Queue
  • 詳解python數(shù)據(jù)結(jié)構(gòu)之棧stack
  • python數(shù)據(jù)類型相關(guān)知識擴(kuò)展
  • Python數(shù)據(jù)類型最全知識總結(jié)
  • python數(shù)據(jù)處理——對pandas進(jìn)行數(shù)據(jù)變頻或插值實(shí)例
  • python入門課程第四講之內(nèi)置數(shù)據(jù)類型有哪些

標(biāo)簽:大同 南平 林芝 寧夏 海南 漯河 普洱 盤錦

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解》,本文關(guān)鍵詞  Python,機(jī)器,學(xué)習(xí),入門,二,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python機(jī)器學(xué)習(xí)入門(二)之Python數(shù)據(jù)理解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章