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}]
③, 拾取中心點坐標在線地圖經度緯度查詢 - 經緯度查詢地名|地名查詢經緯度 -GPSspg?www.gpsspg.com
④, mapstyle 與mapAccessToken設置https://www.mapbox.com/?www.mapbox.com
⑤, 導出html