豆瓣图书数据采集与可视化分析(三)- 豆瓣图书数据统计分析

文章目录

  • 前言
  • 一、数据读取与保存
    • 1. 读取清洗后数据
    • 2. 保存数据到CSV文件
    • 3. 保存数据到MySQL数据库
  • 二、不同分类统计分析
    • 1. 不同分类的图书数量统计分析
    • 2. 不同分类的平均评分统计分析
    • 3. 不同分类的平均评价人数统计分析
    • 4. 不同分类的平均价格统计分析
    • 5. 分类综合分析
  • 三、不同年份统计分析
    • 1. 不同年份出版的图书数量统计分析
    • 2. 不同年份出版的图书平均评分分析
    • 3. 不同年份出版的图书平均评价人数分析
    • 4. 不同年份出版的图书平均价格分析
    • 5. 年份综合分析
  • 四、不同作者统计分析
    • 1. 不同作者的图书数量统计分析
    • 2. 不同作者的平均评分分析
    • 3. 不同作者的平均评价人数分析
    • 4. 不同作者的平均价格分析
    • 5. 作者综合分析
  • 五、不同出版社分析
    • 1. 不同出版社的图书数量统计分析
    • 2. 不同出版社的平均评分分析
    • 3. 不同出版社的平均评价人数分析
    • 4. 不同出版社的平均价格分析
    • 5. 出版社综合分析
  • 六、其他分析
    • 1. 图书评分分布分析
    • 2. 图书价格分布分析
    • 3. 译者翻译的图书数量统计分析(前15)
    • 4. 评价人数多的图书分析(前15)
    • 5. 评分最高的图书分析(前15)
    • 6. 评价人数最多且评分高的图书分析(前15)
  • 七、完整代码


前言

本项目旨在通过对豆瓣图书数据集的详细分析,挖掘其中隐藏的规律和趋势,为图书出版行业、读者以及相关研究人员提供有价值的参考。从数据读取与保存这一基础环节出发,构建了完善的数据处理流程,确保能够高效地获取和存储清洗后的高质量数据,为后续分析筑牢根基。在数据分析阶段,从多个维度展开深入探究。在不同分类统计分析中,详细剖析了各类图书在数量、平均评分、平均评价人数以及平均价格等方面的表现,有助于出版方精准把握市场需求,读者快速定位感兴趣的图书类别。针对不同年份的统计分析,能够清晰洞察图书出版趋势随时间的演变,了解不同年份图书在质量、受欢迎程度和价格上的变化规律。而对不同作者和出版社的分析,则为评估创作者和出版机构的影响力提供了量化依据。此外,其他分析板块涵盖了图书评分分布、价格分布、热门图书筛选等多个视角,进一步丰富了对图书市场的认知。


一、数据读取与保存

1. 读取清洗后数据

def load_data(csv_file_path):try:data = pd.read_csv(csv_file_path)return dataexcept FileNotFoundError:print("未找到指定的 CSV 文件,请检查文件路径和文件名。")except Exception as e:print(f"加载数据时出现错误: {e}")

清洗后的部分数据如下图所示:

在这里插入图片描述

2. 保存数据到CSV文件

def save_to_csv(data, csv_file_path):# 使用 pathlib 处理文件路径path = Path(csv_file_path)# 检查文件所在目录是否存在,如果不存在则创建path.parent.mkdir(parents=True, exist_ok=True)data.to_csv(csv_file_path, index=False, encoding='utf-8-sig', mode='w', header=True)print(f'清洗后的数据已保存到 {csv_file_path} 文件')

3. 保存数据到MySQL数据库

def save_to_mysql(data, table_name):engine = create_engine(f'mysql+mysqlconnector://root:zxcvbq@127.0.0.1:3306/douban')data.to_sql(table_name, con=engine, index=False, if_exists='replace')print(f'清洗后的数据已保存到 {table_name} 表')

二、不同分类统计分析

1. 不同分类的图书数量统计分析

def category_count_analysis(data):# 统计每个分类的图书数量category_counts = data['category_name'].value_counts()category_counts = category_counts.reset_index()category_counts.columns = ['category_name', 'count']save_to_csv(category_counts, './结果输出层/数据分析结果数据/分类图书数量统计分析.csv')save_to_mysql(category_counts, '分类图书数量统计分析')

分析结果如下图所示:

在这里插入图片描述

2. 不同分类的平均评分统计分析

def category_rating_analysis(data):# 计算每个分类的平均评分category_ratings = data.groupby('category_name')['rating'].mean().round(1)category_ratings = category_ratings.reset_index()category_ratings.columns = ['category_name', 'avg_rating']save_to_csv(category_ratings, './结果输出层/数据分析结果数据/每个分类的平均评分统计分析.csv')save_to_mysql(category_ratings, '每个分类的平均评分统计分析')

分析结果如下图所示:

在这里插入图片描述

3. 不同分类的平均评价人数统计分析

def category_rating_count_analysis(data):# 计算每个分类的平均评价人数category_rating_counts = data.groupby('category_name')['rating_count'].mean().round(0)category_rating_counts = category_rating_counts.reset_index()category_rating_counts.columns = ['category_name', 'avg_rating_count']save_to_csv(category_rating_counts, './结果输出层/数据分析结果数据/每个分类的平均评价人数统计分析.csv')save_to_mysql(category_rating_counts, '每个分类的平均评价人数统计分析')

分析结果如下图所示:

在这里插入图片描述

4. 不同分类的平均价格统计分析

def category_price_analysis(data):# 计算每个分类的平均价格category_prices = data.groupby('category_name')['price'].mean().round(1)category_prices = category_prices.reset_index()category_prices.columns = ['category_name', 'avg_price']save_to_csv(category_prices, './结果输出层/数据分析结果数据/每个分类的平均价格统计分析.csv')save_to_mysql(category_prices, '每个分类的平均价格统计分析')

分析结果如下图所示:

在这里插入图片描述

5. 分类综合分析

def category_analysis(data):# 统计每个分类的图书数量category_counts = data['category_name'].value_counts()category_counts = category_counts.reset_index()category_counts.columns = ['category_name', 'count']# 计算每个分类的平均评分category_ratings = data.groupby('category_name')['rating'].mean().round(1)category_ratings = category_ratings.reset_index()category_ratings.columns = ['category_name', 'avg_rating']# 计算每个分类的平均评价人数category_rating_counts = data.groupby('category_name')['rating_count'].mean().round(0)category_rating_counts = category_rating_counts.reset_index()category_rating_counts.columns = ['category_name', 'avg_rating_count']# 计算每个分类的平均价格category_prices = data.groupby('category_name')['price'].mean().round(1)category_prices = category_prices.reset_index()category_prices.columns = ['category_name', 'avg_price']# 合并四个结果merged_result = pd.merge(category_counts, category_ratings, on='category_name', how='outer')merged_result = pd.merge(merged_result, category_rating_counts, on='category_name', how='outer')merged_result = pd.merge(merged_result, category_prices, on='category_name', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/每种分类的图书数量和平均评分和平均评价人数和平均价格统计分析.csv')save_to_mysql(merged_result, '每种分类的图书数量和平均评分和平均评价人数和平均价格统计分析')

分析结果如下图所示:

在这里插入图片描述


三、不同年份统计分析

1. 不同年份出版的图书数量统计分析

def year_count_analysis(data):# 统计每年出版的图书数量year_counts = data['publish_year'].value_counts()year_counts = year_counts.reset_index()# 按照年份升序排序year_counts = year_counts.sort_values(by='publish_year')year_counts.columns = ['publish_year', 'count']save_to_csv(year_counts, './结果输出层/数据分析结果数据/每年出版的图书数量统计分析.csv')save_to_mysql(year_counts, '每年出版的图书数量统计分析')

分析结果如下图所示:

在这里插入图片描述

2. 不同年份出版的图书平均评分分析

def year_rating_analysis(data):year_ratings = data.groupby('publish_year')['rating'].mean().round(1)year_ratings = year_ratings.reset_index()year_ratings = year_ratings.sort_values(by='publish_year')year_ratings.columns = ['publish_year', 'avg_rating']save_to_csv(year_ratings, './结果输出层/数据分析结果数据/每年出版的图书平均评分分析.csv')save_to_mysql(year_ratings, '每年出版的图书平均评分分析')

分析结果如下图所示:

在这里插入图片描述

3. 不同年份出版的图书平均评价人数分析

def year_rating_count_analysis(data):year_rating_counts = data.groupby('publish_year')['rating_count'].mean().round(0)year_rating_counts = year_rating_counts.reset_index()year_rating_counts = year_rating_counts.sort_values(by='publish_year')year_rating_counts.columns = ['publish_year', 'avg_rating_count']save_to_csv(year_rating_counts, './结果输出层/数据分析结果数据/每年出版图书平均评价人数分析.csv')save_to_mysql(year_rating_counts, '每年出版图书平均评价人数分析')

分析结果如下图所示:

在这里插入图片描述

4. 不同年份出版的图书平均价格分析

def year_price_analysis(data):year_prices = data.groupby('publish_year')['price'].mean().round(1)year_prices = year_prices.reset_index()year_prices = year_prices.sort_values(by='publish_year')year_prices.columns = ['publish_year', 'avg_price']save_to_csv(year_prices, './结果输出层/数据分析结果数据/每年出版图书平均价格分析.csv')save_to_mysql(year_prices, '每年出版图书平均价格分析')

分析结果如下图所示:

在这里插入图片描述

5. 年份综合分析

def year_analysis(data):# 每年出版的图书数量统计分析year_counts = data['publish_year'].value_counts()year_counts = year_counts.reset_index()year_counts = year_counts.sort_values(by='publish_year')year_counts.columns = ['publish_year', 'count']# 每年出版的图书平均评分分析year_ratings = data.groupby('publish_year')['rating'].mean().round(1)year_ratings = year_ratings.reset_index()year_ratings = year_ratings.sort_values(by='publish_year')year_ratings.columns = ['publish_year', 'avg_rating']# 每年出版的图书平均评价人数分析year_rating_counts = data.groupby('publish_year')['rating_count'].mean().round(0)year_rating_counts = year_rating_counts.reset_index()year_rating_counts = year_rating_counts.sort_values(by='publish_year')year_rating_counts.columns = ['publish_year', 'avg_rating_count']# 每年出版的图书平均价格分析year_prices = data.groupby('publish_year')['price'].mean().round(1)year_prices = year_prices.reset_index()year_prices = year_prices.sort_values(by='publish_year')# 合并四个结果merged_result = pd.merge(year_counts, year_ratings, on='publish_year', how='outer')merged_result = pd.merge(merged_result, year_rating_counts, on='publish_year', how='outer')merged_result = pd.merge(merged_result, year_prices, on='publish_year', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/每年出版图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '每年出版图书数量和平均评分和平均价格和平均评价人数分析')

分析结果如下图所示:

在这里插入图片描述


四、不同作者统计分析

1. 不同作者的图书数量统计分析

def author_count_analysis(data):# 统计每个作者的图书数量author_counts = data['author'].value_counts()author_counts = author_counts.reset_index()author_counts.columns = ['author', 'count']save_to_csv(author_counts, './结果输出层/数据分析结果数据/作者图书数量统计分析.csv')save_to_mysql(author_counts, '作者图书数量统计分析')

分析结果如下图所示:

在这里插入图片描述

2. 不同作者的平均评分分析

def author_rating_analysis(data):# 计算每个作者的平均评分author_ratings = data.groupby('author')['rating'].mean().round(1)author_ratings = author_ratings.reset_index()author_ratings.columns = ['author', 'avg_rating']save_to_csv(author_ratings, './结果输出层/数据分析结果数据/作者平均评分分析.csv')save_to_mysql(author_ratings, '作者平均评分分析')

分析结果如下图所示:

在这里插入图片描述

3. 不同作者的平均评价人数分析

def author_rating_count_analysis(data):# 计算每个作者的平均评价人数author_rating_counts = data.groupby('author')['rating_count'].mean().round(0)author_rating_counts = author_rating_counts.reset_index()author_rating_counts.columns = ['author', 'avg_rating_count']save_to_csv(author_rating_counts, './结果输出层/数据分析结果数据/作者平均评价人数分析.csv')save_to_mysql(author_rating_counts, '作者平均评价人数分析')

分析结果如下图所示:

4. 不同作者的平均价格分析

def author_price_analysis(data):# 计算每个作者的平均价格author_prices = data.groupby('author')['price'].mean().round(1)author_prices = author_prices.reset_index()author_prices.columns = ['author', 'avg_price']save_to_csv(author_prices, './结果输出层/数据分析结果数据/作者平均价格分析.csv')save_to_mysql(author_prices, '作者平均价格分析')

分析结果如下图所示:

在这里插入图片描述

5. 作者综合分析

def author_analysis(data):# 每个作者的图书数量统计分析author_counts = data['author'].value_counts()author_counts = author_counts.reset_index()author_counts.columns = ['author', 'count']# 每个作者的平均评分分析author_ratings = data.groupby('author')['rating'].mean().round(1)author_ratings = author_ratings.reset_index()author_ratings.columns = ['author', 'avg_rating']# 每个作者的平均评价人数分析author_rating_counts = data.groupby('author')['rating_count'].mean().round(0)author_rating_counts = author_rating_counts.reset_index()author_rating_counts.columns = ['author', 'avg_rating_count']# 每个作者的平均价格分析author_prices = data.groupby('author')['price'].mean().round(1)author_prices = author_prices.reset_index()author_prices.columns = ['author', 'avg_price']# 合并四个结果merged_result = pd.merge(author_counts, author_ratings, on='author', how='outer')merged_result = pd.merge(merged_result, author_rating_counts, on='author', how='outer')merged_result = pd.merge(merged_result, author_prices, on='author', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/作者图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '作者图书数量和平均评分和平均价格和平均评价人数分析')

分析结果如下图所示:

在这里插入图片描述


五、不同出版社分析

1. 不同出版社的图书数量统计分析

def publish_count_analysis(data):# 统计每个出版社的图书数量publish_counts = data['publisher'].value_counts()publish_counts = publish_counts.reset_index()publish_counts.columns = ['publisher', 'count']save_to_csv(publish_counts, './结果输出层/数据分析结果数据/出版社图书数量统计分析.csv')save_to_mysql(publish_counts, '出版社图书数量统计分析')

分析结果如下图所示:

在这里插入图片描述

2. 不同出版社的平均评分分析

def publish_rating_analysis(data):# 计算每个出版社的平均评分publish_ratings = data.groupby('publisher')['rating'].mean().round(1)publish_ratings = publish_ratings.reset_index()publish_ratings.columns = ['publisher', 'avg_rating']save_to_csv(publish_ratings, './结果输出层/数据分析结果数据/出版社平均评分分析.csv')save_to_mysql(publish_ratings, '出版社平均评分分析')

分析结果如下图所示:

在这里插入图片描述

3. 不同出版社的平均评价人数分析

def publish_rating_count_analysis(data):# 计算每个出版社的平均评价人数publish_rating_counts = data.groupby('publisher')['rating_count'].mean().round(0)publish_rating_counts = publish_rating_counts.reset_index()publish_rating_counts.columns = ['publisher', 'avg_rating_count']save_to_csv(publish_rating_counts, './结果输出层/数据分析结果数据/出版社平均评价人数分析.csv')save_to_mysql(publish_rating_counts, '出版社平均评价人数分析')

分析结果如下图所示:

在这里插入图片描述

4. 不同出版社的平均价格分析

def publish_price_analysis(data):# 计算每个出版社的平均价格publish_prices = data.groupby('publisher')['price'].mean().round(1)publish_prices = publish_prices.reset_index()publish_prices.columns = ['publisher', 'avg_price']save_to_csv(publish_prices, './结果输出层/数据分析结果数据/出版社平均价格分析.csv')save_to_mysql(publish_prices, '出版社平均价格分析')

分析结果如下图所示:

在这里插入图片描述

5. 出版社综合分析

def publish_analysis(data):# 每个出版社的图书数量统计分析publish_counts = data['publisher'].value_counts()publish_counts = publish_counts.reset_index()publish_counts.columns = ['publisher', 'count']# 每个出版社的平均评分分析publish_ratings = data.groupby('publisher')['rating'].mean().round(1)publish_ratings = publish_ratings.reset_index()publish_ratings.columns = ['publisher', 'avg_rating']# 每个出版社的平均评价人数分析publish_rating_counts = data.groupby('publisher')['rating_count'].mean().round(0)publish_rating_counts = publish_rating_counts.reset_index()publish_rating_counts.columns = ['publisher', 'avg_rating_count']# 每个出版社的平均价格分析publish_prices = data.groupby('publisher')['price'].mean().round(1)publish_prices = publish_prices.reset_index()publish_prices.columns = ['publisher', 'avg_price']# 合并四个结果merged_result = pd.merge(publish_counts, publish_ratings, on='publisher', how='outer')merged_result = pd.merge(merged_result, publish_rating_counts, on='publisher', how='outer')merged_result = pd.merge(merged_result, publish_prices, on='publisher', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/出版社图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '出版社图书数量和平均评分和平均价格和平均评价人数分析')

分析结果如下图所示:

在这里插入图片描述


六、其他分析

1. 图书评分分布分析

def rating_analysis(data):# 定义评分区间bins = [0, 2, 4, 6, 8, 10]labels = ['0-2', '2-4', '4-6', '6-8', '8-10']# 使用 pd.cut 函数将评分进行分组data['rating_group'] = pd.cut(data['rating'], bins=bins, labels=labels, right=False)# 统计每个评分区间的图书数量rating_counts = data['rating_group'].value_counts()rating_counts = rating_counts.reset_index()rating_counts.columns = ['rating_range', 'count']save_to_csv(rating_counts, './结果输出层/数据分析结果数据/评分分布统计分析.csv')save_to_mysql(rating_counts, '评分分布统计分析')

2. 图书价格分布分析

def price_analysis(data):# 定义价格区间bins = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500]labels = ['0-50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350', '350-400', '400-450', '450-500']# 使用 pd.cut 函数将价格进行分组data['price_group'] = pd.cut(data['price'], bins=bins, labels=labels, right=False)# 统计每个价格区间的图书数量price_counts = data['price_group'].value_counts()price_counts = price_counts.reset_index()price_counts.columns = ['price_range', 'count']save_to_csv(price_counts, './结果输出层/数据分析结果数据/图书价格分布统计分析.csv')save_to_mysql(price_counts, '图书价格分布统计分析')

3. 译者翻译的图书数量统计分析(前15)

def translator_count_analysis(data):# 统计每个译者的图书数量translator_counts = data['translator'].value_counts()translator_counts = translator_counts.reset_index()translator_counts.columns = ['translator', 'count']translator_counts = translator_counts.sort_values(by='count', ascending=False)translator_counts = translator_counts.head(15)save_to_csv(translator_counts, './结果输出层/数据分析结果数据/译者图书数量统计分析.csv')save_to_mysql(translator_counts, '译者图书数量统计分析')

4. 评价人数多的图书分析(前15)

def high_rating_count_books_analysis(data):high_rating_count_books = data[['name', 'rating_count']]high_rating_count_books = high_rating_count_books.sort_values(by='rating_count', ascending=False)high_rating_count_books = high_rating_count_books.drop_duplicates(subset=['name'])high_rating_count_books = high_rating_count_books.head(15)save_to_csv(high_rating_count_books, './结果输出层/数据分析结果数据/评价人数多的图书分析.csv')save_to_mysql(high_rating_count_books, '评价人数多的图书分析')

分析结果如下图所示:

在这里插入图片描述

5. 评分最高的图书分析(前15)

def high_rating_books_analysis(data):high_rating_books = data[['name', 'rating']]high_rating_books = high_rating_books.sort_values(by='rating', ascending=False)high_rating_books = high_rating_books.drop_duplicates(subset=['name'])high_rating_books = high_rating_books.head(15)save_to_csv(high_rating_books, './结果输出层/数据分析结果数据/评分最高的图书分析.csv')save_to_mysql(high_rating_books, '评分最高的图书分析')

分析结果如下图所示:

在这里插入图片描述

6. 评价人数最多且评分高的图书分析(前15)

def high_rating_and_rating_count_books_analysis(data):high_rating_and_rating_count_books = data[['name', 'rating', 'rating_count']]high_rating_and_rating_count_books = high_rating_and_rating_count_books.sort_values(by=['rating_count', 'rating'], ascending=False)high_rating_and_rating_count_books = high_rating_and_rating_count_books.drop_duplicates(subset=['name'])high_rating_and_rating_count_books = high_rating_and_rating_count_books.head(15)save_to_csv(high_rating_and_rating_count_books, './结果输出层/数据分析结果数据/评分高且评价人数最多的图书分析.csv')save_to_mysql(high_rating_and_rating_count_books, '评分高且评价人数最多的图书分析')

分析结果如下图所示:

在这里插入图片描述


七、完整代码

from pathlib import Pathimport pandas as pd
from matplotlib import pyplot as plt
from sqlalchemy import create_engine# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题def load_data(csv_file_path):try:data = pd.read_csv(csv_file_path)return dataexcept FileNotFoundError:print("未找到指定的 CSV 文件,请检查文件路径和文件名。")except Exception as e:print(f"加载数据时出现错误: {e}")# 保存分析后的数据为csv文件
def save_to_csv(data, csv_file_path):# 使用 pathlib 处理文件路径path = Path(csv_file_path)# 检查文件所在目录是否存在,如果不存在则创建path.parent.mkdir(parents=True, exist_ok=True)data.to_csv(csv_file_path, index=False, encoding='utf-8-sig', mode='w', header=True)print(f'清洗后的数据已保存到 {csv_file_path} 文件')# 保存分析后的数据到MySQL数据库
def save_to_mysql(data, table_name):engine = create_engine(f'mysql+mysqlconnector://root:zxcvbq@127.0.0.1:3306/douban')data.to_sql(table_name, con=engine, index=False, if_exists='replace')print(f'清洗后的数据已保存到 {table_name} 表')# 每种分类图书数量统计分析
def category_count_analysis(data):# 统计每个分类的图书数量category_counts = data['category_name'].value_counts()category_counts = category_counts.reset_index()category_counts.columns = ['category_name', 'count']save_to_csv(category_counts, './结果输出层/数据分析结果数据/分类图书数量统计分析.csv')save_to_mysql(category_counts, '分类图书数量统计分析')# 每种分类的平均评分统计分析
def category_rating_analysis(data):# 计算每个分类的平均评分category_ratings = data.groupby('category_name')['rating'].mean().round(1)category_ratings = category_ratings.reset_index()category_ratings.columns = ['category_name', 'avg_rating']save_to_csv(category_ratings, './结果输出层/数据分析结果数据/每个分类的平均评分统计分析.csv')save_to_mysql(category_ratings, '每个分类的平均评分统计分析')# 每种分类的平均评价人数统计分析
def category_rating_count_analysis(data):# 计算每个分类的平均评价人数category_rating_counts = data.groupby('category_name')['rating_count'].mean().round(0)category_rating_counts = category_rating_counts.reset_index()category_rating_counts.columns = ['category_name', 'avg_rating_count']save_to_csv(category_rating_counts, './结果输出层/数据分析结果数据/每个分类的平均评价人数统计分析.csv')save_to_mysql(category_rating_counts, '每个分类的平均评价人数统计分析')# 每种分类的平均价格统计分析
def category_price_analysis(data):# 计算每个分类的平均价格category_prices = data.groupby('category_name')['price'].mean().round(1)category_prices = category_prices.reset_index()category_prices.columns = ['category_name', 'avg_price']save_to_csv(category_prices, './结果输出层/数据分析结果数据/每个分类的平均价格统计分析.csv')save_to_mysql(category_prices, '每个分类的平均价格统计分析')# 每种分类的图书数量、平均评分、平均价格和平均评价人数统计分析
def category_analysis(data):# 统计每个分类的图书数量category_counts = data['category_name'].value_counts()category_counts = category_counts.reset_index()category_counts.columns = ['category_name', 'count']# 计算每个分类的平均评分category_ratings = data.groupby('category_name')['rating'].mean().round(1)category_ratings = category_ratings.reset_index()category_ratings.columns = ['category_name', 'avg_rating']# 计算每个分类的平均评价人数category_rating_counts = data.groupby('category_name')['rating_count'].mean().round(0)category_rating_counts = category_rating_counts.reset_index()category_rating_counts.columns = ['category_name', 'avg_rating_count']# 计算每个分类的平均价格category_prices = data.groupby('category_name')['price'].mean().round(1)category_prices = category_prices.reset_index()category_prices.columns = ['category_name', 'avg_price']# 合并四个结果merged_result = pd.merge(category_counts, category_ratings, on='category_name', how='outer')merged_result = pd.merge(merged_result, category_rating_counts, on='category_name', how='outer')merged_result = pd.merge(merged_result, category_prices, on='category_name', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/每种分类的图书数量和平均评分和平均评价人数和平均价格统计分析.csv')save_to_mysql(merged_result, '每种分类的图书数量和平均评分和平均评价人数和平均价格统计分析')# 每年出版的图书数量统计分析
def year_count_analysis(data):# 统计每年出版的图书数量year_counts = data['publish_year'].value_counts()year_counts = year_counts.reset_index()# 按照年份升序排序year_counts = year_counts.sort_values(by='publish_year')year_counts.columns = ['publish_year', 'count']save_to_csv(year_counts, './结果输出层/数据分析结果数据/每年出版的图书数量统计分析.csv')save_to_mysql(year_counts, '每年出版的图书数量统计分析')# 每年出版的图书平均评分分析
def year_rating_analysis(data):year_ratings = data.groupby('publish_year')['rating'].mean().round(1)year_ratings = year_ratings.reset_index()year_ratings = year_ratings.sort_values(by='publish_year')year_ratings.columns = ['publish_year', 'avg_rating']save_to_csv(year_ratings, './结果输出层/数据分析结果数据/每年出版的图书平均评分分析.csv')save_to_mysql(year_ratings, '每年出版的图书平均评分分析')# 每年出版图书平均评价人数分析
def year_rating_count_analysis(data):year_rating_counts = data.groupby('publish_year')['rating_count'].mean().round(0)year_rating_counts = year_rating_counts.reset_index()year_rating_counts = year_rating_counts.sort_values(by='publish_year')year_rating_counts.columns = ['publish_year', 'avg_rating_count']save_to_csv(year_rating_counts, './结果输出层/数据分析结果数据/每年出版图书平均评价人数分析.csv')save_to_mysql(year_rating_counts, '每年出版图书平均评价人数分析')# 每年出版图书平均价格分析
def year_price_analysis(data):year_prices = data.groupby('publish_year')['price'].mean().round(1)year_prices = year_prices.reset_index()year_prices = year_prices.sort_values(by='publish_year')year_prices.columns = ['publish_year', 'avg_price']save_to_csv(year_prices, './结果输出层/数据分析结果数据/每年出版图书平均价格分析.csv')save_to_mysql(year_prices, '每年出版图书平均价格分析')# 每年出版图书数量、平均评分、平均价格和平均评价人数分析
def year_analysis(data):# 每年出版的图书数量统计分析year_counts = data['publish_year'].value_counts()year_counts = year_counts.reset_index()year_counts = year_counts.sort_values(by='publish_year')year_counts.columns = ['publish_year', 'count']# 每年出版的图书平均评分分析year_ratings = data.groupby('publish_year')['rating'].mean().round(1)year_ratings = year_ratings.reset_index()year_ratings = year_ratings.sort_values(by='publish_year')year_ratings.columns = ['publish_year', 'avg_rating']# 每年出版的图书平均评价人数分析year_rating_counts = data.groupby('publish_year')['rating_count'].mean().round(0)year_rating_counts = year_rating_counts.reset_index()year_rating_counts = year_rating_counts.sort_values(by='publish_year')year_rating_counts.columns = ['publish_year', 'avg_rating_count']# 每年出版的图书平均价格分析year_prices = data.groupby('publish_year')['price'].mean().round(1)year_prices = year_prices.reset_index()year_prices = year_prices.sort_values(by='publish_year')# 合并四个结果merged_result = pd.merge(year_counts, year_ratings, on='publish_year', how='outer')merged_result = pd.merge(merged_result, year_rating_counts, on='publish_year', how='outer')merged_result = pd.merge(merged_result, year_prices, on='publish_year', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/每年出版图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '每年出版图书数量和平均评分和平均价格和平均评价人数分析')# 每个作者的图书数量统计分析
def author_count_analysis(data):# 统计每个作者的图书数量author_counts = data['author'].value_counts()author_counts = author_counts.reset_index()author_counts.columns = ['author', 'count']save_to_csv(author_counts, './结果输出层/数据分析结果数据/作者图书数量统计分析.csv')save_to_mysql(author_counts, '作者图书数量统计分析')# 每个作者的平均评分分析
def author_rating_analysis(data):# 计算每个作者的平均评分author_ratings = data.groupby('author')['rating'].mean().round(1)author_ratings = author_ratings.reset_index()author_ratings.columns = ['author', 'avg_rating']save_to_csv(author_ratings, './结果输出层/数据分析结果数据/作者平均评分分析.csv')save_to_mysql(author_ratings, '作者平均评分分析')# 每个作者的平均评价人数分析
def author_rating_count_analysis(data):# 计算每个作者的平均评价人数author_rating_counts = data.groupby('author')['rating_count'].mean().round(0)author_rating_counts = author_rating_counts.reset_index()author_rating_counts.columns = ['author', 'avg_rating_count']save_to_csv(author_rating_counts, './结果输出层/数据分析结果数据/作者平均评价人数分析.csv')save_to_mysql(author_rating_counts, '作者平均评价人数分析')# 每个作者的平均价格分析
def author_price_analysis(data):# 计算每个作者的平均价格author_prices = data.groupby('author')['price'].mean().round(1)author_prices = author_prices.reset_index()author_prices.columns = ['author', 'avg_price']save_to_csv(author_prices, './结果输出层/数据分析结果数据/作者平均价格分析.csv')save_to_mysql(author_prices, '作者平均价格分析')# 每个作者的图书数量、平均评分、平均价格和平均评价人数分析
def author_analysis(data):# 每个作者的图书数量统计分析author_counts = data['author'].value_counts()author_counts = author_counts.reset_index()author_counts.columns = ['author', 'count']# 每个作者的平均评分分析author_ratings = data.groupby('author')['rating'].mean().round(1)author_ratings = author_ratings.reset_index()author_ratings.columns = ['author', 'avg_rating']# 每个作者的平均评价人数分析author_rating_counts = data.groupby('author')['rating_count'].mean().round(0)author_rating_counts = author_rating_counts.reset_index()author_rating_counts.columns = ['author', 'avg_rating_count']# 每个作者的平均价格分析author_prices = data.groupby('author')['price'].mean().round(1)author_prices = author_prices.reset_index()author_prices.columns = ['author', 'avg_price']# 合并四个结果merged_result = pd.merge(author_counts, author_ratings, on='author', how='outer')merged_result = pd.merge(merged_result, author_rating_counts, on='author', how='outer')merged_result = pd.merge(merged_result, author_prices, on='author', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/作者图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '作者图书数量和平均评分和平均价格和平均评价人数分析')# 每个出版社的图书数量统计分析
def publish_count_analysis(data):# 统计每个出版社的图书数量publish_counts = data['publisher'].value_counts()publish_counts = publish_counts.reset_index()publish_counts.columns = ['publisher', 'count']save_to_csv(publish_counts, './结果输出层/数据分析结果数据/出版社图书数量统计分析.csv')save_to_mysql(publish_counts, '出版社图书数量统计分析')# 每个出版社的平均评分分析
def publish_rating_analysis(data):# 计算每个出版社的平均评分publish_ratings = data.groupby('publisher')['rating'].mean().round(1)publish_ratings = publish_ratings.reset_index()publish_ratings.columns = ['publisher', 'avg_rating']save_to_csv(publish_ratings, './结果输出层/数据分析结果数据/出版社平均评分分析.csv')save_to_mysql(publish_ratings, '出版社平均评分分析')# 每个出版社的平均评价人数分析
def publish_rating_count_analysis(data):# 计算每个出版社的平均评价人数publish_rating_counts = data.groupby('publisher')['rating_count'].mean().round(0)publish_rating_counts = publish_rating_counts.reset_index()publish_rating_counts.columns = ['publisher', 'avg_rating_count']save_to_csv(publish_rating_counts, './结果输出层/数据分析结果数据/出版社平均评价人数分析.csv')save_to_mysql(publish_rating_counts, '出版社平均评价人数分析')# 每个出版社的平均价格分析
def publish_price_analysis(data):# 计算每个出版社的平均价格publish_prices = data.groupby('publisher')['price'].mean().round(1)publish_prices = publish_prices.reset_index()publish_prices.columns = ['publisher', 'avg_price']save_to_csv(publish_prices, './结果输出层/数据分析结果数据/出版社平均价格分析.csv')save_to_mysql(publish_prices, '出版社平均价格分析')# 每个出版社的图书数量、平均评分、平均价格和平均评价人数分析
def publish_analysis(data):# 每个出版社的图书数量统计分析publish_counts = data['publisher'].value_counts()publish_counts = publish_counts.reset_index()publish_counts.columns = ['publisher', 'count']# 每个出版社的平均评分分析publish_ratings = data.groupby('publisher')['rating'].mean().round(1)publish_ratings = publish_ratings.reset_index()publish_ratings.columns = ['publisher', 'avg_rating']# 每个出版社的平均评价人数分析publish_rating_counts = data.groupby('publisher')['rating_count'].mean().round(0)publish_rating_counts = publish_rating_counts.reset_index()publish_rating_counts.columns = ['publisher', 'avg_rating_count']# 每个出版社的平均价格分析publish_prices = data.groupby('publisher')['price'].mean().round(1)publish_prices = publish_prices.reset_index()publish_prices.columns = ['publisher', 'avg_price']# 合并四个结果merged_result = pd.merge(publish_counts, publish_ratings, on='publisher', how='outer')merged_result = pd.merge(merged_result, publish_rating_counts, on='publisher', how='outer')merged_result = pd.merge(merged_result, publish_prices, on='publisher', how='outer')# 保存合并后的结果到 CSV 文件save_to_csv(merged_result, './结果输出层/数据分析结果数据/出版社图书数量和平均评分和平均价格和平均评价人数分析.csv')save_to_mysql(merged_result, '出版社图书数量和平均评分和平均价格和平均评价人数分析')# 评分分布分析
def rating_analysis(data):# 定义评分区间bins = [0, 2, 4, 6, 8, 10]labels = ['0-2', '2-4', '4-6', '6-8', '8-10']# 使用 pd.cut 函数将评分进行分组data['rating_group'] = pd.cut(data['rating'], bins=bins, labels=labels, right=False)# 统计每个评分区间的图书数量rating_counts = data['rating_group'].value_counts()rating_counts = rating_counts.reset_index()rating_counts.columns = ['rating_range', 'count']save_to_csv(rating_counts, './结果输出层/数据分析结果数据/评分分布统计分析.csv')save_to_mysql(rating_counts, '评分分布统计分析')# 图书价格分布分析
def price_analysis(data):# 定义价格区间bins = [0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500]labels = ['0-50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350', '350-400', '400-450', '450-500']# 使用 pd.cut 函数将价格进行分组data['price_group'] = pd.cut(data['price'], bins=bins, labels=labels, right=False)# 统计每个价格区间的图书数量price_counts = data['price_group'].value_counts()price_counts = price_counts.reset_index()price_counts.columns = ['price_range', 'count']save_to_csv(price_counts, './结果输出层/数据分析结果数据/图书价格分布统计分析.csv')save_to_mysql(price_counts, '图书价格分布统计分析')# 译者翻译的图书数量统计分析(前15)
def translator_count_analysis(data):# 统计每个译者的图书数量translator_counts = data['translator'].value_counts()translator_counts = translator_counts.reset_index()translator_counts.columns = ['translator', 'count']translator_counts = translator_counts.sort_values(by='count', ascending=False)translator_counts = translator_counts.head(15)save_to_csv(translator_counts, './结果输出层/数据分析结果数据/译者图书数量统计分析.csv')save_to_mysql(translator_counts, '译者图书数量统计分析')# 价格、评分、评分人数和出版年份相关性分析
def correlation_analysis(data):# 计算价格、评分、评分人数和出版年份之间的相关性correlation = data[['price', 'rating', 'rating_count', 'publish_year']].corr()correlation = correlation.reset_index()# 保存统计结果到 CSV 文件save_to_csv(correlation, './结果输出层/数据分析结果数据/价格、评分、评分人数和出版年份相关性分析.csv')save_to_mysql(correlation, '价格、评分、评分人数和出版年份相关性分析')# 评价人数多的图书分析(前15)
def high_rating_count_books_analysis(data):high_rating_count_books = data[['name', 'rating_count']]high_rating_count_books = high_rating_count_books.sort_values(by='rating_count', ascending=False)high_rating_count_books = high_rating_count_books.drop_duplicates(subset=['name'])high_rating_count_books = high_rating_count_books.head(15)save_to_csv(high_rating_count_books, './结果输出层/数据分析结果数据/评价人数多的图书分析.csv')save_to_mysql(high_rating_count_books, '评价人数多的图书分析')# 评分最高的图书分析(前15)
def high_rating_books_analysis(data):high_rating_books = data[['name', 'rating']]high_rating_books = high_rating_books.sort_values(by='rating', ascending=False)high_rating_books = high_rating_books.drop_duplicates(subset=['name'])high_rating_books = high_rating_books.head(15)save_to_csv(high_rating_books, './结果输出层/数据分析结果数据/评分最高的图书分析.csv')save_to_mysql(high_rating_books, '评分最高的图书分析')# 评分高且评价人数最多的图书(前15)
def high_rating_and_rating_count_books_analysis(data):high_rating_and_rating_count_books = data[['name', 'rating', 'rating_count']]high_rating_and_rating_count_books = high_rating_and_rating_count_books.sort_values(by=['rating_count', 'rating'], ascending=False)high_rating_and_rating_count_books = high_rating_and_rating_count_books.drop_duplicates(subset=['name'])high_rating_and_rating_count_books = high_rating_and_rating_count_books.head(15)save_to_csv(high_rating_and_rating_count_books, './结果输出层/数据分析结果数据/评分高且评价人数最多的图书分析.csv')save_to_mysql(high_rating_and_rating_count_books, '评分高且评价人数最多的图书分析')if __name__ == '__main__':# 加载数据data = load_data('./中间处理层/清洗后的豆瓣图书数据集.csv')category_count_analysis(data)category_rating_analysis(data)category_rating_count_analysis(data)category_price_analysis(data)category_analysis(data)year_count_analysis(data)year_rating_analysis(data)year_rating_count_analysis(data)year_price_analysis(data)year_analysis(data)author_count_analysis(data)author_rating_analysis(data)author_rating_count_analysis(data)author_price_analysis(data)author_analysis(data)publish_count_analysis(data)publish_rating_analysis(data)publish_rating_count_analysis(data)publish_price_analysis(data)publish_analysis(data)rating_analysis(data)price_analysis(data)translator_count_analysis(data)correlation_analysis(data)high_rating_count_books_analysis(data)high_rating_books_analysis(data)high_rating_and_rating_count_books_analysis(data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络原理 - 3(UDP 协议)

目录 协议 应用层 xml json protobuffer 传输层 端口号(Port) UDP 协议 UDP 协议端格式 完! 协议 网络通信中,协议是一个非常重要的概念。我们前面在网络原理中,就已经介绍了,为了统一各方网络&…

Java Agent 注入 WebSocket 篇

Agent 如果要对其进行Agent注入的编写,需要先理解三个名字premain,agentmain,Instrumentation premain方法在 JVM 启动阶段调用,一般维持权限的时候不会使用 agentmain方法在 JVM 运行时调用 常用的 Instrumentation实例为代理…

【深度强化学习 DRL 快速实践】近端策略优化 (PPO)

PPO(2017,OpenAI)核心改进点 Proximal Policy Optimization (PPO):一种基于信赖域优化的强化学习算法,旨在克服传统策略梯度方法在更新时不稳定的问题,采用简单易实现的目标函数来保证学习过程的稳定性 解决…

笔试强训:Day2

一、字符串中找出连续最长的数字串(双指针) 字符串中找出连续最长的数字串_牛客题霸_牛客网 #include <iostream> #include <string> #include <cctype> using namespace std;int main() {//双指针string str;cin>>str;int nstr.size();int begin-1,l…

MySQL 详解之 InnoDB:核心特性深度剖析 (ACID, 事务, 锁, 外键, 崩溃恢复)

在 MySQL 的世界里,存储引擎是数据库管理系统的核心组成部分,它负责数据的存储和提取。MySQL 支持多种存储引擎,如 MyISAM, Memory, CSV 等,但自 MySQL 5.5 版本以来,InnoDB 成为了默认的存储引擎,也是绝大多数应用场景的首选。 为什么 InnoDB 如此重要并被广泛采用?因…

Java中正则表达式使用方法

1. 正则表达式概述 正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种用于匹配字符串的模式工具。在 Java 中&#xff0c;正则表达式通过 java.util.regex 包实现&#xff0c;主要涉及以下两个类&#xff1a; Pattern&#xff1a;表示一个编…

使用浏览器的Clipboard API实现前端复制copy功能

在前端开发中&#xff0c;复制文本到剪贴板的功能通常使用浏览器的 Clipboard API 实现。比如 navigator.clipboard.writeText 方法。以下是一个简单的案例&#xff0c;展示如何使用 Clipboard API 实现复制文本的功能。 基本用法 首先&#xff0c;你需要创建一个按钮&#x…

【因果推断】(二)CV中的应用

文章目录 因果表征学习因果图 (Causal Diagram)“后门准则”&#xff08;backdoor criterion&#xff09;和“前门准则”&#xff08;frontdoor criterion&#xff09;后门调整Visual Commonsense R-CNNCausal Intervention for Weakly-Supervised Semantic SegmentationCausal…

【iOS】alloc init new底层原理

目录 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 类方法&#xff1a; 实例方法&#xff1a; new 前言 笔者最近在进行对OC语言源码的学习&#xff0c;学习源码的过程中经常会出现一些从来没有遇见过的函数&…

QT窗口相关控件及其属性

widget&#xff0c;PushButton&#xff0c;lineEdit等都是基于QWidget延展出来的 并不是完整的窗口&#xff0c;而是作为窗口的一部分 真正的窗口是QMainWindow 菜单栏 Qt中的菜单栏是通过QMenuBar这个类来实现的&#xff0c;一个主窗口最多只有一个菜单栏&#xff0c;位于主…

day47—双指针-平方数之和(LeetCode-633)

题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a^2 b^2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…

蓝桥杯 20. 压缩变换

压缩变换 原题目链接 题目描述 小明最近在研究压缩算法。他知道&#xff0c;压缩时如果能够使数值很小&#xff0c;就能通过熵编码得到较高的压缩比。然而&#xff0c;要使数值变小是一个挑战。 最近&#xff0c;小明需要压缩一些正整数序列&#xff0c;这些序列的特点是&a…

element-ui多个form同时验证,以及动态循环表单注意事项

多个form同时验证&#xff1a; validateForm(refs) {if (!refs) {return false}return new Promise((resolve, reject) > {refs.validate().then((valid) > {resolve(valid)}).catch((val) > {resolve(false)})}) }, async handleConfirm() {Promise.all([this.valid…

Spring Boot中自定义404异常处理问题学习笔记

1. 问题背景 在Spring Boot项目中&#xff0c;需要手动返回404异常给前端。为此&#xff0c;我创建了一个自定义的404异常类UnauthorizedAccessException&#xff0c;并在全局异常处理器GlobalExceptionHandler中处理该异常。然而&#xff0c;在使用Postman测试时&#xff0c;…

你学会了些什么220622?--搭建UI自动化

jenkins访问地址&#xff1a;http://192.168.82.129:8080/ 账号密码&#xff1a;admin/a123456a ***** 什么是UI自动化** 使用工具或者脚本对需要测试的软件的前端界面在预设的条件下&#xff0c;在已有的测试数据下运行系统或者应用程序&#xff0c;并获取其前端页面UI显示的…

【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的

HTTP与HTTPS全面对比及HTTPS加密流程详解 一、HTTP与HTTPS核心区别 特性HTTPHTTPS协议基础明文传输HTTP SSL/TLS加密层默认端口80443加密方式无加密混合加密&#xff08;非对称对称&#xff09;证书要求不需要需要CA颁发的数字证书安全性易被窃听、篡改、冒充防窃听、防篡改…

JavaFX 第一篇 Hello World

1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库&#xff0c;作为 Java 标准库的一部分&#xff08;JDK 8 到 10&#xff09;&#xff0c;从 JDK 11 开始&#xff0c;JavaFX 将以独立模块发布&#xff0c;将不再包含在 JDK标准库中&#xff0c;他是 Java 应用程序开发的…

SQL实战:02之连续数问题求解

文章目录 概述题目:体育馆的人流量题解步骤一&#xff1a;构造出一个连续序列步骤二&#xff1a;找出符合条件的组的序号步骤三&#xff1a;fetch结果&#xff0c;使用内连接过滤出符合条件的记录。完整SQL 题目二&#xff1a;连续出现的数字题解步骤一&#xff1a;分区并构建连…

STM32 的 GPIO和中断

GPIO的简单介绍 内部结构 施密特触发器&#xff08;TTL肖特基触发器&#xff09; 的工作原理&#xff1a; 施密特触发电路&#xff08;简称&#xff09;是一种波形整形电路&#xff0c;当任何波形的信号进入电路时&#xff0c;输出在正、负饱和之间跳动&#xff0c;产生方波或…

Server - 优雅的配置服务器 Bash 环境(.bashrc)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/147335592 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 登录服…