數(shù)據(jù)采集與預處理 課件 學習單元3-5 使用Kettle進行數(shù)據(jù)遷移和采集、使用Python進行數(shù)據(jù)存儲、使用Python進行數(shù)據(jù)處理_第1頁
數(shù)據(jù)采集與預處理 課件 學習單元3-5 使用Kettle進行數(shù)據(jù)遷移和采集、使用Python進行數(shù)據(jù)存儲、使用Python進行數(shù)據(jù)處理_第2頁
數(shù)據(jù)采集與預處理 課件 學習單元3-5 使用Kettle進行數(shù)據(jù)遷移和采集、使用Python進行數(shù)據(jù)存儲、使用Python進行數(shù)據(jù)處理_第3頁
數(shù)據(jù)采集與預處理 課件 學習單元3-5 使用Kettle進行數(shù)據(jù)遷移和采集、使用Python進行數(shù)據(jù)存儲、使用Python進行數(shù)據(jù)處理_第4頁
數(shù)據(jù)采集與預處理 課件 學習單元3-5 使用Kettle進行數(shù)據(jù)遷移和采集、使用Python進行數(shù)據(jù)存儲、使用Python進行數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩136頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

使用Kettle進行數(shù)據(jù)遷移和采集學習單元3單元概述本單元學習利用ETL工具Kettle進行數(shù)據(jù)遷移和采集,運用Kettle的轉(zhuǎn)換和作業(yè)等基本單元,完成一個業(yè)務表向分析表的遷移,并利用目標表所需,對源表數(shù)據(jù)進行處理。通過本單元學習,可以了解數(shù)據(jù)庫ETL(抽取(extract)、轉(zhuǎn)換(transform)、加載(load))的基本概念,掌握Kettle轉(zhuǎn)換和作業(yè)的的基本操作和靈活應用。本學習單元以某校園小商品交易系統(tǒng)為例,通過業(yè)務表向分析表的遷移為例,分別通過數(shù)據(jù)預處理和遷移、定時執(zhí)行作業(yè)兩個任務學習Kettle工具中的轉(zhuǎn)換和作業(yè)。教學目標了解應用系統(tǒng)數(shù)據(jù)轉(zhuǎn)換遷移的必要性和相關理論知識。順利完成數(shù)據(jù)遷移工作與上下級溝通,學會協(xié)調(diào)各種硬軟件資源。掌握常用的kettle開源數(shù)據(jù)遷移工具,進一步深化數(shù)據(jù)庫知識和工具的理解與應用。任務1使用Kettle工具進行數(shù)據(jù)遷移任務描述

軟件項目開發(fā)中,經(jīng)常需要對接其它關聯(lián)的軟件系統(tǒng)或者舊系統(tǒng)進行新業(yè)務開發(fā)或分析處理,這個過程中需要將源數(shù)據(jù)庫的數(shù)據(jù)進行預處理后,通過自定義的程序或者ETL工具進行遷移或?qū)С觥?/p>

本任務的目標是對某校園商品交易系統(tǒng)的數(shù)據(jù)進行分析,將業(yè)務數(shù)據(jù)庫中的商品表(goods)的數(shù)據(jù)按照分析的需要遷移到另外一個數(shù)據(jù)庫的分析表goods_bak中。關鍵技術(shù)點是通過Kettle工具中的轉(zhuǎn)換,對所需源數(shù)據(jù)庫和目標數(shù)據(jù)庫進行連接,采集所需要的字段和數(shù)據(jù),運行轉(zhuǎn)換,完成數(shù)據(jù)的預處理和遷移工作。任務分析1.Kettle的安裝

使用Kettle之前必須安裝JDK環(huán)境,這里選擇安裝JDK1.8。具體JDK安裝步驟參照本書“Nutch爬取數(shù)據(jù)”部分JDK1.8版本的安裝。任務實施Kettle可以在/網(wǎng)站下載到。下載好Kettle以后,直接解壓,默認文件夾為data-integration。打開解壓文件夾,可以看到文件夾下的文件。任務實施其中,spoon.bat為Windows系統(tǒng)下的啟動文件,spoon.sh為Linux系統(tǒng)下的啟動文件。雙擊spoon.bat可看到以下啟動界面:任務實施2.使用Kettle創(chuàng)建轉(zhuǎn)換

(1)創(chuàng)建一個簡單的轉(zhuǎn)換

針對MySQL數(shù)據(jù)庫建立一個簡單的轉(zhuǎn)換,這個轉(zhuǎn)換的實例是把一個商品交易系統(tǒng)數(shù)據(jù)庫market中的物品表goods的一些數(shù)據(jù)拷貝到market_log數(shù)據(jù)庫中的goods_bak表。任務實施2.使用Kettle創(chuàng)建轉(zhuǎn)換

(1)創(chuàng)建一個簡單的轉(zhuǎn)換

針對MySQL數(shù)據(jù)庫建立一個簡單的轉(zhuǎn)換,這個轉(zhuǎn)換的實例是把一個商品交易系統(tǒng)數(shù)據(jù)庫market中的物品表goods的一些數(shù)據(jù)拷貝到market_log數(shù)據(jù)庫中的goods_bak表。任務實施1)創(chuàng)建一個轉(zhuǎn)換點擊文件-新建-轉(zhuǎn)換,或點擊左上角+號新建轉(zhuǎn)換任務實施2)連接到market和market_log數(shù)據(jù)庫在新建好的轉(zhuǎn)換1左側(cè)菜單主對象樹里,右擊DB連接,可以新建數(shù)據(jù)庫連接,這里分別新建了兩個連接conn_market和conn_market_log。連接好以后應該會在DB連接中出現(xiàn)兩個數(shù)據(jù)庫連接。任務實施3)在核心對象的輸入中拖入一個表輸入,并雙擊表輸入對其進行屬性設置。任務實施4)在核心對象中拖入插入/更新組件5)按住shift從表輸入到插入/更新6)然后在對插入/更新進行配置,在用來查詢的關鍵字中需要設置連接的字段。7)最后保存,并運行這個轉(zhuǎn)換,如右下圖顯示,表示采集成功。數(shù)據(jù)遷移技術(shù)概述必備知識序號數(shù)據(jù)遷移方法方法簡述舉例1邏輯卷數(shù)據(jù)鏡像方法對需要遷移的每個卷都做邏輯卷數(shù)據(jù)鏡像如IBMLVM,Veritas,VxVM2直接拷貝方法利用操作系統(tǒng)命令直接拷貝要遷移的數(shù)據(jù),然后復制到要遷移到的目的地如IBMAIXtar,dd,savevg,mksysb,cpio等命令3備份恢復方法利用備份管理軟件對數(shù)據(jù)做備份,然后恢復到目的地如

IBMTSM,EMCLegatoNetWorker,Symantec,VeritasNetBackup等4數(shù)據(jù)庫工具方法使用數(shù)據(jù)庫的自身工具對數(shù)據(jù)進行遷移如OracleExport/Import,

OracleDataGuard,

GoldenGate,OracleLogminer,Quest,SharePlex5存儲虛擬化的方法通過存儲虛擬化技術(shù)將數(shù)據(jù)從源端遷移到目的地如

EMC

Invista、IBM的

SVC

LSI

StoreAge,SVM等6盤陣內(nèi)復制方法通過盤陣內(nèi)的復制軟件,將數(shù)據(jù)源卷復制到數(shù)據(jù)目標卷如

EMC

TimeFinder,

IBMFlashCopy,HDS,ShadowImage等7直接的陣列到陣列復制方法通過盤陣復制軟件對數(shù)據(jù)做遷移如

EMC

SRDF,HDS

的TrueCopy,IBM

的GlobalMirror

等8歷史數(shù)據(jù)和異構(gòu)數(shù)據(jù)間遷移方法通過數(shù)據(jù)提取、轉(zhuǎn)移、裝載工具或定制程序進行裝載Kettle、Spoop、Flume等ETL是英文Extract-Transform-Load的縮寫,用來描述將數(shù)據(jù)從來源端經(jīng)過抽?。╡xtract)、轉(zhuǎn)換(transform)、加載(load)至目的端的過程。常見于數(shù)據(jù)倉庫開發(fā)中將數(shù)據(jù)由業(yè)務系統(tǒng)歸集到數(shù)據(jù)倉庫(DW)或者數(shù)據(jù)集市的過程。在ETL三個部分中,一般情況下,花費時間最長的是“T”(Transform,清洗、轉(zhuǎn)換)的部分。(1)抽取作業(yè)將從源數(shù)據(jù)庫(通常為業(yè)務系統(tǒng))獲得數(shù)據(jù)的過程。(2)轉(zhuǎn)換作業(yè)這一步包含了數(shù)據(jù)的清洗和轉(zhuǎn)換。數(shù)據(jù)清洗是過濾不符合條件或者錯誤的數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)換包含了簡單的數(shù)據(jù)不一致轉(zhuǎn)換,數(shù)據(jù)粒度轉(zhuǎn)換和耗時的數(shù)據(jù)關聯(lián)整合或拆分動作。(3)加載作業(yè)(4)流程控制抽取加載和轉(zhuǎn)換作業(yè)需要一個集中的調(diào)度平臺控制他們的運行,決定執(zhí)行順序,進行錯誤捕捉和處理。常用的免費開源的ETL工具如下:1)Kettle可以管理來自不同數(shù)據(jù)庫的數(shù)據(jù),通過提供一個圖形化的用戶環(huán)境來描述你想做什么,而不是你想怎么做。

2)Sqoop主要用于在HADOOP與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql等)進行數(shù)據(jù)的傳遞。3)Flume用于將日志數(shù)據(jù)從各種網(wǎng)站服務器上匯集起來存儲到HDFS,HBase等集中存儲器中。Kettle簡介Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數(shù)據(jù)抽取高效穩(wěn)定。Kettle

中文名稱叫水壺,該項目的主程序員MATT

希望把各種數(shù)據(jù)放到一個壺里,然后以一種指定的格式流出。

它允許你管理來自不同數(shù)據(jù)庫的數(shù)據(jù),通過提供一個圖形化的用戶環(huán)境來描述你想做什么,而不是你想怎么做。

PDIClient啟動分為兩種:一種是安裝包方式安裝,然后在菜單欄中啟動,這種方式并不是我們想要的。另外一種是通過解壓zip包,然后通過啟動腳本spoon.bat或者spoon.sh啟動Spoon。任務拓展1.數(shù)據(jù)轉(zhuǎn)換處理對于新系統(tǒng)數(shù)據(jù)庫字段值不一致的情況,Kettle中的轉(zhuǎn)換提供了一系列數(shù)據(jù)處理的步驟,如字符串操作(去重,剪切等)、去除重復記錄、增加序列、增加常量等。例如,增加常量:字符串操作:以去除字段值前后的空格為例,如圖3-22,Trimtype的選項both去除前后空格,left去除左邊空格,right去除右邊空格值映射:2.使用腳本進行數(shù)據(jù)處理對于一些復雜的數(shù)據(jù)轉(zhuǎn)換,Kettle可以利用Java和Javascript等腳本進行數(shù)據(jù)的處理,例如,主鍵ID為的UUID標識字段,源數(shù)據(jù)庫是32位,目標系統(tǒng)在字符中加入了“-”成為了36位,可以利用Java腳本(前提要有JDK環(huán)境)進行處理。任務2利用kettle建立作業(yè),定時執(zhí)行轉(zhuǎn)換任務描述

對設計好的轉(zhuǎn)換,可能只是實現(xiàn)小部分功能,對于復雜業(yè)務,可能需要執(zhí)行多個轉(zhuǎn)換,而且對于需要頻繁進行數(shù)據(jù)采集和遷移的系統(tǒng),有必要進行定時自動運行。任務分析

本任務的目標是將之前的轉(zhuǎn)換以定時執(zhí)行的方式運行,關鍵技術(shù)點是通過Kettle工具中的作業(yè)組件進行配置。任務實施1.創(chuàng)建一個簡單的作業(yè)2.拖入開始組件,這里設置的間隔時間的2分鐘Start

是任務執(zhí)行的入口,首先必須是任務可以執(zhí)行。只有無條件的任務條目可以從Start入口連接。3.拖入轉(zhuǎn)換組件,將剛剛保存的轉(zhuǎn)換文件配置到Transformation屬性中。4.點擊運行按鈕,就可以運行配置的作業(yè)。需要注意的是,定時作業(yè)不能關閉spoon.bat窗口,可以將工具部署到服務器上,通過Linux的crontab定時執(zhí)行。必備知識kettle工具的腳本文件和主要組件Kettle中有兩種腳本文件,transformation(轉(zhuǎn)換,文件后綴名.ktr)和job(作業(yè),文件后綴名.kjb),transformation完成針對數(shù)據(jù)的基礎轉(zhuǎn)換,job則完成整個工作流的控制。

作業(yè)(Job),相較于轉(zhuǎn)換,是更加高級的操作。一個作業(yè)里包括多個作業(yè)項(JobEntry),一個作業(yè)項代表了一項工作,而轉(zhuǎn)換是一種作業(yè)項,即作業(yè)里面可以包括多個轉(zhuǎn)換。Kettle有三個主要組件:Spoon、Kitchen、PanSpoon:是一個圖形化的界面,可以讓我們用圖形化的方式開發(fā)轉(zhuǎn)換和作業(yè)。Kitchen:利用Kitchen可以使用命令行調(diào)用JobPan:利用Pan可以用命令行的形式調(diào)用TransCarte:Carte是一個輕量級的Web容器,用于建立專用、遠程的ETLServer。任務拓展Kettle的轉(zhuǎn)換和作業(yè)可以用命令行的方式來運行以Windows操作系統(tǒng)環(huán)境為例,轉(zhuǎn)換(.ktr)可以通過Pan.bat來運行的。在cmd命令行窗口下,轉(zhuǎn)到Pan.bat所在的目錄,如E:\data-integration,然后執(zhí)行上節(jié)任務創(chuàng)建的轉(zhuǎn)換文件tran_goods.ktr,命令為:Pan/fileE:\data-integration\ktr_goods.ktr作業(yè)(.kjb)的運行可以通過kitchen.bat來運行的。在cmd命令行窗口下,轉(zhuǎn)到kitchen.bat所在的目錄,如E:\data-integration,然后執(zhí)行前面建好的作業(yè)job_goods.kjb的命令為:kitchen/fileE:\data-integration\ktr_goods.ktr為方便運行,可以把運行命令寫入一個批處理文件(.bat)中。對應在Linux系統(tǒng)中,在Pan.sh和kitchen.sh文件所在目錄下執(zhí)行運行命令,也可以把多行命令寫入腳本文件(.sh)中以便批量運行。Theend謝謝!使用Python進行數(shù)據(jù)存儲學習單元4單元概述本單元學習利用列表、元組、Numpy數(shù)組對象、Series與DataFrame等多種不同形式對數(shù)據(jù)進行存儲,并能夠?qū)Σ煌瑪?shù)據(jù)源數(shù)據(jù)進行讀寫,最后能夠?qū)崿F(xiàn)對數(shù)據(jù)的合并操作。本單元圍繞“學生信息管理系統(tǒng)”多個功能模塊的設計與實現(xiàn),介紹了使用Python進行數(shù)據(jù)存儲及數(shù)據(jù)的基礎處理的相關知識與操作技能。教學目標了解數(shù)據(jù)存儲的幾種數(shù)據(jù)結(jié)構(gòu)。掌握列表、元素、集合、字典、Numpy與數(shù)組、Series與DataFrame的相關概念及基礎應用的相關理論知識。掌握常用的幾種開源數(shù)據(jù)存儲處理工具的下載、安裝與使用,利用各種工具高效完成不同數(shù)據(jù)源的數(shù)據(jù)讀取與數(shù)據(jù)合并。任務1利用列表、元組、集合與字典進行數(shù)據(jù)存儲

“學生信息管理系統(tǒng)”中存在許多基礎數(shù)據(jù),如學生的學號、姓名、電話等基本信息,以及由這些信息組成的學生記錄。在此,我們需要對這些基本信息以及由基本信息組成的記錄進行讀取、存儲與操作。首先通過鍵盤讀入一條記錄,記錄中各個不同類型的值以鍵值對方式存儲在字典中,每一條記錄又作為一個元素存儲到列表中。我們可以通過列表索引的方式訪問每一條記錄。本任務實現(xiàn)的關鍵點是數(shù)據(jù)存儲容器字典及列表的選取與數(shù)據(jù)的存儲過程。任務分析1、定義全局字典類型變量stuList,用來存儲學生信息:任務實施stuList=[]2、定義inputInfo函數(shù),利用列表和字典存儲結(jié)構(gòu)實現(xiàn)對學生信息管理系統(tǒng)學生信息的增加操作:definputInfo():print("請輸入學生的信息")flag=1i=1whileflag==1:print("請輸入第%d名學生信息"%i)student={}student['id']=input("請輸入學生學號")student['name']=input("請輸入學生姓名")student['tel']=input("請輸入學生電話")stuList.append(student)i=i+1flag=int(input("是否繼續(xù)錄入操作:1—>錄入,其他任意數(shù)字鍵退出"))print("所有學生信息為:")forstuinstuList:print(stu)3、定義searchStu函數(shù),利用列表和字典存儲結(jié)構(gòu)實現(xiàn)對學生信息管理系統(tǒng)學生信息的查詢操作,參考代碼如下:任務實施defsearchStu():print("歡迎進入信息搜索模塊")flag=1whileflag==1:position=int(input("根據(jù)位置搜索,請輸入要搜索學生的位置"))print("第%d名學生信息為%s"%(position,stuList[position-1]))flag=int(input("是否繼續(xù)搜索操作:1—>繼續(xù),其他任意數(shù)字鍵退出"))4、定義并調(diào)用welcome主函數(shù),該函數(shù)主要用來定義系統(tǒng)的歡迎界面及系統(tǒng)操作提示,函數(shù)內(nèi)部通過調(diào)用inputInfo函數(shù)和searchStu函數(shù),實現(xiàn)學生信息的增加和查詢操作,參考代碼如下:任務實施defwelcome():print("------------歡迎登錄學生信息管理系統(tǒng)------------")i=0whilei!=6:i=int(input("請選擇操作:1->錄入信息2->查詢學生信息6->退出"))ifi==1:inputInfo()elifi==2:searchStu()else:print("退出,歡迎您再次使用本系統(tǒng),ヾ( ̄▽ ̄)Bye~Bye~")breakwelcome()序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu),指的是一塊可存放多個值的連續(xù)內(nèi)存空間,這些值按一定順序排列,可通過每個值所在位置的編號(稱為索引)訪問它們。在Python序列的內(nèi)置類型中,最常見的市列表(list)和元組(tuple)。除此之外,Python還提供了兩種存儲數(shù)據(jù)的容器——集合(set)和字典(dict)。必備知識1.列表列表(list)是Python中的一種數(shù)據(jù)結(jié)構(gòu),它可以存儲不同類型的數(shù)據(jù)。創(chuàng)建列表的方式很簡單,只需要把逗號分隔的不同的數(shù)據(jù)項使用方括號括起來就可以了。必備知識list_stu=[‘001’,’Tom’,’male’,17,[‘math’,’A’],[‘PE’,’B’]]列表索引是從0開始,我們可以通過下標索引方式來訪問列表中的值,還可以使用分片(前包后不包)操作來訪問一定范圍內(nèi)的元素。list_num=[0,1,2,3,4,5,6,7,8,9]print(list_num[1])#打印自左向右第2個元素,輸出1print(list_num[-3])#打印自右向左第3個元素,輸出7print(list_num[3:6])#按索引分片,前包后不包,輸出[3,4,5]print(list_num[-3:-1])#從后面數(shù),前包后不包,輸出[7,8]print(list_num[1:8:2])#第3個參數(shù)表示索引為步長,輸出[1,3,5,7]除了可以通過索引下標和分片兩種方式直接對列表元素操作之外,列表常用函數(shù)如下:list()函數(shù):把元組等轉(zhuǎn)換為列表append()函數(shù):在列表末尾追加新的對象count()函數(shù):統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)extend()函數(shù):在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)index()函數(shù):從列表中找出某個值第一個匹配項的索引位置insert()函數(shù):將對象插入到列表pop()函數(shù):移除列表中的一個元素(默認最后一個元素),并且返回該元素的值remove()函數(shù):移除列表中某個值的第一個匹配項reverse()函數(shù):反向列表中元素必備知識2.元組元組(tuple)和列表(list)非常類似,但是元組的元素不能修改,且元組使用小括號包含元素而列表使用中括號包含元素。元組的創(chuàng)建很簡單,只需要在小括號中添加元素,并使用逗號分隔即可。必備知識tup1=(1,2,3,4,5)#定義了一個元組之后就無法再添加或修改元組中的元素tup2=()#定義一個空的元組tup3=(10,)#元組中有且只有一個元素注意:元組中只包含一個元素時,必須在元素后面添加逗號。如果不添加逗號,形如tup3=(10),表示定義的不是tuple,而是10這個數(shù)。因為小括號()既可以表示tuple,又可以表示數(shù)學公式中的小括號,這就產(chǎn)生了歧義。在這種情況下,python規(guī)定按數(shù)學公式中的小括號來進行處理。元組也可以通過下標索引來訪問元組的值,但不支持元素的增刪改操作。也可以用過for循環(huán)實現(xiàn)元素的遍歷,還可以通過函數(shù)計算元組元素個數(shù)、返回元組中最大值或者最小值等操作,基本操作如下:必備知識tup=(1,3,5,7)#定義元組print(tup[0])#通過索引打印元組第1個元素,輸出1fornumberintup:#遍歷元組元素,同一行輸出1357print(number,end="")print()#換行print(len(tup))#打印元組元素個數(shù),輸出4print(max(tup))#打印元組元素最大值,輸出7print(min(tup))#打印元組元素最小值,輸出13.集合集合(set)是一個無序、不重復元素集。創(chuàng)建時用逗號分隔不同元素值然后使用大括號{}括起來即可,或者使用set()函數(shù)創(chuàng)建集合。必備知識set1={10,2,3,4}#創(chuàng)建集合并賦值print(set1)#打印集合set1,元素輸出順序可能與定義順序不一致,如輸出{3,10,2,4}set2={2,1,3,1,4,2}#創(chuàng)建集合并賦值,所賦值中有重復元素print(set2)#打印集合set2,自動過濾掉重復元素,輸出{1,2,3,4}set3=set('hello')#將字符串轉(zhuǎn)換為集合print(set3)#打印集合set3,自動過濾掉重復元素,輸出{'o','l','e','h'}set4=set()#賦值空集合print(set4)#打印集合set4,輸出set()注意:創(chuàng)建一個空集合必須用set()而不是{},因為{}是用來創(chuàng)建一個空字典的。與字典相似,Python也提供了多種方法和函數(shù)用于集合的添加和刪除,集合對象還支持交集、差集、補集等數(shù)學運算。由于集合是無序的,所以set不支持索引、分片或其它類序列的操作?;静僮魅缦拢罕貍渲Rset_num1={1,2,3,4}#創(chuàng)建集合set_num1并賦值set_num1.add(5)#添加元素set_num1.update({4,5,6,7})#更新當前集合,自動忽略重復元素set_num1.discard(2)#刪除元素,若元素不存才則忽略該操作print(set_num1)#打印集合set_num1,輸出{1,3,4,5,6,7}set_num2={6,7,8,9,10}#創(chuàng)建集合set_num2并賦值print(set_num1&set_num2)#打印兩個集合的交集,輸出{6,7}print(set_num1|set_num2)#打印兩個集合的并集,輸出{1,3,4,5,6,7,8,9,10}4.字典Python中字典是一種通過名字來引用值的數(shù)據(jù)結(jié)構(gòu)。字典定義了鍵和值之間一對一的關系,它們是以無序的方式儲存的。字典的每個鍵值對用冒號分割,每個對之間用逗號分割,整個字典包括在花括號中,格式如下所示:必備知識d={key1:value1,key2:value2}必備知識字典中值可重復,但鍵必須是唯一的,如果重復最后的一個鍵值對會替換前面的鍵值對。我們可以通過鍵來訪問值,可以對字典中的元素進行增刪改查等操作。info={'name':'Steven','age':18,'sex':'male'}print(info['name'])#打印字典中鍵為'name'的元素的值,輸出Steveninfo['age']=19#修改字典中鍵為'age'的元素的值info['add.']='Paris'#字典中不存在名稱為'add.'的鍵,則字典中將會增加一個鍵值對print(info.keys())#打印字典中所有的鍵,輸出dict_keys(['name','age','sex','add.'])print(info.values())#打印字典中所有的值,輸出dict_values(['Steven',19,'male','Paris'])delinfo['sex']#刪除字典中鍵為'sex'的元素print(info)#打印刪除鍵為'sex'的元素后的字典中所有元素,#輸出{'name':'Steven','age':19,'add.':'Paris'}print(len(info))#打印字典的鍵值對個數(shù),輸出3info.clear()#清空字典中所有元素print(info)#打印清空字典后的字典元素顯示,輸出{}任務2利用Numpy數(shù)組對象進行數(shù)據(jù)存儲

“學生信息管理系統(tǒng)”中需要存儲兩個班的成績,同時,我們需要對兩個班的成績進行數(shù)據(jù)合并操作,并根據(jù)用戶需求對數(shù)據(jù)進行不同形式的輸出。首先我們利用ndarray存儲兩個班學生成績,然后調(diào)用hstack函數(shù)實現(xiàn)對兩個班學生成績進行數(shù)據(jù)合并,最后利用reshape函數(shù)改變數(shù)組的維度從而實現(xiàn)數(shù)據(jù)的不同形態(tài)的輸出。本任務實現(xiàn)的關鍵點是利用ndarray進行數(shù)據(jù)存儲。任務分析1、分別定義兩個班級的學生成績,將兩個班級的成績進行合并,參考代碼如下:任務實施importnumpyasnp#導入Numpy庫class1_score=[60,90,80,70,90,80]#定義第一個班學生成績class1_score_np=np.array(class1_score)#創(chuàng)建Numpy的array數(shù)組print("第一個班成績\n",class1_score_np)#輸出第一個班成績class2_score=[66,99,88,77,99,88]#定義第二個班學生成績class2_score_np=np.array(class2_score)#創(chuàng)建Numpy的array數(shù)組print("第二個班成績\n",class2_score_np)#輸出第二個班成績class_score_np=np.hstack((class1_score_np,class2_score_np))#合并兩個班成績2、將兩個班成績在一行輸出,參考代碼如下:print("成績在一行輸出\n",class_score_np)3、一行輸出一個班的成績,參考代碼如下:print("每行輸出一個班成績\n",class_score_np.reshape(2,6))Numpy的數(shù)據(jù)能夠保存任意類型數(shù)據(jù),這使得Numpy可以無縫并快速的整合各種數(shù)據(jù)。必備知識1.Numpy下載與安裝Numpy既可以通過安裝Python的發(fā)行版,直接調(diào)用軟件本身預裝的Numpy庫,也可以直接下載安裝Numpy。(1)Numpy的下載:打開官網(wǎng)網(wǎng)站下載。本案例中選擇的是numpy-1.17.0-cp37-cp37m-win_amd64.whl版本。這里cp37指對應本地計算機安裝的Python的版本,win_amd64指的是本地計算機安裝的是64位Windows操作系統(tǒng)必備知識1.Numpy下載與安裝(2)Numpy的安裝:安裝包下載完成后,打開cmd命令窗口,將命令行路徑切換到whl安裝包的存放目錄,運行如下命令:pipinstallnumpy-1.17.0-cp37-cp37m-win_amd64.whl當系統(tǒng)提示“successfullyinstallednumpy-1.17.0”時表示安裝成功。2.創(chuàng)建數(shù)組對象Numpy最重要的一個特點是其N維數(shù)組對象ndarray,它是一系列同類型數(shù)據(jù)的集合,以0下標為開始進行集合中元素的索引。ndarray對象是用于存放同類型元素的多維數(shù)組。ndarray中的每個元素在內(nèi)存中都有相同存儲大小的區(qū)域。ndarray內(nèi)部由以下內(nèi)容組成:一個指向數(shù)據(jù)(內(nèi)存或內(nèi)存映射文件中的一塊數(shù)據(jù)(data))的指針。數(shù)據(jù)類型或dtype,描述在數(shù)組中的固定大小值的格子。一個表示數(shù)組形狀(shape)的元組,表示各維度大小的元組。一個跨度元組(stride),其中的整數(shù)指的是為了前進到當前維度下一個元素需要“跨過”的字節(jié)數(shù)。必備知識2.創(chuàng)建數(shù)組對象ndarray的內(nèi)部結(jié)構(gòu)如下圖必備知識2.創(chuàng)建數(shù)組對象跨度可以是負數(shù),這樣會使數(shù)組在內(nèi)存中后向移動,切片中obj[::-1]或obj[:,::-1]就是如此。創(chuàng)建一個ndarray對象只需調(diào)用Numpy的array函數(shù)即可:numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)參數(shù)說明:object:表示想要創(chuàng)建的數(shù)組,無默認。dtype:數(shù)組元素的數(shù)據(jù)類型,如果未給定,則選擇保存對象所需的最小類型??蛇x,默認None。copy:對象是否需要復制,可選order:創(chuàng)建數(shù)組的樣式,C為行方向,F(xiàn)為列方向,A為任意方向(默認)subok:默認返回一個與基類類型一致的數(shù)組ndmin:指定生成數(shù)組應該具有的最小維數(shù)。默認為None:必備知識利用array函數(shù)創(chuàng)建數(shù)組并查看數(shù)組屬性,基本操作如下:必備知識importnumpyasnp#導入Numpy庫array1=np.array([1,2,3,4])#創(chuàng)建一維數(shù)組print("新創(chuàng)建的一維數(shù)組是\n",array1)#打印一維數(shù)組array2=np.array([[1,2,3,4],[5,6,7,8]])#創(chuàng)建二維數(shù)組print("新創(chuàng)建的二維數(shù)組是\n",array2)#打印二維數(shù)組print("數(shù)組維度是\n",array2.shape)#打印數(shù)組的結(jié)構(gòu)print("數(shù)組類型為:\n",array2.dtype)#打印數(shù)組類型print("數(shù)組元素個數(shù)\n",array2.size)#打印數(shù)組元素個數(shù)Numpy提供了很多專門用來創(chuàng)建數(shù)組的函數(shù),基本函數(shù)用法如下。必備知識(1)arange([start,]stop[,step],dtype=None):創(chuàng)建等差數(shù)組函數(shù),創(chuàng)建數(shù)組不含終值。(2)linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None):創(chuàng)建等差數(shù)列的函數(shù)(3)logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None):創(chuàng)建等比數(shù)列,和linspace函數(shù)類似。(4)zeros(shape,dtype=float,order='C'):創(chuàng)建值全部為0的數(shù)組。(5)eye(N,M=None,k=0,dtype=float):用創(chuàng)建成主對角線為1其他元素為0的數(shù)組。(6)ones(shape,dtype=None,order=’C’):用來創(chuàng)建元素全部為1的數(shù)組,用法與zeros相似。使用Numpy的基本函數(shù)創(chuàng)建數(shù)組,基本操作如下:必備知識importnumpyasnp#導入Numpy庫print("指定起始值、終值和步長創(chuàng)建等差數(shù)列一維數(shù)組")print(np.arange(1,10,4))print("指定起始值、終值和元素個數(shù)創(chuàng)建等差數(shù)列一維數(shù)組")print(np.linspace(1,10,4))print("指定起始值、終值和元素個數(shù)創(chuàng)建等比數(shù)列一維數(shù)組")print(np.logspace(1,4,4))#默認以10為底print("指定形狀的值全部為0的數(shù)組")print(np.zeros(4))#一個數(shù)值代表一維數(shù)組print(np.zeros((2,4),dtype=int))#兩個數(shù)值代表二維數(shù)組print("生成主對角線為1其他元素為0的數(shù)組")print(np.eye(4))3.生成隨機數(shù)數(shù)組Numpy提供了強大的生成隨機數(shù)的功能,與隨機數(shù)相關的函數(shù)都在random模塊中。常用的隨機數(shù)生成方法如下:(1)生成均分布的隨機數(shù)random.rand(d0,d1,d2……dn)(2)生成服從正態(tài)分布的隨機數(shù)random.randn(d0,d1,d2……dn)(3)生成給定上下限范圍的隨機數(shù)random.randint(low,high=None,size=None,dtype=’l’)必備知識基本應用示例如下:必備知識importnumpyasnp#導入Numpy庫print(np.random.rand())#生成一個范圍在[0,1)之間的浮點數(shù)print(np.random.rand(2))#生成一個隨機數(shù)均勻分布的一維數(shù)組,print(np.random.rand(2,3))#生成一個隨機數(shù)均勻分布的二維數(shù)組print(np.random.randn(2,3))#生成一個隨機數(shù)正態(tài)分布的二維數(shù)組,print(np.random.randint(1,10,size=[2,3]))#生成一個二維數(shù)組,元素是由[1,10)范圍的隨機數(shù)組成4.訪問數(shù)組(1)一維數(shù)組的訪問訪問方法與Python中的list的索引方法一致,和Python列表不同的是,操作原數(shù)組的子序列的時候,實際上就是操作原數(shù)組的數(shù)據(jù)。如果要執(zhí)行顯示的復制操作可以通過條用copy()函數(shù)。必備知識importnumpyasnp#導入numpy庫arr=np.arange(10)print("打印整個數(shù)組",arr)#輸出打印整個數(shù)組[0123456789]print("打印第5個元素",arr[5])#輸出打印第5個元素5print("打印第3~5個元素",arr[3:6])#切片索引,前包后不包輸出打印第3~5個元素[345]print("打印前5個元素",arr[:5])#切片索引,省略開始下標,默認從arr[0]開始,輸出打印前5個元素arr[2:5]=12,13,14#通過切片索引,可以同時修改數(shù)組的多個元素print("打印修改元素后的數(shù)組",arr)#打印修改元素后的數(shù)組[0112131456789]必備知識(2)多維數(shù)組的訪問多維數(shù)組的每一個維度都有一個引用,各個維度的索引之間用逗號隔開,基本操作如下:importnumpyasnp#導入numpy庫arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])#創(chuàng)建二維數(shù)組print("打印整個數(shù)組\n",arr2)print("打印第2行中第1列和第2列的元素\n",arr2[1,0:2])print("打印第2行、第3行中第1列和第2列的元素\n",arr2[1:,0:2])print("打印整個數(shù)組第2列的所有元素\n",arr2[:,1])5.數(shù)組的變換(1)改變數(shù)組的維度使用reshap()函數(shù)可以改變數(shù)組的維度,其參數(shù)為一個正整數(shù)元組,分別指定數(shù)組在每個維度上的大小。reshap()函數(shù)在改變原始數(shù)據(jù)形狀的同時不會改變原始數(shù)組的值。一定要注意:新數(shù)組元素數(shù)量與原數(shù)組元素數(shù)量一定要相等,如果指定的維度和數(shù)組元素數(shù)目不吻合,則函數(shù)將會拋出異常。必備知識importnumpyasnp#導入numpy庫arr3=np.arange(6)#創(chuàng)建一維數(shù)組print("打印一維數(shù)組形式\n",arr3)print("將一維數(shù)組變換為二維數(shù)組并輸出打印\n",arr3.reshape(2,3))print("變換前數(shù)組維度",arr3.ndim,"變換后數(shù)組維度",arr3.reshape(2,3).ndim)5.數(shù)組的變換(2)將多維數(shù)組變?yōu)橐痪S數(shù)組ravel()和flatten()函數(shù)都能夠?qū)⒍嗑S數(shù)組變?yōu)橐痪S數(shù)組其中flatten()返回一份拷貝,對拷貝所做的修改不會影響到原始數(shù)組數(shù)據(jù),而ravel()返回的是視圖,對其操作會影響到原始數(shù)組數(shù)據(jù)。必備知識importnumpyasnp#導入numpy庫arr4=np.arange(6).reshape(2,3)print("初始數(shù)組\n",arr4)print("利用flatten函數(shù)將多維數(shù)組變?yōu)橐痪S數(shù)組",arr4.flatten())arr4.flatten()[1]=0print("修改元素值不改變原數(shù)組中的值",arr4.flatten())print("利用ravel函數(shù)將多維數(shù)組變?yōu)橐痪S數(shù)組",arr4.ravel())arr4.ravel()[1]=10print("修改元素值會改變原數(shù)組中的值",arr4.ravel())5.數(shù)組的變換(3)數(shù)組組合數(shù)組的組合分為橫向組合和縱向組合,分別可由hstack()函數(shù)和vstack()函數(shù)實現(xiàn),而concatenate()函數(shù)即可實現(xiàn)橫向組合也可實現(xiàn)縱向組合。必備知識importnumpyasnp#導入numpy庫arr1=np.arange(4).reshape(2,2)arr2=np.arange(4,8).reshape(2,2)print("原始數(shù)組1\n",arr1)print("原始數(shù)組2\n",arr2)print("兩數(shù)組橫向組合\n",np.hstack((arr1,arr2)))#print("兩數(shù)組橫向組合\n",np.concatenate((arr1,arr2),axis=1))print("兩數(shù)組縱向組合\n",np.vstack((arr1,arr2)))#print("兩數(shù)組縱向組合\n",np.concatenate((arr1,arr2),axis=0))5.數(shù)組的變換(4)數(shù)組分割數(shù)組的分割也分為橫向分割和縱向分割,分別可由hsplit()函數(shù)和vsplit()函數(shù)實現(xiàn),而split()函數(shù)即可實現(xiàn)橫向分割也可實現(xiàn)縱向分割。必備知識importnumpyasnp#導入numpy庫arr1=np.arange(16).reshape(2,8)print("原始4行4列的二維數(shù)組\n",arr1)#print("橫向分割后的數(shù)組:\n",np.hsplit(arr1,2))print("橫向分割后的數(shù)組:\n",np.split(arr1,2,axis=1))print("縱向分割后的數(shù)組:\n",np.vsplit(arr1,2))#print("縱向分割后的數(shù)組:\n",np.split(arr1,2,axis=0))任務3利用Series與DataFrame進行數(shù)據(jù)存儲

在平時工作中,我們大多習慣用表格方式瀏覽數(shù)據(jù),同樣在“學生信息管理系統(tǒng)”中,我們需要用表格形式輸出學生成績。其要求為:列標題為課程名稱,即每一列表示各位學生本門課程成績;行標題為學生姓名,即每一行表示該學生各門課程成績。pandas是對表格數(shù)據(jù)模型在python上的模擬,它兼具Numpy高性能的數(shù)組計算功能以及電子表格和關系型數(shù)據(jù)庫(如SQL)靈活的數(shù)據(jù)處理能力。當學生信息管理系統(tǒng)中的部分數(shù)據(jù)需要以表格的模式進行展現(xiàn)時,我們可以選用pandas的Series或DataFrame。本任務中,我們首先可以利用DataFrame數(shù)據(jù)結(jié)構(gòu)以表格的模式存儲數(shù)據(jù),然后利用DataFrame內(nèi)部的一些屬性方法根據(jù)指定條件對數(shù)據(jù)進行篩選輸出。任務實現(xiàn)的關鍵點是DataFrame的數(shù)據(jù)存儲及數(shù)據(jù)訪問。任務分析1、將字典方式存儲的學生成績以表格模式進行輸出,參考代碼如下:任務實施importpandasaspdfrompandasimportDataFramedata={'語':{'小華':90,'小明':95,'小文':85},'數(shù)':{'小華':85,'小明':100,'小文':90},'體':{'小華':100,'小明':90,'小文':95}}frame1=DataFrame(data)print('學生總成績表輸出:\n',frame1)2、指定一列,單獨輸出語文成績,參考代碼如下:print('單獨輸出語文成績\n',frame1['語'])3、指定多列,同時輸出語文和體育成績,參考代碼如下:print('分別輸出語文、體育成績\n',frame1.loc[:,['語','體']])5、指定多行,同時輸出小明和小華的成績,參考代碼如下:任務實施print('分別輸出小明和小文的成績\n',frame1.loc['小明':'小文'])6、同時指定行和列,輸出小明、小文的語文、數(shù)學成績,參考代碼如下:print('輸出小明、小文的語文和數(shù)學成績\n',frame1.loc['小明':'小文',['語','數(shù)']])4、指定一行,單獨輸出小華的成績,參考代碼如下:print('單獨輸出小華的成績\n',frame1.loc['小華'])Series與DataFrame是pandas的兩種數(shù)據(jù)結(jié)構(gòu)。pandas是python的數(shù)據(jù)分析核心庫,它提供了一系列能夠快速、便捷的處理結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)。必備知識1.pandas下載與安裝pandas安裝方式有兩種:一種是自動安裝,一種是手動安裝。(1)自動安裝打開cmd命令窗口,然后直接在命令窗口中運行命令“pipinstallpandas”。(2)手動安裝登錄相關網(wǎng)站下載pandas的.whl安裝包,將.whl后綴改為.zip,解壓.zip文件,并放到“python的安裝目錄-->Lib-->site-packages”中,然后利用pip命令逐個安裝依賴包。必備知識2.SeriesSeries是一種類似于一維數(shù)組的對象,是由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成。僅由一組數(shù)據(jù)也可產(chǎn)生簡單的Series對象。注意:Series中的索引值是可以重復的。(1)創(chuàng)建Series對象一維數(shù)組創(chuàng)建通過字典創(chuàng)建標量創(chuàng)建必備知識2.Series(2)訪問Series索引及元素Series可以一次獲取所有元素的值,也可以通過索引一次訪問一個或多個元素的值,還可以同時獲取所有索引的值。importpandasaspddic1={'No.':'001','name':'Jack','age':16}ser1=pd.Series(dic1)print("輸出整個Series\n",ser1)print("Series中索引為'name'的元素值:",ser1['name'])print("同時輸出索引為'name'、‘a(chǎn)ge’對應的元素值:\n",ser1[['name','age']])print("Series中所有元素的值為:",ser1.values)print("eries中所有的索引的值為:",ser1.index)必備知識2.Series(3)Series的簡單運算在pandas的Series中,會保留NumPy的數(shù)組操作,并同時保持引用的使用。importpandasaspddic1={'num1':3,'num2':5,'num3':7,'num4':9}ser1=pd.Series(dic1)print("輸出ser1中所有元素值\n",ser1)print("輸出ser1中元素值大于5的所有元素值\n",ser1[ser1>5])ser2=ser1*2print("ser1中所有元素值乘以2:\n",ser2)ser3=ser1+ser2#相同索引值的元素相加print("ser1加ser2產(chǎn)生的新Series:\n",ser3)3.DataFrameDataFrame類型類似于數(shù)據(jù)庫表結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),包含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型等),DataFrame即有行索引也有列索引,可以被看作是由Series組成的字典。在其底層是通過二維以及一維的數(shù)據(jù)塊實現(xiàn):(1)創(chuàng)建DataFrame對象通過單個字典創(chuàng)建:用包含等長的列表或者是NumPy數(shù)組的字典創(chuàng)建DataFrame對象。通過嵌套的字典類型創(chuàng)建:該類DataFrame對象是由字典類型組成的嵌套字典類型作為參數(shù)生成的。必備知識必備知識3.DataFrame(2)訪問DataFrame內(nèi)容獲取列數(shù)據(jù)通過字典索引方式獲取:DataFrame對象名[‘列名’]以訪問屬性的方式獲?。篋ataFrame對象名.列名用loc方式訪問數(shù)據(jù):DataFrame對象名.loc[:,[‘列名1’,’列名2’,……,’列名N’]]必備知識3.DataFrame(2)訪問DataFrame內(nèi)容獲取行數(shù)據(jù)常用行標簽方式獲取一行數(shù)據(jù):DataFrame對象名.loc[‘行標簽名m’]獲取多行數(shù)據(jù)需要用到標簽切片方式:DataFrame對象名.loc[‘行標簽名m’:‘行標簽名n’]獲取多行、多列數(shù)據(jù),需要同時使用行標簽切片和列標簽名索引:DataFrame對象名.loc[‘標簽名m’:‘標簽名n’,[‘列名1’,’列名2’,……,’列名N’]]必備知識3.DataFrame(3)DataFrame的基本操作刪除某列或某行數(shù)據(jù),需要用到pandas提供的drop方法,基本用法如下:DataFrame.drop(labels,axis=0,level=None,inplace=False,errors=’raise’)增加行或列數(shù)據(jù),需要用到pandas提供的insert方法,基本用法如下:Dataframe.insert(loc,

column,

value,

allow_duplicates=False)任務4讀寫不同數(shù)據(jù)源數(shù)據(jù)

數(shù)據(jù)讀取是進行數(shù)據(jù)預處理、建模與分析的前提,在“學生信息管理系統(tǒng)”實際應用中,我們需要讀取CSV格式文本文件數(shù)據(jù),同時根據(jù)需要將數(shù)據(jù)轉(zhuǎn)換成Excel格式文件并對Eexcel文件進行打印輸出。不同數(shù)據(jù)源,需要使用不同的函數(shù)讀取。在本任務中,我們可以先調(diào)用pandas內(nèi)置函數(shù)read_csv讀取CSV格式文本文件數(shù)據(jù),并用pandas存儲結(jié)構(gòu)進行存儲,然后再調(diào)用內(nèi)置to_excel函數(shù)將存儲的數(shù)據(jù)轉(zhuǎn)換成Excel文件,最后通過內(nèi)置函數(shù)read_excel對轉(zhuǎn)換后的Excel文件數(shù)據(jù)進行打印輸出。任務分析1、通過pandas內(nèi)置的函數(shù)將學生信息管理系統(tǒng)中student_info1.csv的數(shù)據(jù)讀入到程序中,并將數(shù)據(jù)輸出打印,參考代碼如下:任務實施frompandasimportDataFrameimportpandasaspddf=pd.read_csv('student_info1.csv',encoding='gbk')print(df)2、將數(shù)據(jù)轉(zhuǎn)換成student_info1.xls文件進行備份,并讀取文件數(shù)據(jù),參考代碼如下:df.to_excel('student_info1.xls',index=0)df=pd.read_excel('student_info1.xls')print(df)pandas內(nèi)置了多種數(shù)據(jù)源讀取函數(shù)和對應的數(shù)據(jù)寫入函數(shù)。常見的數(shù)據(jù)源有3中,分別是數(shù)據(jù)庫數(shù)據(jù)、文本文件(包括一般文本文件和CSV文件)和Excel文件。必備知識1.讀取數(shù)據(jù)庫數(shù)據(jù)pandas提供了讀取和存儲關系型數(shù)據(jù)庫數(shù)據(jù)的函數(shù)和方法。除了pandas庫外,還需要使用SQLAlchemy庫建立對應的數(shù)據(jù)庫連接。下面以MySQL數(shù)據(jù)庫為例介紹pandas數(shù)據(jù)的讀取與存儲。(1)環(huán)境配置安裝SQLAlchemy在cmd命令窗口運行命令:pipinstallsqlalchemy該命令實現(xiàn)了SQLAlchemy的自動下載與安裝。安裝MySQL數(shù)據(jù)庫連接驅(qū)動在cmd命令窗口運行命令:pipinstallpymysql該命令實現(xiàn)了pymysql的自動下載與安裝。必備知識必備知識(2)數(shù)據(jù)庫連接在使用Python的SQLAlchemy連接MySQL數(shù)據(jù)庫時首先要調(diào)用create_engine函數(shù)建立與數(shù)據(jù)庫的鏈接引擎,基本格式如下:create_engine(‘數(shù)據(jù)庫產(chǎn)品+連接工具://用戶名:密碼@數(shù)據(jù)庫IP地址:數(shù)據(jù)庫端口號/數(shù)據(jù)庫名稱?charset=數(shù)據(jù)庫數(shù)據(jù)編碼’)例如:創(chuàng)建一個MySQL連接器,用戶名為root,密碼為root,連接本機數(shù)據(jù)庫IP地址格式為或localhost,數(shù)據(jù)庫端口號為3306,在MySQL中已經(jīng)建立好的數(shù)據(jù)庫名為studb,則函數(shù)具體格式為:create_engine('mysql+pymysql://root:root@localhost:3306/studb?charset=utf8')必備知識(3)數(shù)據(jù)庫數(shù)據(jù)讀取pandas實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)讀取有3個函數(shù),read_sql_table、read_sql_query和read_sql。read_sql_table只能夠讀取數(shù)據(jù)庫的某一個表,不能實現(xiàn)查詢操作;read_sql_query則只能實現(xiàn)查詢操作,不能直接讀取數(shù)據(jù)庫中的某個表;read_sql是兩者的綜合,既能夠讀取數(shù)據(jù)庫中的某一個表也能實現(xiàn)查詢操作三個函數(shù)的基本用法如下:pandas.read_sql_table(table_name,con,schema=None,index_col=None,coerce_float=True,columns=None)pandas.read_sql_query(sql,con,index_col=None,coerce_float=True)pandas.read_sql(sql,con,index_col=None,coerce_float=True,columns=None)必備知識示例利用read_sql_query查詢數(shù)據(jù)庫studb中所有表格列表,利用read_sql_table查詢stu_score表格中所有記錄,利用read_sql按條件篩選記錄。首先在MySQL數(shù)據(jù)庫中新建數(shù)據(jù)庫studb,創(chuàng)建stu_info和stu_score兩個表,表結(jié)構(gòu)和表數(shù)據(jù)如下圖所示:stu_info表結(jié)構(gòu)stu_info表數(shù)據(jù)stu_score表結(jié)構(gòu)stu_score表數(shù)據(jù)必備知識fromsqlalchemyimportcreate_engineimportpandasaspdengine=create_engine('mysql+pymysql://root:root@localhost:3306/studb?charset=utf8')tableList=pd.read_sql_query('showtables',con=engine)print("studb數(shù)據(jù)中的表格列表為:\n",tableList)data1=pd.read_sql_table('stu_score',con=engine)print("stu_score表中所有數(shù)據(jù)為:\n",data1)data2=pd.read_sql('SELECT*FROMstu_scoreWHERE數(shù)學=100',con=engine)print("stu_score表中數(shù)學成績?yōu)?00分的記錄為:\n",data2)代碼編寫及運行結(jié)果如下:必備知識(4)數(shù)據(jù)庫數(shù)據(jù)存儲將DataFrame寫入數(shù)據(jù)庫中,只需要一個函數(shù)to_sql,to_sql函數(shù)的基本用法如下:DataFrame.to_sql(name,con,schema=None,if_exists=’fail’,index=True,index_label=None,dtype=None)示例代碼如下:fromsqlalchemyimportcreate_engineimportpandasaspdengine=create_engine('mysql+pymysql://root:root@localhost:3306/studb?charset=utf8')tableList1=pd.read_sql_query('showtables',con=engine)print('數(shù)據(jù)庫中原始表格列表\n',tableList1)head=["語文","數(shù)學","英語"]content=[[90,98,96],[94,95,96],[98,87,89]]df=pd.DataFrame(content,columns=head)df.to_sql('score',con=engine,index=False,if_exists='replace')tableList2=pd.read_sql_query('showtables',con=engine)print('數(shù)據(jù)庫中增加表格后列表\n',tableList2)data=pd.read_sql_query("select*fromscore",con=engine)print('數(shù)據(jù)庫中新增加表格數(shù)據(jù)\n',data)必備知識2.讀取文本文件(1)文本文件的讀取

pandas提供了一些用于將表格型數(shù)據(jù)讀取為DataFrame對象的函數(shù),其中常用read_table和read_csv讀取文件。兩個函數(shù)均能實現(xiàn)從文件、URL、文件型對象中加載帶分隔符的數(shù)據(jù),不同之處是read_table默認分隔符是制表符(“\t”),read_csv默認分隔符是逗號。其基本用法如下:pandas.read_table(filepath,sep=’\t’,header=’infer’,names=None,index_col=None,dtype=None,encoding=utf-8,engine=None,nrows=None)pandas.read_csv(filepath,sep=’,’,header=’infer’,names=None,index_col=None,dtype=None,encoding=utf-8,engine=None,nrows=None)必備知識應用示例及運行結(jié)果:

importnumpyasnpfrompandasimportSeries,DataFrameimportpandasaspddf1=pd.read_table('student_info1.csv',encoding='gbk')print(df1)print("-"*60)df2=pd.read_csv('student_info1.csv',encoding='gbk')print(df2)必備知識(2)文本文件的存儲

文本文件的存儲和讀取類似,對于結(jié)構(gòu)化數(shù)據(jù),可以通過pandas中的to_csv函數(shù)實現(xiàn)以CSV文件格式存儲,函數(shù)基本語法參考如下:DataFrame.tocsv(path_or_buf=None,sep=',',na_rep='',columns=None,header=True,index=True,index_label=None,mode='w',encoding=None)importpandasaspdimportnumpyasnphead=["語文","數(shù)學","英語"]content=[[90,98,96],[94,95,96],[98,87,89]]df1=pd.DataFrame(content,columns=head)df1.to_csv("score.csv",encoding="GBK")必備知識3.讀取Excel文件(1)Excel文件的讀取

pandas依賴處理Excel的xlrd模塊來讀取數(shù)據(jù),安裝xlrd模塊只需打開cmd窗口,運行命令pipinstallxlrd即可。

pandas提供了read_excel函數(shù)來讀取“xls”“xlsx”兩種Excel文件,其基本用法如下:pandas.read_excel(io,sheetname=0,header=0,index_col=None,names=None,dtype=None)例如,讀取Excel文件student_info.xlsx數(shù)據(jù)基本過程及運行結(jié)果如下:importpandasaspddf=pd.read_excel('student_info.xlsx')print(df)必備知識3.讀取Excel文件(2)Excel文件的存儲

pandas依賴處理Excel的xlrd模塊來讀取數(shù)據(jù),安裝xlrd模塊只需打開cmd窗口,運行命令pipinstallxlwt即可。

pandas提供了to_excel函數(shù)來將文件存儲為Excel,其基本用法如下:pandas.to_excel(excel_writer=None,sheet_name=’None’,na_rep=’’,header=True,index=True,index_label=None,mode=’w’,encoding=None)importpandasaspddf=pd.read_excel('student_info.xlsx')df.to_excel('student_beifen.xls',index=0)任務5合并數(shù)據(jù)

在“學生信息管理系統(tǒng)”實際操作過程中,我們需要將兩個excel類型的源數(shù)據(jù)文件讀入到系統(tǒng)中,之后對兩個表的數(shù)據(jù)進行合并,最后將合并后的數(shù)據(jù)導出到一個新的excel文件中進行數(shù)據(jù)的保存。源文件student_list.xlsx截圖源文件student_score.xlsx截圖運行程序產(chǎn)生的合并文件student.xls截圖在數(shù)據(jù)處理過程中,經(jīng)常會有不同表格的數(shù)據(jù)需要進行合并操作,我們可以通過python下的pandas庫下的merge、concat方法也可以通過DataFrame的join、append等方法。在本任務中,我們可以調(diào)用read_excel函數(shù)先將“學生信息管理系統(tǒng)”中兩個excel文件的源數(shù)據(jù)讀入到系統(tǒng)中,之后調(diào)用merger函數(shù)實現(xiàn)了對兩個表的數(shù)據(jù)的合并,最后通過調(diào)用to_excel函數(shù)將合并后的數(shù)據(jù)導出到一個新的文件中進行數(shù)據(jù)的保存。本任務實現(xiàn)的關鍵點是利用merger方法實現(xiàn)數(shù)據(jù)集的合并以及文件數(shù)據(jù)的讀入與導出。任務分析1、利用數(shù)據(jù)讀取工具讀取學生信息列表文件student_list.xlsx和學生成績文件student_score.xlsx,參考代碼如下:任務實施importpandasaspd#讀取存儲學生信息student_list.xlsx文件df_list1=pd.read_excel('student_list.xlsx')#讀取存儲學生成績student_score.xlsx文件df_list2=pd.read_excel('student_score.xlsx')2、利數(shù)據(jù)合并工具將兩個文件按照學號、姓名相同字段進行合并,參考代碼如下:#合并兩個表格數(shù)據(jù)stu=pd.merge(df_list1,df_list2)3、將合并后數(shù)據(jù)輸出到新建文件student.xls中,參考代碼如下:#將合并后的數(shù)據(jù)存儲到student.xls文件中stu.to_excel('student.xls',index=0)必備知識1.基本函數(shù)簡介(1)merge方法通過鍵拼接列。該方法能夠類似于關系數(shù)據(jù)庫的連接(join)操作的,可以根據(jù)一個或多個鍵將不同DataFrame或Series中的行連接起來,語法如下:merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('_x','_y'),copy=True,indicator=False)(2)join方法用于實現(xiàn)有共同列的數(shù)據(jù)集的橫向拼接,join方法默認以index作為對齊的列,同時默認為左外連接how=left,基本語法如下:join(self,other,on=None,how=’left’,lsuffix=’’,rsuffix=’’,sort=False)必備知識1.基本函數(shù)簡介(3)concat方法沿著一條軸,將多個對象堆疊到一起。該方法不會去重,要達到去重的效果可以使用drop_duplicates方法,語法如下:concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False,copy=True)(4)append方法使用append方法實現(xiàn)縱向表合并有一個前提條件,那就是兩張表的列名需要完全一致,基本語法如下:append(self,other,ignore_index=False,verify_integrity=False)必備知識2.橫向合并應用橫向合并就是將兩個表在X軸方向拼接在一起。(1)橫向堆疊數(shù)據(jù)

將兩個數(shù)據(jù)集橫向堆疊可利用concat函數(shù)實現(xiàn),只需設置其參數(shù)axis=1即可;當兩個表索引不完全一樣時,可通過join指定內(nèi)連接還是外連接,同時還可以通過keys指出數(shù)據(jù)來源,此操作和兩個數(shù)據(jù)集是否有相同的列名沒有任何關系。必備知識(2)有相同列名的數(shù)據(jù)集數(shù)據(jù)合并具有相同列名的數(shù)據(jù)集數(shù)據(jù)合并可利用merge方法實現(xiàn),該方法可以通過一個或多個相同列名的列將兩個數(shù)據(jù)的行鏈接起來。若有多列名稱相同,系統(tǒng)會自動為左右兩個數(shù)據(jù)集中相同名稱的列名添加后綴,用戶也可通過方法的suffixes屬性為重復列指定后綴名;另外我們還可以通過join方法實現(xiàn),此時必須要為左右兩個數(shù)據(jù)集中相同名稱的列名指定后綴。(3)沒有相同列名的數(shù)據(jù)集合并要實現(xiàn)沒有相同列名的數(shù)據(jù)集合并,通過merge方法的left_on和right_on兩個屬性分別指定兩個列的名字即可,還可以通過join實現(xiàn)快速合并。必備知識3.縱向合并應用縱向合并就是將兩個數(shù)據(jù)集在Y軸方向拼接在一起。(1)列名完全相同的數(shù)據(jù)集列縱向堆疊

兩個數(shù)據(jù)集的列名完全相同的縱向堆疊數(shù)據(jù)即可利用concat函數(shù)實現(xiàn)也可以利用append實現(xiàn)。使用concat函數(shù)時,在默認情況下,即axis=0時,concat做列對齊。它實現(xiàn)將不同行索引的數(shù)據(jù)集合并,在兩個數(shù)據(jù)集的列名完全相同的情況下,系統(tǒng)會自動進行兩個數(shù)據(jù)集的縱向連接,當列名不完全相同的情況下,可以使用join參數(shù):取值為inner時,返回的僅僅是列名的交集所代表的列;取值為outer時,返回的是兩者列名的并集所代表的列。必備知識(2)列名不完全相同的數(shù)據(jù)集縱向堆疊

溫馨提示

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

評論

0/150

提交評論