Skip to content

Luucasun/Netflix-analysis

Repository files navigation

Netflix Top 10 數據分析專案

這是一個完整的Netflix Top 10數據分析專案,包含數據爬取、IMDB信息補充、數據分析和可視化功能。

功能特點

  1. Netflix數據爬取:自動爬取台灣地區和全球的Netflix Top 10影集和電影數據
  2. IMDB信息補充:根據片名自動從IMDB獲取詳細信息(評分、類型、演員等)
  3. 數據分析:對爬取的數據進行統計分析
  4. 數據可視化:生成多種圖表展示分析結果

專案結構

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             # 生成的圖表

安裝步驟

  1. 安裝Python依賴
pip install -r requirements.txt
  1. 確保Python版本
  • Python 3.8 或更高版本

使用方法

快速開始(推薦)

使用主運行腳本一鍵執行所有步驟:

python run_all.py

這會按順序執行所有步驟,並在每個步驟前詢問是否繼續。

手動執行各步驟

步驟1:爬取Netflix數據

方法A:使用標準爬蟲(推薦先試這個)

python netflix_scraper.py

方法B:使用Selenium爬蟲(如果方法A無法獲取數據)

如果Netflix頁面使用JavaScript動態加載,需要使用Selenium版本:

  1. 安裝ChromeDriver:

  2. 運行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.csv
  • taiwan_movie_period_1.csv, taiwan_movie_period_2.csv, taiwan_movie_period_3.csv
  • global_period_1.csv, global_period_2.csv, global_period_3.csv

步驟2:補充IMDB信息

方法A:使用標準爬蟲(推薦先試這個)

python imdb_scraper.py

方法B:使用Selenium爬蟲(如果方法A無法獲取數據)

如果IMDB頁面使用JavaScript動態加載,需要使用Selenium版本:

python imdb_scraper_selenium.py

這會讀取 data/ 目錄下的所有CSV文件,為每個標題搜索並添加IMDB信息,生成 *_imdb.csv 文件。

注意

  • IMDB爬蟲會自動控制請求頻率,避免過於頻繁的請求
  • 整個過程可能需要較長時間
  • 如果標準版本失敗,會自動嘗試Selenium版本(在測試腳本中)

步驟3:數據分析

對爬取的數據進行分析:

python data_analyzer.py

這會生成:

  • 基本統計信息
  • 最受歡迎標題
  • 類型分布
  • 地區比較
  • 分析摘要CSV文件

步驟4:生成圖表

生成可視化圖表:

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.pynetflix_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配置

如果使用Selenium版本,可以調整:

scraper = NetflixScraperSelenium(delay=3, headless=True)  # headless=False 可以看到瀏覽器窗口

注意事項

  1. 爬取頻率:請遵守網站的使用條款,不要過於頻繁地請求。預設的延遲時間已經考慮了這一點。

  2. 網絡連接:確保網絡連接穩定,爬取過程可能需要較長時間。

  3. 數據完整性:如果某些頁面無法訪問或結構發生變化,可能需要調整爬蟲代碼。

  4. 中文字體:圖表使用中文字體,如果系統沒有安裝相應字體,可能需要調整 visualizer.py 中的字體設置。

故障排除

爬蟲無法獲取數據

  • 檢查網絡連接
  • 確認URL是否正確
  • 檢查網站結構是否發生變化(可能需要更新選擇器)
  • 如果標準爬蟲失敗,嘗試使用Selenium版本 (netflix_scraper_selenium.py)
  • 某些頁面可能需要登錄,檢查是否需要處理登錄狀態

Selenium相關問題

  • 確保已安裝Chrome瀏覽器
  • 確保ChromeDriver版本與Chrome版本匹配
  • 如果遇到驅動程序問題,可以設置 headless=False 來查看瀏覽器行為
  • 在Windows上,可能需要將ChromeDriver.exe放在腳本目錄或系統PATH中

IMDB搜索失敗

  • 檢查網絡連接
  • 某些標題可能在IMDB中不存在或名稱不匹配
  • 可以手動檢查並調整標題名稱
  • IMDB可能有反爬蟲機制,如果頻繁失敗,增加延遲時間
  • 如果標準版本失敗,嘗試使用Selenium版本 (imdb_scraper_selenium.py)
  • 已改進的爬蟲使用多種備用方法來匹配IMDB的實際頁面結構
  • 如果仍然失敗,可以運行 python test_scraper.py 來診斷問題

圖表無法顯示中文

  • 安裝中文字體(如Microsoft JhengHei)
  • 或修改 visualizer.py 中的字體設置
  • Windows系統通常已包含Microsoft JhengHei字體

數據分析方式

本專案使用Python進行數據分析,主要分析模組為 data_analyzer.pyvisualizer.py

分析維度

  1. 基本統計分析

    • 總記錄數統計
    • 唯一標題數量
    • 時間範圍分析
    • 地區分布統計
    • 內容類型分布(影集 vs 電影)
  2. 標題受歡迎度分析

    • 按出現次數排序:統計每個標題在Top 10中出現的總次數
    • 按平均排名排序:計算每個標題的平均排名(排名越小越好)
    • 按IMDB評分排序:根據IMDB評分排序標題
  3. 時間趨勢分析

    • 標題隨時間的排名變化
    • 每週排名趨勢
    • 熱門標題的持續時間
  4. 類型分析

    • 類型分布統計
    • 最受歡迎的類型
    • 類型與評分的關係
  5. 地區比較分析

    • 不同地區的標題數量比較
    • 地區間的平均排名差異
    • 地區特色內容分析
  6. IMDB評分分析

    • 評分分布直方圖
    • 平均評分統計
    • 評分與排名的相關性

可視化圖表

專案生成以下7種可視化圖表:

  1. 最受歡迎標題圖 (top_titles.png)

    • 橫向條形圖
    • 顯示Top N個最常出現在Top 10的標題
    • X軸:出現次數,Y軸:標題名稱
  2. 時間趨勢圖 (trending_over_time.png)

    • 折線圖
    • 顯示Top 5標題隨時間的排名變化
    • X軸:日期,Y軸:平均排名
  3. 類型分布圖 (genre_distribution.png)

    • 橫向條形圖
    • 顯示最受歡迎的類型及其出現次數
    • X軸:出現次數,Y軸:類型名稱
  4. 地區比較圖 (region_comparison.png)

    • 柱狀圖
    • 比較不同地區的唯一標題數量
    • X軸:地區,Y軸:唯一標題數
  5. 內容類型分布圖 (content_type_distribution.png)

    • 餅圖
    • 顯示影集和電影的比例分布
    • 百分比標註
  6. IMDB評分分布圖 (rating_distribution.png)

    • 直方圖
    • 顯示所有標題的IMDB評分分布
    • 包含平均評分線
  7. 每週排名熱力圖 (weekly_rank_heatmap.png)

    • 熱力圖
    • 顯示Top N標題在每週的排名變化
    • 顏色越深表示排名越靠前(數字越小)

分析技術

  • 數據處理:使用Pandas進行數據清洗、轉換和聚合
  • 統計分析:使用NumPy進行數值計算
  • 可視化:使用Matplotlib和Seaborn生成圖表
  • 數據合併:自動合併多個時間段的數據文件
  • 去重處理:自動移除重複記錄
  • 數據驗證:類型轉換和缺失值處理

分析結果示例

根據實際爬取的2024年數據,以下是部分分析結果:

基本統計

  • 總記錄數:1,576條
  • 唯一標題數:21個
  • 時間範圍:2024-01-01 至 2024-12-31
  • 數據來源:台灣地區(影集+電影)+ 全球數據

Top 10 最受歡迎標題(按出現次數)

  1. 標題2 - 284次
  2. 標題3 - 248次
  3. 標題1 - 206次
  4. 標題4 - 171次
  5. 標題5 - 156次
  6. 標題6 - 120次
  7. 標題9 - 63次
  8. 標題10 - 61次
  9. 標題7 - 61次
  10. 標題13 - 56次

註:實際標題名稱請查看 data/analysis_summary.csv 文件

主要發現

  1. 內容集中度:少數標題長期占據Top 10位置,顯示Netflix熱門內容的持續性
  2. 地區差異:台灣地區和全球的Top 10存在一定差異,反映地區文化偏好
  3. 類型多樣性:涵蓋多種類型,滿足不同觀眾需求
  4. 評分分布:Top 10標題的IMDB評分普遍較高,顯示Netflix內容質量

詳細結果

完整的分析結果保存在:

  • data/analysis_summary.csv - 分析摘要
  • charts/*.png - 各種可視化圖表

授權

本專案僅供學習和研究使用。請遵守相關網站的使用條款和robots.txt規則。

貢獻

歡迎提交問題和改進建議!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages