欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用Python分析新冠疫情数据

程序员文章站 2024-03-20 15:17:04
...

前提摘要

前不久,新冠肺炎爆发,每天都密切关注着疫情的实时数据。

但是,当时各大平台上的数据分析并没有那么详细,仅仅给出了统计数字。

*在家,闲着无聊,于是我就想分析一下各个地区的具体情况,比如确诊人数占比,治愈率,死亡率啊,这都是各平台没有直接给出的,就有了上一篇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()

用户界面

用Python分析新冠疫情数据

数据来源及数据处理

数据来源:百度-最新疫情地图实时数据报告

数据处理:在文本文档中将tab替换为空格,然后将“-”替换为“0”,复制粘贴即可。

数据展示

2月23日数据

用Python分析新冠疫情数据

用Python分析新冠疫情数据

总结

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

相关标签: 写着好玩 Python