1.项目说明
对姓氏户籍地和工作地数据进行清洗、整合,获得姓氏的户籍城市及其经纬度,工作地城市及其经纬度。然后对数据进行分析,分析姓氏TOP20,取其中某几个姓氏分析其在全国的分布,根据户籍地与工作地的经纬度分析其奔波指数。
2.项目具体要求
1、数据清洗、整合
要求:
① 将“data01”、“data02”分别读取,并且合并成一个数据
② 结合“户籍地城市编号”及“中国城市代码对照表”数据,将城市经纬度连接进数据中
③ 分别提取“工作地”中的省、市
查看姓氏“普遍指数”,普遍指数=姓氏人口数量
要求:
① 将数据按照“姓”做统计,找到数量最多的TOP20
② 分别制作图表,查看姓氏TOP20的数量及占比
③ 选取姓氏分析在全国的分布情况,绘制密度图
查看姓氏“奔波指数”,奔波指数=姓氏人均迁徙距离。
要求:
① 根据识别的工作地,通过Geocoding查询到对应坐标
② 选择一个姓氏,计算并查看其姓氏的奔波指数,并计算该姓氏的人均通勤距离
3.实现思路:
1.数据的清洗、整合目的是获得姓氏的户籍城市及其经纬度,工作地城市及其经纬度,户籍城市及其经纬度的获取可以连接中国城市编码对照表,根据’户籍城市编号’和’行政编码’进行连接,这样就获得户籍所在地省\市\区县以及其经纬度。
工作地城市及其经纬度需要对姓氏的工作地数据使用正则表达式匹配出有效省市区地址,然后用全国省,市,区县列表循环查找是否在地址中出现,
若出现这是返回该省,市,区县名称,这里可以创建三个函数,分别用于获得省,市,区名称,使用apply()进行调用。
2.计算姓氏的人口数量,可以对清洗完成的数据根据姓氏进行分组计数,则得到每个姓氏的人数,再除以总人数则得到占比数据,
然后筛选TOP20绘制柱状图。
绘制姓氏密度图,可以使用powermap或者echarts来绘制,需要筛选出某个姓氏数据保存成excel数据,然后使用特定工具绘制
3.将筛选某个姓氏数据,将“工作地市”、“工作地区县”未识别的数据删除掉,然后将数据导出,根据工作地数据通过Geocoding查询对应坐标,
然后将数据导入到QGIS,使用插件’LinePlotter’转线,并在qgis中计算平均通勤距离,对完成转线的shapefile 文件使用在线转换工具转换成geojson格式数据,
接着使用geojson格式数据作为echarts绘图的数据绘制轨迹图。
4.实现过程:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 不发出警告
from bokeh.io import output_notebook
output_notebook()
# 导入notebook绘图模块
from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource
# 导入图表绘制、图标展示模块
# 导入ColumnDataSource模块
import os
os.chdir(r'D:\IT\python数据分析师\项目9')
#读取数据
df1 = pd.read_csv('data01.csv',encoding = "utf-8")
df2 = pd.read_csv('data02.csv',encoding = 'utf-8')
df_xzdm = pd.read_excel('中国行政代码对照表.xlsx')
df_all = pd.concat([df1,df2]) # '户籍地城市编号'数据连接
#连接“户籍地城市编号”及“中国城市代码对照表”数据,
data = pd.merge(df_all,df_xzdm,left_on ='户籍地城市编号',right_on='行政编码',how='inner')
#筛