![數(shù)據(jù)采集與預(yù)處理(微課版) 課件 第7章 Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化_第1頁](http://file4.renrendoc.com/view2/M03/16/2D/wKhkFmZGB7-AQWJVAAGGz6Y6O2I937.jpg)
![數(shù)據(jù)采集與預(yù)處理(微課版) 課件 第7章 Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化_第2頁](http://file4.renrendoc.com/view2/M03/16/2D/wKhkFmZGB7-AQWJVAAGGz6Y6O2I9372.jpg)
![數(shù)據(jù)采集與預(yù)處理(微課版) 課件 第7章 Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化_第3頁](http://file4.renrendoc.com/view2/M03/16/2D/wKhkFmZGB7-AQWJVAAGGz6Y6O2I9373.jpg)
![數(shù)據(jù)采集與預(yù)處理(微課版) 課件 第7章 Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化_第4頁](http://file4.renrendoc.com/view2/M03/16/2D/wKhkFmZGB7-AQWJVAAGGz6Y6O2I9374.jpg)
![數(shù)據(jù)采集與預(yù)處理(微課版) 課件 第7章 Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化_第5頁](http://file4.renrendoc.com/view2/M03/16/2D/wKhkFmZGB7-AQWJVAAGGz6Y6O2I9375.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第七章Scrapy與Selenium采集股市每日點評數(shù)據(jù)并可視化“Python數(shù)據(jù)采集與預(yù)處理目錄CONTENTS采集目標(biāo)和準(zhǔn)備工作7.1大盤每日點評網(wǎng)頁結(jié)構(gòu)分析7.2使用Scrapy與Selenium爬取信息7.3數(shù)據(jù)預(yù)處理和可視化7.4學(xué)習(xí)目標(biāo)掌握Scrapy框架爬取數(shù)據(jù)的邏輯和流程掌握Scrapy框架組件使用方式掌握Scrapy框架與Selenium擴展的結(jié)合使用掌握數(shù)據(jù)存儲至數(shù)據(jù)庫的基本方式掌握詞云圖的繪制方式采集目標(biāo)和準(zhǔn)備工作017.1采集目標(biāo)和準(zhǔn)備工作采集目標(biāo)在本章的案例中,通過運行編寫的Scrapy爬蟲,可以自動爬取收集來源于支付寶基金板塊所收錄的大盤每日點評數(shù)據(jù)信息,并且最終將獲取的數(shù)據(jù)存入數(shù)據(jù)庫。本章的數(shù)據(jù)采集目標(biāo)主要為每日點評的日期信息、一句話盤前盤后概述和首頁大盤點評文本信息。根據(jù)采集的數(shù)據(jù),以詞云圖和統(tǒng)計圖表的形式進行可視化展示,將每日的一句話盤前盤后概述和首頁大盤點評文本信息制作為詞云圖,將不同詞根據(jù)詞頻的大小進行排序,以詞在圖中出現(xiàn)的大小來代表相應(yīng)的詞頻大小,從而進行可視化展示,以這樣的形式我們可以更直觀地了解近期金融市場的趨勢和狀況。7.1采集目標(biāo)和準(zhǔn)備工作采集目標(biāo)在頁面該位置往下瀏覽,可以看到每篇點評的日期時間信息,和一句話概述標(biāo)題以及首頁的點評文本,每一條資訊數(shù)據(jù)都是一塊塊有規(guī)律地存放在相應(yīng)版塊中,同時繼續(xù)往下瀏覽可以看到每次進入頁面只刷新加載出10條信息,想要看到更多的內(nèi)容,需要手動繼續(xù)往下滑到頁面底端才能如圖7-3所示加載出更多,這無疑是一種動態(tài)渲染。動態(tài)渲染的爬取思路一種是分析Ajax請求,找到其對應(yīng)的接口抓取,獲取相應(yīng)的JSON數(shù)據(jù)包,Scrapy可以使用這種方式爬??;另一種則是結(jié)合Selenium來模擬瀏覽器進行訪問抓取,直接獲得最后渲染好的整體頁面,在該頁面的基礎(chǔ)上再定位元素進行信息采集。7.1采集目標(biāo)和準(zhǔn)備工作采集目標(biāo)在準(zhǔn)備爬取數(shù)據(jù)之前,請確保裝已經(jīng)安裝好了Scrapy框架、pymysql庫、Selenium庫。在有了這幾個庫的基礎(chǔ)上,開始創(chuàng)建Scrapy項目。打開PyCharm,創(chuàng)建一個新的工程文件ScrapyStudy,然后在該工程文件夾下面點擊“Terminal”進入PyCharm的終端界面,輸入命令:scrapystartprojecttutorial創(chuàng)建一個新的Scrapy項目。創(chuàng)建完成Scrapy項目后便可以開始編寫自己的爬蟲程序了。但在進行爬蟲編寫之前,還需要對爬取目標(biāo)有一個明確的定位與分析,接下來對爬取頁面的網(wǎng)頁結(jié)構(gòu)進行分析介紹。大盤每日點評網(wǎng)頁結(jié)構(gòu)分析027.2大盤每日點評網(wǎng)頁結(jié)構(gòu)分析用元素選取工具選中存放整個界面數(shù)據(jù)的模塊,發(fā)現(xiàn)其為一個列表<li>結(jié)構(gòu),將<li>標(biāo)簽進一步展開至<div>下,可看到其下共有兩個<div>,第一個<div>中包含了日期時間數(shù)據(jù),第二個<div>中又囊括了兩個<div>,其分別存儲了一句話概述文本和每日點評文本。從圖中可以清晰看到,每一次的盤前盤后點評都存儲在一個個<li>標(biāo)簽中,其中所包含的三個<div>結(jié)構(gòu)中是我們所需要的數(shù)據(jù)信息,從上至下的三個圖中紅框選出來的<div>中的內(nèi)容分別為“日期時間”、“一句話概述標(biāo)題”和“每日點評文本”,由此可以確定爬取順序和數(shù)據(jù)的字段含義。使用Scrapy與Selenium爬取信息037.3.1編寫item.py與spider.py由于需要爬取“日期時間”、“一句話概述標(biāo)題”和“每日點評文本”三個字段的內(nèi)容,所以在item里設(shè)置三個字段“date_details”、“title_details”和“text_details”。item.py第一步先初步實現(xiàn)自己定義的Spider類,定義類屬性以及start_requests()方法。其用于生成初始請求,構(gòu)造生成Request提交給調(diào)度器Scheduler,通過DownloaderMiddlewares轉(zhuǎn)發(fā)給Downloader下載,并且指定提取數(shù)據(jù)的回調(diào)函數(shù)為self.parse。第二部構(gòu)造解析頁面函數(shù)parse(),其將會接受Downloader或DownloaderMiddlewares回傳的Response對象進行解析。這兩個函數(shù)構(gòu)成了我們Spider類的主要內(nèi)容。spider.pyimportscrapyfromscrapyimportFieldclassCovidItem(scrapy.Item): text_details=Field()title_details=Field()date_details=Field()7.3.1編寫item.py與spider.pyimportscrapyfromtutorial.itemsimportCovidItem#定義自己的Spider類classQuotesSpider(scrapy.Spider):name="study"allowed_domains=[""]#start_urls=\#['/infofront/antIndex/99d79444-5226-11e6-a786-40f2e968ab88']
#定義start_requests()函數(shù)用于生成初始請求
defstart_requests(self):urls=[“/infofront/antIndex/99d79444-5226-11e6-a786-40f2e968ab88”]forurlinurls:yieldscrapy.Request(url=url,callback=self.parse)7.3.1編寫item.py與spider.pydefparse(self,response):#獲取日期和文本兩個板塊的div標(biāo)簽代碼內(nèi)容text_items=response.xpath('//*[@id="__layout"]/div/div/div/section/ul/li/div[2]’)date_items=response.xpath('//*[@id="__layout"]/div/div/div/section/ul/li/div[1]')print('總共獲取數(shù)據(jù):{},{}\n'.format(len(text_items),len(date_items)))#構(gòu)造我們自己定義的item的對象,且定義兩個存儲具體信息的列表
items=CovidItem()text_details=[]title_details=[]date_details=[]#提取一句話概述和點評文本
foritemintext_items:title=item.xpath('./div[1]/span/text()').extract_first()text=item.xpath('./div[2]/text()').extract_first()#去掉爬取到的點評文本中網(wǎng)頁自帶的一些特殊符號
text=re.sub('[a-zA-Z#$&\s\n\r]+',"",text)text=''.join(text)title_details.append(title)text_details.append(text)#提取日期時間數(shù)據(jù)
foritemindate_items:date=item.xpath('./span/text()').getall()date=''.join(date)date_details.append(date)#將數(shù)據(jù)存儲在CovidItem對象中并返回給pipelinesitems['title_details']=title_detailsitems['text_details']=text_detailsitems['date_details']=date_detailsyielditems7.3.2編寫middlewares.pyclassSeleniumMiddleware(object):
def__init__(self):self.browser=webdriver.Chrome()#設(shè)置瀏覽器窗口大小
self.browser.set_window_size(1400,700)#設(shè)置隱式等待
self.browser.implicitly_wait(10)defprocess_request(self,request,spider): #瀏覽器使用get()訪問Request的對應(yīng)URLself.browser.get(request.url)time.sleep(2)#對頁面元素進行定位
target=self.browser.find_element_by_xpath('//*[@id="__layout"]/div/div/div/section/div[3]/img')middlewares.py對相應(yīng)URL的內(nèi)容采集,本節(jié)使用Scrapy對接Selenium的方式來實現(xiàn),整個過程采用DownloaderMiddlewares來編寫。我們自定義一個SeleniumMiddleware類,其中將會定義Middlewares里面的process_request()方法,方法中將根據(jù)Request中的URL來進行處理,用Selenium啟動瀏覽器進行頁面渲染,最后以HtmlResponse的形式返回完整渲染好的頁面對象。7.3.2編寫middlewares.py#往后繼續(xù)刷新10頁,一共獲取110條數(shù)據(jù)內(nèi)容
foriinrange(10):#定位頁面底端后要重定位到上一條每日點評,避免無法控制刷新次數(shù)
stop=self.browser.find_element_by_xpath('//*[@id="__layout"]/div/div/div/section/ul/li[{}]'.format(i*10+10))#使用JS語句來定位元素
self.browser.execute_script("arguments[0].scrollIntoView();",target)self.browser.execute_script("arguments[0].scrollIntoView();",stop)#也可以不使用JS,而采取直接找到元素并對其做出某些操作的方式來定位頁面
#button=self.browser.find_element_by_xpath('//*[@id="__layout"]/div/div/div/section/div[3]/img')#button.click()#休眠三秒等待刷新
time.sleep(3)#獲取網(wǎng)頁源碼
data=self.browser.page_sourceself.browser.close() #構(gòu)造返回HtmlResponse對象,提交給Spider處理
returnHtmlResponse(url=request.url,body=data,request=request,encoding='utf-8',status=200)7.2.2編寫middlewares.py在上面代碼中,主要做的事情就是在process_request()函數(shù)中使用__init__()中初始化好的瀏覽器對象browser,來對request.url進行訪問,通過xpath定位頁面末尾的公司聲明內(nèi)容的元素標(biāo)簽,從而使頁面開始自動加載新的數(shù)據(jù)。同時在這里有一個細節(jié)需要讀者注意,Request請求實際上在Middlewares中間件這里已經(jīng)被處理了,其不會再被傳給Downloader完成下載,而是由SeleniumMiddleware類的process_request()方法直接構(gòu)造了一個HtmlResponse對象返回,其為Response對象子類。根據(jù)process_request()函數(shù)的特性,當(dāng)其返回Response對象時,低優(yōu)先級的DownloaderMiddlewares中的process_request()方法便不會再被調(diào)用了,轉(zhuǎn)而會去執(zhí)行每一個DownloaderMiddlewares的process_response()方法,本案例middlewares.py中的process_response()方法沒有任何處理,只有一句returnresponse,于是構(gòu)造的HtmlResponse對象將會直接被返回給Spider。7.3.3編寫pipelines.pyItemPipeline為項目管道,當(dāng)Item對象構(gòu)建好后,通過yield可以將其提交到ItemPipeline中進行處理,在ItemPipeline中將Item中的內(nèi)容存儲到MySql數(shù)據(jù)庫中。本案例中實現(xiàn)ItemPipeline只需要定義一個MySpiderPipeline類,讓其實現(xiàn)process_item()方法即可,該方法必須返回數(shù)據(jù)字典或者是拋出異常。pipelines.py中需要導(dǎo)入pymysql、traceback和time這三個包。item.pyclassMySpiderPipeline(object):def__init__(self,host,database,user,password,port):self.host=hostself.database=databaseself.user=userself.password=passwordself.port=port@classmethoddeffrom_crawler(cls,crawler):returncls(host=crawler.settings.get('MYSQL_HOST'),database=crawler.settings.get('MYSQL_DATABASE'),user=crawler.settings.get('MYSQL_USER'),password=crawler.settings.get('MYSQL_PASSWORD'),port=crawler.settings.get('MYSQL_PORT'),)7.3.3編寫pipelines.py在以上代碼中,定義了一個MySpiderPipeline類,在初始化方法__init__()中,初始化了連接數(shù)據(jù)庫時所需的所有參數(shù),但此處需要注意的一個點是,初始化參數(shù)的內(nèi)容都來源于from_crawler()這個類方法,其用@classmethod標(biāo)識。該方法中傳入一個參數(shù)crawler,通過該對象可以從crawler.settiings中讀取最高優(yōu)先級的settiings,獲取settings中最常見的項目設(shè)置信息。cls參數(shù)為Class,該方法最后返回一個Class實例。繼續(xù)我們定義了open_spider()函數(shù)和close_spider()函數(shù)。這兩個函數(shù)分別在Spider開啟和關(guān)閉的時候被調(diào)用,我們可以在其中做一些初始化和結(jié)尾工作,比如上面代碼中的初始化數(shù)據(jù)庫連接對象conn和關(guān)閉數(shù)據(jù)庫連接對象conn操作。item.py#創(chuàng)建數(shù)據(jù)庫連接和游標(biāo)
defopen_spider(self,spider):self.conn=pymysql.connect(host=self.host,user=self.user,passwd=self.password,database=self.database,charset='utf8',port=self.port)self.cursor=self.conn.cursor()#關(guān)閉數(shù)據(jù)庫
defclose_spider(self,spider):self.conn.close()7.3.3編寫pipelines.py接下來則是最重要的process_item()函數(shù)的定義,主要的數(shù)據(jù)處理工作都是在其中進行的。在process_item()函數(shù)中,首先從接收到的item里面拿出三各字段的數(shù)據(jù),保存在臨時變量中,然后書寫兩條sql語句,第一條sql_delete負責(zé)每次將舊的歷史數(shù)據(jù)清空,第二條sql_insert負責(zé)按照格式插入數(shù)據(jù)。接下來便執(zhí)行第一條sql語句清空舊記錄,再將三個變量用zip打包后,共同組成一個元組,并將這些元組組成列表返回。遍歷列表中的元組將數(shù)據(jù)一條條插入數(shù)據(jù)庫。最后使用commit()提交以上操作即可。item.py#將數(shù)據(jù)存儲到數(shù)據(jù)庫中defprocess_item(self,item,spider):try:dat=item['date_details']title=item['title_details']context=item['text_details’]sql_delete="truncatetablestock_comment"sql_insert="insertintostock_comment(date,title,text)values(%s,%s,%s)"#time.asctime()不加參數(shù)就是默認(rèn)time.localtime()返回的時間
print(f"{time.asctime()}開始更新數(shù)據(jù)")self.cursor.execute(sql_delete)#將三個列表取出打包為元組
ford,t,cinzip(dat,title,context):self.cursor.execute(sql,(d,t,c))mit()print(f"{time.asctime()}更新到最新數(shù)據(jù)")except: traceback.print_exc()returnitem7.3.3編寫pipelines.py在執(zhí)行上面操作前,可以先將item內(nèi)容輸出到終端,觀察一下數(shù)據(jù)結(jié)構(gòu)形式,這樣更加方便代碼邏輯的編寫。數(shù)據(jù)爬取結(jié)果7.3.4設(shè)置settings.pysettings.py的主要任務(wù)就是定義項目的全局配置項,在其中可以定制Scrapy組件。你可以控制包括核心(core),插件(extension),ItemPipelines及Middlewares等組件,設(shè)置項目下所有爬蟲的一些公共變量。整個settings設(shè)定為代碼形式,其提供了以key-value映射的配置值的全局命名空間(namespace)。settings.py①日志等級LOG_LEVEL="WARNING"②是否遵守robots協(xié)議ROBOTSTXT_OBEY=False③數(shù)據(jù)庫全局參數(shù)變量MYSQL_HOST=''MYSQL_DATABASE='mytext'MYSQL_USER='root'MYSQL_PASSWORD='123456'MYSQL_PORT=3306④下載中間件設(shè)置DOWNLOADER_MIDDLEWARES={#'tutorial.middlewares.TutorialDownloaderMiddleware':543,'tutorial.middlewares.SeleniumMiddleware':543,}⑤項目管道設(shè)置ITEM_PIPELINES={'tutorial.pipelines.MySpiderPipeline':300,}7.3.5運行結(jié)果編寫好所有代碼后,便可以在終端運行我們的Scrapy爬蟲項目了。首先,進入項目目錄tutorial,輸入命令cdtutorial;然后輸入命令scrapycrawlstudy即可運行項目;最后可以在終端看見運行結(jié)束的提示。運行結(jié)果使用Navicat進入數(shù)據(jù)庫可以看到Scrapy項目爬取到的內(nèi)容已存放在下圖所示的stock_comment這張表中。數(shù)據(jù)預(yù)處理與可視化047.4.1數(shù)據(jù)預(yù)處理導(dǎo)入所需庫導(dǎo)入本案例數(shù)據(jù)預(yù)處理與可視化所需要的庫。Pandas、NumPy、Matplotlib用于處理數(shù)據(jù)與繪制統(tǒng)計圖,Pymsql用于數(shù)據(jù)庫操作,Jieba和Re用于處理文本生成詞云圖。#導(dǎo)入包和模塊importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportpymysqlimportjieba.analysefromjieba.analyseimportextract_tagsimportre7.4.1數(shù)據(jù)預(yù)處理數(shù)據(jù)讀取數(shù)據(jù)預(yù)處理第一步需要將數(shù)據(jù)從數(shù)據(jù)庫中讀取出來,本案例在JupyterNotebook中。完成數(shù)據(jù)預(yù)處理與可視化操作defget_conn():#創(chuàng)建連接
conn=pymysql.connect(host="localhost",user="root",password="123456",db="mytext",charset="utf8")#創(chuàng)建游標(biāo)cursor=conn.cursor()returnconn,cursor#關(guān)閉連接defclose_conn(conn,cursor):cursor.close()conn.close()#查詢defquery(sql,*args):conn,cursor=get_conn()cursor.execute(sql,args)res=cursor.fetchall()close_conn(conn,cursor)returnresdefget_data():sql="select*fromstock_comment"res=query(sql)returnrestext=get_data()7.4.1數(shù)據(jù)預(yù)處理數(shù)據(jù)轉(zhuǎn)換由于爬取到的數(shù)據(jù)十分規(guī)整,于是可以直接開始數(shù)據(jù)轉(zhuǎn)換操作,將數(shù)據(jù)類型從元組轉(zhuǎn)換為DataFrame,重命名列索引,并且對其中用需要轉(zhuǎn)化為日期時間類型的字符串?dāng)?shù)據(jù)進行映射轉(zhuǎn)換。在日期時間數(shù)據(jù)中,字符串形式的日期數(shù)據(jù)明顯不規(guī)整,最好將其轉(zhuǎn)化為日期形式數(shù)據(jù)。這里使用iloc定位下標(biāo)或使用列名選取的形式選中所需要轉(zhuǎn)換的列,賦值給result變量,然后使用apply()函數(shù)對result應(yīng)用自定義函數(shù)date_transform(),將其中的所有內(nèi)容轉(zhuǎn)換為日期類型數(shù)據(jù)。fromdatetimeimportdatetime#數(shù)據(jù)類型轉(zhuǎn)換為DataFrametext=pd.DataFrame(text,columns=['id','date','title','comment’])result=text['date']#result=text.iloc[:,0]defdate_transform(res):#去掉多余文字
res=res.replace('月盤前','')res=res.replace('月盤后','')#拼接當(dāng)前年份
temp=''.join([str(datetime.now().year),res])#轉(zhuǎn)化年份
datetime_object=datetime.strptime(temp,'%Y%d%m%H:%M:%S')#返回數(shù)據(jù)
returndatetime_object#使用自定義函數(shù)并替換原數(shù)據(jù)列result=result.apply(date_transform)text['date']=result7.4.1數(shù)據(jù)預(yù)處理轉(zhuǎn)換結(jié)果其實從上面的結(jié)果中可以看出,我們爬取的數(shù)據(jù)日期其實出現(xiàn)了跨年份的現(xiàn)象,統(tǒng)一拼接為2022年顯然不妥。針對這一情況該如何解決呢?交給同學(xué)們思考。7.4.1數(shù)據(jù)預(yù)處理數(shù)據(jù)規(guī)約經(jīng)過數(shù)據(jù)轉(zhuǎn)換后,通過標(biāo)準(zhǔn)化的日期統(tǒng)計,可以進行很多觀察與總結(jié),比如可以直觀地看出我們爬取數(shù)據(jù)的時間跨度,并且在根據(jù)文本情感進行預(yù)測分析的時候,日期需要與每日點評文本一一對應(yīng),這些時候標(biāo)準(zhǔn)化日期就顯得十分必要。但在本章制作詞云圖中不需要日期,因為制作詞云時需要將所有點評拼接為一個大文本,所以date列可以拋棄。此外用于數(shù)據(jù)在數(shù)據(jù)庫中保證排列順序的id列也不需要,可以刪去。#數(shù)據(jù)規(guī)約text.drop(labels=['id','date'],axis=1,inplace=True)7.4.1數(shù)據(jù)預(yù)處理文本預(yù)處理在制作文本詞云圖之前,需要對文本進行預(yù)處理,轉(zhuǎn)化為方便進行詞云圖可視化的格式。第一步需要獲得一個純文字內(nèi)容的大文本。首先,需要將文本從DataFrame中提取出來合并在一起,形成一個大文本,講兩個字段的大文本分別賦值給title和comment;然后利用re.findall()函數(shù)將文本中各種標(biāo)點符號給清除,使其只留下文字內(nèi)容;最后將re.findall()函數(shù)返回的數(shù)組內(nèi)容title和comment再次拼接為一個大文本。#將每一行的文本數(shù)據(jù)拼接到一起,形成一個大文本content=text.sum()title=content.titlecomment=ment#對大文本去除各種符號,只剩下文字內(nèi)容#只要字符串中的中文,字母,數(shù)字title=re.findall('[\u4e00-\u9fa5a-zA-Z0-9]+',title,re.S)comment=re.findall('[\u4e00-\u9fa5a-zA-Z0-9]+',comment,re.S)#重新拼接結(jié)果title="".join(title)comment="".join(comment)7.4.1數(shù)據(jù)預(yù)處理文本預(yù)處理第二步則需要對大文本進行分詞操作,這里通過自定義函數(shù)curWords()來完成。在函數(shù)中首先使用jieba分詞庫對傳入的content進行分詞操作,lcut()函數(shù)以數(shù)組形式返回分詞結(jié)果;然后對分詞結(jié)果去除停用詞和數(shù)字內(nèi)容,這些內(nèi)容在詞云圖中沒有分析價值,這里用到了停用詞表和isdigit()函數(shù)。停用詞表中包括了常見的停用詞,isdigit()用于判斷字符串是否只由數(shù)字組成,利用讀取的cn_stopwords.txt中的停用詞和isdigit()函數(shù)可以得到一個不包括停用詞和數(shù)字的列表words;最后將words返回。defcutWords(content):#進行分詞wordlist_jieba=jieba.lcut(content)#讀取停用詞表withopen(r'D:\stopwords\cn_stopwords.txt',encoding='utf-8')asf:stopwords=f.read()words=[]forwordinwordlist_jieba: #去除停用詞和數(shù)字內(nèi)容
ifwordnotinstopwordsandnotword.isdigit():words.append(word)returnwords#進行分詞處理title=cutWords(title)comment=cutWords(comment)7.4.1數(shù)據(jù)預(yù)處理文本預(yù)處理第三步需要對兩個變量進一步處理得到一個以空格分割的大文本。觀察分詞后的title內(nèi)容可以發(fā)現(xiàn),其中有很多的“盤前”“盤后”,這兩個詞對于詞云圖的表達沒有任何意義,可以刪除,而comment中有很多重復(fù)的“市場”“表現(xiàn)”這兩個詞,由于本身就是對市場的表現(xiàn)做出點評,我們更加關(guān)心對市場里面的哪些內(nèi)容進行點評,所以兩詞可以刪去,其他的分詞結(jié)果均可保留,使用join()函數(shù)將處理結(jié)果合并為一個大文本。#處理titlewhile'盤前'intitle:title.remove('盤前')while'盤后'intitle:title.remove('盤后')space_title=''.join(title)#處理commentwhile'市場'incomment:comment.remove('市場')while'表現(xiàn)'incomment:comment.remove('表現(xiàn)')space_comment=''.join(comment)7.4.1數(shù)據(jù)預(yù)處理預(yù)處理結(jié)果一句話標(biāo)題概述文本預(yù)處理結(jié)果每日點評文本預(yù)處理結(jié)果7.4.2數(shù)據(jù)可視化文本預(yù)處理詞云圖又叫文字云,是對文本數(shù)據(jù)中出現(xiàn)頻率較高的關(guān)鍵詞予以視覺上的突出,用來展現(xiàn)高頻關(guān)鍵詞的可視化表達。其通過文字、色彩、圖形的搭配,產(chǎn)生有沖擊力地視覺效果,從而形成“對關(guān)鍵詞的渲染”,結(jié)果形成類似云一樣的彩色圖片,從而過濾掉大量的不相關(guān)文本信息,使人一眼就可以領(lǐng)略文本數(shù)據(jù)的主要表達意思。近年來詞云圖被廣泛的應(yīng)用到宣傳、報告、數(shù)據(jù)分析、文章配圖等領(lǐng)域中,本小節(jié)便以詞云圖來完成每日點評文本的可視化分析。繪制詞云圖的方法如下:首先,導(dǎo)入繪制詞云圖所需要的庫wordcloud,使用其中的WordCloud類創(chuàng)建一個詞云對象WC,然后調(diào)用WC中的generate()函數(shù)便可以生成詞云,最后使用plt中的函數(shù)來進行圖像設(shè)置,將詞云圖顯示到頁面上。由于針對space_title和space_comment兩個內(nèi)容的詞云圖繪制過程一致,這里的代碼以space_title為例,想要繪制space_comment的詞云圖只需修改generate()傳入的參數(shù)即可。7.4.2數(shù)據(jù)可視化繪制詞云圖fromwordcloudimportWordCloud#創(chuàng)建詞云對象WC=WordCloud(font_path='C:\\Windows\\Fonts\\STFANGSO.TTF’,max_words=100,height=800,width=800,background_color='white',mode='RGBA',collocations=F
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年紅磷阻燃母粒項目可行性研究報告
- 2025年電動車減震項目可行性研究報告
- 2025年泡泡紗布項目可行性研究報告
- 2025至2031年中國柜臺鏡行業(yè)投資前景及策略咨詢研究報告
- 2025年懸壁梁式傳感器項目可行性研究報告
- 2025至2031年中國可調(diào)腹肌訓(xùn)練器行業(yè)投資前景及策略咨詢研究報告
- 2025年三乙二醇雙異辛酸酯項目可行性研究報告
- 2025至2030年中國雪松苗木數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國銅沖片接觸腳數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年紅外線自動門項目投資價值分析報告
- (更新版)HCIA安全H12-711筆試考試題庫導(dǎo)出版-下(判斷、填空、簡答題)
- 糖尿病運動指導(dǎo)課件
- 蛋白表達及純化課件
- 完整版金屬學(xué)與熱處理課件
- T∕CSTM 00640-2022 烤爐用耐高溫粉末涂料
- 304不銹鋼管材質(zhì)證明書
- 民用機場不停航施工安全管理措施
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺課件
- 新教科版2022年五年級科學(xué)下冊第2單元《船的研究》全部PPT課件(共7節(jié))
- QTD01鋼質(zhì)焊接氣瓶檢驗工藝指導(dǎo)書
- 人教版七年級英語下冊全冊英語單詞默寫直接打印
評論
0/150
提交評論