使用Python网络爬虫获取豆瓣读书top250数据,并使用NumPy和Pandas对数据进行处理,最后使用Matplotlib的Pyplot进行数据可视化展示。
要求:
1.使用Python网络爬虫从豆瓣读书网站上爬取某top250的数据(书名,作者,出版社,发行年份,价格,评分,评价人数),并将数据统计写入数据表格中,按照发行年份升序保存。
2.根据数据,进行数据
(1)根据评分计算最小值,最大值,均值以及标准差
(2)根据价格,自定义价格区间,统计各区间的书籍数量
3.绘制折线图
(1)根据年份绘制价格折线图。
(2)根据发行年份,绘制电影数量折线图。
Python爬取豆瓣读书top250
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
13条回答 默认 最新
社区专家-Monster-XH 2023-12-19 14:20关注基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.pyplot as plt plt.rcParams['font.family'] = 'SimHei' # 数据加载 file_path = 'douban_books_sorted.csv' df = pd.read_csv(file_path) def clean_price_v2(price_str): price_str = price_str.replace('CNY', '').replace('NT$', '').replace('元', '').strip() price_str = price_str.split('/')[0] try: return float(price_str) except ValueError: return None # 应用新的价格清洗函数 df['价格'] = df['价格'].apply(clean_price_v2) # 移除价格列中的NaN值 df = df.dropna(subset=['价格']) # 定义价格区间 price_bins = [0, 10, 20, 30, 50, 100, df['价格'].max()] price_labels = ['0-10元', '10-20元', '20-30元', '30-50元', '50-100元', '100元以上'] # 统计各价格区间的书籍数量 df['价格区间'] = pd.cut(df['价格'], bins=price_bins, labels=price_labels, right=False) price_interval_counts = df['价格区间'].value_counts().sort_index() # 处理出版年份 df['出版年份'] = pd.to_datetime(df['出版年份'], errors='coerce') df = df.dropna(subset=['出版年份']) df['出版年份'] = df['出版年份'].dt.year # 平均价格折线图 yearly_avg_price = df.groupby('出版年份')['价格'].mean() # 书籍数量折线图 yearly_book_count = df['出版年份'].value_counts().sort_index() # 绘图 plt.figure(figsize=(14, 6)) # 价格折线图 plt.subplot(1, 2, 1) plt.plot(yearly_avg_price, marker='o', linestyle='-', color='b') plt.title('年份与平均价格') plt.xlabel('年份') plt.ylabel('平均价格 (元)') plt.xticks(rotation=45) # 书籍数量折线图 plt.subplot(1, 2, 2) plt.plot(yearly_book_count, marker='o', linestyle='-', color='r') plt.title('年份与书籍数量') plt.xlabel('年份') plt.ylabel('书籍数量') plt.xticks(rotation=45) plt.tight_layout() plt.show() # 输出价格区间统计结果 print(price_interval_counts)本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报