2020年美国新冠肺炎疫情数据分析

本实验通过Spark对2020年美国新冠肺炎疫情数据进行分析,包括统计累计确诊和死亡人数、新增人数、各州数据以及病死率等,并利用pyecharts进行数据可视化,展示了各种图表结果。
摘要由CSDN通过智能技术生成

实验目的

本次实验对2020年美国新冠肺炎疫情数据进行分析。2020截至美国东部时间2020年12月27日12时22分(北京时间28日1时22分),美国新型冠状病毒肺炎累计确诊病例19016301例,累计死亡病例332251例。美国是全球累计确诊病例数和累计死亡病例数最多的国家。如此庞大的数据看起来令人感到不安和感叹。
实验将主要统计以下指标:统计美国截止每日的累计确诊人数和累计死亡人数;统计美国每日的新增确诊人数和新增死亡人数;统计截止5.19日,美国各州的累计确诊人数和死亡人数;美国确诊人数最多的十个州;美国死亡人数最多的十个州;美国确诊人数最少的十个州;美国死亡人数最少的十个州;全美和各州的病死率。

实验环境

(1)Linux:Ubuntu Kylin 14.04
(2)Hadoop2.10.0
(3)Python:3.6
(4)Spark:2.4.0

实验环境问题与解决

Ubuntu Kylin 14.04系统自带Python为Python2.7和Python3.4版本,Python3.4版本安装不了最新的pip,并且Python第三方可视化工具pyecharts可能回无法使用。

解决方法

Ubuntu14可以在软件库安装Python3.6,并且Python是最新的pip支持的最低版本。
查询当前版本是否是Python3.6以上,代码如下:

python3 -V

安装Python3.6

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6
sudo apt-get install python3.6-gdbm

Python3重新指向Python3.6

sudo rm /usr/bin/python3
sudo ln -s python3.6 /usr/bin/python3

python3.6安装pip

wget https://bootstrap.pypa.io/pip/get-pip.py
sudo pyhon3 get-pip.py

安装pip报错提示/usr/lib/python3/dist-packages/pkg_resources.py错误,执行下面代码

sudo vim /usr/lib/python3/dist-packages/pkg_resources.py

定位到这段,注释掉import importlib._bootstrap as importlib_bootstrap,下面添加importlib_bootstrap = None
在这里插入图片描述
保存退出,重新安装pip

数据集获取和上传到HDFS

数据集下载

本次作业使用的数据集来自数据网站Kaggle的美国新冠肺炎疫情数据集,该数据集以数据表us-counties.csv组织,其中包含了美国发现首例新冠肺炎确诊病例至今(2020-05-19)的相关数据。数据包含以下字段:
字段名称 字段含义 例子
date 日期 2020/1/21;2020/1/22;etc
county 区县(州的下一级单位) Snohomish;
state 州 Washington
cases 截止该日期该区县的累计确诊人数 1,2,3…
deaths 截止该日期该区县的累计确诊人数 1,2,3…
在这里插入图片描述
将数据集us-counties.csv放在/home/hadoop下

数据格式转换

原始数据集是以.csv文件组织的,为了方便spark读取生成RDD或者DataFrame,首先将us-counties.csv转换为.txt格式文件us-counties.txt。转换操作使用python实现,代码组织在toTxt.py中,具体代码如下:

import pandas as pd
 
#.csv->.txt
data = pd.read_csv('/home/hadoop/us-counties.csv')
with open('/home/hadoop/us-counties.txt','a+',encoding='utf-8') as f:
    for line in data.values:
        f.write((str(line[0])+'\t'+str(line[1])+'\t'
                +str(line[2])+'\t'+str(line[3])+'\t'+str(line[4])+'\n'))

这里需要Python安装pandas模块才能成功执行数据转换,并且需要用Python3执行代码,具体安装方法:

sudo pip install pandas
sudo pip3.6 install pandas

数据文件上传至HDFS中

启动Hadoop,然后使用如下命令把本地文件系统的“/home/hadoop/us-counties.txt”上传到HDFS文件系统中,具体路径是“/user/hadoop/us-counties.txt”。具体命令如下:

ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh
./bin/hdfs dfs -put /home/hadoop/us-counties.txt /user/hadoop

使用Spark对数据分析处理

通过Spark根据目标要求处理数据

本部分操作的完整实验代码存放在了analyst.py中,具体如下:

from pyspark import SparkConf,SparkContext
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark.sql import SparkSession
from datetime import datetime
import pyspark.sql.functions as func
 
def toDate(inputStr):
    newStr = ""
    if len(inputStr) == 8:
        s1 = inputStr[0:4]
        s2 = inputStr[5:6]
        s3 = inputStr[7]
        newStr = s1+"-"+"0"+s2+"-"+"0"+s3
    else:
        s1 = inputStr[0:4]
        s2 = inputStr[5:6]
        s3 = inputStr[7:]
        newStr = s1+"-"+"0"+s2+"-"+s3
    date = datetime.strptime(newStr, "%Y-%m-%d")
    return date
 
 
 
#主程序:
spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()
 
fields = [StructField("date", DateType(),False),StructField("county", StringType(),False),StructField("state", StringType(),False),
                    StructField("cases", IntegerType(),False),StructField("deaths", IntegerType(),False),]
schema = StructType(fields)
 
rdd0 = spark.sparkContext.textFile("/user/hadoop/us-counties.txt")
rdd1 = rdd0.map(lambda x:x.split("\t")).map(lambda p: Row(toDate(p[0]),p[1],p[2],int(p[3]),int(p[4])))
 
 
shemaUsInfo = spark.createDataFrame(rdd1,schema)
 
shemaUsInfo.createOrReplaceTempView("usInfo"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值