美国社会保障局提供了从 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' % yearframe = pd.read_csv(path, header=None, names=columns)frame['year'] = yearpieces.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(add_prop)# 可以验证分组内的和是否为1
print(names.groupby(['year', 'sex']).prop.sum())# 得到分组内的前1000名数据,作为子数据集
def get_top1000(group):return group.sort_values(by='births', ascending=False)[:1000]grouped = names.groupby(['year', 'sex'])
top1000 = grouped.apply(get_top1000)   # 后续使用
top1000.reset_index(inplace=True, drop=True)  # drop为False则索引列会被还原为普通列,否则会丢失

任务2: 分析名字趋势, 指定名字的数量变化

boys = top1000[top1000.sex == 'M']
girls = top1000[top1000.sex == 'F']total_births = top1000.pivot_table('births', index='year',columns='name',aggfunc=sum)total_births.info()
subset = total_births[['John', 'Harry', 'Mary', 'Marilyn']] # 注意这里索引的方式subset.plot(subplots=True, figsize=(12, 10), grid=False,title="Number of births per year")
plt.show()


由图中,我们或许可以认为:这些名字已经不适合与美国人了,但是事实可能会更复杂。

任务3:分析名字的多样性,并且进一步探究是什么导致了男女多样性差异

table = top1000.pivot_table('prop', index='year',columns='sex', aggfunc=sum)
table.plot(title='Sum of table1000.prop by year and sex',yticks=np.linspace(0, 1.2, 13), xticks=range(1880, 2020, 10))
plt.show()

我们可以看到top1000名字所占比例正在下降,说明整体多样性正在提升。。

# 多样性的增加
# 注意这个函数的功能:找到0.5的索引位置
def get_quantile_count(group, q=0.5):group = group.sort_values(by='prop', ascending=False)return group.prop.cumsum().values.searchsorted(q) + 1diversity = top1000.groupby(['year', 'sex']).apply(get_quantile_count)
diversity = diversity.unstack('sex')
diversity.plot(title="Number of popular names in top 50%")
plt.show()


任务4:最后一个字母的革命
研究员发现,男孩名字的最后一个字母在过去100年发生了重大变化。

# 取到最后一个字母
get_last_letter = lambda x: x[-1]
last_letters = names.name.map(get_last_letter)
last_letters.name = 'last_letter'  # 给name属性命名,否则就是“name”有歧义table = names.pivot_table('births', index=last_letters,columns=['sex', 'year'], aggfunc=sum)subtable = table.reindex(columns=[1910, 1960, 2010], level='year')
print(subtable.head())# 得到百分比(每个组内每个字母占总各自总出生人数)
letter_prop = subtable / subtable.sum()  # 分组默认对行求和,正是我们想要的fig, axes = plt.subplots(2, 1, figsize=(10, 8))
letter_prop['M'].plot(kind='bar', rot=0, ax=axes[0], title='Male')
letter_prop['F'].plot(kind='bar', rot=0, ax=axes[1], title='Female', legend=False)
plt.show()

可知:以n结尾的男孩得到了显著的增长

再次按性别和年份标准化,并给定字母集。

# 取到最后一个字母
get_last_letter = lambda x: x[-1]
last_letters = names.name.map(get_last_letter)
last_letters.name = 'last_letter'  # 给name属性命名,否则就是“name”有歧义table = names.pivot_table('births', index=last_letters,columns=['sex', 'year'], aggfunc=sum)letter_prop = table / table.sum()
dny_ts = letter_prop.loc[['d', 'n', 'y'], 'M'].T
print(dny_ts.head())
dny_ts.plot()
plt.show()



在上图中,我们能够清楚的看到男孩“d n y”三个结尾字母的变化趋势。

任务5:男孩名字变成女孩名字以及反向.(观察指定名字的男女趋势变化)

# 取出包含“lesl”的名字 从top1000开始操作
all_names = pd.Series(top1000.name.unique())
lesley_like = all_names[all_names.str.lower().str.contains('lesl')]
filtered = top1000[top1000.name.isin(lesley_like)]table = filtered.pivot_table('births', index='year',columns='sex', aggfunc='sum')table = table.div(table.sum(1), axis=0)table.plot(style={'M': 'k-', 'F': 'k--'})
plt.show()

数据分析实战(三):美国1800~2010年婴儿名字相关推荐

  1. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  2. 三十四、R语言数据分析实战

    @Author : By Runsen @Date : 2020/5/14 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  3. 大数据分析实战-信用卡欺诈检测(三)- 模型评估

    大数据分析实战-信用卡欺诈检测(二)-下采样方案和交叉验证 大数据分析实战-信用卡欺诈检测(一) 文章目录 模型评估方法 模型评估方法 接下来,没错,还没到实际建模任务,还需要考虑模型的评估方法,为什 ...

  4. Python数据分析实战(2)使用Pandas进行数据分析

    文章目录 一.Pandas的使用 1.Pandas介绍 2.Pandas基本操作 Series的操作 创建DataFrame 常见列操作 常见行操作 DateFrame的基本操作 时间操作 3.Pan ...

  5. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我 ...

  6. 【天池龙珠计划】Python训练营 Task04 Python数据分析:从0完成一个数据分析实战

    [天池龙珠计划]Python训练营 Task04 Python数据分析:从0完成一个数据分析实战(利用Pandas分析美国选民总统喜好度) 文章目录 [天池龙珠计划]Python训练营 Task04 ...

  7. 【R语言与数据分析实战】数据操作(一):基于向量的处理与外部数据处理

    目录 1.R中的常用数据集 2.读写CSV文件 (1) 读写CSV文件 (2) 读写对象文件 3.合并数据框的行与列 4.apply系数函数 (1) apply (2) lapply (3) sapp ...

  8. 临床基因组学数据分析实战助力解析Case,快速发表文章

    福利公告:首期<临床基因组学数据分析实战>线上/线下课程已圆满结束.现于2022年春节前,安排第二期和第三期课程,分别为:北京,2021年12月24-26:广州,2022年1月7-9.(线 ...

  9. 北京、广州同时开课 | 临床基因组学数据分析实战助力解析Case,快速发表文章...

    福利公告:首期<临床基因组学数据分析实战>线上/线下课程已圆满结束.现于2022年春节前,安排第二期和第三期课程,分别为:北京,2021年12月24-26:广州,2022年1月7-9.(线 ...

  10. 临床基因组学数据分析实战开课啦!!!

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现安排<临床基因组学数据分析实战>于2021年11月12-14 线上/线下课程 (线上课是通过腾讯会议实时直播线下课,实时互 ...

最新文章

  1. 【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
  2. java处理最后一周_Java获取某年某周的最后一天
  3. JUC原子类-引用类型(四)
  4. 解决Maven打包(编译)慢的问题
  5. [安卓】Error和Exception的区别
  6. 百度2017春招笔试
  7. 2019windows上安装Mac OS 10.14过程详细截图
  8. App客户端性能测试点总结
  9. property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解...
  10. 目前数据可视化工具软件的排名
  11. 厘米换算英尺英寸java
  12. C语言(静态链接库和动态链接库)
  13. NepCTF2022
  14. IE被劫持多一个IE图标,无法删除主页也被篡改
  15. Android数据库更新并保留原来数据的实现
  16. 新型穿墙监控雷达Range-R:让你的隐私无所遁形(转)
  17. 用CSS 实现水波扩散的特效
  18. Python就业都有哪些岗位?
  19. 镜头分辨率的计算和理解
  20. Android 培训课程V1.0

热门文章

  1. WTL自绘界面库(QsImageMgrCtrlBase)
  2. 12个免费在线Logo生成器
  3. [转载]《澄明之境》:投资是一种信仰
  4. [Cydia] 使用Cydia安装iPA破解补丁教程
  5. 简单3步打造明星气质妆容 清凉入夏
  6. 大数据告诉你——垃圾围城,现行的垃圾分类制度,作用到底能有多大?
  7. pandas学习笔记(十一):绘图(Plotting)
  8. 恩,今天把git和sublime结合了一下。。然后看了下《西部世界》
  9. php ipa下载 解码,ipa下载的方法
  10. 常用广告过滤规则整理