我用Python爬了一個零售網站,分析了一千多種葡萄酒!
本文作者是一名地地道道的程序員,最大的樂趣就是爬各種網站。特別是在過去的一年里,為了娛樂和利潤而爬掉了無數網站。從小眾到主流電子商店再到新聞媒體和文學博客,通過使用簡單的工具(如BeautifulSoup)獲得了很多有趣且干凈的數據—我也很喜歡Chrome 的Headless模式。
本文,作者將分析從Greek wine e-shop商店(一個希臘葡萄酒網站)中獲得的數據,來看看哪種葡萄酒最受歡迎。
scraper本身相當簡單,可以在GitHub頁面(https://github.com/Florents-Tselai/greek-wines-analysis)找到。作者將著重于通過使用標準的Python包對得到的數據(1125個獨特的標簽)做一些快速的探索性分析。
scraper本身暴露了一個相當簡單的API。首先,請求葡萄酒頁面的數據,并將數據返回給nicedict,如下所示:
In [2]:
In [3]:
Out[3]:
然后,定義一些matplotlib。
In [4]:
加載由houseofwine_gr.dump模塊生成的數據轉儲,開發者也可以在GitHub頁面找到.json,.csv和.xlsx的數據集。
In [5]:
以下是所擁有數據的視圖:
In [6]:
Out[6]:
用np.nan替換空的字符串,使它們更容易處理 Pandas。
In [7]:
重命名一些包含特殊字符的列名,以便將它們用作本機DataFrame存儲器。
In [8]:
我們還將適當的類型分配給列:
In [9]:
讓我們將color列值從希臘語翻譯成英語。
In [10]:
以下是數據集的顏色直方圖。
In [11]:
以下是每種葡萄酒的簡單指標分布情況:
In [12]:
如圖所示,Average Rating列幾乎為正態分布,μ值高達85以上。 Reddit上的Kroutoner解釋了為什么會發生這種情況(并糾正了作者以前的錯誤):
典型的葡萄酒評級是50-100,而不是0-100。所以看起來似乎只有一半分布,實際上是一個幾乎完全的分布。此外,90分以上的葡萄酒一般被認為效果更好,銷售也更好。這個事實改變了對數據的解釋,也就是說大多數葡萄酒被評為好,只有一小部分被評為非常好。
為了進一步推進,來看一下tags 列。
似乎每個標簽列表可以給出有關葡萄酒的各種屬性(品種,甜味等)的信息。接下來,作者將這些屬性分開,將tags列元素從list 轉換為set列表元素,因為這樣會使操作更簡單。也就是說,不是在一個if x in -else-try-except-IndexError中,我們將使用set操作。
現在,做一些簡單操作來提取關于甜度,溫和性等信息,以下信息同樣從希臘語翻譯到了英語。
以下是4個屬性中每一個屬性的直方圖:
在這一點上,開發者可以(幾乎)安全地假設所有剩下的標簽顯示每種葡萄酒的品種信息,所以定義一個新的列來存儲它們。
由于解析錯誤,列中出現了一些整數,我們將其過濾掉。
我們也可以添加一個布爾變量varietal。酒中的混合物只有一種的稱為varietal,至少有兩種混合物的稱作blends。
對于varietal葡萄酒,我們設定了一個single_variety - 對于其他非varietal的葡萄酒來說,這個數值將是NaN。
讓我們來看看Varietal / Blend的分布是怎樣的。
這是一些指示性的情節。
In [27]:
看起來Chardonnay是最流行的品種,而Vidal和Sangiovese是最昂貴的品種。評分最高的是Malvasia,但所有品種都非常接近。
把注意力轉移到blends上,我們做了一些Numpy和Scikit-Learn來產生blends的矩陣。
上面的代碼簡單地從這里得到:
對此:
這些是blends中出現頻率最高的品種。
In [30]:
這里是一個熱圖,顯示哪些品種通常混合在一起。
In [31]:
In [32]:
如果你有興趣,歡迎來Github頁面與作者交流。