我是靠谱客的博主 呆萌花卷,这篇文章主要介绍1880-2014年间全美婴儿姓名分析,现在分享给大家,希望可以做个参考。

针对全美婴儿姓名数据进行一些分析

1880-2014年间全美婴儿姓名数据来源于kaggle,利用这个数据我们可以进行一些有趣的分析,比如分析这些年中叫西蒙的婴儿数量的变化,国家婴儿数据如下:
国家婴儿数据
有五个特征,分别为ID、姓名、年份、性别和数量。以下为州数据state_names:
州婴儿数据
我们可以看到有六个特征,相比national来说,增加了州一项。

下面开始正式进入数据分析,我使用的是jupyter notebook(也可以使用spyder等IDE,但是注意怎样实现即时交互):

复制代码
1
2
3
4
5
6
import pandas as pd import numpy as np import matplotlib.pyplot as plt from collections import Counter data=pd.read_csv('./NationalNames.csv') data.head()

结果输出:
这里写图片描述

复制代码
1
data.info()

输出数据类型(这里隐藏结果显示)
将名字和数量进行统计,并放在一个字典中:

复制代码
1
2
3
4
5
6
7
8
9
10
11
#将名字和相应的数量进行统计,存在一个字典中 names_dict=dict() for index,row in data.iterrows(): if row['Name'] not in names_dict: names_dict[row['Name']]=row['Count'] else: names_dict[row['Name']]+=row['Count'] name='Mary' print('%s->%i' %(name,names_dict.get(name))) name='Minnie' print('%s->%i' %(name,names_dict.get(name)))

统计最流行的10个名字和最不流行的10个名字:

复制代码
1
2
3
4
5
6
7
8
9
10
#利用counter计数器你的most_common函数进行统计 #返回最常用的10个名字以及相应计数 top_10=Counter(names_dict).most_common(10) print('全美最流行的10个婴儿名字:') for pair in top_10: print('姓名:%s->数量:%i' %(pair[0],pair[1])) #返回最不常用的10个名字,在这里我们直接取top_10里最后10个数就好了 print('全美最不流行的10个婴儿名字:') for pair in Counter(names_dict).most_common()[:-10:-1]: print('姓名:%s->数量:%i' %(pair[0],pair[1]))

计算名字的平均长度:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#名字的平均长度 def average_length_data_transform(): ''' 统计每年男性、女性姓名的平均长度''' #按行遍历数据 years=[] #女性姓名 female_average_length=[] female_average_name_length=dict() #男性名字 male_average_length=[] male_average_name_length=dict() for index,row in data.iterrows(): if row['Gender']=='F':#女性 curr_year=row['Year'] curr_name_length=len(row['Name']) if curr_year not in female_average_name_length: female_average_name_length[curr_year]=[curr_name_length,1] else: female_average_name_length[curr_year][0]+=curr_name_length female_average_name_length[curr_year][1]+=1 else:#男性 curr_year=row['Year'] curr_name_length=len(row['Name']) if curr_year not in male_average_name_length: male_average_name_length[curr_year]=[curr_name_length,1] else: male_average_name_length[curr_year][0]+=curr_name_length male_average_name_length[curr_year][1]+=1 for key,value in female_average_name_length.items(): years.append(key) female_average_length.append(float(value[0])/value[1]) for key,value in male_average_name_length.items(): years.append(key) male_average_length.append(float(value[0])/value[1]) return (female_average_length,female_average_name_length,male_average_length,male_average_name_length)

注意上面定义的是一个函数,因此使用的时候需要调用

复制代码
1
2
3
4
5
6
7
#处理时间较长 female_average_length,female_average_name_length,male_average_length,male_average_name_length=average_length_data_transform() for year in range(1880,1891): print('年份:%i,总长:%i,个数:%i' %(year,female_average_name_length.get(year)[0],female_average_name_length.get(year)[1])) #输出平均长度 print(female_average_length[:10])

可视化输出:

复制代码
1
2
3
4
5
6
7
8
9
10
years=range(1880,2015) f,ax=plt.subplots(figsize=(10,6)) ax.set_xlim([1880,2014]) plt.plot(years,female_average_length,label='Average length of female names',color='r') plt.plot(years,male_average_length,label='Average length of male names',color='b') ax.set_ylabel('Length of name') ax.set_xlabel('Year') ax.set_title('Average length of names') legend=plt.legend(loc='best',frameon=True,borderpad=1,borderaxespad=1) plt.show()

average length of names

最后

以上就是呆萌花卷最近收集整理的关于1880-2014年间全美婴儿姓名分析的全部内容,更多相关1880-2014年间全美婴儿姓名分析内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(124)

评论列表共有 0 条评论

立即
投稿
返回
顶部