分析2667所高校,历年,各专业录取数据分数,绘图显示

为了练习pandas的用法,也为了分析高考录取数据,将来可以给学生报志愿服务。但是数据有的年份缺失,只能作为简单的参考,价值不大。重点还是pandas的使用的练习,爬取不是重点。
代码如下

# %%


# %load D:\jupyterwork\录取数据爬取.py
# %%
import pandas as pd
import requests
from bs4 import BeautifulSoup
import time
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 显示所有列
pd.set_option('display.max_columns', None)
# # 显示所有行
pd.set_option('display.max_rows', None)
pd.set_option('display.unicode.east_asian_width', True) #设置输出右对齐

pd.set_option('max_colwidth', 180)
pd.set_option('display.width', 300) #设置横向最多显示的字符

# %%
url='http://college.gaokao.com/school/tinfo/20/zresult/20/1/2016'
html = requests.get(url).text
soup = BeautifulSoup(html, 'lxml')

def getId():#获取学校和省的编号用的函数    现在没用了
    dizhi=soup.select(' div>p>font') 
    print('录取省份',dizhi[0].text,dizhi[3].text)
    t=pd.read_html(url)
    #print(t)
    #print(t[0].drop(labels=['专业对比'],axis=1))
    dicollege={}
    for i in range(35): #2667
        url='http://college.gaokao.com/school/tinfo/60/zresult/'+str(i+1)
        html = requests.get(url).text
        time.sleep(0.3)
        soup = BeautifulSoup(html, 'lxml')
        dizhi=soup.select(' div>p>font') 
        #print(dizhi)
        print('录取省份',dizhi[2].text,dizhi[3].text) #这里需要修改  '录取省份'改成   dizhi[2].text,dizhi[3].text 
                                                       #'录取学校'改成  dizhi[0].text,dizhi[3].text
            
            
        try:
            dicollege[dizhi[2].text]=[i+1]
        except Exception as e:
            pass
    table=pd.DataFrame.from_dict(dicollege)
    
    #print(table.T)
    #table2=pd.DataFrame(columns=['大学名称','序号']) #建立表格
    #table2['大学名称']=table.columns  #获取所有大学名字
    #table2['序号']=[i for i in table.iloc[0]]   #获取所有大学编号
    
    
    table2=pd.DataFrame(columns=['录取省份','序号'])
    table2['录取省份']=table.columns  #获取所有省的名字
    table2['序号']=[i for i in table.iloc[0]]  #获取所有省的编号
    print(table2)
    table2.to_excel('录取省份和序号.xlsx')

def profes(school,wl,p):
    sch=school#  学校编号
    province=p #  省编号
    wenli=wl   # 写1或者2    1是理科  2是文科
    dfs=[]
    year=[]
    url='http://college.gaokao.com/school/tinfo/'+sch+'/zresult/'+str(province)+'/'+str(wenli)
    html = requests.get(url).text
    time.sleep(0.3)
    soup = BeautifulSoup(html, 'lxml')
    dizhi=soup.select(' div>p>font') 
    #print(dizhi)
    print('录取省份',dizhi[2].text,dizhi[3].text)
    print('录取学校',dizhi[0].text,dizhi[3].text)
    t = time.localtime()
    print('获取2007到',t.tm_year,'数据')
    for i in range(2007,t.tm_year):# 录取年份范围
        
        try:

            url='http://college.gaokao.com/school/tinfo/'+sch+'/zresult/'+str(province)+'/'+str(wenli)+'/'+str(i)
                
            data=pd.read_html(url)
            #print(data[0].columns)
            
            #data[0].columns=(['专业名称', '专业大类', '专业小类', '平均分', '最高分', '录取批次', '专业对比','录取年份'])
            #print(data.iloc[:])
            data[0]['录取年份']=str(i)
            #dfs.columns=data[0].columns           
            dfs.append(data[0])         
            
        except Exception:
            pass  
    
    dfs2=pd.concat(dfs)

    print(dfs2.columns)
    #print(dfs2)      
    #print(dfs2['录取年份'])

    df3= dfs2.groupby(['专业名称'])
   
    #print(df3)
    
    for k, value in df3:
        #pass
        print(k)
        try:
            value.drop(value[value['最高分'].str.contains('------')]) 
        except Exception as e:
            pass 
        print(value) #删除某列包含特殊字符的行
        #value.to_excel(dizhi[0].text+k+'.xlsx')   #把数据保存到Excel里面  打印出来看
        try:

            value.plot(x='录取年份',y=['最高分'],title=dizhi[0].text+k+'专业在'+dizhi[2].text+'历年'+'最高分录取分布')
        
            plt.show()
        except Exception as e:
            print(e)
            #pass


number=pd.read_excel('大学和序号.xlsx')
print(number.columns)
a=input('输入学校的正确名字')
for i,k  in zip(number['大学名称'],number['序号']):
    if i==a:
        print(i,k)
        s=str(k)
profes(s,'1','20') #第一个号码学校号  大学和序号.xlsx  里面查找    
                        #第二个号是文科理科 1是理科 2 是文科    
                         #第三个号是省名  录取省份和序号.xlsx  里面查找   







绘制图片如下面结果:

分析2667所高校,历年,各专业录取数据分数,绘图显示_第1张图片

分析2667所高校,历年,各专业录取数据分数,绘图显示_第2张图片

录取省份和序号.xlsx

分析2667所高校,历年,各专业录取数据分数,绘图显示_第3张图片

大学和序号.xlsx

你可能感兴趣的:(爬虫,表格处理,爬虫,python,pandas)