Python程序設(shè)計(jì)教程(工作手冊式) 教案 王瑤 情景七 Python與電子商務(wù)教案_第1頁
Python程序設(shè)計(jì)教程(工作手冊式) 教案 王瑤 情景七 Python與電子商務(wù)教案_第2頁
Python程序設(shè)計(jì)教程(工作手冊式) 教案 王瑤 情景七 Python與電子商務(wù)教案_第3頁
Python程序設(shè)計(jì)教程(工作手冊式) 教案 王瑤 情景七 Python與電子商務(wù)教案_第4頁
Python程序設(shè)計(jì)教程(工作手冊式) 教案 王瑤 情景七 Python與電子商務(wù)教案_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Python程序設(shè)計(jì)工作手冊式教材教案專業(yè)名稱:課程名稱:Python程序設(shè)計(jì)任課班級:教師姓名:所屬院系:職稱:課時(shí):64使用教材:

情景一獲取電子商務(wù)數(shù)據(jù)教學(xué)課題電子商務(wù)爬蟲基礎(chǔ)序號1課時(shí)2教學(xué)手段多媒體、板書、實(shí)訓(xùn)室教學(xué)方法講授法、演示法、案例法教學(xué)課型□理論□實(shí)訓(xùn)√一體化□(其它)教學(xué)目標(biāo)能力目標(biāo):了解urllib、Requests后,抓取一個(gè)靜態(tài)網(wǎng)頁并保存。知識目標(biāo):認(rèn)識網(wǎng)絡(luò)爬蟲、了解基于urllib庫的網(wǎng)絡(luò)爬蟲和應(yīng)用范圍。素質(zhì)目標(biāo):接受新知識、自主學(xué)習(xí)的能力。教學(xué)重點(diǎn)urllib模塊教學(xué)難點(diǎn)request的構(gòu)造方法教學(xué)過程設(shè)計(jì)備注一、電子商務(wù)數(shù)據(jù)獲取方法概述介紹數(shù)據(jù)相關(guān)知識;介紹電子商務(wù)爬蟲的作用;介紹爬蟲框架以及爬蟲的限制等。二、教學(xué)內(nèi)容(一)爬蟲的流程爬蟲就是一個(gè)獲取網(wǎng)頁的自動化程序。1.獲取網(wǎng)頁爬蟲首先要做的工作就是獲取網(wǎng)頁,這里就是獲取網(wǎng)頁的源代碼。源代碼里包含了網(wǎng)頁的部分有用信息,所以只要把源代碼獲取下來,就可以從中提取想要的信息了。2.提取信息獲取網(wǎng)頁的源代碼后,接下來就是分析網(wǎng)頁的源代碼,從中提取我們想要的數(shù)據(jù)。首先,最通用的方法便是采用正則表達(dá)式提取,這是一個(gè)萬能的方法,但是在構(gòu)造正則表達(dá)式時(shí)比較復(fù)雜且容易出錯。3.保存數(shù)據(jù)提取信息后,我們一般會將提取到的數(shù)據(jù)保存到某處以便后續(xù)使用。這里保存形式有多種多樣,如可以簡單保存為TXT文本或JSON文本,也可以保存到數(shù)據(jù)庫,如MySQL和MongoDB等,還可保存至遠(yuǎn)程服務(wù)器,如借助SFTP進(jìn)行操作等。4.自動化程序說到自動化程序,意思是說爬蟲可以代替人來完成這些操作。(二)能爬怎樣的數(shù)據(jù)在網(wǎng)頁中都有各自的URL,是基于HTTP或HTTPS協(xié)議的,只要是這種數(shù)據(jù),爬蟲都可以抓取。1.urllib模塊Pythonurllib庫用于操作網(wǎng)頁URL,并對網(wǎng)頁的內(nèi)容進(jìn)行抓取處理。urllib庫的基本模塊如圖7-1所示。圖7-1urllib庫模塊urllib每個(gè)模塊的基本功能如表7-1所示。表7-1urllib模塊功能序號方法功能1urllib.request打開和讀取URL2urllib.error包含urllib.request拋出的異常3urllib.parse解析URL4urllib.robotparser解析robots.txt文件(1)發(fā)送請求使用urllib的request模塊,可以方便地實(shí)現(xiàn)請求的發(fā)送并得到響應(yīng)。urlopenurllib.request模塊提供了最基本的構(gòu)造HTTP請求的方法。格式:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)參數(shù)說明data參數(shù)是可選的。如果要添加該參數(shù),需要使用

bytes

方法將參數(shù)轉(zhuǎn)化為字節(jié)流編碼格式的內(nèi)容,即

bytes

類型。另外,如果傳遞了這個(gè)參數(shù),則它的請求方式就不再是GET方式,而是POST方式?!緦?shí)例】讀取重慶城市職業(yè)學(xué)院主頁html源碼fromurllib.requestimporturlopenmyURL=urlopen("/")print(myURL.read().decode('utf-8'))運(yùn)行結(jié)果如圖7-2所示。圖7-2讀取主頁html源碼的運(yùn)行結(jié)果每次調(diào)用urllib.requests請求方法之后,會返回一個(gè)response對象,該對象包含了具體的響應(yīng)信息如表7-2所示。表7-2響應(yīng)信息屬性或方法說明apparent_encoding編碼方式close()關(guān)閉與服務(wù)器的連接content返回響應(yīng)的內(nèi)容,以字節(jié)為單位cookies返回一個(gè)CookieJar對象,包含了從服務(wù)器發(fā)回的cookieelapsed返回一個(gè)timedelta對象,包含了從發(fā)送請求到響應(yīng)到達(dá)之間經(jīng)過的時(shí)間量,可以用于測試響應(yīng)速度。比如r.elapsed.microseconds表示響應(yīng)到達(dá)需要多少微秒。encoding解碼r.text的編碼方式headers返回響應(yīng)頭,字典格式history返回包含請求歷史的響應(yīng)對象列表(url)is_permanent_redirect如果響應(yīng)是永久重定向的url,則返回True,否則返回Falseis_redirect如果響應(yīng)被重定向,則返回True,否則返回Falseiter_content()迭代響應(yīng)iter_lines()迭代響應(yīng)的行json()返回結(jié)果的JSON對象(結(jié)果需要以JSON格式編寫的,否則會引發(fā)錯誤)links返回響應(yīng)的解析頭鏈接next返回重定向鏈中下一個(gè)請求的PreparedRequest對象ok檢查"status_code"的值,如果小于400,則返回True,如果不小于400,則返回Falseraise_for_status()如果發(fā)生錯誤,方法返回一個(gè)HTTPError對象reason響應(yīng)狀態(tài)的描述,比如"NotFound"或"OK"request返回請求此響應(yīng)的請求對象status_code返回http的狀態(tài)碼,比如404和200(200是OK,404是NotFound)text返回響應(yīng)的內(nèi)容,unicode類型數(shù)據(jù)url返回響應(yīng)的URLRequest利用

urlopen

方法可以實(shí)現(xiàn)最基本請求的發(fā)起,但這幾個(gè)簡單的參數(shù)并不足以構(gòu)建一個(gè)完整的請求。更多說明參考官方文檔/3/library/urllib.request.html。Request常見方法如表7-3所示。表7-3Request常見方法方法描述delete(url,

args)發(fā)送DELETE請求到指定urlget(url,

params,args)發(fā)送GET請求到指定urlhead(url,

args)發(fā)送HEAD請求到指定urlpatch(url,

data,args)發(fā)送PATCH請求到指定urlpost(url,

data,json,args)發(fā)送POST請求到指定urlput(url,

data,args)發(fā)送PUT請求到指定urlrequest(method,

url,

args)向指定的url發(fā)送指定的請求方法【實(shí)例】使用request讀取重慶城市職業(yè)學(xué)院主頁html代碼importurllib.requestrequest=urllib.request.Request('/')response=urllib.request.urlopen(request)print(response.read().decode('utf-8'))Request的構(gòu)造方法如下:classurllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)第一個(gè)參數(shù)

url

用于請求URL,這是必傳參數(shù),其他都是可選參數(shù)。第二個(gè)參數(shù)

data

如果要傳,必須傳

bytes(字節(jié)流)類型的。如果它是字典,可以先用

urllib.parse

模塊里的

urlencode()

編碼。第三個(gè)參數(shù)

headers

是一個(gè)字典,它就是請求頭。我們在構(gòu)造請求時(shí),既可以通過

headers

參數(shù)直接構(gòu)造,也可以通過調(diào)用請求實(shí)例的

add_header()

方法添加。添加請求頭最常用的方法就是通過修改

User-Agent

來偽裝瀏覽器。默認(rèn)的

User-Agent

Python-urllib,可以通過修改它來偽裝瀏覽器。第四個(gè)參數(shù)

origin_req_host

指的是請求方的host名稱或者IP地址。第五個(gè)參數(shù)

unverifiable

表示這個(gè)請求是否是無法驗(yàn)證的,默認(rèn)是

False,表示用戶沒有足夠權(quán)限來選擇接收這個(gè)請求的結(jié)果。第六個(gè)參數(shù)

method

是一個(gè)字符串,用來指示請求使用的方法,比如GET、POST和PUT等?!緦?shí)例】利用測試網(wǎng)站檢測post方法fromurllibimportrequest,parseurl='/post'headers={'User-Agent':'Mozilla/4.0(compatible;MSIE5.5;WindowsNT)','Host':''}dict={'name':'germey'}data=bytes(parse.urlencode(dict),encoding='utf-8')req=request.Request(url=url,data=data,headers=headers,method='POST')response=request.urlopen(req)print(response.read().decode('utf-8'))(2)處理異常urllib的error模塊定義了由request模塊產(chǎn)生的異常。如果出現(xiàn)了問題,request模塊便會拋出error模塊中定義的異常。URLErrorURLError

類來自urllib庫的error模塊,它繼承自

OSError

類,是error異常模塊的基類,由request模塊產(chǎn)生的異常都可以通過捕獲這個(gè)類來處理。它具有一個(gè)屬性

reason,即返回錯誤的原因?!緦?shí)例】用測試網(wǎng)站捕獲異常importsocketimporturllib.requestimporturllib.errortry:response=urllib.request.urlopen('/get',timeout=0.1)excepturllib.error.URLErrorase:ifisinstance(e.reason,socket.timeout):print('TIMEOUT')(3)解析鏈接urllib.parse模塊,它定義了處理URL的標(biāo)準(zhǔn)接口。urlparse該方法可以實(shí)現(xiàn)URL的識別和分段。fromurllib.parseimporturlparseresult=urlparse('/index.html;user?id=5#comment')print(type(result))print(result)urlparse

方法拆分成了6個(gè)部分。大體觀察可以發(fā)現(xiàn),解析時(shí)有特定的分隔符。比如,://

前面的就是

scheme,代表協(xié)議;第一個(gè)

/

符號前面便是

netloc,即域名,后面是

path,即訪問路徑;分號

;

后面是

params,代表參數(shù);問號

?

后面是查詢條件

query,一般用作GET類型的URL;井號

#

后面是錨點(diǎn),用于直接定位頁面內(nèi)部的下拉位置。urlunparse有了

urlparse

方法,相應(yīng)地就有了它的對立方法

urlunparse。它接收的參數(shù)是一個(gè)可迭代對象,但是它的長度必須是6,否則會拋出參數(shù)數(shù)量不足或者過多的問題。fromurllib.parseimporturlunparsedata=['https','','index.html','user','a=6','comment']print(urlunparse(data))運(yùn)行結(jié)果如下:/index.html;user?a=6#comment這樣我們就成功實(shí)現(xiàn)了URL的構(gòu)造。urlsplit這個(gè)方法和

urlparse

方法非常相似,只不過它不再單獨(dú)解析

params

這一部分,只返回5個(gè)結(jié)果。urlunsplit與

urlunparse

方法類似,它也是將鏈接各個(gè)部分組合成完整鏈接的方法,傳入的參數(shù)也是一個(gè)可迭代對象,例如列表、元組等,唯一的區(qū)別是長度必須為5。urljoin有了

urlunparse

urlunsplit

方法,我們可以完成鏈接的合并,不過前提是必須要有特定長度的對象,鏈接的每一部分都要清晰分開。urlencode它在構(gòu)造GET請求參數(shù)的時(shí)候非常有用。fromurllib.parseimporturlencodeparams={'name':'germey','age':25}base_url='?'url=base_url+urlencode(params)print(url)這里首先聲明一個(gè)字典來將參數(shù)表示出來,然后調(diào)用

urlencode

方法將其序列化為GET請求參數(shù)。運(yùn)行結(jié)果如下:?name=germey&age=25有時(shí)為了更加方便地構(gòu)造參數(shù),我們會事先用字典來表示。要轉(zhuǎn)化為URL的參數(shù)時(shí),只需要調(diào)用該方法即可。parse_qs有了序列化,必然就有反序列化。如果我們有一串GET請求參數(shù),利用

parse_qs

方法,就可以將它轉(zhuǎn)回字典。fromurllib.parseimportparse_qsquery='name=germey&age=25'print(parse_qs(query))parse_qsl另外,還有一個(gè)

parse_qsl

方法,它用于將參數(shù)轉(zhuǎn)化為元組組成的列表。fromurllib.parseimportparse_qslquery='name=germey&age=25'print(parse_qsl(query))quote該方法可以將內(nèi)容轉(zhuǎn)化為URL編碼的格式。URL中帶有中文參數(shù)時(shí),有時(shí)可能會導(dǎo)致亂碼的問題,此時(shí)可以用這個(gè)方法可以將中文字符轉(zhuǎn)化為URL編碼。fromurllib.parseimportquotekeyword='壁紙'url='/s?wd='+quote(keyword)print(url)unquote有了

quote

方法,當(dāng)然還有

unquote

方法,它可以進(jìn)行URL解碼。fromurllib.parseimportunquoteurl='/s?wd=%E5%A3%81%E7%BA%B8'print(unquote(url))(4)分析Robots協(xié)議Robots協(xié)議也稱作爬蟲協(xié)議、機(jī)器人協(xié)議,它的全名叫作網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)(RobotsExclusionProtocol),用來告訴爬蟲和搜索引擎哪些頁面可以抓取,哪些不可以抓取。它通常是一個(gè)叫作robots.txt的文本文件,一般放在網(wǎng)站的根目錄下。一個(gè)robots.txt的樣例:User-agent:*Disallow:/Allow:/public/這實(shí)現(xiàn)了對所有搜索爬蟲只允許爬取public目錄的功能,將上述內(nèi)容保存成robots.txt文件,放在網(wǎng)站的根目錄下,和網(wǎng)站的入口文件放在一起。User-agent

描述了搜索爬蟲的名稱,將其設(shè)置為

*

則代表該協(xié)議對任何爬取爬蟲有效;Disallow

指定了不允許抓取的目錄;Allow

一般和

Disallow

一起使用,一般不會單獨(dú)使用,用來排除某些限制。三、總結(jié)通過本次任務(wù)的學(xué)習(xí)和實(shí)踐,我們了解了Python電子商務(wù)爬蟲的基本模塊,能夠使用標(biāo)準(zhǔn)的urllib庫,爬取學(xué)校的官方網(wǎng)站。同時(shí)建議大家樹立爬取與反爬取的意識,遵守爬蟲協(xié)議,在實(shí)際工作中,盡量少用多線程爬蟲。作業(yè)布置使用urllib庫,爬取網(wǎng)頁教學(xué)反思教師總結(jié)本次課的知識點(diǎn),重點(diǎn)強(qiáng)調(diào)爬蟲的優(yōu)點(diǎn)和應(yīng)用領(lǐng)域,突出Python爬蟲在數(shù)據(jù)采集中的重要性和應(yīng)用性,從而提高同學(xué)們的學(xué)習(xí)興趣。結(jié)合教學(xué)重點(diǎn)和難點(diǎn),對所學(xué)知識進(jìn)一步強(qiáng)化。情景一獲取電子商務(wù)數(shù)據(jù)主題爬取京東商城“筆記本電腦”數(shù)據(jù)序號2課時(shí)2教學(xué)手段多媒體、板書、實(shí)訓(xùn)室教學(xué)方法講授法、演示法、案例法教學(xué)課型□理論□實(shí)訓(xùn)√一體化□(其它)教學(xué)目標(biāo)能力目標(biāo):會分析網(wǎng)頁結(jié)構(gòu),能夠在PyCharm集成開發(fā)環(huán)境中,編寫程序?qū)崿F(xiàn)京東商城數(shù)據(jù)爬取。知識目標(biāo):了解并會安裝python爬蟲庫;安裝excel庫;運(yùn)行Python爬蟲程序。素質(zhì)目標(biāo):接受新知識、自主學(xué)習(xí)的能力。教學(xué)重點(diǎn)網(wǎng)頁結(jié)構(gòu)分析,瀏覽器F12功能教學(xué)難點(diǎn)頁面標(biāo)簽分析教學(xué)過程設(shè)計(jì)備注一、復(fù)習(xí)上一節(jié)上課內(nèi)容并引出本節(jié)上課內(nèi)容urllib庫的基本內(nèi)容,網(wǎng)頁的解析,簡單爬取網(wǎng)頁的方法。本次課我們一起來學(xué)習(xí)讓Python幫我們收集我們感興趣的數(shù)據(jù)。二、教學(xué)內(nèi)容(一)安裝爬蟲庫1.安裝爬蟲庫PipinstallrequestsPipinstallselectorsPipinstalllxml2.安裝excel文件庫Pipinstallopenpyxl(二)分析網(wǎng)頁結(jié)構(gòu)1.查看網(wǎng)頁在googlechrome瀏覽器中輸入:。再在京東商城提供的搜索框輸入:筆記本,顯示結(jié)果如圖7-3所示。圖7-3京東搜索頁面在圖7-3所示中,筆記本電腦的品牌很多,為了更進(jìn)一步獲取數(shù)據(jù),把品牌點(diǎn)擊為聯(lián)想。最后簡化的界面如圖7-4所示。圖7-4品牌為聯(lián)想的筆記本電腦把這個(gè)頁面的鏈接取出/search?keyword=筆記本&suggest=1.his.0.0&wq=筆記本&ev=exbrand_聯(lián)想(lenovo)%5E注意地址是分2次復(fù)制后手工拼接而成。2.分析網(wǎng)頁標(biāo)簽在瀏覽器里面按F12,分析網(wǎng)頁標(biāo)簽。如圖7-5所示,可以看到商品數(shù)據(jù)對應(yīng)的網(wǎng)頁標(biāo)簽。圖7-5商品與對應(yīng)的標(biāo)簽通過圖7-5,可以看到在class標(biāo)簽id=J_goodsList里ul標(biāo)簽下的li標(biāo)簽,對應(yīng)著所有商品列表。如p-price對應(yīng)價(jià)格;p-name對應(yīng)商品標(biāo)題;p-commit對應(yīng)評價(jià)。3.爬取數(shù)據(jù)importrequestsimportselectorsfromlxmlimportetreeurl=/search?keyword=筆記本&wq=筆記本&ev=exbrand_聯(lián)想%5E&page=9&s=241&click=1headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'}res=requests.get(url,headers=headers)res.encoding='utf-8'text=res.textselector=etree.HTML(text)list=selector.xpath('//*[@id="J_goodsList"]/ul/li')foriinlist:title=i.xpath('.//div[@class="p-namep-name-type-2"]/a/em/text()')[0]price=i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]product_id=i.xpath('.//div[@class="p-commit"]/strong/a/@id')[0].replace("J_comment_","")print("title"+str(title))

print("price="+str(price))

print("product_id="+str(product_id))print("")程序運(yùn)行后的結(jié)果如圖7-6所示。圖7-6獲取商品數(shù)據(jù)4.獲取評論數(shù)據(jù)在網(wǎng)頁中,商品的評論數(shù)據(jù)無法直接捕獲,要通過分析網(wǎng)頁的URL。在F12對應(yīng)的界面中,轉(zhuǎn)到network頁,找到以“productCommentSummaries.action”開頭的項(xiàng)目,如圖7-7所示。在圖7-7中,把對應(yīng)的URL地址取出并放到瀏覽器中執(zhí)行,得到的頁面就是所有商品ID以及對應(yīng)的評論數(shù)據(jù),如圖7-8所示。圖7-7productCommentSummaries.action圖7-8商品評論數(shù)據(jù)在圖7-8所示的界面中,可以把url地址中的refernceIds=后的IP只保留1個(gè),把地址修改為以下形式:/comment/productCommentSummaries.action?referenceIds=10060141190483&callback=jQuery5358031&_=1667631915528在取不同商品的評論數(shù)據(jù)時(shí),把商品的ID進(jìn)行更換即可。Callback后的數(shù)據(jù)會根據(jù)情況不同有所變化,利用函數(shù)來完成要改成實(shí)際值。defcommentcount(product_id):url1=“/comment/productCommentSummaries.action?referenceIds=”+str(rpoduct_id)+”&callback=jQuery5358031&_=1667631915528”res1=requests.get(url1,headers=headers)res1.encoding='gbk'text1=(res1.text).replace("jQuery5358031(","").replace(");","")text1=json.loads(text1)comment_count=text1['CommentsCount'][0]['CommentCountStr']comment_count=comment_count.replace("+","")if"萬"incomment_count:comment_count=comment_count.replace("萬","")comment_count=str(int(comment_count)*10000)returncomment_countforiinlist:title=i.xpath('.//div[@class="p-namep-name-type-2"]/a/em/text()')[0]price=i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]product_id=i.xpath('.//div[@class="p-commit"]/strong/a/@id')[0].replace("J_comment_","")comment_count=commentcount(product_id)print("title"+str(title))print("price="+str(price))print("comment_count="+str(comment_count))程序運(yùn)行結(jié)果如圖7-9所示。圖7-9獲取評論數(shù)5.保存到excelimportopenpyxloutwb=openpyxl.Workbook()outws=outwb.create_sheet(index=0)outws.cell(row=1,column=1,value="index")outws.cell(row=1,column=2,value="title")outws.cell(row=1,column=3,value="price")outws.cell(row=1,column=4,value="CommentCount")count=2foriinlist:title=i.xpath('.//div[@class="p-namep-name-type-2"]/a/em/text()')[0]price=i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]product_id=i.xpath('.//div[@class="p-commit"]/strong/a/@id')[0].replace("J_comment_","")comment_count=commentcount(product_id)print("title"+str(title))print("price="+str(price))print("comment_count="+str(comment_count))outws.cell(row=count,column=1,value=str(count-1))outws.cell(row=count,column=2,value=str(title))outws.cell(row=count,column=3,value=str(price))outws.cell(row=count,column=4,value=str(comment_count))count+=1outwb.save("jdgood.xls")三、總結(jié)通過本次任務(wù)的學(xué)習(xí)和實(shí)踐,掌握了電子商務(wù)網(wǎng)站數(shù)據(jù)的爬取。并且能夠熟練使用瀏覽器的F12功能,對網(wǎng)頁進(jìn)行跟蹤。同時(shí)了解了數(shù)據(jù)的重要性,能夠?qū)?shù)據(jù)進(jìn)行保存。在實(shí)際操作過程中,了解了團(tuán)隊(duì)合作在整個(gè)數(shù)據(jù)采集中的作用。作業(yè)布置爬取京東商城“手機(jī)”的相關(guān)數(shù)據(jù)。教學(xué)反思教師指出學(xué)生實(shí)踐中可能出錯和已經(jīng)出錯的地方,結(jié)合教學(xué)重點(diǎn)和難點(diǎn),對所學(xué)知識進(jìn)一步強(qiáng)化。情景二電子商務(wù)數(shù)據(jù)分析主題商務(wù)數(shù)據(jù)分析基礎(chǔ)序號3課時(shí)2教學(xué)手段多媒體、板書、實(shí)訓(xùn)室教學(xué)方法講授法、演示法、案例法教學(xué)課型□理論□實(shí)訓(xùn)√一體化□(其它)教學(xué)目標(biāo)能力目標(biāo):掌握商務(wù)數(shù)據(jù)分析的方法。知識目標(biāo):了解數(shù)據(jù)清洗的過程,了解常用的分析算法素質(zhì)目標(biāo):接受新知識、自主學(xué)習(xí)的能力。教學(xué)重點(diǎn)數(shù)據(jù)清洗教學(xué)難點(diǎn)數(shù)據(jù)分析算法算法教學(xué)過程設(shè)計(jì)備注一、引導(dǎo)本節(jié)上課內(nèi)容對電商運(yùn)營數(shù)據(jù)進(jìn)行分析,發(fā)現(xiàn)問題,了解運(yùn)營狀況,對未來發(fā)展趨勢進(jìn)行預(yù)測。二、教學(xué)內(nèi)容(一)數(shù)據(jù)預(yù)處理1.數(shù)據(jù)清洗數(shù)據(jù)清洗就是把“臟”的“洗掉”,指發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識別的錯誤的最后一道程序,包括檢查數(shù)據(jù)一致性,處理無效值和缺失值等。缺失值處理檢測與處理缺失值。使用describe()查看數(shù)據(jù)后缺失情況。使用pandas的isnull()、notnull()進(jìn)行檢測與判斷。使用dropna()刪除缺失值,fillna(mean()|median()|mode())對缺失值進(jìn)行插補(bǔ)。(1)讀取數(shù)據(jù)并查看缺失比例,如圖7-10所示。圖7-10讀取數(shù)據(jù)并查看缺失比例(2)空值處理方式,如圖7-11、7-12、7-13、7-14、7-15所示。圖7-11空值處理方式之直接刪除圖7-12空值處理方式之刪除空值列圖7-13空值處理方式之判斷空值圖7-14空值處理方式之缺失值使用固定值填充圖7-15空值處理方式之用眾數(shù)填充異常值處理異常值指那些偏離正常范圍的值,不是錯誤值。一般使用箱線圖進(jìn)行處理,如圖7-16所示。圖7-16異常值處理(1)讀取并轉(zhuǎn)換數(shù)據(jù),如圖7-17所示。圖7-17讀取并轉(zhuǎn)換數(shù)據(jù)(2)定義箱線圖上下限,如圖7-18所示。圖7-18定義箱線圖上下限(3)畫出箱線圖,如圖7-19所示。圖7-19畫出箱線圖(4)對照查看分布,如圖7-20所示。圖7-20對照查看分布重復(fù)值處理一般使用drop_duplicates()方法。注意以下情況不建議去重。(1)重復(fù)的記錄用于分析事物的演變規(guī)律。(2)重復(fù)的記錄用于樣本不均衡處理。(3)重復(fù)的記錄用于檢測業(yè)務(wù)規(guī)則問題。(1)讀取數(shù)據(jù)并顯示表頭,如圖7-21所示。importnumpyasnpimportpandasaspddata=pd.read_csv(r'MotorcycleData.csv',encoding='gbk',na_values='Na')data.head(2)圖7-21讀取數(shù)據(jù)并顯示表頭(2)轉(zhuǎn)換數(shù)據(jù)類型,如圖7-22所示。#自定義函數(shù)用于把價(jià)格字段轉(zhuǎn)換為floatdefstrtofloat(x):if'$'instr(x):x=str(x).strip('$')x=str(x).replace(',','')else:x=str(x).replace(',','')returnfloat(x)data['Mileage']=data['Mileage'].apply(strtofloat)data['Price']=data['Price'].apply(strtofloat)圖7-22轉(zhuǎn)換數(shù)據(jù)類型(3)查看是否有重復(fù)值,如圖7-23所示。data.duplicated()print("是否有重復(fù)值:\n",any(data.duplicated()))圖7-23查看是否有重復(fù)值(4)刪除重復(fù)值,如圖7-24所示。data=data.drop_duplicates()#刪除重復(fù)值print("是否有重復(fù)值:\n",any(data.duplicated()))#再次查看是否有重復(fù)值圖7-24刪除重復(fù)值(二)數(shù)據(jù)標(biāo)準(zhǔn)化離差標(biāo)準(zhǔn)化離差標(biāo)準(zhǔn)化也叫Min-Max規(guī)范化,離差是最大值和最小值的差,用于消除大單位和小單位的影響(消除量綱)變異大小的差異影響;Min-Max規(guī)范化是將原始數(shù)據(jù)變換到[0,1]的空間中。公式:X1=(X-min)/(max-min);X當(dāng)前的數(shù)據(jù);(1)讀取數(shù)據(jù)importnumpyasnpimportpandasaspddata=pd.read_csv(r'MotorcycleData.csv',encoding='gbk',na_values='Na')(2)定義離差標(biāo)準(zhǔn)化函數(shù),如圖7-25所示。defstrtofloat(x):if'$'instr(x):x=str(x).strip('$')x=str(x).replace(',','')else:x=str(x).replace(',','')returnfloat(x)data['Mileage']=data['Mileage'].apply(strtofloat)data['Price']=data['Price'].apply(strtofloat)defminmaxscale(Data):Data=(Data-Data.min())/(Data.max()-Data.min())returnData圖7-25定義離差標(biāo)準(zhǔn)化函數(shù)(3)對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化,如圖7-26所示。data1=minmaxscale(data['Mileage'])data2=minmaxscale(data

['Price'])data3=pd.concat([data1,data2],axis=1)print('離差標(biāo)準(zhǔn)化之前里程和單價(jià)數(shù)據(jù)為:\n',

data[['Mileage','Price']].head())print('離差標(biāo)準(zhǔn)化之后里程和單價(jià)數(shù)據(jù)為:\n',data3.head())圖7-26對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化(4)調(diào)用機(jī)器學(xué)習(xí)庫進(jìn)行標(biāo)準(zhǔn)化,如圖7-27所示。fromsklearnimportpreprocessingpreprocessing.minmax_scale(data['Price'])圖7-27調(diào)用機(jī)器學(xué)習(xí)庫進(jìn)行標(biāo)準(zhǔn)化標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化也叫Z-score規(guī)范化,用于消除單位影響及自身變量的差異。假設(shè)A與B的考試成績都為80分,A的考卷滿分是100分(及格60分),B的考卷滿分是500分(及格300分)。雖然兩個(gè)人都考了80分,但是A的80分與B的80分代表完全不同的含義。公式:X1=(X-平均數(shù))/標(biāo)準(zhǔn)差(std)(零-均值標(biāo)準(zhǔn)化)(1)讀取數(shù)據(jù)importnumpyasnpimportpandasaspddata=pd.read_csv(r'MotorcycleData.csv',encoding='gbk',na_values='Na')(2)定義標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化函數(shù)defstrtofloat(x):if'$'instr(x):x=str(x).strip('$')x=str(x).replace(',','')else:x=str(x).replace(',','')returnfloat(x)data['Mileage']=data['Mileage'].apply(strtofloat)data['Price']=data['Price'].apply(strtofloat)defStandardScaler(Data):Data=(Data-Data.mean())/Data.std()returnData(3)對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化,如圖7-28所示。data1=StandardScaler(data['Mileage'])data2=StandardScaler(data['Price'])data3=pd.concat([data1,data2],axis=1)print('標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化之前里程和單價(jià)數(shù)據(jù)為:\n',data[['Mileage','Price']].head())print('標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化之后里程和單價(jià)數(shù)據(jù)為:\n',data3.head())圖7-28對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化(4)調(diào)用機(jī)器學(xué)習(xí)庫進(jìn)行標(biāo)準(zhǔn)化,如圖7-29所示。from

sklearn

import

preprocessingpreprocessing.scale(data['Price'])圖7-29調(diào)用機(jī)器學(xué)習(xí)庫進(jìn)行標(biāo)準(zhǔn)化(三)描述性統(tǒng)計(jì)分析基本術(shù)語1.數(shù)據(jù)類型截面數(shù)據(jù):對多個(gè)個(gè)體在相同或近似相同的同一時(shí)間節(jié)點(diǎn)上搜集的數(shù)據(jù)時(shí)間序列數(shù)據(jù):某個(gè)個(gè)體在一段時(shí)間內(nèi)搜集到的數(shù)據(jù)集面板數(shù)據(jù):既有截面維度又有時(shí)間維度的混合數(shù)據(jù)集,可分為平衡面板數(shù)據(jù)、非平衡面板數(shù)據(jù)2.數(shù)據(jù)的位置度量平均值:是衡量數(shù)據(jù)的中心位置的重要指標(biāo),反映了一些數(shù)據(jù)必然性的特點(diǎn),包括算術(shù)平均值、加權(quán)算術(shù)平均值、調(diào)和平均值和幾何平均值。加權(quán)平均數(shù):當(dāng)觀測值具有不同的權(quán)重(重要性),使用加權(quán)平均數(shù)幾何平均數(shù):也是數(shù)據(jù)位置的一種度量,但它是n個(gè)數(shù)值乘積的n次方根。在財(cái)經(jīng)領(lǐng)域中,幾何平均數(shù)常用于分析財(cái)務(wù)數(shù)據(jù)的年、季度、月、周的平均變化率。中位數(shù):是另外一種反映數(shù)據(jù)的中心位置的指標(biāo),其確定方法是將所有數(shù)據(jù)以由小到大的順序排列,位于中央的數(shù)據(jù)值就是中位數(shù)。眾數(shù):是指在數(shù)據(jù)中發(fā)生頻率最高的數(shù)據(jù)值。(四)探索性數(shù)據(jù)分析1.統(tǒng)計(jì)檢驗(yàn)統(tǒng)計(jì)檢驗(yàn),如圖7-30所示,用于檢驗(yàn)數(shù)據(jù)是否符合正態(tài)性分布。importscipy.statsasssnorm_data=ss.norm.rvs(loc=0,scale=1,size=int(10e6))#loc為均值,scale為標(biāo)準(zhǔn)差,size為生成數(shù)據(jù)個(gè)數(shù),可以為元組ss.normaltest(norm_data)圖7-30統(tǒng)計(jì)檢驗(yàn)2.卡方檢驗(yàn)卡方檢驗(yàn),如圖7-31所示,常用作檢驗(yàn)兩個(gè)樣本數(shù)據(jù)之間是否有較強(qiáng)聯(lián)系。ss.chi2_contingency([[15,95],[85,5]])圖7-31卡方檢驗(yàn)3.獨(dú)立分布t檢驗(yàn)獨(dú)立分布t檢驗(yàn),如圖7-32所示,常用作比較均值是否有相異性,不要求兩個(gè)樣本之間數(shù)據(jù)量一致。ss.ttest_ind(ss.norm.rvs(size=500),ss.norm.rvs(size=1000))圖7-32獨(dú)立分布t檢驗(yàn)4.方差檢驗(yàn)方差檢驗(yàn),如圖7-33所示,常用作檢驗(yàn)多組樣本數(shù)據(jù)之間的均值是否有差異。ss.f_oneway(ss.norm.rvs(size=5000),ss.norm.rvs(size=10000),ss.norm.rvs(size=5000))圖7-33方差檢驗(yàn)5.Q-Q圖橫軸為:標(biāo)準(zhǔn)分布的分位數(shù)值(默認(rèn)為正態(tài)分布)縱軸為:已知分布的分位數(shù)的值數(shù)據(jù)集中在對角線上則說明越符合正態(tài)分布,Q-Q圖如圖7-34所示。fromstatsmodels.graphics.apiimportqqplotimportmatplotlib.pyplotaspltqqplot(ss.norm.rvs(size=50))#plt.close()plt.show()圖7-34Q-Q圖6.相關(guān)系數(shù)pearson相關(guān)系數(shù)和具體數(shù)值有關(guān),spearman相關(guān)系數(shù)和名次差有關(guān),運(yùn)用于相對比較的情況,如圖7-35所示。s1=pd.Series(np.random.randn(10))s2=pd.Series(np.random.randn(10))s1.corr(s2,method="spearman")df=pd.DataFrame(np.array([s1,s2]).T)df.corr()圖7-35相關(guān)系數(shù)三、總結(jié)通過本次任務(wù)的學(xué)習(xí)和實(shí)踐,我們了解了數(shù)據(jù)分析之前要做的任務(wù):數(shù)據(jù)清洗、數(shù)據(jù)標(biāo)準(zhǔn)化;了解數(shù)據(jù)的分析方法。能夠?qū)Ρ仁褂霉降姆绞胶褪褂脵C(jī)器學(xué)習(xí)庫的方式對數(shù)據(jù)進(jìn)行分析與標(biāo)準(zhǔn)化。這正如牛頓所說:“如果說我比別人看得更遠(yuǎn)些,那是因?yàn)槲艺驹诹司奕说募缟稀薄W鳂I(yè)布置1.使用機(jī)器學(xué)習(xí)庫實(shí)現(xiàn)數(shù)據(jù)的標(biāo)準(zhǔn)化2.畫出數(shù)據(jù)的箱線圖。教學(xué)反思情景二電子商務(wù)數(shù)據(jù)分析主題RFM模型序號4課時(shí)2教學(xué)手段多媒體、板書、實(shí)訓(xùn)室教學(xué)方法講授法、演示法、案例法教學(xué)課型□理論□實(shí)訓(xùn)√一體化□(其它)教學(xué)目標(biāo)能力目標(biāo):能夠?qū)o定的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗,能夠根據(jù)需要對數(shù)據(jù)進(jìn)行初加工。知識目標(biāo):了解數(shù)據(jù)類型轉(zhuǎn)換,了解RFM相關(guān)數(shù)據(jù)的意義素質(zhì)目標(biāo):接受新知識、自主學(xué)習(xí)的能力。教學(xué)重點(diǎn)根據(jù)要求清洗數(shù)據(jù)教學(xué)難點(diǎn)RFM模型的實(shí)現(xiàn)教學(xué)過程設(shè)計(jì)備注一、復(fù)習(xí)上一節(jié)上課內(nèi)容并引出本節(jié)上課內(nèi)容數(shù)據(jù)清洗、標(biāo)準(zhǔn)化等是對數(shù)據(jù)進(jìn)行基本整理的過程,所有拿到的數(shù)據(jù)都要經(jīng)過本步驟。數(shù)據(jù)清洗完成后,我們能夠怎么利用呢?二、教學(xué)內(nèi)容(一)數(shù)據(jù)準(zhǔn)備數(shù)據(jù)來源于數(shù)據(jù)科學(xué)競賽平臺Kaggle,網(wǎng)址為/jr2ngb/superstore-data,總共51290條數(shù)據(jù),24個(gè)字段。超市數(shù)據(jù)字段屬性如表7-4所示。表7-4數(shù)據(jù)字段屬性表序號字段名字段屬性說明0RowID行編號1OrderID訂單號2OrderDate訂單日期3ShipDate發(fā)貨日期4ShipMode發(fā)貨形式5CustomerID客戶編號6CustomerName客戶姓名7Segment客戶類別8City客戶所在城市9State客戶所在的洲10Country客戶所在的國家11PostalCode郵政編碼12Market商店所屬區(qū)域13Region商店所屬洲14ProductID產(chǎn)品編號15Category產(chǎn)品類別16Sub-Category產(chǎn)品子類型17ProductName產(chǎn)品名稱18Sales銷售額19Quantity銷售量20Discount折扣21Profit利潤22ShippingCost發(fā)貨成本23OrderPriority訂單優(yōu)先級表7-4的信息,可以通過讀取數(shù)據(jù)并使用info()方法獲得,如圖7-36所示。讀取數(shù)據(jù)并查看結(jié)構(gòu):importnumpyasnpimportpandasaspddata=pd.read_csv(r'superstore_dataset2011-2015.csv',encoding='iso-8859-1')()圖7-36獲取數(shù)據(jù)字段屬性(二)數(shù)據(jù)清洗與整理1.查看是否含有缺失值data.isna().any()圖7-37查看是否含有缺失值2.查看是否有異常值data.describe()圖7-38查看是否有異常值3.數(shù)據(jù)整理通過datetime可以快速增加數(shù)據(jù)的維度,把時(shí)間列分解為年、月和季度等。data['OrderDate']=pd.to_datetime(data['OrderDate'])print(data['OrderDate'].dtype)#列表出轉(zhuǎn)轉(zhuǎn)換后的數(shù)據(jù)類型data['Order-year']=data['OrderDate'].dt.yeardata['Order-month']=data['OrderDate'].dt.monthdata['Quarter']=data['OrderDate'].dt.to_period('Q')圖7-39數(shù)據(jù)修改成datetime類型經(jīng)過把OrderDate列分解為年、月后,可以按不同的時(shí)間維度取出數(shù)據(jù),例如需要獲取2012年銷售額前10的客戶ID數(shù)據(jù),可以使用如下方法,如圖7-40所示。Order2012=data[data[‘Order-year’]==2012]Order2012_Sales_Sort=Order2012.sort_values(‘Sales’,ascending=False)Order2012_Sales_Sort[:10][[‘CustomerID’,’Sales’]]圖7-40按不同的時(shí)間維度取出數(shù)據(jù)(三)商務(wù)數(shù)據(jù)分析目標(biāo)1.每年銷售額的增長率銷售增長率是企業(yè)本年銷售收入增長額同上年銷售收入總額之比。銷售額增長率=(本年銷售額-上年銷售額)/上年銷售額*100%=(本年銷售額/上年銷售額-1)*100%(1)計(jì)算年銷售額根據(jù)超市數(shù)據(jù),按年份計(jì)算銷售總額,并以年進(jìn)行分組。再根據(jù)銷售額增長率公式分別算出2012年、2013年和2014年的銷售額增長率,如圖7-41所示。sales_year=data.groupby(‘Order-year’)[‘Sales’].sum()sales_rate2012=sales_year[2012]/sales_year[2011]-1sales_rate2013=sales_year[2013]/sales_year[2013]-1sales_rate2014=sales_year[2014]/sales_year[2013]-1print(sales_rate2012,sales_rate2012,sales_rate2014)圖7-41計(jì)算銷售額增長率(2)用圖形展示增長率,如圖7-42所示。importmatplotlib.pyplotasplt%matplotlibinlineplt.rcParams['font.sans-serif']=['KaiTi']plt.rcParams['axes.unicode_minus']=Falsesales_rate2012=sales_year[2012]/sales_year[2011]-1sales_rate2013=sales_year[2013]/sales_year[2013]-1sales_rate2014=sales_year[2014]/sales_year[2013]-1plt.style.use('ggplot')sales_rate=pd.DataFrame({'sales_all':sales_year,'sales_rate':[0,sales_rate2012,sales_rate2013,sales_rate2014]})y1=sales_rate['sales_all']y2=sales_rate['sales_rate']x=[str(value)forvalueinsales_rate.index.tolist()]fig=plt.figure()ax1=fig.add_subplot(1,1,1)ax2=ax1.twinx()ax1.bar(x,y1,color='blue')ax2.plot(x,y2,marker='*',color='r')ax1.set_xlabel('年份/年')ax1.set_ylabel('銷售額/元')ax2.set_xlabel('增長率')ax2.set_ylabel('銷售額與增長率')plt.title('銷售額與增長率')plt.show()圖7-42銷售額通過圖形,可以看出2011~2014年該超市的銷售額在穩(wěn)步上升,說明企業(yè)市場占有能力在不斷提高,2012~2014年增長率在增長后趨于平穩(wěn),說明企業(yè)經(jīng)營在逐步穩(wěn)定。2.分店銷售額及對比對比不同分店的銷售額,如圖7-43所示,用于對不同地區(qū)分配下一年度的銷售額指標(biāo),或者采取不同的營銷策略。(1)對Market數(shù)據(jù)分組Sales_Area=data.groupby(‘Market’)[‘Sales’].sum()(2)各地區(qū)每年銷售額分析Sales_Area=data.groupby([‘Market’,’Order-year’])[‘Sales’].sum()Sales_Area=Sales_Area.reset_index(level=[0,1])Sales_Area=pd.pivot_table(Sales_Area,index=’Market’,columns=’Order-year’,values=’Sales’)Sales_Area.plot(kind=’bar’,title=’2011-2014年不同地區(qū)銷售額比較’)圖7-43分店銷售額及對比可以看出APAC地區(qū)和EU地區(qū)的增長速度比較快,企業(yè)市場前景比較好,下一年可以適當(dāng)加大運(yùn)營成本,其他地區(qū)可以根據(jù)自身地區(qū)消費(fèi)特點(diǎn),參考上面兩個(gè)地區(qū)的運(yùn)營模式。3.用戶價(jià)值度RFM模型(1)模型簡介RFM模型,R(Recency):客戶最近一次交易時(shí)間的間隔。R值越大,表示客戶交易發(fā)生的日期越久,反之則表示客戶交易發(fā)生的日期越近。F(Frequency):值越大,表示客戶交易越頻繁,反之則表示客戶交易不夠活躍。M(Monetary):客戶在最近一段時(shí)間內(nèi)交易的金額。M值越大,表示客戶價(jià)值越高,反之則表示客戶價(jià)值越低。RFM模型是衡量客戶價(jià)值和用戶創(chuàng)利能力的經(jīng)典工具,依托于客戶最近一次購買時(shí)間、消費(fèi)頻次及消費(fèi)金額。應(yīng)用RFM模型時(shí),要有客戶基礎(chǔ)的交易數(shù)據(jù),至少包含客戶號、交易金額和交易時(shí)間3個(gè)字段。根據(jù)R、F、M這3個(gè)維度,可以將客戶分為以下8種類型,如表7-5所示表7-5RFM客戶類型客戶群體類型RFM客戶等級重要價(jià)值高高高A重要發(fā)展高低高A重要保持低高高B重要挽留低低高B一般價(jià)值高高低B一般發(fā)展高低低B一般保持低高低C一般挽留低低低C表中將每個(gè)維度都分為高和低兩種情況,進(jìn)而將客戶群體劃分為8種類型,而這8種類型又可以劃分成A、B、C三個(gè)等級。(2)RFM值的計(jì)算現(xiàn)有某用戶的消費(fèi)記錄如表7-6所示。根據(jù)CustomerID、OrderDate、Sales三個(gè)字段計(jì)算R、F、M值,假設(shè)分析的時(shí)間是5/1/2014。表7-6某用戶消費(fèi)記錄CustomerIDOrderDateSalesKN-67051/9/2014128.736KN-67053/9/2014795.408R:5/1/2014-3/9/2014=53。F:消費(fèi)次數(shù)=2。M:消費(fèi)金額=128.736+795.408。(3)評價(jià)方式當(dāng)R、F、M每個(gè)值計(jì)算出來之后,可以使用評分的方式對每一個(gè)維度的數(shù)據(jù)進(jìn)行評分。R:R值越大,評分越小。F:F值越大,評分越大。M:M值越大,評分越大。當(dāng)R、F、M三個(gè)維度對應(yīng)的評分值設(shè)置完成之后,再利用每個(gè)維度評分值的平均值,對數(shù)據(jù)的R、F、M進(jìn)行高低維度的劃分。當(dāng)評分值大于等于對應(yīng)的平均值時(shí)表示高,當(dāng)評分值小于對應(yīng)的平均值時(shí)表示低。(4)分析步驟步驟1:統(tǒng)計(jì)全年的數(shù)據(jù)。data_2014=data[data[‘Order-year’]==2014]data_2014=data[[‘CustomerID’,’OrderDate’,’Sales’]]步驟2:對數(shù)據(jù)分組deforder_sort(group):returngroup.sort_values(by=’OrderDate’)[-1:]data_2014_group=data_2014.groupby(by=’CustomerID’,as_index=False)data_max_time=data_2014_group.apply(order_sort)步驟3:計(jì)算F,M值data_max_time[‘F’]=data_2014_group.size().valuesdata_max_time[‘M’]=data_2014_group.sum()[‘Sales’].values步驟4:計(jì)算R值根據(jù)需要假定時(shí)間計(jì)算2014年12月31日,最近一次交易時(shí)間的間隔。注意,由于是歷史數(shù)據(jù),計(jì)算的時(shí)候時(shí)間跨度不要太大。stat_date=pd.to_datetime(‘2014-12-31)r_data=stat_date–data_max_time[‘OrderDate’]data_max_time[‘R’]=r_data.values以上4個(gè)步操作過程及計(jì)算結(jié)果如圖7-44所示。圖7-44計(jì)算出的RFM值步驟5:設(shè)定評分區(qū)間給定F的區(qū)間為[0,5,10,15,20,50],采用5分制的評

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論