添加行政代码,pyecharts点击省地图,下钻到该省并且显示数据

1.pyecharts点击省地图,下钻到该省并且显示数据

容易出现的问题:

1.那就是数据怎么放到图中辣。。摸索挺久的。

2.特别注意在放数据到地图中的时候,数值记得转化,卡好久没出数据就是以为没有强制转为数字类型入转为int(xxxx)

3.给地图放入数据规范为北京市,天津市,广东省,香港特别行政区

4.在生成全国的各个省份地图的时候,规范为北京,天津,广东,香港,不要加省市特别行政区自治区等后缀

5.各个省份地图代码里的列表数据是类似于  [ ['东丽区', 3], ['滨海新区', 2], ['红桥区', 2], ['宝坻区', 1], ['西青区', 1], ['保定市', 2], ['沧州市', 1], ['石家庄市', 1]]

这里面对于北京市、天津市、重庆市、上海市,是直接取到区,而对于广东省、河北省等是取到区(其他的入自治区、特别行政区我没测试)

这样子取就会出现一个问题,如果重名了他改分到哪个省中(我没解决)

6.最后附上添加行政区相关代码。

代码:

import pandas as pd
import re
from pyecharts import options as opts
from pyecharts.charts import Geo, Map
from pyecharts.globals import ChartType, SymbolType, CurrentConfig, ThemeType, GeoType

# CurrentConfig.ONLINE_HOST = 'C:/python/pyecharts-assets-master/assets/'
# pandas读取csv文件数据
# 全国
province = ["黑龙江省", "吉林省", "辽宁省", "河北省", "甘肃省", "青海省", "陕西省", "河南省", "山东省", "山西省",
            "安徽省", "湖北省", "湖南省", "江苏省", "四川省", "贵州省", "云南省", "浙江省", "江西省", "广东省",
            "福建省", "台湾省", "海南省", "新疆维吾尔自治区", "内蒙古自治区", "宁夏回族自治区", "广西壮族自治区",
            "西藏自治区", "北京市", "上海市", "天津市", "重庆市", "香港特别行政区", "澳门特别行政区", ]
province_sta = []  # 去除后缀
df = pd.read_csv('alllistrs.txt', encoding='utf-8')
pro = df['pro']  #
pro_sta = []  # 去除省、自治区、市等
shi = df['shi']  #
city = df['city']  #
hao = df['hao']  # 编号
# pro_sta = list(set(pro_sta))  # 对省去重

for i in province:
    # 设置要替换的字符
    i = re.sub('省|市|自治区|壮族自治区|回族自治区|维吾尔自治区|特别行政区', '', i)
    # print(i)
    province_sta.append(i)
print(province_sta)

# 按省归类
pro_df = pd.DataFrame(pro)
pro_count = pro_df.value_counts()
pro_num = []
# province_list = [list(z) for z in zip(pro_count.index, pro_count.values)]
for i in range(len(pro_count)):
    pro_num.append([pro_count.index[i][0], int(pro_count.values[i])])
print('pro_num: ', pro_num)

#  注意不要漏掉强制转化为int
df3 = [list(z) for z in zip(pro, shi,city)]
df3 = pd.DataFrame(df3)
df3_pro = df3.groupby(0).value_counts()
dd = []
for i in range(len(df3_pro)):
    if df3_pro.index[i][1]=='北京市' or df3_pro.index[i][1]=='天津市' or df3_pro.index[i][1]=='上海市' or df3_pro.index[i][1]=='重庆市':
        dd.append([df3_pro.index[i][2], int(df3_pro.values[i])])
    else:
        dd.append([df3_pro.index[i][1], int(df3_pro.values[i])])
print(dd)

# 生成省地图,如江苏,北京,天津,河北,西藏(不加省/自治区)
for i in province_sta:
    province_city = (
        Map(init_opts=opts.InitOpts(width="1500px", height="800px", theme=ThemeType.VINTAGE))
        .add("",
             dd,  # 可以自己写一个字典写各个省份下的市所对应的数据,在这里只是一个range()
             i)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=i + "地图"),
            visualmap_opts=opts.VisualMapOpts(
                min_=1,
                max_=17,
                is_piecewise=True
            )
        )
        .render(path=i + "地图.html")
    )

CHN = (
    Map(init_opts=opts.InitOpts(width="1000px", height="600px"))  # 可切换主题
    .set_global_opts(
        title_opts=opts.TitleOpts(title="--全国项目数量分布--"),
        visualmap_opts=opts.VisualMapOpts(
            min_=0,
            max_=100,
            range_text=['项目数量区间:', ''],  # 分区间
            is_piecewise=True,  # 定义图例为分段型,默认为连续的图例
            pos_top="middle",  # 分段位置
            pos_left="left",
            orient="vertical",
            split_number=10  # 分成10个区间
        )

    )
    .add("*全国项目数量分布*", pro_num, maptype="china")
    .render("全国项目数量分布.html")
)

运行完后,找到全国项目数量分布.html,然后在<script></script>里面的最后(是最后,别放在前面会出不来)加上下面的代码,实现跳转到省地图

注意这里的 chart_后面的一大串要换成自己的全国项目数量分布.html中的<div id="">中的id

 

chart_f69b1139c1b64696b45586c92b5f4dc5.on('click', function (param){
            var selected = param.name;
                if (selected) {
                    switch(selected){
                        case '北京市':
                            location.href = "./北京地图.html";
                            break;
                        case '上海市':
                            location.href = "./上海地图.html";
                            break;
                        case '天津市':
                            location.href = "./天津地图.html";
                            break;
                        case '四川省':
                            location.href = "./四川地图.html";
                            break;
                        case '安徽省':
                            location.href = "./安徽地图.html";
                            break;
                        case '山东省':
                            location.href = "./山东地图.html";
                            break;
                        case '江苏省':
                            location.href = "./江苏地图.html";
                            break;
                        case '江西省':
                            location.href = "./江西地图.html";
                            break;
                        case '河北省':
                            location.href = "./河北地图.html";
                            break;
                        case '浙江省':
                            location.href = "./浙江地图.html";
                            break;
                        case '海南省':
                            location.href = "./海南地图.html";
                            break;
                        case '湖北省':
                            location.href = "./湖北地图.html";
                            break;
                        case '湖南省':
                            location.href = "./湖南地图.html";
                            break;
                        case '广东省':
                            location.href = "./广东地图.html";
                            break;
                        case '福建省':
                            location.href = "./福建地图.html";
                            break;
                        case '甘肃省':
                            location.href = "./甘肃地图.html";
                            break;
                        case '广西壮族自治区':
                            location.href = "./广西地图.html";
                            break;
                        case '贵州省':
                            location.href = "./贵州地图.html";
                            break;
                        case '河南省':
                            location.href = "./河南地图.html";
                            break;
                        case '黑龙江省':
                            location.href = "./黑龙江地图.html";
                            break;
                        case '内蒙古自治区':
                            location.href = "./内蒙古地图.html";
                            break;
                        case '吉林省':
                            location.href = "./吉林地图.html";
                            break;
                        case '辽宁省':
                            location.href = "./辽宁地图.html";
                            break;
                        case '宁夏回族自治区':
                            location.href = "./宁夏地图.html";
                            break;
                        case '青海省':
                            location.href = "./青海地图.html";
                            break;
                        case '山西省':
                            location.href = "./山西地图.html";
                            break;
                        case '陕西省':
                            location.href = "./陕西地图.html";
                            break;
                        case '台湾省':
                            location.href = "./台湾地图.html";
                            break;
                        case '西藏自治区':
                            location.href = "./西藏地图.html";
                            break;
                        case '新疆维吾尔自治区':
                            location.href = "./新疆地图.html";
                            break;
                        case '云南省':
                            location.href = "./云南地图.html";
                            break;
                        case '重庆市':
                            location.href = "./重庆地图.html";
                            break;
                        case '香港特别行政区':
                            location.href = "./香港地图.html";
                        case '澳门特别行政区':
                            location.href = "./澳门地图.html";
                        default:
                            break;
                    }

            }
      });

运行结果(地图大小不太美观,可以自行调整一下):

 

 

 

 添加规范行政区以及行政编号代码:

只取了160条数据左右

# -*- coding: utf-8 -*-
"""
整合test1test2应用于原始的大量数据
给地址添加行政编码
"""
import codecs
import requests

"""
抽取地址,调用接口查看该地址属于哪个省市区
"""
# 1.获取需要的地址数据
f = codecs.open('t1_test_test.txt', mode='r', encoding='utf-8')
lines = f.readlines()
lines = lines[:165]
# lines = lines[:3]

list = []
lnglist = []  # 经度
latlist = []  # 维度
addlist = []  # 标准地址格式省市区
alllist=[]  # 将标准地址省市区组合在一起
codelist=[] # 存储行政编码

for line in lines:
    print(line.strip().split("|")[15])
    list.append(line.strip().split("|")[15])
print(list[0])
# list=lines['16'].values.tolist()
# print(list)




# 2.调用百度api实现提取地点的经纬度
def getJingWei(address):
    url = "https://api.map.baidu.com/geocoding/v3"
    params = {
        "address": address,
        "output": "json",
        "ak": "你自己的ak密钥",
    }
    response = requests.get(url=url, params=params)
    result = response.json()
    status=result['status']
    if(status!=0):
        addlist.append("")
        codelist.append("")
        lnglist.append("")
        latlist.append("")
        alllist.append("")
    else:
        lnglist.append(result['result']['location']['lng'])       # 经度
        latlist.append(result['result']['location']['lat'])        # 纬度


# 3.通过经纬度获取地址信息(省市区)
def getAddress(lng, lat):
    # response = requests.get('https://api.map.baidu.com/reverse_geocoding/v3/?ak=你自己的ak密钥&output=json&coordtype=wgs84ll&location='+str(lat)+','+str(lng))
    response = requests.get('https://api.map.baidu.com/reverse_geocoding/v3/?ak=你自己的ak密钥&output=json&coordtype=wgs84ll&location='+str(lat)+','+str(lng))
    # if response:
    #     print(response.json())
    result = response.json()
    # print(result)
    addlist.append(result['result']['formatted_address'])
    alllist.append(result['result']['addressComponent']['province']+','+result['result']['addressComponent']['city']+','+result['result']['addressComponent']['district']+','+result['result']['addressComponent']['adcode'])
    codelist.append(result['result']['addressComponent']['adcode'])

# 测试
for i in range(len(list)):
    # print(len(list[i]))
    # 注意不能写成list[i]==""或者len(list[i])==0,通过上一条代码可以看见长度为2.
    print(list[i])
    # getJingWei(list[i])
    try:
        getJingWei(list[i])
    except Exception:
        print("-----------------------异常---------------------")

    # 先判断一下地址编码是否成功,成功在进行下一步:获取完整的地址信息
    if (len(addlist)<i+1):
        getAddress(lnglist[i],latlist[i])
        # print("=====",addlist[i])


file_write = codecs.open('result.txt',mode='w',encoding='utf-8')    # 以可写模式打开该文件
file2_write = codecs.open('alllistrs.txt',mode='w',encoding='utf-8')    # 以可写模式打开该文件
file2_write.write('pro,shi,city,hao\r\n')
i=0
for line in lines:
    # 根据实际的数据文件格式修改一下
    line_new = line.strip()+ '|"' + addlist[i] + '"|"' + codelist[i]+'"|"'+alllist[i]+'"\n'
    file2_write.write(""+ alllist[i] +'\n')
    file_write.write(line_new)
    i=i+1

file2_write.close()
file_write.close()

一些补充:

原始数据样式:

输出的   result.txt(在原始数据后添加了规范后的地址信息、行政编码以及省市区)

 输出的  alllistrs.txt(省市区以及行政编码)

 

posted on 2024-04-19 11:31  201812  阅读(28)  评论(0编辑  收藏  举报