利用pyecharts制作简单图形(地图,扇形,柱形等)

一、前期准备与基本制作流程

  1. 首先我们要准备数据,我这里是准备的一些职位数据,形式如下。
    在这里插入图片描述
  2. 其次,下载pyecharts的源程序 templates,在其中的index页面内实现映射
    在这里插入图片描述
  3. 接着就可以开始利用代码进行可视化了pyechars官方地址

二、代码与图形展示

  1. 分析学历的柱形图
def get_proferssion(string):
    proferssion=string.strip(' ').split('|')[-3]
    a = len(proferssion)
    for i in range(0,a):
        if '硕士' in proferssion:
             return proferssion
        elif '博士' in proferssion:
            return proferssion
        elif '本科' in proferssion:
            return proferssion
        elif '中专' in proferssion:
            return proferssion
        elif '高中' in proferssion:
            return proferssion
        elif '大专' in proferssion:
            return  proferssion
        else :
            break

@app.route("/bar")#学历柱形图
def bar():
     file_path = r'E:\job\51job.csv'
     #names指定列名,如果文件中不包含header的行,应该显性表示header=None
     job = pd.read_csv(file_path,encoding='GBK',names=['第1列','第2列','第3列','第4列','第5列','第6列'],error_bad_lines=False)
     big_data = job['第4列'].dropna()#dropna()能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回
     con=big_data.apply(get_proferssion)#apply方法 函数作为一个对象,能作为参数传递给其它参数,并且能作为函数的返回值。
     job_proferssion=list(con.value_counts().to_dict().items())
     ar=np.array(job_proferssion)
     a=ar[:,0]
     b=ar[:,1]
     c = (
       Bar()
       .add_xaxis(list(a))
       .add_yaxis("学历", list(b))
      .set_global_opts(title_opts=opts.TitleOpts(title="学历柱形图", subtitle="我是副标题"))
     )
     return Markup(c.render_embed())

如代码,我们可以看到,前面会先对数据进行提取,第四列的格式如下,把学历提取出来后,转化为对应的格式,我们把学历作为横坐标,人数作为纵坐标,直接带入官方给定的代码
在这里插入图片描述
在这里插入图片描述
别忘了在index内添加相对的映射

2.公司类型的扇形图

def get_company(string):
    company=string.strip().split('\r')[0]
    if '人' not in company:
         return company

@app.route("/pie")#公司类型扇形图
def pie():
   file_path = r'E:\job\51job.csv'
   job = pd.read_csv(file_path,encoding='GBK',names=['第1列','第2列','第3列','第4列','第5列','第6列'])
   big_data = job['第6列'].dropna()
   com=big_data.apply(get_company)
   job_commpany=list(com.value_counts().to_dict().items())
   c = (
    Pie()
    .add("", job_commpany)
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
   )
   return Markup(c.render_embed())

第六列格式如下,先提取数据,这里可以直接带入官方代码
在这里插入图片描述
得到图形
在这里插入图片描述
3.各地平均工资地图

def proc_salary(salary_str):
    if '万/年' in salary_str:
        if '-' in salary_str:
            low_salary = float(salary_str.rstrip('万/年').split('-')[0])
            high_salary = float(salary_str.rstrip('万/年').split('-')[1])
            avg_salary = (low_salary + high_salary)/2/12*10000
        else:
            avg_salary = float(salary_str.rstrip('万/年'))
    elif '万/月' in salary_str:
        if '-' in salary_str:
            low_salary = float(salary_str.rstrip('万/月').split('-')[0])
            high_salary = float(salary_str.rstrip('万/月').split('-')[1])
            avg_salary = (low_salary + high_salary)/2*10000
        else:
            avg_salary = float(salary_str.rstrip('万/月'))
    elif '千/月' in salary_str:
        if '-' in salary_str:
            low_salary = float(salary_str.rstrip('千/月').split('-')[0])
            high_salary = float(salary_str.rstrip('千/月').split('-')[1])
            avg_salary = (low_salary + high_salary)/2*1000
        else:
            avg_salary = float(salary_str.rstrip('千/月'))
    elif '元/天' in salary_str:
        if '-' in salary_str:
            low_salary = float(salary_str.rstrip('元/天').split('-')[0])
            high_salary = float(salary_str.rstrip('元/天').split('-')[1])
            avg_salary = (low_salary + high_salary)/2* 30
        else:
            avg_salary = float(salary_str.rstrip('元/天')) * 30
    return avg_salary

def get_province_from_city(data):    
    city = data.split('|')[0].strip().split('-')[0].strip()
    
    fr = open(city_2_province_file,encoding='UTF-8')
    city_2_province = json.load(fr)
    fr.close()
    
    if not city_2_province.get(city):
        city_urlencode = urllib.parse.quote(city)
        url = f'https://restapi.amap.com/v3/weather/weatherInfo?city={city_urlencode}&key=这里用自己的key' 
        response = request.urlopen(url)
        b = response.read()
        s = b.decode('UTF-8')
        d = json.loads(s)
        province = d['lives'][0]['province']
        city_2_province[city] = province
        
        fw = open(city_2_province_file,'w',encoding='UTF-8')
        json.dump(city_2_province,fw)        
        fw.close()
        
    return city_2_province.get(city)

@app.route("/map")
def map():
   file_path = r'E:\学习类文件或总结\数据挖掘\期末\job\51job.csv'
   job = pd.read_csv(file_path,encoding='GBK',names=['第1列','第2列','第3列','第4列','第5列','第6列'])
   big_data_job = job[job['第1列'].str.contains('大数据')]
   salary = big_data_job['第2列'].dropna().apply(proc_salary)
   provinces=big_data_job['第4列'].apply(get_province_from_city)
   province_salary = pd.concat([provinces,salary],axis=1,join='inner')
   mean_salary_per_province = province_salary.groupby(province_salary['第4列']).mean()
   mean_salary_per_province_list = [[k,v] for k,v in mean_salary_per_province.to_dict()['第2列'].items()]
   c = (
       Map()
       .add("商家A", mean_salary_per_province_list, "china")
       .set_global_opts(
           title_opts=opts.TitleOpts(title="平均工资地图"),
           visualmap_opts=opts.VisualMapOpts(max_=30000, is_piecewise=False),
       )
   )
   return Markup(c.render_embed())

这里获取省份的代码用到了高德开发平台的key,大家可以自己去申请一个
第一第二列格式如下
在这里插入图片描述
利用这几列信息,获取大数据相关职业的平均工资与省份
带入官方代码最终得到
在这里插入图片描述
三、最后,这些只是几个简单例子,大家可以分析其他数据可视化为其他图形,个人觉得还是很方便的!
欢迎讨论!!!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值