之所以做這個東西是因為在NGA上看到了張桂梅校長相關的討論,有些網友以“張校長用國家的錢建女校,是否有違性別公平“”身邊讀過書的女孩子數量遠多於男孩子“等理由抨擊張校長,本着沒有調查就沒有發言權的原則,我爬取了2010年(為什么不選2020年的原因是想調查更早之前雲南省的情況),並做了些數據可視化。先放上結論:女性的受教育人口遠低於男性,建女校的錢沒白花,而且還需加大投入。
數據來源:http://www.stats.gov.cn/tjsj/pcsj/rkpc/6rp/indexch.htm

首先是爬蟲部分:
1 import json 2 import requests 3 from requests.exceptions import RequestException 4 import re 5 import time 6 7 def get_one_page(url): 8 try: 9 headers = { 10 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36' 11 } 12 response = requests.get(url, headers=headers) 13 if response.status_code == 200: 14 return response.content.decode('ANSI') 15 return None 16 except RequestException: 17 return None 18 19 url = 'http://www.stats.gov.cn/tjsj/pcsj/rkpc/6rp/left.htm' 20 21 html = get_one_page(url)

這里把url改成http://www.stats.gov.cn/tjsj/pcsj/rkpc/6rp/left.htm,獲取左側索引欄
下載數據:
1 from bs4 import BeautifulSoup 2 3 soup = BeautifulSoup(html,'lxml') 4 5 soup.prettify() 6 data_name_list = [] 7 data_xls_list = [] 8 pre_url = 'http://www.stats.gov.cn/tjsj/pcsj/rkpc/6rp/' 9 for ul in soup.find_all('ul'): 10 for li in ul.find_all(name='li'): 11 a = li.a 12 #數據格式為xls,去掉其他的 13 if a != None and a.attrs['href'][-1] != 'm': 14 data_name_list.append(li.get_text()) 15 data_xls_list.append(pre_url + a.attrs['href']) 16 17 import urllib 18 import os 19 path = 'C:\\Users\\00\\Desktop\\census_data\\' 20 i = 0 21 for url in data_xls_list: 22 print(url) 23 filename = os.path.join(path, data_name_list[i] + '.xls') 24 urllib.request.urlretrieve(url, filename) 25 i += 1
爬下來的數據如圖所示:


用pandas讀取后有一些無用的行,刪除之:
1 import pandas as pd 2 path = 'C:\\Users\\00\\Desktop\\census_data\\' 3 xls_path = path + '1-1 各地區戶數、人口數和性別比.xls' 4 df=pd.read_excel(xls_path,sheet_name=0,header=None) 5 6 for i in range(7): 7 df = df.drop(i,axis=0) 8 df = df.reset_index() 9 10 del df['index'] 11 12 df

列命名:
1 new_col = ['地區','戶數合計','家庭戶合計','集體戶合計','人口總數', 2 '男性總數','女性總數','性別比','家庭戶人口數','家庭戶男性總數', 3 '家庭戶女性總數','家庭戶性別比','集體戶人口數','集體戶男性總數', 4 '集體戶女性總數','集體戶性別比','平均戶規模'] 5 df.columns = new_col 6 7 df.info()

全國人口性別比可視化:
1 import matplotlib.pyplot as plt 2 %matplotlib inline 3 4 df1 = df 5 df1 = df1.drop(0,axis=0) 6 df1 7 8 import seaborn as sns 9 import numpy as np 10 bar_width = 0.4 11 plt.rcParams['font.sans-serif']=['SimHei'] 12 plt.rcParams['axes.unicode_minus']=False 13 plt.bar(np.arange(len(df1))-0.2,df1['男性總數'],width=0.4,label='男性總數') 14 plt.bar(np.arange(len(df1))+bar_width-0.2,df1['女性總數'],width=0.4,label='女性總數') 15 plt.xticks(np.arange(len(df1)),df1['地區']) 16 fig = plt.gcf() 17 fig.set_size_inches(20, 10) 18 plt.title('全國人口性別比',fontdict = {'fontsize' : 30}) 19 plt.tick_params(labelsize=10) 20 plt.tight_layout() 21 plt.legend()

后面全是數據可視化處理了
df1 = df1.sort_values(by=['性別比'],ascending=True,axis=0) df1 = df1.reset_index() df1 = df1.drop('index',axis=1) plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.bar(np.arange(len(df1)),df1['性別比']/100,label='性別比') plt.ylim(1, 1.1) plt.xticks(np.arange(len(df1)),df1['地區']) fig = plt.gcf() fig.set_size_inches(20, 10) plt.title('全國人口性別比',fontdict = {'fontsize' : 30}) plt.tight_layout() plt.legend()

雲南性別失衡還挺嚴重的,不過性別失衡似乎與經濟關系不大,廣東、北京、上海、江蘇等經濟發達地區的性別失衡狀態差距挺大的
bar_width = 0.4 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.bar(np.arange(len(df1))-0.2,df1['家庭戶性別比']/100,width=0.4,label='家庭戶性別比') plt.bar(np.arange(len(df1))+bar_width-0.2,df1['集體戶性別比']/100,width=0.4,label='集體戶性別比') plt.xticks(np.arange(len(df1)),df1['地區']) plt.ylim(0.9, 2) fig = plt.gcf() fig.set_size_inches(20, 10) plt.plot([-1,len(df1)],[1,1]) plt.title('全國人口性別比(家庭戶/集體戶)',fontdict = {'fontsize' : 30}) plt.tight_layout() plt.legend()

集體戶主要反映外來人口情況,看來男性更傾向於出省打工?
import pandas as pd xls_path = path + '1-7 各地區分年齡、性別的人口.xls' df1=pd.read_excel(xls_path,sheet_name=0,header=None) for i in range(5): df1 = df1.drop(i,axis=0) df1 = df1.reset_index() df1 = df1.drop('index',axis=1) new_col = ['地區','人口總數','男性總數','女性總數','0歲人口總數','0歲男性總數','0歲女性總數'] for i in range(1): new_col.append(str(i*4+1) + '-' + str(i*4+4) + '歲人口總數') new_col.append(str(i*4+1) + '-' + str(i*4+4) + '歲男性總數') new_col.append(str(i*4+1) + '-' + str(i*4+4) + '歲女性總數') for i in range(1,20): new_col.append(str(i*5) + '-' + str(i*5+4) + '歲人口總數') new_col.append(str(i*5) + '-' + str(i*5+4) + '歲男性總數') new_col.append(str(i*5) + '-' + str(i*5+4) + '歲女性總數') new_col.append('100歲以上人口總數') new_col.append('100歲以上男性人口總數') new_col.append('100歲以上女性人口總數') df1.columns = new_col xticks = ['0歲'] for i in range(1): xticks.append(str(i*4+1) + '-' + str(i*4+4) + '歲') for i in range(1,20): xticks.append(str(i*5) + '-' + str(i*5+4) + '歲') xticks.append('100歲以上') xinbiebi = [] for i in range(22): xinbiebi.append(df1.iloc[0,i*3+5]/df1.iloc[0,i*3+6]) yunnanxinbiebi = [] for i in range(22): yunnanxinbiebi.append(df1.iloc[25,i*3+5]/df1.iloc[25,i*3+6]) plt.plot(xticks, xinbiebi,label='全國人口性別比') plt.plot(xticks, yunnanxinbiebi,label='雲南人口性別比') fig = plt.gcf() fig.set_size_inches(20, 10) plt.tight_layout() plt.title('人口性別比',fontdict = {'fontsize' : 30}) plt.tick_params(labelsize=15) plt.plot([-1,len(xticks)],[1,1]) plt.legend()

據說女性壽命比男性長4年左右,並且戰爭時代男性死亡數應該比女性多,所以老齡人口女性比較多;建國之后男性人口數就開始反超並拉開差距了
xls_path = path + '1-8 各地區分性別、受教育程度的6歲及以上人口.xls' df2 = pd.read_excel(xls_path,sheet_name=0,header=None) for i in range(5): df2 = df2.drop(i,axis=0) df2 = df2.reset_index() df2 = df2.drop('index',axis=1) new_col = ['地區','6歲以上人口總數','6歲以上男性總數','6歲以上女性總數', '未上過學人口總數','未上過學男性總數','未上過學女性總數', '小學人口總數','小學男性總數','小學女性總數', '初中人口總數','初中男性總數','初中女性總數', '高中人口總數','高中男性總數','高中女性總數', '專科人口總數','專科男性總數','專科女性總數', '本科人口總數','本科男性總數','本科女性總數', '研究生人口總數','研究生男性總數','研究生女性總數',] df2.columns = new_col xticks = ['未上過學','小學','初中','高中','專科','本科','研究生',] xinbiebi = [] for i in range(len(xticks)): xinbiebi.append(df2.iloc[0,i*3+5]/df2.iloc[0,i*3+6]) yunnanxinbiebi = [] for i in range(len(xticks)): yunnanxinbiebi.append(df2.iloc[25,i*3+5]/df2.iloc[25,i*3+6]) bar_width = 0.4 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.bar(np.arange(len(xinbiebi))-0.2,xinbiebi,width=0.4,label='全國教育人口性別比') plt.bar(np.arange(len(xinbiebi))+bar_width-0.2,yunnanxinbiebi,width=0.4,label='雲南教育人口性別比') plt.xticks(np.arange(len(xticks)),xticks) fig = plt.gcf() plt.title('全國教育人口性別比(以女性為基數)',fontdict = {'fontsize' : 30}) plt.plot([-1,len(xinbiebi)],[1,1]) fig.set_size_inches(20, 10) plt.tick_params(labelsize=25) plt.tight_layout() plt.legend()

很明顯男性受教育人口遠超女性,身邊統計學可以休矣!但這是不是由於男性人口較多導致的還需再驗證
1 xticks = ['未上過學','小學','初中','高中','專科','本科','研究生',] 2 3 xinbiebi = [] 4 for i in range(len(xticks)): 5 xinbiebi.append(df2.iloc[25,i*3+5]) 6 yunnanxinbiebi = [] 7 for i in range(len(xticks)): 8 yunnanxinbiebi.append(df2.iloc[25,i*3+6]) 9 10 bar_width = 0.4 11 plt.rcParams['font.sans-serif']=['SimHei'] 12 plt.rcParams['axes.unicode_minus']=False 13 plt.bar(np.arange(len(xinbiebi))-0.2,xinbiebi,width=0.4,label='男') 14 plt.bar(np.arange(len(xinbiebi))+bar_width-0.2,yunnanxinbiebi,width=0.4,label='女') 15 plt.xticks(np.arange(len(xticks)),xticks) 16 fig = plt.gcf() 17 plt.title('雲南教育人口(分性別)',fontdict = {'fontsize' : 30}) 18 plt.plot([-1,len(xinbiebi)],[1,1]) 19 fig.set_size_inches(20, 10) 20 plt.tick_params(labelsize=25) 21 plt.tight_layout() 22 plt.legend()

想要婦女撐起半邊天,還得先從娃娃的教育抓起啊~未受過教育人口女性是男性的兩倍,經濟實力又與受教育程度、家庭地位相掛鈎,所以加大教育投入勢在必行~
xticks = ['未上過學','小學','初中','高中','專科','本科','研究生',] xinbiebi = [] for i in range(len(xticks)): xinbiebi.append(df2.iloc[0,i*3+5]) yunnanxinbiebi = [] for i in range(len(xticks)): yunnanxinbiebi.append(df2.iloc[0,i*3+6]) bar_width = 0.4 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.bar(np.arange(len(xinbiebi))-0.2,xinbiebi,width=0.4,label='男') plt.bar(np.arange(len(xinbiebi))+bar_width-0.2,yunnanxinbiebi,width=0.4,label='女') plt.xticks(np.arange(len(xticks)),xticks) fig = plt.gcf() plt.title('全國教育人口(分性別)',fontdict = {'fontsize' : 30}) plt.plot([-1,len(xinbiebi)],[1,1]) fig.set_size_inches(20, 10) plt.tick_params(labelsize=25) plt.tight_layout() plt.legend()

全國情況稍微好一點點,也僅限於義務教育范圍內了
xticks = ['未上過學','小學','初中','高中','專科','本科','研究生',] men = [] for i in range(len(xticks)): men.append(df2.iloc[0,i*3+5]*100/(df2.iloc[0,i*3+5]+df2.iloc[0,i*3+6])) women = [] for i in range(len(xticks)): women.append(df2.iloc[0,i*3+6]*100/(df2.iloc[0,i*3+5]+df2.iloc[0,i*3+6])) yunnan_men = [] for i in range(len(xticks)): yunnan_men.append(df2.iloc[25,i*3+5]*100/(df2.iloc[25,i*3+5]+df2.iloc[25,i*3+6])) yunnan_women = [] for i in range(len(xticks)): yunnan_women.append(df2.iloc[25,i*3+6]*100/(df2.iloc[25,i*3+5]+df2.iloc[25,i*3+6])) bar_width = 0.4 plt.bar(np.arange(len(xticks)),men,width=0.4,label='全國男') plt.bar(np.arange(len(xticks)),women,bottom=men,width=0.4,label='全國女') # plt.bar(np.arange(len(xticks)+0.4),yunnan_men,width=0.4,label='雲南男') # plt.bar(np.arange(len(xticks)+0.4),yunnan_women,bottom=yunnan_men,width=0.4,label='雲南女') fig = plt.gcf() plt.title('全國教育人口(分性別)',fontdict = {'fontsize' : 30}) plt.plot([-1,len(xticks)],[50,50]) plt.xticks(np.arange(len(xticks)),xticks) fig.set_size_inches(20, 10) plt.tick_params(labelsize=25) plt.tight_layout() plt.show()

xticks = ['未上過學','小學','初中','高中','專科','本科','研究生',] men = [] for i in range(len(xticks)): men.append(df2.iloc[0,i*3+5]*100/(df2.iloc[0,i*3+5]+df2.iloc[0,i*3+6])) women = [] for i in range(len(xticks)): women.append(df2.iloc[0,i*3+6]*100/(df2.iloc[0,i*3+5]+df2.iloc[0,i*3+6])) yunnan_men = [] for i in range(len(xticks)): yunnan_men.append(df2.iloc[25,i*3+5]*100/(df2.iloc[25,i*3+5]+df2.iloc[25,i*3+6])) yunnan_women = [] for i in range(len(xticks)): yunnan_women.append(df2.iloc[25,i*3+6]*100/(df2.iloc[25,i*3+5]+df2.iloc[25,i*3+6])) bar_width = 0.4 # plt.bar(np.arange(len(xticks)),men,width=0.4,label='全國男') # plt.bar(np.arange(len(xticks)),women,bottom=men,width=0.4,label='全國女') plt.bar(np.arange(len(xticks)),yunnan_men,width=0.4,label='雲南男') plt.bar(np.arange(len(xticks)),yunnan_women,bottom=yunnan_men,width=0.4,label='雲南女') fig = plt.gcf() plt.title('雲南教育人口(分性別)',fontdict = {'fontsize' : 30}) plt.plot([-1,len(xticks)],[50,50]) plt.xticks(np.arange(len(xticks)),xticks) fig.set_size_inches(20, 10) plt.tick_params(labelsize=25) plt.tight_layout() plt.show()

xls_path = path + '1-9 各地區分性別的15歲及以上文盲人口.xls' df3 = pd.read_excel(xls_path,sheet_name=0,header=None) for i in range(6): df3 = df3.drop(i,axis=0) df3 = df3.reset_index() df3 = df3.drop('index',axis=1) new_col = ['地區','15歲以上人口總數','15歲以上男性總數','15歲以上女性總數', '文盲人口總數','文盲男性總數','文盲女性總數', '文盲人口占15歲及以上人口比重','男性文盲人口占15歲及以上人口比重','女性文盲人口占15歲及以上人口比重',] df3.columns = new_col bar_width = 0.4 plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False plt.bar(np.arange(len(df3))-0.2,df3['男性文盲人口占15歲及以上人口比重'],width=0.4,label='男性文盲人口占15歲及以上人口比重') plt.bar(np.arange(len(df3))+bar_width-0.2,df3['女性文盲人口占15歲及以上人口比重'],width=0.4,label='女性文盲人口占15歲及以上人口比重') plt.xticks(np.arange(len(df3)),df3['地區']) fig = plt.gcf() fig.set_size_inches(20, 10) plt.title('全國人口文盲人口占15歲及以上人口比重性別對比',fontdict = {'fontsize' : 30}) plt.tick_params(labelsize=10) plt.tight_layout() plt.legend()

1 bar_width = 0.4 2 plt.rcParams['font.sans-serif']=['SimHei'] 3 plt.rcParams['axes.unicode_minus']=False 4 plt.bar(np.arange(len(df3))-0.2,df3['文盲男性總數'],width=0.4,label='文盲男性總數') 5 plt.bar(np.arange(len(df3))+bar_width-0.2,df3['文盲女性總數'],width=0.4,label='文盲女性總數') 6 plt.xticks(np.arange(len(df3)),df3['地區']) 7 fig = plt.gcf() 8 fig.set_size_inches(20, 10) 9 plt.title('全國人口文盲人口性別對比',fontdict = {'fontsize' : 30}) 10 plt.tick_params(labelsize=10) 11 plt.tight_layout() 12 plt.legend()

沒想到文盲人口幾乎每個省份女性都是男性的兩倍以上...
1 xls_path = path + '1-12 各地區分性別、月份的出生人口(2009.11.1-2010.10.31).xls' 2 df4 = pd.read_excel(xls_path,sheet_name=0,header=None) 3 for i in range(5): 4 df4 = df4.drop(i,axis=0) 5 df4 = df4.reset_index() 6 df4 = df4.drop('index',axis=1) 7 8 new_col = ['地區','出生人口總數','出生男性總數','出生女性總數',] 9 year = 2009 10 month = 11 11 for i in range(12): 12 if month > 12 : 13 year += 1 14 month = 1 15 date = str(year) + '年' + str(month) + '月' 16 new_col.append(date + '出生人口總數') 17 new_col.append(date + '出生男性人口總數') 18 new_col.append(date + '出生女性人口總數') 19 month += 1 20 df4.columns = new_col 21 df4.info() 22 23 xticks = [] 24 year = 2009 25 month = 11 26 for i in range(12): 27 if month > 12 : 28 year += 1 29 month = 1 30 date = str(year) + '年' + str(month) + '月' 31 xticks.append(date) 32 month += 1 33 men = [] 34 for i in range(12): 35 men.append(df4.iloc[0,5+i*3]) 36 women = [] 37 for i in range(12): 38 women.append(df4.iloc[0,6+i*3]) 39 plt.plot(xticks, men,label='男性') 40 plt.plot(xticks, women,label='女性') 41 fig = plt.gcf() 42 fig.set_size_inches(20, 10) 43 plt.tight_layout() 44 plt.title('2009.11.1-2010.10.31全國人口出生趨勢',fontdict = {'fontsize' : 30}) 45 plt.tick_params(labelsize=15) 46 plt.legend()

xticks = [] year = 2009 month = 11 for i in range(12): if month > 12 : year += 1 month = 1 date = str(year) + '年' + str(month) + '月' xticks.append(date) month += 1 xinbiebi = [] for i in range(12): xinbiebi.append(df4.iloc[0,5+i*3]/df4.iloc[0,6+i*3]) yunnan_xinbiebi = [] for i in range(12): yunnan_xinbiebi.append(df4.iloc[25,5+i*3]/df4.iloc[25,6+i*3]) plt.plot(xticks, yunnan_xinbiebi,label='雲南男性/女性出生人口比') plt.plot(xticks, xinbiebi,label='全國男性/女性出生人口比') fig = plt.gcf() fig.set_size_inches(20, 10) plt.tight_layout() plt.title('2009.11.1-2010.10.31全國/雲南男性/女性出生人口比',fontdict = {'fontsize' : 30}) plt.tick_params(labelsize=15) plt.legend()

xticks = [] year = 2009 month = 11 for i in range(12): if month > 12 : year += 1 month = 1 date = str(year) + '年' + str(month) + '月' xticks.append(date) month += 1 men = [] for i in range(12): men.append(df4.iloc[25,5+i*3]) women = [] for i in range(12): women.append(df4.iloc[25,6+i*3]) plt.plot(xticks, men,label='男性') plt.plot(xticks, women,label='女性') fig = plt.gcf() fig.set_size_inches(20, 10) plt.tight_layout() plt.title('2009.11.1-2010.10.31雲南人口出生趨勢',fontdict = {'fontsize' : 30}) plt.tick_params(labelsize=15) plt.legend()


聯想到背后的選擇性生育/墮胎問題,令人不寒而栗...
結論:對女性給予一定的教育補貼是沒錯的,甚至還得加大力度;什么時候女性的受教育水平起來了,女性的地位才能真正提高,而不是現在某些極端團體打打拳放放嘴炮就能解決的
