1.数据来源:感谢知乎乎友倾情提供。(两百多万条)

2.工具:spyder+excel+qgis

第一步数清洗:

我们有两个excel文件,转成csv,用panda的read_csv()函数读取,利用concat函数将二者按照列合并。还有一个行政代码对照表。

df1=pd.read_csv('data01.csv',encoding='utf-8')
df2=pd.read_csv('data02.csv',encoding='utf-8')
df_city=pd.read_excel('中国行政代码对照表.xlsx')
df=pd.concat([df1,df2])
df=pd.merge(df,df_city,left_on='户籍地城市编号',right_on = '行政编码')
df['工作地']=df['工作地'].str[:20]

随后,利用data里面的户籍地城市编号和中国城市代码对照表(城市编号依据区县不同而不同,目的是为了得到经纬度),将城市经纬度连接进数据中。接下来比较麻烦的地方就是分别提取提取“工作地”中的省、市和区县。这里因为有些工作地中没有省或者市的信息,所以在具体处理的时候需要分情况。

df['工作地_省'] = df['工作地'].str.split('省').str[0]
#识别省
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)] = '未识别'
# 标记未识别单元格

解释一下这里的基本处理的逻辑:首先提取省份信息。提取的结果是有省份的信息提取出来了,没有省份信息的全部保留到省份列了。这就导致后面提取市的信息的时候有两种情况。一种是省提取成功的则对str[1]进提取,一种是省份没有提取成功的要对省列进行提取。对区县的提取也是类似的思路。

完成预处理之后,我想先来了解一下,这个top10姓氏是不是如百家姓所言(赵钱孙李,周吴郑王)。对各个姓氏进行count。得到人数和占比的柱状图。

然后是谭姓分布热力图。

看来谭姓分布还是较为广泛的,川渝地区还是挺多的。老王不同的主要分布地区就集中到了沿海地区,和谭姓氏的主要分布地区有明显的不同,但是也基本上是到处都是了。

可以变换一下,空间柱状图,这个空间柱状图不是很美观,后面可以再弄的更好看一点。

我们还可以利用已有工作地和出生地来了解一下姓氏迁移的动态情况。处理起来稍微有点麻烦。因为我们要根据工作地查询到对应的经纬度。我们换一个姓氏,比如汤。多个g

首先我们要把氏数据分隔出来,去掉哪些没有被识别出来的行数据,保存成excel文件。这里要注意需要把列名变成英文的,目的是方便后面继续处理,防止出现一些莫名其妙的乱码。

data_tang = df[['姓','户籍所在地_lng','户籍所在地_lat','工作地_市','工作地_区县']][df['姓'] == '汤']
data_tang = data_tang[data_tang['工作地_市'] != '未识别']
data_tang = data_tang[data_tang['工作地_区县'] != '未识别']
data_tang.columns = ['familyname','birth_lng','birth_lat','work_city','work_district']writer = pd.ExcelWriter('C:\\Users\\Atan\\Desktop\\practice\\tang.xlsx')
data_tang.to_excel(writer,'sheet1',index=False)
writer.save()

然后比较麻烦的地方就来了,要根据工作地址得到对应的经纬度。这里推荐一个小工具geocoding,可以方便的得到经纬度。

最后我们将数据汇总得到两个经纬度,并转成csv格式。

然后就要做空间分析了,我用的QGIS软件。当然也可以用别的。

两次加载保存的csv格式数据并分别保存成对应的图层信息。利用插件得到连线图。稍微调整一下颜色,最后结果如下。

关于姓氏的一些全国分布情况的统计与分析相关推荐

  1. python计算卡方分布_如何用Python计算上证指数的涨跌幅分布情况?

    话不多说先上代码,这个分布情况指的就是分析一下涨跌幅在每个百分比阶段各有多少天,例如0%-1%有多少天,1%-2%有多少天: import os#缓存数据class SecurityData: cou ...

  2. 磊科路由器后门蜜罐捕获的事件分布情况

    重点物联网 漏洞利用情况本节我们选取了两个漏洞进行分析.UPnP 相关的漏洞我们将在 4.4.3 进行分析,除去 UPnP 相关漏 洞外,被利用最多的是 Eir D1000 路由器的一个漏洞 [44] ...

  3. 用Python展示全国高校的分布情况

    本文用Python展示了全国高校的分布情况,全国的高校哪些地方多,哪些地方少,可以一目了然地看到. 数据获取 要展示高校的分布情况,就得先获取全国高校的位置数据.本文的数据来源于掌上高考网(https ...

  4. 最新·前端的工资分布情况 - 你拖后腿了吗?

    要说我们工作最关心的东西肯定少不了这两个方向: 我们前端开发的工资分布情况 技术更新的风向 今天我就和大家分享小生最近收集的一些数据. 关于行业的平均薪资水平我们一定不要拿一些特例当成范例.最能反应行 ...

  5. 深度调研车路协同智慧高速全国建设情况(下)

    | 文章版权所有,未经授权请勿转载或使用  导语  继微信公众号"5G行业应用"的<智能网联(车联网)示范区发展现状分析--华东篇(上)>.<智能网联(车联网)示 ...

  6. 深度调研车路协同智慧高速全国建设情况(中)

    | 文章版权所有,未经授权请勿转载或使用   导语   今年2月,国家11部委出台<智能汽车创新发展战略>,为车联网产业高速发展指明了方向.在智能网联汽车与汽车电子产业获得重大利好的同时, ...

  7. 数据中心分布情况和业务占比分析

    我国数据中心的市场规模高速增长.受"互联网+".大数据战略.数字经济等国家政策的指引,以及云计算.移动互联网.物联网.大数据.人工智能等快速发展的驱动,我国数据中心的业务收入呈现连 ...

  8. 焦作的计算机三级考试考点,3月河南计算机等级考试考点分布情况

    摘要: 3月河南计算机等级考试考点分布情况为你介绍河南计算机等级考试时间为2020年3月28日-30日,为了方便河南考生.下面是小编整理的2020年3月河南计算机等级考试报... 河南计算机等级考试时 ...

  9. linux 进程内存分布,linux C++ 的内存分布情况

    写了一段代码,验证了一下内存的分布情况: #include using namespace std; int k = 300; static int global_static = 0; const ...

最新文章

  1. 下面关于“栈”的描述,正确的是( )
  2. 第三届蓝桥杯预赛c++b组
  3. 涨知识 | 100个中国最难读的地名,第一个就折了
  4. 如何 给给软件开发 添加 代理_敏捷开发是如何被跑偏的
  5. mysql5.7 glibcxx_3.4.15_CentOS6.5 缺少 libstdc++.so.6(GLIBCXX_3.4.15)
  6. java引用传递_理解Java中的引用传递和值传递
  7. 附加一个:为什么要用简单工厂模式
  8. 21.1-21.4 memcached介绍,安装使用,状态查看
  9. Linux mv命令
  10. NASA无人机障碍赛:专业选手Vs.人工智能,赌一赌谁赢?
  11. 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
  12. Android ToggleButton(状态切换按钮)
  13. 浅谈一下workstation
  14. 电子邮件的收件人、抄送、密送
  15. GStreamer修改解码器默认优先级
  16. 亚商投资顾问 早餐FM/0407融资余额创新高
  17. 会计科目类词汇(中英)
  18. 最全的硬盘问题及修复方法
  19. 测试用例之性能测试用例
  20. Matlab使用-meshgrid函数(网格矩阵)

热门文章

  1. 5G 核心网 Inter NG-RAN node N2 based handover 信令流程
  2. Android给Activity取消title标题
  3. 论文阅读《Semantic Relation Reasoning for Shot-Stable Few-Shot Object Detection》
  4. 苹果笔记本什么系统_苹果笔记本领域双系统
  5. @Resource和@Autowired的区别
  6. C++ 检索 IP地址
  7. 视频在H5页面在微信浏览器不能自动播放问题
  8. python语法速记, Python 3 Cheat Sheet
  9. 27岁从业软件测试5年的我被无情的辞退了
  10. tx2 can通信之开机自动加载can模块