借助AI工具完成豆瓣电影数据分析项目的全流程教程

本教程将详细展示如何借助AI工具(如ChatGPT、GitHub Copilot等)完成一个完整的软件项目——豆瓣电影Top50评分数据分析与可视化。我们将从项目构思到最终实现,分步骤讲解每个环节如何利用AI工具提高效率。

项目概述

目标:创建一个Python程序,能够爬取豆瓣电影Top50的数据,进行统计分析,并生成可视化图表。

技术栈

  • Python 3.x

  • Requests (HTTP请求)

  • BeautifulSoup (HTML解析)

  • Pandas (数据分析)

  • Matplotlib/Seaborn (数据可视化)

步骤1:项目规划与需求分析

AI辅助方式:使用ChatGPT帮助梳理项目需求和技术方案

提示词
"我要做一个豆瓣电影Top50的评分数据分析项目,请帮我列出详细的功能需求和技术实现方案"

AI输出示例

  1. 数据获取:爬取电影排名、名称、评分、评价人数、年份等信息

  2. 数据清洗:处理缺失值、格式转换

  3. 数据分析:基本统计、评分分布、评价人数分析等

  4. 数据可视化:评分分布图、排名-评分关系图等

  5. 技术方案:Requests+BeautifulSoup爬取,Pandas分析,Matplotlib可视化

步骤2:环境配置

AI辅助方式:让AI生成环境配置指令

提示词
"请给出创建这个项目Python虚拟环境并安装所需库的命令"

AI输出代码

bash

复制

# 创建虚拟环境
python -m venv douban_analysis
source douban_analysis/bin/activate  # Linux/Mac
douban_analysis\Scripts\activate    # Windows

# 安装依赖
pip install requests beautifulsoup4 pandas matplotlib seaborn

步骤3:数据爬取实现

AI辅助方式:让AI生成基础爬虫代码框架

提示词
"请用Python写一个爬取豆瓣Top50电影信息的函数,包含排名、名称、评分、评价人数"

AI输出代码(经调整后):

python

复制

import requests
from bs4 import BeautifulSoup
import pandas as pd

def get_douban_top50():
    url = 'https://movie.douban.com/top250'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    
    movies = []
    
    for start in [0, 25]:  # 前两页共50条
        params = {'start': start}
        response = requests.get(url, headers=headers, params=params)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        for item in soup.find_all('div', class_='item')[:25]:  # 每页25条
            # 解析代码...
            movies.append(movie_info)
            
            if len(movies) >= 50:
                break
                
    return pd.DataFrame(movies)

遇到问题:如何解析年份信息?
AI提问:"豆瓣电影条目中的年份和国家信息混合在一起,如何用BeautifulSoup准确提取出年份?"

AI解决方案

python

复制

info = item.find('div', class_='bd').p.text.strip().split('\n')
year_country = info[1].split('/')[0].strip()
year = ''.join(filter(str.isdigit, year_country))[:4]

步骤4:数据分析实现

AI辅助方式:让AI建议有意义的数据分析角度

提示词
"对于豆瓣电影评分数据,有哪些有意义的统计分析可以做?请给出Pandas实现代码"

AI输出代码

python

复制

# 基本统计
print(df.describe())

# 评分最高的电影
print(df.sort_values('评分', ascending=False).head(5))

# 评价人数与评分的关系
print(df.groupby(pd.cut(df['评分'], bins=[8.0, 8.5, 9.0, 9.5]))['评价人数'].mean())

# 不同年份电影数量
print(df['年份'].value_counts().sort_index())

步骤5:数据可视化实现

AI辅助方式:让AI推荐合适的可视化类型并生成代码

提示词
"请推荐适合电影评分数据的可视化方案,并用Matplotlib/Seaborn实现"

AI输出代码(部分):

python

复制

import matplotlib.pyplot as plt
import seaborn as sns

# 评分分布直方图
plt.figure(figsize=(10, 6))
sns.histplot(df['评分'], bins=10, kde=True)
plt.title('豆瓣Top50电影评分分布')

# 评分与评价人数散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='评分', y='评价人数', data=df, hue='排名')
plt.title('评分与评价人数关系')

# 电影年份分布
plt.figure(figsize=(12, 6))
df['年份'].value_counts().sort_index().plot(kind='bar')
plt.title('不同年份电影数量分布')

步骤6:代码优化与调试

AI辅助方式:使用AI检查代码问题并提出改进建议

提问:"我的豆瓣爬虫有时会返回空数据,可能是什么原因?如何改进?"

AI建议

  1. 添加请求重试机制

  2. 增加异常处理

  3. 添加延迟防止被封

  4. 检查User-Agent

改进后的代码

python

复制

import time
from random import uniform

def get_douban_top50():
    # ...原有代码...
    for start in [0, 25]:
        try:
            time.sleep(uniform(1, 3))  # 随机延迟
            response = requests.get(url, headers=headers, params=params, timeout=10)
            response.raise_for_status()  # 检查请求是否成功
            # ...解析代码...
        except Exception as e:
            print(f"请求失败: {e}")
            continue
    # ...原有代码...

步骤7:项目文档撰写

AI辅助方式:让AI帮助生成项目README

提示词
"请为这个豆瓣电影分析项目写一个专业的README.md,包含项目介绍、使用方法、示例输出等"

AI输出示例

markdown

复制

# 豆瓣电影Top50数据分析

## 项目简介
本项目爬取豆瓣电影Top50数据,进行统计分析并生成可视化图表...

## 功能特性
- 数据爬取:获取电影排名、名称、评分等信息
- 数据分析:评分分布、评价人数分析等
- 数据可视化:生成多种统计图表

## 使用方法
1. 安装依赖:`pip install -r requirements.txt`
2. 运行程序:`python douban_analysis.py`
3. 查看生成的图表...

## 示例输出
![评分分布图](sample_plot.png)

步骤8:扩展功能建议

AI辅助方式:询问AI项目可能的扩展方向

提问:"这个豆瓣电影分析项目还可以添加哪些有趣的功能?"

AI建议

  1. 添加情感分析:对短评进行情感倾向分析

  2. 导演/演员分析:统计出现频率最高的导演和演员

  3. 预测模型:基于历史数据预测电影评分

  4. 网络应用:使用Flask/Django创建Web展示界面

  5. 自动化报告:生成PDF分析报告

完整项目代码

以下是整合后的完整代码:

python

复制

# douban_analysis.py
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import time
from random import uniform

# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def get_douban_top50():
    """爬取豆瓣Top50电影数据"""
    url = 'https://movie.douban.com/top250'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    
    movies = []
    
    for start in [0, 25]:  # 前两页
        try:
            time.sleep(uniform(1, 3))  # 随机延迟
            params = {'start': start}
            response = requests.get(url, headers=headers, params=params, timeout=10)
            response.raise_for_status()
            soup = BeautifulSoup(response.text, 'html.parser')
            
            for item in soup.find_all('div', class_='item')[:25]:
                rank = item.find('em').text
                title = item.find('span', class_='title').text
                rating = float(item.find('span', class_='rating_num').text)
                rating_people = item.find('div', class_='star').find_all('span')[-1].text
                rating_people = int(rating_people.replace('人评价', '').replace(',', ''))
                
                # 提取年份
                info = item.find('div', class_='bd').p.text.strip().split('\n')
                year_country = info[1].split('/')[0].strip()
                year = ''.join(filter(str.isdigit, year_country))[:4]
                try:
                    year = int(year)
                except:
                    year = None
                
                movies.append({
                    '排名': int(rank),
                    '电影名称': title,
                    '评分': rating,
                    '评价人数': rating_people,
                    '年份': year
                })
                
                if len(movies) >= 50:
                    break
                    
        except Exception as e:
            print(f"获取第{start//25+1}页失败: {e}")
            continue
            
    return pd.DataFrame(movies)

def analyze_data(df):
    """执行数据分析"""
    print("\n=== 基本统计信息 ===")
    print(df.describe())
    
    print("\n=== 评分Top5电影 ===")
    print(df.sort_values('评分', ascending=False).head(5)[['排名', '电影名称', '评分']])
    
    print("\n=== 评价人数Top5电影 ===")
    print(df.sort_values('评价人数', ascending=False).head(5)[['排名', '电影名称', '评价人数']])
    
    print("\n=== 各评分段平均评价人数 ===")
    print(df.groupby(pd.cut(df['评分'], bins=[8.0, 8.5, 9.0, 9.5]))['评价人数'].mean())

def visualize_data(df):
    """数据可视化"""
    plt.figure(figsize=(15, 10))
    
    # 1. 评分分布
    plt.subplot(2, 2, 1)
    sns.histplot(df['评分'], bins=10, kde=True)
    plt.title('豆瓣Top50电影评分分布')
    
    # 2. 评价人数分布
    plt.subplot(2, 2, 2)
    sns.histplot(df['评价人数'], bins=10, kde=True)
    plt.title('评价人数分布')
    plt.gca().set_xticklabels([f'{int(x/10000)}' for x in plt.gca().get_xticks()])
    
    # 3. 排名与评分关系
    plt.subplot(2, 2, 3)
    sns.scatterplot(x='排名', y='评分', data=df, hue='评价人数', size='评价人数', sizes=(20, 200))
    plt.title('排名与评分关系')
    
    # 4. 电影年份分布
    plt.subplot(2, 2, 4)
    year_counts = df['年份'].value_counts().sort_index()
    sns.lineplot(x=year_counts.index, y=year_counts.values)
    plt.title('电影年份分布')
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.savefig('douban_analysis.png')
    plt.show()

if __name__ == '__main__':
    print("正在获取豆瓣Top50电影数据...")
    df = get_douban_top50()
    
    print("\n正在分析数据...")
    analyze_data(df)
    
    print("\n正在生成可视化图表...")
    visualize_data(df)
    
    print("\n分析完成!图表已保存为douban_analysis.png")

项目总结

通过这个项目,我们展示了如何借助AI工具完成一个完整的数据分析项目:

  1. 需求分析阶段:利用AI帮助梳理项目需求和方案

  2. 技术实现阶段:通过AI生成基础代码框架

  3. 问题解决阶段:遇到问题时向AI寻求解决方案

  4. 优化改进阶段:让AI检查代码并提出优化建议

  5. 文档撰写阶段:使用AI帮助生成项目文档

AI工具极大地提高了开发效率,特别是在:

  • 快速生成代码框架

  • 解决特定技术问题

  • 提供最佳实践建议

  • 辅助文档撰写

但需要注意的是,AI生成的代码需要开发者理解和验证,不能盲目使用。在实际项目中,应该:

  1. 理解AI生成的每一行代码

  2. 根据实际需求进行调整

  3. 添加必要的错误处理和边界条件检查

  4. 确保符合项目规范和团队标准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值