楼主: casey_c
1217 1

[程序分享] 按专业描绘美国学士学位女性占比变动 [推广有奖]

  • 0关注
  • 10粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
96 个
通用积分
2.1003
学术水平
2 点
热心指数
15 点
信用等级
2 点
经验
11502 点
帖子
278
精华
0
在线时间
94 小时
注册时间
2016-11-22
最后登录
2022-5-2

楼主
casey_c 发表于 2017-9-25 11:00:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币



以下内容转自 数析学院,只节选了部分,有需要的同学可以直接查看原文

使用的数据抓取自 NCES database https://nces.ed.gov/programs/digest/current_tables.asp
NCES 数据库可以作为 Excel 文件下载,但是我们不想处理一堆 Excel 文件,所以直接使用 BeautifulSoup  https://www.crummy.com/software/BeautifulSoup/ 来抓取 NCES 数据库网页。

1、获取 NCES 数据库数据

  1. from bs4 import BeautifulSoup
  2. import requests

  3. with open('gender_degree_data.tsv', 'w') as out_file:

  4.     out_file.write('\t'.join(['Year', 'Degree_Major',
  5.                           'Total_Bachelors',
  6.                           'Percent_change_Bachelors',
  7.                           'Male_Bachelors', 'Female_Bachelors', 'Female_percent_Bachelors',
  8.                           'Total_Masters', 'Male_Masters', 'Female_Masters',
  9.                           'Total_Doctorates', 'Male_Doctorates', 'Female_Doctorates']) + '\n')

  10.     table_list_response = requests.get('http://nces.ed.gov/programs/digest/current_tables.asp')
  11.     table_list_response = BeautifulSoup(table_list_response.text, 'lxml')

  12.     for link in table_list_response.find_all('a', href=True):
  13.         # 我们只想按照学位和性别分层
  14.         if 'dt15_325' in link['href'] and int(link.text.split('.')[1]) % 5 == 0:
  15.             url = 'http://nces.ed.gov/programs/digest/{}'.format(link['href'])
  16.             url_response = requests.get(url)
  17.             url_response = BeautifulSoup(url_response.text, 'lxml')
  18.             degree_major = url_response.find('title').text.split('Degrees in')
  19.             [1].split('conferred')[0].strip()

  20.             all_trs = url_response.find_all('tr')
  21.             for tr in all_trs:
  22.                 # 我们只想解析符合最近一年的条目
  23.                 year_header = tr.find('th')
  24.                 if year_header is None:
  25.                     continue

  26.                 # 在所有年的数据被列表化后停止解析
  27.                 if 'Percent change' in year_header.text:
  28.                     break

  29.                 # Years 总会有一个破折号(-)  
  30.                 if '-' not in year_header.text:
  31.                     continue

  32.                 year = str(int(year_header.text.split('-')[0]) + 1)
  33.                 year_vals = [x.text.replace(',', '').replace('†', '0').replace('#', '0')
  34.                              for x in tr.find_all('td')]

  35.                 out_text = '\t'.join([year, degree_major] + year_vals) + '\n'
  36.                 out_file.write(out_text)
复制代码


2、绘制不同专业学位女性占比

使用 matplotlib 实现可视化

  1. %matplotlib inline
  2. import matplotlib.pyplot as plt
  3. import pandas as pd
复制代码
  1. # 这是作者大部分绘图格式的自定义样式
  2. plt.style.use('https://gist.githubusercontent.com/rhiever/a4fb39bfab4b33af0018/raw/b25b4ba478c2e163dd54fd5600e80ca7453459da/tableau20.mplstyle')

  3. degree_gender_data = pd.read_csv('gender_degree_data.tsv', sep='\t')
  4. degree_gender_data = degree_gender_data[degree_gender_data['Year'] >= 1970]
  5. degree_gender_data.set_index('Year', inplace=True)
复制代码
  1. # 按照在时间序列中最后一个值排序,创建专业学位的列表
  2. # 使用这个 list 为专业学位分配颜色
  3. degree_major_order = degree_gender_data.groupby('Degree_Major')['Female_percent_Bachelors'].last()
  4. degree_major_order = degree_major_order.sort_values(ascending=False).index.values
  5. degree_major_order_dict = dict(zip(degree_major_order, range(len(degree_major_order))))

  6. degree_gender_data['Degree_Major_Order'] = degree_gender_data[
  7.     'Degree_Major'].apply(lambda major: degree_major_order_dict[major])

  8. degree_gender_data.groupby('Degree_Major_Order')['Female_percent_Bachelors'].plot(figsize=(10, 12))

  9. plt.xlabel('')
  10. plt.yticks(range(0, 91, 10), ['{}%'.format(x) for x in range(0, 91, 10)])
复制代码


以上内容转自 数析学院,后续更多内容可以直接查看原文
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:学士学位 Matplotlib beautiful response programs

沙发
casey_c 发表于 2017-9-26 10:53:47

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-3 07:12