码迷,mamicode.com
首页 > 其他好文 > 详细

姓氏排行研究

时间:2018-10-28 20:50:37      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:lan   研究   header   das   enc   pytho   title   创建   分析   

 

1、数据清洗、整合
要求:
① 将“data01”、“data02”分别读取,并且合并成一个数据
② 结合“户籍地城市编号”及“中国城市代码对照表”数据,将城市经纬度连接进数据中
③ 分别提取“工作地”中的省、市
提示:
① 可以先读取“data01”、“data02”,然后用pd.concat()来连接数据
② 新建字段“工作地-省”,“工作地-市”,“工作地-区县”,如果数据中“工作地”字段无法提取省和市,则用“未识别”填充单元格
   * 通过查看识别后的单元格,如果字数超过5则为“未识别”

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
import warnings
warnings.filterwarnings(ignore)

‘‘‘
(1)数据加载及合并
‘‘‘
import os
os.chdir(C:\\Users\\Administrator\\Desktop\\python数据分析\\项目\\09姓氏)
df01 = pd.read_csv(data01.csv, encoding = utf-8)
df02 = pd.read_csv(data02.csv, encoding = utf-8)
df_city = pd.read_excel(中国行政代码对照表.xlsx, sheetname = 0)
#读取数据
df = pd.concat([df01, df02])
df = pd.merge(df,df_city, left_on = 户籍地城市编号, right_on = "行政编码")
 
df[工作地] = df[工作地].str[:15]
del df[户籍地城市编号]
del df[行政编码]

‘‘‘
(2)提取工作地的省市区县
‘‘‘
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]
#提取市
df[工作地_区县]= ‘‘
df[工作地_区县][(df[工作地_市].str.len() < 5)&(df[工作地].str.contains())] = df[工作地].str.split().str[1].str.split().str[0] +   
df[工作地_区县][(df[工作地_市].str.len() > 5)&(df[工作地].str.contains())] = df[工作地].str.split().str[0] + 

df[工作地_区县][(df[工作地_市].str.len() < 5)&(df[工作地].str.contains())] = df[工作地].str.split().str[1].str.split().str[0] +   
df[工作地_区县][(df[工作地_市].str.len() > 5)&(df[工作地].str.contains())] = df[工作地].str.split().str[0] + 

#识别区县
df[工作地_省][df[工作地_省].str.len() > 5] = 未识别
df[工作地_市][df[工作地_市].str.len() > 5] = 未识别
df[工作地_区县][(df[工作地_区县].str.len() > 5) | (df[工作地_区县].str.len() < 2)] = 未识别

#整理未识别单元格
df.columns = [, 工作地, 户籍所在地_省, 户籍所在地_市,户籍所在地_区县, 户籍所在地_lng, 户籍所在地_lat, 工作地_省,工作地_市,工作地_区县 ]

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
import warnings
warnings.filterwarnings(ignore)

‘‘‘
(1)数据统计,找到姓氏TOP20
‘‘‘
name_count = df[].value_counts()[:20]
result1_01 = pd.DataFrame({count: name_count,
                           count_pre: name_count/name_count.sum()})
#筛选数据并统计
‘‘‘
(2)bokeh做联动柱状图
‘‘‘
from bokeh.models import HoverTool
from bokeh.layouts import gridplot

name_list = result1_01.index.tolist()
source = ColumnDataSource(result1_01)
#创建数据
output_file(project09_01.html)

hover1 = HoverTool(tooltips = [(姓氏计数, "@count")])
result1 = figure(plot_width = 800, plot_height = 250, x_range = name_list,
                 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)
result1.ygrid.grid_line_dash = [6, 4]
result1.xgrid.grid_line_dash = [6, 4]
#柱状图1

p = gridplot([result1], [result2])
show(p)

print(finish)

技术分享图片

 

‘‘‘
(3)查看“王”姓氏分布
‘‘‘
data_wang1 = df[df[] == ]
writer = pd.ExcelWriter(C:\\Users\\Administrator\\Desktop\\python数据分析\\项目\\09姓氏\\wangb1.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()

data_wang2.columns = [lng, lat, name, value] 

writer = pd.ExcelWriter(C:\\Users\\Administrator\\Desktop\\python数据分析\\项目\\09姓氏\\wangb2.xlsx)
data_wang2.to_excel(writer, sheet1, index = False)
writer.save()
#导出数据2

然后把数据data.xlsx替换下

技术分享图片

import pandas as pd
import os

os.chdir(rC:\Users\Administrator\Desktop\python数据分析\项目\09姓氏\data02_3D_Bar_Map)  # 输入文件所在路径,例如:‘C:/Users/Desktop/‘
data = pd.read_excel(data.xlsx, sheetname=0,header=0)

datajs = data.to_json(orient=records,force_ascii=False)

print(转换后数据为:\n,datajs) #转换为json数据

在百度地图拾取中心点坐标(以武汉为点),在settings.py里边设置下

http://loo2k.com/getpoint/

技术分享图片

 

 HTML页面展示

 技术分享图片

 

 

技术分享图片

技术分享图片

 

 技术分享图片

另存为start.shap

 

终点文件---->>>

跟上边一样,加载end.shap

 

使用LinePlotter插件

技术分享图片

 

另存为:转换为48N的坐标系经纬度带,它是中心

技术分享图片

 

 把项目属性的坐标也改成48N的

技术分享图片

 

 添加长度length字段:

技术分享图片

给length字段加个渐进的样式

技术分享图片

最终得到图

技术分享图片

 

 

 

把line2转为地理坐标系WGS84

技术分享图片

与此同时属性表里边应该有个value字段,它的计数;count字段是个字符串的格式,要把它转成一个整数;

技术分享图片

记得要把空值null给去掉了

技术分享图片

再进行反选

技术分享图片

再给它转换为json格式文件

这样子试了它还是有空值;

 

有时候它会识别不了,仅保存选中要素,刚刚做了反选。

技术分享图片

 

 

 

 

 

 然后使用 http://mapshaper.org/  把它转换导出json文件

技术分享图片

导出json文件

技术分享图片

 

 

 

 把data文件换成-->>转换好的json文件;再在settings里边调节线的宽度和尾迹的宽度。

技术分享图片

 

姓氏排行研究

标签:lan   研究   header   das   enc   pytho   title   创建   分析   

原文地址:https://www.cnblogs.com/shengyang17/p/9865317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!