博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

1、2026年计算机专业毕业设计选题大全(建议收藏)✅

2、大数据、计算机专业选题(Python/Java/大数据/深度学习/机器学习)(建议收藏)✅

1、项目介绍

技术栈:Python语言、Flask框架、MySQL数据库、Echarts可视化、HTML

研究背景:
人口普查数据量大且更新频繁,传统统计方法难以直观呈现人口数量、密度、老龄化等多维度变化趋势,亟需自动化采集与可视化分析工具辅助政策制定与学术研究。

研究意义:
本系统以Flask快速搭建,集成Echarts多维可视化,可实时展示全国及各省市人口普查数据,为毕业设计提供“数据采集-存储-可视化”完整闭环,预计节省80%人工整理时间,助力精准人口政策制定与社会科学研究。


2、项目界面

(1)全国人口普查数据可视化分析大屏
在这里插入图片描述

(2)广东省—人口普查数据可视化分析大屏
在这里插入图片描述

(3)广东省广州市—人口普查数据可视化分析大屏
在这里插入图片描述

(4)湖南省—人口普查数据可视化分析大屏
在这里插入图片描述

(5)湖南省长沙市—人口普查数据可视化分析大屏
在这里插入图片描述

(6)四川省—人口普查数据可视化分析大屏
在这里插入图片描述

(7)北京市—人口普查数据可视化分析大屏
在这里插入图片描述

(8)河南省—人口普查数据可视化分析大屏
在这里插入图片描述


3、项目说明

系统基于Flask框架,使用Python语言进行开发,MySQL数据库用于数据存储,Echarts实现数据可视化。通过HTML构建前端页面,展示全国及各省市人口普查数据的多维度分析。

系统包含以下可视化图表:

  • 饼图:用于性别分布、年龄分布、学历分布,直观呈现不同类别占比。
  • 柱状图+折线图:历次人口普查全国人口总数与增长率,结合展示人口数量(柱)和增长率(线)变化。
  • 柱状图:历年各省人口密度对比、2000年以来我国人口地区分布与变化、我国城市化进程与速度,呈现数据对比。
  • 地图:各省/直辖市常住人口,通过颜色区分不同区域人口规模。
  • 柱状图+折线图(组合):我国人口老龄化速度与规模,展示老年人口相关数据及趋势。

系统通过直观的可视化图表,帮助用户快速了解人口普查数据的关键信息,为政策制定者、研究人员和公众提供了一个便捷的数据分析平台。


4、核心代码

from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text

app = Flask(__name__)
app.json.ensure_ascii = False  # 解决中文乱码问题
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/census'
db = SQLAlchemy(app)


@app.get('/')
def index():
    return render_template('index.html')


@app.get('/get_code')
def get_code():
    name = request.args.get('name')
    # flag用于判断选择的是地级市还是省份,若flag为0,选中的是省份;flag为1,选中的是地级市
    query = text(
        f"select code,flag from citycode where cityname like '{name}%'")
    results = db.session.execute(query).fetchone()
    if results:
        return [str(results[0]), str(results[1])]
    else:
        return '0'


@app.get('/get_data')
def get_data():
    name = request.args.get('name')
    flag = request.args.get('flag')
    query = text('')
    # 普通地级市、
    if flag == '1':
        query = text(
            f"select 地区 as area, 人口数 as number from census_all where 所属城市 = '{name}'")
    # 省、自治区
    elif flag == '0':
        query = text(
            f"select 所属城市 as city, sum(人口数) as number from census_all where 所属省份 like '{name}%' group by 所属城市")
    # 四个直辖市
    elif flag == '2':
        query = text(
            f"select 地区 as city, 人口数 as number from census_all where 所属城市 like '{name}%'")
    results = db.session.execute(query).fetchall()
    json_results = []
    for row in results:
        json_results.append({
            'name': row[0],
            'value': row[1]
        })
    return jsonify(json_results)


@app.get('/get_sex_age_city_country_data')
def get_sex_age_city_country_data():
    name = request.args.get('name')
    flag = request.args.get('flag')
    query = text('')
    # flag == '0' 选中的是省份
    if flag == '0':
        query = text(
            f"select sum(人口数) as number, sum(男性人口) as male,sum(女性人口) as female,sum(城镇人口) as citynumber,sum(乡村人口) as countrynumber, sum(ROUND ( 人口数*`0-14岁人口比重(百分比)`/100,0) ) as child,sum(ROUND(人口数*`15-64岁人口比重(百分比)`/100,0)) as middle_age,sum(ROUND(人口数*`65岁及以上人口比重(百分比)`/100,0)) as elderly from census_all where 所属省份 like '%{name}%';")
    # flag == '1' 选中的是普通地级市
    elif flag == '1':
        query = text(
            f"select sum(人口数) as number, sum(男性人口) as male,sum(女性人口) as female,sum(城镇人口) as citynumber,sum(乡村人口) as countrynumber, sum(ROUND ( 人口数*`0-14岁人口比重(百分比)`/100,0) ) as child,sum(ROUND(人口数*`15-64岁人口比重(百分比)`/100,0)) as middle_age,sum(ROUND(人口数*`65岁及以上人口比重(百分比)`/100,0)) as elderly from census_all where 所属城市 = '{name}';")
    # flag == '2' 选中的是直辖市
    elif flag == '2':
        query = text(
            f"select sum(人口数) as number, sum(男性人口) as male,sum(女性人口) as female,sum(城镇人口) as citynumber,sum(乡村人口) as countrynumber, sum(ROUND ( 人口数*`0-14岁人口比重(百分比)`/100,0) ) as child,sum(ROUND(人口数*`15-64岁人口比重(百分比)`/100,0)) as middle_age,sum(ROUND(人口数*`65岁及以上人口比重(百分比)`/100,0)) as elderly from census_all where 所属城市 like '%{name}%'")
    # flag == '3' 选中的是区县
    elif flag == '3':
        query = text(
            f"select 人口数 as number, 男性人口 as male,女性人口 as female,城镇人口 as citynumber,乡村人口 as countrynumber, ROUND( 人口数*`0-14岁人口比重(百分比)`/100,0) as child,ROUND(人口数*`15-64岁人口比重(百分比)`/100,0) as middle_age,ROUND(人口数*`65岁及以上人口比重(百分比)`/100,0) as elderly from census_all where 地区 = '{name}'")
    else:
        return 'flag is illegal!'
    results = db.session.execute(query).fetchall()[0]
    json_results = {
        'sex': {
            'male': results[1],
            'female': results[2]
        },
        'city_and_country_number': {
            'city_num': results[3],
            'country_num': results[4]
        }, 'age': {
            'child': results[5],
            'middle_age': results[6],
            'elderly': results[7]
        }
    }
    return jsonify(json_results)


@app.get('/get_recent_census_data')
def get_recent_census_data():
    name = request.args.get('name')
    query = text(
        f"select 一普 as `first`,二普 as `second`, 三普 as thrid,四普 as fourth,五普 as fifth,六普 as sixth,七普 as seventh from recent_census where 地区 = '{name}';")
    results = db.session.execute(query).fetchall()[0]
    growth_rage = []
    pre_number = None
    number_list = list()
    for i in results:
        number_list.append(round(i / 10000000, 2))
        if pre_number is None:
            growth_rage.append('')
            pre_number = i
            continue
        growth_rage.append(round((i - pre_number) / pre_number, 2))
        pre_number = i
    json_results = {
        'number': number_list,
        'growth_rage': growth_rage
    }
    return jsonify(json_results)


# 省的就业状况

@app.get('/get_province_employment_status')
def get_province_employment_status():
    name = request.args.get('name')
    print(name)
    query = text(
        f"select 所属省份, sum(`各种职业人口总计(人)`),sum(`党的机关、国家机关、群众团体和社会组织、企事业单位负责人(人)`/`各种职业人口总计(人)`),sum(`专业技术人员(人)`/`各种职业人口总计(人)`),sum(`办事人员和有关人员(人)`/`各种职业人口总计(人)`),sum(`社会生产服务和生活服务人员(人)`/`各种职业人口总计(人)`),sum(`农、林、牧、渔业生产及辅助人员(人)`/`各种职业人口总计(人)`),sum(`生产制造及有关人员(人)`/`各种职业人口总计(人)`),sum(`不便分类的其他从业人员(人)`/`各种职业人口总计(人)`) from census_all where 所属省份 like '%{name}%'group by 所属省份;")
    results = db.session.execute(query).fetchall()
    json_results = []
    for row in results:
        json_results.append({
            'location': row[0],
            '各种职业人口总计(人)': row[1],
            '党的各单位负责人(人)': row[2],
            '专业技术人员(人)': row[3],
            '办事人员和有关人员(人)': row[4],
            '社会生产服务和生活服务人员(人)': row[5],
            '农、林、牧、渔业生产及辅助人员(人)': row[6],
            '生产制造及有关人员(人)': row[7],
            '不便分类的其他从业人员(人)': row[8]
        })
    return json_results



@app.get('/get_market_marry')
def get_market_marry():
    name = request.args.get('name')
    query = text(
        f"select 所属城市, sum(`有配偶人口(人)`),sum(`离婚人口(人)`),sum(`丧偶人口(人)`),sum(`未婚人口(人)`) from census_all where 所属城市 ='{name}';")
    results = db.session.execute(query).fetchall()
    json_results = []
    for row in results:
        json_results.append({
            'location': row[0],
            '有配偶人口(人)': row[1],
            '离婚人口(人)': row[2],
            '丧偶人口(人)': row[3],
            '未婚人口(人)': row[4]
        })
    return json_results

if __name__ == '__main__':
    app.run(debug=True)

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅

点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐