1. 程式人生 > 其它 >Python 使用爬蟲獲取新冠疫情歷史資料

Python 使用爬蟲獲取新冠疫情歷史資料

前言:

2019年底,一場突如其來的新冠疫情打破了人們準備歡度春節的節奏,許多人因為疫情無法過個好年,而接下來的疫情發展超出了所有人的預料...截至2021年6月,全球確診已達1億7000餘萬,在這次疫情中死去的人數三百餘萬...

我們每天都可以在各個新聞報道或者網站上看到疫情的實時資料,但這些資料大多是零碎的,我們無法直觀的感受這次疫情在全球範圍內的影響。

在學習了爬蟲以後,我們可以利用爬蟲獲取各個時間和各個地區的疫情情況,然後將這些資料視覺化,可以讓我們一目瞭然疫情動態,還可以加深我們對python的掌握和運用。

資料來源:

丁香醫生:https://ncov.dxy.cn/ncovh5/view/pneumonia

頁面分析:

要爬取網頁資料,首先要了解網頁結構和網頁的資料流,F12檢視網頁原始碼:

可以發現<script id="getListByCountryTypeService2true">這裡對應著每一個國家的相關資料,其中發現有一個屬性statisticsData,指向的是json資料鏈接:

隨便下載一個開啟看看:

Data中包含的欄位:

confirmedCount\confirmedIncr\curedCount\curedIncr\curentConfirmedCount\currentConfirmedIncr\dateId\deadCount\deadIncr\suspectedCount\suspectedCountIncr

頁面下方還有國內各個省市的資料:

同樣,這些資料後面statisticsData也指向一個json資料鏈接,檢視裡面的資料欄位。資料非常的全面,由此通過分析頁面我們找到了中國和世界的疫情詳細歷史資料。

下面開始爬取:

第一步

# 獲取網頁中包含資料鏈接的列表資訊

import requests

import re

import json

from bs4 import BeautifulSoup

def getOriHtmlText(url,code='utf-8'):

    try:

        headers = {

            'User-Agent
': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36' } r=requests.get(url,timeout=30,headers=headers) r.raise_for_status() r.encoding=code return r.text except: return "There are some errors when get the original html!" def getTheList(url): html=getOriHtmlText(url) soup=BeautifulSoup(html,'html.parser') htmlBodyText=soup.body.text # 獲取國家資料 worldDataText=htmlBodyText[htmlBodyText.find('window.getListByCountryTypeService2true = '):] worldDataStr = worldDataText[worldDataText.find('[{'):worldDataText.find('}catch')] worldDataJson=json.loads(worldDataStr) with open("../data/worldData.json","w") as f: json.dump(worldDataJson,f) print("寫入國家資料檔案成功!") # 獲取各省份資料 provinceDataText = htmlBodyText[htmlBodyText.find('window.getAreaStat = '):] provinceDataStr = provinceDataText[provinceDataText.find('[{'):provinceDataText.find('}catch')] provinceDataJson=json.loads(provinceDataStr) with open("../data/provinceData.json","w") as f: json.dump(provinceDataJson,f) print("寫入省份資料檔案成功!") getTheList("https://ncov.dxy.cn/ncovh5/view/pneumonia")

獲得兩個包含資料鏈接的.json檔案:

第二步

清洗資料獲得連結真實所對應的資料

# 處理所獲得的含連結的列表,獲取真實所對應的資料

import json

import requests

import time

def deal_worlddatalist():

    with open("../data/worldData.json",'r') as f:

        worldDataJson=json.load(f)

    for i in range(0,len(worldDataJson)):

        print(worldDataJson[i]['provinceName']+" "+worldDataJson[i]['countryShortCode']+" "+worldDataJson[i]['countryFullName']+" "+worldDataJson[i]['statisticsData'])

    return worldDataJson

def get_the_world_data():

    # 獲取每個國家對應的json

    worldDataJson=deal_worlddatalist()

    # 記錄錯誤數量

    errorNum=0

    for i in range(0,len(worldDataJson)):

        provinceName=worldDataJson[i]['provinceName']

        try:

            headers = {

                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'

            }

            r = requests.get(worldDataJson[i]['statisticsData'], timeout=30, headers=headers)

            r.raise_for_status()

            r.encoding = 'utf-8'

            everCountryDataJson = json.loads(r.text)

            toWriteFilePath="../data/worldData/"+provinceName+".json"

            with open(toWriteFilePath,'w') as file:

                json.dump(everCountryDataJson, file)

            print(provinceName + " 資料得到!")

            time.sleep(10)

        except:

            errorNum+=1

            print("在獲取 "+provinceName+" 資料時出錯!")

    print("各國資料獲取完成!")

    print("錯誤資料量為:"+str(errorNum))

# 處理各省資料列表

def deal_provincedatalist():

    with open("../data/provinceData.json",'r') as f:

        provinceDataJson=json.load(f)

    for i in range(0,len(provinceDataJson)):

        print(provinceDataJson[i]['provinceName']+" "+provinceDataJson[i]['provinceShortName']+" "+provinceDataJson[i]['statisticsData'])

    return provinceDataJson

# 獲取各個省份對應的json

def get_the_province_data():

    provinceDataJson=deal_provincedatalist()

    # 統計出現爬取錯誤的資料數量

    errorNum = 0

    for i in range(0,len(provinceDataJson)):

        provinceName=provinceDataJson[i]['provinceName']

        try:

            headers = {

                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'

            }

            r=requests.get(provinceDataJson[i]['statisticsData'],timeout=30,headers=headers)

            r.raise_for_status()

            r.encoding='utf-8'

            everProvinceDataJson=json.loads(r.text)

 

            toWriteFilePath="../data/provinceData/"+provinceName+".json"

            with open(toWriteFilePath,'w') as file:

                json.dump(everProvinceDataJson,file)

            print(provinceName+" 資料得到!")

            time.sleep(15)

        except:

            errorNum+=1

            print("在獲取 "+provinceName+" 資料時出錯")

    print("各省份資料獲取完成!")

    print("錯誤資料量為:"+str(errorNum))

get_the_world_data()

get_the_province_data()

成功獲取國內和外國疫情的json資料

獲取的資料都是json格式的,現在我們將資料匯入資料庫,這裡使用的是mysql,先給python安裝pymysql庫。

我們在目標資料夾建立一個.sql的檔案,用文字開啟編寫建表語句:

執行mysql,首先先建立一個數據庫

CREATE DATABASE test_db;
USE test_db;

CREATE TABLE china_provincedata(
  id INT PRIMARY KEY ,
  confirmedCount INT ,
  confirmedIncr INT,
  curedCount INT,
  curedIncr INT ,
  currentConfirmedCount INT ,
  currentConfirmedIncr INT ,
  dateId INT ,
  deadCount INT,
  deadIncr INT,
  suspectedCount INT,
  suspectedCountIncr INT,
  provinceName text,
  provinceShortName text
);

CREATE TABLE countrydata(
  id INT PRIMARY KEY ,
  confirmedCount INT ,
  confirmedIncr INT,
  curedCount INT,
  curedIncr INT ,
  currentConfirmedCount INT ,
  currentConfirmedIncr INT ,
  dateId INT ,
  deadCount INT,
  deadIncr INT,
  suspectedCount INT,
  suspectedCountIncr INT,
  countryName text,
  countryShortCode text,
  continent text,
  countryFullName text
);

CREATE TABLE world_total_data(
  id INT PRIMARY KEY ,
  confirmedCount INT ,
  confirmedIncr INT,
  curedCount INT,
  curedIncr INT ,
  currentConfirmedCount INT ,
  currentConfirmedIncr INT ,
  dateId INT ,
  deadCount INT,
  deadIncr INT,
  suspectedCount INT,
  suspectedCountIncr INT
)

進入資料庫後,執行這個檔案:source E:\MySQL\mysql-8.0.25-winx64\wpzy.sql

查看錶結構:show full columns from china_provincedata;

準備就緒,接下來進行第三步:將json寫入資料庫中

# 將json資料寫入資料庫

import json

import pymysql

import pandas as pd

nameMap = {'模里西斯':'Mauritius','聖皮埃爾和密克隆群島':'St. Pierre and Miquelon','安圭拉':'Anguilla','荷蘭加勒比地區':'Caribbean Netherlands','聖巴泰勒米島':'Saint Barthelemy','英屬維爾京群島':'British Virgin Is.','葛摩':'Comoros','蒙特塞拉特':'Montserrat','塞席爾':'Seychelles','特克斯和凱科斯群島':'Turks and Caicos Is.','梵蒂岡':'Vatican','聖其茨和尼維斯':'Saint Kitts and Nevis','庫拉索島':'Curaçao','多米尼克':'Dominica','聖文森及格瑞那丁':'St. Vin. and Gren.','斐濟':'Fiji','聖露西亞':'Saint Lucia','北馬裡亞納群島聯邦':'N. Mariana Is.','格林那達':'Grenada','安地卡及巴布達':'Antigua and Barb.','列支敦斯登':'Liechtenstein','聖馬丁島':'Saint Martin','法屬波利尼西亞':'Fr. Polynesia','美屬維爾京群島':'U.S. Virgin Is.','荷屬聖馬丁':'Sint Maarten','巴貝多':'Barbados','開曼群島':'Cayman Is.','摩納哥':'Monaco','阿魯巴':'Aruba','千里達及托巴哥':'Trinidad and Tobago','鑽石公主號郵輪':'Princess','瓜德羅普島':'Guadeloupe','關島':'Guam','直布羅陀':'Gibraltar','馬提尼克':'Martinique','馬耳他':'Malta','法羅群島':'Faeroe Is.','聖多美和普林西比':'São Tomé and Principe','安道爾':'Andorra','根西島':'Guernsey','澤西島':'Jersey','維德角':'Cape Verde','馬恩島':'Isle of Man','留尼旺':'Reunion','聖馬利諾':'San Marino','馬爾地夫':'Maldives','馬約特':'Mayotte','巴林':'Bahrain','新加坡': 'Singapore Rep.', '多明尼加': 'Dominican Rep.', '巴勒斯坦': 'Palestine', '巴哈馬': 'The Bahamas', '東帝汶': 'East Timor', '阿富汗': 'Afghanistan', '幾內亞比索': 'Guinea Bissau', '象牙海岸': "Côte d'Ivoire", '錫亞琴冰川': 'Siachen Glacier', '英屬印度洋領土': 'Br. Indian Ocean Ter.', '安哥拉': 'Angola', '阿爾巴尼亞': 'Albania', '阿聯酋': 'United Arab Emirates', '阿根廷': 'Argentina', '亞美尼亞': 'Armenia', '法屬南半球和南極領地': 'French Southern and Antarctic Lands', '澳大利亞': 'Australia', '奧地利': 'Austria', '亞塞拜然': 'Azerbaijan', '蒲隆地共和國': 'Burundi', '比利時': 'Belgium', '貝南': 'Benin', '布吉納法索': 'Burkina Faso', '孟加拉國': 'Bangladesh', '保加利亞': 'Bulgaria', '波黑': 'Bosnia and Herz.', '白俄羅斯': 'Belarus', '貝里斯': 'Belize', '百慕大': 'Bermuda', '玻利維亞': 'Bolivia', '巴西': 'Brazil', '汶萊': 'Brunei', '不丹': 'Bhutan', '波札那': 'Botswana', '中非共和國': 'Central African Rep.', '加拿大': 'Canada', '瑞士': 'Switzerland', '智利': 'Chile', '中國': 'China', '象牙海岸': 'Ivory Coast', '喀麥隆': 'Cameroon', '剛果(金)': 'Dem. Rep. Congo', '剛果(布)': 'Congo', '哥倫比亞': 'Colombia', '哥斯大黎加': 'Costa Rica', '古巴': 'Cuba', '北塞普勒斯': 'N. Cyprus', '塞普勒斯': 'Cyprus', '捷克': 'Czech Rep.', '德國': 'Germany', '吉布提': 'Djibouti', '丹麥': 'Denmark', '阿爾及利亞': 'Algeria', '厄瓜多': 'Ecuador', '埃及': 'Egypt', '厄利垂亞': 'Eritrea', '西班牙': 'Spain', '愛沙尼亞': 'Estonia', '衣索比亞': 'Ethiopia', '芬蘭': 'Finland', '': 'Fiji', '福克蘭群島': 'Falkland Islands', '法國': 'France', '加彭': 'Gabon', '英國': 'United Kingdom', '喬治亞': 'Georgia', '迦納': 'Ghana', '幾內亞': 'Guinea', '甘比亞': 'Gambia', '赤道幾內亞': 'Eq. Guinea', '希臘': 'Greece', '格陵蘭': 'Greenland', '瓜地馬拉': 'Guatemala', '法屬蓋亞那': 'French Guiana', '蓋亞那': 'Guyana', '宏都拉斯': 'Honduras', '克羅埃西亞': 'Croatia', '海地': 'Haiti', '匈牙利': 'Hungary', '印度尼西亞': 'Indonesia', '印度': 'India', '愛爾蘭': 'Ireland', '伊朗': 'Iran', '伊拉克': 'Iraq', '冰島': 'Iceland', '以色列': 'Israel', '義大利': 'Italy', '牙買加': 'Jamaica', '約旦': 'Jordan', '日本': 'Japan', '哈薩克': 'Kazakhstan', '肯亞': 'Kenya', '吉爾吉斯斯坦': 'Kyrgyzstan', '柬埔寨': 'Cambodia', '韓國': 'Korea', '科索沃': 'Kosovo', '科威特': 'Kuwait', '寮國': 'Lao PDR', '黎巴嫩': 'Lebanon', '賴比瑞亞': 'Liberia', '利比亞': 'Libya', '斯里蘭卡': 'Sri Lanka', '賴索托': 'Lesotho', '立陶宛': 'Lithuania', '盧森堡': 'Luxembourg', '拉脫維亞': 'Latvia', '摩洛哥': 'Morocco', '摩爾多瓦': 'Moldova', '馬達加斯加': 'Madagascar', '墨西哥': 'Mexico', '北馬其頓': 'Macedonia', '馬裡': 'Mali', '緬甸': 'Myanmar', '黑山': 'Montenegro', '蒙古': 'Mongolia', '莫三比克': 'Mozambique', '茅利塔尼亞': 'Mauritania', '馬拉維': 'Malawi', '馬來西亞': 'Malaysia', '奈米比亞': 'Namibia', '新喀里多尼亞': 'New Caledonia', '尼日': 'Niger', '奈及利亞': 'Nigeria', '尼加拉瓜': 'Nicaragua', '荷蘭': 'Netherlands', '挪威': 'Norway', '尼泊爾': 'Nepal', '紐西蘭': 'New Zealand', '阿曼': 'Oman', '巴基斯坦': 'Pakistan', '巴拿馬': 'Panama', '祕魯': 'Peru', '菲律賓': 'Philippines', '巴布亞紐幾內亞': 'Papua New Guinea', '波蘭': 'Poland', '波多黎各': 'Puerto Rico', '朝鮮': 'Dem. Rep. Korea', '葡萄牙': 'Portugal', '巴拉圭': 'Paraguay', '卡達': 'Qatar', '羅馬尼亞': 'Romania', '俄羅斯': 'Russia', '盧安達': 'Rwanda', '西撒哈拉': 'W. Sahara', '沙烏地阿拉伯': 'Saudi Arabia', '蘇丹': 'Sudan', '南蘇丹': 'S. Sudan', '塞內加爾': 'Senegal', '索羅門群島': 'Solomon Is.', '獅子山': 'Sierra Leone', '薩爾瓦多': 'El Salvador', '索馬利亞蘭': 'Somaliland', '索馬利亞': 'Somalia', '塞爾維亞': 'Serbia', '蘇利南': 'Suriname', '斯洛伐克': 'Slovakia', '斯洛維尼亞': 'Slovenia', '瑞典': 'Sweden', '史瓦濟蘭': 'Swaziland', '敘利亞': 'Syria', '查德': 'Chad', '多哥': 'Togo', '泰國': 'Thailand', '塔吉克': 'Tajikistan', '土庫曼': 'Turkmenistan', '特里尼達和多巴哥': 'Trinidad and Tobago', '突尼西亞': 'Tunisia', '土耳其': 'Turkey', '坦尚尼亞': 'Tanzania', '烏干達': 'Uganda', '烏克蘭': 'Ukraine', '烏拉圭': 'Uruguay', '美國': 'United States', '烏茲別克': 'Uzbekistan', '委內瑞拉': 'Venezuela', '越南': 'Vietnam', '萬那杜': 'Vanuatu', '西岸': 'West Bank', '葉門共和國': 'Yemen', '南非': 'South Africa', '尚比亞共和國': 'Zambia', '辛巴威': 'Zimbabwe'}

# 將各國json資料寫入資料庫

def importWorldJsonToDB():

    # 建立資料庫連線

    db = pymysql.connect(

        host="127.0.0.1",

        user="root",

        password="123456",

        database="test_db"

    )

    # 使用cursor()方法建立一個遊標物件cursor

    cursor=db.cursor()

    deleteSql="truncate countrydata"

    #每次都刪除全部資料重新新增

    try:

        cursor.execute(deleteSql)

        db.commit()

        print("刪除國家資料成功!進行重新匯入!")

    except:

        print("刪除國家資料時出錯!")

        db.rollback()

    with open("E:/Install/python3.9/data/worldData.json",'r') as f:

        worldDataJson=json.load(f)

    # 批量插入的資料集合

    insertValue=[]

    # 所插入的主鍵記錄

    dataCount=1

    for i in range(0, len(worldDataJson)):

        # 獲取每一個國家的名稱,並開啟其對應的json檔案

        countryName=worldDataJson[i]['provinceName']

        countryShortCode=worldDataJson[i]['countryShortCode']

        continent=worldDataJson[i]['continents']

        countryFullName=nameMap[worldDataJson[i]['provinceName']]

        countryJsonPath="E:/Install/python3.9/data/worldData/"+countryName+".json"

        with open(countryJsonPath) as f:

            countryJson=json.load(f)

        for j in range(0,len(countryJson['data'])):

            tupleData=()

            tupleData+=(

                dataCount,countryJson['data'][j]['confirmedCount'],countryJson['data'][j]['confirmedIncr'],

                countryJson['data'][j]['curedCount'],countryJson['data'][j]['curedIncr'],countryJson['data'][j]['currentConfirmedCount'],

                countryJson['data'][j]['currentConfirmedIncr'],countryJson['data'][j]['dateId'],countryJson['data'][j]['deadCount'],

                countryJson['data'][j]['deadIncr'],countryJson['data'][j]['suspectedCount'],countryJson['data'][j]['suspectedCountIncr'],

                countryName,countryShortCode,continent,countryFullName

            )

            insertValue.append(tupleData)

            dataCount+=1

    insertSql="INSERT INTO countrydata (id,confirmedCount,confirmedIncr,curedCount,curedIncr,currentConfirmedCount,currentConfirmedIncr,dateId,deadCount,deadIncr,suspectedCount,suspectedCountIncr,countryName,countryShortCode,continent,countryFullName) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

    # 執行資料插入

    try:

        cursor.executemany(insertSql,insertValue)

        db.commit()

        print("插入國家資料成功!")

    except:

        print("插入國家資料失敗!")

        db.rollback()

    # 關閉連線

    cursor.close()

    db.close()

# 將各省資料json資料寫入資料庫

def importProvinceJsonToDB():

    # 建立資料庫連線

    db=pymysql.connect(

        host="127.0.0.1",

        user="root",

        password="123456",

        database="test_db"

    )

    # 使用cursor()方法建立一個遊標物件cursor

    cursor=db.cursor()

 #每次都刪除全部資料重新新增

    deleteSql="truncate china_provincedata"

    try:

        cursor.execute(deleteSql)

        db.commit()

        print("刪除省份資料成功!進行重新匯入!")

    except:

        print("刪除省份資料時出錯!")

        db.rollback()

    with open("E:/Install/python3.9/data/provinceData.json",'r') as f:

        provinceDataJson=json.load(f)

    #批量插入的資料集合

    insertValue=[]

    # 所插入的主鍵記錄

    dataCount=1

    for i in range(0,len(provinceDataJson)):

        # 獲取每一個省份的名稱,並開啟其對應的json檔案

        provinceName=provinceDataJson[i]['provinceName']

        provinceShortName=provinceDataJson[i]['provinceShortName']

        provinceJsonPath="E:/Install/python3.9/data/provinceData/"+provinceName+".json"

        with open(provinceJsonPath) as f:

            provinceJson=json.load(f)

        for j in range(0,len(provinceJson['data'])):

            tupleData=()

            tupleData+=(

dataCount,provinceJson['data'][j]['confirmedCount'],provinceJson['data'][j]['confirmedIncr'],provinceJson['data'][j]['curedCount'],provinceJson['data'][j]['curedIncr'],provinceJson['data'][j]['currentConfirmedCount'],provinceJson['data'][j]['currentConfirmedIncr'],provinceJson['data'][j]['dateId'],provinceJson['data'][j]['deadCount'],provinceJson['data'][j]['deadIncr'],provinceJson['data'][j]['suspectedCount'],provinceJson['data'][j]['suspectedCountIncr'],provinceName,provinceShortName)

            insertValue.append(tupleData)

            dataCount+=1

    insertSql="INSERT INTO china_provincedata(id,confirmedCount,confirmedIncr,curedCount,curedIncr,currentConfirmedCount,currentConfirmedIncr,dateId,deadCount,deadIncr,suspectedCount,suspectedCountIncr,provinceName,provinceShortName) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

    # 執行資料插入

    try:

        cursor.executemany(insertSql,insertValue)

        db.commit()

        print("插入省份資料成功!")

    except:

        print("插入省份資料失敗!")

        db.rollback()

    # 關閉連線

    cursor.close()

    db.close()

# 反轉名字字典

def inverse():

    print("hello")

    print(dict([(v,k) for (k,v) in nameMap.items()]))

def importWorldConToDB():

    # 建立資料庫連線

    db = pymysql.connect(

        host="127.0.0.1",

        user="root",

        password="123456",

        database="test_db"

    )

    # 使用cursor()方法建立一個遊標物件cursor

    cursor = db.cursor()

    deleteSql = "truncate world_total_data"

    try:

        cursor.execute(deleteSql)

        db.commit()

        print("刪除世界資料成功!進行重新匯入!")

    except:

        print("刪除世界資料時出錯!")

        db.rollback()

    searchSql="select sum(confirmedCount),sum(confirmedIncr),sum(curedCount),sum(curedIncr),sum(currentConfirmedCount),sum(currentConfirmedIncr),dateId,sum(deadCount),sum(deadIncr),sum(suspectedCount),sum(suspectedCountIncr) from countrydata group by dateId order by dateId"

    cursor.execute(searchSql)

    searchList=cursor.fetchall()

    dataList=[]

    i=1

    for data in searchList:

        temp=()

temp+=(i,int(data[0]),int(data[1]),int(data[2]),int(data[3]),int(data[4]),int(data[5]),int(data[6]),int(data[7]),int(data[8]),int(data[9]),int(data[10]))

        dataList.append(temp)

        i+=1

    # 開始插入資料

    insertSql="INSERT INTO world_total_data (id,confirmedCount,confirmedIncr,curedCount,curedIncr,currentConfirmedCount,currentConfirmedIncr,dateId,deadCount,deadIncr,suspectedCount,suspectedCountIncr) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

    # 執行資料插入

    try:

        cursor.executemany(insertSql, dataList)

        db.commit()

        print("插入世界總體資料成功!")

    except:

        print("插入世界總體資料失敗!")

        db.rollback()

    # 關閉連線

    cursor.close()

    db.close()

importWorldJsonToDB()

importProvinceJsonToDB()

importWorldConToDB()

匯入報錯,檢查發現是資料庫中表的資料欄位打錯了。。。。修改重來!

匯入資料庫成功~

接下來將資料庫檔案匯出到excel表格:

select * from china_provincedata 

into outfile 'E:/MySQL/mysql-8.0.25-winx64/china_provincedata.xlsx';

select * from countrydata 

into outfile 'E:/MySQL/mysql-8.0.25-winx64/countrydata.xlsx';

select * from world_total_data 

into outfile 'E:/MySQL/mysql-8.0.25-winx64/world_total_data.xlsx';

獲得檔案:

內容:

資料分析

我們取湖北省疫情最嚴重的一段時間:20200120-20200520期間的當天當前確診人數,新建一個csv,將其製成折線圖:

import numpy as np

import matplotlib.pyplot as plt

import csv

import pandas as pd

data = pd.read_csv('湖北省20200120-20200520.csv',encoding='gbk')

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['font.family']='sans-serif'

plt.rcParams['axes.unicode_minus'] = False

fig=plt.figure(figsize=(15,10))

xdata=[]

ydata=[]

xdata=data.iloc[:,1]

ydata=data.iloc[:,0]

plt.xticks([])

plt.plot(xdata,ydata)

plt.xlabel('時間')

plt.ylabel('當前確診人數')

plt.title('湖北省20200120-20200520疫情走勢')

plt.show()

從圖中可以看出,疫情在湖北迅速爆發,但是在國家的管控下,得到了很好的遏制,感染人數在百天時間裡快速降低直至清零。

總結

今天,疫情在國內已經基本得到了控制,而國外諸多國家依舊疫情肆虐。這次學習讓我更加直觀的看到,疫情在國內的發展趨勢,這得益於國家的領導以及全國人民的努力和奉獻。

完成此次設計,我學到了非常非常多東西,查閱了很多資料,也產生了解決不完的各種疑問和錯誤。。。這次的實踐,我也發現了自己許多不足,對資料視覺化的不熟練、英語程度不夠用、程式碼細節處理不好、甚至某些基礎掌握都不夠牢靠...

紙上得來終覺淺,絕知此事要躬行。只有經過實踐,才能將課堂上學習到的知識實實在在的掌握,更能在實踐中學到一些課堂上沒有的東西,不斷進步,觸類旁通。