zoukankan      html  css  js  c++  java
  • 姓氏排行研究

    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(r'C:UsersAdministratorDesktoppython数据分析项目9姓氏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('转换后数据为:
    ',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里边调节线的宽度和尾迹的宽度。

  • 相关阅读:
    设计模式学习总结系列应用实例
    【研究课题】高校特殊学生的发现及培养机制研究
    Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
    python pro practice
    openstack python sdk list tenants get token get servers
    openstack api
    python
    git for windows
    openstack api users list get token get servers
    linux 流量监控
  • 原文地址:https://www.cnblogs.com/shengyang17/p/9865317.html
Copyright © 2011-2022 走看看