文章目录

  • 项目背景
  • 项目代码
    • 新增省份编码
    • 获取编码映射数据
    • 合并数据
    • 统计省份用户数
  • 使用SQL实现
  • 源码地址

本文可以学习到以下内容:

  1. 免费获取全国省份、城市编码以及经纬度数
  2. 使用 pandas 中的 read_sql 读取 sqlite 中的数据
  3. 使用 pandas 中的 merge 方法合并数据
  4. 使用 groupgy+sort_values 方法实现统计各省人数并降序排列

关注微信公众号《帅帅的Python》,后台回复《数据分析》获取数据及源码

项目背景

“小凡,数据库users表中有客户的资料,我需要你统计一下各省份的客户数量发给我”,经理在早会上给每个人布置任务时说道。

“收到”,小凡一边记录着一边回答到。

早会结束后,小凡接杯热水,回到工位上,打开dataworks、jupyter、datav、quickbi等工具,开始了新一天的工作…

为什么没有省份的数据呢?小凡看着要统计的数据,满脸疑问。

本来以为是简单的统计数据任务,没想到 users 表中只有城市编码数据,没有省份编码,也没有对应的省份中文名。小凡心中顿时有种不祥的预感,在钉钉上联系数据库运维人员询问情况。

运维同学说,当初在设计表的时候没有考虑到省份,所以数据库没有省份字段,让小凡自己想想办法。

小凡也很无奈,现在急切需要找到一份省份编码映射表,逛了各大论坛,找了各种博客网站,问了许多技术朋友

终于在高德地图网站上找到了需要的数据资源:

  • 数据已经写入 data.db 数据库中的 adcode_lng_lat 表中
  • Excel 文件《省市adcode与经纬度映射表.xlsx》存放在文件夹【数据加工厂】中

剩下的就交给代码吧!

项目代码

小凡常用的数据分析工具:

import os
import datetime
import numpy as np
import pandas as pd
from sqlalchemy import create_engine

数据放在上一级的目录下名为 data.db 的文件

# 数据库地址:数据库放在上一级目录下
db_path = os.path.join(os.path.dirname(os.getcwd()), "data.db")
engine_path = "sqlite:///" + db_path
# 创建数据库引擎
engine = create_engine(engine_path)sql = """
select * from users
"""
df = pd.read_sql(sql, engine)

用 pandas 的 head() 方法查看前5条数据:

df.head()

新增省份编码

adcode 是城市编码,用前2位加上0000就是省份编码,比如:431081对应的省份编码是430000。

在df后面新增一列省份编码:

df = df.astype(str)
df["province_adcode"] = df["adcode"].map(lambda x:x[:2]+"0000")

获取编码映射数据

sql = """
select * from adcode_lng_lat
"""adcode_lng_lat_df = pd.read_sql(sql, engine)

合并数据

result_df = pd.merge(df,adcode_lng_lat_df[["adcode","name"]].astype(str),left_on="province_adcode",right_on="adcode",how="left")

用pandas 中的 sample() 方法随机查看10条数据:

result_df.sample(10)

统计省份用户数

使用 groupgy+sort_values 方法实现统计各省人数并降序排列,代码如下:

province_count_df = result_df.groupby(by="name").agg({"user_id":"count"}
).sort_values(by="user_id",ascending=False).reset_index()

用 pandas 的 head() 方法查看前5条数据:

province_count_df.head()

使用SQL实现

  • sqlite3 的字符串拼接用"||"符号实现
  • sqlite3 字符串切割用 SUBSTRING(字符串,开始位置,结束位置)
selectb.name,count(a.user_id) as users_num
from
(selectuser_id,username,adcode,SUBSTRING(adcode, 1, 2) || '0000' as province_codefromusers
) as a
left join
(selectadcode as province_code,nameFROMadcode_lng_lat
) as b on a.province_code = b.province_code
group by b.name
order by count(a.user_id) desc
;

源码地址

链接:https://pan.baidu.com/s/1ldj51uKEPjpXmAz3XgHiLg?pwd=cj2v
提取码:cj2v

Python数据分析实战【九】:用Python处理省份城市编码数据【文末源码地址】相关推荐

  1. Python数据分析实战【六】:用Python实现自动发送邮件和发送钉钉消息【文末源码地址】

    目录 发送邮件源码 发送钉钉消息源码 源码地址 本文可以学习到以下内容: 使用requests库发送钉钉消息 使用email和smtplib库发送邮件 使用163邮箱服务,自动发送邮件及附件 发送邮件 ...

  2. 用Python给娃送上一份猪年春节礼物。文末源码!

    随着农历猪年的到来,Pig的卡通形象以火爆的热度迅速成为大家心中的新一任萌宠,尤其是深受小朋友喜欢的小猪佩奇,作为一枚关心热点又家有小娃的非典型程序猿小编,也来蹭蹭热点,让我们用Python来送给娃一 ...

  3. Python数据分析实战【十二】:机器学习决策树算法案例实战【文末源码地址】

    文章目录 构造数据 决策树解决 报错解决 源码地址 构造数据 我们用pandas生成20条数据,其中标签为bad的数据有6条,标签为good的数据有14条,代码如下: import pandas as ...

  4. Python数据分析实战【七】:用Python实现对Excel文件中的数据进行md5加密【文末源码地址】

    文章目录 获取数据 加密函数 数据加密 结尾 源码地址 本文可以学习到以下内容: 使用 pandas 中的 to_excel 生成 excel 数据 使用 pandas 中的 read_excel 读 ...

  5. “数字炸弹“——练习Python基础知识的小游戏【文末源码地址】

    文章目录 数字"炸弹" 基本代码 核心代码 源码地址 数字"炸弹" 数字炸弹小游戏,平时可以多个人一块玩.游戏规则也很简单:从0~100之间选一个数字,作为&q ...

  6. java计算机毕业设计数据分析星辰网智能手机销售网站MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计数据分析星辰网智能手机销售网站MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计数据分析星辰网智能手机销售网站MyBatis+系统+LW文档+源码+调试部署 ...

  7. python爬虫源码项目_32个Python爬虫实战项目,满足你的项目慌(带源码)

    写在前面 学习Python爬虫的小伙伴想成为爬虫行业的大牛么? 你想在网页上爬取你想要的数据不费吹灰之力么? 那么亲爱的小伙伴们肯定需要项目实战去磨练自己的技术,毕竟没有谁能随随便便成功! 小编前段时 ...

  8. 32个Python爬虫实战项目,满足你的项目慌(带源码)

    学习Python爬虫的小伙伴想成为爬虫行业的大牛么? 你想在网页上爬取你想要的数据不费吹灰之力么? 那么亲爱的小伙伴们肯定需要项目实战去磨练自己的技术,毕竟没有谁能随随便便成功! 小编前段时间精心总结 ...

  9. 35. 实战:Python实现视频去水印(文末源码)

    目录 前言 目的 思路 代码实现 1. 请求URL,查看源代码 2. 源代码中没有就去抓包工具 3. 拿到视频源链接,继续检索来源 4. 拿到数据和链接,二进制写入到本地 完整源码 运行效果 总结 前 ...

最新文章

  1. RYU控制器的学习笔记(二)
  2. URLEncoder和URLDecoder(乱码处理)
  3. 刚发现的,免费领取1024G云空间
  4. DataSourceUtils(使用C3P0连接池的工具类)
  5. JZOJ 5677. 【GDOI2018Day2模拟4.21】纽约
  6. pandas:数据类型的转换
  7. 系统仿真平台SkyEye可替代国外Matlab/Sumlink等同类软件
  8. 十四.激光和惯导LIO-SLAM框架学习之惯导内参标定
  9. java subset_Java TreeSet subSet()方法
  10. python函数使用说明
  11. Eclipse3.2安装简介
  12. Altium Designer(3)-绘制PCB封装库
  13. 坐标转换c语言,坐标转换代码实现及详细讲解
  14. 开发时几种常见的建模工具
  15. 哔哩哔哩2020校招原题 - 复数乘法
  16. 常用HTML技术 淘宝店铺装修
  17. 分类任务如何用逻辑回归实现_【机器学习面试总结】—— LR(逻辑回归)
  18. Linux——详解共享内存shared memory
  19. 知识累积——这些年写过的博文(博客目录索引)
  20. tf2加载图片数据集并训练

热门文章

  1. a股量化交易接口策略——阿隆指标
  2. 活动报名小程序版 在线报名小程序,报名、签到、活动收集一气呵成
  3. Axure:实现写评论功能
  4. 【操作系统】知识点集合(幕布,思维导图)
  5. 基于Docker离线部署Jitsi-Meet实践(一)
  6. js区分手机端和PC端
  7. 在项目中使用 Discuz!NT的上传头像功能
  8. _IO,_IOR,_IOW和_IORW的含义
  9. STM32嵌入式FLASH擦除与写入
  10. 计算机病毒的格式是什么样的,文件病毒的格式是什么