python人名统计_「姓名分析」Python|美国婴儿姓名分析 - seo实验室
姓名分析
01 起
我们拿到一份1880-2016这136年间美国婴儿取名的数据(数据源在这里下载),数据总共有189万条,57.7M的大小,字段如下:
下面我们使用Python3来对该数据集进行分析,看看一百多年来,男孩女孩姓名趋势。
首先读取1880-2016年的取名数据,由于每年的数据是一个独立的dataframe,因此我们使用concat()方法将各年数据整合为一个dataframeimport pandas as pd
#读取1880-2016年婴儿姓名使用信息,由于信息表按年统计,因此需要将多年数据整合到一张表中
years=range(1880,2017)
columns=["name","gender","frequency"]
pieces=[] #用于存储循环读取的每一年的数据,list中的每个元素代表一年的数据
#使用循环读取每年数据,并将各年数据都存入pieces中,pieces列表的各元素表示各年的数据
for year in years:
path="/Users/dengsudden/Documents/python_course/names/yob%d.txt" %year
frame=pd.read_csv(path,names=columns)
frame["year"]=year
pieces.APPend(frame)
#中pieces列表中填入各年数据后,需要使用concat方法将pieces各元素整合在一起
baby_names=pd.concat(pieces,ignore_index=True)
baby_names.tail()
输出结果如下,这是数据表的最后5行,输出方便大家观察数据表结构:
02 可视化分析
1. 统计不同年份、不同性别分组下,各名字出现次数所占分组人数比例
思路:这里我们先自定义了一个函数dd_pct,然后使用了groupby按年份、性别分组,最后分别对每个分组调用我们的自定义函数add_pct#先自定义函数,统计分组中各名字占比
def add_pct(group):
group["pct"]=group.frequency/group.frequency.sum()*100
return group
baby_names=baby_names.groupby(["year","gender"]).apply(add_pct)
baby_names.head()
输出结果如下,可以看到,数据表中增加了一列pct,代表各名字出现次数在分组中的比例:
2. 排名:给出不同年份、不同性别分组下,各名字在分组中出现频率的排名
思路:现将数据按年份、性别分组,然后对分组数据的frequency列调用rank()方法降序得到排名,并将排名赋到新增的“ranked”列baby_names["ranked"]=baby_names.groupby(["year","gender"])["frequency"].rank(ascending=False)
baby_names.head()
输出结果如下:
3. 可视化:每年最流行的男孩女孩名字的使用次数所占当年出生男孩女孩总数的比例
思路:首先使用布尔型索引将数据分为男孩数据、女孩数据(注意,这时的数据中已经有ranked排名这一列了),对于男孩数据,选出每年出现频率最高的名字(ranked==1),然后按照x-y=year-pct作图,女孩数据同理。import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format="retina"
#布尔索引选取数据中的男孩女孩
dfm=baby_names[baby_names.gender=="M"]
dff=baby_names[baby_names.gender=="F"]
#每年最流行的男孩名字
rank1m=dfm[dfm.ranked==1]
#每年最流行的女孩名字
rank1f=dff[dff.ranked==1]
输出结果如下,这里只输出了前5行数据:
接下来我们对以上数据可视化,从而对于最流行的名字的占比趋势有个直观的了解。
方法:调用matplotlib包,具体使用方法如下。#绘制折线图
plt.plot(rank1m.year,rank1m.pct,color="blue",linewidth=2)
#plt.fill_between设置填充线与坐标轴之间的空间
plt.fill_between(rank1m.year,rank1m.pct,color="blue",alpha=0.2)
#设置坐标轴区间范围
plt.xlim(1880,2016)
plt.ylim(0,9)
#美化图:给图添加标题,调整字体大小等
plt.title("Popularity of 1# boys'name by year",size=18,color="blue")
plt.xlabel("Year",size=16)
plt.ylabel("% of male births",size=16)
输出结果如下:
女孩姓名同理,输出结果如下:
根据以上输出结果,我们发现,不论是男孩还是女孩,每年最流行的名字所占当年分组出生人数比例都在下降,是什么原因导致的呢?民众的思想更加自主,越来越个性化
还有一个原因可能是每年可选择的姓名数越来越多了,下面我们用统计结果来证明
4. 可视化:每年可选择的姓名数量趋势图
思路:按年份、性别分组,统计各分组下的姓名数量,然后根据按年份,绘制不同性别各年度可选姓名数量的趋势图name_count=baby_names.groupby(["year","gender"]).size() #.size()返回一个series
#使用to_frame将series转换为dataframe
name_count=name_count.to_frame(name="name_count").reset_index()
#将数据按男女分组
name_countm=name_count[name_count.gender=="M"]
name_countf=name_count[name_count.gender=="F"]
name_count的前5行输出结果如下:
接下来根据统计结果绘图plt.plot(name_countm.year,name_countm.name_count,color="blue",linewidth=2)
plt.fill_between(name_countm.year,name_countm.name_count,color="blue",alpha=0.2)
plt.xlim(1880,2016)
plt.ylim(0,17000)
plt.title("Number of boy's name by year",size=20,color="blue")
plt.xlabel("Year",size=18)
plt.ylabel("Number of names",size=18)
趋势图如下:
通过以上验证可以看到,不论男女,可选名字数量逐年递增,这可能也是导致每年最流行的名字占比当年出生人口比例逐年下降的因素之一。(当然,这也可能是民众思想解放,创造力爆发的结果)
03 总结
本文分析了一份189完数据量的婴儿姓名数据,主要利用python numpy/pandas模块以及matplotlib模块。
实操代码我放在了github上实操代码
希望对你有帮助~~
文章最后发布于: 2018-09-21 15:14:27
相关阅读
Timing一款帮助学生们提高学习效率、拒绝拖延、成就更好自己的高效学习软件。本文是关于Timing的产品分析报告,enjoy~昨天在和360
1 GPU是什么如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片。显卡的处理器称为图形处理
小编推荐:数据分析是很多人推崇的产品需求制定方法,用数据说话已经渐渐变成产品经理的至理名言,但不能迷信数据,毕竟数据的真实性、客
https://sq.163yun.com/blog/article/173552201158811648
https://sq.163yun.com/blog/article/173554725500456960
description:
个人理解整理的尼尔森10原则模型如下:这次检验的产品“我的安吉拉”简介如下:1、产品定位:“我的安吉拉”是一款针对儿童的游戏APP,用
python人名统计_「姓名分析」Python|美国婴儿姓名分析 - seo实验室相关推荐
- 赫兹的单位换算_「频率单位」CPU频率和单位换算 - seo实验室
频率单位 在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号.脉冲信号之间的时间间隔称为周期:而将在单位时间(如1秒)内所产生的脉冲个数称为频率.频率是描述周期性循环信号(包括 ...
- inventor软件绘制百叶窗方法_「百叶窗模型」solidworks怎么绘制百叶窗模型? - seo实验室...
百叶窗模型 百叶窗是钣金件中常见的特征,这片分享介绍如何建百叶窗的模型. 1.在solidworks中找到图示的文件夹,可以看到一个自带的百叶窗模型. 2.双击这个模型,即可以生成零件. 3.为了避免 ...
- java创建数组并赋值_「java 数组」Java创建数组的方法 - seo实验室
java 数组 最近学java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章! Java创建数组的方法大致有三种 说明:这里以int为数据类型以arr ...
- ffmpeg 声音参数_「xxx video」ffmpeg参数中文详细解释 - seo实验室
xxx video a) 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的... -f fmt 强迫采用格式fmt -I filename 输入文件 -y ...
- sin的傅里叶变换公式_「傅里叶变换公式」傅里叶变换的解释与推导 - seo实验室...
傅里叶变换公式 http://blog.csdn.net/linmingan/article/details/51194187 注:文章中有一两处公式错误,(1)辅助角公式中求幅值应该是平方开根号,( ...
- python编写赛车_「世界模型」实现,一步步让机器掌握赛车和躲避火球的技能
前段时间,由谷歌大脑研究科学家 David Ha 与瑞士 AI 实验室 IDSIA 负责人 Jürgen Schmidhuber(他也是 LSTM 的提出者)共同提出的「世界模型」让人工智能在「梦境」 ...
- python 文件路径_「按需学Python」 1. Glob库遍历路径/文件
小前言: 本人Python小白,因为最近想整理下近10几年的老照片,然后就有了写脚本批处理的想法.初始需求其实很简单,就是筛选自己想要的照片到指定文件夹,然后按照exif信息重命名照片为拍摄时间_拍摄 ...
- 字符串输出为什么第一个没了_「课堂笔记」Python基础语法:变量和输入输出
学习了视频课程<财务Python基础--财务人的第一个Python程序|输入输出>,小编特为大家整理了本节内容的文字版笔记,一起来温故知新吧~~ 变 量 一.为什么要引入变量? 在信息计算 ...
- 零基础自学python计划_「经验分享」python零基础学习规划与建议!
如果你选择了自学,我想给你提几点建议: 1.找浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都手打一遍,搞懂为什么. 2.去找实际项目练手.最好是要有真实的项目做. ...
- python获取财务数据_「净利润增长率」使用python获取股票“净利润同比增长率”等“上市公司成长能力”数据 - seo实验室...
净利润增长率 证券宝www.baostock.com是一个免费.开源的证券数据平台. 提供大量准确.完整的证券历史行情数据.上市公司财务数据.实时证券行情推送服务等. 通过Python API获取证券 ...
最新文章
- 10个最常用 Windows Vista运行命令
- 欢迎加入网络管理论坛群
- 机器学习--Hoeffding Inequality--界定概率边界
- 区别用户使用的终端设备代码 转 https://segmentfault.com/a/1190000012957023
- 使用Nginx过滤网络爬虫
- 前端小结(5)---- iframe
- 清华团队CrossWOZ: 这篇顶会,助你徒手搭建任务导向对话系统
- 【软件工程】极限编程
- vitamio 缓冲一部分时,loading还没消失,直接点击播放,loading未能消失
- 如何保证redis数据都是热点数据
- 百度论文引用网络节点分类比赛
- 【超链接】一些OI学习网站
- eclipse配色方案推荐_收藏!58个设计师最佳配色工具网站
- 入手华为云学生机体验
- win7 局域网共享文件
- 15-P-PCA从概率角度思考PCA主成分分析
- 不懂java,这篇文章带你入门起飞
- 有n个人围成一圈编号1~n,顺序排好,从第一个人开始1到3报数,凡是报到3的人退出圈子,C语言编程出圈顺序
- PDF、Word、Excel文件前端预览实操干货都在这!
- 漫威对决同位素实验室怎么玩
热门文章
- SPOJ PHT Pigeonhole Tower 预处理+二分 || 找规律
- poj 3626 Mud Puddles
- Slave_IO_Running: No 的解决
- Unity Andriod调试
- [项目管理-28]:四象限法与任务的时间优先级管理
- lg android 互动游戏,LG G7 开启游戏模式(理论适用所有LG手机)
- windows server 2008 R2 怎么集成USB3.0驱动
- 游戏开发核心技术之-存档与读档(1)
- Python学习——三分钟分析目前最火的电视剧
- 考拉:你以为我想呆萌?幼年吃屎长大磕毒,差点就没活下来