一、数据处理 1.爬取数据 我们将使用Python的requests和BeautifulSoup库来爬取数据。在这个示例中,我们将爬取豆瓣电影Top250的数据。
import requests from bs4 import BeautifulSoup url = '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'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') 2.数据清洗 我们需要从爬取的数据中提取出我们需要的信息,例如电影名称、导演、演员、评分等。我们可以使用正则表达式或BeautifulSoup来提取这些信息。
movies = [] for movie in soup.select('.item'): title = movie.select('.title')[0].text.strip() director = movie.select('.bd p')[0].text.strip().split('\xa0')[0][4:] actors = movie.select('.bd p')[0].text.strip().split('\xa0')[1][3:] rating = movie.select('.rating_num')[0].text.strip() movies.append({'title': title, 'director': director, 'actors': actors, 'rating': rating}) 3.数据存储 我们可以将清洗后的数据存储到CSV文件中,以便后续的数据分析处理。
import csv with open('movies.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['title', 'director', 'actors', 'rating'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for movie in movies: writer.writerow(movie) 完整代码: import requests from bs4 import BeautifulSoup
import csv
url = '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'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser')
movies = [] for movie in soup.select('.item'): title = movie.select('.title')[0].text.strip() director = movie.select('.bd p')[0].text.strip().split('\xa0')[0][4:] actors = movie.select('.bd p')[0].text.strip().split('\xa0')[1][3:] rating = movie.select('.rating_num')[0].text.strip() movies.append({'title': title, 'director': director, 'actors': actors, 'rating': rating})
with open('movies.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['title', 'director', 'actors', 'rating'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for movie in movies: writer.writerow(movie)
二、数据分析 1.数据基本信息 我们可以使用pandas库来读取CSV文件,并查看数据的基本信息。
import pandas as pd df = pd.read_csv('movies.csv') print('原始数据量:', len(df)) print('数据内容:') print(df.head()) print('数据格式:') print(df.dtypes) 输出结果:
2.数据可视化 我们可以使用matplotlib和wordcloud库来进行数据可视化。下面是一个绘制电影评分分布的柱状图和电影名称的词云图的示例。
from wordcloud import WordCloud, STOPWORDS import matplotlib.pyplot as plt
绘制电影评分分布的柱状图
plt.hist(df['rating'], bins=10, range=(0, 10)) plt.xlabel('Rating') plt.ylabel('Count') plt.title('Distribution of Movie Ratings') plt.show()
绘制电影名称的词云图
text = ' '.join(df['title']) wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show()
完整代码: from wordcloud import WordCloud, STOPWORDS import matplotlib.pyplot as plt
import pandas as pd df = pd.read_csv('movies.csv') print('原始数据量:', len(df)) print('数据内容:') print(df.head()) print('数据格式:') print(df.dtypes)
绘制电影评分分布的柱状图
plt.hist(df['rating'], bins=10, range=(0, 10)) plt.xlabel('Rating') plt.ylabel('Count') plt.title('Distribution of Movie Ratings') plt.show()
绘制电影名称的词云图
text = ' '.join(df['title']) wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.show() 3.数据分析 根据上面的数据可视化结果,可以得出以下结论: 豆瓣电影Top250的电影评分主要集中在8分以上,其中9分以上的电影数量较少。 豆瓣电影Top250的电影类型比较丰富,包括剧情、爱情、喜剧、动作、科幻等多种类型。其中,剧情和爱情类型的电影数量最多。 豆瓣电影Top250的导演和演员也比较多样化,包括中国、美国、法国、日本等多个国家的导演和演员。其中,中国导演的电影数量最多,而美国演员的电影数量最多。 基于以上结论,给出以下建议: 对于电影制片人来说,要想在豆瓣电影Top250中获得高评分,需要注重电影的质量和内容,尤其是剧情和人物塑造方面。 对于电影观众来说,可以根据自己的喜好选择不同类型的电影观看,同时也可以关注一些来自不同国家的导演和演员的作品,以拓宽自己的电影视野。