五十萬人名單完成簡單的數據分析

//最最基礎的數據分析,以後還會完善,這次的分析只是用來學習語法,如果有不對的地方,歡迎指教

代碼地址:點擊打開鏈接

直接貼代碼,註釋已經很完整了

#初始操作,從數據中讀出需要的東西
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()



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章