本教程将详细展示如何借助AI工具(如ChatGPT、GitHub Copilot等)完成一个完整的软件项目——豆瓣电影Top50评分数据分析与可视化。我们将从项目构思到最终实现,分步骤讲解每个环节如何利用AI工具提高效率。
项目概述
目标:创建一个Python程序,能够爬取豆瓣电影Top50的数据,进行统计分析,并生成可视化图表。
技术栈:
-
Python 3.x
-
Requests (HTTP请求)
-
BeautifulSoup (HTML解析)
-
Pandas (数据分析)
-
Matplotlib/Seaborn (数据可视化)
步骤1:项目规划与需求分析
AI辅助方式:使用ChatGPT帮助梳理项目需求和技术方案
提示词:
"我要做一个豆瓣电影Top50的评分数据分析项目,请帮我列出详细的功能需求和技术实现方案"
AI输出示例:
-
数据获取:爬取电影排名、名称、评分、评价人数、年份等信息
-
数据清洗:处理缺失值、格式转换
-
数据分析:基本统计、评分分布、评价人数分析等
-
数据可视化:评分分布图、排名-评分关系图等
-
技术方案: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建议:
-
添加请求重试机制
-
增加异常处理
-
添加延迟防止被封
-
检查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. 查看生成的图表... ## 示例输出 
步骤8:扩展功能建议
AI辅助方式:询问AI项目可能的扩展方向
提问:"这个豆瓣电影分析项目还可以添加哪些有趣的功能?"
AI建议:
-
添加情感分析:对短评进行情感倾向分析
-
导演/演员分析:统计出现频率最高的导演和演员
-
预测模型:基于历史数据预测电影评分
-
网络应用:使用Flask/Django创建Web展示界面
-
自动化报告:生成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工具完成一个完整的数据分析项目:
-
需求分析阶段:利用AI帮助梳理项目需求和方案
-
技术实现阶段:通过AI生成基础代码框架
-
问题解决阶段:遇到问题时向AI寻求解决方案
-
优化改进阶段:让AI检查代码并提出优化建议
-
文档撰写阶段:使用AI帮助生成项目文档
AI工具极大地提高了开发效率,特别是在:
-
快速生成代码框架
-
解决特定技术问题
-
提供最佳实践建议
-
辅助文档撰写
但需要注意的是,AI生成的代码需要开发者理解和验证,不能盲目使用。在实际项目中,应该:
-
理解AI生成的每一行代码
-
根据实际需求进行调整
-
添加必要的错误处理和边界条件检查
-
确保符合项目规范和团队标准