這是一個完整的Netflix Top 10數據分析專案,包含數據爬取、IMDB信息補充、數據分析和可視化功能。
- Netflix數據爬取:自動爬取台灣地區和全球的Netflix Top 10影集和電影數據
- IMDB信息補充:根據片名自動從IMDB獲取詳細信息(評分、類型、演員等)
- 數據分析:對爬取的數據進行統計分析
- 數據可視化:生成多種圖表展示分析結果
Netflix-analysis/
├── netflix_scraper.py # Netflix數據爬蟲
├── imdb_scraper.py # IMDB數據爬蟲
├── data_analyzer.py # 數據分析模組
├── visualizer.py # 數據可視化模組
├── requirements.txt # 依賴套件
├── README.md # 說明文件
├── data/ # 數據目錄(自動創建)
│ ├── *.csv # 爬取的原始數據
│ └── *_imdb.csv # 增強後的數據
└── charts/ # 圖表目錄(自動創建)
└── *.png # 生成的圖表
- 安裝Python依賴
pip install -r requirements.txt- 確保Python版本
- Python 3.8 或更高版本
使用主運行腳本一鍵執行所有步驟:
python run_all.py這會按順序執行所有步驟,並在每個步驟前詢問是否繼續。
方法A:使用標準爬蟲(推薦先試這個)
python netflix_scraper.py方法B:使用Selenium爬蟲(如果方法A無法獲取數據)
如果Netflix頁面使用JavaScript動態加載,需要使用Selenium版本:
-
安裝ChromeDriver:
- 下載地址:https://chromedriver.chromium.org/
- 確保ChromeDriver在系統PATH中,或與腳本在同一目錄
-
運行Selenium版本:
python netflix_scraper_selenium.py這會爬取:
- 台灣地區影集(2024-01-01 至 2024-12-31)
- 台灣地區電影(2024-01-01 至 2024-12-31)
- 全球數據(2024-01-01 至 2024-12-31)
數據會保存在 data/ 目錄下,文件名格式:
taiwan_tv_period_1.csv,taiwan_tv_period_2.csv,taiwan_tv_period_3.csvtaiwan_movie_period_1.csv,taiwan_movie_period_2.csv,taiwan_movie_period_3.csvglobal_period_1.csv,global_period_2.csv,global_period_3.csv
方法A:使用標準爬蟲(推薦先試這個)
python imdb_scraper.py方法B:使用Selenium爬蟲(如果方法A無法獲取數據)
如果IMDB頁面使用JavaScript動態加載,需要使用Selenium版本:
python imdb_scraper_selenium.py這會讀取 data/ 目錄下的所有CSV文件,為每個標題搜索並添加IMDB信息,生成 *_imdb.csv 文件。
注意:
- IMDB爬蟲會自動控制請求頻率,避免過於頻繁的請求
- 整個過程可能需要較長時間
- 如果標準版本失敗,會自動嘗試Selenium版本(在測試腳本中)
對爬取的數據進行分析:
python data_analyzer.py這會生成:
- 基本統計信息
- 最受歡迎標題
- 類型分布
- 地區比較
- 分析摘要CSV文件
生成可視化圖表:
python visualizer.py這會生成以下圖表(保存在 charts/ 目錄):
top_titles.png- 最受歡迎標題trending_over_time.png- 隨時間趨勢genre_distribution.png- 類型分布region_comparison.png- 地區比較content_type_distribution.png- 內容類型分布rating_distribution.png- IMDB評分分布weekly_rank_heatmap.png- 每週排名熱力圖
編輯 netflix_scraper.py 或 netflix_scraper_selenium.py 中的 periods 變數:
periods = [
("2024-01-01", "2024-04-30"),
("2024-05-01", "2024-08-31"),
("2024-09-01", "2024-12-31")
]在爬蟲類的初始化中修改 delay 參數:
scraper = NetflixScraper(delay=2) # 2秒延遲如果使用Selenium版本,可以調整:
scraper = NetflixScraperSelenium(delay=3, headless=True) # headless=False 可以看到瀏覽器窗口-
爬取頻率:請遵守網站的使用條款,不要過於頻繁地請求。預設的延遲時間已經考慮了這一點。
-
網絡連接:確保網絡連接穩定,爬取過程可能需要較長時間。
-
數據完整性:如果某些頁面無法訪問或結構發生變化,可能需要調整爬蟲代碼。
-
中文字體:圖表使用中文字體,如果系統沒有安裝相應字體,可能需要調整
visualizer.py中的字體設置。
- 檢查網絡連接
- 確認URL是否正確
- 檢查網站結構是否發生變化(可能需要更新選擇器)
- 如果標準爬蟲失敗,嘗試使用Selenium版本 (
netflix_scraper_selenium.py) - 某些頁面可能需要登錄,檢查是否需要處理登錄狀態
- 確保已安裝Chrome瀏覽器
- 確保ChromeDriver版本與Chrome版本匹配
- 如果遇到驅動程序問題,可以設置
headless=False來查看瀏覽器行為 - 在Windows上,可能需要將ChromeDriver.exe放在腳本目錄或系統PATH中
- 檢查網絡連接
- 某些標題可能在IMDB中不存在或名稱不匹配
- 可以手動檢查並調整標題名稱
- IMDB可能有反爬蟲機制,如果頻繁失敗,增加延遲時間
- 如果標準版本失敗,嘗試使用Selenium版本 (
imdb_scraper_selenium.py) - 已改進的爬蟲使用多種備用方法來匹配IMDB的實際頁面結構
- 如果仍然失敗,可以運行
python test_scraper.py來診斷問題
- 安裝中文字體(如Microsoft JhengHei)
- 或修改
visualizer.py中的字體設置 - Windows系統通常已包含Microsoft JhengHei字體
本專案使用Python進行數據分析,主要分析模組為 data_analyzer.py 和 visualizer.py。
-
基本統計分析
- 總記錄數統計
- 唯一標題數量
- 時間範圍分析
- 地區分布統計
- 內容類型分布(影集 vs 電影)
-
標題受歡迎度分析
- 按出現次數排序:統計每個標題在Top 10中出現的總次數
- 按平均排名排序:計算每個標題的平均排名(排名越小越好)
- 按IMDB評分排序:根據IMDB評分排序標題
-
時間趨勢分析
- 標題隨時間的排名變化
- 每週排名趨勢
- 熱門標題的持續時間
-
類型分析
- 類型分布統計
- 最受歡迎的類型
- 類型與評分的關係
-
地區比較分析
- 不同地區的標題數量比較
- 地區間的平均排名差異
- 地區特色內容分析
-
IMDB評分分析
- 評分分布直方圖
- 平均評分統計
- 評分與排名的相關性
專案生成以下7種可視化圖表:
-
最受歡迎標題圖 (
top_titles.png)- 橫向條形圖
- 顯示Top N個最常出現在Top 10的標題
- X軸:出現次數,Y軸:標題名稱
-
時間趨勢圖 (
trending_over_time.png)- 折線圖
- 顯示Top 5標題隨時間的排名變化
- X軸:日期,Y軸:平均排名
-
類型分布圖 (
genre_distribution.png)- 橫向條形圖
- 顯示最受歡迎的類型及其出現次數
- X軸:出現次數,Y軸:類型名稱
-
地區比較圖 (
region_comparison.png)- 柱狀圖
- 比較不同地區的唯一標題數量
- X軸:地區,Y軸:唯一標題數
-
內容類型分布圖 (
content_type_distribution.png)- 餅圖
- 顯示影集和電影的比例分布
- 百分比標註
-
IMDB評分分布圖 (
rating_distribution.png)- 直方圖
- 顯示所有標題的IMDB評分分布
- 包含平均評分線
-
每週排名熱力圖 (
weekly_rank_heatmap.png)- 熱力圖
- 顯示Top N標題在每週的排名變化
- 顏色越深表示排名越靠前(數字越小)
- 數據處理:使用Pandas進行數據清洗、轉換和聚合
- 統計分析:使用NumPy進行數值計算
- 可視化:使用Matplotlib和Seaborn生成圖表
- 數據合併:自動合併多個時間段的數據文件
- 去重處理:自動移除重複記錄
- 數據驗證:類型轉換和缺失值處理
根據實際爬取的2024年數據,以下是部分分析結果:
- 總記錄數:1,576條
- 唯一標題數:21個
- 時間範圍:2024-01-01 至 2024-12-31
- 數據來源:台灣地區(影集+電影)+ 全球數據
- 標題2 - 284次
- 標題3 - 248次
- 標題1 - 206次
- 標題4 - 171次
- 標題5 - 156次
- 標題6 - 120次
- 標題9 - 63次
- 標題10 - 61次
- 標題7 - 61次
- 標題13 - 56次
註:實際標題名稱請查看 data/analysis_summary.csv 文件
- 內容集中度:少數標題長期占據Top 10位置,顯示Netflix熱門內容的持續性
- 地區差異:台灣地區和全球的Top 10存在一定差異,反映地區文化偏好
- 類型多樣性:涵蓋多種類型,滿足不同觀眾需求
- 評分分布:Top 10標題的IMDB評分普遍較高,顯示Netflix內容質量
完整的分析結果保存在:
data/analysis_summary.csv- 分析摘要charts/*.png- 各種可視化圖表
本專案僅供學習和研究使用。請遵守相關網站的使用條款和robots.txt規則。
歡迎提交問題和改進建議!