標籤:

圖書清洗(轉發)

圖書清洗(轉發)

SQL數據分析豆瓣圖書

由於平時會去豆瓣查一些書的評分和簡介,所以,在學習了一段時間的SQL之後,想對豆瓣的圖書數據進行一次粗糙的分析,從而鞏固自己的技能,並且開拓自己的眼界。這次爬取後的數據,在過濾了外幣書籍之後,用五萬多條。因為數據是以CSV的格式保存的,所以需要從Excel導入到MySQL中,以下是數據。

https://pan.baidu.com/s/1VkZWCsO603XZnBgryqHGug?

pan.baidu.com

在一開始,首先確定自己想要得到哪些結果,對我而言,有如下幾個:

1.書籍的價格一般都在什麼範圍?

2.書籍的數量是否隨時間增長?

3.書籍的價格和書籍的評分有關係嗎?

4.書籍的評分和書籍的評論數量存在某種關係嗎?

表的結構如下所示:

對於第一個問題,書籍的價格一般都在什麼範圍?

使用的SQL如下:

SELECT (CASEWHEN 價格 >0 AND 價格<= 50 THEN 0~50WHEN 價格 >50 AND 價格<= 100 THEN 50~100WHEN 價格 >100 AND 價格<= 500 THEN 100~500WHEN 價格 >500 AND 價格<= 1000 THEN 500~1000ELSE 1000以上END) AS 價格範圍,COUNT(書名) AS 書名數 FROM douban GROUP BY (CASEWHEN 價格 >0 AND 價格<= 50 THEN 0~50WHEN 價格 >50 AND 價格<= 100 THEN 50~100WHEN 價格 >100 AND 價格<= 500 THEN 100~500WHEN 價格 >500 AND 價格<= 1000 THEN 500~1000ELSE 1000以上END);

得到的結果如下所示:

由此可見,絕大多數的書籍價格在50元以內,其次是50元到100元,有少量書籍在1000以上,這和生活經驗是比較吻合的。

第二個問題:書籍數量是否隨時間增長?

使用的SQL如下:

SELECT 出版時間, COUNT(書名) FROM doubanGROUP BY 出版時間ORDER BY 出版時間;

可以看到,從統計的數據看到,1905年書籍數量出奇的多,後經過查詢,發現是數據本身的錯誤。因此,我們可以看到,儘管存在一些錯誤數據,但是書籍的數量總體呈上升趨勢,即,書籍數量是隨時間增長的

第三個問題: 價格和評分有關係嗎?

我們先統計不同價位書籍的評分的平均值和最值,相應的SQL如下:

SELECT AVG(a.評分) AS 平均值, MAX(a.評分) AS 最大值,MIN(a.評分) AS 最小值FROM(SELECT 評分 FROM doubanWHERE 價格>0 AND 價格<=50) as aUNION ALL SELECT AVG(b.評分) AS 平均值, MAX(b.評分) AS 最大值,MIN(b.評分) AS 最小值FROM(SELECT 評分 FROM doubanWHERE 價格>50 AND 價格<=100) as bUNION ALL SELECT AVG(c.評分) AS 平均值, MAX(c.評分) AS 最大值,MIN(c.評分) AS 最小值FROM(SELECT 評分 FROM doubanWHERE 價格>100 AND 價格<=500) as cUNION ALL SELECT AVG(d.評分) AS 平均值, MAX(d.評分) AS 最大值,MIN(d.評分) AS 最小值FROM(SELECT 評分 FROM doubanWHERE 價格>500 AND 價格<=1000) as dUNION ALL SELECT AVG(e.評分) AS 平均值, MAX(e.評分) AS 最大值,MIN(e.評分) AS 最小值FROM(SELECT 評分 FROM doubanWHERE 價格>1000) as e;

得到0~50元,50~100元,100~500元,500~1000元,1000元以上的書籍數據分別如下:

因為每個價位的書籍數目不同,同時,為了消除極端值的影響,我們再計算中位數,相應SQL如下:

------------0~50-----------SELECT AVG(a.評分) AS 評分 FROM (SELECT 評分 FROM doubanWHERE 價格>0 AND 價格<=50ORDER BY 評分LIMIT 20283,2) AS a------------50~100-----------SELECT 評分 FROM doubanWHERE 價格>50 AND 價格<=100ORDER BY 評分LIMIT 3807,1------------100~500-----------SELECT 評分 FROM doubanWHERE 價格>100 AND 價格<=500ORDER BY 評分LIMIT 1930,1------------500~1000-----------SELECT 評分 FROM doubanWHERE 價格>500 AND 價格<=1000ORDER BY 評分LIMIT 147,1------------1000以上-----------SELECT 評分 FROM doubanWHERE 價格>1000ORDER BY 評分LIMIT 59,1;

結果如下所示:

可以看到,不同價位的書籍的評分中位數都比較接近,因此可以得出結論,隨著價格的上升,較低評分圖書所佔的比例就越大。

第四個問題:評分和評論數量存在某種關係嗎?

相應的SQL如下:

DELIMITER //CREATE FUNCTION V2(v INT)RETURNS CHAR(20) DETERMINISTICBEGIN IF v>0 AND v<= 5 THEN RETURN 0~5; ELSEIF v>5 AND v<= 6 THEN RETURN 5~6; ELSEIF v>6 AND v<= 7 THEN RETURN 6~7; ELSEIF v>7 AND v<= 8 THEN RETURN 7~8; ELSEIF v>8 AND v<= 9 THEN RETURN 8~9; ELSE RETURN 10; END IF;END//DELIMITER ;SELECT V2(評分) AS 評分, SUM(評論數量) AS 評論數量 FROM doubanGROUP BY V2(評分);

得到結果如下:

可以看到,評分在8~9分的評論總數最多,其次是7~8分,0~5分的評論總數最少,因此,我們可以得出結論,隨著評分的上升,評論數量也逐漸增加,在7~8分達到頂峰,然後開始下降。

以上就是這次實踐的全部內容,希望大家平時可以少玩手機,多看一些自己喜歡的書


推薦閱讀:

如有一天,所有書籍都被燒成灰燼 | 閱讀時差
今天寫點關於書的事兒~
網路小說推薦合集,找找你看過那些?
《愛的藝術》思維導圖
書籍曾這樣一路走來2010

TAG:書籍 |