版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章無(wú)第2章1.將你最喜歡的數(shù)字存儲(chǔ)在一個(gè)變量中,再使用這個(gè)變量創(chuàng)建一條消息,指出你最喜歡的數(shù)字,然后將這條消息打印出來(lái)。favorite_number=7message="Myfavoritenumberis"+str(favorite_number)+"."print(message)2.將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息。顯示的消息應(yīng)非常簡(jiǎn)單,如“HelloEric,wouldyouliketolearnsomePythontoday?”。#獲取用戶的姓名name=input("請(qǐng)輸入您的姓名:")#顯示消息print("Hello"+name+",wouldyouliketolearnsomePythontoday?")3.將一個(gè)人名存儲(chǔ)到一個(gè)變量中,再以小寫(xiě)、大寫(xiě)和首字母大寫(xiě)的方式顯示這個(gè)人名。#存儲(chǔ)人名到變量中person_name="JohnDoe"#小寫(xiě)顯示print("小寫(xiě):",person_name.lower())#大寫(xiě)顯示print("大寫(xiě):",person_name.upper())#首字母大寫(xiě)顯示print("首字母大寫(xiě):",person_name.capitalize())4.找一句你欽佩的名人說(shuō)的名言,將名人的姓名存儲(chǔ)在變量famous_person中,將他的名言連同姓名存儲(chǔ)在變量message中。然后打印message。輸出應(yīng)類似于下面這樣(包括引號(hào),\t,\n):AlbertEinsteinoncesaid:“Apersonwhonevermadeamistakenevertriedanythingnew.”famous_person="AlbertEinstein"message=f"{famous_person}oncesaid:\n\"Apersonwhonevermadeamistakenevertriedanythingnew.\""print(message)5.編寫(xiě)一個(gè)程序,將溫度從華氏溫度轉(zhuǎn)換為攝氏溫度。fahrenheit=float(input("請(qǐng)輸入華氏溫度:"))celsius=(fahrenheit-32)*5/9print("攝氏溫度為:",celsius)6.編寫(xiě)一個(gè)程序以執(zhí)行你自己選擇的單位轉(zhuǎn)換。確保程序打印介紹,解釋它的作用。print("這個(gè)程序用于將英寸轉(zhuǎn)換為厘米。")inches=float(input("請(qǐng)輸入英寸值:"))cm=inches*2.54print(f"{inches}英寸等于{cm}厘米。")第3章1. 請(qǐng)?jiān)趌ist=[1,2,3,4,5,6,7,8,9]中的索引為2的位置的后面插入多個(gè)數(shù)字(元素):78,89,76,23,78,89,76,23>>>list=[1,2,3,4,5,6,7,8,9]>>>list=list[:2]+[78,89,76,23]+list[2:]>>>list[1,2,78,89,76,23,3,4,5,6,7,8,9]>>>list=[1,2,3,4,5,6,7,8,9]>>>j=2>>>foriin[78,89,76,23]:...list.insert(j,i)...j+=1...>>>list[1,2,78,89,76,23,3,4,5,6,7,8,9]2. 求一句英文句子(Thisisapen)的單詞數(shù)。>>> sentence="Thisisapen">>> words=sentence.split()>>> print(len(words))3. 在一行中輸入若干個(gè)整數(shù)(至少輸入一個(gè)整數(shù)),整數(shù)之間用空格分割,要求將數(shù)據(jù)按從小到大排序輸出。>>> n=input(‘請(qǐng)輸入若干個(gè)整數(shù),整數(shù)間用空格分割:’) >>> nn=n.split() #分割字符串>>> nn=[int(i)foriinnn] #將字符串型轉(zhuǎn)為整數(shù)型>>> nn.sort() #排序4. 對(duì)列表mailto=['cc','bbbb','afa','sss','bbbb','cc','shafa']進(jìn)行去重操作,并保持原有順序。mailto=['cc','bbbb','afa','sss','bbbb','cc','shafa']addr_to=list(set(mailto))print(addr_to)addr_to.sort(key=mailto.index)print(addr_to)5. 編寫(xiě)程序。新建一個(gè)空列表,向其中添加10名同學(xué)的成績(jī)(百分制)。顯示此列表中所有成績(jī)的最高成績(jī),最低成績(jī),平均成績(jī)。將列表降序排序后,使用切片顯示前三名成績(jī),后三名的成績(jī),排在第3名到第5名成績(jī);使用切片在列表首部插入一個(gè)100分,在尾部追加一個(gè)0分;使用切片將此時(shí)的列表的后五個(gè)數(shù)全部替換為60;使用切片刪除倒數(shù)第1,3,5三個(gè)數(shù);最后顯示所有的成績(jī)。list=[]#建立空列表foriinrange(1,11,1):cj=int(input("請(qǐng)輸入成績(jī)"))list.append(cj)list.sort(reverse=1)#列表排序print("最高成績(jī)",list[0])#輸出最高成績(jī)print("最低成績(jī)",list[9])#輸出最低成績(jī)m=sum(list)print("平均成績(jī)",m/10)#輸出平均成績(jī)print("前三名成績(jī)",list[0:3:1])#輸出前三名成績(jī)print("排在第3名到第5名成績(jī)",list[2:5:1])#輸出排在第3名到第5名成績(jī)print("后三名成績(jī)",list[7:10:1])#輸出后三名成績(jī)list[:0]=[100]#在首部插入100分list[11:]=[0]#在尾部追加一個(gè)0分list[7:]=[60,60,60,60,60]#替換列表后5個(gè)數(shù)為60dellist[11:12]#刪除倒數(shù)第一個(gè)數(shù)dellist[9:10]#刪除倒數(shù)第三個(gè)數(shù)dellist[7:8]#刪除倒數(shù)第五個(gè)數(shù)print(list)6. 要求輸入一個(gè)四位數(shù)的年,判斷當(dāng)前的年份的生肖。生肖紀(jì)年順序?yàn)椋鹤邮?、丑牛、寅虎、卯兔、辰龍、巳蛇、午馬、未羊、申猴、酉雞、戌狗、亥豬。#地支算法:用公元紀(jì)年-3,除以12所得余數(shù),即為對(duì)應(yīng)的年。所以生肖順序相應(yīng)變更['申猴','酉雞','戌狗','亥豬','子鼠','丑牛','寅虎','卯兔','辰龍','巳蛇','午馬','未羊']year=int(input('輸入一個(gè)四位數(shù)的年份:'))print(year)varlist=['申猴','酉雞','戌狗','亥豬','子鼠','丑牛','寅虎','卯兔','辰龍','巳蛇','午馬','未羊']print(varlist[year%12])第4章1.根據(jù)輸入第一個(gè)和第二個(gè)的英文字母,判斷是星期幾'''周一Monday周二Tuesday周三Wednesday周四Thursday周五Fri(Friday)周六Sat(Saturday)周日Sunday'''date=input("請(qǐng)輸入第一個(gè)字母:").upper()ifdate=='M':print('Monday')elifdate=='T':date=input("請(qǐng)輸入第二個(gè)字母:").lower()ifdate=='u':print('Tuesday')elifdate=='h':print('Thursday')else:print('輸入有誤~~~')elifdate=='W':print('Wednesday')elifdate=='F':print('Friday')elifdate=='S':date=input("請(qǐng)輸入第二個(gè)字母:").lower()ifdate=='a':print('Saturday')elifdate=='u':print('Sunday')else:print('輸入有誤~~~')else:print('輸入有誤~~~')2. 登錄驗(yàn)證:請(qǐng)輸入用戶名和密碼,判斷是否都正確,才能成功登陸。name=input("請(qǐng)輸入用戶名:")pwd=input("請(qǐng)輸入密碼")ifname=="name":ifpwd=="123456":print("登錄成功!")else:print("密碼錯(cuò)誤!")else:print("登錄名錯(cuò)誤!")3. 數(shù)字猜謎游戲:猜大了提示:猜的數(shù)字大了;猜小了提示:猜的數(shù)字小了;猜正確停止。number=5a=0print('歡迎進(jìn)入猜數(shù)字游戲')whilea!=number:a=int(input('請(qǐng)輸入要猜的數(shù)字'))ifa==number:print('恭喜,猜對(duì)了')elifa<number:print('猜小了')elifa>number:print('猜大了')else:print('好好玩哦~')4. 用嵌套循環(huán)打印九九乘法表foriinrange(1,10):forjinrange(1,i+1):print("{}*{}={}".format(j,i,i*j),end="")print()5. 用嵌套循環(huán)將字符*輸出效果:IUimporttimey=2.5whiley>=-1.6:x=-3.0whilex<=4.0:if(x*x+y*y-1)**3<=3.6*x*x*y*y*yor(x>-2.4andx<-2.1andy<1.5andy>-1)or(((x<2.5andx>2.2)or(x>3.4andx<3.7))andy>-1andy<1.5)or(y>-1andy<-0.6andx<3.7andx>2.2):print('*',end="")else:print('',end="")x+=0.1print()time.sleep(0.25)y-=0.26. 通過(guò)設(shè)置print()函數(shù)中的參數(shù)end實(shí)現(xiàn)加載效果:加載中1%到100%importtimeinner=500forninrange(inner+1):loading=round(n/inner*100)#通過(guò)加\r每次輸出完跳回,用end=""替換默認(rèn)的換行,只要數(shù)字在改變,因此表面上展現(xiàn)進(jìn)度刷新print(f"\r加載中{loading}%",end="")#由于沒(méi)有放入復(fù)雜程序,如果直接打印,展示不出效果,因此用time.sleep模擬加載過(guò)程time.sleep(0.02)7. 對(duì)之前的【狀態(tài)自評(píng)】進(jìn)行需求擴(kuò)充。具體要求如下:(10+∞):睡醒了嗎,親[8,10]:今天狀態(tài)不錯(cuò),適合學(xué)習(xí)[6,8):今天狀態(tài)尚可,用學(xué)習(xí)穩(wěn)定心情吧[4,6):今天狀態(tài)欠佳,用學(xué)習(xí)提升自己吧[1,4):你或許需要好好休息,或者放松一下(-∞,1):睡醒了嗎?amount=int(input('請(qǐng)輸入狀態(tài)自評(píng)分【1(十分沮喪)~10(滿面紅光)】:'))print('******************')ifamount>10oramount<0: print('{0:=^14}'.format('睡醒了嗎'))elifamount>=8: print('{0:=^14}'.format('今天狀態(tài)不錯(cuò)')) print('{0:-^14}'.format('適合學(xué)習(xí)'))elifamount>=6: print('{0:=^14}'.format('今天狀態(tài)尚可')) print('{0:-^14}'.format('用學(xué)習(xí)穩(wěn)定心情吧'))elifamount>=4: print('{0:=^14}'.format('今天狀態(tài)欠佳')) print('{0:-^14}'.format('用學(xué)習(xí)提升自己吧'))else: print('{0:=^14}'.format('你或許需要好好休息')) print('{0:-^14}'.format('或者放松一下'))print('******************')print('希望您度過(guò)愉快的一天!')第5章1. 輸入兩個(gè)正整數(shù)num1和num2(不超過(guò)500),求它們的最小公倍數(shù)并輸出。方法一deflcm(a,b):foriinrange(min(a,b),0,-1):ifa%i==0andb%i==0:returna*b//inum1=int(input(""))num2=int(input(""))print(lcm(num1,num2))方法二deflcm(a,b):foriinrange(max(a,b),a*b+1):ifi%a==0andi%b==0:returninum1=int(input(""))num2=int(input(""))print(lcm(num1,num2))2. 編寫(xiě)函數(shù),接收字符串參數(shù),返回一個(gè)元組,其中第一個(gè)元素為大寫(xiě)字母?jìng)€(gè)數(shù),第二個(gè)元素為小寫(xiě)字母?jìng)€(gè)數(shù)defdemo(s):result=[0,0]forchins:ifch.islower():result[1]+=1elifch.isupper():result[0]+=1returntuple(result)3. 編寫(xiě)函數(shù),接收一個(gè)正偶數(shù)為參數(shù),輸出兩個(gè)素?cái)?shù),并且這兩個(gè)素?cái)?shù)之和等于原來(lái)的正偶數(shù)。如果存在多組符合條件的素?cái)?shù),則全部輸出。defdemo(n):defIsPrime(p):ifp==2:returnTrueifp%2==0:returnFalseforiinrange(3,int(p**0.5)+1,2):ifp%i==0:returnFalsereturnTrueifisinstance(n,int)andn>0andn%2==0:foriinrange(2,n//2+1):ifIsPrime(i)andIsPrime(n-i):print(i,'+',n-i,'=',n)4. 編寫(xiě)函數(shù),計(jì)算字符串匹配的準(zhǔn)確率。以打字練習(xí)程序?yàn)槔?,假設(shè)origin為原始內(nèi)容,userInput為用戶輸入的內(nèi)容,下面的代碼用來(lái)測(cè)試用戶輸入的準(zhǔn)確率。defRate(origin,userInput):ifnot(isinstance(origin,str)andisinstance(userInput,str)):print('Thetwoparametersmustbestrings.')returnright=sum((1foro,uinzip(origin,userInput)ifo==u))returnround(right/len(origin),2)5. 編寫(xiě)函數(shù)模擬猜數(shù)游戲。系統(tǒng)隨機(jī)產(chǎn)生一個(gè)數(shù),玩家最多可以猜5次,系統(tǒng)會(huì)根據(jù)玩家的猜測(cè)進(jìn)行提示,玩家則可以根據(jù)系統(tǒng)的提示對(duì)下一次的猜測(cè)進(jìn)行適當(dāng)調(diào)整。fromrandomimportrandintdefguess(maxValue=100,maxTimes=5):#隨機(jī)生成一個(gè)整數(shù)value=randint(1,maxValue)foriinrange(maxTimes):prompt='StarttoGUESS:'ifi==0else'Guessagain:'#使用異常處理結(jié)構(gòu),防止輸入不是數(shù)字的情況try:x=int(input(prompt))except:print('Mustinputanintegerbetween1and',maxValue)else:#猜對(duì)了ifx==value:print('Congratulations!')breakelifx>value:print('Toobig')else:print('Toolittle')else:#次數(shù)用完還沒(méi)猜對(duì),游戲結(jié)束,提示正確答案print('Gameover.FAIL.')print('Thevalueis',value)6. 模擬蒙蒂霍爾悖論游戲。fromrandomimportrandrangedefinit():'''返回一個(gè)字典,鍵為3個(gè)門(mén)號(hào),值為門(mén)后面的物品'''result={i:'goat'foriinrange(3)}r=randrange(3)#在某個(gè)隨機(jī)的門(mén)后面放一輛汽車,其他兩個(gè)門(mén)后面仍然是山羊result[r]='car'returnresultdefstartGame():#獲取本次游戲中每個(gè)門(mén)的情況doors=init()#獲取玩家選擇的門(mén)號(hào)whileTrue:try:firstDoorNum=int(input('Chooseadoortoopen:'))assert0<=firstDoorNum<=2breakexcept:print('Doornumbermustbebetween{}and{}'.format(0,2))#主持人查看另外兩個(gè)門(mén)后的物品情況#字典的keys()方法返回結(jié)果可以當(dāng)作集合使用,支持使用減法計(jì)算差集fordoorindoors.keys()-{firstDoorNum}:#打開(kāi)其中一個(gè)后面為山羊的門(mén)ifdoors[door]=='goat':print('"goat"behindthedoor',door)#獲取第三個(gè)門(mén)號(hào),讓玩家糾結(jié)thirdDoor=(doors.keys()-{door,firstDoorNum}).pop()change=input('Switchto{}?(y/n)'.format(thirdDoor))finalDoorNum=thirdDoorifchange=='y'elsefirstDoorNumifdoors[finalDoorNum]=='goat':return'IWin!'else:return'YouWin.'whileTrue:print('='*30)print(startGame())r=input('Doyouwanttotryoncemore?(y/n)')ifr=='n':Break第6章數(shù)據(jù)處理1.請(qǐng)將列表數(shù)據(jù)[1,3,6,15]轉(zhuǎn)化為NumPy數(shù)組。(以下代碼僅供參考)>>>importnumpyasnp>>>x=np.array([1,3,6,15])>>>print(type(x))2.請(qǐng)基于NumPy編寫(xiě)一個(gè)函數(shù),統(tǒng)計(jì)給定數(shù)組中包含的缺失值NaN的總數(shù)。(以下代碼僅供參考)>>>importnumpyasnp>>>defnan_counter(x):...print(len(x[np.isnan(x)]))#測(cè)試>>>nan_counter(np.array([1,2,3,np.nan,7,np.nan]))3.請(qǐng)使用NumPy分別創(chuàng)建下列數(shù)組: (1)由10個(gè)5組成的一維數(shù)組; (2)由1,7,5,13組成的一維數(shù)組; (3)形狀為(3,4)的二維數(shù)組,其中的數(shù)據(jù)由10至21之間的整數(shù)構(gòu)成; (4)形狀為(3,4)的二維數(shù)組,其中的數(shù)據(jù)由10至21之間的整數(shù)構(gòu)成,再改變其中11至15數(shù)字符號(hào)為負(fù)號(hào)。(以下代碼僅供參考)>>>importnumpyasnp#由10個(gè)5組成的一維數(shù)組>>>array1=np.ones(10)*5#由1,7,5,13組成的一維數(shù)組>>>array2=np.array([1,7,5,13])#形狀為(3,4)的二維數(shù)組,其中的數(shù)據(jù)由10至21之間的整數(shù)構(gòu)成>>>array3=np.arange(10,22).reshape((3,4))#形狀為(3,4)的二維數(shù)組,其中的數(shù)據(jù)由10至21之間的整數(shù)構(gòu)成,再改變其中11至15數(shù)字的符號(hào)為負(fù)號(hào)>>>array4=np.arange(10,22)>>>array4[1:6]*=-1>>>array4.resize((3,4))4.請(qǐng)使用NumPy計(jì)算下列兩個(gè)矩陣的乘法的結(jié)果(以下代碼僅供參考)>>>importnumpyasnp>>>A=np.array([[1,3],[2,4]])>>>B=np.array([[-5,3],[7,0]])>>>result=A@B5.請(qǐng)基于NumPy編寫(xiě)一個(gè)函數(shù),統(tǒng)計(jì)二維數(shù)組中所有元素的和、每行元素的以及每列元素的和。(以下代碼僅供參考)>>>importnumpyasnp>>>defsum_calculate(x):...array_sum=x.sum()...colunm_sum=x.sum(axis=0)...row_sum=x.sum(axis=1)...returnarray_sum,colunm_sum,row_sum#測(cè)試>>>array_sum,colunm_sum,row_sum=sum_calculate(np.array([[1,3],[8,10]]))>>>print('所有元素之和:{}\n每行元素之和:{},{}\n每列元素之和:{},{}'.format(array_sum,row_sum[0],row_sum[1],colunm_sum[0],colunm_sum[1]))6.請(qǐng)使用NumPy創(chuàng)建一個(gè)長(zhǎng)度為7的一維數(shù)組,其中由0到5之間的任意整數(shù)填充。(以下代碼僅供參考)>>>importnumpyasnp>>>a=np.random.randint(0,5,size=[7])>>>print(a)7.請(qǐng)使用NumPy創(chuàng)建一維數(shù)組[1234567891011121314],再將其劃分為[12]、[3456789]和[1011121314]三個(gè)一維數(shù)組。(以下代碼僅供參考)>>>importnumpyasnp>>>a=np.arange(1,15)>>>a1,a2,a3=np.split(a,[2,9,])>>>print(a1)>>>print(a2)>>>print(a3)
第7章數(shù)據(jù)可視化1.請(qǐng)簡(jiǎn)述在Matplotlib中基于狀態(tài)的繪圖模式與面對(duì)對(duì)象的繪圖模式的區(qū)別?;跔顟B(tài)的繪圖模式直接基于pyplot的繪圖方法,采用類似Matlab的繪圖流程進(jìn)行圖例繪制。而面對(duì)對(duì)象的繪圖模式首先需要?jiǎng)?chuàng)建畫(huà)布(Figure)實(shí)例,并對(duì)畫(huà)布中的軸域(Axes)進(jìn)行實(shí)例的添加,可以更細(xì)致地控制繪圖。兩種方法在子圖繪制以及標(biāo)簽等實(shí)例設(shè)置的上的函數(shù)有所區(qū)別。(此題為主觀題型,答案僅供參考)2.請(qǐng)根據(jù)“Population2010.csv”文件中的數(shù)據(jù)繪制2010年的人口金字塔圖像,并與7.3.3節(jié)中2020年的人口金字塔圖像對(duì)比,分析該地十年間人口狀況的變化。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>plt.style.use('seaborn-whitegrid')>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False>>>np.set_printoptions(suppress=True)#設(shè)置不使用科學(xué)計(jì)數(shù)法#導(dǎo)入數(shù)據(jù)>>>data_2010=np.loadtxt("Population2010.csv",delimiter=",",skiprows=1,usecols=(1,2))>>>male_2010=data_2010[:,0]>>>female_2010=data_2010[:,1]#數(shù)據(jù)處理>>>age=['{}至{}歲'.format(5*i,5*(i+1)-1)foriinrange(20)]>>>age.append('大于100歲')>>>sum_pop_2010=np.sum(data_2010)>>>male_2010_pct=male_2010/sum_pop_2010>>>female_2010_pct=female_2010/sum_pop_2010>>>str_male_2010_pct=','.join(str('{:.2}%').format(i*100)foriinmale_2010_pct).split(',')>>>str_female_2010_pct=','.join(str('{:.2}%').format(i*100)foriinfemale_2010_pct).split(',')#繪圖>>>fig,ax=plt.subplots(figsize=(17,12))>>>fig.tight_layout()>>>bar_male=ax.barh(age,-male_2010,label='男',color='#6699FF')>>>bar_female=ax.barh(age,female_2010,label='女',color='#CC6699')>>>ax.bar_label(bar_male,labels=str_male_2010_pct,size=16,label_type='edge',padding=5)>>>ax.bar_label(bar_female,labels=str_female_2010_pct,size=16,label_type='edge',padding=5)>>>ax.legend(prop={'size':20})>>>ax.set_xticks([-60000000,-40000000,-20000000,0,20000000,40000000,60000000])>>>ax.set_xticklabels([r'$6\times10^7$',r'$4\times10^7$',r'$2\times10^7$','0',r'$6\times10^7$',r'$4\times10^7$',r'$2\times10^7$'],fontsize=16)>>>ax.set_yticklabels(age,fontsize=16)>>>ax.set_ylabel('年齡段',fontsize=16)>>>ax.set_xlabel('人數(shù)',fontsize=16)>>>ax.set_title('2010年人口金字塔',fontsize=25)>>>plt.show()(分析可從年齡結(jié)構(gòu)、性別比例等描述,言之有理即可)3.請(qǐng)采用合適的可視化手段對(duì)7.4節(jié)中的電商數(shù)據(jù)“CustomerData.csv”分析所在城市情況、婚姻狀況與消費(fèi)水平的關(guān)系。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False#數(shù)據(jù)讀取>>>city=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(6),dtype=np.str_,encoding='utf_8_sig')>>>marital=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(7),dtype=np.str_,encoding='utf_8_sig')>>>purchase=np.loadtxt("CustomerData.csv",delimiter=",",skiprows=1,usecols=(8),encoding='utf_8_sig')#函數(shù)定義>>>defgroupby(x):...x_uniques=np.unique(x)...return{xi:np.where(x==xi)forxiinx_uniques}#所在城市>>>city_label,city_data=np.unique(city,return_counts=True)>>>city_index=groupby(city)>>>city_purchase_group={key:purchase[city_index[key]].mean()forkeyincity_index.keys()}>>>city_purchase_label=[iforiincity_purchase_group.keys()]>>>city_purchase_data=[iforiincity_purchase_group.values()]#婚姻狀況>>>marital_label,marital_data=np.unique(marital,return_counts=True)>>>marital_index=groupby(marital)>>>marital_purchase_group={key:purchase[marital_index[key]].mean()forkeyinmarital_index.keys()}>>>marital_purchase_label=[iforiinmarital_purchase_group.keys()]>>>marital_purchase_data=[iforiinmarital_purchase_group.values()]#繪圖>>>fig,ax=plt.subplots(1,2,figsize=(16,4),dpi=300)>>>ax[0].bar(city_purchase_label,city_purchase_data,color='purple',width=0.3)>>>ax[0].set_xlabel('各城市平均消費(fèi)額')>>>ax[0].set_ylabel('平均消費(fèi)額(元)')>>>ax[0].set_title('城市類型',fontsize='20')>>>ax[0].grid();>>>ax[1].bar(marital_purchase_label,marital_purchase_data,color='red',width=0.3)>>>ax[1].set_xlabel('婚姻狀態(tài)');>>>ax[1].set_ylabel('平均消費(fèi)額(元)');>>>ax[1].set_title('婚姻狀態(tài)平均消費(fèi)額',fontsize='20');>>>ax[1].grid()>>>plt.show()4.請(qǐng)采用合適的可視化手段對(duì)7.5節(jié)中的氣象數(shù)據(jù)“shanghai_weather.csv”中的風(fēng)速數(shù)據(jù)進(jìn)行分析。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>fromscipy.statsimportnorm>>>plt.style.use('seaborn-whitegrid')#風(fēng)格設(shè)置>>>plt.rcParams['font.family']='SimHei'>>>plt.rcParams['axes.unicode_minus']=False#讀取數(shù)據(jù)>>>wind=np.loadtxt('shanghai_weather.csv',delimiter=',',skiprows=1,usecols=(6),dtype=np.str_,encoding='utf_8_sig')>>>wind_speed=np.array([i[-2:]foriinwind])>>>speed_label,speed_data=np.unique(wind_speed,return_counts=True)#繪圖>>>fig,ax=plt.subplots(figsize=(16,10),dpi=300)>>>ax.bar(speed_label,speed_data)>>>ax.set_xlabel('風(fēng)速等級(jí)')>>>ax.set_ylabel('天數(shù)')>>>ax.set_title('一年中各風(fēng)速等級(jí)的天數(shù)',fontsize='20')>>>plt.show()
第8章科學(xué)計(jì)算1.圓周率的數(shù)值可以通過(guò)求解單位圓的定積分得到,請(qǐng)使用SciPy庫(kù)中求解數(shù)值積分的方法得到圓周率的數(shù)值近似。(以下代碼僅供參考)>>>importnumpyasnp>>>fromscipyimportintegrate>>>f=lambdax:np.sqrt(1-x**2)>>>print(2*integrate.quad(f,-1,1)[0])3.14159265358979672.請(qǐng)?jiān)赟ciPy中求解最優(yōu)化的子模塊中選擇合適的方法,求解以下目標(biāo)函數(shù)的極小點(diǎn),初始點(diǎn)選擇。(以下代碼僅供參考)>>>importnumpyasnp>>>fromscipyimportoptimize>>>f=lambdax:(x[0]**2+x[1]-11)**2-(x[0]+x[1]**2-7)**2>>>x0=np.array([-3.,-1.])>>>res=optimize.minimize(f,x0,method='BFGS')>>>print(res)message:Optimizationterminatedsuccessfully.success:Truestatus:0fun:-108.8527347923513x:[-3.544e+00-7.055e-02]nit:6jac:[1.907e-069.537e-07]hess_inv:[[1.001e-023.135e-03][3.135e-032.370e-02]]nfev:24njev:83.請(qǐng)使用SciPy求解下列線性規(guī)劃問(wèn)題(以下代碼僅供參考)>>>importnumpyasnp>>>fromscipyimportoptimize>>>c=np.array([-20.,-12.,-40.,-25.])>>>A_ub=np.array([[1.,1.,1.,1.],[3.,2.,1.,0],[0,1.,2.,3.]])>>>b_ub=np.array([50.,100.,90.])>>>res=optimize.linprog(c,A_ub=A_ub,b_ub=b_ub)>>>print(res)message:Optimizationterminatedsuccessfully.(HiGHSStatus7:Optimal)success:Truestatus:0fun:-1900.0x:[5.000e+000.000e+004.500e+010.000e+00]nit:4lower:residual:[5.000e+000.000e+004.500e+010.000e+00]marginals:[0.000e+001.800e+010.000e+002.500e+01]upper:residual:[infinfinfinf]marginals:[0.000e+000.000e+000.000e+000.000e+00]eqlin:residual:[]marginals:[]ineqlin:residual:[0.000e+004.000e+010.000e+00]marginals:[-2.000e+01-0.000e+00-1.000e+01]mip_node_count:0mip_dual_bound:0.0mip_gap:0.04.在8.3.2節(jié)中的氣象風(fēng)速數(shù)據(jù)的插值分析中,請(qǐng)使用erpolate中的UnivariateSpline類對(duì)累計(jì)分布函數(shù)進(jìn)行插值分析,并與線性插值結(jié)果對(duì)比。(以下代碼僅供參考)>>>importnumpyasnp>>>fromscipyimportinterpolate>>>importmatplotlib.pyplotasplt>>>plt.rcParams['font.sans-serif']=['SimHei']>>>plt.rcParams['axes.unicode_minus']=False#讀取數(shù)據(jù)>>>wspeeds=np.load('windspeeds.npy')>>>years=21>>>max_speeds=np.array([arr.max()forarrinnp.array_split(wspeeds,years)])>>>x_data=(np.arange(years)+1)/(years+1)>>>sorted_max_speeds=np.sort(max_speeds)>>>speed_spline=interpolate.UnivariateSpline(x_data,sorted_max_speeds)#根據(jù)插值函數(shù)生成曲線>>>x_prob=np.linspace(0,1,100)>>>fitted_max_speeds=speed_spline(x_prob)#使用插值函數(shù)計(jì)算50年重現(xiàn)期最大風(fēng)速值>>>vmax50=speed_spline(0.98)#可視化>>>plt.figure(figsize=(8,6))>>>plt.plot(sorted_max_speeds,x_data,'bo')>>>plt.plot(fitted_max_speeds,x_prob,'g--')>>>plt.text(31.6,0.5,'$V_{50}=%.2f\,m/s$'%vmax50)>>>plt.plot([vmax50,vmax50],[0,0.98],'k--')>>>plt.plot([20,vmax50],[0.98,0.98],'k--')>>>plt.plot(vmax50,0.98,'ro',markersize=8)>>>plt.xlim([20,36])>>>plt.ylim([0,1])>>>plt.xlabel('風(fēng)速最大值[$m/s$]')>>>plt.ylabel('累計(jì)概率')>>>plt.grid()>>>plt.title('氣象站風(fēng)速累積分布函數(shù)插值分析')>>>plt.show()5.請(qǐng)使用綠色填充“Panda.jpg”圖像中由圍成的正方形區(qū)間。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>img=plt.imread('Panda.jpg')>>>img_cover=np.array(img)>>>img_cover[100:300,100:300,:]=np.array([0,255,0])>>>plt.imshow(img_cover)6.請(qǐng)給“Panda.jpg”圖像增加隨機(jī)噪點(diǎn),并分別使用均值濾波器和中值濾波器對(duì)其降噪,比較兩種濾波器和高斯濾波器的降噪效果。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>fromscipyimportndimage>>>plt.rcParams['font.sans-serif']=['SimHei']>>>plt.rcParams['axes.unicode_minus']=False>>>img=plt.imread('Panda.jpg')>>>noisy_img=np.array(img).astype(np.float64)>>>noisy_img+=img.std()*1.*np.random.standard_normal(img.shape)>>>noisy_img/=255.#均值濾波>>>uni_filtered_img=np.empty(img.shape)>>>foriinrange(3):...uni_filtered_img[...,i]=ndimage.filters.uniform_filter(noisy_img[...,i],size=20)#中值濾波>>>median_filtered_img=np.empty(img.shape)>>>foriinrange(3):...median_filtered_img[...,i]=ndimage.median_filter(noisy_img[...,i],size=20)#可視化>>>fig,ax=plt.subplots(1,3,figsize=(18,4),dpi=300)>>>ax[0].imshow(noisy_img)>>>ax[0].set_title('噪點(diǎn)圖像')>>>ax[1].imshow(uni_filtered_img)>>>ax[1].set_title('均值濾波')>>>ax[2].imshow(median_filtered_img)>>>ax[2].set_title('中值濾波')>>>plt.show()
第9章機(jī)器學(xué)習(xí)1.請(qǐng)簡(jiǎn)述利用機(jī)器學(xué)習(xí)解決實(shí)際應(yīng)用問(wèn)題的流程。機(jī)器學(xué)習(xí)的一般流程包括確定分析目標(biāo)、收集數(shù)據(jù)、整理數(shù)據(jù)、預(yù)處理數(shù)據(jù)、訓(xùn)練模型、評(píng)估模型、優(yōu)化模型、上線部署等步驟。首先要從業(yè)務(wù)的角度分析,然后提取相關(guān)的數(shù)據(jù)進(jìn)行探查,發(fā)現(xiàn)其中的問(wèn)題,再依據(jù)各算法的特點(diǎn)選擇合適的模型進(jìn)行實(shí)驗(yàn)驗(yàn)證,評(píng)估各模型的結(jié)果,最終選擇合適的模型進(jìn)行應(yīng)用。2.在9.2節(jié)的手寫(xiě)數(shù)字識(shí)別任務(wù)中,請(qǐng)實(shí)驗(yàn)正則項(xiàng)系數(shù)對(duì)模型性能的影響。(以下代碼僅供參考)>>>importnumpyasnp>>>importmatplotlib.pyplotasplt>>>fromsklearnimportdatasets,metrics>>>fromsklearn.model_selectionimporttrain_test_split>>>fromsklearn.datasetsimportfetch_openml>>>fromsklearn.utilsimportcheck_random_state>>>fromsklearn.preprocessingimportStandardScaler>>>fromsklearn.linear_modelimportLogisticRegression#下載數(shù)據(jù)>>>X,y=fetch_openml("mnist_784",version=1,return_X_y=True,as_frame=False)#數(shù)據(jù)預(yù)處理>>>defscaler_input(data):...scaler=StandardScaler()...data=scaler.fit_transform(data)...returndata>>>X_scaler=scaler_input(X)#數(shù)據(jù)劃分>>>deftrain_validation_split(X,y,train_size):...random_state=check_random_state(0)...permutation=random_state.permutation(X.shape[0])...X=X[permutation]...y=y[permutation]...X=X.reshape((X.shape[0],-1))...X_train,X_val,y_train,y_val=train_test_split(X,y,train_size=train_size)...returnX_train,X_val,y_train,y_val>>>X_train,X_val,y_train,y_val=train_validation_split(X,y,0.9)#設(shè)置正則系數(shù)>>>c_list=[0.0001,0.0005,0.001,0.005,0.01,0.05]#訓(xùn)練>>>model_list=[]>>>foriinc_list:...model=LogisticRegression(C=i,penalty="l1",solver="saga",max_iter=500)...model.fit(X_train,y_train)...model_list.append(model)#輸出結(jié)果>>>foriinrange(len(c_list)):...score=model_list[i].score(X_val,y_val)...print('當(dāng)L1懲罰系數(shù)為{}時(shí)的驗(yàn)證集分?jǐn)?shù)為:{:.4f}'.format(c_list[i],score))3.在9.3節(jié)的交通車流量預(yù)測(cè)任務(wù)中,還可使用其他回歸算法進(jìn)行預(yù)測(cè)。請(qǐng)?jiān)O(shè)計(jì)基于支持向量機(jī)回歸(sklearn.svm.SVR)的模型并實(shí)驗(yàn)核函數(shù)在支持向量機(jī)中對(duì)結(jié)果的影響。(以下代碼僅供參考)>>>importnumpyasnp>>>importpandasaspd>>>importmatplotlib.pyplotasplt>>>fromsklearnimportsvm>>>fromsklearnimportmetrics>>>fromsklearn.preprocessingimportMinMaxScaler>>>df=pd.read_csv('Traffic_flow.csv',encoding='gb2312')>>>data=np.array(df)>>>defbuild_train_model():#保存模型的字典...models={}...forkernelin('linear','poly-3','poly-5','rbf','laplacian'):...if'poly'inkernel:...clf=svm.SVR(kernel='poly',gamma=2,degree=int(kernel[-1]))...else:...clf=svm.SVR(kernel=kernel,gamma=2)...clf.fit(X_train,y_train)...models[kernel]=clf...returnmodels>>>defmaek_predict(models,data):...result={}...forname,modelinmodels.items():...result[name]=model.predict(data)...returnresult>>>defmodels_score(label,predicts):...models_score={}>>>defcalculate_score(label,predicted):...score={}...score['r2']=metrics.r2_score(label,predicted)...score['mae']=metrics.mean_absolute_error(label,predicted)...score['mse']=metrics.mean_squared_error(label,predicted)...score['max']=metrics.max_error(label,predicted)...returnscore>>>forname,predictinpredicts.items():...models_score[name]=calculate_score(label,predict)...returnmodels_score>>>models=build_train_model()>>>result=maek_predict(models,X_val)>>>models_score=models_score(y_val,result)4.在9.4節(jié)的推薦系統(tǒng)中還有哪些特征可用于混合推薦系統(tǒng)?請(qǐng)根據(jù)設(shè)計(jì)基于這些特征的混合推薦系統(tǒng)并觀察性能。數(shù)據(jù)集中共23項(xiàng)特征,可嘗試選擇合適的特征(如人氣、語(yǔ)言、關(guān)鍵字等)進(jìn)行推薦系統(tǒng)的設(shè)計(jì),此處供讀者自行設(shè)計(jì)驗(yàn)證。
第10章深度學(xué)習(xí)1.在第10.1.2節(jié)中所設(shè)計(jì)的卷積神經(jīng)網(wǎng)絡(luò)存在一定過(guò)擬合現(xiàn)象。請(qǐng)對(duì)數(shù)據(jù)集和網(wǎng)絡(luò)模型進(jìn)行進(jìn)一步改進(jìn),以提升網(wǎng)絡(luò)在驗(yàn)證數(shù)據(jù)集上的準(zhǔn)確率??梢試L試在網(wǎng)絡(luò)層中添加正則化(權(quán)重衰減),使用dropout技術(shù),或?qū)?shù)據(jù)實(shí)行數(shù)據(jù)增強(qiáng)等增加模型的泛化能力,讀者可自行嘗試。2.在第10.2中的數(shù)據(jù)預(yù)處理使用了所有的文字作為訓(xùn)練數(shù)據(jù),為節(jié)省內(nèi)存開(kāi)銷,可在構(gòu)建獨(dú)熱編碼前將低頻出現(xiàn)的詞語(yǔ)去除。請(qǐng)實(shí)驗(yàn)去除文字比例和訓(xùn)練結(jié)果的關(guān)系??梢愿脑熳x取和處理數(shù)據(jù)的load_preprocess函數(shù),增加一個(gè)參數(shù)pct,其值為0至1之間的浮點(diǎn)數(shù),來(lái)控制要選取出現(xiàn)頻率前百分之多少的詞語(yǔ),再進(jìn)行模型的訓(xùn)練與驗(yàn)證,更改后的數(shù)據(jù)讀取和預(yù)處理函數(shù)如下(以下代碼僅供參考):>>>defload_and_preprocess(poem_path,end_char,pct=1.):...poems=[line.strip().replace('','').split(':')[1]forlineinopen(poem_path,encoding='utf-8')]...poem_list=[]#加上結(jié)束符號(hào)...forpoeminpoems:...iflen(poem)<=5:...continue...ifpoem[5]==",":...poem_list.append(poem+end_char)#數(shù)據(jù)集中的字符...character_list=[]...forpoeminpoem_list:...character_list+=[characterforcharacterinpoem]#排序,以防止每次ID不同...charact_dst={}...forcharincharacter_list:...charact_dst[char]=charact_dst.get(char,0)+1...char_pairs=sorted(charact_dst.items(),key=lambdax:x[1],reverse=True)...char_paris=char_pairs[:int(len(char_pairs)*pct)]...chars,counts=zip(*char_pairs)...char2num_dict={char:numfornum,charinenumerate(chars)}...num2char_dict={num:charfornum,charinenumerate(chars)}...char2num_func=lambdachar:char2num_dict.get(char,'')...poem_item=np.array([list(map(char2num_func,poem))forpoeminpoem_list],dtype=object)...returnpoem_item,char2num_dict,num2char_dict3.請(qǐng)根據(jù)10.2節(jié)中設(shè)計(jì)的詩(shī)歌生成器,設(shè)計(jì)預(yù)測(cè)函數(shù),使其能夠根據(jù)給定字符生成藏頭詩(shī)。將案例中的pred函數(shù)進(jìn)行修改,新增加一個(gè)txt參數(shù),接受長(zhǎng)度為4的字符串,作為藏頭詩(shī)每句的開(kāi)頭,修改后代碼如下(以下代碼僅供參考):>>>defpredict_head(model,txt,input_data,char2num_dict,num2char_dict,unit_sentence):...txt_id=[]...foriintxt:...txt_id.append(char2num_dict[i])...char_size=len(char2num_dict)#隨機(jī)取一首詩(shī)的開(kāi)頭6個(gè)字符,進(jìn)行后面的預(yù)測(cè)...index=np.random.randint(0,len(input_data))...sentence=np.append(txt_id[0],input_data[index][1:unit_sentence])...def_pred(text):...temp=text[-unit_sentence:]...x_pred=np.zeros((1,unit_sentence,char_size))...fort,indexinenumerate(temp):...x_pred[0,t,index]=1...preds=model.predict(x_pred)[0]...choice_id=np.random.choice(range(len(preds)),1,p=preds)...ifnum2char_dict[choice_id[0]]=='':...whilenum2char_dict[choice_id[0]]in[',','。','']:...choice_id=np.random.randint(0,len(char2num_dict),1)...returnchoice_id...txt_index=1...foriinrange(24-unit_sentence):...pred=_pred(sentence)...ifiin[0,6,12]:...pred=txt_id[txt_index]...txt_index+=1...sentence=np.append(sentence,pred)...output=""...foriinrange(len(sentence)):...output=output+num2char_dict[sentence[i]]...print(output)隨后加載模型進(jìn)行測(cè)試>>>importos>>>importmatplotlib.pyplotasplt>>>importnumpyasnp>>>importtensorflowastf>>>fromtensorflow.keras.callbacksimportModelCheckpoint,TensorBoard,CSVLogger>>>fromtensorflow.keras.layersimportInput,LSTM,Dense,Dropout>>>fromtensorflow.keras.modelsimportModel>>>fromtensorflow.keras.optimizersimportAdam>>>defload_and_preprocess(poem_path,end_char):...poems=[line.strip().replace('','').split(':')[1]forlineinopen(poem_path,encoding='utf-8')]...poem_list=[]#加上結(jié)束符號(hào)...forpoeminpoems:...iflen(poem)<=5:...continue...ifpoem[5]==",":...poem_list.app
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度石英砂信用保證與銷售合同
- 二零二五年度農(nóng)村自建房買賣定金合同范本3篇
- 二零二五年度房屋抵押貸款再擔(dān)保服務(wù)合同3篇
- 二零二五年度家政服務(wù)人員權(quán)益保障三方合同范本3篇
- 二零二五年度教師職務(wù)晉升勞動(dòng)合同范本3篇
- 二零二五年度文化創(chuàng)意門(mén)面租賃與藝術(shù)展覽合作合同3篇
- 2025年度海上油輪保險(xiǎn)合同范本發(fā)布3篇
- 海南衛(wèi)生健康職業(yè)學(xué)院《西醫(yī)外科學(xué)醫(yī)學(xué)免疫學(xué)與病原生物學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 螃蟹涂鴉課程設(shè)計(jì)
- 二零二五年度二手房購(gòu)置糾紛調(diào)解服務(wù)合同
- DB13T 2802-2018 水利工程鑄鐵閘門(mén)技術(shù)規(guī)范
- 必修二unit4History and Traditions重點(diǎn)短語(yǔ)梳理
- 食堂改造與裝修設(shè)計(jì)方案
- 德國(guó)Lurgi公司低壓回轉(zhuǎn)脈沖袋除塵器技術(shù)
- Q∕GDW 12147-2021 電網(wǎng)智能業(yè)務(wù)終端接入規(guī)范
- 公園廣場(chǎng)綠地文化設(shè)施維修改造工程施工部署及進(jìn)度計(jì)劃
- 塑料件缺陷匯總
- 跌落測(cè)試(中文版)-ISTA-2A-2006
- ppt魚(yú)骨圖模板圖
- 右心導(dǎo)管檢查及心血管造影ppt課件
- 乳膠漆質(zhì)量檢驗(yàn)批驗(yàn)收記錄
評(píng)論
0/150
提交評(píng)論