利用pandas模塊處理百家姓數(shù)據(jù)
說(shuō)在前面
“百家姓數(shù)據(jù)分析”程序功能相對(duì)復(fù)雜,涉及函數(shù)多,因此需要教師對(duì)pandas模塊和DataFrame對(duì)象做簡(jiǎn)單介紹和示例演示,并為示例代碼提供充分的注釋?zhuān)詭椭鷮W(xué)生順利理解示例代碼;采用小組合作學(xué)習(xí),將問(wèn)題分解,每組同學(xué)只需完成其中一個(gè)任務(wù),學(xué)有余力的同學(xué)可以完成多個(gè)任務(wù)。這樣既明確了基本任務(wù),使每一位同學(xué)都參與進(jìn)來(lái),又實(shí)現(xiàn)了分層教學(xué)的目標(biāo)。

利用pandas模塊處理百家姓數(shù)據(jù)
已有素材:浙江教育出版社(https://zjjy.zjcbcm.com/)提供了某地姓名數(shù)據(jù)csv文件,從中隨機(jī)抽取了1000000條姓名數(shù)據(jù)。



學(xué)生活動(dòng)1

教師講解
初識(shí)DataFrame對(duì)象。


學(xué)生活動(dòng)2
活動(dòng)2: 拆分姓名。

#!/usr/bin/python3# 文件名: 百家姓處理之拆分姓氏# 作者:巧若拙# 時(shí)間:2021-11-14import pandas as pd'''函數(shù)功能:讀取csv文件并拆分名字,如果是復(fù)姓,則按照復(fù)姓處理。函數(shù)名:split_name(file_name)參數(shù)表:file_name -- 存儲(chǔ)了姓名信息的csv文件。返回值:返回包含了姓氏、名字和人數(shù)列的DataFrame對(duì)象。'''def split_name(file_name):# 定義復(fù)姓 listfx = ['歐陽(yáng)','太史','端木','上官','司馬','東方','獨(dú)孤','南宮','萬(wàn)俟','聞人','夏侯','諸葛','尉遲','公羊','赫連','澹臺(tái)','皇甫','宗政','濮陽(yáng)','公冶','太叔','申屠','公孫','慕容','仲孫','鐘離','長(zhǎng)孫','宇文','司徒','鮮于','司空','閭丘','子車(chē)','亓官','司寇','巫馬','公西','顓孫','壤駟','公良','漆雕','樂(lè)正','宰父','谷梁','拓跋','夾谷','軒轅','令狐','段干','百里','呼延','東郭','南門(mén)','羊舌','微生','公戶(hù)','公玉','公儀','梁丘','公仲','公上','公門(mén)','公山','公堅(jiān)','左丘','公伯','西門(mén)','公祖','第五','公乘']xm, xing, ming = [], [], [] #分別用來(lái)存儲(chǔ)姓名、姓氏和名字with open(file_name, 'r', encoding='utf-8') as file: #打開(kāi)文件讀取數(shù)據(jù)for name in file: # 取姓、名,如果是復(fù)姓,則按照復(fù)姓處理name = name.strip() #去除兩側(cè)空格和回車(chē)符xm.append(name) #存儲(chǔ)姓名if name[0:2] in fx:p = 2else:p = 第1空xing.append(name[:p]) #存儲(chǔ)姓氏第2空 #存儲(chǔ)名字#使用字典構(gòu)造包含了姓名、姓氏和名字列的DataFrame對(duì)象(不含標(biāo)題)data = {第3空}return pd.DataFrame(data)#設(shè)置中英文字符對(duì)齊,以改善輸出格式pd.set_option('display.unicode.ambiguous_as_wide', True)pd.set_option('display.unicode.east_asian_width', True)#直接讀取文件到DataFrame對(duì)象file_name = 'names2.csv' #存儲(chǔ)百家姓數(shù)據(jù)的文件df = pd.read_csv(file_name)print(df)print("#" * 50)#讀取csv文件并拆分名字,如果是復(fù)姓,則按照復(fù)姓處理df = split_name(file_name)print(df)
學(xué)生活動(dòng)3
活動(dòng)3: 統(tǒng)計(jì)和分析數(shù)據(jù)。

#!/usr/bin/python3# 文件名: 使用pandas處理百家姓數(shù)據(jù)# 作者:巧若拙# 時(shí)間:2021-11-14import pandas as pddef split_name(file_name):pass #代碼略#設(shè)置中英文字符對(duì)齊,以改善輸出格式pd.set_option('display.unicode.ambiguous_as_wide', True)pd.set_option('display.unicode.east_asian_width', True) #中英文字符對(duì)齊file_name = 'names2.csv' #存儲(chǔ)百家姓數(shù)據(jù)的文件df = split_name(file_name)#讀取csv文件并拆分名字,如果是復(fù)姓,則按照復(fù)姓處理print(df)print("#" * 50)#輸出所有和你同名的人ming = '建國(guó)'print(df[df['名字']==ming])print("#" * 50)#問(wèn)題1:輸出和你同姓的人數(shù)?xing = '梁'print(第4空)print("#" * 50)#按“姓氏”分組計(jì)數(shù),根據(jù)人數(shù)排名,并增加“排名”列xing_df = df.groupby('姓氏').count()xing_df['排名'] = xing_df['名字'].rank(ascending=False)#問(wèn)題2:看看你的姓氏排名第幾位?print(xing_df.loc[['趙','錢(qián)','孫','李']]) #輸出趙錢(qián)孫李的排名print("#" * 50)n = 10#問(wèn)題3:輸出前n個(gè)最常見(jiàn)的姓氏?print("輸出前n個(gè)最常見(jiàn)的姓氏:")xing_df = 第5空 # 按關(guān)鍵詞“姓氏”分組計(jì)數(shù)xing_df.sort_values('姓名', ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(xing_df[:n])print("#" * 50)#輸出前n個(gè)最常見(jiàn)的名字print("輸出前n個(gè)最常見(jiàn)的名字:")ming_df = df.groupby('名字').count() #按關(guān)鍵詞“名字”分組計(jì)數(shù)ming_df.sort_values('姓名', ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(ming_df[:n])print("#" * 50)#問(wèn)題4:輸出前n個(gè)最常見(jiàn)的復(fù)姓?print("輸出前n個(gè)最常見(jiàn)的復(fù)姓:")xing_df = 第6空 #挑選出所有的復(fù)姓xing_df = xing_df.groupby('姓氏').count() #按關(guān)鍵詞分組計(jì)數(shù)xing_df.sort_values('姓名', ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(xing_df[:n])print("#" * 50)#輸出前n個(gè)最常見(jiàn)的雙名print("輸出前n個(gè)最常見(jiàn)的雙名:")ming_df = df[df['名字'].str.len()==2] #挑選出所有的雙名ming_df = ming_df.groupby('名字').count() #按關(guān)鍵詞分組計(jì)數(shù)ming_df.sort_values('姓名', ascending=False, inplace=True) #根據(jù)人數(shù)降序排序print(ming_df[:n])
教師總結(jié)
總結(jié)和期望。



需要本文PPT、源代碼和課后練習(xí)答案的,可以加入“Python算法之旅”知識(shí)星球參與討論和下載文件,“Python算法之旅”知識(shí)星球匯集了數(shù)量眾多的同好,更多有趣的話(huà)題在這里討論,更多有用的資料在這里分享。
我們專(zhuān)注Python算法,感興趣就一起來(lái)!
相關(guān)優(yōu)秀文章:
課堂4:循環(huán)結(jié)構(gòu)經(jīng)典案例
課堂7:算法程序?qū)崿F(xiàn)的綜合應(yīng)用
