美国社会保障局提供了从 1880 年至现在的婴儿姓名频率的数据. 其中数据集按
照年份分为多个文件.
1. 查看出生总数的变化(按照性别)
2. 增添新列: 每个名字相对于出生总数的比例.(按照年份和性别分组)
3. 分析名字趋势, 指定名字的数量变化
4. 分析名字的多样性,并且进一步探究是什么导致了男女多样性差异
5. 分析 男孩名字最后一个字母的分布在过去的 100 年里发生了重大的变化.
6. 男孩名字变成女孩名字以及反向.
任务1:查看出生总数的变化(按照性别)
import pandas as pd
import matplotlib.pyplot as plt
# 数据准备
years = range(1880, 2011)
pieces = []
columns = ['name', 'sex', 'births'] # 用作结果的列名列表
for year in years:
path = 'datasets/babynames/yob%d.txt' % year
frame = pd.read_csv(path, header=None, names=columns)
frame['year'] = year
pieces.append(frame)
# Concatenate everything into a single DataFrame
names = pd.concat(pieces, ignore_index=True)
#%%
total_births = names.pivot_table('births', index='year',
columns='sex', aggfunc=sum)
total_births.plot(title='Total births by sex and year')
plt.show()
数据规整
# 增加新列:分组内的百分比
def add_prop(group):
group['prop'] = group.births / group.births.sum()
return group
names = names.groupby(['year', 'sex']).apply