python数据分析案例简单实战项目(二)--新冠疫情数据分析

项目背景

2020 年 1 月新型冠状病毒(以下简称新冠)肺炎在极短时间内就在全球范围内大规模流行,据美国约翰斯·霍普金斯大学 11 月 8 日发布的新冠疫情最新统计数据显示,截至美国东部时间 11 月 8 日 11 时 24 分全球累计确诊人数超过 5000万,死亡人数超过125万。由于新冠病毒的传播速度快、致死率较高,世界卫生组织称新冠是百年一遇的人类公敌。自新冠肺炎爆发以来,面对社会对疫情信息的迫切需求,各级政府部门通过多种渠道及时发布第一手相关数据,许多组织和个人也迅速行动,利用多种分析手段为公众提供疫情数据的解读分析,以消除公众的恐慌情绪,提高人们的自我防护意识,配合政府的防疫措施,为我国最终打赢疫情防控阻击战发挥了巨大的推动作用。

项目目标

1.根据附件1中“城市疫情”的数据统计各城市自首次通报确诊病例后至 6 月 30日的每日累计确诊人数、累计治愈人数和累计死亡人数,将结果保存为“task3_1.csv”,第一行为字段名,按城市、日期、累计确诊人数、累计治愈人数、累计死亡人数的次序分别放在 A 列~E 列。在报告中给出实现方法的相关描述,并列表给出武汉、深圳、保定每月 10、25 日的统计结果。

实现思路:对城市进行分组,获得单个城市的所有数据,传入时间遍历处理函数,按照日期从1-10到6-30进行遍历,找到对应日期进行累加。

处理完之后判断是否是三城市之一,传输另外的处理函数,输出10、25日的统计结果,存在一个新的表中。

import pandas as pd
import datetime

fileName = '附件1.xlsx'


def opfile(fileName):
    data = pd.read_excel(fileName)
    return data


def rename(data):
    data.rename(columns={'新增确诊': '累计确诊人数'}, inplace=True)  # 更改列标签
    data.rename(columns={'新增治愈': '累计治愈人数'}, inplace=True)  # 更改列标签
    data.rename(columns={'新增死亡': '累计确诊死亡'}, inplace=True)  # 更改列标签


def special(data, city):
    data['日期'] = pd.to_datetime(data['日期'])
    da1 = data.set_index('日期')
    s1 = da1['2020-01-10':'2020-01-10']
    for i in range(1, 7):  # 数据是从20年1月到6月的 故range(1,7)
        s = da1['2020-0{}-15'.format(i):'2020-0{}-15'.format(i)]
        s1 = pd.concat([s1, s], axis=0, join='outer')  # 数据合并
        s = da1['2020-0{}-10'.format(i + 1):'2020-0{}-10'.format(i + 1)]
        s1 = pd.concat([s1, s], axis=0, join='outer')
    #print(s1)
    s1.to_csv(r"task3_1_1.csv", index=True, header=1 if city == '武汉' else 0, na_rep='0', encoding='GB18030', mode='a')


def calculate(data):
    for i in range(0, len(data["城市"].value_counts())):
        da = data[data["城市"] == data["城市"].value_counts().index[i]]#得到只有一个城市的数据
        ans = timefor(da).set_index('城市')
        ans.to_csv(r"task3_1.csv", index=True, header=1 if i==0 else 0, na_rep='0', encoding='GB18030', mode='a')


def timefor(data):
    begin = datetime.date(2020, 1, 10)
    end = datetime.date(2020, 6, 30)
    d = begin
    list1 = ['武汉', '深圳', '保定']
    city = data['城市'].iloc[0]

    print(city)
    delta = datetime.timedelta(days=1)#日期每天加1
    temp = pd.DataFrame(data=None, columns=['日期', '城市', '累计确诊人数', '累计治愈人数', '累计确诊死亡'])

    i = 0
    j = 0

    while d <= end:
        if d in data['日期'].values:
            if j == 0:
                temp.loc[j] = [d, city, data['累计确诊人数'].iloc[i], data['累计治愈人数'].iloc[i], data['累计确诊死亡'].iloc[i]]
            else:
                temp.loc[j] = [d, city, temp.loc[j-1]['累计确诊人数'] + data['累计确诊人数'].iloc[i], temp.loc[j-1]['累计治愈人数'] + data['累计治愈人数'].iloc[i], temp.loc[j-1]['累计确诊死亡'] + data['累计确诊死亡'].iloc[i]]
            i += 1
        else:
            if j == 0:
                temp.loc[j] = [d, city, 0, 0, 0]
            else:
                temp.loc[j] = [d, city, temp.loc[j-1]['累计确诊人数'], temp.loc[j-1]['累计治愈人数'], temp.loc[j-1]['累计确诊死亡']]
        j += 1
        d += delta
    if city in list1:
        special(temp, city)
    return temp


if __name__ == '__main__':
    data = opfile(fileName)
    rename(data)
    data['日期'] = pd.to_datetime(data['日期'], format='%Y-%m-%d').dt.date
    calculate(data)


你可能感兴趣的:(python)