text: import math
  import numpy as np
  import pandas as pd
  from config import *
  import matplotlib.pyplot as plt
  from mpl_toolkits.basemap import Basemap
  
  def draw_city_map(data_city,headcount_scale, title):
  
  
      
      data_location = pd.read_csv('../city_locations.csv')
      data_location=data_location.set_index('city')    
      
      #cities = []
      scale = 5
  
      locations = [(116.407526, 39.90403),(120, 30)]
      #fig=plt.figure(figsize=(18, 16), dpi= 80, facecolor='w', edgecolor='k')
      plt.rcParams['figure.figsize'] = [13, 13]
      #plt.figure(figsize = (10,5))
      fig, ax = plt.subplots()
      fig.title=title
      fig.figsize=(10,5)
      fig.dpi=80
      cn_map= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, \
                 projection='lcc', lat_1=33, lat_2=45, lon_0=100) # ‘lcc'将投影方式设置为兰伯特投影
  
      # load the shapefile, use the name 'states'
      cn_map.readshapefile(r'D:/data/basemap/gadm36_CHN_shp/gadm36_CHN_1', name='china', drawbounds=True, color='gray')
      cn_map.readshapefile(r'D:/data/basemap/gadm36_TWN_shp/gadm36_TWN_1', name='taiwan', drawbounds=True, color='gray')
      #geolocator = Nominatim(user_agent="my-application")
  
  
  
      salary_min=data_city['平均工资'].min()
      salary_max=data_city['平均工资'].max()
      salary_middle = (salary_min+salary_max)/2
      salary_scale=salary_max-salary_min
  
      for index, row in data_city.iterrows():
          city=row['city']
          
          longitude = data_location.loc[city,'longitude']
          latitude = data_location.loc[city,'latitude']
          salary=row['平均工资']
          headcount=row['招聘人数']
          #color
          color_red=0
          color_green=0
          color_blue=0
          if salary>salary_middle:
              color_red = 255 #int((salary - salary_middle) / (salary_scale/2)*255)
              color_green = int((salary_max - salary) / (salary_scale/2)*255)
          else:
              color_blue = int((salary_middle - salary) / (salary_scale/2)*255)
              color_green = int((salary - salary_min) / (salary_scale/2)*255)
              color_red = int((salary - salary_min) / (salary_scale/2)*255)
  
          color = '#{:02x}{:02x}{:02x}'.format(color_red,color_green,color_blue)
  
  
          x, y = cn_map(longitude,latitude)
          cn_map.plot(x,y,marker='o',color=color,markersize=int(math.sqrt(headcount/headcount_scale))+8)
          #ax.annotate(city, (x,y), xytext=(5, 5), textcoords='offset points', fontsize=15)
          #"{}{:.0f}".format(city_cn, salary)
          #ax.text(x+5, y+5,city , fontweight='bold', fontsize=int(headcount/2500+12))
          fontsize=int(math.sqrt(headcount/headcount_scale))+13
          if city == '杭州':
              x=x-400000
              y=y+10000
          elif city=='广州':
              x=x-400000
              y=y+10000
          elif city=='合肥':
              x=x-300000
              y=y+10000
          elif city=='深圳':
              y=y-100000
          elif city=='南京':
              x=x-100000
          elif city=='天津':
              y=y-50000
          elif city=='上海':
              x=x+50000
          elif city=='武汉':
              y=y-50000
          elif city=='厦门':
              pass
          elif city=='福州':
              pass
          elif city=='苏州':
              y=y-100000
              pass
          elif city=='宁波':
              y=y-100000
              pass
  
          ax.text(x, y, "{}{:.0f}k".format(city, np.round(salary/1000)), fontweight='bold', fontsize=fontsize, bbox={'facecolor':color, 'alpha':0.3, 'pad':0})
      ax.text(1100000, 1077845, "https://github.com/juwikuang/china_job_survey".format(city, np.round(salary/1000)), fontweight='bold',color='#999999', fontsize=20, bbox={'facecolor':'#eeeeee', 'alpha':0.4, 'pad':0})    
      ax.text(205805, 107845, "https://github.com/juwikuang/china_job_survey".format(city, np.round(salary/1000)), fontweight='bold',color='#999999', fontsize=20, bbox={'facecolor':'#eeeeee', 'alpha':0.4, 'pad':0})    
      ax.text(805805, 4007845, title.format(city, np.round(salary/1000)), fontweight='bold',color='#111111', fontsize=25)    
      ax.text(805805, 3807845, "（城市大小代表招聘数量，颜色代表工资，红色最高，黄色次之，蓝最少）", fontweight='bold',color='#111111', fontsize=13)    
      #cn_map.drawcoastlines() #绘制海岸线
      #cn_map.drawcountries(linewidth=1.5) #绘制国家边界线
      plt.show()
  
  def draw_province_map(data_city,headcount_scale, title):
      
      data_location = pd.read_csv('../geo_data/provincial_capital_locations.csv', encoding='utf-8')
      data_location=data_location.set_index('province')
  
      #cities = []
      scale = 5
  
      locations = [(116.407526, 39.90403),(120, 30)]
      #fig=plt.figure(figsize=(18, 16), dpi= 80, facecolor='w', edgecolor='k')
      plt.rcParams['figure.figsize'] = [13, 13]
      #plt.figure(figsize = (10,5))
      fig, ax = plt.subplots()
      fig.title=title
      fig.figsize=(10,5)
      fig.dpi=80
      cn_map= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, \
                 projection='lcc', lat_1=33, lat_2=45, lon_0=100) # ‘lcc'将投影方式设置为兰伯特投影
  
      # load the shapefile, use the name 'states'
      cn_map.readshapefile(r'D:/data/basemap/gadm36_CHN_shp/gadm36_CHN_1', name='china', drawbounds=True, color='gray')
      cn_map.readshapefile(r'D:/data/basemap/gadm36_TWN_shp/gadm36_TWN_1', name='taiwan', drawbounds=True, color='gray')
      #geolocator = Nominatim(user_agent="my-application")
  
  
  
      salary_min=data_city.salary_mean.min()
      salary_max=data_city.salary_mean.max()
      salary_middle = (salary_min+salary_max)/2
      salary_scale=salary_max-salary_min
  
      for index, row in data_city.iterrows():
          province=row['province']
          
          longitude = data_location.loc[province,'longitude']
          latitude = data_location.loc[province,'latitude']
          salary=row[1]
          headcount=row[5]
          #color
          color_red=0
          color_green=0
          color_blue=0
          if salary>salary_middle:
              color_red = 255 #int((salary - salary_middle) / (salary_scale/2)*255)
              color_green = int((salary_max - salary) / (salary_scale/2)*255)
          else:
              color_blue = int((salary_middle - salary) / (salary_scale/2)*255)
              color_green = int((salary - salary_min) / (salary_scale/2)*255)
              color_red = int((salary - salary_min) / (salary_scale/2)*255)
  
          color = '#{:02x}{:02x}{:02x}'.format(color_red,color_green,color_blue)
  
  
          x, y = cn_map(longitude,latitude)
          cn_map.plot(x,y,marker='o',color=color,markersize=int(math.sqrt(headcount/headcount_scale))+8)
          #ax.annotate(city, (x,y), xytext=(5, 5), textcoords='offset points', fontsize=15)
          #"{}{:.0f}".format(city_cn, salary)
          #ax.text(x+5, y+5,city , fontweight='bold', fontsize=int(headcount/2500+12))
          fontsize=int(math.sqrt(headcount/headcount_scale))+13
          if province == '浙江':
              #x=x-400000
              y=y-100000
  
          elif province=='安徽':
              x=x-300000
              y=y+10000
          elif province=='江苏':
              x=x-150000
          elif province=='天津':
              y=y-50000
          elif province=='上海':
              x=x+50000
          elif province=='湖北':
              y=y-50000
  
          ax.text(x, y, "{}{:.0f}k".format(province, np.round(salary/1000)), fontweight='bold', fontsize=fontsize, bbox={'facecolor':color, 'alpha':0.3, 'pad':0})
      ax.text(2053805, 1077845, "https://github.com/juwikuang/china_job_survey".format(province, np.round(salary/1000)), fontweight='bold',color='#999999', fontsize=20, bbox={'facecolor':'#eeeeee', 'alpha':0.4, 'pad':0})    
      ax.text(205805, 107845, "https://github.com/juwikuang/china_job_survey".format(province, np.round(salary/1000)), fontweight='bold',color='#999999', fontsize=20, bbox={'facecolor':'#eeeeee', 'alpha':0.4, 'pad':0})    
      ax.text(805805, 4007845, title.format(province, np.round(salary/1000)), fontweight='bold',color='#111111', fontsize=25)    
      ax.text(805805, 3807845, "（城市大小代表招聘数量，颜色代表工资，红色最高，黄色次之，蓝最少）", fontweight='bold',color='#111111', fontsize=13)    
      #cn_map.drawcoastlines() #绘制海岸线
      #cn_map.drawcountries(linewidth=1.5) #绘制国家边界线
      plt.show()
      
      
  def describe(data_city, career):
      
      for index, row in data_city.iterrows():
          print(f"{year}年{month}月{row[0]}招收{career}{row[5]}人。2019年{month}月{row[0]}{career}平均工资{row[1]:.0f}元，工资中位数{row[3]:.0f}元，其中95%的人的工资介于{row[2]:.0f}元到{row[4]:.0f}元。\r\n")
  