# Python-期末项目 **Repository Path**: orangezj/python---final-project ## Basic Information - **Project Name**: Python-期末项目 - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-23 - **Last Updated**: 2021-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python 语言基础项目技术文档 ## 一、项目介绍 ### 项目标题与简介 #### 1.项目标题:全国新型冠状病毒肺炎大数据可视化 - 前言:可能由于部分问题,pythonanywhere部署的网页里有些功能无法查看,详情请见我录制的视频。尽可能去挽回部署的分数。下面是录屏,还有一个是阿里云部署的网址 [Python中国疫情数据可视化展示](https://www.bilibili.com/video/BV1Lt4y1676W) [阿里云部署](http://47.119.112.106/) #### 2.简介 - 2020年,新型冠状病毒肺炎(COVID-19)肆虐,人类至今仍然生活在恐慌和不安之中;截至目前,新冠已造成全球一亿人被感染,相关死亡数高达213万人;入冬以来,新冠疫情的传播又进入了一次“小高潮”,最近在英国和南非发现的变异病毒也让疫情的防控形势变得更加严峻,全球范围的新冠疫情已接近“失控”,甚至在我国也出现了局部的疫情反弹。境外输入病例,携带病毒的各类进口商品,人数众多的无症状感染者 ![功能框架结构图](img/功能框架图.png) - 为了更好的了解新冠疫情,我利用从各方网站上的数据,制作了中国疫情数据可视化的网站 ## 二、问题表述 - 本python项目主要通过网络爬虫抓取网络上的天气预报信息,为用户提供实时的全国疫情情况。 | 序号 | 用户身份 | 用户需求 | 解决方案 | | --- | --- | --- | --- | | 1 | 学生家长 | 在上课或上班期间,或者返校返工期间查询相关地区的疫情状况。 | 直观的疫情显示,可以更简单的了解和做到更好的预防措施。 | | 2 | 旅行爱好者 | 想要简单的去近距离的短途旅游,避开疫情的地方。 | 更好的选择目的地,避开疫情地区,去无症状地区旅游| ### 三、解决方案 本项目主要使用了数据库技术,Python语言以及Flask web框架,以及Pyecharts,request库。 数据库:mysql,用于存储用户细腻些 request库:用于从网站上获取数据 Flask框架:制作web页面 pyecharst:用于绘制图标 项目涉及到的Python基础知识有,三种结构,字典列表等数据类型,以及爬虫技术。 - 连接到数据库 ``` db = pymysql.connect(host="localhost", user="root", password="1234", database="epidemic") app = Flask(__name__) app.config['SECRET_KEY'] = '123456' cur = db.cursor() ``` - 爬虫获取页面数据并保存,暂存后面取值用。 ``` def getepodemicdata(): """ 爬虫获取数据 :return: html """ s = requests.session() url = "https://3g.dxy.cn/newh5/view/pneumonia" response = s.get(url) response.encoding = 'utf-8' html = response.text return html ``` - 连接数据库,点击注册时,用户注册输入的账号密码保存在数据库中,登录时验证账号密码是否对应 ``` @app.route('/') def login(): return render_template('index.html') @app.route('/login/', methods=['GET', 'POST']) def my_login(): if request.method == "GET": return render_template('index.html') else: username = request.form.get('username') password = request.form.get('password') print(username, password) cur.execute("select * from user where username = %s", (username)) user = cur.fetchone() print(user) if user: if user[2] == password: session['username'] = username session['password'] = password session['user_id'] = user[0] print('运行到这里了') return render_template('bigdata.html') else: return "密码错误" else: return "用户名不存在" ``` - 数据应用 ```python def get_everyday_data(request): ''' 获得各省每天新增疫情和累计疫情,做趋势图用 :param request: :return: JSON数据 ''' allcity_everyday_data = {} for province in list(jsonurl.keys()): res = requests.get(jsonurl[province]).json() everyday_data = [] everyday_dead = [] everyday_cure = [] everyday_add = [] total_data = [] total_dead = [] total_cure = [] one_province_data = {} for everyday in res['data']: everyday_data.append(everyday['dateId']) everyday_dead.append(everyday['deadIncr']) everyday_cure.append(everyday['curedIncr']) everyday_add.append(everyday['confirmedIncr']) total_data.append(everyday['confirmedCount']) total_dead.append(everyday['deadCount']) total_cure.append(everyday['curedCount']) one_province_data['everyday_data'] = everyday_data one_province_data['everyday_dead'] = everyday_dead one_province_data['everyday_cure'] = everyday_cure one_province_data['everyday_add'] = everyday_add one_province_data['total_data'] = total_data one_province_data['total_dead'] = total_dead one_province_data['total_cure'] = total_cure allcity_everyday_data[dict1[province]] = one_province_data return JsonResponse({'allcity_everyday_data': allcity_everyday_data}) ``` ### 四、编程功能的基本描述 | 知识点 | 项目比重 | 自学时长 | | --- | --- | --- | | python网络爬虫 | 30% | 12课时 | | 数据库的使用 | 40% | 5课时 | | pythonanywhere部署 | 10% | 5课时 | | python函数 遍历 if判断 字符串方法 | 15% | 5个课时 | | html5 css | 5% | 5个课时 | 可参考以下文档 1.《[数据库的基础学习](https://blog.csdn.net/qq_38409944/article/details/78952051)》 2.《[如何0基础自学mysql](https://www.zhihu.com/question/34840297)》 3.《[爬虫抓取数据的简单实现](https://www.cnblogs.com/ao-xiang/p/6601228.html)》 4.《[python爬虫的入门课程](http://c.biancheng.net/view/2011.html)》 5.《[html 菜鸟教程](https://www.runoob.com/html/html-tutorial.html)》 6.《[css 菜鸟教程](https://www.runoob.com/html/html-tutorial.html)》 7《[html W3c school](https://www.w3cschool.cn/html/)》 8《[python3 菜鸟教程](https://www.runoob.com/?s=python3)》 ## 五、pythonanywhere部署心得 1. 进入pythonanywhere官网,进行注册免费账号,在注册完成后,会显示注册失败,这时对pythonanywhere进行反馈,并输入自己的邮箱,等待pythonanywhere的反馈邮件进行激活。 2. 因为pythonanywhere的python版本是2.7,但我们的python版本是python3,所以需要在pythonamywhere创造新环境具体可以参考《[手把手pythonanywhere上部署flask](https://www.yuque.com/lokkk/mzsyqp/yowp7q/edit)》,因为我的作品需要用到mysql,所以需要pip install mysql 3. 先创建一个文件夹,压缩自己的本地项目文件,以zip形式上传到pythonanywhere,重新进入consoles并解压zip,解压后的文件放入刚刚的文件夹中 4. add a new web app 选择对应自己本地版本的flask,设置路径。 5. 返回SWGI configuration file修改相应路径,然后进入后将最后一行代码改为-from app import app as application,最后保存。 6. 点击reload按钮,部署完成。 7.![数据流程图](img/数据流程图.png) 首页链接:http://izjctop000.pythonanywhere.com/ 注册页面链接:http://izjctop000.pythonanywhere.com/register/ 疫情展示页面:http://izjctop000.pythonanywhere.com/index/ 爬取的页面 :https://3g.dxy.cn/newh5/view/pneumonia https://file1.dxycdn.com https://c.m.163.com/ug/api/wuhan/app/data/list-total ### 六、学习/实践心得总结及感谢 - 做python的期末项目说实话压力巨大,时间虽然充裕,但是遇到的问题太多太多,实时疫情的数据,还有处理都是初学,在师兄师姐的帮助下完成的,太多东西时间需要实践中探索,花费的时间也是巨大的,熬夜伴随着期末项目以来的日日夜夜。可能还有有些部署问题的未完成,但还需要继续探索。 感谢: - 1、感谢 ***许智超老师*** ***游鸽老师*** 的辛勤教导,许老师对课堂教学的认真对待,备课的内容充实且更易懂,老师也知道我们这学期那么多门代码课的不容易,上课也加倍负责讲课内容的充实性。再次感谢两位老师对我们这学期的谆谆教导。 - 2、感谢所有给予我帮助与指导的同学、丘天惠学长和罗冰楠师学姐,当我遇到不懂不理解的地方,他们都会跟我再次讲述知识点,应用他们在数据分析课上的知识,和pyecharst地图绘制的内容帮我解决数据难题。 - 3.感谢参与本项目评分的同学 ,感谢他们在此项目上的思考和指导,感谢他们给出合理的分数。 - 4.感谢爬取页面收集数据,没有数据我做不成这个图。本项目比较出彩的地方是,用地图形式展示了疫情分布情况,而且你点击省份地图,可以实现地图下钻,进入省份地图,点标题可以返回上级地图,我认为这是很好的一个功能。 - 5.感谢感谢上述所引用的所有文档及作者,下面再一次列举 1.《[数据库的基础学习](https://blog.csdn.net/qq_38409944/article/details/78952051)》 2.《[如何0基础自学mysql](https://www.zhihu.com/question/34840297)》 3.《[爬虫抓取数据的简单实现](https://www.cnblogs.com/ao-xiang/p/6601228.html)》 4.《[python爬虫的入门课程](http://c.biancheng.net/view/2011.html)》 5.《[html 菜鸟教程](https://www.runoob.com/html/html-tutorial.html)》 6.《[css 菜鸟教程](https://www.runoob.com/html/html-tutorial.html)》 7《[html W3c school](https://www.w3cschool.cn/html/)》 8《[python3 菜鸟教程](https://www.runoob.com/?s=python3)》