佳木斯湛栽影视文化发展公司

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

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

熱門(mén)標(biāo)簽:服務(wù)器配置 呼叫中心市場(chǎng)需求 銀行業(yè)務(wù) 網(wǎng)站文章發(fā)布 檢查注冊(cè)表項(xiàng) 美圖手機(jī) 鐵路電話(huà)系統(tǒng) 智能手機(jī)

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

——?jiǎng)⒌洛?/p>

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

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

csv文件是用逗號(hào)(,)分隔的文本文件。在csv文件中注釋是以(#)開(kāi)頭。

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

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

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

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

from csv import reader
 
#python標(biāo)準(zhǔn)庫(kù)導(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)

代碼比較簡(jiǎn)單,此處不做過(guò)多贅述。

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

(768, 9)

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

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

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ù)

通過(guò)Pandas來(lái)導(dǎo)入CSV文件要使用pandas.read_csv()函數(shù)。這個(gè)函數(shù)的返回值使Data Frame。在機(jī)器學(xué)習(xí)的項(xiàng)目中,經(jīng)常利用pandas來(lái)做數(shù)據(jù)處理和準(zhǔn)備工作。因此,推薦使用Pandas來(lái)導(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ù)的特征、分布情況,以及需要解決的問(wèn)題,一邊建立相關(guān)的算法模型并進(jìn)行優(yōu)化。

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

對(duì)數(shù)據(jù)的簡(jiǎn)單審視,是加強(qiáng)對(duì)數(shù)據(jù)理解最有效的方法之一。通過(guò)對(duì)數(shù)據(jù)的觀察,可以發(fā)現(xiàn)數(shù)據(jù)的內(nèi)在關(guān)系。這些發(fā)現(xiàn)有助于對(duì)數(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ù)屬性和類(lèi)型:

'''
數(shù)據(jù)維度
'''
#查看數(shù)據(jù)維度
#通過(guò)DATa Frame的shape屬性來(lái)查看數(shù)據(jù)集中有多少行多少列
print(data.shape)
 
 
'''
數(shù)據(jù)屬性和類(lèi)型
'''
#查看數(shù)據(jù)屬性和類(lèi)型
#通過(guò)DATa Frame的Type屬性來(lái)查看每一個(gè)字段的數(shù)據(jù)類(lèi)型
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ì)

通過(guò)DataFrame的describe()方法來(lái)查看描述性統(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ì)
'''
#通過(guò)DATa frame的describe()方法來(lái)查看描述性統(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ù)來(lái)表示兩個(gè)屬性之間的關(guān)聯(lián)性,它介于(-1,1)。當(dāng)數(shù)據(jù)的關(guān)聯(lián)性比較高時(shí),有些算法(如Liner、邏輯回歸算法等)的性能會(huì)降低。所以需要查看一下算法的關(guān)聯(lián)性。使用Data Frame的corr()方法來(lái)計(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ù)分布分析

通過(guò)分析數(shù)據(jù)的高斯分布情況來(lái)確認(rèn)數(shù)據(jù)的偏離情況。使用Data Frame的skew()方法來(lái)計(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ù)可視化

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

3.1單一圖表

3.1.1直方圖

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

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

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

3.1.3箱線圖

箱線圖又稱(chēng)盒須圖、盒式圖或箱行圖,是一種用于顯示一組數(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)目開(kāi)始前的一些準(zhǔn)備工作:導(dǎo)入數(shù)據(jù),數(shù)據(jù)理解和數(shù)據(jù)可視化。導(dǎo)入數(shù)據(jù)有三種方法:Python庫(kù)函數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

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

標(biāo)簽:滄州 長(zhǎng)治 沈陽(yáng) 樂(lè)山 新疆 紅河 上海 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python機(jī)器學(xué)習(xí)入門(mén)(二)之Python數(shù)據(jù)理解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    东阿县| 绍兴县| 海宁市| 通海县| 木兰县| 新源县| 江达县| 江安县| 夏邑县| 营山县| 鹤峰县| 三门峡市| 泗水县| 江源县| 获嘉县| 青海省| 大荔县| 墨脱县| 安仁县| 冷水江市| 临泽县| 桃江县| 孟州市| 焦作市| 大邑县| 宁陕县| 八宿县| 宁乡县| 安多县| 凯里市| 晋中市| 伊金霍洛旗| 若尔盖县| 阿合奇县| 白银市| 临安市| 化隆| 中卫市| 汉源县| 康平县| 和平区|