1.1 研究背景及现状
1.1.1 研究背景
生态文明建设是我国的基本国情之一,资源利用作为应该重要的环节[1]。然而随着大学校园内掀起倡导的低碳环保热潮,高校学生教材及其他书籍的目前的处理方式已被大多人所关注[2]。从循环利用资源的角度出发[3], 大学校园二手市场应运而生也成为了必然[4]。
当前激烈的社会竞争使高校学生对书籍的需求日益增加,而闲置书籍导致的资源浪费十分不利于环境保护,建立二手书交易平台将可以有效解决这个问题。本文首先提出网络二手书交易平台的必要性,然后根据调查问卷数据对平台的设计和实现进行可行性分析,最后就具体营运方案进行设计,相信二手书交易平台有着广阔的市场前景和发展空间[5]。
在如此广阔的发展前景下,我们需要运用更加先进的技术对市场进行分析,所以对二手书市场的分析能够给用户和商家增加更加直观的数据呈现,并且能够给看不懂数据的能够呈现最直观的图表,并且进行比较。
1.1.2 研究现状
随着二手书交易市场的不断扩大,对二手书市场数据进行数据清洗和数据预处处理越来越重要[6],然而Python作为一种强大而灵活的编程语言,具备丰富的数据处理和可视化工具,因此成为了二手书数据分析的首选工具。
国内现状:图书销量数据可视化:国内学者在使用聚类分析算法对销量数据进行分类,对潜在有价值的销量的规律和趋势进行分析,利用地理信息系统和数据可视化技术,绘制了图书销售的热力图和区域分布图,帮助商家合理规划销售策略和资源配置。
国外现状:图书销售数据可视化:国外学者利用时间序列分析方法对图书销售数据进行研究,发现销售数据中存在的周期性和趋势性。Mary Johnson 等人则利用地理信息系统和数据可视化技术,绘制了用户分布地图和销售热点地图,帮助商家了解和满足消费者的地理位置需求。
1.2 研究目的、意义及方法
1.2.1 研究目的
具体研究目的如下:
市场需求预测:通过对二手书市场数据的分析,研究目的是预测不同类别二手书的需求量和销售趋势,为卖家提供有针对性的库存管理和定价策略,优化市场运作效率。
用户行为分析:研究旨在分析用户在二手书交易中的行为模式和偏好,包括购买偏好、搜索习惯、评价倾向等,通过挖掘用户数据,提供个性化推荐和增强用户体验。
市场竞争分析:通过对二手书市场中各个参与者的数据进行比较和分析,研究目的是了解不同卖家之间的竞争态势和优势,为市场参与者提供决策依据和竞争战略。
可视化呈现:研究旨在将二手书数据分析结果以直观的图表、图像和可交互的界面形式展示出来,提供给用户、管理者和研究人员一个更清晰、易懂的数据视觉化工具,帮助他们更好地理解和利用数据。
1.2.2 研究意义
随着校园环保热潮的兴起与在校大学生人数的日益增长,环境保护与学生对课本需求量增多的矛盾日益突出。鼓励大学生循 环利用图书,在增强环保意识的同时,用实际行动践行可持续发展理念[7],为解决该问题,节约资源, 使其畅循环,践行低碳环保理念,调查分析了消费者的迫切需求、高校二手书交易市场遇到的瓶颈以及 交易途径的可行性,提出了应对策略和方案[8]。
因此,本文基于Python语言和相关开发工具,从多个维度深入研究二手书市场数据,并经过数据可视化的方式将结果呈现出来。这样,可以二手书交易平台提供全面的市场分析和研究结果,也能为消费者提供有益的参考和决策支持,可为用户购买 专业书籍节省找寻的时间和精力[9]。
1.2.3 研究方法
本文的研究方法如下:
文献调研与学习:通过查阅相关资料,深入了解Python编程语言以及数据分析与可视化领域的知识。阅读相关研究论文、学术文章和专业书籍,掌握数据获取、清洗、处理和可视化的方法和技术。
数据获取与处理:收集二手书市场的相关数据,包括销售记录、价格变动、用户评价等。利用Python编程语言,结合适当的库和工具,进行数据清洗、整理和预处理,确保数据的质量和准确性。
数据分析与建模:运用Python中的数据分析库和算法,对二手书市场的数据进行统计分析、挖掘隐藏规律和趋势。例如,可以使用Pandas进行数据处理和分析,使用NumPy进行数值计算。
可视化展示:基于Python的可视化库(如Matplotlib、Seaborn和Plotly)或交互式可视化工具(ECharts),将数据分析结果以直观、易懂的图表、图像和界面形式展示出来[9]。通过可视化呈现,使数据更易于理解和解释,提供更直观的信息展示和决策支持。
实验与改进:通过实际操作和调试,不断改进分析过程和结果。在研究中遇到困难时,可以利用在线资源、论坛或与同行进行交流,寻求解决方案和技术支持。
1.3 研究内容
本研究旨在基于Python开发一个二手书的数据分析与可视化系统,以实现对二手书市场的全面分析和可视化展示。具体研究内容如下:
数据收集与清洗:使用Python的Requests库进行数据爬取,从在线书店、交易平台和社交媒体等渠道获取相关的二手书数据。接着,利用pandas库对爬取的数据进行清洗和预处理,去除重复项和异常值,确保数据的准确性和完整性[10]。
数据存储与管理:将清洗后的数据存储到MySQL数据库中,利用Python编程语言连接和操作数据库,实现数据的持久化存储和高效查询。此外,构建一个数据管理后台,具备增删改查功能,并支持多用户登录,以确保数据的安全性和权限管理。
数据分析与聚类:利用Python进行数据分析,应用聚类算法对二手书市场的数据进行分类和分群。通过训练和确定最优聚类数,将二手书数据进行有意义的分类,揭示潜在的市场细分和特征。
可视化展示与Web应用:利用Echarts库进行数据可视化展示,在HTML+JS+CSS技术的支持下,使用Flask框架构建一个Web应用界面。通过可视化图表和交互式界面,呈现对二手书市场整体情况、不同类型二手书的销售情况和价格走势等数据分析结果。
用户行为与竞争分析:通过对用户行为模式和市场竞争状况的分析,提供针对性的推荐和决策支持。利用可视化展示工具,将用户行为和市场竞争的分析结果以直观的方式展示,帮助用户理解二手书市场的趋势和潜在机会。
1.4 结构
结构如下:
第1章 引言 介绍二手书市场的重要性和发展趋势,以及数据分析与可视化在该领域的应用价值。明确研究目标,概述研究内容和方法。
第2章 相关开发工具介绍,并且介绍相关技术。
第3章 项目框架设计,对整个项目的流程和爬虫流程进行一个简单的说明,并且使用流程图进行表示说明。
第4章 数据收集与处理 使用Python的Requests库实现二手书市场数据的爬取,、利用pandas库对爬取的数据进行清洗和预处理,去除重复项和异常值,确保数据的准确性和完整性。
第5章数据分析与可视化展示使用Python进行数据分析,采用聚类算法对二手书市场数据进行分类和分群,确定最优聚类数,并进行模型训练。使用Echarts库实现对二手书市场整体情况、不同类型二手书的销售情况和价格走势等数据分析结果的可视化展示。利用Flask框架构建一个基于HTML+JS+CSS的Web应用界面,支持用户交互和动态展示。
第6章利用Flask框架构建一个基于HTML+JS+CSS的Web应用界面,支持用户交互和动态展示,呈现出可视化大屏和后端管理系统。
第7章总结与讨论 对二手书市场的整体情况、不同类型的二手书销售情况、价格走势、用户行为和市场竞争等进行分析和可视化展示,并对结果进行讨论和解释。总结研究工作和成果,强调研究的创新点和应用价值。展望未来可能的改进和扩展方向,提出进一步研究的建议。
5 数据分析
5.1需求分析
5.1.1二手书各省市数量分布分析
提取出非缺失的地址数据,并进行地址标准化处理。例如,将"北京市"替换为"北京省",将"上海市"替换为"上海省"等。根据省份或直辖市对图书进行分组,并统计每个省份或直辖市对应的图书数量。将省份或直辖市和对应的图书数量存储在列表中,每个元素是一个字典,包含省份或直辖市和图书数量的键值对。主要代码如下:
运行结果如下图5-4所示:
5.1.2 二手书前十年份排行分析
从MySQL数据库中查询二手书数据,并使用Pandas库将查询结果存储为DataFrame。对数据进行预处理,包括替换缺失值、去重等操作。提取出非缺失的年份数据,并将年份进行切割处理,只保留年份的第一个部分。对处理后的年份数据进行统计,统计每个年份对应的图书数量。根据图书数量进行降序排序,得到前十个年份及其对应的图书数量。将前十个年份和图书数量存储在列表中,每个元素是一个字典,包含年份和图书数量的键值对。主要代码如下:
5.1.3二手书前十年出版社排行分析
根据出版社对图书进行分组,并统计每个出版社对应的图书数量。根据图书数量进行降序排序,得到前十个出版社及其对应的图书数量。将前十个出版社和图书数量存储在列表中,每个元素是一个字典,包含出版社和图书数量的键值对。主要代码如下:
5.1.4二手书包装占比分析
根据包装方式对图书进行分组,并统计每种包装方式对应的图书数量。将包装方式和对应的图书数量存储在列表中,每个元素是一个字典,包含包装方式和图书数量的键值对。通过以上步骤,可以将二手书的包装占比分析结果可视化展示,帮助用户了解不同包装方式在二手书市场的分布情况。主要代码如下:
5.1.5二手书价格分布分析
将价格字段转换为数值类型,以便后续的分析。设定价格区间,并使用pd.cut()函数对价格进行分组,统计每个价格区间内的图书数量。将价格区间和对应的图书数量存储在列表中,每个元素是一个字典,包含价格区间和图书数量的键值对。主要代码如下:
运行结果如下图5-5所示:
5.1.6 发货时间分布分析
根据发货时间字段的不同取值,将发货时间进行转换。如果发货时间包含"小时",则提取出小时数作为发货时间;如果发货时间包含"天内",则将天数乘以24得到发货时间(单位为小时)。设定发货时间区间,并使用pd.cut()函数对发货时间进行分组,统计每个时间区间内的图书数量。将时间区间和对应的图书数量存储在列表中,每个元素是一个字典,包含时间区间和图书数量的键值对。通过以上步骤,可以将二手书的发货时间分布分析结果可视化展示,帮助用户了解不同发货时间区间内的二手书数量情况。主要代码如下:
5.1.7店铺等级分析
根据店铺等级对图书进行分组,并统计每个店铺等级对应的图书数量。将店铺等级和对应的图书数量存储在列表中,每个元素是一个字典,包含店铺等级和图书数量的键值对。最后,在可视化大屏的前端页面中展示该数据,通过ECharts库生成柱状图或其他形式的图表,以直观地显示不同店铺等级的二手书数量情况。
通过以上步骤,可以将二手书的店铺等级分析结果可视化展示,帮助用户了解不同店铺等级在二手书市场中的分布情况。这样的分析可以为买家提供参考,选择信誉良好、高等级的店铺购买二手书;同时,也为卖家了解自己店铺在市场中的竞争力和知名度提供参考依据。主要代码如下:
5.2 聚类分析
5.2.1 轮廓法和肘部法选择最优聚类簇
肘部法通过计算不同聚类数量下的聚类误差平方和(SSE)来评估聚类的质量。其公式如表示:
其中Ci表示簇,k表示聚类中心的个数,p表示某个簇内的样本,m表示质心点。通过观察聚类数量与聚类内部方差(或其他类似指标)之间的关系,来找到一个"肘部",这个"肘部"对应的聚类数量通常被认为是最佳的。在肘部法中,随着聚类数量的增加,聚类内部方差通常会逐渐减少。但是,当聚类数量增加到某个点时,进一步增加聚类数量不再显著减少内部方差。这个点就是肘部,也就是在这个点之后,内部方差的减少程度变得较缓慢。
轮廓系数法是通过计算轮廓系数来实现的。轮廓系数衡量了样本与其所在聚类以及其他聚类之间的相似度,数值范围在[-1, 1]之间。具体而言,对于每个样本,轮廓系数是通过计算每一个样本i与同一聚类中其他样本的平均距离(称为ai)和计算每一个样本i到最近邻聚类中所有样本的平均距离(称为bi)来得到的。轮廓系数可以用以下公式表示:
其中,a越小且b越大,轮廓系数越接近1,表示样本与其所在聚类更相似;反之,轮廓系数越接近-1,表示样本与其所在聚类不相似。
利用Python画出肘部法则图和轮廓系数图,如图5.1展示了肘部法确定最优聚类数目的结果。如图5.1展示了轮廓系数法确定最优聚类数目的结果。
图5.1肘部法则图图
从图5.2所示,当K为3时,图中斜率突然由大变小,图像出现"肘部",所以K=3是最佳聚类。
图5.2轮廓法聚类簇折线图
从图5-9所示 ,当K为3时,轮廓系数达到了峰值,说明最佳聚类为3。主要代码如下:
5.2.2聚类分析实现
特征选择和数据预处理:根据需求选择合适的特征列,并进行数据预处理。这可能包括缺失值处理、标准化、归一化等操作,以确保数据在聚类分析之前处于合适的状态。
自定义K-means聚类算法:编写自定义的K-means聚类算法函数。该函数应接受数据集、聚类数目和最大迭代次数作为输入,并返回聚类结果和最终的聚类中心。在函数内部,需要随机初始化聚类中心、迭代计算每个样本点与聚类中心之间的距离,将样本点分配到最近的聚类中心,并更新聚类中心的位置,直到满足停止条件(如达到最大迭代次数或聚类中心不再发生变化)。
进行聚类分析:使用最优的聚类数对数据集'标题、作者、年份','店铺等级', '价格', '小时','评级进行聚类分析。调用自定义的K-means聚类算法函数,并将数据集和最优的聚类数作为输入。获取聚类结果和最终的聚类中心。
进一步的数据分析和可视化展示:根据需求,可以对不同的聚类簇进行进一步的数据分析和可视化展示。例如,统计每个聚类簇的数量、绘制散点图以显示不同聚类簇的分布情况等。主要代码如下,聚类分析图如图5.2所示:
图5.2聚类分析图
KMeans 聚类分析,并将每个数据点分配到了不同的聚类中心(或者叫做簇)。从输出结果可以看出,每个数据点都被标记为一个聚类标签(cluster_label)。从图5-10可以看出,数据点被分为了3个不同的聚类(0到2),每个聚类被用不同的颜色进行可视化展示。每个聚类中心用加号标记,并且每个数据点与其对应的聚类中心之间都画了虚线,表示数据点到聚类中心的距离。由于数据点的特征较多,这里使用了 t-SNE 算法进行了降维,将数据点投影到了二维平面上以便进行可视化展示。
其中第一类的书籍具有以下特点:标题多为一些关于日常生活、情感、诗词或文学作品的书籍,例如《学会选择:懂得放弃》、《每天进步一点点》、《美是世间治愈一切的良药》等。作者是一些文学作家、诗人、心理学家等。
第二类这一类的书籍具有以下特点:标题与历史、传记、人物故事、文化历史等相关,例如《锦囊妙记安天下:细说历史上那些谋士》、《大唐良相李吉甫》等。作者是一些历史学家、文化评论家、传记作家等,或者一些历史文化方面的作品。
第三类这一类的书籍可能具有以下特点:标题涉及诗歌、文学作品、艺术创作等,例如《中国诗词大会(第4季下)》、《艺术在路上(精装)》等。作者是一些诗人、文学家、艺术评论家等,或者一些文学、艺术作品
6 数据可视化展示
6.1前端大屏可视化实现
6.1.1发货时间分析
我们可以看到大部分二手书的发货时间集中在20-50小时和10-20小时的区间内。这可能是因为这些发货时间范围更符合卖家的处理时间和物流配送速度。此外,发货时间超过100小时的二手书数量很少,说明大部分卖家在较短时间内完成发货。这些结论可以为买家提供参考,可以根据发货时间的分布情况,在可接受的范围内选择合适的二手书购买。同时,也可以鼓励卖家减少发货时间,提高交易效率和用户体验。如下图6.1所示
图6.1二手书发货时间图
6.1.2不同二手年份分析
我们可以看到不同年份的二手书数量呈现出一定的波动趋势。从2010年开始,二手书数量逐年增加,直至2022年达到峰值,然后在2023年略有下降。这可能反映了二手书市场的发展和变化,也与读者对不同年份的图书需求有关。这些结论可以为读者提供参考,在购买二手书时可以注意不同年份的图书数量情况。同时,也可以为卖家或平台管理者提供参考,了解不同年份的二手书市场需求,调整库存和采购策略。如下图6-2所示
图6.2前十年年二手书数据分析图
6.1.3不同出版社分析
我们可以看到大部分二手书的出版社信息未知。这可能是因为在数据采集过程中缺少出版社信息或者数据处理过程中的缺失问题。而对于已知的出版社中,中国社会科学出版社、中信出版社、人民邮电出版社和机械工业出版社是数量较多的出版社。
这些结论可以为买家提供参考,可以根据自己对出版社的偏好,在购买二手书时选择信誉良好或热门的出版社出版的图书。同时,也可以为卖家或平台管理者提供参考,了解不同出版社的图书销量情况和市场需求,进行库存管理和采购策略的优化。如图6.3所示:
图6.3二手书出版设排名图
6.1.4地区分布分析
我们可以看到不同地区的二手书分布情况。河北地区的二手书数量最多,达到25221本,其次是北京、江苏和湖北等地。而一些地区的二手书数量较少,例如海南、西藏和宁夏等。
这些结论可以为买家提供参考,在选择二手书时可以关注自己所在地区或感兴趣地区的二手书供应情况。同时,对于卖家或平台管理者来说,了解地区分布情况可以帮助他们了解市场需求和地域特点,进行库存管理和物流配送的优化。如图6.4所示:
图6.4地区二手书分布图
6.1.5价格分布分析
我们可以看到价格区间为10-20和20-50的二手书数量最多,分别有19694本和18140本。这表明在这两个价格区间内有更多的二手书供应和交易活动。而价格较低的二手书(小于10元)也有相当数量的供应,可能是一些折旧程度较高或较老的图书。
此外,价格区间为50-100、100-150、150-500和大于500的二手书数量逐渐减少,说明价格较高的二手书相对较少,可能是因为价格较高的二手书需求较小或者市场竞争较少。如图6.5所示。
图6.5价格分析折现图
6.1.6店铺分布分析
我们可以看到不同等级的店铺数量分布情况。lv1和lv9是店铺数量最少的两个等级,而lv8是店铺数量最多的等级。这可能反映了店铺等级与店铺规模和销售活动之间的关系。通常来说,等级越高的店铺,其规模和销售活动往往更大。
这些结论可以为买家提供参考,在选择二手书时可以关注不同等级店铺的信誉和可靠性。对于卖家或平台管理者来说,了解店铺等级分布情况可以帮助他们了解市场竞争态势和店铺规模,制定相应的经营策略和促销活动。如图6.6所示。
图6.6店铺等级分析图
完整大屏效果如下图6.7所示:
图6.7可二手书视化大屏
6.2后台系统实现
6.2.1登录注册页面
(1)登录
用户通过在登录页面输入账号和密码,并点击登录按钮。在后端的/login路由中,从前端请求的表单数据中获取账号和密码。调用user_service.get_user()函数,传入账号和密码进行验证。如果验证成功(即返回结果大于0),则将登录状态和角色信息存储在session中,表示用户已登录。返回响应状态码200给前端,表示登录成功。登录效果如下图6.8所示:
图6.8登录页面效果图
(2)注册
用户通过在注册页面填写用户名、账号和密码,并点击注册按钮。在后端的/user/reg路由中,从前端请求的表单数据中获取用户名、账号和密码。调用user_service.add_user()函数,将用户信息插入数据库中。返回响应状态码200给前端,表示注册成功。注册效果如下图6.9所示。
图6.9注册效果图
6.2.2用户信息管理
用户管理页面通过路由为进行访问,用户访问时会根据从前端请求中获取请求参数,并通过路由指向执行user_manager()视图函数,渲染生成用户管理页面,这个页面能展示所有用户信息,可进行添加、编辑和删除操作。当添加用户时,会指向添加用户的路由,并执行处理函数为user_add(),插入用户信息添加到数据库。同理,编辑及删除功能也是如此,从而实现用户数据管理功能。用户信息管理效果如下图6.10所示:
图6.10用户信息管理效果图
6.2.3二手书数据管理
二手书数据管理页面的路由为/html/notice,当用户访问该路径时,会执行名为notice_manager()的视图函数。在notice_manager()函数中,调用render_template()函数,将渲染后的二手书数据管理页面返回给前端。在二手书数据管理页面中,可以展示所有二手书的数据,并提供相应的操作,如添加、编辑和删除二手书数据。二手书数据管理效果如下图6.11所示:
图6.11二手书数据管理效果图