尹喆 尚笑梅
摘 要:以目前熱門的數(shù)據(jù)分析處理編程語言Python為開發(fā)工具,綜合運用numpy、pandas、matplotlib等第三方庫,對用服裝非接觸式人體測量儀測得的頸根圍、胸圍、腰圍原數(shù)據(jù)進行清洗,去噪,以及可視化展示,最終得到高質(zhì)量可用數(shù)據(jù);并用成對樣本t檢驗評判非接觸式人體測量和傳統(tǒng)手測方法,結(jié)果差異性顯著。
關(guān)鍵詞:Python;數(shù)據(jù)分析;非接觸人體測量;成對樣本t檢驗
中圖分類號:TS941.17? ? ? ? ? ? ? ?文獻標(biāo)識碼:B? ? ? ? ? ? ? ? ?文章編號:1674-2346(2019)03-0031-06
人體測量是服裝工業(yè)化設(shè)計生產(chǎn)基礎(chǔ),它是服裝號型制定以及人體體型結(jié)構(gòu)設(shè)計、樣版制作等所需數(shù)據(jù)的來源和支撐。[1]傳統(tǒng)意義上的量體裁衣是測量人員借助軟尺工具對人體關(guān)鍵部位進行手工精確測量,這種手法一直延續(xù)至今。但是測量耗時長,人力物力浪費大,收集的數(shù)據(jù)量遠遠不能滿足大批量的工業(yè)生產(chǎn)。近幾年出現(xiàn)的非接觸式三維人體測量技術(shù)為服裝人體部位數(shù)據(jù)的獲取提供了很大的便利,通過定點掃描和計算機三維建模,可在半分鐘內(nèi)將人體各部位尺寸測量出來,測量效率可以達到工業(yè)所需數(shù)據(jù)量的要求。然而,當(dāng)測量的數(shù)據(jù)集過于龐大時,對于原始數(shù)據(jù)的篩選、處理和精準(zhǔn)性驗證成為企業(yè)一大問題。因此,合適的數(shù)據(jù)處理技術(shù)對高質(zhì)量的數(shù)據(jù)采集至關(guān)重要。
1? ? 數(shù)據(jù)分析技術(shù)簡介
Python是荷蘭計算機工程師Guido von Rossum在1989年發(fā)明的輕量級腳本語言。[2]它以優(yōu)雅簡明的編程風(fēng)格和豐富的第三方庫深受廣大程序員的喜愛,[3]并迅速發(fā)展成為僅次于C++和Java的編程語言。
Python在數(shù)據(jù)分析的層面上,有numpy、pandas、matplotlib等強大的第三方庫。numpy庫能夠提供向量、數(shù)組、矩陣等便于進行數(shù)據(jù)分析的數(shù)據(jù)結(jié)構(gòu);pandas構(gòu)造在numpy基礎(chǔ)之上,它包含了Series(序列)和DataFrame(數(shù)據(jù)框),提供數(shù)據(jù)結(jié)構(gòu)使得Python數(shù)據(jù)處理更加靈活、迅速;matplotlib是Python中基本的繪圖庫,它能將數(shù)據(jù)統(tǒng)計信息進行可視化展示,直觀的分析各變量之間關(guān)系。[4]
數(shù)據(jù)分析與挖掘技術(shù),就是從大量的、不完全的、有噪聲的、模糊的實際應(yīng)用數(shù)據(jù)中提取隱含的、潛在的信息。其中數(shù)據(jù)預(yù)處理階段就是對數(shù)據(jù)“清洗”、“去噪”,得到可用于分析研究的高質(zhì)量數(shù)據(jù)的過程。[5]
2? ? 實驗背景及驗證方法
2.1? ? 背景介紹
本次數(shù)據(jù)驗證分析實驗基于蘇州大學(xué)服裝工程人體測量實驗團隊通過非接觸式三維人體掃描儀(SizeStream)獲得的人體數(shù)據(jù)。為了獲得有效的、符合檔差范圍內(nèi)的數(shù)據(jù),我們需要對原始的數(shù)據(jù)用
Python進行預(yù)處理。原始數(shù)據(jù)集中涉及人體部位有28個左右,但由于非接觸式人體掃描儀和手工測量時要求被測者的站姿不同,可能造成多個測量部位的數(shù)據(jù)差異,而圍度數(shù)據(jù)受站姿的影響基本可以忽略,故此次數(shù)據(jù)分析實驗只處理頸根圍、胸圍、腰圍機測與手測數(shù)據(jù)300個。
2.2? ? 數(shù)據(jù)可用性驗證
數(shù)據(jù)驗證的過程遵循GB/T30548-2004三維測量儀獲取的服裝用人體數(shù)據(jù)驗證方法。[6]具體步驟如下:
1)機測數(shù)據(jù)可靠性驗證,|Amax-Amin|≤檔差,即可用來實驗分析;
2)手測數(shù)據(jù)可靠性驗證,|Bmax-Bmin|≤檔差,即可用來實驗分析;
3)機測數(shù)據(jù)均值可用性驗證,|Amean-Bmean|≤檔差,即數(shù)據(jù)測量準(zhǔn)確。
2.3? 測量方法成對樣本t檢驗
為了評判兩種方法對同一樣本測得數(shù)據(jù)的效果如何,將機測數(shù)據(jù)和手測數(shù)據(jù)進行成對樣本t檢驗。[7]
3? ? 數(shù)據(jù)處理分析
實驗測得數(shù)據(jù)在Anaconda3的Jupyter Notebook環(huán)境中進行分析。Jupyter Notebook通過瀏覽器遠程訪問方式進行Python交互式編程,支持運行40多種編程語言,并且便于創(chuàng)建和共享程序文檔,程序運行結(jié)果可視化效果佳。[8]
3.1? ? 數(shù)據(jù)導(dǎo)入
首先,導(dǎo)入數(shù)據(jù)分析處理三大庫:nump、pandas、matplotlib。數(shù)據(jù)導(dǎo)入之前轉(zhuǎn)為.csv文件格式,pandas的DataFrame格式并不能識別中文,故將表格中對應(yīng)的屬性改為英文或英文縮寫形式(measure times,neck base girth,chest girth,waist girth)。在各個部位英文后面加“1”如:chest girth 1,代表機測數(shù)據(jù);加“2”如:chest girt 2代表手測數(shù)據(jù)。用“.head()”函數(shù)展示數(shù)據(jù)表前5行,如表1所示。
3.2? ? 原數(shù)據(jù)預(yù)處理
原始數(shù)據(jù)是300€?,共100個樣本,每個樣本3組數(shù)據(jù)。需先將數(shù)據(jù)進行分組操作,再對分組后每個樣本求均值、極值。用“.set_index()”函數(shù)將ID和measure times組成復(fù)合索引,將每個樣本3組數(shù)據(jù)歸為1組,部分?jǐn)?shù)據(jù)展示如表2。
3.2.1? ? 數(shù)據(jù)可靠性驗證
對表2中的每組數(shù)據(jù)求極差的絕對值,并將不在檔差范圍值賦為空值(NaN),等待剔除。核心代碼如下:
#求每個樣本三組數(shù)據(jù)間的極差絕對值,并修改列名
data_Range = abs(data.max(level=0) - data.min(level=0))
data_Range.columns = ['nbg1R', 'cg1R', 'wg1R', 'nbg2R', 'cg2R', 'wg2R']
#遍歷數(shù)組極差絕對值,將不符合條件的值賦空值
for index, row in data_Range.iterrows():
if row['nbg1R']? > 2:
row['nbg1R'] = None
elif row['nbg2R'] > 2:
row['nbg2R'] = None
elif row['cg1R'] > 4:
row['cg1R'] = None
elif row['cg2R'] > 4:
row['cg2R'] = None
elif row['wg1R'] > 4:
row['wg1R'] = None
elif row['wg2R'] > 4:
row['wg2R'] = None
else:
continue
3.2.2? ? 數(shù)據(jù)均值可用性驗證
將分組后數(shù)據(jù)每組求均值,并賦新列名。由于每個樣本數(shù)據(jù)由兩種測量方法測得,如若兩種方法測得的同一部位值相差過大則為視為異常值。設(shè)定將每個部位由兩種方法測得的均值極差值大于5的異常點賦空值(NaN)。
將數(shù)據(jù)集中含有空值(NaN)的列用“.dropna()”函數(shù)剔除。得到“清潔”、“干凈”的數(shù)據(jù)集,合并數(shù)據(jù)均值表和極差表,最終得到可供實驗分析的數(shù)據(jù)表4,數(shù)據(jù)維度變?yōu)椋?7€?6)。上述步驟核心代碼如下:
data_mean = data.mean(level='ID')
data_mean.columns =['nbg1M', 'cg1M', 'wg1M', 'nbg2M', 'cg2M', 'wg2M']
data_mean['nbgMr'] = abs(data_mean['nbg1M'] - data_mean['nbg2M'])
data_mean['cgMr'] = abs(data_mean['cg1M'] - data_mean['cg2M'])
data_mean['wgMr'] = abs(data_mean['wg1M'] - data_mean['wg2M'])
#選出均值大于5的數(shù)值
def function(a):
if a > 5:
return np.NaN
else:
return a
data_mean['nbgMr'] = data_mean.apply(lambda x: function(x.nbgMr), axis=1)
data_mean['cgMr'] = data_mean.apply(lambda x: function(x.cgMr), axis=1)
data_mean['wgMr'] = data_mean.apply(lambda x: function(x.wgMr), axis=1)
#得可用數(shù)據(jù)集,并保留小數(shù)點后1位
new_data = pd.concat([data_mean, data_Range],axis=1)
new_data = new_data.round(1)
avavilable_data = new_data.dropna(axis=0)
3.3? ? ?多個變量之間相關(guān)性分析
seaborn庫是在matplotlib繪圖庫的一個延伸,對于多個變量之間關(guān)系的展示,seaborn優(yōu)于matplotlib。通過seaborn庫中“.pairplot()”函數(shù),繪出3個部位機測數(shù)據(jù)和手測數(shù)據(jù)之間的散點圖(圖1)。
觀察散點圖1可發(fā)現(xiàn),兩種方法測得的數(shù)據(jù),胸圍和腰圍的數(shù)據(jù)集中性高,與頸根圍相比,這兩個部位彼此之間相關(guān)性更強。頸根圍與其他變量之間數(shù)據(jù)離散程度較大,這也可能與各個圍度數(shù)據(jù)間的差值大小有關(guān)。從圖1初步推斷,用非接觸式測量儀測得的人體數(shù)據(jù)與傳統(tǒng)手工測量數(shù)據(jù)之間存在差異性。
3.4? ? 成對樣本t檢驗結(jié)果
盒形圖2給出了單個變量數(shù)據(jù)之間的分布。從盒中可以看出,頸根圍整體數(shù)據(jù)間離散程度小,受體型影響相對較小;胸圍和腰圍數(shù)據(jù)離散程度大,這可能與樣本處在不同身高檔差范圍有關(guān)。并且,圖中3個部位對應(yīng)機測、手測最大值和最小值及中位數(shù)的分布都有明顯差異。
為了定量的驗證這種直觀結(jié)論,從scipy庫中引入統(tǒng)計分析函數(shù)stats,做成對樣本t檢驗,判斷非接觸式測量和傳統(tǒng)手工測量方法的差異性。核心代碼如下:
from scipy import stats
#頸根圍
stats.ttest_rel(new_nbg_mean['nbg1M'],new_nbg_mean['nbg2M'])
#胸圍
stats.ttest_rel(new_cg_mean['cg1M'],new_cg_mean['cg2M'])
#腰圍
stats.ttest_rel(new_wg_mean['wg1M'],new_wg_mean['wg2M'])
t檢驗(雙側(cè))結(jié)果如表5。
由表5中成對樣本t檢驗結(jié)果得出:頸根圍、胸圍、臀圍的P/2(單側(cè))值均小于0.05,故拒絕原假設(shè)H0,即認(rèn)為這3個部位用非接觸式測量儀和傳統(tǒng)手工方法測得的數(shù)據(jù)均值差異性顯著。
綜上,本文從應(yīng)用的視角出發(fā)詮釋了Python在數(shù)據(jù)分析與挖掘領(lǐng)域的內(nèi)涵。通過處理服裝行業(yè)人體測量數(shù)據(jù),實現(xiàn)了大數(shù)據(jù)時代背景下服裝用非接觸式人體數(shù)據(jù)可用性的分析。然而,當(dāng)面對龐大數(shù)據(jù)量時,對有“噪”的臟數(shù)據(jù)的預(yù)處理遠不止這些。可對缺失值數(shù)據(jù)填充、修改、異常值剔除;可對數(shù)據(jù)做探索性數(shù)據(jù)分析,可對數(shù)據(jù)進行更多的可視化展示等。本文的例子只是大數(shù)據(jù)應(yīng)用的冰山一角,數(shù)據(jù)分析與挖掘的熱度正在上升。作為數(shù)據(jù)分析者,須理解和熟悉數(shù)據(jù)挖掘原理與技術(shù),綜合利用編程語言技能,利于自己工作,服務(wù)于行業(yè)。
參考文獻
[1]陳益松,夏明. 光學(xué)三角測量法及其在人體測量中的應(yīng)用[J].紡織學(xué)報,2012,33(12):95-101.
[2]李俊華.基于Python的數(shù)據(jù)分析[J].電子技術(shù)與軟件工程,2018(17):167.
[3]王海濤,齊達.基于Python下的數(shù)據(jù)采集和分析在融媒體中的作用[J].電聲技術(shù),2018,42(06):63-64+67.
[4]阮敬. Python數(shù)據(jù)分析基礎(chǔ)[M].北京:中國統(tǒng)計出版社,2017.
[5]呂曉玲,謝邦昌.數(shù)據(jù)挖掘方法與應(yīng)用[M].北京:中國人民大學(xué)出版社,2008.
[6]GB/T 30548-2014.服裝用人體數(shù)據(jù)驗證方法用三維測量儀獲取的數(shù)據(jù)[S].北京:中國標(biāo)準(zhǔn)出版社,2014.
[7]汪潔.t-檢驗成對二樣本分析法在船舶定線制中的應(yīng)用[J].中國水運(下半月),2010,10(06):8,37.
[8]薛煜陽.Jupyter Notebook在Python教學(xué)中的應(yīng)用探索[J].信息技術(shù)與信息化,2018(07):168-169.