In [77]:
engine = create_engine('mysql+mysqlconnector://zhoub:zhoub-ses@easygaokao.com:3306/scores_v2', echo=False)

In [20]:
from pandas import DataFrame

In [31]:
all_province = pd.read_excel('../2016zhiyuanguanjia6.18.xlsx',converters = {'最低位次':str})

In [32]:
all_province['招生批次'].unique()


Out[32]:
array(['本一批理科', '本二批理科', '本一批文科', '本二批文科', '专科批理科', '专科批文科', '本三批理科',
       '本三批文科', '本科二批C类理科', '本科二批C类文科', '第二批理科', '第二批文科', '本科批理科', '本科批文科',
       '专科一批文科', '专科一批理科', '专科二批文科', '专科二批理科'], dtype=object)

In [33]:
all_province.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 457053 entries, 0 to 457052
Data columns (total 12 columns):
省份      457053 non-null object
院校ID    457053 non-null int64
院校名称    457053 non-null object
科类      457053 non-null int64
年份      457053 non-null int64
专业名称    457053 non-null object
招生批次    457053 non-null object
最高分     457053 non-null object
最低分     457053 non-null object
平均分     457053 non-null object
录取数     457053 non-null object
最低位次    457053 non-null object
dtypes: int64(3), object(9)
memory usage: 41.8+ MB

In [34]:
an_hui=all_province[all_province['省份']=='安徽']

In [35]:
an_hui[:3]


Out[35]:
省份 院校ID 院校名称 科类 年份 专业名称 招生批次 最高分 最低分 平均分 录取数 最低位次
145002 安徽 827 江苏大学 0 2016 信息与计算科学 本一批理科 573 573 573 2 21366
145003 安徽 827 江苏大学 0 2016 应用化学 本一批理科 - - 573 3 21366
145004 安徽 827 江苏大学 0 2016 生物技术省市重点 本一批理科 - - 573 3 21366

In [36]:
SCHOOL_EXCEL=an_hui

In [46]:
major_df=DataFrame({
        'category':SCHOOL_EXCEL['招生批次'].apply(distinguish), 
        'school_name':SCHOOL_EXCEL['院校名称'],
        'district':SCHOOL_EXCEL['省份'],
        'round':SCHOOL_EXCEL['招生批次'].apply(distinguish_round),
        'highest_score':SCHOOL_EXCEL['最高分'],
#         'highest_score_rank':SCHOOL_EXCEL['最高分位次'],
        'highest_score_rank':None,
        'average_score':SCHOOL_EXCEL['平均分'],
#         'average_score_rank':SCHOOL_EXCEL['平均分位次'],
        'average_score_rank':None,
        'lowest_score':SCHOOL_EXCEL['最低分'],
        'lowest_score_rank':SCHOOL_EXCEL['最低位次'],
#         'lowest_score_rank':'--',
        'year':SCHOOL_EXCEL['年份'],
        'tot_rc':SCHOOL_EXCEL['录取数'],
        'discipline':SCHOOL_EXCEL['专业名称']
})

In [ ]:


In [47]:
major_df=major_df.replace('-',0)

In [48]:
major_df=major_df.replace('--',0)

In [54]:
major_df['lowest_score']


Out[54]:
145002    573
145003      0
145004      0
145005      0
145006      0
145007      0
145008      0
145009      0
145010      0
145011      0
145012      0
145013      0
145014      0
145015      0
145016      0
145017      0
145018      0
145019      0
145020      0
145021      0
145022      0
145023      0
145024      0
145025      0
145026      0
145027      0
145028      0
145029      0
145030      0
145031      0
         ... 
165352      0
165353    651
165354    651
165355    649
165356      0
165357      0
165358      0
165359      0
165360    490
165361    495
165362    500
165363    502
165364    493
165365    489
165366    567
165367    562
165368    561
165369    561
165370    613
165371    612
165372    612
165373    616
165374    611
165375    612
165376    612
165377    521
165378    521
165379    521
165380    521
165381    521
Name: lowest_score, Length: 20380, dtype: object

In [58]:
ndict=dict()
df=major_df
for k,v in df.iterrows():
    key=v['school_name']+v['round']+v['category']
    if key in ndict:
        ndict[key]['average_score']=\
        (v['tot_rc']*v['average_score']+
         ndict[key]['tot_rc']
         *ndict[key]['average_score'])/(
            v['tot_rc']+ndict[key]['tot_rc']
        )
        ndict[key]['tot_rc']+=v['tot_rc']
        
        if int(ndict[key]['lowest_score']) > int(v['lowest_score']) and int(v['lowest_score'])>0:
            ndict[key]['lowest_score'] = v['lowest_score']
            ndict[key]['lowest_score_rank'] = v['lowest_score_rank']
        if ndict[key]['highest_score'] < v['highest_score']:
            ndict[key]['highest_score']=v['highest_score']
    else:
        ndict[key]=dict()
        ndict[key]['highest_score']=int(v['highest_score'])
        ndict[key]['highest_score_rank']=None
        ndict[key]['lowest_score'] = int(v['lowest_score'])
        ndict[key]['lowest_score_rank'] = int(v['lowest_score_rank'])
        ndict[key]['tot_rc']=int(v['tot_rc'])
        ndict[key]['average_score']=int(v['average_score'])
        ndict[key]['average_score_rank']=None
        ndict[key]['round']=v['round']
        ndict[key]['year']=v['year']
        ndict[key]['district']=v['district']
        ndict[key]['school_name']=v['school_name']
        ndict[key]['category']=v['category']

In [72]:
df = DataFrame.from_dict(ndict,orient='index')

In [78]:
if 'tot_rc' in df.columns:
    df=df.drop('tot_rc',1)
df.to_sql(name='school_cutoff_scores_2013_2015', chunksize=1000, con=engine, if_exists = 'append', index=False)

# add to ali yun db for 大学详情|大学分数线
if 'tot_rc' in df.columns:
    df=df.drop('tot_rc',1)
df.to_sql(name='school_cutoff_scores_2008_2015', chunksize=1000, con=engine, if_exists = 'append', index=False)

In [75]:
df['average_score']


Out[75]:
三亚学院本科三批文科               467.2
三亚学院本科三批理科               458.4
三峡大学本科一批文科               533.3
三峡大学本科一批理科               557.4
三峡大学科技学院本科三批文科           464.2
三峡大学科技学院本科三批理科           462.7
三明学院本科二批文科               492.1
三明学院本科二批理科               491.3
三江学院本科三批文科               479.3
三江学院本科三批理科               468.0
上海中医药大学本科一批理科            574.4
上海交通大学医学院本科一批理科          676.0
上海交通大学本科一批文科             619.6
上海交通大学本科一批理科             678.1
上海体育学院本科二批文科             520.8
上海体育学院本科二批理科             515.9
上海健康医学院本科二批理科            499.1
上海兴伟学院本科三批理科               0.0
上海商学院本科二批文科              533.9
上海商学院本科二批理科              537.9
上海外国语大学本科一批文科            606.6
上海外国语大学本科一批理科            628.0
上海外国语大学贤达经济人文学院本科三批文科    476.7
上海外国语大学贤达经济人文学院本科三批理科    473.3
上海大学本科一批文科               587.0
上海大学本科一批理科               606.3
上海对外经贸大学本科一批文科           582.8
上海对外经贸大学本科一批理科           596.6
上海工程技术大学本科一批理科           562.9
上海工程技术大学本科二批文科           529.0
                         ...  
黑河学院本科二批文科               484.0
黑河学院本科二批理科               362.5
黑龙江东方学院本科三批文科            459.0
黑龙江中医药大学本科二批文科           507.0
黑龙江中医药大学本科二批理科           504.0
黑龙江八一农垦大学本科二批文科          491.2
黑龙江八一农垦大学本科二批理科          479.6
黑龙江外国语学院本科三批文科           457.0
黑龙江大学本科一批文科              540.3
黑龙江大学本科一批理科              541.0
黑龙江大学本科二批文科              518.4
黑龙江大学本科二批理科              517.3
黑龙江工程学院本科二批文科            493.0
黑龙江工程学院本科二批理科            491.1
黑龙江科技大学本科二批文科            502.7
黑龙江科技大学本科二批理科            501.8
齐鲁医药学院本科三批文科             480.9
齐鲁医药学院本科三批理科             468.2
齐鲁工业大学本科二批文科             513.3
齐鲁工业大学本科二批理科             510.0
齐鲁师范学院本科二批文科             502.0
齐鲁师范学院本科二批理科             486.0
齐鲁理工学院本科三批文科             455.7
齐鲁理工学院本科三批理科             448.2
齐齐哈尔医学院本科二批文科            485.8
齐齐哈尔医学院本科二批理科            502.6
齐齐哈尔大学本科二批文科             499.1
齐齐哈尔大学本科二批理科             397.8
龙岩学院本科二批文科               490.2
龙岩学院本科二批理科               481.1
Name: average_score, Length: 1983, dtype: object

In [ ]:


In [73]:
df['average_score']=df['average_score'].map('{:,.1f}'.format)

In [ ]:


In [ ]:


In [14]:
import re
def distinguish(x):
    
    ## for nei_meng_gu
    if re.search('普通理科', str(x)):
        return '理科'
    
    if re.search('普通文科', str(x)):
        return '文科'
    
    if re.search('理', str(x)):
        return '理科'
    
    if re.search('文', str(x)):
        return '文科'
    
    return x
def distinguish_round(x):
    
    ## for nei_meng_gu
    if re.search('本科二批C(三本)', str(x)):
        return '本科三批'
    
    
    if re.search('本科第三批', str(x)):
        return '本科三批'
    if re.search('本科第二批', str(x)):
        return '本科二批'    
    if re.search('本科第一批', str(x)):
        return '本科一批'
    
    if re.search('本科提前', str(x)):
        return '本科二批'    
    if re.search('本科提前批', str(x)):
        return '提前批次'
    if re.search('本科二批', str(x)):
        return '本科二批' 
    if re.search('本科一批', str(x)):
        return '本科一批' 
    if re.search('本科三批', str(x)):
        return '本科三批'
    
    if re.search('本一批', str(x)):
        return '本科一批'
    if re.search('本二批', str(x)):
        return '本科二批'
    if re.search('本三批', str(x)):
        return '本科三批'
    
    if re.search('专科', str(x)):
        return '专科'
    return str(x)