前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抓取第一批北京积分落户名单并做简要分析抓取分析&作图

抓取第一批北京积分落户名单并做简要分析抓取分析&作图

作者头像
SeanCheney
发布2018-12-05 15:11:12
5790
发布2018-12-05 15:11:12
举报
文章被收录于专栏:SeanCheney的专栏

结论:想要通过积分落户的方式获得北京户口,就要加入一家互联网公司,然后努力工作,最有机会在35岁到50岁之间成功。


抓取

公示只有几天,幸亏我在接口关闭之前把数据抓了(应该是官方怕泄露个人信息,关的很早)。

代码语言:javascript
复制
# 抓取北京市2018年积分落户公示名单
# http://www.bjrbj.gov.cn/integralpublic/settlePerson

import csv
import json
import requests

fw = open('luohu.csv', 'w')
writer = csv.writer(fw)
writer.writerow(['id','name','birthday','company','score'])

def get_publicity(page_number):
    url = 'http://www.bjrbj.gov.cn/integralpublic/settlePerson/settlePersonJson?sort=pxid&order=asc&limit=100&offset=0&name=&rows=100&page={}'.format(page_number*100)

    header = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                          '(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
        }

    response = requests.get(url,
                            headers=header,
                            timeout=5
                            )

    result = json.loads(response.text)

    for item in result['rows']:
        id = item['pxid']
        name = item['name']
        birthday = item['csrq']
        company = item['unit']
        score = item['score']
        print(id,name,birthday,company,score)
        writer.writerow([id, name, birthday, company, score])

def main():
    for i in range(0,61):
        get_publicity(i)


if __name__ == '__main__':
    main()

分析&作图

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

用describe()展示一些基本信息

代码语言:javascript
复制
df_luohu = pd.read_csv('luohu.csv')
print(df_luohu.describe())
代码语言:javascript
复制
                id        score
count  6019.000000  6019.000000
mean   3010.000000    95.654552
std    1737.679967     4.354445
min       1.000000    90.750000
25%    1505.500000    92.330000
50%    3010.000000    94.460000
75%    4514.500000    97.750000
max    6019.000000   122.590000

找到前20名落户人数最多的公司

看看自己的公司在不在榜上

代码语言:javascript
复制
df_luohu_grouped = df_luohu.groupby('company', as_index=False, sort=False).count()[['company','id']]
df_luohu_grouped_sorted = df_luohu_grouped.sort_values('id', ascending=False)
df_luohu_grouped_sorted.head(20)

落户积分分数分布

代码语言:javascript
复制
bins = [90,95,100,105,110,115,120,125]
bins = pd.cut(df_luohu['score'], bins)

def get_stats(group):
    return {'count': group.count()}

grouped = df_luohu['score'].groupby(bins)
bin_counts = grouped.apply(get_stats).unstack()

bin_counts.index = ['90~95', '95~100', '100~105', '105~110', '110~115', '115~120', '120~125']
bin_counts.index.name = 'score'
bin_counts.plot(kind='bar', alpha=1, rot=0)

前面的describe信息里可以看到,落户积分的中位数是94.46分(最低90.75,最高122.59)。评分差不多呈几何级数下降。

年龄分布

代码语言:javascript
复制
df_luohu['age'] = ((pd.to_datetime('2018-11') - pd.to_datetime(df_luohu['birthday'])) / pd.Timedelta('365 days'))

bins = [25,30,35,40,45,50,55,60,65,70]
bins = pd.cut(df_luohu['age'], bins)

def get_stats(group):
    return {'count': group.count()}

grouped = df_luohu['age'].groupby(bins)
bin_counts = grouped.apply(get_stats).unstack()

bin_counts.index = ['25~30',  '30~35', '35~40', '40~45', '45~50', '50~55', '55~60', '60~65', '65~70',]
bin_counts.index.name = 'age'
bin_counts.plot(kind='bar', alpha=1, rot=0)

基本上是人到中年才拿到了北京户口。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抓取
  • 分析&作图
    • 用describe()展示一些基本信息
      • 找到前20名落户人数最多的公司
        • 落户积分分数分布
          • 年龄分布
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档