Search

Travel Tips

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lifestyle

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Hotel Review

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Python数据分析实战——中国姓氏排行研究二

Python数据分析实战——中国姓氏排行研究二

中国姓氏排行研究



查看姓氏“普遍指数”,普遍指数=姓氏人口数量

查看姓氏“奔波指数”,奔波指数=姓氏人均迁徙距离。迁徙距离为户籍地所在地级市与现居住地所在地级市的距离。


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
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模块

'''

查看姓氏“普遍指数”,普遍指数=姓氏人口数量

要求:
① 将数据按照“姓”做统计,找到数量最多的TOP20
② 分别制作图表,查看姓氏TOP20的数量及占比
   * 建议用bokeh出柱状图,并且为联动图表
③ 查看“王”姓的全国分布
   * 这里导出excel高版本文件,用powermap查看,绘制密度图
   * 同时可以尝试用echarts绘制空间柱状图来查看
④ 查看“姬”姓的全国分布
   * 这里导出excel高版本文件,用powermap查看,绘制密度图
   * 同时可以尝试用echarts绘制空间柱状图来查看
提示:
① bokeh中绘制联动图表时用gridplot
② powermap需要office2016的excel才会有,并且必须存储xlsx格式
③ powermap中需要通过在“值”中设置“姓的计数”才能正确显示热力图
④ powermap中可以通过“主题”来调节配色风格 / “平面地图”选项来调整球面可视化或者平面可视化
⑤ echarts绘制图表之前,需要对数据按照“lng”(或者“lat”)汇总,得到同一个地点的该姓氏人数,然后绘图
⑥ ecahrts通过设置以下参数来达到效果:视角远近、点柱大小



# 将数据按照“姓”做统计,找到数量最多的TOP10
name_count = df['姓'].value_counts()[:20]
result1_01 = pd.DataFrame({'count':name_count, 'count_pre':name_count/name_count.sum()})
# 筛选top20的姓氏,计数并计算占比
result1_01

image.png

# bokeh出联动柱状图


from bokeh.models import HoverTool
from bokeh.layouts import gridplot
# 导入模块
name_lst = result1_01.index.tolist()
source = ColumnDataSource(result1_01)
# 创建ColumnDataSource数据
hover1 = HoverTool(tooltips=[("姓氏计数", "@count")])  # 设置标签显示内容
result1 = figure(plot_width=800, plot_height=250,x_range = name_lst,
                 title="中国姓氏TOP20 - 计数" ,
                 tools=[hover1,'reset,xwheel_zoom,pan'])   # 构建绘图空间
result1.vbar(x='index', top='count', source=source,width=0.9, alpha = 0.7,color = 'red')   
result1.ygrid.grid_line_dash = [6, 4]
result1.xgrid.grid_line_dash = [6, 4]
# 柱状图1
hover2 = HoverTool(tooltips=[("姓氏占比", "@count_pre")])  # 设置标签显示内容
result2 = figure(plot_width=800, plot_height=250,x_range = result1.x_range,
                 title="中国姓氏TOP20 - 占比" ,
                 tools=[hover2,'reset,xwheel_zoom,pan']) 
result2.vbar(x='index', top='count_pre', source=source,width=0.9, alpha = 0.7,color = 'green')   
result2.ygrid.grid_line_dash = [6, 4]
result2.xgrid.grid_line_dash = [6, 4]
# 柱状图2
p = gridplot([[result1], [result2]])
# 组合图表
show(p)

image.png

# 查看“王”姓的全国分布


data_wang1 = df[df['姓'] == '王']
writer = pd.ExcelWriter('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习05_中国姓氏排行研究/wang1.xlsx')
data_wang1.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据1
data_wang2 = data_wang1.groupby(['姓','户籍所在地_lng','户籍所在地_lat'])['户籍所在地_市'].count()
data_wang2 = data_wang2.reset_index()
writer = pd.ExcelWriter('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习05_中国姓氏排行研究/wang2.xlsx')
data_wang2.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据2
print('导出完成!')
# 结论 → 老王们无处不在啊!

image.png


# 查看“姬”姓的全国分布


data_ji1 = df[df['姓'] == '姬']
writer = pd.ExcelWriter('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习05_中国姓氏排行研究/ji1.xlsx')
data_ji1.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据1
data_ji2 = data_ji1.groupby(['姓','户籍所在地_lng','户籍所在地_lat'])['户籍所在地_市'].count()
data_ji2 = data_ji2.reset_index()
writer = pd.ExcelWriter('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习05_中国姓氏排行研究/ji2.xlsx')
data_ji2.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据2
print('导出完成!')
# 结论 → “姬”传说是黄帝之姓、周朝国姓,并且是10大姓中7个姓的起源
# 千年过去,姬姓后嗣多已改为他姓,开枝散叶。而还保留着这个古老姓氏的人口,也仍然栖息在古老中华文明的发源地——河南。

image.png

'''

查看姓氏“奔波指数”,奔波指数=姓氏人均迁徙距离。迁徙距离为户籍地所在地级市与现居住地所在地级市的距离。

要求:

① 根据识别的工作地,通过Geocoding查询到对应坐标

② 选择一个姓氏,计算并查看其姓氏的奔波指数,并计算该姓氏的人均通勤距离

   * 在python中筛选数据之后,qgis内做空间分析

③ 按照起点和终点做计数,汇总同一个迁徙路径的数据

④ 通过echart制作通勤OD图

   * 可以将生成的line文件导出geojson,用空间线性轨迹图来表示

   * 这里线的valye为该迁徙路径的汇总计数   

提示:

① 可以筛选一些好玩的姓氏:汤、朴、廉、何、叶、冉等等 

② 需要对数据的工作地进行筛选,其中“工作地_市”、“工作地_区县”未识别的数据删除掉

③ 导出数据时,尽量columns名用全英文,避免qgis中出现乱码

④ 计算人均通勤距离的时候,需要删除掉户籍地与工作地相同的人(未迁移的人)

⑤ 在官网metrodata.cn的小工具中找到geocoding

⑥ qgis中需要安装插件“LinePlotter”来转线,并在qgis中计算平均通勤距离(需要投影,投影经度带可选48)

⑦ shapefile转geojson时,注意shapefile文件要投影回wgs84地理坐标系




# 计算并查看“朴”姓氏的奔波指数


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('/home/zty/Documents/python/Python进阶数据分析及可视化/实战/练习05_中国姓氏排行研究/tang.xlsx')
data_tang.to_excel(writer,'sheet1',index=False)
writer.save()
# 导出数据
print('数据条数为%i条' % len(data_tang))
data_tang.head(10)

image.png


数据文件链接:链接: https://pan.baidu.com/s/1DwgbgCjENL5d3M2U0pHEmA  密码: t6b2

这是一个简介
    互联网冲浪金牌选手。赖床世锦赛纪录保持者,拖延俱乐部顶级VIP,夜宵外卖一级鉴赏师,国家脱单脱贫重点扶持对象,中央戏精学院优秀学生,亚洲酸柠檬推广大使,国家一级退堂鼓表演艺术家。
评论 (125)
评论

我是 s enim interduante quis metus. Duis porta ornare nulla ut bibendum

Rosie

6 minutes ago

Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor

Agatha Christie

December 4, 2020 at 3:12 pm

Sed ac lorem felis. Ut in odio lorem. Quisque magna dui, maximus ut commodo sed, vestibulum ac nibh. Aenean a tortor in sem tempus auctor

Steven

December 4, 2020 at 3:12 pm

Donec in ullamcorper quam. Aenean vel nibh eu magna gravida fermentum. Praesent eget nisi pulvinar, sollicitudin eros vitae, tristique odio.

Danielle Steel

December 4, 2020 at 3:12 pm