//最最基礎的數據分析,以後還會完善,這次的分析只是用來學習語法,如果有不對的地方,歡迎指教
代碼地址:點擊打開鏈接
直接貼代碼,註釋已經很完整了
#初始操作,從數據中讀出需要的東西
rFile=open("50萬人名名單.txt","r",encoding="utf-8",errors="ignore")
nameContent=rFile.read()
rFile.close()
nameList=nameContent.split('\n')#將名字做分割,list中的每一項都是一個名字
########################第四題######################################
#4、 針對上述list數據,按姓名字數排序,將超過4字的姓名數據刪除;
#
nameLessFive=[i for i in nameList if(len(i)<5)]#列表解析,將名字長度小於5個的都摘出來
nameSort=sorted(nameLessFive, key=lambda x: len(x))#排序 ,規則,按照長度
# print(nameSort)
nameLessFiveFile=open('第四題.txt','w',encoding="utf-8",errors="ignore")
for i in nameSort:
print(i,file=nameLessFiveFile)#輸出到文件
nameLessFiveFile.close()
########################第五題#######################################
#5、針對上述list數據,統計每個姓出現的次數,不考慮複姓問題(複姓視爲單姓,第一個字爲姓),按降序排列;
nameFirst={}
#思路:for in 循環,對於每一個名字,如果在之前的dict中出現過,計數+1,否則,計數爲1
for name in nameList:
if name[0] in nameFirst:#如果在之前的dict中出現過,計數+1
nameFirst[name[0]]+=1
else: #否則,計數爲1
nameFirst[name[0]]=1
#print(nameFirst)
nameFirstSort=sorted(nameFirst.items(),key=lambda x:x[1],reverse=True)#排序,規則:按姓出現的數量,逆序
#print(nameFirstSort)
nameFirstSortFile=open('第五題.txt','w',encoding="utf-8",errors="ignore")
for i in nameFirstSort:
print(i[0],i[1],file=nameFirstSortFile,sep="\t")
nameFirstSortFile.close()
##########################第六題###########################################
#6、 針對上述list數據,統計名(姓之外的字)中每個字出現次數,相當於統計名稱常用字,
# 不考慮複姓問題,按降序排列;
nameNoFirst={}
for name in nameList:#爲了避過姓,所以用while做循環。對於每一個名字
lenName=len(name)#求出每個名字的長度
num=1 #name爲1,避過姓
while num<lenName:#對於每個名字中的字,如果之前出現過,dict+1;否則,dict=1
if name[num] in nameNoFirst:
nameNoFirst[name[num]]+=1
else:
nameNoFirst[name[num]]=1
num+=1
nameNoFirstSort=sorted(nameNoFirst.items(),key=lambda x:x[1],reverse=True)#排序,規則:按照字出現的次數,逆序
#print(nameNoFirstSort)
nameNoFirstSortFile=open('第六題.txt','w',encoding="utf-8",errors="ignore")
for i in nameNoFirstSort:
print(i[0],i[1],file=nameNoFirstSortFile,sep="\t")
nameNoFirstSortFile.close()
#####################第七題#################################################
#7、針對上述list數據,統計出姓名中最後一個字出現的次數,按降序排列;
nameLast={}
for name in nameList:#for in 循環 ,對於每一個名字 name[-1]爲最後一個字
if name[-1] in nameLast:#處理同上
nameLast[name[-1]]+=1
else:
nameLast[name[-1]]=1
#print(nameLast)
nameLastSort=sorted(nameLast.items(),key=lambda x:x[1],reverse=True)#排序
#print(nameNoFirstSort)
nameLastSortFile=open('第七題.txt','w',encoding="utf-8",errors="ignore")
for i in nameLastSort:
print(i[0],i[1],file=nameLastSortFile,sep="\t")
nameLastSortFile.close()
####################第八題##################################################
#8、針對上述list數據,統計名中兩字重複出現的次數,
# 相當於”麗麗”出現的次數,”萌萌”出現的次數;
nameDouble={}
for name in nameList:#for in 循環 name 爲每一個名字
lenName=len(name)#while 來處理每一個名字
num=1 #num從一開始(即第二個字)
while num<lenName:
if name[num]==name[num-1]:#如果這個字和前一個字相同,即重字,放入字典
if name[num] in nameDouble:
nameDouble[name[num]]+=1
else:
nameDouble[name[num]]=1
num+=1
#print(nameDouble)
nameDoubleSort=sorted(nameDouble.items(),key=lambda x:x[1],reverse=True)#排序
#print(nameNoFirstSort)
nameDoubleSortFile=open('第八題.txt','w',encoding="utf-8",errors="ignore")#輸出
for i in nameDoubleSort:
print(i[0],i[1],file=nameDoubleSortFile,sep="\t")
nameDoubleSortFile.close()