中国姓氏排行研究
【項目09】 中國姓氏排行研究
PS:如果各位有疑問的話,可以留下微信,我看到會第一時間加的,以后可以多多交流
1、項目需求
1、數(shù)據(jù)合并及清洗
2、查看姓氏“普遍指數(shù)”,普遍指數(shù)=姓氏人口數(shù)量
3、查看姓氏“奔波指數(shù)”,奔波指數(shù)=姓氏人均遷徙距離。遷徙距離為戶籍地所在地級市與現(xiàn)居住地所在地級市的距離
2、實現(xiàn)思路
1、清洗原數(shù)據(jù),合并數(shù)據(jù)特殊處理未識別的數(shù)據(jù),通過城市經(jīng)緯度對照表得出地區(qū)經(jīng)緯度
2、找出目標數(shù)據(jù)姓氏數(shù)量對多的TOP20,通過echart查看部分姓氏分布情況及powermap查看熱力情況
3、選擇一個姓氏通過qgis制作原始數(shù)據(jù)轉(zhuǎn)換后,再通過echart制作通勤動態(tài)圖,動態(tài)輸出
3、實現(xiàn)步驟
1.1、導入模塊讀取數(shù)據(jù)
import pandas as pd import numpy as np import matplotlib.pyplot as plt import os import warnings warnings.filterwarnings('ignore') # 不發(fā)出警告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、清洗數(shù)據(jù)合并數(shù)據(jù)
df1_data3['行政編碼'] = df1_data3['行政編碼'].values.astype(np.object) df1_data3.columns = ['行政編碼','戶籍所在地_省','戶籍所在地_市','戶籍所在地_區(qū)/縣','戶籍所在地_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['區(qū)縣'] = '' df1['區(qū)縣'][(df1['工作地'].str.contains('區(qū)'))&(df1['市'].str.len()>5)] = df1['市'].str.split('區(qū)').str[0] + '區(qū)' df1['區(qū)縣'][(df1['工作地'].str.contains('區(qū)'))&(df1['市'].str.len()<5)] = df1['工作地'].str.split('市').str[1].str.split('區(qū)').str[0] + '區(qū)' df1['區(qū)縣'][(df1['工作地'].str.contains('縣'))&(df1['市'].str.len()>5)] = df1['市'].str.split('縣').str[0] + '縣' df1['區(qū)縣'][(df1['工作地'].str.contains('縣'))&(df1['市'].str.len()<5)] = df1['工作地'].str.split('市').str[1].str.split('縣').str[0] + '縣' df1['區(qū)縣'][(df1['區(qū)縣'].str.len()>5) | (df1['區(qū)縣'].str.len()<2)] = '未識別' df1['市'][df1['市'].str.len()>5] = '未識別' df1['省'][df1['省'].str.len()>5] = '未識別' df1 = df1[['姓', '工作地','戶籍所在地_省', '戶籍所在地_市', '戶籍所在地_區(qū)/縣','戶籍所在地_lng', '戶籍所在地_lat', '省', '市', '區(qū)縣']] df1.columns = ['姓', '工作地','戶籍所在地_省', '戶籍所在地_市', '戶籍所在地_區(qū)縣','戶籍所在地_lng', '戶籍所在地_lat', '工作地點_省', '工作地_市', '工作地點_區(qū)縣']2.1、導出王姓和姬姓數(shù)據(jù)為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數(shù)據(jù)
2.4、繪制姓氏top20聯(lián)動圖標,包括省份人口占比及人口數(shù)量
name = df1_top20.index.tolist() source1 = ColumnDataSource(data = df1_top20)hover1 = HoverTool(tooltips=[("姓氏", "@xs"),("姓氏計數(shù)", "@xssl")]) p1 = figure(plot_width = 800,plot_height = 300,x_range = name,title = '姓氏數(shù)量排行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"),("姓氏計數(shù)", "@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、導出方姓通勤數(shù)據(jù)
df2_fang = df1[df1['姓'] == '方'] df2_fang = df2_fang[df2_fang['工作地_市'] !='未識別'] df2_fang = df2_fang[df2_fang['工作地點_區(qū)縣'] !='未識別'] df2_fang = df2_fang[['姓','戶籍所在地_市','戶籍所在地_區(qū)縣','戶籍所在地_lng','戶籍所在地_lat','工作地_市','工作地點_區(qū)縣']] df2_fang = df2_fang[df2_fang['戶籍所在地_區(qū)縣']!=df2_fang['工作地點_區(qū)縣']] 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繪制通勤動態(tài)圖
總結
- 上一篇: DNS毒化攻击及防御
- 下一篇: cad插件_CAD插件燕秀工具箱安装教程