中国姓氏排行研究
【項目09】 中國姓氏排行研究
PS:如果各位有疑問的話,可以留下微信,我看到會第一時間加的,以后可以多多交流
1、項目需求
1、數據合并及清洗
2、查看姓氏“普遍指數”,普遍指數=姓氏人口數量
3、查看姓氏“奔波指數”,奔波指數=姓氏人均遷徙距離。遷徙距離為戶籍地所在地級市與現居住地所在地級市的距離
2、實現思路
1、清洗原數據,合并數據特殊處理未識別的數據,通過城市經緯度對照表得出地區經緯度
2、找出目標數據姓氏數量對多的TOP20,通過echart查看部分姓氏分布情況及powermap查看熱力情況
3、選擇一個姓氏通過qgis制作原始數據轉換后,再通過echart制作通勤動態圖,動態輸出
3、實現步驟
1.1、導入模塊讀取數據
import pandas as pd import numpy as np import matplotlib.pyplot as plt import os import warnings warnings.filterwarnings('ignore') # 不發出警告from bokeh.io import output_fileoutput_file('項目09.html')from bokeh.plotting import figure,show# 導入圖表繪制、圖標展示模塊from bokeh.models.annotations import Spanfrom bokeh.models.annotations import BoxAnnotationfrom bokeh.layouts import gridplotfrom bokeh.models import ColumnDataSourcefrom bokeh.models import HoverToolos.chdir('C:\\Users\\Administrator\\Desktop\\項目資料\\項目09中國姓氏排行研究')df1_data1 = pd.read_csv('data01.csv',encoding = 'utf-8')df1_data2 = pd.read_csv('data02.csv',encoding = 'utf-8')df1_data3 = pd.read_excel('中國行政代碼對照表.xlsx',sheetname = 0)1.2、清洗數據合并數據
df1_data3['行政編碼'] = df1_data3['行政編碼'].values.astype(np.object) df1_data3.columns = ['行政編碼','戶籍所在地_省','戶籍所在地_市','戶籍所在地_區/縣','戶籍所在地_lng','戶籍所在地_lat'] df = pd.concat([df1_data1,df1_data2]) df1 = pd.merge(df,df1_data3,left_on = '戶籍地城市編號',right_on = '行政編碼') df1['省'] = df1['工作地'].str.split('省').str[0] df1['市'] = df1['工作地'].str.split('省').str[1].str.split('市').str[0] df1['市'][df1['省'].str.len()>5] = df1['省'].str.split('市').str[0] df1['區縣'] = '' df1['區縣'][(df1['工作地'].str.contains('區'))&(df1['市'].str.len()>5)] = df1['市'].str.split('區').str[0] + '區' df1['區縣'][(df1['工作地'].str.contains('區'))&(df1['市'].str.len()<5)] = df1['工作地'].str.split('市').str[1].str.split('區').str[0] + '區' df1['區縣'][(df1['工作地'].str.contains('縣'))&(df1['市'].str.len()>5)] = df1['市'].str.split('縣').str[0] + '縣' df1['區縣'][(df1['工作地'].str.contains('縣'))&(df1['市'].str.len()<5)] = df1['工作地'].str.split('市').str[1].str.split('縣').str[0] + '縣' df1['區縣'][(df1['區縣'].str.len()>5) | (df1['區縣'].str.len()<2)] = '未識別' df1['市'][df1['市'].str.len()>5] = '未識別' df1['省'][df1['省'].str.len()>5] = '未識別' df1 = df1[['姓', '工作地','戶籍所在地_省', '戶籍所在地_市', '戶籍所在地_區/縣','戶籍所在地_lng', '戶籍所在地_lat', '省', '市', '區縣']] df1.columns = ['姓', '工作地','戶籍所在地_省', '戶籍所在地_市', '戶籍所在地_區縣','戶籍所在地_lng', '戶籍所在地_lat', '工作地點_省', '工作地_市', '工作地點_區縣']2.1、導出王姓和姬姓數據為excel文件
df1_wang1 = df1[df1['姓'] == '王'] writer = pd.ExcelWriter('C:\\Users\\Administrator\\Desktop\\項目09中國姓氏排行研究\\wang1.xlsx') df1_wang1.to_excel(writer,'sheet',index = False) writer.save()df1_wang2 = df1_wang1.groupby(['姓','戶籍所在地_lng', '戶籍所在地_lat'])['戶籍所在地_市'].count() df1_wang2 = df1_wang2.reset_index() writer = pd.ExcelWriter('C:\\Users\\Administrator\\Desktop\\項目09中國姓氏排行研究\\wang2.xlsx') df1_wang2.to_excel(writer,'sheet',index = False) writer.save()df1_ji1 = df1[df1['姓'] == '姬'] writer = pd.ExcelWriter('C:\\Users\\Administrator\\Desktop\\項目09中國姓氏排行研究\\ji1.xlsx') df1_ji1.to_excel(writer,'sheet',index = False) writer.save() df1_ji2 = df1_ji1.groupby(['姓','戶籍所在地_lng', '戶籍所在地_lat'])['戶籍所在地_市'].count() df1_ji2 = df1_ji2.reset_index() writer = pd.ExcelWriter('C:\\Users\\Administrator\\Desktop\\項目09中國姓氏排行研究\\ji2.xlsx') df1_ji2.to_excel(writer,'sheet',index = False) writer.save()2.2、通過powermap及echart繪制熱力分布圖和柱狀分布圖
姬姓熱力分布
姬姓柱狀分布
王姓熱力分布
王姓柱狀分布
2.3、篩選姓氏排名TOP20數據
2.4、繪制姓氏top20聯動圖標,包括省份人口占比及人口數量
name = df1_top20.index.tolist() source1 = ColumnDataSource(data = df1_top20)hover1 = HoverTool(tooltips=[("姓氏", "@xs"),("姓氏計數", "@xssl")]) p1 = figure(plot_width = 800,plot_height = 300,x_range = name,title = '姓氏數量排行TOP20',tools=[hover1,'box_select,reset,xwheel_zoom,pan,crosshair']) p1.vbar(x = 'xs',bottom = 0,top = 'xssl',width = 0.9,source = source1,color = 'red',line_color = 'white',alpha = 0.8) p1.ygrid.grid_line_dash = [4,6] p1.xgrid.grid_line_dash = [4,6]hover2 = HoverTool(tooltips=[("姓氏", "@xs"),("姓氏計數", "@xszb")]) p2 = figure(plot_width = 800,plot_height = 300,x_range = p1.x_range,title = '姓氏占比排行TOP20',tools=[hover2,'box_select,reset,xwheel_zoom,pan,crosshair']) p2.vbar(x = 'xs',bottom = 0,top = 'xszb',width = 0.9,source = source1,color = 'green',line_color = 'white',alpha = 0.8) p2.ygrid.grid_line_dash = [4,6] p2.xgrid.grid_line_dash = [4,6]p = gridplot([p1],[p2]) show(p)3.1、導出方姓通勤數據
df2_fang = df1[df1['姓'] == '方'] df2_fang = df2_fang[df2_fang['工作地_市'] !='未識別'] df2_fang = df2_fang[df2_fang['工作地點_區縣'] !='未識別'] df2_fang = df2_fang[['姓','戶籍所在地_市','戶籍所在地_區縣','戶籍所在地_lng','戶籍所在地_lat','工作地_市','工作地點_區縣']] df2_fang = df2_fang[df2_fang['戶籍所在地_區縣']!=df2_fang['工作地點_區縣']] df2_fang.columns = ['x','hj_s','hj_qx','hj_lng','hj_lat','gz_s','gz_qx'] df2_fang = df2_fang[df2_fang['hj_lng']>0] df2_fangc = df2_fang.groupby(['hj_s','hj_qx','hj_lng','hj_lat','gz_s','gz_qx']).count() df2_fangc = df2_fangc.reset_index() writer = pd.ExcelWriter('C:\\Users\\Administrator\\Desktop\\項目09中國姓氏排行研究\\fang.xlsx') df2_fangc.to_excel(writer,'sheet',index = False) writer.save()3.2、通過qgis繪制兩點間直線距離,計算通勤距離為value,通過echart繪制通勤動態圖
總結
- 上一篇: DNS毒化攻击及防御
- 下一篇: cad插件_CAD插件燕秀工具箱安装教程