# 09 - 探索資料的結構與特性 如果我們是第一次接觸到這個資料庫時,在做查詢與分析之前,就需要瞭解他的結構與特性。 EDA: 探索性資料分析 ## 9.1 EDA 準備要探索的標的 我們需要透過 SQL 查詢瞭解表格的資料樣貌,包括以下幾件事情: 1. 表格多大? 2. 資料的時間跨度? 3. 每個產品與每筆購買記錄中有哪些可用資訊? 4. 每個表格的粒度(詳細程度)? 5. 唯一值欄位是哪一個? 6. 由於需要觀察隨時間變化的趨勢,有哪些日期和時間維度可用,當這些值隨時間彙總時,它們看起來如何? 7. 每個表格中的資料與其他表格之間的關係?如何將其連結起來以彙總資訊? ## 9.2 探索 product 表格 MySQL 可以使用 DESCRIBE [Table Name] 的功能,列出表格架構 ![CleanShot 2024-03-10 at 16.27.24@2x](https://hackmd.io/_uploads/rJmZ1espT.jpg) ### 瞭解表格中的欄位 ![CleanShot 2024-03-10 at 16.25.29@2x](https://hackmd.io/_uploads/ryqKR1oTa.jpg) - product_category_id 欄位是整數,由名稱可以推測此欄位是外部鍵 - product_name 與 product_size 欄位有許多不同的值 - product_qty_type 兩種值:lbs & unit - product_id 產品編號 (可能是 primary key) ### 檢查看看是否有重複的 product_id ```sql= SELECT product_id, COUNT(*) FROM farmers_market.product GROUP BY product_id HAVING COUNT(*) > 1 ``` 結果:沒有數字回傳,表示沒有重複的 product_id。雖然無法保證這個欄位是此表格的主鍵,但可以確認 product_id 目前是唯一值,我們可以說這個表格的「粒度是每個產品一列」 ### 我們想知道產品分類編號到底有哪些分類 需要看 product_category 表格有什麼 ![CleanShot 2024-03-13 at 15.49.36@2x](https://hackmd.io/_uploads/SyWi90CTa.jpg) 上圖可以看到每個 product_category_id 會對應到 product_category_name,這個對我們以產品分類報告存貨與購買趨勢會很有幫助 ### 找出各分類與加總有多少種產品 product 表格中總共有多少產品? ![CleanShot 2024-03-13 at 15.52.16@2x](https://hackmd.io/_uploads/HJ1BsAApa.jpg) 每個產品分類下各有多少種產品? ![CleanShot 2024-03-13 at 15.59.31@2x](https://hackmd.io/_uploads/Skcb60CTp.jpg) ## 9.3 探索所有可能的欄位值 ### 探索 product 表格中的計量單位有幾種 ![CleanShot 2024-03-13 at 16.13.28@2x](https://hackmd.io/_uploads/SJpEeJkCT.jpg) 注意:裡面有 null 的值,必須記錄下來,萬一以後要對此欄位做數值計算就要特別注意 ### 探索 vendor_inventory 表格的欄位 ![CleanShot 2024-03-13 at 16.15.44@2x](https://hackmd.io/_uploads/HyETgJJRT.jpg) - original_price: - 從字面上推測是沒有促銷活動的價格。但最好還是跟資料庫管理者確認。 - 我們也可以透過市集日期追蹤並觀察該數值是否有隨時間變化。 - quantity: - 欄位值有小數,表示該產品的計量單位無論是 lbs 或 unit 都會以小數的形式記錄 ### 探索表格的欄位主鍵 #### 使用 DESCRIBE ![CleanShot 2024-03-13 at 16.24.52@2x](https://hackmd.io/_uploads/B1TkQkyCp.jpg) #### 或使用 `SHOW CREATE TABLE vendor_inventory` ![CleanShot 2024-03-13 at 16.23.50@2x](https://hackmd.io/_uploads/BJvhM11A6.jpg) ### 或利用 GUI ![CleanShot 2024-03-13 at 16.25.45@2x](https://hackmd.io/_uploads/ByTM7ky06.jpg) ### 探索資料中的日期範圍 找出第一個跟最後一個市集日期 ![CleanShot 2024-03-13 at 16.30.09@2x](https://hackmd.io/_uploads/B1X7Ny1C6.jpg) 由此可知,我們只有一年半的資料。如果想用此資料去訓練模型做年度各季的預測,就必須認清這個資料缺乏多個完整年度資料的事實。 即使有多年累積的資料,也要確認是否都有妥善記錄。 ### 探索供應商參予市集的日期範圍 總共有多少不同的供應商參與過市集? 何時開始? 最近一次的日期? ![CleanShot 2024-03-13 at 16.33.20@2x](https://hackmd.io/_uploads/ryQyrkkRp.jpg) ## 9.4 探索資料隨時間的變化 在檢查日期時,第一個可能會想到的是此資料庫是否有對特殊時段做標示,譬如 2020 Covid-19,實體店面銷售衰退而先上購物大增。如果有標示出來,對建構預測模型會很有幫助。 大部分的供應商整年都營業嗎?還是不同的供應商有各自的營業期間? 抓出每個月有營業的供應商數量: ![CleanShot 2024-03-13 at 16.39.16@2x](https://hackmd.io/_uploads/ryUVvJyAp.jpg) 1. 6 ~ 9 月都是三個供應商,其他月份都只有兩個,所以其中一個供應商可能是季節性參與 2. market_month 獨缺 1 月和 2 月,可能農夫市集這兩個月不營業?(記得要跟相關人員確認是否為事實,如果實際有營業卻沒有記錄,就是資料缺漏了) 在資料探索階段,需要檢查資料的這些層面,而不是等到進行分析時才發現問題。 ### 看特定供應商的存貨資料細節 接下來,我們要看特定供應商的存貨資料細節,下面以供應商 7 為例 ![CleanShot 2024-03-13 at 16.47.52@2x](https://hackmd.io/_uploads/BJwtdyyC6.jpg) 1. 5 月及 6 月只賣一種產品 2. 產品編號 4 的原價都沒有變 3. 由 quantity 欄位看出數量為 30.00、40.00 單位應該是 unit,而有些數量是 7.38、33.63 的應該是重量 (lbs) ## 9.5 探索多個表格 (1) - 彙總銷售量 我們對供應商 7 帶來的產品 4 感到好奇,他在每個市集日期都會帶 30 或 40 個,那到底能賣出多少個呢? ### 探索 customer_purchases 表格的內容 查看該表格中包含哪些資料 ![CleanShot 2024-03-13 at 16.54.42@2x](https://hackmd.io/_uploads/rk0JcykCp.jpg) 1. 顧客購買的每一項產品都有其專屬的一列 2. 購買數量記錄在 quantity 欄位 3. 從 cost_to_customer_per_qty 欄位推測也許不同的顧客拿到的價格不一定相同 4. quantity 和 cost_to_customer_per_qty 的欄位值都帶有兩位小數 5. 除了 market_date 日期,還有記錄 transaction_time。這樣我們可以根據一天中的不同時段製作客流報表,或是透過查找各顧客在當日最早和最晚的購買時間,估計顧客在市集的停留時間 ### 探索某位顧客購買某樣產品的習性 ![CleanShot 2024-03-13 at 17.00.42@2x](https://hackmd.io/_uploads/SkUPj11Ra.jpg) 可以看到顧客 12 很喜歡產品 4,或許以後有類似的產品可以主動推薦給他 ### 彙總各市集日期某產品的銷量與營業額 ![CleanShot 2024-03-13 at 17.04.28@2x](https://hackmd.io/_uploads/BkbV3kJ0T.jpg) ## 9.6 探索多個表格 (2) - 存貨量 vs. 銷售量 先確認表格連結無誤 ![CleanShot 2024-03-13 at 17.10.29@2x](https://hackmd.io/_uploads/Hkh06y10a.jpg) 去除不需要的欄位 ![CleanShot 2024-03-13 at 17.13.30@2x](https://hackmd.io/_uploads/r1OO0yyAT.jpg) 1. 用 vendor_inventory 當 LEFT JOIN 的主表格,是因為顧客無法購買不在貨存資料的產品 2. 有些商品有存貨但是沒有交易記錄,用 vendor_inventory 當 LEFT JOIN 的主表格可以保留這些商品 ### 將供應商名稱和產品名稱都放進輸出中 ![CleanShot 2024-03-13 at 17.18.23@2x](https://hackmd.io/_uploads/r1XtylJAp.jpg) ### 畫出存貨量與銷售量對照圖 可以將查詢結果匯出成 csv 之類的檔案格式,再用 Excel 畫出來 ![CleanShot 2024-03-13 at 17.20.33@2x](https://hackmd.io/_uploads/Hyelxx1A6.jpg)