財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 高教版 項(xiàng)目4、5 數(shù)據(jù)采集;數(shù)據(jù)預(yù)處理_第1頁
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 高教版 項(xiàng)目4、5 數(shù)據(jù)采集;數(shù)據(jù)預(yù)處理_第2頁
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 高教版 項(xiàng)目4、5 數(shù)據(jù)采集;數(shù)據(jù)預(yù)處理_第3頁
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 高教版 項(xiàng)目4、5 數(shù)據(jù)采集;數(shù)據(jù)預(yù)處理_第4頁
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 高教版 項(xiàng)目4、5 數(shù)據(jù)采集;數(shù)據(jù)預(yù)處理_第5頁
已閱讀5頁,還剩189頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

四數(shù)據(jù)采集項(xiàng)目項(xiàng)目四學(xué)習(xí)目標(biāo)知識(shí)目標(biāo)了解文件讀寫常用方法及函數(shù);熟悉網(wǎng)絡(luò)爬蟲原理及Web前端基礎(chǔ)內(nèi)容;掌握SQLite數(shù)據(jù)類型與sqlite3模塊操作;掌握Requests庫與BeautifulSoup模塊的使用方法。能力目標(biāo)能熟練使用Pandas的read_excel()、to_excel()等方法來讀取和寫入Excel文件;能熟練利用sqlite3模塊進(jìn)行數(shù)據(jù)庫的連接、表的創(chuàng)建以及數(shù)據(jù)庫內(nèi)容的讀取等操作;能利用Requests庫、結(jié)合for循環(huán)以及Pandas的read_excel()等方法,正確完成上市公司財(cái)務(wù)報(bào)表的獲取及讀取等操作。項(xiàng)目四學(xué)習(xí)目標(biāo)素質(zhì)目標(biāo)通過本單元學(xué)習(xí),讓學(xué)生領(lǐng)悟數(shù)據(jù)采集的重要性,引導(dǎo)學(xué)生樹立系統(tǒng)觀念,會(huì)用前瞻性思考、全局性謀劃、整體性推進(jìn)的科學(xué)思想方法;讓學(xué)生在體驗(yàn)簡單網(wǎng)頁爬取和網(wǎng)頁數(shù)據(jù)采集的同時(shí),培養(yǎng)執(zhí)著專注、精益求精、一絲不茍和追求卓越的工匠精神。項(xiàng)目四思維導(dǎo)圖4.1Python讀取數(shù)據(jù)文件文件是存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列,可以包含文本、數(shù)字、表格等多種類型的數(shù)據(jù)。用文件形式組織和表達(dá)數(shù)據(jù)是更有效也更靈活的方式。Python提供了對(duì)文件的基本操作,包括打開、讀取、寫入和關(guān)閉文件。4.1.1文件概述4.1Python讀取數(shù)據(jù)文件文件的含義1文件的分類2文本文件二進(jìn)制文件要打開一個(gè)txt文件,可以使用open('file','mode')函數(shù),其中第一個(gè)參數(shù)輸入要讀取的文件路徑,第二個(gè)參數(shù)是打開文件模式,文件模式類型如下表4-1所示。4.1.2讀寫txt文件4.1Python讀取數(shù)據(jù)文件打開txt文件1表4-1open()函數(shù)打開文件的模式模式含義r以只讀方式打開一個(gè)文件,為open()的默認(rèn)模式。w打開一個(gè)文件進(jìn)行寫入。如果文件不存在,則創(chuàng)建新文件;如果文件存在,則覆蓋該文件。x執(zhí)行文件的新建寫入,如果文件已存在,則操作失敗,并拋出異常。a追加寫入模式,如果文件已存在,則在后面追加內(nèi)容,如果文件不存在,則創(chuàng)建。t文本文件模式,為open()的默認(rèn)模式。b二進(jìn)制文件模式。+打開文件進(jìn)行更新(同時(shí)讀寫),與r、w、a、b一同出現(xiàn)。使用with語句打開文件,在代碼塊執(zhí)行完畢后自動(dòng)關(guān)閉文件。采用不同模式打開txt文件,代碼示例如下所示。4.1.2讀寫txt文件4.1Python讀取數(shù)據(jù)文件打開txt文件1行號(hào)1234代碼行#打開文件

withopen('example.txt','r')asf:#以只讀模式打開文件withopen('example.txt','w')asf:#打開文件進(jìn)行寫入#使用了with語句來打開文件,這樣可以在代碼塊執(zhí)行完畢后自動(dòng)關(guān)閉文件write()用于將單個(gè)字符串寫入文件writelines()可將一個(gè)字符串列表寫入文件中,但不會(huì)自動(dòng)換行,換行需要添加換行符\n寫入文本文件的操作函數(shù)有:寫入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件寫入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件例4-1代碼錄入

行號(hào)代碼行1#

打開文件進(jìn)行寫入

2withopen('example1.txt','w',encoding='utf-8')asf:3#

encoding='utf-8'指定編碼方式,防止編碼錯(cuò)誤4

f.write('我的名字是張三\n')#

寫入“我的名字是張三”,\n表示換行5

f.write('我今年20歲\n')

#

寫入“我今年20歲”

6

f.write('我喜歡編程')#

寫入“我喜歡編程”如何在Python中寫入txt文件,代碼例4-1、4-2所示。寫入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件例4-2代碼錄入

行號(hào)代碼行1withopen('example2.txt','w',encoding='utf-8')asf:2lines=['我的名字是張三\n','我今年20歲\n','我喜歡編程\n']3#將一個(gè)字符串列表寫入文件4f.writelines(lines)讀取txt文件內(nèi)容,通常使用:讀取txt文件34.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件read()readline()readlines()讀取txt文件3行號(hào)1234代碼行#打開文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.read()

#讀取文本print(data)#輸出所有文本內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件

read()函數(shù)用于一次性讀取整個(gè)文件的內(nèi)容,將文件內(nèi)容作為一個(gè)字符串返回。讀取上面創(chuàng)建的example1.txt,代碼例4-3所示。讀取txt文件3行號(hào)1234代碼行#打開文件withopen('example1.txt','r',encoding='utf-8')asf:print(f.readline())#讀取第一行的內(nèi)容print(f.readline())

#接著讀取第二行的內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件

readline()函數(shù)每次只讀取文件中的一行內(nèi)容,并返回這一行作為一個(gè)字符串。這對(duì)于處理大文件或需要逐行處理文件的場(chǎng)景非常有用。分行讀取上面創(chuàng)建的example1.txt,代碼例4-4所示。讀取txt文件3行號(hào)1234代碼行#打開文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.readlines()#讀取全部內(nèi)容,以數(shù)列的格式返回結(jié)果print(data)

#輸出所有文本內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫txt文件

readlines()函數(shù)會(huì)一次性讀取文件中的所有行,并將它們作為一個(gè)列表返回,其中列表的每個(gè)元素都是文件中的一行。一般適用于文件內(nèi)容不是非常大的情況,因?yàn)樗鼤?huì)將所有行都加載到內(nèi)存中。讀取上面創(chuàng)建的example1.txt,返回一個(gè)列表,代碼及運(yùn)行結(jié)果例4-5所示。使用Pandas的read_excel讀寫Excel文件14.1Python讀取數(shù)據(jù)文件4.1.3讀寫Excel文件

read_excel()是pandas庫中用于讀取Excel文件的函數(shù),它可以將Excel文件的內(nèi)容轉(zhuǎn)換為pandas的DataFrame對(duì)象,以便于進(jìn)行數(shù)據(jù)分析和處理,基本語法(列舉常用參數(shù)):

pd.read_excel(io

,

sheet_name=0

,

index_col=None)指定讀取的Excel文件路徑指定要讀取的工作表,可以是工作表的名稱,默認(rèn)值為0,表示讀取第一個(gè)工作表用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引

讀取名為班級(jí)學(xué)生信息.xlsx的Excel文件,代碼例4-6所示。使用Pandas的read_excel讀寫Excel文件1行號(hào)12345代碼行importpandasaspd#讀取文件班級(jí)學(xué)生信息.xlsx的第一個(gè)工作表df=pd.read_excel('班級(jí)學(xué)生信息.xlsx',sheet_name=0)#輸出內(nèi)容print(df)4.1Python讀取數(shù)據(jù)文件4.1.3讀寫Excel文件

to_excel()函數(shù)用于將DataFrame中的數(shù)據(jù)寫入Excel文件?;菊Z法(列舉常用參數(shù)):使用Pandas的to_excel寫入Excel文件24.1Python讀取數(shù)據(jù)文件4.1.3讀寫Excel文件df.to_excel(excel_writer

,

sheet_name='Sheet1'

,

index=True

,

header=True)指定工作表的名稱,默認(rèn)為'Sheet1'代表是否將DataFrame的行索引寫入Excel文件,默認(rèn)為True代表是否將DataFrame的列名寫入Excel文件,默認(rèn)為True指定要寫入的文件路徑JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于JavaScript的一個(gè)子集。由于其文本格式獨(dú)立于編程語言,JSON已成為許多類型的應(yīng)用程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)方法。JSON文件通常以.json為文件擴(kuò)展名。4.1.3讀寫JSON文件4.1Python讀取數(shù)據(jù)文件使用json.dump()函數(shù),將數(shù)據(jù)寫入JSON文件。4.1.3讀寫JSON文件寫入JSON文件14.1Python讀取數(shù)據(jù)文件json.dump(data,file,indent=4)將data編碼成JSON格式并寫入到file中是一個(gè)可選參數(shù),用于美化輸出,使JSON文件易于閱讀使用json.load()函數(shù),從JSON文件中讀取數(shù)據(jù)。讀取例4-9寫入的JSON文件,代碼例4-10所示。4.1.3讀寫JSON文件讀取JSON文件24.1Python讀取數(shù)據(jù)文件行號(hào)代碼行1importjson2#打開之前寫入的financial_data.json文件,'r'表示只讀模式3withopen('financial_data.json','r')asf:4#調(diào)用json.load()方法從文件中讀取JSON數(shù)據(jù),并將其存儲(chǔ)在data變量中5data=json.load(f)6#輸出數(shù)據(jù)以驗(yàn)證其正確性7print(data)8#data現(xiàn)在是一個(gè)Python字典4.2Python讀寫SQLite數(shù)據(jù)庫SQLite是輕量級(jí)的、磁盤上的數(shù)據(jù)庫,不需要獨(dú)立的服務(wù)器進(jìn)程,并允許訪問其數(shù)據(jù)庫通過包含在大多數(shù)編程語言中的庫。它是一個(gè)開源的、零配置、自給自足的、事務(wù)性的SQL數(shù)據(jù)庫實(shí)現(xiàn),特別適用于嵌入式系統(tǒng)、移動(dòng)設(shè)備、桌面應(yīng)用程序和中小型項(xiàng)目。4.2.1SQLite概述4.2Python讀寫SQLite數(shù)據(jù)庫4.2.1SQLite概述SQLite主要特點(diǎn)14.2Python讀寫SQLite數(shù)據(jù)庫自包含無需配置跨平臺(tái)小型事務(wù)性的4.2.1SQLite概述數(shù)據(jù)庫交互的基本操作24.2Python讀寫SQLite數(shù)據(jù)庫開始建立連接創(chuàng)建游標(biāo)對(duì)象執(zhí)行SQL語句關(guān)閉游標(biāo)關(guān)閉數(shù)據(jù)庫連接結(jié)束Python的sqlite3模塊是一個(gè)提供了輕量級(jí)磁盤上SQL數(shù)據(jù)庫的接口,使得Python開發(fā)者能夠方便地創(chuàng)建、查詢和管理SQLite數(shù)據(jù)庫。下面是sqlite3模塊中一些常用的API函數(shù):4.2.1SQLite概述Pythonsqlite3模塊的常用API34.2Python讀寫SQLite數(shù)據(jù)庫函數(shù)描述sqlite3.connect(database[,timeout,otheroptionalarguments])連接到SQLite數(shù)據(jù)庫,如果數(shù)據(jù)庫文件不存在,將會(huì)被創(chuàng)建。connection.cursor([cursorClass])創(chuàng)建游標(biāo)對(duì)象,游標(biāo)(Cursor)對(duì)象允許你發(fā)送SQL語句到數(shù)據(jù)庫cursor.execute(sql[,parameters])執(zhí)行SQL語句mit()提交當(dāng)前事務(wù)。如果你不調(diào)用這個(gè)方法,那么從上一次調(diào)用commit()方法以來所做的任何更改都不會(huì)被保存到數(shù)據(jù)庫。cursor.close()關(guān)閉游標(biāo)對(duì)象connection.close()關(guān)閉連接為了使用sqlite3模塊,首先必須創(chuàng)建一個(gè)表示數(shù)據(jù)庫的連接對(duì)象,然后可以有選擇地創(chuàng)建游標(biāo)對(duì)象,這將幫助執(zhí)行所有的SQL語句。建立連接并創(chuàng)建游標(biāo)對(duì)象使用的函數(shù):4.2.2連接數(shù)據(jù)庫4.2Python讀寫SQLite數(shù)據(jù)庫sqlite3.connect(database[,timeout,otheroptionalarguments])將data編碼成JSON格式并寫入到file中是一個(gè)可選參數(shù),表示連接等待鎖定的持續(xù)時(shí)間,直到發(fā)生異常斷開連接,默認(rèn)5.0其他參數(shù)都是可選的,用于控制連接的各個(gè)方面現(xiàn)在要在sqlite3模塊下連接test.db數(shù)據(jù)文件,并創(chuàng)建游標(biāo)對(duì)象,最后輸出連接數(shù)據(jù)庫。使用的代碼命令如例4-11所示。4.2.2連接數(shù)據(jù)庫4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1#導(dǎo)入sqlite3模塊2importsqlite33#連接到數(shù)據(jù)庫,數(shù)據(jù)庫文件是test.db4#如果數(shù)據(jù)庫不存在,將會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)庫對(duì)象5conn=sqlite3.connect('test.db')6#創(chuàng)建一個(gè)游標(biāo)對(duì)象,使用它來執(zhí)行SQL命令7c=conn.cursor()8print(‘連接數(shù)據(jù)庫’)connection.cursor([cursorClass])用于創(chuàng)建一個(gè)游標(biāo)(cursor)對(duì)象,該對(duì)象可以用來執(zhí)行SQL語句并獲取查詢結(jié)果。4.2.2連接數(shù)據(jù)庫4.2Python讀寫SQLite數(shù)據(jù)庫connection.cursor([cursorClass])是一個(gè)可選參數(shù),允許指定一個(gè)自定義的cursor類,但通常你可以省略這個(gè)參數(shù),從而得到一個(gè)標(biāo)準(zhǔn)的cursor對(duì)象SQLite中新建表格的操作是數(shù)據(jù)庫設(shè)計(jì)的基礎(chǔ)部分,它允許在數(shù)據(jù)庫中定義一個(gè)結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)容器,即表格(Table)。每個(gè)表格由多個(gè)列(Columns)構(gòu)成,這些列定義了表格可以存儲(chǔ)的數(shù)據(jù)類型。使用CREATETABLE語句創(chuàng)建表格語法如下所示:4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫創(chuàng)建表格1行號(hào)代碼行1CREATETABLEtable_name(2column1datatypePRIMARYKEY,3column2datatypeNOTNULL,4column3datatypeDEFAULT0,5...6columnNdatatype,);現(xiàn)創(chuàng)建一個(gè)表格名為COMPANY,包含ID、NAME、AGE、ADDRESS、SALARY五列。使用的代碼命令與結(jié)果如例4-12所示:4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫創(chuàng)建表格1行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3print("數(shù)據(jù)庫打開成功")4#創(chuàng)建光標(biāo)對(duì)象5c=conn.cursor()6#創(chuàng)建一個(gè)表:COMPANY,c.execute是PYthon中用于執(zhí)行SQL語句的方法,'''用來定義多行字符串7c.execute('''CREATETABLECOMPANY8(IDINTPRIMARYKEYNOTNULL,9NAMETEXTNOTNULL,4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫創(chuàng)建表格110AGEINTNOTNULL,11ADDRESSCHAR(50),12SALARYREAL);''')13print("數(shù)據(jù)表創(chuàng)建成功")14#提交事務(wù):15mit()16#關(guān)閉連接:17conn.close()創(chuàng)建表格之后,可以使用INSERTINTO語句來插入數(shù)據(jù)。以下是INSERTINTO語句的幾種基本用法:4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引插入數(shù)據(jù)2第一種語法方式如下:行號(hào)代碼行1INSERTINTOtable_name(column1,column2,column3,...)2VALUES(value1,value2,value3,...);3#在這里,column1,column2,...columnN是要插入數(shù)據(jù)的表中的列的名稱。第二種語法方式如下:行號(hào)代碼行1INSERTINTOTABLE_NAMEVALUES(value1,value2,value3,...valueN);現(xiàn)將員工信息使用sqlite3模塊插入數(shù)據(jù)到SQLite數(shù)據(jù)庫中,代碼例4-13所示。4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫插入數(shù)據(jù)2行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫打開成功")5c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\6VALUES(1,'Paul',32,'California',20000.00)")7c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\8VALUES(2,'Allen',25,'Texas',15000.00)")現(xiàn)將員工信息使用sqlite3模塊插入數(shù)據(jù)到SQLite數(shù)據(jù)庫中,代碼例4-13所示。4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫插入數(shù)據(jù)2行號(hào)代碼行9c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\10VALUES(3,'Teddy',23,'Norway',20000.00)")11c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\12VALUES(4,'Mark',25,'Rich-Mond',65000.00)")13#提交事務(wù)到數(shù)據(jù)庫14mit()15print("數(shù)據(jù)插入成功")16#最后關(guān)閉數(shù)據(jù)庫連接17conn.close()通過pandas中的read_sql讀取數(shù)據(jù)庫內(nèi)容,代碼例4-14所示。4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫插入數(shù)據(jù)2行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df通過pandas中的read_sql讀取數(shù)據(jù)庫內(nèi)容,代碼例4-14所示。4.2.3編寫表格4.2Python讀寫SQLite數(shù)據(jù)庫插入數(shù)據(jù)3行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df在SQLite中讀取數(shù)據(jù)通常涉及使用SELECT語句來查詢數(shù)據(jù)庫中的表,并獲取滿足特定條件的數(shù)據(jù)行。SELECT語句的基本語法如下:4.2.4讀取數(shù)據(jù)4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1SELECTcolumn1,column2,...2FROMtable_name3WHEREcondition4ORDERBYcolumnASC/DESCSELECT:指定要檢索的列。使用星號(hào)(*)可以選擇所有列。FROM:指定要查詢數(shù)據(jù)的表名。WHERE:(可選)指定選擇條件。如果省略,將返回表中的所有行。ORDERBY:(可選)指定結(jié)果的排序方式??梢园匆粋€(gè)或多個(gè)列進(jìn)行排序,并指定排序的方向:升序(ASC)或降序(DESC)。下面的例4-15顯示了如何從前面創(chuàng)建的表中獲取并顯示記錄。4.2.4讀取數(shù)據(jù)4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫打開成功")5cursor=c.execute("SELECTid,name,address,salaryfromCOMPANY")6forrowincursor:7print("ID=",row[0])8print("NAME=",row[1])9print("ADDRESS=",row[2])10print("SALARY=",row[3])11print("\n")12print("數(shù)據(jù)操作成功")13conn.close()在SQLite中修改表中的數(shù)據(jù),主要是通過使用UPDATE語句來完成的。UPDATE語句可以讓你更改表中一行或多行的一個(gè)或多個(gè)列的值。使用UPDATE語句修改表格記錄語法如下所示:4.2.5數(shù)據(jù)修改4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1UPDATEtable_name2SETcolumn1=value1,column2=value2,...3WHEREcondition;table_name是要更新數(shù)據(jù)的表名SET關(guān)鍵字后跟著列名和新值。你可以一次更新多個(gè)列WHERE子句是可選的,用于指定哪些記錄需要被更新。如果省略WHERE子句,表中的所有記錄都將被更新。例如:使用UPDATE語句將員工Paul的工資修改為25000,代碼例4-16所示。4.2.5數(shù)據(jù)修改4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫打開成功")5#將員工Paul的工資修改為250006c.execute("UPDATECOMPANYsetSALARY=25000.00whereNAME='Paul';")7mit()8print("數(shù)據(jù)操作成功")9conn.close()通過pandas讀取數(shù)據(jù)庫文件,代碼如下。4.2.5數(shù)據(jù)修改4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6dfSQLite的DELETE語句用于從數(shù)據(jù)庫表中刪除行。這個(gè)操作可以使用帶有WHERE子句的DELETE來刪除選定行,否則所有的記錄都會(huì)被刪除。使用時(shí)要小心,因?yàn)橐坏﹫?zhí)行了DELETE操作,被刪除的數(shù)據(jù)就不能恢復(fù)了?;镜腄ELETE語法如下:4.2.6數(shù)據(jù)刪除4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1DELETEFROMtable_name2WHERE[condition];table_name是想要?jiǎng)h除數(shù)據(jù)的表名condition指定哪些行將被刪除的條件。如果省略該條件,表中的所有行都將被刪除?,F(xiàn)將上面創(chuàng)建的COMPANY表使用DELETE語句刪除名字為Paul的記錄,然后獲取并顯示剩余的記錄,代碼例4-18所示。4.2.6數(shù)據(jù)刪除4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫打開成功")5#刪除名字為Paul這條記錄6c.execute("DELETEfromCOMPANYwhereNAME='Paul';")7mit()8#查詢刪除信息后表中的數(shù)據(jù)9cursor=conn.execute("SELECTid,name,address,salaryfromCOMPANY")10forrowincursor:11print("ID=",row[0])12print("NAME=",row[1])13print("ADDRESS=",row[2])14print("SALARY=",row[3])15print("\n")16print("數(shù)據(jù)操作成功")17conn.close()通過pandas讀取數(shù)據(jù)庫文件,代碼如下:4.2.6數(shù)據(jù)刪除4.2Python讀寫SQLite數(shù)據(jù)庫行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df4.3網(wǎng)頁數(shù)據(jù)采集4.3.1網(wǎng)絡(luò)爬蟲4.3網(wǎng)頁數(shù)據(jù)采集

網(wǎng)絡(luò)爬蟲也稱作網(wǎng)絡(luò)蜘蛛(Spider)、網(wǎng)頁機(jī)器人,是一種按照一定的規(guī)則從網(wǎng)頁中提取信息的程序或腳本。網(wǎng)絡(luò)爬蟲廣泛應(yīng)用于搜索引擎、數(shù)據(jù)分析、在線價(jià)格監(jiān)測(cè)、網(wǎng)站數(shù)據(jù)備份等領(lǐng)域。4.3.1網(wǎng)絡(luò)爬蟲4.3網(wǎng)頁數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲的分類1通用網(wǎng)絡(luò)爬蟲聚焦網(wǎng)絡(luò)爬蟲增量式網(wǎng)絡(luò)爬蟲深層網(wǎng)絡(luò)爬蟲4.3.1網(wǎng)絡(luò)爬蟲4.3網(wǎng)頁數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲的一般工作流程2確定目標(biāo)頁面抓取數(shù)據(jù)提取數(shù)據(jù)存儲(chǔ)4.3.1網(wǎng)絡(luò)爬蟲4.3網(wǎng)頁數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲的規(guī)范31.合法性2.道德性3.透明性4.安全性5.隱私保護(hù)6.版權(quán)意識(shí)4.3.1網(wǎng)絡(luò)爬蟲4.3網(wǎng)頁數(shù)據(jù)采集URL4URL即統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上的資源地址,用于標(biāo)識(shí)和定位這些資源,無論是網(wǎng)頁、圖片還是視頻等。簡單來說,就是我們?cè)跒g覽器地址欄中輸入的那一串字符,它就像是互聯(lián)網(wǎng)上的“門牌號(hào)”或“地址”。通過這個(gè)地址,我們可以找到并訪問互聯(lián)網(wǎng)上的各種資源。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集HTML1HTML即超文本標(biāo)記語言,是用于創(chuàng)建網(wǎng)頁的標(biāo)準(zhǔn)標(biāo)記語言。它的設(shè)計(jì)目的是讓文檔具有結(jié)構(gòu)化標(biāo)記和文本鏈接,使其具有跨平臺(tái)的可交互性和可讀性。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引HTML1HTML文檔由元素構(gòu)成,這些元素基于它們的標(biāo)簽類型,對(duì)內(nèi)容進(jìn)行了不同的描述和組織。常用HTML標(biāo)簽如下表所示:標(biāo)簽含義<!DOCTYPEhtml>聲明為HTML5文檔<html>根元素,包裹整個(gè)HTML文檔<body>包含所有顯示在瀏覽器中的內(nèi)容,如文本、圖片、鏈接等<head>包含文檔的元數(shù)據(jù)<h1>、<h2>、<h3>…標(biāo)題,<h1>是最高級(jí)標(biāo)題<p>段落標(biāo)簽<ahref="...">鏈接標(biāo)簽<ul>、<ol>、<li>列表標(biāo)簽,<ul>用于創(chuàng)建無序列表,<ol>用于創(chuàng)建有序列表,<li>表示列表項(xiàng)<table>表格<imgsrc="..."alt="...">圖像標(biāo)簽,用于嵌入圖片4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引下面是一個(gè)基礎(chǔ)的HTML網(wǎng)頁結(jié)構(gòu),代碼例4-20所示。在文本中將下列HTML文檔寫入并保存,文件命名:我的簡單網(wǎng)頁.html。打開文件結(jié)果如下所示。行號(hào)代碼行1<!DOCTYPEhtml>2<html>3<head>4<title>我的簡單網(wǎng)頁</title>5</head>6<body>7<h1>歡迎來到我的網(wǎng)頁</h1>8<p>這是一個(gè)HTML示例。</p>9<ahref="">點(diǎn)擊這里訪問</a>10<br>11<h2>我的興趣愛好</h2>12<ul>13<li>閱讀</li>14<li>編程</li>15<li>旅行</li>16</ul>17</body>18</html>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引CSS2CSS(層疊樣式表,CascadingStyleSheets)是一種用于描述HTML或XML文檔的外觀和格式的樣式表語言。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS21.引入CSS(1)內(nèi)聯(lián)樣式CSS代碼直接寫在現(xiàn)有的HTML標(biāo)記中,直接使用style屬性改變樣式?,F(xiàn)將<p>標(biāo)簽中的文本“這是一段紅色文字?!痹O(shè)置為紅色,如下所示。行號(hào)代碼行1<pstyle="color:red;">這是一段紅色文字。</p>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引CSS21.引入CSS(2)內(nèi)部樣式表在HTML的<head>標(biāo)簽內(nèi)使用<style>標(biāo)簽定義樣式,適用于單個(gè)文檔的樣式定義。現(xiàn)將整個(gè)<body>元素的背景顏色設(shè)置為淡藍(lán)色(lightblue),如下所示。行號(hào)代碼行1<style>2body{3background-color:lightblue;4}5</style>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS21.引入CSS(3)外部樣式表將CSS寫在外部文件中,然后通過HTML的<link>標(biāo)簽引入。這是最常用且推薦的方式,因?yàn)樗梢栽诙鄠€(gè)頁面間共享CSS。<link>是一個(gè)HTML元素,專門用于在HTML文檔中鏈接到外部的CSS樣式表文件。行號(hào)代碼行1<linkrel="stylesheet"href="styles.css">4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS22.CSS語法CSS規(guī)則集包含了一個(gè)選擇器和一個(gè)聲明塊。選擇器指向HTML文檔中要樣式化的元素。聲明塊包含一個(gè)或多個(gè)聲明,每個(gè)聲明由一個(gè)屬性和一個(gè)值組成,用冒號(hào)分隔,整個(gè)聲明塊用大括號(hào)包裹,語法結(jié)構(gòu)如下所示。行號(hào)代碼行1selector{2property:value;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS23.選擇器選擇器(CSSSelectors)是CSS中用于選擇并樣式化HTML元素的部分。CSS選擇器有12多種類型,每種都有其特定的用途和語法。下面列舉一些常見的CSS選擇器類型:4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS23.選擇器(1)元素選擇器

它基于HTML元素的名稱來選擇元素,如p、div。例如,選擇頁面上的所有<p>元素,并將它們的文本顏色設(shè)置為藍(lán)色,如下所示。1代碼行1p{2color:blue;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS23.選擇器(2)ID選擇器

它使用HTML元素的id屬性來選擇單個(gè)元素,以#開頭,后跟ID名。例如,#myID選擇id屬性為“myID”的元素,如下所示。行號(hào)代碼行1#myID{2font-size:20px;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS23.選擇器(3)類選擇器

它使用HTML元素的class屬性來選擇元素。類選擇器以點(diǎn)(.)開頭。例如,.myClass選擇所有class屬性為“myClass”的元素,如下所示。行號(hào)代碼行1.myClass{2background-color:yellow;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS23.選擇器(4)屬性選擇器

它選擇具有指定屬性和值的HTML元素。例如,[type="text"]選擇所有type屬性為“text”的輸入元素,如下所示。行號(hào)代碼行1[type="text"]{2border:1pxsolidblack;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS24.CSS屬性4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集CSS2接下來我們將上面創(chuàng)建的:我的簡單網(wǎng)頁.html使用CSS進(jìn)行修飾和美化,代碼例4-21所示。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集XPath(XMLPathLanguage)是一種在XML文檔中查找信息的語言。網(wǎng)絡(luò)爬蟲中,經(jīng)常使用XPath來提取網(wǎng)頁中的信息。XPath通過路徑表達(dá)式來選擇節(jié)點(diǎn),這些表達(dá)式可以從文檔的根節(jié)點(diǎn)開始,也可以從任意節(jié)點(diǎn)開始。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集XPath3XPath節(jié)點(diǎn)(1)元素(2)屬性(3)文本(4)命名空間(5)處理指令(6)注釋(7)文檔(根)節(jié)點(diǎn),樹的根被稱為文檔節(jié)點(diǎn)或者根節(jié)點(diǎn)。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集XPath節(jié)點(diǎn)行號(hào)代碼行1<?xmlversion="1.0"encoding="ISO-8859-1"?>2<CATALOG>3<PLANT>4<COMMON>Bloodroot</COMMON>5<BOTANICALlang="en">Sanguinariacanadensis</BOTANICAL>6<ZONE>4</ZONE>7<LIGHT>MostlyShady</LIGHT>8<PRICE>$2.44</PRICE>9<AVAILABILITY>031599</AVAILABILITY>10</PLANT>11</CATALOG>父節(jié)點(diǎn):PLANT元素子節(jié)點(diǎn):COMMON、BOTANICAL、ZONE、LIGHT、PRICE、AVAILABILITY元素父的父節(jié)點(diǎn):CATALOG元素4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁數(shù)據(jù)采集XPath語法XPath使用路徑表達(dá)式來選取XML文檔中的節(jié)點(diǎn)或節(jié)點(diǎn)集。表4-5節(jié)點(diǎn)選取常用的路徑表達(dá)式路徑表達(dá)式效果CATALOG選取CATALOG元素的所有子節(jié)點(diǎn)/CATALOG選取根元素CATALOGCATALOG/PLANT選取屬于CATALOG的子元素的所有PLANT元素//PLANT選取所有PLANT子元素,而不管他們?cè)谖臋n中的位置CATALOG//PLANT選擇屬于CATALOG元素的后代的所有PLANT元素,而不管他們位于CATALOG之下的什么位置//@lang選取名為lang的所有屬性4.3.3Requests庫4.3網(wǎng)頁數(shù)據(jù)采集Requests庫是一個(gè)基于Python語言編寫的,用于發(fā)送HTTP請(qǐng)求的第三方庫。Requests庫支持非常豐富的鏈接訪問功能。4.3.3Requests庫4.3網(wǎng)頁數(shù)據(jù)采集Requests模塊可以支持HTTP協(xié)議中的全部請(qǐng)求方式,HTTP常用請(qǐng)求方式有GET、POST、PUT、DELETE、HEAD、OPTION,其中以GET請(qǐng)求最為常用,函數(shù)如下所示:4.3.3Requests庫4.3網(wǎng)頁數(shù)據(jù)采集下面編寫一個(gè)簡單的Python腳本來發(fā)送一個(gè)GET請(qǐng)求到百度的首頁,并打印出獲取到的HTML內(nèi)容,代碼例4-24所示。行號(hào)代碼行1importrequests2#百度首頁的URL3url=''4#發(fā)送GET請(qǐng)求5response=requests.get(url)6#檢查請(qǐng)求是否成功7ifresponse.status_code==200:8#打印網(wǎng)頁的HTML內(nèi)容,以字符串形式輸出,以前500個(gè)字符作為示例9print(response.text[:500])10else:11print(f"Error:Unabletofetchwebpage,statuscode{response.status_code}")4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集安裝BeautifulSoup1BeautifulSoup模塊是第三方模塊(BeautifulSoup4是最新版本),需要額外進(jìn)行安裝,一般有兩種安裝方式:1.使用pip進(jìn)行安裝,安裝命令為:pipinstallbeautifulsoup42.可以通過下載源碼的方式進(jìn)行安裝,下載鏈接是:/pypi/beautifulsoup4/。運(yùn)行下面命令即可完成安裝:pythonsetupinstall。4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集創(chuàng)建BeautifulSoup對(duì)象2

首先導(dǎo)入BeautifulSoup模塊,并指定一個(gè)解析器。然后,你可以使用BeautifulSoup類來解析HTML或XML文檔。常用的函數(shù)為:BeautifulSoup(html,’lxml’)BeautifulSoup(html,’html.parser’)html代表要解析的網(wǎng)頁源代碼html.parser、lxml分別代表不同的解析器以百度網(wǎng)頁HTML源代碼示例,進(jìn)行創(chuàng)建BeautifulSoup對(duì)象的基本解析操作,使用的代碼及運(yùn)行結(jié)果如例4-26所示。4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集BeautifulSoup對(duì)象種類3TagNavigableStringBeautifulSoupComment4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集BeautifulSoup對(duì)象種類3以例4-26中百度網(wǎng)頁HTML源代碼示例,使用它們來獲取標(biāo)簽的名稱、屬性、內(nèi)容等信息,代碼及運(yùn)行結(jié)果如例4-27所示。運(yùn)行結(jié)果<ahref="">百度新聞</a>None<title>百度一下,你就知道</title>{'href':''}百度新聞4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集搜索文檔樹4(1)訪問元素的內(nèi)容和屬性

創(chuàng)建BeautifulSoup對(duì)象后,如何輕松提取我們需要的信息,BeautifulSoup定義了很多搜索方法,find_all()和find()是最常用的兩個(gè):find_all(name,attrs,recursive,string,limit,**kwargs)find(name,attrs,recursive,string,**kwargs)4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集搜索文檔樹4(2)其他搜索函數(shù)函數(shù)功能find_parents()find_parent()find_parents和find_parent函數(shù)用來搜索當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。兩者的區(qū)別是:find_parents返回所有符合條件的父節(jié)點(diǎn):find_parent只返回匹配的第一個(gè)。find_next_siblings()find_next_sibling()find_next_siblings和find_next_sibling函數(shù)返回符合條件的后面兄弟節(jié)點(diǎn)。兩者的區(qū)別是:find_next_siblings會(huì)返回所有符合條件的兄弟節(jié)點(diǎn);find_next_sibling只會(huì)返回匹配的第一個(gè)。find_previous_siblings()find_previous_sibling()這兩個(gè)方法都是返回當(dāng)前Tag的前面兄弟節(jié)點(diǎn)。兩者的區(qū)別是:find_previous_siblings方法返回所有的符合條件的前面的兄弟節(jié)點(diǎn);find_previous_sibling方法返回第一個(gè)符合條件的兄弟節(jié)點(diǎn)。4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集遍歷文檔樹5以例4-26中百度網(wǎng)頁HTML源代碼示例,文檔樹結(jié)構(gòu)如下圖所示:[html]headbodytitlediv

aapdiv

根節(jié)點(diǎn)子節(jié)點(diǎn)4.3.4BeautifulSoup模塊4.3網(wǎng)頁數(shù)據(jù)采集遍歷文檔樹5

要獲取這段HTML源代碼中的子節(jié)點(diǎn)可以使用.contents和.children兩個(gè)屬性。.contents獲取的直接子節(jié)點(diǎn)以列表方式返回,可以列表的方法對(duì)節(jié)點(diǎn)進(jìn)行篩選和操作。.children屬性返回迭代器,操作與.contents屬性相似,以.contents為例,代碼如例4-30所示:運(yùn)行結(jié)果.contents的數(shù)據(jù)類型是:<class'list'>head元素的直接子節(jié)點(diǎn)有:['\n',<metacharset="utf-8"/>,'\n',<title>百度一下,你就知道</title>,'\n']title標(biāo)題的內(nèi)容是:百度一下,你就知道拓展學(xué)習(xí)4.3網(wǎng)頁數(shù)據(jù)采集CSS選擇器1通過CSS也可以定位元素位置。在寫CSS時(shí),標(biāo)記名不用任何修飾,類名前加“.”,id名前加“#”,也可以利用類似的方法篩選元素,用到的方法:soup.select(),返回list。通過標(biāo)記名稱可以直接查找、逐層查找,也可以找到某個(gè)標(biāo)記的直接子標(biāo)記和兄弟節(jié)點(diǎn)標(biāo)記。以百度網(wǎng)頁為例,代碼例4-31所示。行號(hào)代碼行1importrequests2importsys3importre4frombs4importBeautifulSoup5res=requests.get("")6res.encoding="utf-8"7soup=BeautifulSoup(res.text,'lxml',from_encoding='utf-8')8print(soup.select("form"))#直接查找form標(biāo)記9print(soup.select("formspaninput"))#逐層查找input標(biāo)記10print(soup.select("div#u1>a"))#查找id為u1下的所有a標(biāo)簽11print(soup.select("#u1+.mnav"))#查找緊跟著id為u1之后class=mnav的子標(biāo)記拓展學(xué)習(xí)4.3網(wǎng)頁數(shù)據(jù)采集lxml的xpath解析2BeautifulSoup可以將lxml作為默認(rèn)的解析器,同樣lxml也可以單獨(dú)使用。BeautifulSoup用起來簡單,API人性化,支持CSS選擇器,相對(duì)于lxml解析器,開發(fā)效率會(huì)高。但是也不是絕對(duì)的,如果你熟練使用xpath的話,使用lxml是更好的選擇。下面使用lxml庫來解析網(wǎng)頁,示例如下:行號(hào)代碼行1importrequests2fromlxmlimportetree3res=requests.get("")4res.encoding="utf-8"5html=etree.HTML(res.text)6img_elements=html.xpath("http://div[@id='head']/descendant::img")#使用更寬泛的XPath表達(dá)式7#遍歷查詢到的img元素,并嘗試打印它們的src屬性8forimginimg_elements:9src=img.get('src')#獲取src屬性10ifsrc:#如果src屬性存在則打印11print(src)12else:13print("該img元素沒有src屬性")感謝觀看五數(shù)據(jù)預(yù)處理項(xiàng)目項(xiàng)目六學(xué)習(xí)目標(biāo)知識(shí)目標(biāo)理解NumPy的含義、數(shù)據(jù)類型和Ndarray創(chuàng)建方法;掌握NumPy數(shù)組的創(chuàng)建、操作、算術(shù)運(yùn)算和統(tǒng)計(jì)方法;掌握Pandas的引入、Series和DataFrame的創(chuàng)建與基本操作;精通處理數(shù)據(jù)中的重復(fù)、缺失、類型轉(zhuǎn)換問題,及數(shù)據(jù)連接方法。能力目標(biāo)能正確利用NumPy庫的算術(shù)函數(shù)進(jìn)行運(yùn)算;能正確利用DataFrame的函數(shù),進(jìn)行DataFrame的創(chuàng)建、增刪列等基本操作;能正確利用Pandas庫的read_excel()讀取數(shù)據(jù)、fillna()填充缺失值等操作。項(xiàng)目六學(xué)習(xí)目標(biāo)素質(zhì)目標(biāo)在協(xié)同進(jìn)行數(shù)據(jù)預(yù)處理時(shí),培養(yǎng)學(xué)生的團(tuán)隊(duì)協(xié)作精神和集體意識(shí)。在NumPy創(chuàng)建數(shù)組、算術(shù)計(jì)算中,培養(yǎng)學(xué)生嚴(yán)謹(jǐn)認(rèn)真的態(tài)度。在進(jìn)行數(shù)據(jù)清洗過程中,要求學(xué)生堅(jiān)持誠實(shí)守信、弘揚(yáng)誠信文化,強(qiáng)化誠信為本、不弄虛作假的職業(yè)道德。項(xiàng)目六思維導(dǎo)圖5.1NumPy數(shù)值計(jì)算NumPy(NumericalPython的簡稱)是一個(gè)開源的Python數(shù)值計(jì)算庫,它支持大量的維度數(shù)組和矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算強(qiáng)大的N維數(shù)組對(duì)象NumPy特點(diǎn)15.1.1NumPy概述5.1NumPy數(shù)值計(jì)算廣播功能使用方便高性能NumPy數(shù)據(jù)類型25.1.1NumPy概述5.1NumPy數(shù)值計(jì)算bool用于表示邏輯值,即真(True)或假(False)int用于表示整數(shù)值。根據(jù)存儲(chǔ)大小和范圍,它可以有不同的類型uint表示無符號(hào)整數(shù),即不包含負(fù)數(shù)的整數(shù)。float用于表示浮點(diǎn)數(shù)值,即帶有小數(shù)點(diǎn)的數(shù)值。complex用于表示復(fù)數(shù)值,包含實(shí)部和虛部。數(shù)據(jù)類型對(duì)象(dtype)是一個(gè)系統(tǒng)用來描述數(shù)組中元素類型的對(duì)象。數(shù)據(jù)類型對(duì)象(dtype)31.了解dtype5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算(1)數(shù)據(jù)類型(2)大?。?)字節(jié)順序(4)形狀數(shù)據(jù)類型對(duì)象(dtype)32.創(chuàng)建dtype對(duì)象行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)整數(shù)類型的NumPy數(shù)組3int_array=np.array([1,2,3,4],dtype=32)4#創(chuàng)建一個(gè)浮點(diǎn)類型的NumPy數(shù)組5float_array=np.array([1.1,2.2,3.3,4.4],dtype=np.float64)6#創(chuàng)建一個(gè)復(fù)數(shù)類型的NumPy數(shù)組7complex_array=np.array([1+2j,3+4j],dtype=plex128)8print(int_array)9print(float_array)10print(complex_array)5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算數(shù)據(jù)類型對(duì)象(dtype)33.自定義dtype自定義dtype允許定義一個(gè)包含多個(gè)字段的數(shù)據(jù)類型,每個(gè)字段可以有自己的數(shù)據(jù)類型、名稱和字節(jié)順序。自定義dtype對(duì)象是使用以下語法構(gòu)造的:numpy.dtype(object,align,copy)指要轉(zhuǎn)換為的數(shù)據(jù)類型對(duì)象align如果為true,填充字段使其類似C的結(jié)構(gòu)體copy是復(fù)制dtype對(duì)象,如果為false,則是對(duì)內(nèi)置數(shù)據(jù)類型對(duì)象的引用5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算數(shù)據(jù)類型對(duì)象(dtype)33.自定義dtype行號(hào)代碼行1importnumpyasnp2#定義一個(gè)自定義dtype3custom_dtype=np.dtype([4

('姓名','U10'),#長度為10的Unicode字符串5

('年齡',32),#32位整數(shù)字段6

('體重',np.float64)#雙精度浮點(diǎn)數(shù)字段7])8#使用自定義dtype創(chuàng)建結(jié)構(gòu)化數(shù)組9data=np.array([10

('王歡',30,65.5),11

('蘭英',25,75.0),12

('付杰',35,85.5)13],dtype=custom_dtype)14#訪問結(jié)構(gòu)化數(shù)組中的字段15print(data['姓名'])#訪問'姓名'字段16print(data['年齡'])#訪問'年齡'字段17print(data['體重'])#訪問'體重'字段5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算數(shù)據(jù)類型對(duì)象(dtype)34.字節(jié)順序當(dāng)處理來自不同硬件平臺(tái)的數(shù)據(jù)時(shí),字節(jié)順序變得重要??梢栽赿type中指定字節(jié)順序:<表示數(shù)據(jù)是小端序,>表示數(shù)據(jù)是大端序。下面定義一個(gè)小端序的int64數(shù)據(jù)類型,代碼如例5-3所示。行號(hào)代碼行1importnumpyasnp2#預(yù)設(shè)字節(jié)順序3dt=np.dtype('<i8')4print(dt)5.1.1NumPy概述5.1NumPy數(shù)值計(jì)算Ndarray(N-dimensionalarray)對(duì)象是NumPy庫的核心數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和操作大型多維數(shù)組與矩陣。Ndarray是一個(gè)快速、靈活的大數(shù)據(jù)容器,可以存儲(chǔ)單一數(shù)據(jù)類型的大量數(shù)據(jù),并提供了一系列操作這些數(shù)據(jù)的方法。5.1.2Ndarray對(duì)象5.1NumPy數(shù)值計(jì)算5.1.2Ndarray對(duì)象5.1NumPy數(shù)值計(jì)算Ndarray內(nèi)部組成11.數(shù)據(jù)指針

2.數(shù)據(jù)類型(dtype)

3.形狀(shape)

4.跨度(strides)5.1.2Ndarray對(duì)象5.1NumPy數(shù)值計(jì)算創(chuàng)建Ndarray2numpy.array(object,

dtype

=

None,

copy

=

True,

order

=

None,

subok

=

False,

ndmin

=

0)數(shù)組或嵌套的數(shù)列數(shù)組元素的數(shù)據(jù)類型,可選對(duì)象是否需要復(fù)制,可選創(chuàng)建一個(gè)ndarray可以調(diào)用NumPy的array函數(shù)創(chuàng)建數(shù)組的樣式,C為行方向,F(xiàn)為列方向,A為任意方向(默認(rèn))默認(rèn)返回一個(gè)與基類類型一致的數(shù)組指定生成數(shù)組的最小維度組創(chuàng)建ndarray對(duì)象,代碼例5-4所示創(chuàng)建Ndarray25.1.2Ndarray對(duì)象5.1NumPy數(shù)值計(jì)算行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)一維數(shù)組3a=np.array([1,2,3])4print(a)5#輸出:[123]6#創(chuàng)建一個(gè)二維數(shù)組7b=np.array([[1,2,3],[4,5,6]])8print(b)9#輸出:10#[[123]11#[456]]創(chuàng)建ndarray對(duì)象,代碼例5-4所示創(chuàng)建Ndarray25.1.2Ndarray對(duì)象5.1NumPy數(shù)值計(jì)算12#指定生成數(shù)組的數(shù)據(jù)類型13c=np.array([1,2,3],dtype=complex)14print(c)15#輸出:[1.+0.j2.+0.j3.+0.j]16#使用ndmin指定數(shù)組的最小維數(shù)17d=np.array([1,2,3],ndmin=2)18print(d)19#輸出:20#[[123]]常見的NumPy數(shù)組對(duì)象屬性15.1.3NumPy數(shù)組對(duì)象屬性5.1NumPy數(shù)值計(jì)算屬性說明ndarray.ndim秩,即軸的數(shù)量或維度的數(shù)量ndarray.shape數(shù)組的維度,對(duì)于矩陣,n行m列ndarray.size數(shù)組元素的總個(gè)數(shù),相當(dāng)于.shape中n*m的值ndarray.dtypendarray對(duì)象的元素類型ndarray.itemsizendarray對(duì)象中每個(gè)元素的大小,以字節(jié)為單位ndarray.flagsndarray對(duì)象的內(nèi)存信息ndarray.realndarray元素的實(shí)部ndarray.imagndarray元素的虛部ndarray.data包含實(shí)際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個(gè)屬性NumPy數(shù)組的維數(shù)25.1.3NumPy數(shù)組對(duì)象屬性5.1NumPy數(shù)值計(jì)算

NumPy數(shù)組的維數(shù)稱為秩(rank),秩就是軸(axis)的數(shù)量,即數(shù)組的維度,一維數(shù)組的秩為1,二維數(shù)組的秩為2。很多時(shí)候可以聲明axis。axis=0,表示沿著第0軸進(jìn)行操作,即對(duì)每一列進(jìn)行操作;axis=1,表示沿著第1軸進(jìn)行操作,即對(duì)每一行進(jìn)行操作。5.1.3NumPy數(shù)組對(duì)象屬性5.1NumPy數(shù)值計(jì)算

創(chuàng)建一個(gè)二維數(shù)組,通過常見的數(shù)組屬性查看數(shù)組的維度、形狀、數(shù)據(jù)類型、元素大小等。代碼如例5-5所示。行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)2x3的整數(shù)數(shù)組3a=np.array([[1,2,3],[4,5,6]])4print("數(shù)組:\n",a)5print("維度:",a.ndim)#維度6print("形狀:",a.shape)#形狀7print("元素總數(shù):",a.size)#元素總數(shù)8print("元素?cái)?shù)據(jù)類型:",a.dtype)#元素?cái)?shù)據(jù)類型9print("每個(gè)元素的大小:",a.itemsize)#每個(gè)元素的大小5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算numpy.zeros()函數(shù)1numpy.zeros()函數(shù)用于創(chuàng)建一個(gè)全零的數(shù)組。通過傳遞一個(gè)整數(shù)或者一個(gè)表示形狀的元組來指定數(shù)組的形狀。語法結(jié)構(gòu)如下:numpy.zeros(shape,dtype=float,order='C')數(shù)組的形狀(可選)是數(shù)組的數(shù)據(jù)類型,默認(rèn)為float64(可選)在C或Fortran中的內(nèi)存存儲(chǔ)順序,默認(rèn)為“C”5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算

創(chuàng)建一個(gè)一維、二維全零數(shù)組,代碼如例5-6所示。行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)形狀為(3,)的一維全零數(shù)組3a=np.zeros(3)4#創(chuàng)建一個(gè)3x3的二維全零數(shù)組5b=np.zeros((3,3))6print(a)7print(b)000000000000np.zeros(3)np.zeros((3,3))5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算numpy.empty()函數(shù)2numpy.empty()用于生成一個(gè)給定形狀(shape)和數(shù)據(jù)類型(dtype)的新數(shù)組,其初始內(nèi)容是隨機(jī)的,取決于內(nèi)存的狀態(tài)。語法結(jié)構(gòu):numpy.empty(shape,dtype=float,order='C')參數(shù)與numpy.zeros()相同。5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算

下面創(chuàng)建一個(gè)2×2的未初始化的數(shù)組,代碼如例5-7所示。行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)2x2的未初始化的數(shù)組3a=np.empty((2,2))

4print(a)1.1.1.1.np.empty((2,2))5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算numpy.ones()函數(shù)3numpy.ones()用于創(chuàng)建指定形狀的數(shù)組,數(shù)組元素以1來填充。語法結(jié)構(gòu):numpy.ones(shape,dtype=None,order='C')參數(shù)與numpy.zeros()相同。5.1.4Numpy創(chuàng)建數(shù)組5.1NumPy數(shù)值計(jì)算numpy.ones()函數(shù)3創(chuàng)建一個(gè)一維、二維全一數(shù)組,代碼如例5-8所示。行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)形狀為(4,)的一維全一數(shù)組3a=np.ones(4)4#創(chuàng)建一個(gè)4x4的二維全一數(shù)組5b=np.ones((4,4))6print(a)7print(b)11111111111111111111np.ones(4)np.ones((4,4))np.ones()函數(shù)返回的數(shù)組元素類型默認(rèn)為float645.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算切片的基本語法:array[start:end:step],其中start是切片的起始索引,end是切片的結(jié)束索引(不包含),step是切片的步長。創(chuàng)建一個(gè)一維數(shù)組進(jìn)行切片操作,代碼如例5-9所示。行號(hào)代碼行1importnumpyasnp2#創(chuàng)建一個(gè)NumPy數(shù)組3arr=np.array([0,1,2,3,4,5,6,7,8,9])4#切片操作示例5sub_arr=arr[2:7:2]#從索引2開始到索引7(不包含7),步長為26print(sub_arr)5.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算arr[2:7:2]0001122334455667788990001122334455667788995.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算切片用法12.使用負(fù)數(shù)索引

負(fù)數(shù)索引是一種便捷的索引方式,允許從數(shù)組的末尾開始反向計(jì)數(shù)。這有利于快速訪問數(shù)組的末尾元素。例5-10代碼錄入行號(hào)代碼行1importnumpyasnp2arr=np.array([0,1,2,3,4,5,6,7,8,9])3#使用負(fù)數(shù)索引切片4last_elements=arr[-4:-1]#取最后四個(gè)元素中的前三個(gè)5print(last_elements)5.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算arr[-4:-1]-100-91-82-73-64-55-46-37-28-19-100-91-82-73-64-55-46-37-28-195.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算切片用法13.省略切片參數(shù)

切片操作允許省略某些參數(shù),從而提供更大的靈活性。當(dāng)你省略切片參數(shù)時(shí),NumPy會(huì)使用默認(rèn)值來填補(bǔ)這些省略的部分。例5-11代碼錄入行號(hào)代碼行1importnumpyasnp2arr=np.array([0,1,2,3,4,5,6,7,8,9])3#省略start,表示從數(shù)組開始位置切片4a=arr[:5]#從開始到索引5(不包含5)5print(a)6#省略end,表示切片到數(shù)組末尾7b=arr[5:]#從索引5開始到數(shù)組末尾8print(b)9#同時(shí)省略start和end,表示切片整個(gè)數(shù)組,可以用step來取每隔幾個(gè)元素的值10c=arr[::2]#取所有索引為偶數(shù)的元素11print(c)5.1.5NumPy切片與操作5.1NumPy數(shù)值計(jì)算arr[:5]000112233445566778899000112233445566778899arr[5:]000112233445566778899arr[::2]0001122334455667788995.1.5NumP

溫馨提示

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

評(píng)論

0/150

提交評(píng)論