五十万人名单完成简单的数据分析

//最最基础的数据分析,以后还会完善,这次的分析只是用来学习语法,如果有不对的地方,欢迎指教

代码地址:点击打开链接

直接贴代码,注释已经很完整了

#初始操作,从数据中读出需要的东西
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()



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