首页 > 其他分享 >大数据——数据下钻到省市县

大数据——数据下钻到省市县

时间:2024-03-25 23:12:28浏览次数:21  
标签:省市 get url 数据 json result print data

import urllib.request, urllib.parse, urllib.error
import json
import hashlib
import numpy as np
import pandas as pd

MyAK = ''
MySK = ''

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_info(json_data):
    if json_data != "地址未知":
        province = json_data.get("result", {}).get("addressComponent", {}).get("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+city+district
    else:
        result = json_data
    return json_data
    # print("行政代码:"+adcode)

if __name__ == '__main__':
    #得到经纬度

    # 读取csv文件单位地区数据
    df = pd.read_csv("result_table01.csv",encoding='utf-8')
    data = df[['单位']]
    data = data.fillna("0")
    data_array = np.array(data.stack())  # 首先将pandas读取的数据转化为array
    data_list = data_array.tolist()  # 然后转化为list形式
    #print(data_list)
    print(len(data_list))

    # 将各个单位名称存储为一个列表形式
    url = []
    for i in range(0,len(data_list)):
        result =data_list[i]
        #print(result)
        url.append(result)
    # print(url)

    rr = []
    city = []
    province = []
    direct = []

    for i in range(0, len(url)):
        try:
            uu = get_url(url[i])
            json_data = get_json(uu)
            status = json_data.get('status')
            if status == 0:
                lnglat = get_lnglat(json_data)
                uu2 = get_url2(lat, lng)
                json_data = get_json(uu2)
                p = json_data.get("result", {}).get("addressComponent", {}).get("province", "未知")
                c=json_data["result"]["addressComponent"]["city"]
                d=json_data["result"]["addressComponent"]["district"]
                province.append(p)
                city.append(c)
                direct.append(d)
            elif status in [1, 2, 3]:
                print(f"跳过处理,状态码为 {status}")
                province.append(" ")
                city.append(" ")
                direct.append(" ")
            else:
                print(f"未处理的状态码:{status}")
                province.append(" ")
                city.append(" ")
                direct.append(" ")
        except Exception as e:
            print(f"处理数据时发生异常:{e}")
            province.append(" ")
            city.append(" ")
            direct.append(" ")
    df['省'] = province
    df['市'] = city
    df['县'] = direct

    df.to_csv("result_table05.csv", index=False)

    print("添加省市县成功!")

标签:省市,get,url,数据,json,result,print,data
From: https://www.cnblogs.com/lin513/p/18095626

相关文章

  • 大数据——补充关键词
    importpandasaspdimportnltkfromnltk.tokenizeimportword_tokenizefromnltk.corpusimportstopwordsfromnltk.stemimportPorterStemmerfromnltk.probabilityimportFreqDist#下载停用词列表(如果未下载的话)nltk.download('stopwords')df=pd.read_csv(&......
  • 数据库 char 与 varchar 的区别
     数据库内的char和varchar都是用于存储字符串数据类型的。两者主要区别是存储方式和存储情况:1)固定长度和可变长度char是固定长度的数据字符串类型,需指存储的字符长度;不论存储的字符长度是否达到了这个长度,都会占据指定存储的字符空间;例:定义一个char为10,......
  • 生信小白菜之GEO芯片数据分析流程--附画图代码
    title:“GEOdataanalysis”author:“yuluyang”date:“2024-03-22”生信技能树数据挖掘课程笔记~小洁老师授课主要内容:数据分组的内容关键词的分组和多分组比较idmap报错的原因及解决方法基因组的注释流程数据的行列互换及方差数值画图示例代码示例数据libr......
  • HashMap---数据结构
    目录一、基本数据结构二、树化与退化三、索引计算四、put方法和扩容五、并发问题六、key的设计一、基本数据结构        在jdk1.7版本的时候,hashmap结构主要是使用数组+链表的格式,而在jdk1.8版本中,hashmap的数据结构增加了一种“红黑树”的结构,即数组+(......
  • 静态数据成员的应用
    classStudent{//1.数据成员privateStringname;privateStringsex;publicstaticStringschool="岳麓书院";//公布静态数据成员//2.省略构造方法;//3.省略setter和getter方法;//4.功能方法publicvoiddisplay(){......
  • 海量数据处理项目-阿里编码规范里面Manager分层介绍和开发规范说明
    ......
  • MySQL 数据库的日志管理、备份与恢复
    一.数据库备份1.数据备份的重要性 备份的主要目的是灾难恢复。在生产环境中,数据的安全性至关重要。任何数据的丢失都可能产生严重的后果。造成数据丢失的原因:程序错误人为,操作错误,运算错误,磁盘故障灾难(如火灾、地震)和盗窃.容灾概念:容灾(DisasterRecovery,DR)......
  • 非关系型数据库的应用
    一、SQL的优缺点1,SQL的优点(1)标准化模式。虽然SQL数据库的标准化模式使它们变得僵硬且难以修改,但它确实具有一些优势。添加到数据库的所有数据都必须符合众所周知的由行和列组成的链接表模式。有些人可能会发现这种局限性,但当数据一致性、完整性、安全性和合规性非常重要时,它会......
  • 038Confluence数据导出或备份
    一、从Confluence导出zip文件Server版导出步骤打开需要迁移的空间,选择空间管理,点击内容工具>导出。在导出格式中勾选HTML,点击下一个,选择普通导出。勾选需要导出的空间页面,选择完毕后点击导出。导出完毕后,点击here下载到本地 注:空间管理按键通常在页面左下......
  • C语言:自定义数据类型——结构体
    文章目录结构体类型的声明结构体的声明结构体变量的创建和初始化结构的特殊声明结构体的自引用结构体内存对齐对齐规则修改默认对齐数结构体传参结构体类型的声明结构体的声明structtag{ member-list;//成员}variable-list;//变量名例如描述一个学生str......