【毕业设计】基于python 爬虫 flask的疫情数据可视化系统( 二 )


2.4 中国累计确诊时间线
利用中的map属性,根据确诊数量绘制中国热力图及各时间线
相关代码:
Map().add('累计确诊', [list(i) for i in zip(df1['province'], df1['confirm'])], 'china').set_global_opts(title_opts=opts.TitleOpts(title='中国累计确诊时间线', pos_left='38%', title_textstyle_opts=opts.TextStyleOpts(color='#ffffff')),visualmap_opts=opts.VisualMapOpts(pos_right='0%', textstyle_opts=opts.TextStyleOpts(color='#ffffff'),is_piecewise=True, max_=int(df1['confirm'].max()), min_=int(df1['confirm'].min()),pieces=[{"min": 5001},{"min": 2001, 'max': 5000},{"min": 1801, "max": 2000},{"min": 1401, "max": 1800},{"min": 1001, "max": 1400},{"min": 801, "max": 1000},{"min": 601, "max": 800},{"min": 401, "max": 600},{"min": 201, "max": 400},{"min": 5, "max": 200, },{"max": 5}]), toolbox_opts=opts.ToolboxOpts(), legend_opts=opts.LegendOpts(textstyle_opts=opts.TextStyleOpts(color='#ffffff'), pos_right='85%')))
2.5 中国疫情情况饼状图

【毕业设计】基于python 爬虫 flask的疫情数据可视化系统

文章插图
绘制各地区疫情饼状图
相关代码:
Pie().add(x[i], data_pair=[list(i) for i in zip(df['provincename'], df[y[i]])],radius=['15%', '35%'],center=["55%", "60%"]).set_global_opts(title_opts=opts.TitleOpts(title='中国疫情情况', pos_left='75%', pos_top='5%', title_textstyle_opts=opts.TextStyleOpts(color='#ffffff')),legend_opts=opts.LegendOpts(is_show=False)).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")))tl.add(c, x[i])tl.add_schema(is_auto_play=True, pos_bottom='85%', orient='vertical', width='80px', height='400px', pos_right='5%', pos_top='16%',label_opts=opts.LabelOpts(color='#ffffff', font_size=12), is_inverse=True)
2.6 高风险树状图
用树形图表示高风险地区更加直观
相关代码:
def high_risk(t):import jsonfrom pyecharts import options as optsfrom pyecharts.charts import Treewith open(f"demo/data/{t}.json", "r", encoding="utf-8") as f:j = json.load(f)if t == '高风险':x = 'orangered'y = 1.5elif t == '中风险':x = 'darkorange'y = 1c = (Tree().add("", [j], collapse_interval=20, is_roam=True, layout="radial", initial_tree_depth=y,label_opts=opts.LabelOpts(color='#ffffff', font_size=9)).set_global_opts(title_opts=opts.TitleOpts(title=f"{t}地区", title_textstyle_opts=opts.TextStyleOpts(color=x, font_size=16),)))return c.dump_options_with_quotes()
3 相关理论及技术 3.1爬虫
简介
网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行 。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问 。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据 。在整个的爬虫运行之前,用户都可以自定义的添加代理,伪 装 请求头以便更好地获取网页数据 。爬虫流程图如下:
相关代码
#爬虫部分代码import datetimeimport jsonimport reimport pandas as pdimport requestsfrom bs4 import BeautifulSoupfrom sqlalchemy import create_engineheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}con = create_engine("mysql+mysqlconnector://root:147123@localhost:3306/ksh")# 历史数据def lishishuju():df = pd.read_csv('demo/csv/丁香园国内疫情.csv', engine='c') # 读取数据df = df.sort_values('累计确诊', ascending=False) # 根据累计确诊去排序-降序df = df.drop_duplicates('省份', keep='first') # 根据省份去重,取第一次出现的数据df['省份'] = df['省份'].str.strip('省').str.strip('市').str.strip('壮族自治区').str.strip('自治区').str.strip('回族自治区').str.strip('维吾尔自治区')url = 'https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=湖北'data = http://www.kingceram.com/post/json.loads(requests.get(url, headers=headers).content.decode())['data']for i in df['省份']:if i != '湖北':url = 'https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=' + ix = json.loads(requests.get(url).content.decode())['data']data = data + xdef funx(x):if len(x) == 3:x = x + '0'return xdf = pd.DataFrame(data)x = df['year'].astype('str') + '.'y = (df['date'].astype('str'))y = y.apply(lambda x: funx(x))df['dateId'] = x + ydf['dateId'] = pd.DatetimeIndex(df['dateId']).astype('str').str[:7]df.to_csv('demo/csv/国内疫情数据.csv', index=False, encoding='utf-8-sig')df.to_sql('gnlssj', if_exists='replace', con=con, index=False)con.execute('ALTER TABLE gnlssj ADD id INT(16) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;')# 添加自增字段id