二、我独立编写的代码如下:
一直希望把电脑用好,让电脑帮助我高效率地完成大量工作,编写一点代码能解决问题,只是我刚刚才开始学习python , 代码可能会写得乱七八糟, 我会努力写好的。
本次使用中位数评分法,变化比较大,问题是各项指标权重相同,这是导致深圳排名靠后的原因。
本次作业的具体代码如下:
def median_scoring(data,score_median = 7, score_max = 10, score_min = 4, score_sign = 1):
# score_sign = 1 or -1, 1是按从大到小得分从高到低,-1是按从小到大得分从高到低
import numpy as np
# print(data)
score_median = score_median
score_max = score_max
score_min = score_min
score_sign = score_sign
if score_sign == -1:
cal_data = [i*score_sign for i in data]
else:
cal_data = data
# print(cal_data)
data_score=[]
data_median = np.median(cal_data)
for i in cal_data:
if i == data_median:
s = score_median
elif i > data_median:
s = round(score_median + (score_max - score_median)*((i-data_median)/(np.max(cal_data) - data_median)),2)
else:
s = round(score_median - (score_median - score_min)*((data_median-i)/(data_median - np.min(cal_data))),2)
data_score.append(s)
return data_score
# data = np.random.randint(2,15,10).tolist()
# a = median_scoring(data,score_sign = -1)
# print(a)
import xlrd
book=xlrd.open_workbook('C:/Users\Dingrong_Zhou\Desktop\万门作业\city_data.xlsx')
sheet=book.sheet_by_index(0)
main_data_list=[]
for row in range(3,sheet.nrows):
temp_dict={}
print(sheet.row_values(row))
temp_dict['城市']=sheet.row_values(row)[0]
temp_dict['2019GDP']=sheet.row_values(row)[1]
temp_dict['2018总人口']=sheet.row_values(row)[2]
temp_dict['2018平均房价']=sheet.row_values(row)[3]
temp_dict['2018平均工资']=sheet.row_values(row)[4]
temp_dict['地铁总里程']=sheet.row_values(row)[5]
temp_dict['高校数量']=sheet.row_values(row)[6]
temp_dict['三甲医院数量']=sheet.row_values(row)[7]
temp_dict['2018小学生数量']=sheet.row_values(row)[8]
main_data_list.append(temp_dict)
for i_list in range(len(main_data_list)):
main_data_list[i_list]['原榜单得分']=len(main_data_list)-i_list
print('城市原榜单得分(由高到低):')
for j_list in range(len(main_data_list)):
print(main_data_list[j_list]['城市'],main_data_list[j_list]['原榜单得分'])
print('-'*60)
for i in range(len(main_data_list)):
main_data_list[i]['收入房价比']=round(main_data_list[i]['2018平均工资']/12/main_data_list[i]['2018平均房价'],2)
for kw in ['2019GDP','2018总人口','2018平均房价','2018平均工资','地铁总里程','高校数量','三甲医院数量','2018小学生数量','原榜单得分','收入房价比']:
data=[]
for city in main_data_list:
data.append(city[kw])
print(kw)
if kw == '2018平均房价':
s = median_scoring(data,score_sign = -1)
else:
s= median_scoring(data)
print(s)
i=0
for city in main_data_list:
# print(i)
city[kw+'得分']=s[i]
print(city['城市'],kw+'得分',s[i])
i=i+1
print('-'*60)
for city in main_data_list:
city['城市总得分']=round(city['原榜单得分得分']+city['2019GDP得分']+city['2018总人口得分']+city['2018平均房价得分']+city['2018平均工资得分']+city['地铁总里程得分']+city['高校数量得分']+city['三甲医院数量得分']+city['2018小学生数量得分']+city['收入房价比得分'],2)
print(city['城市'],'总得分',city['城市总得分'])
print('-'*60)
def get_value(dic,k):
return dic.get(k)
cities_byscore=sorted(main_data_list,key=lambda x:get_value(x,'城市总得分'),reverse=True)
# print(cities_byscore)
print(f'城市总得分(由高到低):')
for j_score in range(len(cities_byscore)):
print(cities_byscore[j_score]['城市'],cities_byscore[j_score]['城市总得分'],'新排名:', j_score+1,'原排名:', 11-cities_byscore[j_score]['原榜单得分'])
三、运行结果如下图: