zoukankan      html  css  js  c++  java
  • 人口、人口密度分析项目-条形图

    (一)需求:

    1、需求一:绘制各个省、城市的人口条形图,依次递减排列;

    2、需求二:绘制各个省、城市的人口密度条形图,依次递减排序。

    (二)实现:

    1、准备好数据

    (1)省、城市的名称;

    (2)省、城市的人口;

    (3)省、城市的面积,用于计算人口密度。

    2、建表、导入数据

    tb_populations.sql

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : win7_local
    Source Server Version : 50717
    Source Host           : localhost:3306
    Source Database       : analyze
    
    Target Server Type    : MYSQL
    Target Server Version : 50717
    File Encoding         : 65001
    
    Date: 2018-11-08 19:43:24
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for tb_populations
    -- ----------------------------
    DROP TABLE IF EXISTS `tb_populations`;
    CREATE TABLE `tb_populations` (
      `id` int(11) NOT NULL,
      `province_name` varchar(30) DEFAULT NULL,
      `province_population` int(11) DEFAULT NULL,
      `area_wanpfkm` float DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of tb_populations
    -- ----------------------------
    INSERT INTO `tb_populations` VALUES ('1', '北京', '19612368', '1.68');
    INSERT INTO `tb_populations` VALUES ('2', '天津', '12938693', '1.1');
    INSERT INTO `tb_populations` VALUES ('3', '河北', '71854210', '19');
    INSERT INTO `tb_populations` VALUES ('4', '山西', '35712101', '15');
    INSERT INTO `tb_populations` VALUES ('5', '内蒙古', '24706291', '110');
    INSERT INTO `tb_populations` VALUES ('6', '辽宁', '43746323', '15');
    INSERT INTO `tb_populations` VALUES ('7', '吉林', '27452815', '18');
    INSERT INTO `tb_populations` VALUES ('8', '黑龙江', '38313991', '46');
    INSERT INTO `tb_populations` VALUES ('9', '上海', '23019196', '0.58');
    INSERT INTO `tb_populations` VALUES ('10', '江苏', '78660941', '10');
    INSERT INTO `tb_populations` VALUES ('11', '浙江', '54426891', '10');
    INSERT INTO `tb_populations` VALUES ('12', '安徽', '59500468', '13');
    INSERT INTO `tb_populations` VALUES ('13', '福建', '36894217', '12');
    INSERT INTO `tb_populations` VALUES ('14', '江西', '44567797', '16');
    INSERT INTO `tb_populations` VALUES ('15', '山东', '95792719', '15');
    INSERT INTO `tb_populations` VALUES ('16', '河南', '94029939', '16');
    INSERT INTO `tb_populations` VALUES ('17', '湖北', '57237727', '18');
    INSERT INTO `tb_populations` VALUES ('18', '湖南', '65700762', '21');
    INSERT INTO `tb_populations` VALUES ('19', '广东', '104320459', '18');
    INSERT INTO `tb_populations` VALUES ('20', '广西', '46023761', '23');
    INSERT INTO `tb_populations` VALUES ('21', '海南', '8671485', '3.4');
    INSERT INTO `tb_populations` VALUES ('22', '重庆', '28846170', '8.23');
    INSERT INTO `tb_populations` VALUES ('23', '四川', '80417528', '48');
    INSERT INTO `tb_populations` VALUES ('24', '贵州', '34748556', '17');
    INSERT INTO `tb_populations` VALUES ('25', '云南', '45966766', '38');
    INSERT INTO `tb_populations` VALUES ('26', '西藏', '3002165', '120');
    INSERT INTO `tb_populations` VALUES ('27', '陕西', '37327379', '19');
    INSERT INTO `tb_populations` VALUES ('28', '甘肃', '25575263', '39');
    INSERT INTO `tb_populations` VALUES ('29', '青海', '5626723', '72');
    INSERT INTO `tb_populations` VALUES ('30', '宁夏', '6301350', '6.6');
    INSERT INTO `tb_populations` VALUES ('31', '新疆', '21815815', '160');
    INSERT INTO `tb_populations` VALUES ('32', '成都', '16040000', '1.46');
    INSERT INTO `tb_populations` VALUES ('33', '武汉', '10910000', '0.85');
    INSERT INTO `tb_populations` VALUES ('34', '广州', '14490000', '0.74');
    INSERT INTO `tb_populations` VALUES ('35', '深圳', '12520000', '0.2');
    

      

    3、编写代码。

    (1)实现:需求一

    01-matplotlib-renkou.py

    import pymysql
    import matplotlib.pyplot as plt
    import matplotlib  # 载入matplotlib完整库
    
    matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体,改为微软雅黑,默认 sans-serif
    matplotlib.rcParams['font.size'] = 18  # 字体大小,整数字号,默认10
    
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        passwd='root',
        db='analyze',
        charset='utf8'
    )
    
    # 创建游标
    cur = conn.cursor()
    
    # 获取数据
    sql_1 = "select * from tb_populations"
    ret_num1 = cur.execute(sql_1)  # 生成查询sql语句,并且执行。ret_num表示受影响的记录条数
    pro_data = cur.fetchall()  # 获取查询结果
    
    # 按照count_id 降序排列
    list1 = list(pro_data)
    list2 = sorted(list1, key=lambda p: p[2], reverse=True)
    
    # 获取数据
    province_name = [p[1] for p in list2]
    province_population = [p[2] for p in list2]
    
    print(province_name)
    print(province_population)
    
    # 绘图
    
    # 设置x,y
    x = [i for i in range(len(province_name))]
    y = province_population
    
    plt.figure(figsize=(20, 10), dpi=80)
    plt.bar(
        x,
        y,
        width=0.5,
        color='r'
    )
    
    # 设置x轴刻度
    _xticks_labels = [str(index + 1) + " " + value for index, value in enumerate(province_name)]
    plt.xticks(x, _xticks_labels, rotation=40, fontsize=12)
    
    # 设置网格
    plt.grid()
    
    # 设置文字
    plt.title("中国各个省份人口数量统计2010年第6次人口普查       数据来源:国家统计局")
    plt.xlabel("省/直辖市", color='b')
    plt.ylabel("人口数(亿)", color='black')
    
    plt.show()
    

      

    输出:

    (2)实现:需求二

    02-matplotlib-renkou_per_pfkm.py

    import pymysql
    import matplotlib.pyplot as plt
    import matplotlib  # 载入matplotlib完整库
    
    matplotlib.rcParams['font.family'] = 'Microsoft Yahei'  # 字体,改为微软雅黑,默认 sans-serif
    matplotlib.rcParams['font.size'] = 18  # 字体大小,整数字号,默认10
    
    # 连接数据库
    conn = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        passwd='root',
        db='analyze',
        charset='utf8'
    )
    
    # 创建游标
    cur = conn.cursor()
    
    # 获取数据
    sql_1 = "select * from tb_populations"
    ret_num1 = cur.execute(sql_1)  # 生成查询sql语句,并且执行。ret_num表示受影响的记录条数
    pro_data = cur.fetchall()  # 获取查询结果
    
    #  按照 polulation_per_pfkm
    #  获取数据
    province_name = [p[1] for p in pro_data]  # 省份、城市名称
    polulation_per_pfkm = [int(p[2] / p[3]) for p in pro_data]  # 人口密度(人口/平方千米)
    
    # 重组数据,排序
    list1 = list(map(lambda a, b: (a, b), province_name, polulation_per_pfkm))
    list2 = sorted(list1, key=lambda p: p[1], reverse=True)
    province_name = [p[0] for p in list2]
    polulation_per_pfkm = [p[1] for p in list2]
    print(province_name)
    print(polulation_per_pfkm)
    
    # 绘图
    
    # 设置x,y
    x = [i for i in range(len(province_name))]
    y = polulation_per_pfkm
    
    plt.figure(figsize=(20, 10), dpi=80)
    plt.bar(
        x,
        y,
        width=0.5,
        color='r'
    )
    
    # 设置x轴刻度
    _xticks_labels = [str(index + 1) + " " + value for index, value in enumerate(province_name)]
    plt.xticks(x, _xticks_labels, rotation=40, fontsize=12)
    
    
    # 设置网格
    plt.grid()
    
    # 设置文字
    plt.title("中国各个省份人口密度统计2010年第6次人口普查       数据来源:国家统计局、百度知道")
    plt.xlabel("省/直辖市/城市", color='b')
    plt.ylabel("人口密度(千万人/平方千米)", color='black')
    
    plt.show()
    

      

    输出:

  • 相关阅读:
    Java weak reference
    Java 代理模式
    Eclipse 代码自动提示
    Eclipse 设置默认编码为Utf-8
    MyBatis 作用域(Scope)和生命周期
    MyBatis 命名空间与命名解析
    Java 泛型 介绍
    【总结】过去的风口让很多人改变了阶层,我们90后的下一个风口会是什么?
    【前端】js截取or分割字符串的常见方法
    基于react/vue的移动端终极适配方案vw单位(更新css-modules配置)
  • 原文地址:https://www.cnblogs.com/andy9468/p/9931496.html
Copyright © 2011-2022 走看看