专栏首页CDA数据分析师最新考研调剂信息全面获取!Python帮你一手掌握

最新考研调剂信息全面获取!Python帮你一手掌握

CDA数据分析师 出品

【导语】:今天我们聊聊如何获取考研调剂数据,Python技术部分可以直接看第三部分。

在上周考研分数已经出来了,最近多所院校官网也已经开始陆续发布调剂信息。要知道,在考研中调剂是非常重要的一环,复试与调剂也总是密不可分的,今天我们就带大家好好解读一下。

Show me data,用数据说话

今天我们聊聊 考研调剂

点击下方视频,先睹为快:

视频内容

01

考研调剂

是怎么回事?

首先调剂指的是:

在研究生招生工作中,由于招生计划的限制,有些考生虽然达到分数线,但并不能被安排复试或复试后并不能被录取,对这些考生,招生单位将负责把其全部材料及时转至第二志愿单位,这个过程即称为考研调剂。

也就是说,那些没被自己心仪院校录取的考研生,想要考研上岸,这时候就需要去调剂,考研调剂中又有很多的注意事项,直接关乎着学生最后的考研成败。

所以说,有调剂意向的小伙伴,那就要抓紧开始准备了,毕竟越早联系就多一分机会。

02

调剂时

要特别注意的三点

在准备调剂时,以下这三点是十分重要的:

1. 调剂院校的往年录取分数

每个院校在考研中都有自己的录取分数线,而且每年基本都不会相差很大,因此,在找调剂院校的时候,一定要注意该院校的往年录取分数,看自己是否能达到这个标准。

2. 院校调剂的名额

每个院校的调剂名额都是有限的,这个自己一定要了解清楚,这直接关乎着自己的考研成败,如果院校的调剂名额少,自己初试分数又不是很高,这时候就要尽量避开。

3. 是否满足调剂院校的条件

每年接受考研调剂的院校也是有自己的硬性条件的,这时候自己一定要搞清楚,看自己是否适合,不然,很容易错失调剂的机会,就白白浪费了自己的备考时间。

03

用Python

爬取调剂信息

要想成功调剂,首先要把握调剂的第一手信息,能及时地获取到哪所高校的专业招生人数不足,而且符合你的条件,这是很有必要的。

那么今天,我们就来说一说怎么去获取调剂数据并进行分析。以帮助大家更好的了解考研调剂形势。

我们选取中国考研网站上公布调剂查询页面,用Python爬取调剂信息。截止到2月29日16:00,我们共分析整理了385所高校的调剂信息。

获取数据

1

我们选取中国考研网站上公布调剂查询页面,其页面效果大致如图所示:

首先对页面结构进行简单的分析,确定我们的数据抓取策略。

第一步:获取一页的信息

我们使用谷歌浏览器的开发者工具功能进行元素审查,通过对HTML进行审查,很容易可以可以发现所有的信息流的都是DIV标签包裹的,其共同特征都是class=”info-item font14” 。因此我们可以使用BeautifulSoup库的标签定位功能,先定位到class=”info-item font14” 的标签,再往下一层定位到class="school",class="name"等标签属性信息,从而获取页面所有信息。

如图所示,我们获取的信息主要有:

  • 学校
  • 专业
  • 调剂信息标题
  • 发布时间
  • 主页URL

第二步:循环翻页

第一页的网页地址是页面地址:

http://www.chinakaoyan.com/tiaoji/schoollist/pagenum/1.shtml

通过对网页进行翻页,不难发现网页的构造是有规律的,变化的是pagenum后面的数字,因此我们可以循环的方式构建这个网页地址即可获得所有的网页地址,从而获取所有的页面信息。

代码实现:

# 导入包
import numpy as np 
import pandas as pd 
import requests
from bs4 import BeautifulSoup 
from fake_useragent import UserAgent
import time 
import re 

def get_one_page(url):
    '''功能:给定URL地址,获取一页的信息''' 
    # 随机UA
    headers = {'user-agent': UserAgent().random} 

    try: 
        # 发起请求
        r = requests.get(url, headers=headers, timeout=5)  
    except Exception:
        time.sleep(3) 
        r = requests.get(url, headers=headers, timeout=5)  
    # 解析网页
    bs = BeautifulSoup(r.text, 'lxml') 

    # 获取所有信息
    data = bs.findAll('div', class_='info-item font14') 
    # 获取学校
    school = [i.find('span', class_='school').text for i in data] 
    # 获取专业
    name = [i.find('span', class_='name').text for i in data] 
    # 获取标题
    title = [i.find('span', class_='title').text for i in data]   
    # 获取url地址
    url = [i.find('span', class_='title').find('a')['href'] for i in data]
    # 获取时间
    time = [i.find('span', class_='time').text for i in data] 

    # 保存信息
    df = pd.DataFrame({'school': school,
                       'name': name,
                       'title': title,
                       'url': url,
                       'time': time}) 
    return df 

def get_2020_page():
    '''功能:获取2020年所有的调剂信息'''  
    df_all = pd.DataFrame()

    # 循环1001页
    for i in range(1,1001):   
        # 构建url地址
        url = 'http://www.chinakaoyan.com/tiaoji/schoollist/pagenum/{}.shtml'.format(i) 
        # 调用函数
        try:
            df = get_one_page(url) 
            # 追加到大表
            df_all = df_all.append(df, ignore_index=True)  
            # 休眠一秒
            time.sleep(1)
            # 打印进度
            print('我正在获取第{}页'.format(i), end='\r')
            # 条件判断
            if df['time'].str.contains('2019').sum()>0:
                break
        except:  
            continue

    return df_all 

if __name__ == '__main__':
    df_2020 = get_2020_page() 
    # 筛选出2020年
    df = df_2020[df_2020['time'].str.contains('2020')].copy() 

爬取出来的数据以数据框的形式存储,结果如下图所示:

df.head()

截止到2020.2.29日,发布调剂数据一共有385条。

从主页URL中可以获取学校对应的省份信息,这一步代码和上述过程类似。将学校的属性信息进行基本的清洗,得到数据如下:

df.head()

然后将学校的属性信息与调剂信息合并,得到用于数据分析所用的宽表信息如下:

# 合并信息
df_all = pd.merge(df, df_info, on='school', how='left')  
# 选取分析字段
df_all = df_all[['school','name','time','province','school_level','school_types']] 
df_all.head() 

数据可视化

2

接着使用pyecharts库对数据进行以下几个方面的可视化分析:

  • 调剂信息发布热度
  • 学校层次分析
  • 学校类型分析
  • 学校地域分析
  • 专业/技能/领域分析

调剂信息发布热度

图中可以看到,调剂信息发布最多的是2月21日,也就是考研成绩公布的这几天。

代码实现:

# 发布时间对应的发布频次
pub_time = df_all.time.value_counts() 
pub_time = pub_time.sort_index()

from pyecharts.charts import Line
from pyecharts import options as opts

# 时间走势图
line1 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line1.add_xaxis(pub_time.index.tolist()) 
line1.add_yaxis('发布热度', pub_time.values.tolist(), 
                areastyle_opts=opts.AreaStyleOpts(opacity=0.5), 
                label_opts=opts.LabelOpts(is_show=False)) 
line1.set_global_opts(title_opts=opts.TitleOpts(title="调剂信息发布时间走势图"), 
                      toolbox_opts=opts.ToolboxOpts(), 
                      visualmap_opts=opts.VisualMapOpts()) 

学校层次分析

可以看到,调剂学校中双非院校居多,占比高达88.94%。211院校为5.65%,985院校为5.41%。近年来很多双非院校的进步也是很大的,发展态势良好,在调剂时根据院校的具体实力,考生还是可以选择的。

代码实现:

# 学校层次
level_perc = df_all.school_level.value_counts() / df_all.school_level.value_counts().sum()
level_perc = np.round(level_perc*100,2) 

# 导入所需包
from pyecharts.charts import Pie
from pyecharts.globals import ThemeType

# 绘制柱形图
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px')) 
pie1.add("", 
         [*zip(level_perc.index, level_perc.values)], 
         radius=["40%","75%"]) 
pie1.set_global_opts(title_opts=opts.TitleOpts(title='学校层次分布'), 
                     legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
                     toolbox_opts=opts.ToolboxOpts())   
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{c}%")) 
pie1.render()

学校类型分析

从图中可以看到,调剂院校中主要是理工、综合类型院校居多,分别占比42.59%和27.06%。其次是工科占比11.29%。而弄农林、师范、医药等院校的占比都特别小,调剂信息很少。在搜集高校调剂信息的时候,考生也就更有侧重点了。

代码实现:

# 学校类型
type_perc = df_all.school_types.value_counts() / df_all.school_types.value_counts().sum()
type_perc = np.round(type_perc*100,2) 

# 导入所需包
from pyecharts.charts import Pie

# 绘制柱形图
pie2 = Pie(init_opts=opts.InitOpts(theme=ThemeType.WONDERLAND, width='1350px', height='750px')) 
pie2.add("", 
         [*zip(type_perc.index, type_perc.values)], 
         radius=["40%","75%"]) 
pie2.set_global_opts(title_opts=opts.TitleOpts(title='学校类型分布'), 
                     legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
                     toolbox_opts=opts.ToolboxOpts())   
pie2.set_series_opts(label_opts=opts.LabelOpts(formatter="{c}%")) 
pie2.render()

学校地域分析

可以看到调剂机会遍布全国,其中占比前三的省市分别是辽宁、北京、山东。沿海城市的调剂机会也很多。只要把握好机遇,考生们一定可以去自己理想的城市读书的。

代码实现:

province_num = df_all.province.value_counts() 
province_num = province_num.sort_values()

from pyecharts.charts import Bar

# 条形图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px')) 
bar1.add_xaxis(province_num.index.tolist())
bar1.add_yaxis("省份", province_num.values.tolist()) 
bar1.set_global_opts(title_opts=opts.TitleOpts(title="调剂信息发布数省份分布"), 
                     toolbox_opts=opts.ToolboxOpts(),
                     visualmap_opts=opts.VisualMapOpts(max_=40)) 
bar1.set_series_opts(label_opts=opts.LabelOpts(position='right'))  # 标签
bar1.reversal_axis() 
bar1.render()
from pyecharts.charts import Map

c = Map(init_opts=opts.InitOpts(width='1350px', height='750px'))
c.add('',[list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())], 'china')
c.set_global_opts(title_opts=opts.TitleOpts('调剂信息省份分布地图'), 
                  toolbox_opts=opts.ToolboxOpts(is_show=True), 
                  visualmap_opts=opts.VisualMapOpts(max_=50)) 
c.render()

专业/技能/领域分析

可以看到工程、材料、化学等理科专业在调剂中还是比较吃香的。

代码实现:

content = df_all.name.str.cat()

key_words = get_words_num(content) 
key_words = key_words[:50] 

from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType, ThemeType 

word1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px'))
word1.add("", [*zip(key_words.index.tolist(), key_words.values.tolist())], 
         word_size_range=[20, 200], shape='diamond') 
word1.set_global_opts(title_opts=opts.TitleOpts(title="调剂专业分布"), 
                     toolbox_opts=opts.ToolboxOpts())  
word1.render()

结语:

调剂这条路实在是不轻松,千万不要坐着等别人来调剂你。调剂也是一个残酷竞争的过程,你晚去一步,位置就可能被人占了,一定要尽早行动,从速从早。最后祝愿所有的考生都能调剂成功,今年顺顺利利地考上研究生!

本文分享自微信公众号 - CDA数据分析师(cdacdacda),作者:祝考研成功的C君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python告诉你:从《入海》到《消愁》毛不易的歌里都在唱些什么?

    【导语】:今天我们来聊聊——B站联合毛不易发布的毕业季主题曲《入海》,以及背后不一样的毛不易。Python技术部分请看第三部分。公众号后台,回复关键字“入海”获...

    CDA数据分析师
  • Python告诉你:拿下60亿流量的《惊雷》都是哪些人在听?

    【导语】:今天我们聊聊《惊雷》,Python技术部分可以直接看第三部分。公众号后台,回复关键字“惊雷”获取完整数据。

    CDA数据分析师
  • 仅拍125个视频就成为千万级网红? Python告诉你:李子柒的视频都在拍些什么?

    【导语】:今天我们来聊聊把生活过成诗的李子柒。Python技术部分请看第二部分。公众号后台,回复关键字“李子柒”获取完整数据。

    CDA数据分析师
  • Pandas数据处理——一文详解数据拼接方法merge

    为了方便维护,一般公司的数据在数据库内都是分表存储的,比如用一个表存储所有用户的基本信息,一个表存储用户的消费情况。所以,在日常的数据处理中,经常需要将两张表拼...

    数据森麟
  • Python告诉你:从《入海》到《消愁》毛不易的歌里都在唱些什么?

    【导语】:今天我们来聊聊——B站联合毛不易发布的毕业季主题曲《入海》,以及背后不一样的毛不易。Python技术部分请看第三部分。公众号后台,回复关键字“入海”获...

    CDA数据分析师
  • 用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?

    综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer》,就是一个不错的综艺选择。

    Python进击者
  • 用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?

    综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer》,就是一个不错的综艺选择。

    龙哥
  • 进程管理工具 Supervisor

    要想在终端后台常驻进程,首先想到的是在命令后加 & 符号,来达到隐藏程序在后台的目的,尽管看起来进程已经在后台运行了,实际上终端会话关闭时进程还是会被 kill...

    平也
  • 设计模式----单例模式详解

    单例模式是java中用的比较多的一种设计模式,目的就是让一个应用中对于某个类,只存在唯一的实例化对象。单例模式有很多实现方案,各有利弊,接下来将做详细分...

    叔牙
  • 豆瓣9.2分!17万条弹幕告诉你《沉默的真相》凭什么口碑高开暴走!

    今天教大家用Python分析《沉默的真相》的17万条弹幕。公众号后台,回复关键字“沉默”获取完整数据。

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券