南柯婉卿 2023-12-19 00:25 采纳率: 100%
浏览 72
已结题

Python爬取豆瓣读书top250

使用Python网络爬虫获取豆瓣读书top250数据,并使用NumPy和Pandas对数据进行处理,最后使用Matplotlib的Pyplot进行数据可视化展示。
要求:
1.使用Python网络爬虫从豆瓣读书网站上爬取某top250的数据(书名,作者,出版社,发行年份,价格,评分,评价人数),并将数据统计写入数据表格中,按照发行年份升序保存。
2.根据数据,进行数据
(1)根据评分计算最小值,最大值,均值以及标准差
(2)根据价格,自定义价格区间,统计各区间的书籍数量
3.绘制折线图
(1)根据年份绘制价格折线图。
(2)根据发行年份,绘制电影数量折线图。

  • 写回答

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)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(12条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月19日