数据分析-美国小孩英文名分析-可视化(含代码)


数据抓取

数据集的获取是我们进行数据分析的第一步。现在获取数据的主要途径一般为:现成数据;自己写爬虫去爬取数据;使用现有的爬虫工具爬取所需内容,保存到数据库,或以文件的形式保存到本地。
博主用的是现有的数据进行数据分析。
如果是想通过自己写爬虫来爬取数据,那么整体思路大致分为:确定爬取的内容、对主页面解析、子页面的获取、子页面的解析、数据的保存。现在的网站或多或少都有一些基本的反爬措施,那么,我们在写爬虫时就应针对该网站制定相应的反反爬策略,如请求头、IP代理、cookie限制、验证码限制等。这些常见的反爬机制要能够应用在你写的爬虫当中。
如果爬虫大致能够爬取我们所需的内容,下一步,我认为就是提高爬取速度,增加稳定性了。我们知道当request模块对页面发起请求时,整个程序是处于阻塞状态,在请求的这段时间后面的代码是无法运行的,所以说当我们需要对很多个页面发起请求时,我们可以通过使用异步协程的方式,使我们能够利用阻塞的这段时间去执行其他任务。由于requests模块是不支持异步协程的,我们需要使用aiohttp模块来对页面发起请求,再搭配asyncio来实现异步爬虫。
提高稳定性,就需要一些稳定的ip代理,防止爬虫运行期间ip被封,推荐自己爬取一些免费的ip代理的网站,通过代码测试一下,将能用的保存到数据库中,使用时直接通过类来使用即可。如果你对爬虫中的ip代理的使用还是很了解,不妨看下这篇文章(异步爬虫)requests和aiohttp中代理IP的使用。
数据爬取过程可以看博主之前的博客,里面有简单的爬虫,在这里就不介绍了。


数据导入

一、pandas是什么?

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

二、使用步骤

1.引入库

代码如下(示例)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv('res.csv')
print(data.head())

该处使用的是现有的数据,也可以为自己爬取的数据。


数据分析

把所有州的姓名合在一起,查看所有州一起英文名使用情况,查看使用最高的前一百个名字:
代码如下(示例)

d=data.sort_values(by=['number'],ascending=False)
d #把所有州的所有名字按使用数量进行降序排序

dt=d.iloc[0:100]#前100行
dt#查看1910~2019使用的top100

结果如下:
按降序排序:
在这里插入图片描述

top100:
在这里插入图片描述

对每个姓名的使用长度的情况分析:

df=data.groupby('name').describe().reset_index(drop=None)
df

在这里插入图片描述

  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,代表各名字出现次数在分组中的比例:
在这里插入图片描述

  1. 排名:给出不同年份、不同性别分组下,各名字在分组中出现频率的排名
    现将数据按年份、性别分组,然后对分组数据的number列调用rank()方法降序得到排名,并将排名赋到新增的“ranked”列
baby_names["ranked"]=baby_names.groupby(["year","gender"])["frequency"].rank(ascending=False)
baby_names.head()

结果如下:

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值