第十章(Hadoop大數據處理實戰(zhàn))天氣數據分析實戰(zhàn)_第1頁
第十章(Hadoop大數據處理實戰(zhàn))天氣數據分析實戰(zhàn)_第2頁
第十章(Hadoop大數據處理實戰(zhàn))天氣數據分析實戰(zhàn)_第3頁
第十章(Hadoop大數據處理實戰(zhàn))天氣數據分析實戰(zhàn)_第4頁
第十章(Hadoop大數據處理實戰(zhàn))天氣數據分析實戰(zhàn)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Hadoop大數據處理實戰(zhàn)第10章天氣數據分析實戰(zhàn)本章導讀本章將綜合運用前面所學知識來開發(fā)一個天氣數據分析應用案例。首先,介紹天氣數據源的分析與采集方法,包括天氣網的網頁分析、MySQL表和Hive表的設計與創(chuàng)建、數據的導入和導出等。然后,介紹數據的預處理方法,包括缺失值和重復值的處理、數據格式化和數據分區(qū)等。最后,利用MapReduce和Hive對處理后的數據進行初步分析,得出結論。學習目標020304掌握網站頁面的分析方法。掌握數據采集工具的使用方法。掌握導入和導出數據的方法。掌握數據預處理的方法。掌握數據分析的一般方法。0102案例簡介數據采集目錄CONTENTS數據預處理0304數據分析01案例分析案例分析10.1.1背景介紹天氣是指影響人類活動的瞬間氣象特點的綜合狀況。它是一定區(qū)域、短時段內的氣象變化,如溫度、濕度、氣壓、降水等。天氣與人們的生活(如衣食住行)息息相關,它不僅影響著人們的出行方式,還影響著人們對

衣物的需求。天氣的數據量是十分龐大的。舉例來說,我國有23個省、4個直轄市、5個自治區(qū)和2個特別行政區(qū),而每個省又包括多個市,每個市可能還包括多個鄉(xiāng)鎮(zhèn)。天氣的數據既可以按照鄉(xiāng)鎮(zhèn)作為特定區(qū)域進行統(tǒng)計,也可以擴大至市進行統(tǒng)計。另外,從時間角度來看,可以統(tǒng)計每個小時的天氣數據,也可以簡單匯總一天的數據。隨著時間的積累,全國各地的天氣數據量就會越來越大,那么數據的存儲就成了問題。案例分析Hadoop可為海量數據提供可靠的數據存儲服務,以及并行數據處理服務。因此,可以利用Hadoop技術來存儲海量天氣數據,并從天氣數據中提取有價值的信息,從而為人類提供更加優(yōu)質的服務。在交通領域,目前已有國際汽車公司希望利用氣象大數據(如團霧、道路結冰等惡劣天氣數據)提高自動駕駛的可靠性;在零售領域,Weather

Channel曾幫助沃爾瑪更好地制定了銷售和發(fā)展計劃,如利用沃爾瑪的銷售數據、訂單信息等與天氣數據結合分析。案例分析10.1.2案例目的天氣數據分析案例的主要目的是通過網絡爬蟲(即數據采集器,是一種按照一定的規(guī)則自動抓取萬維網信息的程序或腳本)獲取到天氣數據,并將獲取到的天氣數據存儲到HDFS中,然后利用

MapReduce和Hive技術來分析天氣數據,找出數據背后的規(guī)律。案例分析10.1.3案例流程天氣數據分析案例可分為6個步驟分析天氣網站分析數據來源的網頁,以提取可采集的數據;獲取歷史數據構建數據爬蟲規(guī)則以批量獲取數據;導出數據將獲取到的數據導入關系型數據庫(如MySQL);遷移數據將關系型數據庫中的數據導入Hadoop集群(如Hive表對應的HDFS目錄);數據預處理與數據計算利用Hive或MapReduce對天氣數據進行離線數據處理;數據可視化將數據處理結果以可視化形式(如Excel、Python、R等)展現出來。02數據采集數據采集10.2.1分析頁面1.瀏覽天氣網站(1)打開天氣網首頁(https://),在導航欄中選擇“天氣”→“歷史天氣”選項。天氣網首頁數據采集(2)在打開的“歷史天氣查詢”頁面中,選擇一個要查詢的城市(可直接單擊城市名稱超鏈接,也可通過右上角的搜索框查找相應城市),此處單擊“北京”超鏈接?!皻v史天氣查詢”頁面數據采集(3)在打開的“北京歷史天氣”頁面中,找到“北京歷史天氣詳情”欄,然后單擊要查看的月份超鏈接,此處單擊“2019年01月天氣”超鏈接。“北京歷史天氣詳情”欄數據采集(4)在打開的頁面中會顯示北京2019年01月份的天氣詳情。北京2019年01月份天氣詳情數據采集2.分析數據頁面由上圖可以觀察到多種與天氣相關的有價值的數據,如日期、最高氣溫、最低氣溫、天氣和風向等,并且可顯示當月的全部天氣數據。另外,可以通過縱向對比和橫向對比的方式來分析歷史天氣靜態(tài)網頁的網址規(guī)律。(1)相同城市的歷史天氣數據按日期(由年和月組成)形成縱向對比,如北京市2019年01月份和02月份的歷史天氣數據的網址分別為/beijing/201901.html和/beijing/201902.html。由此可以發(fā)現一個規(guī)律,相同城市且不同日期的網址僅僅只有網頁名稱不同,如201901.html和201902.html是以年和月作為靜態(tài)網頁的名稱,所以北京市的歷史天氣數據的網址可以用“/beijing/年月.html”表示。數據采集(2)相同日期的歷史天氣數據按城市名形成橫向對比,如北京市和杭州市2019年01月份的歷史天氣數據的網址分別為/beijing/201901.html和/hangzhou/201901.html。由此可以發(fā)現一個規(guī)律,不同城市且相同日期的網址僅僅只有路徑中的城市名稱不同,如beijing和hangzhou,所以各城市的歷史天氣數據的網址可以用“/城市/201901.html”表示。綜上可知,天氣網的歷史天氣頁面的地址為“/城市/年月.html”。數據采集10.2.2采集數據1.安裝數據采集器首先通過頁面https:///download/windows下載八爪魚數據采集器安裝包(如“八爪魚采集器8.0.6.zip”),將安裝包解壓后,雙擊其中的“八爪魚采集器Setup

8.0.6.exe”文件進行安裝。安裝完成后,啟動八爪魚采集器。然后根據提示注冊一個賬號,并用其進行登錄。八爪魚采集器登錄界面數據采集2.新建數據采集任務(1)單擊左側列表框中的“新建”按鈕,然后在彈出的列表中選擇“自定義任務”選項。新建自定義任務數據采集此時右側區(qū)域會顯示“任務:新建任務”界面,在“采集網址”一欄選擇“批量生成”選項并編輯網址格式。編輯完成后,單擊“保存設置”按鈕。新建天氣數據采集任務數據采集(2)此時會彈出提示框“已完成網址生成,現在可以開始編輯任務了”,單擊“確定”按鈕,顯示任務頁面。首先單擊頁面中的“查看更多”按鈕(顯示本月全部天氣記錄),然后單擊“智能提示”對話框中的“點擊該元素”超鏈接。讓頁面顯示本月全部天氣記錄數據采集單擊“日期”列下方的第1個單元格“2016-01-01星期五”,再依次單擊“智能提示”對話框中的“選中全部”超鏈接、“采集以下元素文本”超鏈接。設置采集字段1數據采集重復同樣的操作,通過依次單擊右側4個單元格,采集右側4列(即最高氣溫、最低氣溫、天氣和風向)對應的數據,以設置采集字段2~5。最后,先單擊“北京2016年1月份天氣統(tǒng)計”區(qū)域,再單擊“智能提示”對話框中的“采集該元素的文本”超鏈接,以設置采集字段6。設置采集字段6數據采集(3)單擊任務頁面右上角的“流程”開關按鈕將其開啟。首先,將任務名稱修改為“歷史天氣—全球天氣網”。修改任務名稱數據采集然后,修改各個采集字段的名稱。修改字段名稱數據采集彈出的對話框接下來,需要格式化各個字段的數據。單擊“日期”字段右側的“自定義數據字段”按鈕,在中選擇“格式化數據”選項,再在下一個對話框中單擊“添加步驟”按鈕。格式化數據(上)數據采集在彈出的“請選擇一個操作”對話框中選擇“正則表達式替換”選項,在

“RegReplace”對話框中編輯相關參數后,單擊“確定”按鈕,再在返回的對話框中單擊“確定”按鈕。格式化數據(下)數據采集按照同樣的方法,對“最高氣溫”和“最低氣溫”字段進行格式化數據操作,它們在“請選擇一個操作”對話框中選擇“替換”選項,相關參數設置如下圖所示。(a)

(b)“最高氣溫”和“最低氣溫”字段的格式化數據操作(a)最高氣溫(b)最低氣溫數據采集按照同樣的方法,對“天氣”和“風向”字段進行格式化數據操作,它們在“請選擇一個操作”對話框中選擇

“替換”選項,相關參數設置如下圖所示。(a)(b)“天氣”和“風向”字段的格式化數據操作(a)天氣(b)風向數據采集按照同樣的方法,對“城市”字段進行格式化數據操作,在“請選擇一個操作”對話框中選擇“去除空格”選項,相關參數設置如右圖所示?!俺鞘小弊侄蔚母袷交瘮祿僮鞲鱾€字段完成格式化數據操作后,結果如下圖所示。完成格式化數據操作后的各個字段數據采集(4)單擊任務頁面右上角的“數據預覽”開關按鈕將其開啟,可查看獲取數據的形式。單擊“保存”按鈕,保存當前數據采集任務。數據預覽數據采集3.開始采集數據單擊“開始采集”按鈕,彈出“運行任務”對話框,單擊“啟動本地采集”按鈕,如左圖所示,開始采集數據。耐心等待一段時間,即可完成采集,如右圖所示?!斑\行任務”對話框采集完成數據采集4.將采集數據導入MySQL首先在hadoop0節(jié)點的MySQL中新建一個“mydb”數據庫,并在該數據庫中新建一個“weather”表,然后使用八爪魚采集器將采集到的數據導入MySQL中的“weather”表。(1)根據詳情頁的數據分析,設計一個“weather”表,表的列為w_date、hmax、hmin、weathertype、windy和city。MySQL中的“weather”表列名數據類型描述w_datevarchar日期(主鍵)hmaxvarchar最高氣溫hminvarchar最低氣溫weathertypevarchar天氣類型windyvarchar風cityvarchar城市數據采集在hadoop0節(jié)點上啟動MySQL,然后執(zhí)行以下命令,創(chuàng)建一個名稱為“mydb”的數據庫并應用該數據庫:mysql>

CREATE

DATABASE

mydb

CHARACTER

SET

utf8;mysql>

use

mydb;接下來,執(zhí)行以下命令,在“mydb”數據庫下創(chuàng)建一個名稱為“weather”的表:

mysql>CREATE

TABLE

weather(->

`w_date`

varchar(255)

DEFAULT

NULL,->

`hmax`

varchar(255)

DEFAULT

NULL,->

`hmin`

varchar(255)

DEFAULT

NULL,->

`weathertype`

varchar(255)

DEFAULT

NULL,->

`windy`

varchar(255)

DEFAULT

NULL,->

`city`

varchar(255)

DEFAULT

NULL->

)

ENGINE=InnoDB

DEFAULT

CHARSET=utf8;數據采集(2)在八爪魚采集器的采集完成對話框中,單擊“導出數據”按鈕,彈出

“導出本地數據(歷史天氣—全球天氣網)”對話框,選擇導出到數據庫

MySQL,然后單擊“確定”按鈕。選擇導出到數據庫MySQL(3)顯示設置MySQL數據庫信息界面,依次指定

MySQL服務器名稱、用戶名稱、密碼及數據庫名稱(即mydb),然后單擊“下一步”按鈕。設置MySQL數據庫信息數據采集(4)顯示數據字段映射關系設置界面,選擇

“weather”表,然后使采集數據的字段名稱與

“weather”表的列一一對應,最后單擊“導出”按鈕。(5)導出完成后,單擊“完成”按鈕。設置數據字段映射關系導出完成數據采集(6)用Navicat

for

MySQL工具查看MySQL中“weather”表的數據。查看MySQL中“weather”表的數據單擊“導入”按鈕,也可以為MySQL中的“weather”表導入數據(數據源可以是Excel文件、CSV文件、HTML文件等)數據采集10.2.3用Sqoop將MySQL數據導入Hive首先在hadoop0節(jié)點的Hive中新建一個“weather”表,然后使用Sqoop工具將MySQL中“weather”表的數據導入

Hive中的“weather”表。(1)與MySQL中的“weather”表對應,在Hive中設計一個“weather”表,表的列為w_date、hmax、hmin、weathertype、windy和city。Hive中的“weather”表列名數據類型描述w_dateDATE日期(主鍵)hmaxINT最高氣溫hminINT最低氣溫weathertypeSTRING天氣類型windySTRING風citySTRING城市數據采集在hadoop0節(jié)點上啟動Hive,然后執(zhí)行以下命令,創(chuàng)建一個名稱為“weather”的外部表(位于default數據庫):hive>

CREATE

EXTERNAL

TABLE

IF

NOT

EXISTS

weather(w_date

DATE,hmax

INT,hmin

INT,weathertype

STRING,windy

STRING,city

STRING)

ROW

FORMAT

DELIMITED

FIELDS

TERMINATED

BY

","

STORED

AS

TEXTFILE;數據采集(2)執(zhí)行以下命令,使用Sqoop工具將MySQL中“weather”表的數據導入Hive中的“weather”表:#

sqoop

import

--connect

jdbc:mysql://hadoop0:3306/mydb

--username

root

--password

jqe6b6

--table

weather

--target-dir

/user/weather

--fields-terminated-by

","

--hive-import

--hive-table

weather

-m

1接下來,執(zhí)行以下命令,查看Hive表中的10行數據是否存在或是否出現格式錯誤:hive>

SELECT

*

FROM

weather

LIMIT

10;查詢結果03數據預處理數據預處理在工程實踐中,采集到的數據往往存在缺失值、重復值、異常值等。因此,在使用數據之前,往往需要進行數據預處理。這里將介紹常用的數據預處理方法,包括缺失值處理、數據格式化、數據去重、數據分區(qū)等數據采集10.3.1缺失值處理對于天氣數據,日期可以作為一條數據的唯一標識,所以日期的數據不允許為空(NULL,即缺失值)。要查看

w_date列中是否存在NULL,可執(zhí)行以下命令:hive>

SELECT

COUNT(1)

FROM

weather

WHERE

w_date

IS

NULL;返回結果為0行(說明不存在缺失值)。查詢“weather”表中w_date屬性值為空的行數數據采集如果w_date列中存在缺失值,應將這些數據去除??赏ㄟ^查詢w_date列不為NULL的結果來創(chuàng)建“weather_deal1”表,以存儲缺失值處理后的數據,即執(zhí)行以下命令:hive>

CREATE

TABLE

weather_deal1

ASSELECT

*FROM

weatherWHERE

w_date

IS

NOT

NULL;數據采集10.3.2數據格式化數據格式化就是將表中的數據處理成價值更高的數據。如city列中的某一屬性值為“北京2016年1月份天氣統(tǒng)計”,而city屬性最簡練的數據形式應為“北京”。因此,可以通過正則表達式處理city列的屬性值。首先,構造一個用戶自定義函數“Deal”,用于格式化city,代碼如下://定義規(guī)則package

jqe;import

java.util.regex.Matcher;import

java.util.regex.Pattern;import

org.apache.hadoop.hive.ql.exec.UDF;public

class

Deal

extends

UDF{private

String

result;public

String

evaluate

(String

source)

{String

regex

=

"^[\\u4e00-\\u9fa5]+";Pattern

pattern

=

Ppile(regex);數據采集Matcher

matcher

=

pattern.matcher(source);if

(matcher.find())

{result=matcher.group(0);}return

result;}public

static

void

main(String[]

args)

{System.out.println(new

Deal().evaluate("北京2016年1月份天氣統(tǒng)計"));}}然后,將該項目打包成jar文件“Deal.jar”,并通過WinSCP軟件將其上傳到hadoop0節(jié)點的“/root”目錄下,并執(zhí)行以下命令,將“Deal.jar”文件注冊到Hive中(函數別名為deal):hive>

add

jar

/root/Deal.jar;hive>

CREATE

TEMPORARY

FUNCTION

deal

AS

"jqe.Deal";數據采集除了city列需要數據格式化處理外,windy列也要按空格切分成風向(wind_direction)和風級(wind_scale)兩列,可直接使用split()函數。最后,通過weather_deal1表處理后的結果創(chuàng)建weather_deal2表,可執(zhí)行以下命令:hive>

CREATE

TABLE

weather_deal2

ASSELECT

w_date,hmax,hmin,weathertype,split(windy,"

")[0]

AS

wind_direction,split(windy,"

")[1]

AS

wind_scale,deal(city)

AS

cityFROM

weather_deal1;數據采集10.3.3數據去重日期既不能為空,也不能存在重復值。如果相同日期存在多條相同數據,只需保留一條數據。要查看同一城市的不同w_date中是否存在重復值,可執(zhí)行以下命令:hive>SELECT

city,w_date,COUNT(1)c

FROM

weather

GROUP

BY

city,w_date

HAVING

c>1;要創(chuàng)建“weather_deal3”表以保存去重后的數據,可執(zhí)行以下命令:hive>

CREATE

TABLE

weather_deal3

ASSELECT

t.w_date,t.hmax,t.hmin,t.weathertype,t.wind_direction,t.wind_scale,t.cityFROM

(SELECT

w.*,row_number()

over(DISTRIBUTE

BY

w.city,w.w_date)

as

row_numFROM

weather_deal2

w

)

tWHERE

t.row_num

=

1;數據采集10.3.4數據分區(qū)為了便于查詢和管理數據,可以按照年和月對數據進行分區(qū)。例如,要創(chuàng)建分區(qū)表“p_weather”,可執(zhí)行以下命令:hive>

CREATE

EXTERNAL

TABLE

IF

NOT

EXISTS

p_weather(w_date

DATE,hmax

INT,hmin

INT,weathertype

STRING,wind_direction

STRING,wind_scale

STRING,city

STRING)PARTITIONED

BY

(year

STRING,month

String)ROW

FORMAT

DELIMITED

FIELDS

TERMINATED

BY

",";數據采集然后,利用year()和month()函數獲取日期的年和月,并將去重后的數據插入到分區(qū)表中,可執(zhí)行以下命令:hive>

set

hive.exec.dynamic.partition=true;hive>

set

hive.exec.dynamic.partition.mode=nonstrict;hive>

INSERT

OVERWRITE

TABLE

p_weatherPARTITION

(year,month)SELECT

*,year(w_date)

as

year,month(w_date)

as

monthFROM

weather_deal3;04數據分析數據分析10.4.1月氣溫分析1.任務描述獲取2019年北京市的全年天氣數據,數據形式為“月份,日最高氣溫,日最低氣溫”,如“1,0,-9”;統(tǒng)計這些數據中每個月的最高氣溫和最低氣溫,輸出結果形式為“月份,月最高氣溫,月最低氣溫”,如

“1,11,-11”;將統(tǒng)計結果導入Excel并繪制出柱形圖。數據分析設計思路查詢2019年北京市的月份、日最高氣溫和日最低氣溫等天氣數據,將查詢結果作為新的數據表,該表目錄下的數據作為MapReduce程序的輸入。在MapReduce中,Map的輸入為<行偏移量,行內容>,輸出為<月份,氣溫對象>。其中,氣溫對象包含了日最

高氣溫和日最低氣溫兩個屬性。Reduce的輸入為<月份,氣溫對象>,按月份分別獲取日最高氣溫列表的最大值和

日最低氣溫列表的最小值,輸出結果為<月份,List(氣溫)>,其中列表中包含月最高氣溫和月最低氣溫。然后,對輸出結果進行格式化,輸出形式為“月份,月最高氣溫,月最低氣溫”。將輸出文件導入到Excel中,繪制出柱形圖。3.編程實現具體操作步驟參照書中演示。數據分析要統(tǒng)計各城市每月中晴天的天數,首先要在“weather”表中過濾出天氣類型為“晴”的數據,并按城市、年和月進行分組來獲取查詢結果。為了便于查詢各城市每年中晴天數最多的月份,根據之前的查詢結果,分別對城市、年和晴天數進行降序排列。由于本數據集中僅有“北京”和“杭州”兩個城市的數據,所以設置Reduce的數量為2,可執(zhí)行以下命令:hive>

set

mapreduce.job.reduces=2;hive>

SELECT

t.city,t.sunny_num,t.year,t.monthFROM(SELECT

city,year,month,count(1)

sunny_numFROM

p_weatherWHERE

weathertype="晴"GROUP

BY

city,year,month)

tDISTRIBUTE

BY

t.citySORT

BY

city

DESC,t.year

DESC,t.sunny_num

DESC;10.4.2各城市每月中晴天的天數統(tǒng)計數據分析統(tǒng)計各城市每月中晴天的天數數據分析10.4.3北京市霾天氣的初步分析北京市霾天氣的數據可以從以下幾方面來初步分析。例如,統(tǒng)計每年霾天氣的天數并觀察數值變化;統(tǒng)計每月中包含霾天氣的天數,以觀察霾天氣主要集中的月份;分析霾天氣與風向和風級的關系。統(tǒng)計北京市2016—2019年中霾天氣的天數,可執(zhí)行以下命令:hive>SELECT

year,COUNT(1)FROM

p_weatherWHERE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論