
基于Python+爬虫的人口普查数据可视化分析系统设计与实现
今天带来的是基于Python+爬虫的人口普查数据可视化分析系统设计与实现,人口普查数据的应用研究及实现设计的目的是为用户提供人口信息等方面的平台。与其它应用程序相比,人口普查数据的应用研究的设计主要面向于群众,旨在为管理员和用户提供一个人口普查数据的应用研究及实现。用户可以通过系统及时查看人口信息等。人口普查数据的应用研究及实现是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题,
💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。
👇🏻 精彩专栏 推荐订阅👇🏻
计算机毕业设计精品项目案例-200套
🌟文末获取源码+数据库+文档🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人
一.前言
人口普查数据的应用研究及实现设计的目的是为用户提供人口信息等方面的平台。
与其它应用程序相比,人口普查数据的应用研究的设计主要面向于群众,旨在为管理员和用户提供一个人口普查数据的应用研究及实现。用户可以通过系统及时查看人口信息等。
人口普查数据的应用研究及实现是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题,服务器选择的是Django,用户与管理员后台之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 Python等语言传递给数据库。通过此方式促进人口普查数据的应用研究及实现信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的人口普查数据的应用研究及实现。
二.技术环境
开发语言:Python
python框架:django
软件版本:python3.7/python3.8
数据库:mysql 5.7或更高版本
数据库工具:Navicat11
爬虫框架:Scrapy
大屏展示:Echart
开发软件:PyCharm/vs code
前端框架:vue.js
三.功能设计
本系统分为二部分进行设计,后台主体分别是用户、管理员;其用例分别如下:
管理员用例图如图所示。
用户用例图如图所示。
总体上看,人口普查数据的应用研究及实现具有注册登录、个人中心、人口信息管理、人口普直管理等功能模块。以下为几个主要模块简单介绍:
注册登录:提供给用户注册登录的页面,完成用户的注册登录功能。
个人中心:对个人信息进行更新。
人口信息:管理员点击人口信息页面查询或删除人口信息。
人口普直:管理员点击人口普直页面查询或删除人口普直。
系统总体功能结构图如下所示:
本人口普查数据可视化分析系统的架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。系统架构如下图所示。
四.数据设计
概念模型的设计是为了抽象真实世界的信息,并对信息世界进行建模。它是数据库设计的强大工具。数据库概念模型设计可以通过E-R图描述现实世界的概念模型。系统的E-R图显示了系统中实体之间的链接。而且Mysql数据库是自我保护能力比较强的数据库,下图主要是对数据库实体的E-R图:
五.部分效果展示
管理员功能实现效果
管理员登录,通过登录页面填写用户名和密码等信息,点击登录操作,如图所示。
管理员登录进入系统可以查看系统首页、个人中心、用户管理、人口信息管理、人口普直管理、系统管理等功能进行详细操作,如图5-2所示。
管理员点击用户管理;在用户管理页面输入用户账号、用户姓名、性别、用户电话、头像、注册时间进行查询,新增或删除用户信息等操作;如图所示。
管理员点击人口信息管理;在人口信息管理页面输入分类、指标、年份、人口数、单位等信息,进行查询或删除人口信息等操作;如图5-4所示。
管理员点击人口普直管理;在人口普直管理页面输入地区、年份、男性人口、女性人口、城镇人口、乡村人口、家庭户数等信息,进行查询,新增或删除人口普直等操作;如图所示。
管理员点击系统管理;在系统管理页面输入系统简介等信息,进行查询系统信息等操作;如图所示。
用户功能实现效果
会进入到注册的页面里面,将用户信息录入注册表,确认信息正确后,系统才会进入登录界面,用户登录成功后可使用本系统所提供的所有功能,如图所示。
用户登录进入系统可以查看系统首页、个人中心、人口信息管理、人口普直管理等功能进行详细操作,如图所示。
用户点击人口信息管理;在人口信息管理页面对分类、指标、年份、人口数、单位等信息,进行查询人口信息等操作;如图所示。
数据可视化分析看板功能实现效果
人口普查数据的应用研究展示图,如图所示。
下图是人口普直信息表,通过python爬取清洗后的数据形式展示如图所示:
在男性人口页面以柱状图进行展示所示。
在女性人口页面以条形图进行展示所示。
在年份统计页面以柱杖图进行展示所示。
六.部分功能代码
# 数据爬取文件
import scrapy
import pymysql
import pymssql
from ..items import RenkouxinxiItem
import time
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji
# 人口信息
class RenkouxinxiSpider(scrapy.Spider):
name = 'renkouxinxiSpider'
spiderUrl = 'https://data.stats.gov.cn/easyquery.htm?cn=C01'
start_urls = spiderUrl.split(";")
protocol = ''
hostname = ''
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def start_requests(self):
plat = platform.system().lower()
if plat == 'linux' or plat == 'windows':
connect = self.db_connect()
cursor = connect.cursor()
if self.table_exists(cursor, '8988r_renkouxinxi') == 1:
cursor.close()
connect.close()
self.temp_data()
return
pageNum = 1 + 1
for url in self.start_urls:
if '{}' in url:
for page in range(1, pageNum):
next_link = url.format(page)
yield scrapy.Request(
url=next_link,
callback=self.parse
)
else:
yield scrapy.Request(
url=url,
callback=self.parse
)
# 列表解析
def parse(self, response):
_url = urlparse(self.spiderUrl)
self.protocol = _url.scheme
self.hostname = _url.netloc
plat = platform.system().lower()
if plat == 'windows_bak':
pass
elif plat == 'linux' or plat == 'windows':
connect = self.db_connect()
cursor = connect.cursor()
if self.table_exists(cursor, '8988r_renkouxinxi') == 1:
cursor.close()
connect.close()
self.temp_data()
return
list = []
for idx, url in enumerate(['https://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22sj%22%2C%22valuecode%22%3A%22LAST20%22%7D%5D&k1=1679210008645','https://data.stats.gov.cn/easyquery.htm?m=QueryData&dbcode=hgnd&rowcode=zb&colcode=sj&wds=%5B%5D&dfwds=%5B%7B%22wdcode%22%3A%22zb%22%2C%22valuecode%22%3A%22A0302%22%7D%5D&k1=1679210054540&h=1']):
res = requests.get(url, verify=False)
res.encoding = "utf-8"
data = json.loads(res.text)
datanodes = data['returndata']['datanodes']
wdnodes = data['returndata']['wdnodes']
if idx == 0:
fenlei = '总人口'
danwei = '万人'
if idx == 1:
fenlei = '人口出生率、死亡率和自然增长率'
danwei = '‰'
for record in datanodes:
for record_c in wdnodes[0]['nodes']:
if record_c['code'] == record['wds'][0]['valuecode']:
zhibiao = record_c['cname']
for record_e in wdnodes[1]['nodes']:
if record_e['code'] == record['wds'][1]['valuecode']:
nianfen = record_e['cname']
renkoushu = record['data']['data']
list.append({
"fenlei":fenlei,
"zhibiao":zhibiao,
"nianfen":nianfen,
"renkoushu":renkoushu,
"danwei":danwei
})
for item in list:
fields = RenkouxinxiItem()
fields["fenlei"] = item['fenlei']
fields["zhibiao"] = item['zhibiao']
fields["nianfen"] = item['nianfen']
fields["renkoushu"] = item['renkoushu']
fields["danwei"] = item['danwei']
yield fields
# 去除多余html标签
def remove_html(self, html):
if html == None:
return ''
pattern = re.compile(r'<[^>]+>', re.S)
return pattern.sub('', html).strip()
# 数据库连接
def db_connect(self):
type = self.settings.get('TYPE', 'mysql')
host = self.settings.get('HOST', 'localhost')
port = int(self.settings.get('PORT', 3306))
user = self.settings.get('USER', 'root')
password = self.settings.get('PASSWORD', '123456')
try:
database = self.databaseName
except:
database = self.settings.get('DATABASE', '')
if type == 'mysql':
connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')
else:
connect = pymssql.connect(host=host, user=user, password=password, database=database)
return connect
# 断表是否存在
def table_exists(self, cursor, table_name):
cursor.execute("show tables;")
tables = [cursor.fetchall()]
table_list = re.findall('(\'.*?\')',str(tables))
table_list = [re.sub("'",'',each) for each in table_list]
if table_name in table_list:
return 1
else:
return 0
# 数据缓存源
def temp_data(self):
connect = self.db_connect()
cursor = connect.cursor()
sql = '''
insert into `renkouxinxi`(
id
,fenlei
,zhibiao
,nianfen
,renkoushu
,danwei
)
select
id
,fenlei
,zhibiao
,nianfen
,renkoushu
,danwei
from `8988r_renkouxinxi`
where(not exists (select
id
,fenlei
,zhibiao
,nianfen
,renkoushu
,danwei
from `renkouxinxi` where
`renkouxinxi`.id=`8988r_renkouxinxi`.id
))
limit {0}
'''.format(random.randint(10,15))
cursor.execute(sql)
connect.commit()
connect.close()
最后
💕💕
最新计算机毕业设计选题篇-选题推荐
小程序毕业设计精品项目案例-200套
Java毕业设计精品项目案例-200套
Python毕业设计精品项目案例-200套
大数据毕业设计精品项目案例-200套
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。
更多推荐
所有评论(0)