首页 > 编程语言 >python实现数据下钻,数据地图可视化,得到每个地区的项目数量

python实现数据下钻,数据地图可视化,得到每个地区的项目数量

时间:2024-03-15 19:46:07浏览次数:28  
标签:province python data list json 可视化 result 数据 opts

具体代码

from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import urllib.request, urllib.parse, urllib.error
import json
import hashlib
import numpy as np
import pandas as pd

MyAK = 'sIWgaZ4ypVeGYGwnMPfUDB1FHV0dLgtC'
MySK = 'GucWw7tIwOzHvlwWyloQHNLqzc8iAb2U'

lat=0.0
lng=0.0
#处理得到url
def get_url(name):
    #GET请求 http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
    queryStr = '/geocoding/v3/?address={}&output=json&ak={}'.format(name,MyAK)
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后追加sk
    rawStr = encodedStr + MySK
    # 计算sn
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
    url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
    #print('URL:', url)
    return url

#得到json数据
def get_json(url):
    # 从API读取数据
    req = urllib.request.urlopen(url)
    res = req.read().decode()

    # 解析数据
    try:
        # 将 JSON 对象转换为 Python 字典
        json_data = json.loads(res)
    except:
        json_data = "地址未知"
    if not json_data or 'status' not in json_data or json_data['status'] != 0:
        print('json数据获取失败',json_data['status'])
    '''else:
        #输出Json数据
        print(json.dumps(json_data, indent=4, ensure_ascii=False))'''
    return json_data

# 获取经纬度坐标
def get_lnglat(json_data):
    #Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global
    global lat,lng
    lat = json_data["result"]["location"]["lat"]
    lng = json_data["result"]["location"]["lng"]
    #print('纬度', lat, '经度', lng)

def get_url2(lat,lng):
    #GET请求 http://api.map.baidu.com/reverse_geocoding/v3/?ak=您的ak&output=json&coordtype=wgs84ll&location=31.225696563611,121.49884033194
    queryStr = '/reverse_geocoding/v3/?ak={}&output=json&coordtype=wgs84ll&location={},{} '.format(MyAK,str(lat),str(lng))
    # 对queryStr进行转码,safe内的保留字符不转换
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    # 在最后追加sk
    rawStr = encodedStr + MySK
    # 计算sn
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
    url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
    #print('URL:', url)
    return url

# 解析Json数据
def get_province(json_data):
    if json_data != "地址未知":
        province=json_data["result"]["addressComponent"]["province"]
        city=json_data["result"]["addressComponent"]["city"]
        district=json_data["result"]["addressComponent"]["district"]
        # adcode=json_data["result"]["addressComponent"]["adcode"]
        # print("地理:",province+city+district)
        result = province
    else:
        result = json_data
    return result
    # print("行政代码:"+adcode)

def get_city(json_data):
    if json_data != "地址未知":
        province=json_data["result"]["addressComponent"]["province"]
        city=json_data["result"]["addressComponent"]["city"]
        district=json_data["result"]["addressComponent"]["district"]
        # adcode=json_data["result"]["addressComponent"]["adcode"]
        # print("地理:",province+city+district)
        result = city
    else:
        result = json_data
    return result
    # print("行政代码:"+adcode)

def get_district(json_data):
    if json_data != "地址未知":
        province=json_data["result"]["addressComponent"]["province"]
        city=json_data["result"]["addressComponent"]["city"]
        district=json_data["result"]["addressComponent"]["district"]
        # adcode=json_data["result"]["addressComponent"]["adcode"]
        # print("地理:",province+city+district)
        result = district
    else:
        result = json_data
    return result
    # print("行政代码:"+adcode)

# 读取csv文件相关数据
df = pd.read_csv("D:/12140/Desktops/111/222/test007.csv", encoding="utf-8")  # 编码默认UTF-8,若乱码自行更改

province_data = df[['联系单位地址']]

gdp_data = df[['ID_x']]

province_data_array = np.array(province_data.stack())  # 首先将pandas读取的数据转化为array
province_map_data = province_data_array.tolist()  # 然后转化为list形式

gdp_data_array = np.array(gdp_data.stack())
gdp_map_data = gdp_data_array.tolist()

ppp_list = []
ccc_list = []
ddd_list = []

# 得到各个地址所对应的省市
for i in range(0, len(province_map_data)):
    uu = get_url(province_map_data[i])
    json_data = get_json(uu)
    if json_data['status'] != 1:
        lnglat = get_lnglat(json_data)
        uu2 = get_url2(lat, lng)
        json_data = get_json(uu2)
        province = get_province(json_data)
        city = get_city(json_data)
        district = get_district(json_data)
        ppp_list.append(province)
        ccc_list.append(city)
        ddd_list.append(district)

df['省份'] = ppp_list
df['城市'] = ccc_list
df['区县'] = ddd_list

new_ppp_list = [x[:-1] for x in ppp_list]
new_ccc_list = [x[:-1] for x in ccc_list]
new_ddd_list = [x[:-1] for x in ddd_list]

df.to_csv("D:/12140/Desktops/111/222/test007.csv", index=False)

# 读取数据,进行地图下钻
data = pd.read_csv('D:/12140/Desktops/111/222/test007.csv')
province = list(data["省份"])

vc = data['省份'].value_counts()
vvv =list(vc)

u = data['省份'].unique()

list_province_gdp = [list(z) for z in zip(u, vvv)]

city = list(data['城市'])

vc = data['城市'].value_counts()
vvv =list(vc)

u = data['城市'].unique()

list_city_gdp = [list(z) for z in zip(u, vvv)]

district = list(data['区县'])

vc = data['区县'].value_counts()
vvv =list(vc)

u = data['区县'].unique()

list_district_gdp = [list(z) for z in zip(u, vvv)]

print(list_province_gdp)

print(list_city_gdp)

print(list_district_gdp)

# 生成全国地图
c = (
    Map(init_opts=opts.InitOpts(width="1000px", height="600px"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="全国地图"),
        visualmap_opts=opts.VisualMapOpts(
            type_="scatter"
        )
    )
    .add("GDP", list_province_gdp, maptype="china")
    .render("Modern地图1.html")
)

# 对应的省市地图的生成
for i in new_ppp_list:
    province_city = (
        Map(init_opts=opts.InitOpts(width="1500px", height="800px", theme=ThemeType.VINTAGE))
        .add("",
             list_city_gdp,
             i)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=i + "地图"),
            visualmap_opts=opts.VisualMapOpts(
                min_=1,
                max_=17,
                is_piecewise=True
            )
        )
        .render(path=i + "1地图.html")
    )

# 对应的区县地图的生成
for i in new_ccc_list:
    city_qu = (
        Map(init_opts=opts.InitOpts(width="1500px", height="800px", theme=ThemeType.VINTAGE))
        .add("",
             list_district_gdp,
             i)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=i + "地图"),
            visualmap_opts=opts.VisualMapOpts(
                min_=1,
                max_=17,
                is_piecewise=True
            )
        )
        .render(path=i + "1地图.html")
    )


效果展示(数据这么少的原因在于,百度额度有一定的限制,所以我只是截取了一部分数据,用来掌握这个知识点)

标签:province,python,data,list,json,可视化,result,数据,opts
From: https://www.cnblogs.com/liuzijin/p/18076103

相关文章

  • 数据仓库原理(二)
    目录四、数据仓库的概念模型(一)多维数据模型(二)维度与粒度五、数据仓库的逻辑模型(一)多维模型(二)星形模型(三)雪花模型六、数据仓库的物理模型(一)位图索引模型(二)广义索引模型(三)连接索引模型(四)RAID存储结构 四、数据仓库的概念模型  概念数据模型(ConceptualDataMo......
  • Python实战:Python异常处理机制及try-except-finally
    本文将详细介绍Python中的异常处理机制,以及如何使用try-except-finally语句来处理程序中的错误和异常情况。我们将深入探讨异常的概念、类型和层次结构,并展示如何在实际编程中应用异常处理来提高代码的健壮性和可维护性。1.引言在编程过程中,错误和异常是不可避免的。异常......
  • Python实战:Python列表(List)详解及其常用方法
    本文将详细介绍Python中的列表(List)数据结构,包括其基本概念、特点、常用方法以及实际应用案例。我们将深入探讨列表的内部实现机制,并通过丰富的代码示例来展示如何高效地使用列表来解决各种编程问题。1.引言在Python中,列表(List)是最常用的数据结构之一,它提供了一种灵活......
  • 高性能 数据库连接池 HikariCP | HikariCP 配置详解
    ......
  • 高性能 数据库连接池 HikariCP | MySQL 最佳性能实践
    ......
  • 变更数据捕获(CDC)工具综述
    变更数据捕获(ChangeDataCapture,CDC)是一种技术,用于实时捕获数据库中的变更(如插入、更新和删除操作),并将这些变更同步到其他数据库或数据仓库中,从而保持数据环境的一致性和实时性。CDC技术对于实现实时数据分析、数据集成、数据复制和备份等场景至关重要。本文将介绍当前市场上一......
  • 计算机毕业设计项目基于大数据和ALS算法实现的房源智能推荐系统
    概要  目前,现有的房源信息不够透明化大多中介混淆市场,内含不为人知的商业链。有经验的租客们会通过周边房价走势和走访周边房源对比调研、筛选适合自己的房源。同时,对于用户工作地点需求和各种人群类型如大学生群体,年轻小资,或者中年人,他们希望居住的环境要求各不相同各......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)
    摘要:开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模型间的性能指标,如mAP、F1Score等。文章深入解释了YOLOv8的......
  • Python3.0+的安装(全 且 清晰)
    言的使用源于系统环境的安装和配置。Python也无例外;这里,为了少走弯路简便傻瓜式搭建开发环境,整理了以下内容,希望能帮助有所需要的开发者。版本选择点击官网选择对应的版本下载资源下载资源版本选择3.8+以上版本为了解决不同版本的Python解释器在开发和使用时可能会出现的不......
  • chapter10-非线性数据结构
    机试中考查的一些非线性数据结构,包括二叉树、二叉排序树、优先队列和散列表。1.二叉树(BinaryTree)对于二叉树来说,机试中常考的是其各种遍历方法,分为前序、中序、后序遍历,以及层次遍历。1.2二叉树遍历题目描述+输入输出题目描述:二叉树的前序、中序、后序遍历的定义。前......