如何用Mysql清洗數據
來自專欄數據報告撰寫
如何用Mysql清洗數據——以數據分析——如何在什麼值得買上挑到心儀的跑鞋?為例
在數據分析中從獲取數據到最後的完成數據分析報告,你要是問一個從事數據分析的人哪裡最麻煩最費時間,十個裡面有九個會回答你:清洗數據。
在清洗數據流程中,絕大多數分析師都會使用Python和R來處理,那如果還沒有掌握Python和R的人呢?
事實上Excel和Mysql之類的工具也是可以的,Excel對於大一點的文件處理的較為吃力。其實我們日常用來處理統計數據的Mysql也可以進行數據清洗的工作,接下來我就用完之前做的關於什麼值得買跑鞋板塊的數據分析為例來簡單介紹一下怎麼用Mysql進行數據清洗。
一、首先爬取網頁上的數據
這方面我推薦一下我的朋友 @陳大欣
零基礎如何學爬蟲技術?介紹的Web Scraper工具,可以輕鬆讓沒有編程基礎的小白爬取95%以上的網頁上的內容。
首先分析一下頁面,我們需要爬取哪些內容:
- 跑鞋的品牌、型號
- 爆料分類
- 價格
- 值、不值、收藏和評論數
- 爆料時間
- 賣家
- 爆料人
具體爬取過程不表
二、預覽分析數據
看起來好像很正常,點開仔細看一下。
標題部分被整個抓下來了,其中我們需要的分類、品牌和價格都在一個單元格裡面,需要把它們分開來。
上傳時間和商家在同一個單元格裡面,需要分開來。
三、在Mysql進行數據清洗、提取
- 把數據導入Navicat
Navicat for MySQL如何導入數據表
參考網上的教程把爬下來的csv文件導入Navicat
- 統計男鞋和女鞋的爆料數量
Alter table `runningshoe (1)` add woman int;update `runningshoe (1)` set woman=1 where name like "%女%"
加入一列命名為Woman,描述中出現一次"女"就記一次女鞋爆料,男鞋同理。
- 抽取出跑鞋品牌信息
首先我分析了一下數據,和眾多爆料數字不成正比的是,絕大多數爆料都是集中在少數幾個品牌上。95%的爆料,來自於20個大品牌。
我做了一個叫做"品牌"的連接表格來進行品牌信息的歸類
左邊是它有可能出現的名字,右邊是我定義的名字。
update `runningshoe (1)`, `品牌` set brand=品牌.`實際名字`where `name` like CONCAT(%,品牌.`查詢名字`,%)
以上品牌涵蓋了97%以上的爆料剩餘的被歸入"Others"了
- 抽取價格信息
事實上這個步驟比我想像中的複雜
關於價格的爆料信息有三種一種是國內的爆料,單位是人民幣,第二種是美國海淘的爆料有美金有人民幣,第三種是日本海淘的爆料,有日元有人民幣。
首先我們把最後一個空格後所有有關價格的信息都提取出來再處理。
Alter table `runningshoe (1)` add `price` varchar(255) ;Update `runningshoe (1)` SET `price`=SUBSTRING_INDEX(name, ,-1)
結果如下
再對price列下的字元進行清理
Update `runningshoe (1)` SET price=(SUBSTRING_INDEX(`price`,X,1))
如選取元前的字元,選取¥字元後的字元,去掉)
最後得到價格信息
推薦閱讀:
※mysql如何實現四大隔離級別的?
※django鏈接mysql資料庫
※用MySQL WHERE進行過濾
※簡單說明下MySQL的內存使用