基于spark對(duì)美國(guó)新冠肺炎疫情數(shù)據(jù)分析
GCC的同學(xué)不要抄襲呀?。?!嚴(yán)禁抄襲
有任何學(xué)習(xí)問(wèn)題可以加我微信交流哦!bmt1014
前言
2020年美國(guó)新冠肺炎疫情是全球范圍內(nèi)的一場(chǎng)重大公共衛(wèi)生事件,對(duì)全球政治、經(jīng)濟(jì)、社會(huì)等各個(gè)領(lǐng)域都產(chǎn)生了深遠(yuǎn)影響。在這場(chǎng)疫情中,科學(xué)家們發(fā)揮了重要作用,積極探索病毒特性、傳播機(jī)制和防控策略,并不斷推出相關(guān)研究成果。
本篇論文旨在使用 Spark 進(jìn)行數(shù)據(jù)處理分析,以了解2020年美國(guó)新冠肺炎疫情在該國(guó)的傳播情況,并探討各州疫情數(shù)據(jù)之間的相互關(guān)系。在數(shù)據(jù)處理和可視化方面采用 Spark 和 Python 技術(shù)進(jìn)行實(shí)現(xiàn)。
通過(guò)對(duì)數(shù)據(jù)的收集、清理、整合和分析,希望能夠更全面地了解該疫情在美國(guó)的傳播情況,為疫情防控提供數(shù)據(jù)支持和指導(dǎo),同時(shí)也為數(shù)據(jù)分析領(lǐng)域的技術(shù)應(yīng)用提供一個(gè)實(shí)際案例。
1、需求分析
對(duì)美國(guó)2020年新冠新冠肺炎確診病例進(jìn)行數(shù)據(jù)分析,以Python為編程語(yǔ)言,使用Spark對(duì)數(shù)據(jù)進(jìn)行分析,描述分析結(jié)果,并且用python對(duì)分析結(jié)果進(jìn)行可視化。主要有以下兩個(gè)方面的分析:
時(shí)間趨勢(shì)分析:分析每日/每周/每月的新增確診病例數(shù)、治愈率和死亡率的變化趨勢(shì),以及與時(shí)間相關(guān)的其他指標(biāo)。
地理分布分析:分析不同州/城市的確診病例數(shù)、死亡數(shù)、治愈數(shù)等,探究地域差異與人口密度等因素的關(guān)系。為今后疫情防控提供經(jīng)驗(yàn)和參考。
1.1數(shù)據(jù)來(lái)源
使用的數(shù)據(jù)集來(lái)自數(shù)據(jù)網(wǎng)站Kaggle的美國(guó)新冠肺炎疫情數(shù)據(jù)集(從學(xué)習(xí)通-期末大作業(yè)中下載數(shù)據(jù)集),該數(shù)據(jù)集以數(shù)據(jù)表us-counties.csv組織,其中包含了美國(guó)發(fā)現(xiàn)首例新冠肺炎確診病例至2020-05-19的相關(guān)數(shù)據(jù)。數(shù)據(jù)包含以下字段:
字段名稱(chēng) 字段含義 例子
date 日期 2020/1/21;2020/1/22;
county 區(qū)縣(州的下一級(jí)單位) Snohomish;
state 州 Washington
cases 截止該日期該區(qū)縣的累計(jì)確診人數(shù) 1,2,3…
deaths 截止該日期該區(qū)縣的累計(jì)死亡人數(shù) 1,2,3…
部分?jǐn)?shù)據(jù)如圖:
圖1-us-counties.csv文件數(shù)據(jù)圖
1.2具體要求和目標(biāo)
1)原始數(shù)據(jù)集是以.csv文件組織的,為了方便spark讀取生成RDD或者DataFrame,首先將csv轉(zhuǎn)換為.txt格式文件。轉(zhuǎn)換操作使用python實(shí)現(xiàn)。
2)將文件上傳至HDFS文件系統(tǒng)中,路徑為:“/user/hadoop/us-counties.txt”
3)采用編程方式讀取us-counties.txt生成DataFrame。
4)使用Spark對(duì)數(shù)據(jù)進(jìn)行分析。主要統(tǒng)計(jì)以下指標(biāo),所有結(jié)果保存為.json文件,分別是:
(1)統(tǒng)計(jì)美國(guó)各州的累計(jì)確診人數(shù)和死亡人數(shù)和病死率,并將 結(jié)果保存到Mysql數(shù)據(jù)庫(kù)中。
(2)統(tǒng)計(jì)美國(guó)確診人數(shù)最多的十個(gè)州。
(3)統(tǒng)計(jì)美國(guó)死亡人數(shù)最多的十個(gè)州。
(4)統(tǒng)計(jì)美國(guó)確診人數(shù)最少的十個(gè)州。
5)將Spark計(jì)算結(jié)果.json文件下載到本地文件夾。對(duì)結(jié)果進(jìn)行數(shù)據(jù)可視化。
6)程序源代碼要求關(guān)鍵代碼有行注釋?zhuān)瘮?shù)有IPO注釋?zhuān)?lèi)和對(duì)象有屬性注釋、方法注釋。
2、總體設(shè)計(jì)
2.1本次實(shí)驗(yàn)所用環(huán)境
(1)Oracle VM VirtualBox虛擬機(jī)
(2)Ubuntu系統(tǒng)
(3)Hadoop2.10.0 ,MySQL
(4)使用Python: 3.8
(5)Spark: 2.4.7
(6)Anaconda和Jupyter Notebook
2.2實(shí)現(xiàn)流程
圖2-流程圖
3、詳細(xì)設(shè)計(jì)
3.1 使用python對(duì)文件類(lèi)型轉(zhuǎn)換
代碼:
import pandas as pd
data = pd.read_csv(“us-counties.csv”)
file_dir = ‘./’
data.to_csv(file_dir + ‘us-counties.txt’, sep=‘\t’,index=False, header = True)
運(yùn)行之后在同級(jí)目錄下多了一個(gè)us-counties.txt文件
3.2 上傳文件到hdfs
通過(guò)設(shè)置共享文件夾,將windows的us-counties.txt文件上傳到Ubuntu系統(tǒng)上
代碼:
sudo mount -t vboxsf sharefile /home/hadoop/下載
其中sharefile為共享文件夾路徑,/home/hadoop/下載路徑為虛擬機(jī)路徑
切換到hadoop目錄,啟動(dòng)hdfs
代碼:
cd /usr/local/hadoop/
./sbin/start-all.sh
新開(kāi)一個(gè)終端,將us-counties.txt文件上傳到hdfs
代碼:
cd /usr/local/hadoop/
./bin/hdfs dfs -put /home/hadoop/文檔/us-counties.txt /user/hadoop/
./bin/hdfs dfs -ls /user/hadoop/
3.3 啟動(dòng)mysql和pyspark
啟動(dòng)mysql
mysql -u root -p
啟動(dòng)pyspark
cd /usr/local/spark
./bin/pyspark
3.4 pyspark讀取數(shù)據(jù)并且分析
(1)統(tǒng)計(jì)美國(guó)各州的累計(jì)確診人數(shù)和死亡人數(shù)和病死率,并將結(jié)果保存到Mysql數(shù)據(jù)庫(kù)中
代碼:
讀取txt文件
rdd = spark.sparkContext.textFile(“/user/hadoop/us-counties.txt”)
將數(shù)據(jù)轉(zhuǎn)換為DataFrame格式
df = rdd.map(lambda x: x.split(“\t”))
schemaString = “date country state cases deaths”
fields = [StructField(field_name,StringType(),True) for field_name in schemaString.split(" ")]
schema = StructType(fields)
df = df.map(lambda p:Row(p[0],p[1],p[2],p[3],p[4]))
df = spark.createDataFrame(df,schema) #將表頭和數(shù)據(jù)進(jìn)行連接
將數(shù)據(jù)類(lèi)型轉(zhuǎn)換為對(duì)應(yīng)的類(lèi)型
df = df.withColumn(“cases”, df[“cases”].cast(“int”))
df = df.withColumn(“deaths”, df[“deaths”].cast(“int”))
df = df.withColumn(“date”, df[“date”].cast(“date”))
統(tǒng)計(jì)美國(guó)各州的累計(jì)確診人數(shù)和死亡人數(shù)和病死率
from pyspark.sql.functions import when
from pyspark.sql.functions import format_string
result1 = df.groupBy(“state”).sum(“cases”, “deaths”)
將分母為0的值轉(zhuǎn)換為0
result1 = result1.select(“state”, “sum(cases)”, “sum(deaths)”).withColumn(
“mortality_rate”,
when(result1[“sum(cases)”] == 0, 0).otherwise(result1[“sum(deaths)”]/result1[“sum(cases)”]))
#將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名為spark,表名為result1(表不用創(chuàng)建)
result1.write.format(“jdbc”).options(
url=“jdbc:mysql://localhost:3306/spark”,
driver=“com.mysql.jdbc.Driver”,
dbtable=“result1”,
user=“root”,
password=“1”
).mode(“overwrite”).save()
#將數(shù)據(jù)保存到Ubuntu本地
result1.repartition(1).write.format(“csv”).save(“file:///usr/local/test/result1.csv”)
(2)統(tǒng)計(jì)美國(guó)確診人數(shù)最多的十個(gè)州
代碼:
#根據(jù)state字段進(jìn)行分組,求和cases數(shù)據(jù),再根據(jù)求和的累計(jì)確診數(shù)據(jù)降序排序,取出前10
result2 = df.groupBy(“state”).sum(“cases”).orderBy(“sum(cases)”, ascending=False).limit(10)
#將結(jié)果設(shè)置分區(qū)數(shù)為1,文件類(lèi)型為json,以覆蓋的方式寫(xiě)入
result2.repartition(1).write.format(“json”).mode(“overwrite”).save(“file:///usr/local/test/quezhentop10.json”)
(3)統(tǒng)計(jì)美國(guó)死亡人數(shù)最多的十個(gè)州
代碼:
#根據(jù)state字段進(jìn)行分組,求和deaths數(shù)據(jù),再根據(jù)求和的死亡最多的十個(gè)州數(shù)據(jù)降序排序,取出前10
result3 = df.groupBy(“state”).sum(“deaths”).orderBy(“sum(deaths)”, ascending=False).limit(10)
result3.repartition(1).write.format(“json”).mode(“overwrite”).save(“file:///usr/local/test/deathstop10.json”)
(4)統(tǒng)計(jì)美國(guó)確診人數(shù)最少的十個(gè)州
代碼:
#根據(jù)state字段進(jìn)行分組,求和cases數(shù)據(jù),再根據(jù)求和的確診數(shù)據(jù)升序排序,取出前10
result4 = df.groupBy(“state”).sum(“cases”).orderBy(“sum(cases)”).limit(10)
result4.repartition(1).write.format(“json”).mode(“overwrite”).save(“file:///usr/local/test/quezhenbot10.json”)
4、程序運(yùn)行結(jié)果測(cè)試與分析
4.1 使用python轉(zhuǎn)換txt文件類(lèi)型結(jié)果,如圖3所示
圖3-txt文件圖
4.2 啟動(dòng)hdfs,上傳文件
圖4-啟動(dòng)hdfs
圖5-上傳文件到hdfs圖
4.3 啟動(dòng)mysql和pyspark
如圖6、7
圖6-啟動(dòng)mysql圖
圖7-啟動(dòng)pyspark
4.4 統(tǒng)計(jì)美國(guó)各州的累計(jì)確診人數(shù)和死亡人數(shù)和病死率結(jié)果
在pyspark上查看結(jié)果,如圖8
圖8-累計(jì)確診、死亡、病死率圖
在mysql上查看數(shù)據(jù),如圖9
圖9-mysql累計(jì)確診、死亡、病死率圖
4.5 統(tǒng)計(jì)美國(guó)確診人數(shù)最多的十個(gè)州結(jié)果
如圖10
圖10-確診人數(shù)最多的十個(gè)州
4.6統(tǒng)計(jì)美國(guó)死亡人數(shù)最多的十個(gè)州結(jié)果
如圖11
圖11-死亡人數(shù)最多的十個(gè)州
4.7統(tǒng)計(jì)美國(guó)確診人數(shù)最少的十個(gè)州
如圖12
圖12-確診人數(shù)最少的十個(gè)州
4.8 pyecharts繪制累計(jì)確診數(shù)和死亡數(shù)的折線(xiàn)圖
如圖13:
圖13-計(jì)確診數(shù)和死亡數(shù)折線(xiàn)圖
在2020年3月份,隨著時(shí)間的增加,累計(jì)確診數(shù)也隨著不斷增加,死亡數(shù)也在4月初以后居高不下。
4.9 每個(gè)州的累計(jì)確診和死亡數(shù)的折線(xiàn)圖
如圖14、圖15:
圖14-累計(jì)確診和死亡數(shù)的折線(xiàn)圖一
圖15-累計(jì)確診和死亡數(shù)的折線(xiàn)圖二
可以看出每個(gè)州的確診人數(shù)都是隨著時(shí)間不斷上升。
4.10 各州的累計(jì)確診人數(shù)和死亡人數(shù)
如圖16
圖16-各州的累計(jì)確診人數(shù)和死亡人數(shù)
說(shuō)明:累計(jì)病例數(shù)和死亡人數(shù)呈高度正相關(guān)關(guān)系。這意味著如果一個(gè)州的累計(jì)病例數(shù)較高,則其死亡人數(shù)也可能較高。累計(jì)病例數(shù)和死亡人數(shù)的分布不均。例如,紐約州的累計(jì)病例數(shù)和死亡人數(shù)遠(yuǎn)高于其他州,而南達(dá)科他州的累計(jì)病例數(shù)和死亡人數(shù)則相對(duì)較低。
4.11確診數(shù)最多的20個(gè)州–詞云圖
如圖17
圖17-詞云圖
說(shuō)明:1、詞云圖中的字號(hào)和顏色反映了各州的確診數(shù)大小。字號(hào)越大表示該州的確診數(shù)越高,顏色較深則意味著該州在確診數(shù)排名中處于上位。從詞云圖可以看出,紐約州確診數(shù)明顯高于其他州。而其他州的確診數(shù)則相對(duì)較少
2、詞云圖中的字體名稱(chēng)和布局隨機(jī)生成,因此每次生成的詞云圖可能會(huì)不同,但是其反映的信息是一致的。
3、通過(guò)制作詞云圖,可以直觀地展示和比較各州之間的確診數(shù)差異,并有助于我們更好地理解和分析疫情的發(fā)展態(tài)勢(shì)。
4.12 美國(guó)死亡人數(shù)最多的十個(gè)州
如圖18
圖18-死亡人數(shù)最多的十個(gè)州
說(shuō)明:橫軸表示各州名稱(chēng),縱軸表示各州的死亡人數(shù)。
從柱狀圖可以看出,紐約州的死亡人數(shù)最多,達(dá)到了接近100萬(wàn)人,其余州的死亡人數(shù)相對(duì)較少。柱狀圖能夠使我們更好地了解疫情對(duì)不同州的影響程度,有助于政策制定者和公眾做出相應(yīng)的決策和行動(dòng)。在此基礎(chǔ)上,可以針對(duì)不同州的疫情情況采取有針對(duì)性的措施,以有效遏制病毒的傳播并保障公眾的健康安全。
4.13 美國(guó)各州死率圖
如圖19
圖19-各州死率圖
餅圖中的各個(gè)扇形表示不同的州,其面積大小對(duì)應(yīng)該州的死亡率。
從餅圖可以看出,紐約州的死亡率最高,達(dá)到了7%,其他州的死亡率相對(duì)較低。
4.14 美國(guó)累計(jì)死亡人數(shù)和死亡率餅圖
如圖20
圖20-累計(jì)死亡人數(shù)和死亡率餅圖
上圖展示了總死亡人數(shù)和未死亡人數(shù)的比例。餅圖中的兩個(gè)扇形表示死亡人數(shù)和未死亡人數(shù),其面積大小對(duì)應(yīng)該類(lèi)別的人數(shù)。從餅圖可以看出,截至目前為止,美國(guó)新冠肺炎的累計(jì)死亡人數(shù)占總病例數(shù)的比例約為4.7%,而未死亡的人數(shù)占比約為95.3%。
4.15 美國(guó)累計(jì)病例前十的州–漏斗圖
如圖21
圖21-漏斗圖
上圖展示了病例數(shù)前十的州的比較。漏斗圖中的每個(gè)環(huán)節(jié)代表一個(gè)州,其大小對(duì)應(yīng)該州的累計(jì)病例數(shù)。從漏斗圖可以看出,排名前三的州分別為紐約州、新澤西州和馬薩諸塞州,它們的累計(jì)病例數(shù)分別為1323萬(wàn)、488萬(wàn)和247萬(wàn)。
4.16 累計(jì)病例數(shù)最少的十個(gè)州
圖22
圖22-累計(jì)病例數(shù)最少的十個(gè)州
從柱狀圖可以看出,累計(jì)病例數(shù)最少的前三個(gè)州分別為北馬里亞納群島、維爾京群島和阿拉斯加,它們的累計(jì)病例數(shù)分別為689、3028和16291。
5、結(jié)論與心得
通過(guò)對(duì)美國(guó)新冠肺炎疫情數(shù)據(jù)的處理和分析,得出了以下結(jié)論和心得:
1、美國(guó)新冠肺炎疫情在2021年初期迅速蔓延,尤其是在東海岸地區(qū)。但到了夏季,疫情在一些州開(kāi)始有所緩解。
2、疫情對(duì)不同州的影響程度存在很大差異,一些州的死亡率和感染率明顯高于其他州。這與各州的人口密度、經(jīng)濟(jì)水平、醫(yī)療資源等因素有關(guān)。
3、社交距離和口罩等防護(hù)措施可以有效減緩病毒傳播速度,并降低死亡率和感染率。
4、對(duì)疫情數(shù)據(jù)的及時(shí)監(jiān)測(cè)和預(yù)警可以幫助政府和公眾做出更有效的防控決策。同時(shí),數(shù)據(jù)處理和分析技術(shù)在疫情防控中發(fā)揮著越來(lái)越重要的作用。
總之,美國(guó)新冠肺炎疫情數(shù)據(jù)分析不僅能夠?yàn)槲覀兏娴亓私庠撘咔樵谠搰?guó)的傳播情況,也能為疫情防控提供數(shù)據(jù)支持和指導(dǎo),并且能夠在數(shù)據(jù)分析領(lǐng)域中提供實(shí)際案例和技術(shù)應(yīng)用。
學(xué)到了以下幾點(diǎn):
1、數(shù)據(jù)清洗和預(yù)處理非常重要。在進(jìn)行數(shù)據(jù)分析前,需要對(duì)原始數(shù)據(jù)進(jìn)行清洗和預(yù)處理,包括去除缺失值、重復(fù)值、異常值等,以確保得到準(zhǔn)確和可靠的結(jié)果。
2、數(shù)據(jù)可視化可以更清晰地展現(xiàn)數(shù)據(jù)。通過(guò)將數(shù)據(jù)可視化并呈現(xiàn)在圖表中,可以更直觀地展現(xiàn)數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系和趨勢(shì),并有助于進(jìn)一步分析和推理。
3、分析方法和技術(shù)的選擇也很重要。在進(jìn)行數(shù)據(jù)分析時(shí),需要根據(jù)數(shù)據(jù)特點(diǎn)和問(wèn)題需求,選擇適合的分析方法和技術(shù),以獲得更精確和有意義的結(jié)論。
在實(shí)驗(yàn)過(guò)程中,我們遇到了一些困難,其中一個(gè)主要問(wèn)題是數(shù)據(jù)集的規(guī)模比較大,導(dǎo)致數(shù)據(jù)處理和計(jì)算花費(fèi)時(shí)間較長(zhǎng),影響了結(jié)果的準(zhǔn)確性和實(shí)驗(yàn)效率。
為解決這個(gè)問(wèn)題,我們采用了 Spark 技術(shù)進(jìn)行數(shù)據(jù)處理和分析,利用它的分布式計(jì)算能力來(lái)加速計(jì)算和提高效率。最終,我們成功地完成了實(shí)驗(yàn),并獲得了有意義的結(jié)果。
參考文獻(xiàn)
[1]楊偉民, 姚玉華, 劉憲鵬. “基于Spark的COVID-19數(shù)據(jù)分析與可視化展示.” 計(jì)算機(jī)應(yīng)用研究. 2020年, 第37卷第12期.
[2]林子雨、鄭海山、賴(lài)永炫.《Spark編程基礎(chǔ)(Python版)》[M]. 北京:人民郵電出版社,2020.
[3]林子雨.大數(shù)據(jù)技術(shù)原理與應(yīng)用[M].北京:人民郵電出版社,2017.
[4]https://blog.csdn.net/weixin_43385372/article/details/117608253文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-767164.html
有關(guān)于學(xué)習(xí)問(wèn)題的話(huà),可以加我微信交流bmt1014
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-767164.html
到了這里,關(guān)于基于spark對(duì)美國(guó)新冠肺炎疫情數(shù)據(jù)分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!