Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營 (第二版) 課件 第8章 數(shù)據(jù)分析部署和應(yīng)用_第1頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營 (第二版) 課件 第8章 數(shù)據(jù)分析部署和應(yīng)用_第2頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營 (第二版) 課件 第8章 數(shù)據(jù)分析部署和應(yīng)用_第3頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營 (第二版) 課件 第8章 數(shù)據(jù)分析部署和應(yīng)用_第4頁
Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營 (第二版) 課件 第8章 數(shù)據(jù)分析部署和應(yīng)用_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)分析部署和應(yīng)用08Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)本章學(xué)習(xí)目標(biāo)學(xué)會批量合并數(shù)據(jù)文件的方法理解從數(shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果的流程掌握通過郵件附帶數(shù)據(jù)文件進(jìn)行通用文本信息傳遞的實(shí)現(xiàn)方法熟悉Python腳本與數(shù)據(jù)任務(wù)的自動化處理過程學(xué)習(xí)發(fā)送帶HTML樣式的郵件的技術(shù)與操作邏輯8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件應(yīng)用背景工作需求實(shí)現(xiàn)過程8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件在企業(yè)中,經(jīng)常需要將來自多個數(shù)據(jù)源的數(shù)據(jù)文件進(jìn)行批量合并,以便進(jìn)行綜合分析和報告。例如,流量數(shù)據(jù)可能來自不同的網(wǎng)站分析工具或者日志系統(tǒng),銷售數(shù)據(jù)可能來自不同的銷售渠道或系統(tǒng)。數(shù)據(jù)分析師需要將這些數(shù)據(jù)文件整合到一起,以便進(jìn)行后續(xù)的處理和分析。數(shù)據(jù)文件的合并可以分為兩種情況:(1)所有數(shù)據(jù)文件的字段結(jié)構(gòu)完全相同,可以直接按行合并。(2)數(shù)據(jù)文件的字段結(jié)構(gòu)不同,但存在某種關(guān)聯(lián)關(guān)系,需要通過某個字段進(jìn)行匹配合并。應(yīng)用背景8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件本節(jié)以附件中的sales_data.zip和traffic_data.zip數(shù)據(jù)為例,這兩個壓縮包分別包含了按日的商品銷售數(shù)據(jù)和流量數(shù)據(jù)。現(xiàn)在的任務(wù)是將這兩份數(shù)據(jù)文件解壓并提取數(shù)據(jù),然后根據(jù)日期字段將兩份數(shù)據(jù)文件進(jìn)行匹配合并,最終輸出為一張包含完整信息的表格。工作需求8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件導(dǎo)入庫1importos,zipfile2importpandasaspd3fromdatetimeimportdatetime解壓壓縮包4zip_files=['sales_data.zip','traffic_data.zip']5forfileinzip_files:6fz=zipfile.ZipFile(file)7fz.extractall()實(shí)現(xiàn)過程8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件獲取文件數(shù)據(jù)8defread_data(file_name):9data=pd.read_csv(file_name)10data['日期']=os.path.splitext(file_name)[0][-8:]11returndata讀取兩個文件夾所有的文件12two_data_path=['traffic_data','sales_data']13two_df_list=[]14foreach_pathintwo_data_path:15files=[os.path.join(each_path,i)foriinos.listdir(each_path)]#獲取每個文件路徑

16df_list=[read_data(i)foriinfiles]#獲取每個文件數(shù)據(jù)17two_df_list.append(pd.concat(df_list))實(shí)現(xiàn)過程8.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件合并兩個df18merge_df=pd.merge(two_df_list[0],two_df_list[1],on=['日期','產(chǎn)品SKU'],how='outer')19print(merge_df.head(3))格式調(diào)整20merge_df2=merge_df[['日期','產(chǎn)品SKU','產(chǎn)品瀏覽量','產(chǎn)品加入購物車次數(shù)','訂單產(chǎn)品數(shù)量','訂單產(chǎn)品收入']]21merge_df2['日期']=[datetime.strptime(i,'%Y%m%d')foriinmerge_df2['日期']]22print(merge_df2.head(3))實(shí)現(xiàn)過程日期產(chǎn)品SKU產(chǎn)品瀏覽量產(chǎn)品加入購物車次數(shù)訂單產(chǎn)品數(shù)量訂單產(chǎn)品收入02019-06-261981113812019-06-262543140022019-06-26369148239產(chǎn)品SKU產(chǎn)品瀏覽量產(chǎn)品加入購物車次數(shù)日期訂單產(chǎn)品數(shù)量訂單產(chǎn)品收入01981120190626138125431420190626002369142019062682398.1整合數(shù)據(jù):批量合并數(shù)據(jù)文件輸出數(shù)據(jù)到單獨(dú)文件23merge_df2.to_excel('merge_data.xlsx',index=False)實(shí)現(xiàn)過程8.2數(shù)據(jù)萃?。簭臄?shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果應(yīng)用背景工作需求實(shí)現(xiàn)過程8.2數(shù)據(jù)萃取:從數(shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果在數(shù)據(jù)分析師的日常工作中,從數(shù)據(jù)庫中提取數(shù)據(jù)并生成結(jié)果文件是一項(xiàng)常見任務(wù)。這項(xiàng)工作涉及快速提取數(shù)據(jù)并根據(jù)需求進(jìn)行數(shù)據(jù)拆分,通常需要耗費(fèi)大量人力。特別是在處理規(guī)則相同但需要反復(fù)執(zhí)行的情況下,使用Python可以輕松實(shí)現(xiàn)。應(yīng)用背景8.2數(shù)據(jù)萃?。簭臄?shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果本應(yīng)用旨在從SQLite數(shù)據(jù)庫中提取數(shù)據(jù)(默認(rèn)數(shù)據(jù)庫文件為data.db,表名為data),按照指定規(guī)則切分?jǐn)?shù)據(jù),并將結(jié)果保存為Excel文件的單個sheet。工作需求8.2數(shù)據(jù)萃取:從數(shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果導(dǎo)入庫1importpandasaspd2fromsqlalchemyimportcreate_engine構(gòu)建數(shù)據(jù)庫連接引擎3engine=create_engine('sqlite:///data.db')實(shí)現(xiàn)過程8.2數(shù)據(jù)萃?。簭臄?shù)據(jù)庫提取數(shù)據(jù)生成結(jié)果編寫SQL并查詢數(shù)據(jù)庫獲取結(jié)果4sql_query='SELECT*FROM`data`where`日期`BETWEEN"2019-06-26"and"2019-07-03"and`產(chǎn)品SKU`>=1and`產(chǎn)品SKU`<=10'5data=pd.read_sql_query(sql_query,engine)6print(data.head(3))按產(chǎn)品SKU將數(shù)據(jù)分別保存到不同sheet7pro_skus=data['產(chǎn)品SKU'].unique()8withpd.ExcelWriter('data_from_db.xlsx')aswriter:9forskuinpro_skus:10pro_data=data[data['產(chǎn)品SKU']==sku]11pro_data.to_excel(writer,index=False,sheet_name=str(sku))實(shí)現(xiàn)過程日期產(chǎn)品SKU產(chǎn)品瀏覽量產(chǎn)品加入購物車次數(shù)訂單產(chǎn)品數(shù)量訂單產(chǎn)品收入02019-06-2600:00:00.0000001981113812019-06-2600:00:00.0000002543140022019-06-2600:00:00.0000003691482398.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail應(yīng)用背景工作需求實(shí)現(xiàn)過程8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail自動將數(shù)據(jù)結(jié)果發(fā)送給指定對象是一種增加數(shù)據(jù)主動傳遞的方式,相較于被動等待業(yè)務(wù)方查看結(jié)果,這種方式更具時效性和實(shí)用性。這種郵件發(fā)送的場景通常出現(xiàn)在日常報告(如日報、周報等)和預(yù)警通知等情況下,及時將數(shù)據(jù)信息傳達(dá)給業(yè)務(wù)方,并采取相應(yīng)措施具有重要意義。應(yīng)用背景8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail本應(yīng)用將利用QQ的SMTP服務(wù),自動向目標(biāo)對象發(fā)送電子郵件。郵件除了包含正文內(nèi)容外,還附帶壓縮包格式的數(shù)據(jù)文件,以便目標(biāo)用戶查看數(shù)據(jù)詳情。工作需求8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail配置QQ郵箱的SMTP服務(wù)為實(shí)現(xiàn)郵件的發(fā)送,需要配置SMTP(簡單郵件傳輸協(xié)議)服務(wù)。許多第三方郵箱提供了SMTP服務(wù)。這里以QQ郵箱為例介紹配置過程:實(shí)現(xiàn)過程第一步找到驗(yàn)證入口。如圖8-5所示,打開QQ郵箱,點(diǎn)擊右上角的設(shè)置圖標(biāo),選擇“賬戶”,然后找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)”,點(diǎn)擊“開啟服務(wù)”;接著,點(diǎn)擊“前往驗(yàn)證”。8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail配置QQ郵箱的SMTP服務(wù)為實(shí)現(xiàn)郵件的發(fā)送,需要配置SMTP(簡單郵件傳輸協(xié)議)服務(wù)。許多第三方郵箱提供了SMTP服務(wù)。這里以QQ郵箱為例介紹配置過程:實(shí)現(xiàn)過程第二步進(jìn)行短信驗(yàn)證。如圖8-5所示,掃描系統(tǒng)提供的二維碼,按照提示發(fā)送驗(yàn)證短信。發(fā)送成功后,點(diǎn)擊“我已發(fā)送”。8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail配置QQ郵箱的SMTP服務(wù)為實(shí)現(xiàn)郵件的發(fā)送,需要配置SMTP(簡單郵件傳輸協(xié)議)服務(wù)。許多第三方郵箱提供了SMTP服務(wù)。這里以QQ郵箱為例介紹配置過程:實(shí)現(xiàn)過程第三步復(fù)制授權(quán)碼。驗(yàn)證成功后,系統(tǒng)將彈出包含授權(quán)碼的窗口(為保護(hù)數(shù)據(jù)隱私,示例中已模糊處理授權(quán)碼)。在后續(xù)使用Python連接QQ郵箱服務(wù)器發(fā)送郵件時,請使用生成的授權(quán)碼進(jìn)行驗(yàn)證,而非QQ郵箱或QQ登錄密碼。8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail導(dǎo)入庫1importmimetypes2importsmtplib3fromemailimportencoders4fromemail.headerimportHeader5fromemail.mime.baseimportMIMEBase6fromemail.mime.multipartimportMIMEMultipart7fromemail.mime.textimportMIMEText8fromemail.utilsimportformataddr實(shí)現(xiàn)過程8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail設(shè)置SMTP信息9host=''10port=2511user='517699029'12passwd='請?zhí)顚憦腝Q郵箱獲得的真實(shí)授權(quán)碼'設(shè)置郵件信息13from_user_name='數(shù)據(jù)分析部門'14from_user='517699029@'15receivers=['517699029@','beijingtl@']16mail_subject='Python發(fā)送普通Email并附帶數(shù)據(jù)文件'17message='發(fā)送普通正文格式的Email,并附帶2個ZIP格式的數(shù)據(jù)文件'實(shí)現(xiàn)過程8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail構(gòu)造附件的函數(shù)18def_get_attach_msg(path):19ctype,encoding=mimetypes.guess_type(path)20ifctypeisNoneorencodingisnotNone:21ctype='application/octet-stream'22maintype,subtype=ctype.split('/',1)23withopen(path,'rb')asfp:24msg=MIMEBase(maintype,subtype)25msg.set_payload(fp.read())26encoders.encode_base64(msg)27msg.add_header('Content-Disposition','attachment',28filename=path.split('/')[-1])29returnmsg實(shí)現(xiàn)過程8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail構(gòu)造郵件正文和附件30files=['sales_data.zip','traffic_data.zip']31msg=MIMEMultipart()32msg['From']=formataddr((from_user_name,from_user))33msg['To']=','.join(receivers)#多個收件人用逗號分隔34msg['Subject']=Header(mail_subject,'utf-8').encode()35msg.attach(MIMEText(message,'plain','utf-8'))36foreach_fileinfiles:37msg.attach(_get_attach_msg(each_file))實(shí)現(xiàn)過程8.3通用信息傳遞:附帶數(shù)據(jù)文件發(fā)送E-mail發(fā)送郵件38smtp=smtplib.SMTP()39smtp.connect(host,port)40smtp.login(user,passwd)41smtp.sendmail(from_user,receivers,msg.as_string())42strs='sendamailto{0}with{1}attachments'.format(receivers,len(files))43print(strs)實(shí)現(xiàn)過程8.4富媒體溝通:發(fā)送帶HTML樣式的郵件應(yīng)用背景工作需求實(shí)現(xiàn)過程8.4富媒體溝通:發(fā)送帶HTML樣式的郵件在前一節(jié)中介紹的發(fā)送普通電子郵件的過程中,由于郵件正文缺乏樣式,因此無法承載復(fù)雜的可視化任務(wù)。在許多情況下,我們可以使用HTML格式來增強(qiáng)郵件的正文內(nèi)容可視化效果,從而更好地描述數(shù)據(jù)結(jié)論和洞察,實(shí)現(xiàn)展示數(shù)據(jù)價值的目的。應(yīng)用背景8.4富媒體溝通:發(fā)送帶HTML樣式的郵件本節(jié)將實(shí)現(xiàn)發(fā)送HTML格式的電子郵件。操作方式與前一節(jié)的案例基本類似,但這種格式可以提供更多樣化、內(nèi)容更豐富、效果更直觀的郵件內(nèi)容。工作需求8.4富媒體溝通:發(fā)送帶HTML樣式的郵件導(dǎo)入庫1importsmtplib2fromemail.headerimportHeader3fromemail.mime.multipartimportMIMEMultipart4fromemail.mime.textimportMIMEText5fromemail.utilsimportformataddr設(shè)置SMTP信息6host=''7port=258user='517699029'9passwd='請?zhí)顚憦腝Q郵箱獲得的真實(shí)授權(quán)碼'實(shí)現(xiàn)過程8.4富媒體溝通:發(fā)送帶HTML樣式的郵件設(shè)置郵件信息10from_user_name='數(shù)據(jù)分析部門'11from_user='517699029@'12receivers=['517699029@','beijingtl@']13mail_subject='Python發(fā)送HTML富媒體樣式的郵件'14message='發(fā)送HTML富媒體樣式的郵件'構(gòu)造郵件正文15msg=MIMEMultipart()16msg['From']=formataddr((from_user_name,from_user))17msg['To']=','.join(receivers)#多個收件人用逗號分隔18msg['Subject']=Header(mail_subject,'utf-8').encode()19withopen('html_content.txt',encoding='utf8')asfn:20message=fn.read()21msg.attach(MIMEText(message,'html','utf-8'))實(shí)現(xiàn)過程8.4富媒體溝通:發(fā)送帶HTML樣式的郵件發(fā)送郵件22smtp=smtplib.SMTP()23smtp.connect(host,port)24smtp.login(user,passwd)25smtp.sendmail(from_user,receivers,msg.as_string())26strs='sendamailto{0}withhtmlcontent'.format(receivers)27print(strs)實(shí)現(xiàn)過程8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)應(yīng)用背景工作需求實(shí)現(xiàn)過程8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)周期性工作中,可以通過系統(tǒng)自動調(diào)度的方式,執(zhí)行特定的Python腳本和數(shù)據(jù)任務(wù),從而解放重復(fù)和機(jī)械性勞動:(1)周期性數(shù)據(jù)提取。例如,每天從數(shù)據(jù)庫中提取昨日和最近7天的數(shù)據(jù),然后將其匯總為報表,并發(fā)送給指定的負(fù)責(zé)人。(2)自動數(shù)據(jù)備份。例如,每天自動將某個盤符下的所有文件打包并備份到另一個盤符的路徑下。(3)自動數(shù)據(jù)檢查。例如,自動從多個數(shù)據(jù)源獲取數(shù)據(jù)(通常是數(shù)據(jù)同步時使用的源數(shù)據(jù)和目標(biāo)數(shù)據(jù)),然后通過固定的規(guī)則比對數(shù)據(jù)的差異性,并及時通知特定人員發(fā)現(xiàn)的數(shù)據(jù)異常等情況。應(yīng)用背景8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)本應(yīng)用旨在實(shí)現(xiàn)自動數(shù)據(jù)備份的需求。具體要求是從D盤中獲取指定目錄的內(nèi)容,并通過Windows系統(tǒng)的自動任務(wù)調(diào)度,每天將數(shù)據(jù)備份到D盤的其他目錄下。工作需求8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)導(dǎo)入庫1importos2importzipfile3fromdatetimeimportdatetime4importlogging定義備份數(shù)據(jù)源以及目標(biāo)信息5src_paths=[r'D:\[書籍]Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)\04附件\第8章\sales_data',r'D:\[書籍]Python數(shù)據(jù)處理、分析、可視化與數(shù)據(jù)化運(yùn)營(第二版)\04附件\第8章\traffic_data']6backup_dir=r'D:\BK'7timestamp=datetime.now().strftime("%Y%m%d%H%M%S")實(shí)現(xiàn)過程8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)創(chuàng)建目標(biāo)數(shù)據(jù)目錄8ifnotos.path.exists(backup_dir):9os.makedirs(backup_dir)創(chuàng)建日志信息10log_file=os.path.join(backup_dir,f'backup_{timestamp}.log')11logging.basicConfig(filename=log_file,level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s')實(shí)現(xiàn)過程8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)執(zhí)行單次備份12forsrc_pathinsrc_paths:13try:14zip_file_name=os.path.join(backup_dir,f"{os.path.basename(src_path)}_{timestamp}.zip")15withzipfile.ZipFile(zip_file_name,'w')aszipf:16forfolder_name,_,file_namesinos.walk(src_path):17forfile_nameinfile_names:18file_path=os.path.join(folder_name,file_name)19zipf.write(file_path,os.path.relpath(file_path,src_path))20(f"備份完成:{src_path}->{zip_file_name}")21exceptExceptionase:22logging.error(f"備份失敗:{src_path}->{zip_file_name},錯誤信息:{e}")實(shí)現(xiàn)過程8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)設(shè)置Windows系統(tǒng)定時任務(wù)實(shí)現(xiàn)過程在Windows系統(tǒng)中,按下Win+R組合鍵打開“運(yùn)行”對話框,輸入taskschd.msc并按下回車鍵打開任務(wù)計劃程序窗口。然后單擊右側(cè)的“創(chuàng)建基本任務(wù)”,創(chuàng)建新的任務(wù)8.5自動化任務(wù):Python腳本與數(shù)據(jù)任務(wù)設(shè)置Windows系統(tǒng)定時任務(wù)實(shí)現(xiàn)過程在創(chuàng)建新任務(wù)的過程中,需要配置以下幾個關(guān)鍵步驟:(1)設(shè)置名稱和描述:建議設(shè)置具有區(qū)分性的名稱,并在描述中簡單介紹任務(wù)的功能。(2)設(shè)置觸發(fā)器:選擇任務(wù)何時開始執(zhí)行,周期性任務(wù)調(diào)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論