bokeh联动柱状图,Excel空间柱状图、空间热力图,Echarts空间柱状图,常用函数:
df['工作地_省'] = df['工作地'].str.split('省').str[0]
df['工作地_市'] = ''
df['工作地_市']= df['工作地'].str.split('省').str[1].str.split('市').str[0]
df['工作地_市'][df['工作地_省'].str.len() >= 5] = df['工作地_省'].str.split('市').str[0]
data_wang1 = df[df['姓'] == '王']
writer = pd.ExcelWriter('C:/Users/Administrator/Desktop/wang1.xlsx')
data_wang1.to_excel(writer,'sheet1',index=False)
writer.save()
price11middle_SSS_top_95['zkl_range'] = price11middle_SSS_top_95['zkl_range'].astype(str)一,concat上下合并数据,merge左右合并数据
二, x=各姓,y= 个数 /占比 bokeh联动柱状图
三, x=各地,y= 王姓个数 Excel空间柱状图、空间热力图
四, x=各地,y= 王姓个数 Echarts空间柱状图
一,concat上下合并数据,merge左右合并数据 .str.split('省').str[0]
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 不发出警告
from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource
# 导入图表绘制、图标展示模块
# 导入ColumnDataSource模块
import os
os.chdir('C:/Users/Administrator/Desktop/')
# 创建工作路径
#
df01 = pd.read_csv('data01.csv',encoding = 'utf-8')
df02 = pd.read_csv('data02.csv',encoding = 'utf-8')
df_city = pd.read_excel('中国行政代码对照表.xlsx')
# 读取数据
df = pd.concat([df01,df02])
df.to_csv('preliminary.csv')
df = pd.read_csv('preliminary.csv', index_col=0)
df = pd.merge(df,df_city,left_on='户籍地城市编号',right_on = '行政编码')
df['工作地'] = df['工作地'].str[:15] # 只提取工作地前15个字符即可
del df['行政编码']
del df['户籍地城市编号']
# 合并数据,添加经纬度字段
# 删除无用字段
# 分别提取“工作地”中的省、市、区县
# 新建字段“工作地-省”,“工作地-市”,“工作地-区县”,如果数据中“工作地”字段无法提取省和市,则用“未识别”填充单元格
# *通过查看识别后的单元格,如果字数超过5则为“未识别”
df['工作地_省'] = df['工作地'].str.split('省').str[0]
# 识别工作地-省
df['工作地_市'] = ''
df['工作地_市']= df['工作地'].str.split('省').str[1].str.split('市').str[0]
df['工作地_市'][df['工作地_省'].str.len() >= 5] = df['工作地_省'].str.split('市').str[0]
# 识别工作地-市
# 在未识别出省的数据中,可能会有市的信息
df['工作地_区县'] = ''
df['工作地_区县'][(df['工作地_市'].str.len() < 5)&(df['工作地'].str.contains('区'))] = df['工作地'].str.split('市').str[1].str.split('区').str[0] + '区'
df['工作地_区县'][(df['工作地_市'].str.len() > 5)&(df['工作地'].str.contains('区'))] = df['工作地'].str.split('区').str[0] + '区'
df['工作地_区县'][(df['工作地_市'].str.len() < 5)&(df['工作地'].str.contains('县'))] = df['工作地'].str.split('市').str[1].str.split('县').str[0] + '县'
df['工作地_区县'][(df['工作地_市'].str.len() > 5)&(df['工作地'].str.contains('县'))] = df['工作地'].str.split('县').str[0] + '县'
#### 识别工作地-区县
###
df['工作地_省'][df['工作地_省'].str.len() > 5 ] = '未识别'
df['工作地_市'][df['工作地_市'].str.len() > 5 ] = '未识别'
df['工作地_区县'][(df['工作地_区县'].str.len() > 5) | (df['工作地_区县'].str.len() < 2)] = '未识别'
df['工作地_市'][df['工作地_市'].str.len() <= 1 ] = '未识别'
df['工作地_省'][df['工作地_省'].str.len() <= 1 ] = '未识别'
## 整理未识别单元格
#
df.columns = ['姓','工作地','户籍所在地_省','户籍所在地_市','户籍所在地_区县','户籍所在地_lng','户籍所在地_lat',
'工作地_省','工作地_市','工作地_区县']
print('读取数据共%i条' % len(df))
## 数据整理
shenrufeng = df[:100]
print('finished')
二, x=各姓,y= 个数 /占比 bokeh联动柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 不发出警告
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串,中文不显
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串,中文不显
from bokeh.plotting import figure,show,output_file
from bokeh.models import ColumnDataSource
# 导入图表绘制、图标展示模块
# 导入ColumnDataSource模块
import os
os.chdir('C:/Users/Administrator/Desktop/')
name_count = df['姓'].value_counts()
result1_01 = pd.DataFrame({'count':name_count, 'count_pre':name_count/name_count.sum()})[:20]
#result1_01.iloc[:20].plot(kind = 'bar',rot = 0,figsize = (10,6))
# bokeh出联动柱状图
from bokeh.models import HoverTool
from bokeh.layouts import gridplot
output_file("line66.html")
# 导入模块
name_lst = result1_01.index.tolist()
result1_01.index.name = 'index'
source = ColumnDataSource(result1_01)
# 创建ColumnDataSource数据
hover1 = HoverTool(tooltips=[("姓氏计数", "@count")]) # 设置标签显示内容
result1 = figure(plot_width=800, plot_height=250,x_range = name_lst,
title="中国姓氏TOP20 - 计数" ,
tools=[hover1,'reset,xwheel_zoom,pan']) # 构建绘图空间
result1.vbar(x='index', top='count', source=source,width=0.9, alpha = 0.7,color = 'red')
result1.ygrid.grid_line_dash = [6, 4]
result1.xgrid.grid_line_dash = [6, 4]
# 柱状图1
hover2 = HoverTool(tooltips=[("姓氏占比", "@count_pre")]) # 设置标签显示内容
result2 = figure(plot_width=800, plot_height=250,x_range = result1.x_range,
title="中国姓氏TOP20 - 占比" ,
tools=[hover2,'reset,xwheel_zoom,pan'])
result2.vbar(x='index', top='count_pre', source=source,width=0.9, alpha = 0.7,color = 'green')
result2.ygrid.grid_line_dash = [6, 4]
result2.xgrid.grid_line_dash = [6, 4]
# 柱状图2
p = gridplot([[result1], [result2]])
# 组合图表
show(p)
三, Excel空间柱状图 Excel空间热力图
data_wang1 = df[df['姓'] == '王']
writer = pd.ExcelWriter('C:/Users/Administrator/Desktop/wang1.xlsx')
data_wang1.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据1
四, Echarts空间柱状图
①, 导出数据
data_wang2 = data_wang1.groupby(['户籍所在地_lng','户籍所在地_lat','户籍所在地_市'])['姓'].count()
data_wang2 = data_wang2.reset_index()
data_wang2.columns= ['lng', 'lat', 'name', 'value']
data_wang2=data_wang2[['name', 'lng', 'lat', 'value']]
writer = pd.ExcelWriter('C:/Users/Administrator/Desktop/wang2.xlsx')
data_wang2.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据2
print('导出完成!')
②, 转成json
import pandas as pd
import os
os.chdir('C:\\Users\\Administrator\\Desktop\\') # 输入文件所在路径,例如:'C:/Users/Desktop/'
data = pd.read_excel('wang2.xlsx', sheet_name=0,header=0)
datajs = data.to_json(orient='records',force_ascii=False)
print('转换后数据为:\n',datajs)
[{"name":"信阳","lng":-1.0,"lat":-1.0,"value":14},{"name":"包头","lng":-1.0,"lat":-1.0,"value":3},{"name":"呼伦贝尔","lng":-1.0,"lat":-1.0,"value":1},——————{"name":"鸡西","lng":133.1211060726,"lat":45.9972762035,"value":10},{"name":"佳木斯","lng":133.2733283638,"lat":47.8336846866,"value":5},{"name":"双鸭山","lng":133.7292586825,"lat":47.0726285429,"value":8},{"name":"佳木斯","lng":134.296044164,"lat":47.9261051999,"value":5}]
③, 拾取中心点坐标在线地图经度纬度查询 - 经纬度查询地名|地名查询经纬度 -GPSspgwww.gpsspg.com
④, mapstyle 与mapAccessToken设置https://www.mapbox.com/www.mapbox.com
⑤, 导出html