一、前期准备与基本制作流程
- 首先我们要准备数据,我这里是准备的一些职位数据,形式如下。
- 其次,下载pyecharts的源程序 templates,在其中的index页面内实现映射
- 接着就可以开始利用代码进行可视化了pyechars官方地址
二、代码与图形展示
- 分析学历的柱形图
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,大家可以自己去申请一个
第一第二列格式如下
利用这几列信息,获取大数据相关职业的平均工资与省份
带入官方代码最终得到
三、最后,这些只是几个简单例子,大家可以分析其他数据可视化为其他图形,个人觉得还是很方便的!
欢迎讨论!!!