中國姓氏研究

中國姓氏數(shù)量眾多酥泛,歷史源遠(yuǎn)流長杨幼。中華民族歷史上的姓氏歷來有百家姓之說,常云:“趙錢孫李恢口、周吳鄭王孝宗、馮陳褚衛(wèi)、蔣沈韓楊”耕肩,中國人見于文獻(xiàn)的姓氏有5662個(gè)因妇,其中單姓3484個(gè),復(fù)姓2032個(gè)猿诸,三字姓146個(gè)婚被。(沒想到吧,單姓數(shù)目只約占6成)

百家姓

今天两芳,我們來好好研究一下各姓氏人群的分布情況摔寨。

一、哪個(gè)姓氏人數(shù)最多怖辆?

1.1 清洗數(shù)據(jù)

  • 首先導(dǎo)入數(shù)據(jù)文件是复,并對數(shù)據(jù)進(jìn)行合并
"""
導(dǎo)入所需函數(shù)庫
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

import warnings
warnings.filterwarnings('ignore') 
# 不發(fā)出警告

from bokeh.io import output_notebook
output_notebook()
# 導(dǎo)入notebook繪圖模塊

from bokeh.plotting import figure,show
from bokeh.models import ColumnDataSource
# 導(dǎo)入圖表繪制、圖標(biāo)展示模塊
# 導(dǎo)入ColumnDataSource模塊


"""
清洗數(shù)據(jù)
"""
import os
os.chdir('E:\\數(shù)據(jù)分析\\項(xiàng)目09中國姓氏排行研究')
# 創(chuàng)建工作路徑

df01 = pd.read_csv('data01.csv',encoding = 'utf-8')
df02 = pd.read_csv('data02.csv',encoding = 'utf-8')
df_city = pd.read_excel('中國行政代碼對照表.xlsx')
# 讀取數(shù)據(jù)

df = pd.concat([df01,df02])

df['戶籍地城市編號'] = pd.to_numeric(df['戶籍地城市編號'] , errors='coerce')
# 使用to_numeric轉(zhuǎn)為數(shù)值竖螃。默認(rèn)情況下淑廊,它不能處理字母型的字符串'pandas'√嘏兀可以將無效值強(qiáng)制轉(zhuǎn)換為NaN

df = pd.merge(df,df_city,left_on='戶籍地城市編號',right_on = '行政編碼')  
df['工作地'] = df['工作地'].str[:15]   # 只提取工作地前15個(gè)字符即可
del df['行政編碼']
del df['戶籍地城市編號']
# 合并數(shù)據(jù)季惩,添加經(jīng)緯度字段
# 刪除無用字段

print('讀取數(shù)據(jù)共%i條' % len(df))
df.head(20)
數(shù)據(jù)展示1
  • 接著整理數(shù)據(jù)录粱,形成所需格式。查看識別后的單元格画拾,如果字?jǐn)?shù)超過5則為“未識別”
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]  
# 識別工作地-市
# 在未識別出省的數(shù)據(jù)中啥繁,可能會有市的信息

df['工作地_區(qū)縣'] = ''
df['工作地_區(qū)縣'][(df['工作地_市'].str.len() < 5)&(df['工作地'].str.contains('區(qū)'))] = df['工作地'].str.split('市').str[1].str.split('區(qū)').str[0] + '區(qū)'  
df['工作地_區(qū)縣'][(df['工作地_市'].str.len() > 5)&(df['工作地'].str.contains('區(qū)'))] = df['工作地'].str.split('區(qū)').str[0] + '區(qū)'  
df['工作地_區(qū)縣'][(df['工作地_市'].str.len() < 5)&(df['工作地'].str.contains('縣'))] = df['工作地'].str.split('市').str[1].str.split('縣').str[0] + '縣'  
df['工作地_區(qū)縣'][(df['工作地_市'].str.len() > 5)&(df['工作地'].str.contains('縣'))] = df['工作地'].str.split('縣').str[0] + '縣'
# 識別工作地-區(qū)縣

df['工作地_省'][df['工作地_省'].str.len() > 5] = '未識別'
df['工作地_市'][df['工作地_市'].str.len() > 5] = '未識別'
df['工作地_區(qū)縣'][(df['工作地_區(qū)縣'].str.len() > 5) | (df['工作地_區(qū)縣'].str.len() < 2)] = '未識別'
# 整理未識別單元格

df.columns = ['姓','工作地','戶籍所在地_省','戶籍所在地_市','戶籍所在地_區(qū)縣','戶籍所在地_lng','戶籍所在地_lat',
              '工作地_省','工作地_市','工作地_區(qū)縣']
print('讀取數(shù)據(jù)共%i條' % len(df))
# 數(shù)據(jù)整理
df.head(20)
數(shù)據(jù)展示2

1.2 top20姓氏

# 將數(shù)據(jù)按照“姓”做統(tǒng)計(jì),找到數(shù)量最多的TOP20
name_count = df['姓'].value_counts()[:20]
result1_01 = pd.DataFrame({'count':name_count, 'count_pre':name_count/name_count.sum()})

# bokeh出聯(lián)動柱狀圖

from bokeh.models import HoverTool
from bokeh.layouts import gridplot
# 導(dǎo)入模塊

name_lst = result1_01.index.tolist()
source = ColumnDataSource(result1_01)
# 創(chuàng)建ColumnDataSource數(shù)據(jù)

hover1 = HoverTool(tooltips=[("姓氏計(jì)數(shù)", "@count")])  # 設(shè)置標(biāo)簽顯示內(nèi)容
result1 = figure(plot_width=800, plot_height=250,x_range = name_lst,
                 title="中國姓氏TOP20 - 計(jì)數(shù)" ,
                 tools=[hover1,'reset,xwheel_zoom,pan'])   # 構(gòu)建繪圖空間
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")])  # 設(shè)置標(biāo)簽顯示內(nèi)容
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)
中國姓氏top20
PS : 數(shù)據(jù)樣本較小青抛,僅代表大致趨勢

數(shù)據(jù)可見旗闽,“王張李劉陳”霸占中國姓氏人數(shù)前五,總和約占總?cè)藬?shù)一半蜜另。你的朋友中适室,是否有一半是“王張李劉陳”的一員呢?举瑰!
(在5662個(gè)姓氏中脫穎而出捣辆,老王真是無處不在)

1.3 查看某一姓氏的全國分布

在了解中國姓氏數(shù)量的排行后,我們再來看看每一姓氏在中國大陸的分布情況

1.3.1 查看“王”姓的全國分布
data_wang1 = df[df['姓'] == '王']
writer = pd.ExcelWriter('C:/Users/QJ/Desktop/wang1.xlsx')
data_wang1.to_excel(writer,'sheet1',index=False)
writer.save()
# 導(dǎo)出數(shù)據(jù)1

data_wang2 = data_wang1.groupby(['姓','戶籍所在地_lng','戶籍所在地_lat'])['戶籍所在地_市'].count()
data_wang2 = data_wang2.reset_index()
writer = pd.ExcelWriter('C:/Users/QJ/Desktop/wang2.xlsx')
data_wang2.to_excel(writer,'sheet1',index=False)
writer.save()
# 導(dǎo)出數(shù)據(jù)2

print('導(dǎo)出完成此迅!')

接著在EXCEL中打開 wang1.xlsx 文件汽畴,用power map 制作熱力圖,查看老王們在中國的分布情況邮屁。


“王”姓熱力分布圖

可以發(fā)現(xiàn)整袁,“王”姓的分布情況與想象中的國內(nèi)人口分布情況大體一致。只是佑吝,南方地區(qū)分布較少坐昙,基本集中在長江中下游地區(qū)。

1.3.2 查看“甄”姓的全國分布

同理芋忿,再來看看本人“甄”姓的國內(nèi)分布情況

# 查看“甄”姓的全國分布

data_zhen1 = df[df['姓'] == '甄']
writer = pd.ExcelWriter('C:/Users/QJ/Desktop/zhen1.xlsx')
data_zhen1.to_excel(writer,'sheet1',index=False)
writer.save()
# 導(dǎo)出數(shù)據(jù)1

data_zhen2 = data_zhen1.groupby(['姓','戶籍所在地_lng','戶籍所在地_lat'])['戶籍所在地_市'].count()
data_zhen2 = data_zhen2.reset_index()
writer = pd.ExcelWriter('C:/Users/QJ/Desktop/zhen2.xlsx')
data_zhen2.to_excel(writer,'sheet1',index=False)
writer.save()
# 導(dǎo)出數(shù)據(jù)2

print('導(dǎo)出完成炸客!')
“甄”姓熱力分布圖

不同于遍地開花的“王”姓人,“甄”姓家族的人數(shù)較少戈钢。除了常見的集中在長江中下游地區(qū)痹仙,“甄”姓人在廣東有兩個(gè)集中點(diǎn),分別是開平和臺山殉了,也是著名華僑地區(qū)开仰,這里的人們多選擇出國闖蕩,諸如美國唐人街能時(shí)常聽見臺山話薪铜。

二众弓、姓氏遷徙情況

2.1 計(jì)算奔波指數(shù)

查看姓氏遷徙情況,我們需要算出“奔波指數(shù)”隔箍。其中奔波指數(shù)=姓氏人均遷徙距離谓娃,遷徙距離為戶籍地所在地級市與現(xiàn)居住地所在地級市的距離。

# 計(jì)算并查看“葉”姓氏的奔波指數(shù)

data_zhen = df[['姓','戶籍所在地_lng','戶籍所在地_lat','工作地_市','工作地_區(qū)縣']][df['姓'] == '葉']
data_zhen = data_zhen[data_zhen['工作地_市'] != '未識別']
data_zhen = data_zhen[data_zhen['工作地_區(qū)縣'] != '未識別']
data_zhen.columns = ['familyname','birth_lng','birth_lat','work_city','work_district']
# 篩選并清洗數(shù)據(jù)

writer = pd.ExcelWriter('C:/Users/QJ/Desktop/zhen_qianxi.xlsx')
data_zhen.to_excel(writer,'sheet1',index=False)
writer.save()
# 導(dǎo)出數(shù)據(jù)

print('數(shù)據(jù)條數(shù)為%i條' % len(data_zhen))
data_zhen.head(10)

獲得戶籍經(jīng)緯度地址和工作地址

2.2 空間可視化結(jié)果
  • 把工作地址利用Geocoding工具蜒滩,轉(zhuǎn)化成對應(yīng)經(jīng)緯度坐標(biāo)

  • 把數(shù)據(jù)文件導(dǎo)入QGIS中滨达,分別給籍貫坐標(biāo)和工作坐標(biāo)取點(diǎn)


  • 利用lineplotter插件兩點(diǎn)連線奶稠,并設(shè)置好 “l(fā)ength”字段,以此漸變數(shù)值作圖


  • 最后捡遍,優(yōu)化圖表锌订,實(shí)現(xiàn)動態(tài)可視化(簡書無法呈現(xiàn)效果)


    “葉”姓群體遷徙情況

    可見,“葉”姓群體多集中工作在南京地區(qū)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末画株,一起剝皮案震驚了整個(gè)濱河市瀑志,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌污秆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧甘,死亡現(xiàn)場離奇詭異良拼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)充边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門庸推,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浇冰,你說我怎么就攤上這事贬媒。” “怎么了肘习?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵际乘,是天一觀的道長。 經(jīng)常有香客問我漂佩,道長脖含,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任投蝉,我火速辦了婚禮养葵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘩缆。我一直安慰自己关拒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布庸娱。 她就那樣靜靜地躺著着绊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涌韩。 梳的紋絲不亂的頭發(fā)上畔柔,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音臣樱,去河邊找鬼靶擦。 笑死腮考,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玄捕。 我是一名探鬼主播踩蔚,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枚粘!你這毒婦竟也來了馅闽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤馍迄,失蹤者是張志新(化名)和其女友劉穎福也,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攀圈,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暴凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赘来。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片现喳。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖犬辰,靈堂內(nèi)的尸體忽然破棺而出嗦篱,到底是詐尸還是另有隱情,我是刑警寧澤幌缝,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布灸促,位于F島的核電站,受9級特大地震影響涵卵,放射性物質(zhì)發(fā)生泄漏腿宰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一缘厢、第九天 我趴在偏房一處隱蔽的房頂上張望吃度。 院中可真熱鬧,春花似錦贴硫、人聲如沸椿每。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽间护。三九已至,卻和暖如春挖诸,著一層夾襖步出監(jiān)牢的瞬間汁尺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工多律, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴突,地道東北人搂蜓。 一個(gè)月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像辽装,于是被迫代替她去往敵國和親帮碰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容