用Python分析新冠疫情数据
前提摘要
前不久,新冠肺炎爆发,每天都密切关注着疫情的实时数据。
但是,当时各大平台上的数据分析并没有那么详细,仅仅给出了统计数字。
*在家,闲着无聊,于是我就想分析一下各个地区的具体情况,比如确诊人数占比,治愈率,死亡率啊,这都是各平台没有直接给出的,就有了上一篇C++版本的代码:用C++分析新冠疫情数据。
但是用C++不太好写爬虫,于是我就开始关注Python这门语言。
早上,我决定开始学习Python,就上C语言中文网看教程。
中午,我决定要把我上一版C++的程序翻译成Python,于是一边查资料,一边翻译。
在晚上就完成了代码的翻译工作,并测试通过。过几天看看能不能加上爬虫的功能。
代码部分
#建立一个省/市的类
class Province :
def __init__(self,Name,New,Diagnosis,Cured,Dead):#双下划线
self.Name=Name
self.New=New
self.Diagnosis=Diagnosis
self.Cured=Cured
self.Dead=Dead
def input(self):
self.Name=input()
self.New,self.Diagnosis,self.Cured,self.Dead=map(int,input().split())
#用字典建立多个对象
d={}
def nation():
print("请录入34个省级行政区的疫情信息:\n省 新增 确诊 治愈 死亡")
for i in range(34):
d[i]=Province("省份",0,0,0,0)
total=0
total1=0
total2=0
total3=0
for i in range(34):
d[i].input()
total=total+d[i].Diagnosis
total1=total1+d[i].Cured
total2=total2+d[i].Dead
total3=total3+d[i].New
print("---------------------------------------------------------------")
print("全国\n新增:",total3,"\n确诊:",total,"\n治愈:",total1,"\n死亡:",total2)
print("---------------------------------------------------------------")
print("省\t新增\t确诊\t治愈\t死亡\t占比\t治愈率\t死亡率")
for i in range(0,34):
a='{:.2%}'.format(d[i].Diagnosis/total)
b='{:.2%}'.format(d[i].Cured/d[i].Diagnosis)
c='{:.2%}'.format(d[i].Dead/d[i].Diagnosis)
#c=round(d[i].Dead/total2*100,2)
print(d[i].Name,d[i].New,d[i].Diagnosis,d[i].Cured,d[i].Dead,a,b,c,sep='\t')
print("---------------------------------------------------------------")
j=(total1-d[0].Cured)/(total-d[0].Diagnosis)
k=(total2-d[0].Dead)/(total-d[0].Diagnosis)
e='{:.2%}'.format((total-d[0].Diagnosis)/total)
f='{:.2%}'.format(j)
g='{:.2%}'.format(k)
print("除湖北",(total3-d[0].New),total-d[0].Diagnosis,total1-d[0].Cured,total2-d[0].Dead,e,f,g,sep='\t')
def hubei():
print("请录入17个市的疫情信息:\n市 新增 确诊 治愈 死亡")
for i in range(18):
d[i]=Province("市",0,0,0,0)
total=0
total1=0
total2=0
total3=0
for i in range(18):
d[i].input()
total=total+d[i].Diagnosis
total1=total1+d[i].Cured
total2=total2+d[i].Dead
total3=total3+d[i].New
print("---------------------------------------------------------------")
print("湖北\n新增:",total3,"\n确诊:",total,"\n治愈:",total1,"\n死亡:",total2)
print("---------------------------------------------------------------")
print("市\t新增\t确诊\t治愈\t死亡\t占比\t治愈率\t死亡率")
for i in range(0,18):
a='{:.2%}'.format(d[i].Diagnosis/total)
b='{:.2%}'.format(d[i].Cured/d[i].Diagnosis)
c='{:.2%}'.format(d[i].Dead/d[i].Diagnosis)
#c=round(d[i].Dead/total2*100,2)
print(d[i].Name,d[i].New,d[i].Diagnosis,d[i].Cured,d[i].Dead,a,b,c,sep='\t')
print("---------------------------------------------------------------")
j=(total1-d[0].Cured)/(total-d[0].Diagnosis)
k=(total2-d[0].Dead)/(total-d[0].Diagnosis)
e='{:.2%}'.format((total-d[0].Diagnosis)/total)
f='{:.2%}'.format(j)
g='{:.2%}'.format(k)
print("除武汉",(total3-d[0].New),total-d[0].Diagnosis,total1-d[0].Cured,total2-d[0].Dead,e,f,g,sep='\t')
#main函数
print("---------------------------------------------------------------")
print("新冠肺炎疫情分析系统\n1)全国分析\n2)湖北分析\n请选择要进行的操作:")
case=input()
print(case)
if case=="1":#双引号
nation()
else:
hubei()
用户界面
数据来源及数据处理
数据来源:百度-最新疫情地图实时数据报告
数据处理:在文本文档中将tab替换为空格,然后将“-”替换为“0”,复制粘贴即可。
数据展示
2月23日数据
总结
1.无需对类的各种属性进行声明
2.构造函数__init__()是双下划线,不是单下划线。
3.self相当于C++的this指针,类的成员函数第一个参数必须是self
4.Python没有结构体,可以用类来代替。难点是创建多个类的对象。
总不能一个一个手动创建吧,那多麻烦。可以用字典来存放。
字典键(key)存放对象名,字典值(value)存放对象。
5.由于Python是传对象引用,函数外数字类型的total是按值传递,函数不能改变
函数外部的全局变量total的值,所以只能在函数内部换用局部变量。
6.字符串用双引号
7.Python的for循环和C++的不同
//Python
for i in range(34)
//C++
for(int i=0;i<34;i++)
8.Python用缩进代替了C++的括号,并且省略了分号,编写时要特别注意。
9.括号过多时,可以把其中一部分整体取出来用字母替代。
10.输出一行数据时,各数据的间隔可以用空格也可以用tab,设置方法:print()函数中末尾加sep='\t'或sep' '。
11.输出百分数的格式:
a='{:.2%}'.format(一个小数)//控制在小数点后两位
12.Python没有Switch-Case结构。
13.还好昨天复习了一下C++的类和对象,不然都忘记了。不过,这个程序好像不一定要用类来写吧,可能我写复杂了。
写在最后
希望疫情快快结束吧,我想回学校了QAQ