Java数据科学指南

Java数据科学指南 pdf epub mobi txt 电子书 下载 2025

[加] 鲁什迪·夏姆斯(Rushdi Shams) 著,武传海 译
图书标签:
  • Java
  • 数据科学
  • 机器学习
  • 数据分析
  • 算法
  • 编程
  • 人工智能
  • 统计学
  • 数据挖掘
  • 大数据
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115481634
版次:1
商品编码:12355595
品牌:异步图书
包装:平装
开本:16开
出版时间:2018-06-01
用纸:胶版纸
页数:302
正文语种:中文

具体描述

编辑推荐

如果你想创建适用于实际生产环境的数据科学模型,那么Java将是你的****。Java可以调用各种强大的库(例如MLlib、Weka、DL4j等)。借助这些库,你可以使用Java高效地完成各种数据科学任务。
总之,通过学习本书的内容,读者能掌握各种处理问题的方法,学会如何把数据科学知识应用到实际生产环境中,以及编写分布式数据科学应用等。本书讲解的内容将在实际工作中派上大用场。

内容简介

现如今,数据科学已经成为一个热门的技术领域,它涵盖了人工智能的各个方面,例如数据处理、信息检索、机器学习、自然语言处理、数据可视化等。而Java作为一门经典的编程语言,在数据科学领域也有着杰出的表现。
本书旨在通过Java编程来引导读者更好地完成数据科学任务。本书通过9章内容,详细地介绍了数据获取与清洗、索引的建立和检索数据、统计分析、数据学习、信息的提取、大数据处理、深度学习、数据可视化等重要主题。
本书适合想通过Java解决数据科学问题的读者,也适合数据科学领域的专业人士以及普通Java开发人员阅读。

作者简介

Rushdi Shams毕业于加拿大韦仕敦大学,获得了机器学习应用博士学位,主攻方向是自然语言处理(Natural Language Processing,NLP)。在成为机器学习与NLP领域的专家之前,他讲授本科生与研究生课程。在YouTube上,他一直运营着一个名为“跟Rushdi一起学”(Learn with Rushdi)的频道,并且做得有声有色,该频道主要面向想学习计算机技术的朋友。

目录

第 1章 获取数据与清洗数据 1
1.1 简介 2
1.2 使用Java从分层目录中提取所有文件名 3
准备工作 3
操作步骤 3
1.3 使用Apache Commons IO从多层目录中提取所有文件名 5
准备工作 5
操作步骤 5
1.4 使用Java 8从文本文件一次性读取所有内容 6
操作步骤 7
1.5 使用Apache Commons IO从文本文件一次性读取所有内容 7
准备工作 7
操作方法 8
1.6 使用Apache Tika提取PDF文本 8
准备知识 9
操作步骤 9
1.7 使用正则表达式清洗ASCII文本文件 11
操作步骤 11
1.8 使用Univocity解析CSV文件 12
准备工作 13
操作步骤 13
1.9 使用Univocity解析TSV文件 15
准备工作 15
操作步骤 16
1.10 使用JDOM解析XML文件 17
准备工作 17
操作步骤 18
1.11 使用JSON.simple编写JSON文件 20
准备工作 20
操作步骤 21
1.12 使用JSON.simple读取JSON文件 23
准备工作 24
操作步骤 24
1.13 使用JSoup从一个URL提取Web数据 26
准备工作 26
操作步骤 26
1.14 使用Selenium Webdriver从网站提取Web数据 29
准备工作 29
操作步骤 29
1.15 从MySQL数据库读取表格数据 32
准备工作 32
操作步骤 32
第 2章 为数据建立索引与搜索数据 35
2.1 简介 35
2.2 使用Apache Lucene为数据建立索引 35
准备工作 36
操作步骤 40
工作原理 47
2.3 使用Apache Lucene搜索带索引的数据 50
准备工作 50
操作步骤 51
第3章 数据统计分析 56
3.1 简介 57
3.2 生成描述性统计 59
操作步骤 59
3.3 生成概要统计 60
操作步骤 60
3.4 从多种分布生成概要统计 61
操作步骤 62
更多内容 63
3.5 计算频率分布 64
操作步骤 64
3.6 计算字符串中的词频 65
操作步骤 65
工作原理 67
3.7 使用Java 8计算字符串中的词频 67
操作步骤 67
3.8 计算简单回归 68
操作步骤 69
3.9 计算普通最小二乘回归 70
操作步骤 70
3.10 计算广义最小二乘回归 72
操作步骤 72
3.11 计算两组数据点的协方差 74
操作步骤 74
3.12 为两组数据点计算皮尔逊相关系数 75
操作步骤 75
3.13 执行配对t检验 76
操作步骤 76
3.14 执行卡方检验 77
操作步骤 78
3.15 执行单因素方差分析
(one-way ANOVA test) 79
操作步骤 79
3.16 执行K-S检验 81
操作步骤 81
第4章 数据学习Ⅰ 83
4.1 简介 83
4.2 创建与保存ARFF文件 84
操作步骤 87
4.3 对机器学习模型进行交叉验证 91
操作步骤 91
4.4 对新的测试数据进行分类 95
准备工作 95
操作步骤 96
4.5 使用过滤分类器对新测试数据分类 102
操作步骤 102
4.6 创建线性回归模型 105
操作步骤 106
4.7 创建逻辑回归模型 108
操作步骤 108
4.8 使用K均值算法对数据点
进行聚类 110
操作步骤 110
4.9 依据类别对数据进行聚类处理 113
操作方法 113
4.10 学习数据间的关联规则 116
准备工作 116
操作步骤 116
4.11 使用低层方法、过滤方法、元分类器方法选择特征/属性 118
准备工作 119
操作步骤 119
第5章 数据学习Ⅱ 125
5.1 简介 125
5.2 使用Java机器学习库(Java-ML)向数据应用机器学习 126
准备工作 126
操作步骤 128
5.3 使用斯坦福分类器对数据点分类 137
准备工作 137
操作步骤 140
工作原理 141
5.4 使用MOA对数据点分类 142
准备工作 142
操作步骤 144
5.5 使用Mulan对多标签数据点进行分类 147
准备工作 147
操作步骤 150
第6章 从文本数据提取信息 154
6.1 简介 154
6.2 使用Java检测标记(单词) 155
准备工作 155
操作步骤 155
6.3 使用Java检测句子 160
准备工作 160
操作步骤 160
6.4 使用OpenNLP检测标记(单词)与句子 161
准备工作 162
操作步骤 163
6.5 使用Stanford CoreNLP从标记中提取词根、词性,以及
识别命名实体 167
准备工作 167
操作步骤 169
6.6 使用Java 8借助余弦相似性测度测量文本相似度 171
准备工作 172
操作步骤 172
6.7 使用Mallet从文本文档提取主题 176
准备工作 177
操作步骤 179
6.8 使用Mallet对文本文档进行分类 184
准备工作 184
操作步骤 185
6.9 使用Weka对文本文档进行分类 189
准备工作 190
操作步骤 191
第7章 处理大数据 194
7.1 简介 194
7.2 使用Apache Mahout训练在线逻辑回归模型 195
准备工作 195
操作步骤 198
7.3 使用Apache Mahout应用在线逻辑回归模型 202
准备工作 202
操作步骤 203
7.4 使用Apache Spark解决简单的文本挖掘问题 207
准备工作 208
操作步骤 210
7.5 使用MLib的K均值算法做聚类 214
准备工作 214
操作步骤 214
7.6 使用MLib创建线性回归模型 217
准备工作 217
操作步骤 218
7.7 使用MLib的随机森林模型对数据点进行分类 222
准备工作 222
操作步骤 223
第8章 数据深度学习 229
8.1 简介 229
8.2 使用DL4j创建Word2vec神经网络 241
操作方法 241
工作原理 243
更多内容 246
8.3 使用DL4j创建深度信念神经网络 246
操作步骤 246
工作原理 250
8.4 使用DL4j创建深度自动编码器 254
操作步骤 254
工作原理 256
第9章 数据可视化 259
9.1 简介 259
9.2 绘制2D正弦曲线 260
准备工作 260
操作步骤 262
9.3 绘制直方图 266
准备工作 266
操作步骤 268
9.4 绘制条形图 273
准备工作 274
操作步骤 275
9.5 绘制箱线图或箱须图 279
准备工作 279
操作步骤 281
9.6 绘制散点图 285
准备工作 285
操作步骤 286
9.7 绘制甜圈图 289
准备工作 289
操作步骤 290
9.8 绘制面积图 294
准备工作 294
操作步骤 295
《Java数据科学实战:从理论到实践的进阶之路》 概述: 在信息爆炸的时代,数据已成为驱动决策、洞察趋势、预测未来的核心力量。而Java,作为一种稳定、高效、跨平台的语言,在构建大规模数据处理系统、企业级应用以及近年来蓬勃发展的大数据生态系统中扮演着举足轻重的角色。本书《Java数据科学实战:从理论到实践的进阶之路》旨在为那些已经掌握Java基础,并渴望将这门语言的强大能力应用于数据科学领域的开发者、分析师和工程师们提供一条清晰、系统且具有实践指导意义的学习路径。 本书并非一份泛泛而谈的数据科学入门手册,而是聚焦于如何利用Java强大的工具链和生态系统,解决实际数据科学问题。我们将深入探索Java在数据采集、清洗、转换、建模、分析、可视化以及部署等各个环节的应用,帮助读者构建坚实的数据科学技能体系,并能够独立完成从数据到价值的全过程。 内容亮点与章节解析: 本书的编写遵循“理论先行,实践支撑”的原则,力求在传授核心概念的同时,提供大量可复用的代码示例和真实案例。我们将从Java在数据科学领域的基础设施开始,逐步深入到更复杂的算法和应用。 第一部分:Java数据科学基石 第一章:Java在数据科学中的定位与优势 本章将首先阐述Java作为一种通用编程语言,为何在数据科学领域依然具有强大的生命力和应用价值。我们将对比Java与其他主流数据科学语言(如Python、R)的优劣势,重点突出Java在性能、可扩展性、企业级集成、并发处理以及生态系统成熟度方面的独特优势。 我们将探讨Java在大数据技术栈中的广泛应用,例如Hadoop、Spark、Kafka、Flink等,并介绍Java如何作为这些框架的核心开发语言。 本章还将为读者描绘一个基于Java的数据科学工作流程图,帮助读者建立全局观。 第二章:Java开发环境与数据科学工具链 本章将指导读者搭建高效的Java数据科学开发环境,包括JDK的配置、IDE(如IntelliJ IDEA, Eclipse)的设置,以及Maven/Gradle等构建工具的使用,强调依赖管理的重要性。 我们将重点介绍一系列与数据科学密切相关的Java库和框架,例如: 数据处理与分析基础库: Apache Commons Math、Guava等,用于通用的数学运算、集合操作等。 数据存储与访问: JDBC API,以及针对NoSQL数据库(如MongoDB, Cassandra)的Java驱动,介绍如何高效地连接和操作各种数据源。 文件I/O与格式处理: Jackson/Gson用于JSON处理,Apache POI用于Excel处理,CSV库用于CSV文件读写。 我们将演示如何在IDE中集成这些库,并进行基础的配置,为后续章节的实践打下基础。 第三章:Java数据结构与算法在数据科学中的应用 本章将回顾和深化Java中常用的数据结构(如ArrayList, LinkedList, HashMap, HashSet, TreeMap)以及高级数据结构(如Trie树, 优先队列)在处理和组织数据时的应用场景。 我们将探讨各种算法(如排序、搜索、图算法、动态规划)在数据分析中的作用,并演示如何使用Java高效地实现和应用这些算法。 特别地,我们将关注数据科学中常见的数据预处理和特征工程任务,例如去重、排序、分组、聚合等,并展示如何利用Java的数据结构和算法高效地完成。 第二部分:核心数据科学流程的Java实现 第四章:Java数据采集与接入 本章将详细介绍如何使用Java从各种数据源进行数据采集。 Web抓取: 使用Jsoup、HtmlUnit等库进行网页内容爬取,以及使用HTTP Client(如Apache HttpClient, OkHttp)进行API数据请求。 数据库连接: 深入讲解JDBC的使用,包括连接池、事务管理、参数化查询,以及如何处理各种数据库类型(MySQL, PostgreSQL, Oracle等)。 消息队列集成: 介绍如何使用Java API接入Kafka、RabbitMQ等消息队列,实现实时数据流的获取。 文件读取: 涵盖各种文件格式(CSV, JSON, XML, Parquet, Avro)的读取方法,并介绍高效的流式处理技术。 本章将强调数据采集的鲁棒性和效率,包括异常处理、重试机制和批量处理。 第五章:Java数据清洗与预处理 本章是数据科学实践的核心环节。我们将聚焦于使用Java进行高质量的数据清洗和转换。 缺失值处理: 演示多种策略,如删除、均值/中位数/众数填充、插值等。 异常值检测与处理: 介绍基于统计(如Z-score, IQR)和基于模型(如Isolation Forest)的异常值检测方法,并讨论处理策略。 数据格式统一与标准化: 字符串处理(大小写转换、去空格、去除特殊字符)、日期时间格式转换、数值类型转换与标准化(Min-Max Scaling, Standardization)。 数据去重与合并: 演示如何识别和处理重复记录,以及如何根据键合并来自不同源的数据。 特征工程初步: 介绍如何根据业务需求创建新的特征,例如特征编码(One-Hot Encoding, Label Encoding)、特征组合、多项式特征等。 本章将提供大量实用代码片段,帮助读者快速实现常见的数据清洗任务。 第六章:Java数据可视化与探索性分析 本章将介绍如何利用Java生成各种类型的数据可视化图表,以辅助探索性数据分析(EDA)。 常用图表类型: 散点图、折线图、柱状图、饼图、直方图、箱线图等。 Java可视化库: 重点介绍JFreeChart、ChartFX等成熟的Java图表库,以及如何通过Java API生成精美的图表。 集成Web可视化: 介绍如何将Java后端与前端可视化库(如ECharts, Chart.js)结合,实现动态、交互式的数据展示。 探索性数据分析流程: 演示如何通过可视化手段发现数据中的模式、趋势、关联和异常,为后续建模提供洞察。 第三部分:Java机器学习与模型构建 第七章:Java机器学习基础与库 本章将深入介绍Java在机器学习领域的应用,并重点介绍主流的Java机器学习库。 WEKA: 介绍WEKA作为一款经典的Java机器学习算法包,其丰富的算法集合、数据预处理工具和评估模块。我们将演示如何使用WEKA进行分类、回归、聚类等任务。 Apache Mahout: 介绍Mahout在分布式机器学习上的应用,特别是其与Hadoop的集成,以及在推荐系统、聚类、分类等方面的能力。 Deeplearning4j (DL4J): 介绍DL4J作为Java生态系统中强大的深度学习框架,支持神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等,并演示其在图像识别、自然语言处理等任务中的应用。 其他库: 简要介绍Smile、Tribuo等其他值得关注的Java机器学习库。 本章将重点讲解如何加载数据、选择算法、训练模型和进行预测。 第八章:监督学习算法的Java实现 本章将详细演示如何在Java中实现和应用常见的监督学习算法。 分类算法: 逻辑回归 (Logistic Regression) 支持向量机 (SVM) 决策树 (Decision Trees) 随机森林 (Random Forests) 朴素贝叶斯 (Naive Bayes) K近邻 (K-Nearest Neighbors, KNN) 回归算法: 线性回归 (Linear Regression) 岭回归 (Ridge Regression) Lasso回归 (Lasso Regression) 多项式回归 (Polynomial Regression) 我们将结合实际数据集,演示每个算法的应用流程,包括特征选择、模型训练、参数调优和性能评估(准确率、精确率、召回率、F1-score、RMSE、R²等)。 第九章:无监督学习与半监督学习的Java实践 本章将探讨Java在无监督学习和半监督学习任务中的应用。 聚类算法: K-Means DBSCAN 层次聚类 (Hierarchical Clustering) 降维技术: 主成分分析 (PCA) t-SNE (t-Distributed Stochastic Neighbor Embedding) 关联规则挖掘: Apriori算法 半监督学习: 介绍半监督学习的基本概念,以及在Java中实现时的策略和挑战。 我们将通过具体案例,展示如何应用这些技术来发现数据中的隐藏结构和模式。 第十章:深度学习基础与Java应用(进阶) 本章将为读者提供深度学习的入门知识,并重点展示如何使用Deeplearning4j (DL4J) 进行深度学习模型的构建和训练。 神经网络基本原理: 前馈神经网络、激活函数、损失函数、反向传播算法。 卷积神经网络 (CNN): 结构、在图像识别中的应用。 循环神经网络 (RNN) 与LSTM/GRU: 结构、在序列数据处理(如文本、时间序列)中的应用。 模型构建与训练: 使用DL4J API定义网络结构,加载数据集,配置优化器,进行训练和评估。 预训练模型的使用: 介绍如何加载和微调现有的预训练深度学习模型。 本章将侧重于概念的理解和实践操作,帮助读者迈入深度学习的大门。 第四部分:实战应用与部署 第十一章:Java在大数据技术栈中的应用 本章将重点讲解Java如何与主流的大数据框架集成,实现大规模数据的处理和分析。 Hadoop生态系统: HDFS: Java API 操作分布式文件系统。 MapReduce: 使用Java编写MapReduce程序进行批处理。 Hive: 使用Java JDBC连接Hive,执行SQL查询。 Apache Spark: Spark Core: 使用Java API进行RDD操作。 Spark SQL: 使用Java API进行结构化数据处理。 Spark Streaming/Structured Streaming: 使用Java API进行实时数据流处理。 MLlib: 使用Java API调用Spark的机器学习库。 Apache Flink: Flink Core: 使用Java API进行有界和无界数据流处理。 Flink SQL: 使用Java API进行流式SQL查询。 FlinkML: 使用Java API进行机器学习。 Apache Kafka: Java Producer/Consumer API: 构建实时数据管道。 本章将通过示例代码,展示如何利用这些框架构建端到端的数据处理流水线。 第十二章:Java数据科学项目部署与集成 本章将指导读者如何将开发完成的数据科学模型部署到生产环境,并与其他系统进行集成。 模型序列化与反序列化: 使用Java原生序列化、Jackson、Protobuf等方式保存和加载模型。 构建RESTful API服务: 使用Spring Boot、JAX-RS等框架,将模型封装成可供调用的Web服务。 容器化部署: Docker的应用,将Java数据科学应用打包成Docker镜像,实现跨平台部署。 云平台集成: 探讨在AWS、Azure、GCP等云平台上部署Java数据科学应用的基本策略。 持续集成/持续部署 (CI/CD): 介绍如何使用Jenkins、GitLab CI等工具实现数据科学项目的自动化构建、测试和部署。 模型监控与更新: 讨论在生产环境中如何监控模型性能,并进行模型的迭代更新。 第十三章:实际案例研究与最佳实践 本章将通过两个或三个真实的、具有代表性的数据科学项目,贯穿本书介绍的核心技术和流程。 案例一: 基于用户行为数据的推荐系统(涉及数据采集、特征工程、协同过滤/基于内容的推荐算法实现,模型部署)。 案例二: 金融欺诈检测(涉及数据预处理、异常值检测、分类模型训练与评估,实时API服务)。 案例三: 自然语言处理应用(如文本分类、情感分析,涉及文本预处理、词向量、序列模型应用)。 每个案例都将详细展示从问题定义、数据探索、模型选择、实现细节到最终部署的全过程,并总结该案例中的关键技术点和最佳实践。 总结: 《Java数据科学实战:从理论到实践的进阶之路》是一本面向希望在Java生态系统中深入发展数据科学技术的读者的指南。本书内容翔实,案例丰富,理论与实践紧密结合,旨在帮助读者掌握利用Java解决复杂数据科学问题的能力,并能够自信地应对实际工作中的挑战。通过本书的学习,读者将能够熟练运用Java构建高效、可扩展的数据科学解决方案,并在数据驱动的时代释放Java的无限潜能。

用户评价

评分

作为一个对数据科学领域充满好奇的新手,我一直想找到一本能够系统性地介绍Java在数据科学应用的书籍。最近偶然间发现了《Java数据科学指南》,尽管我尚未开始深入阅读,但仅仅是浏览目录和介绍,就已经让我对这本书的潜力充满了期待。书中涵盖了从数据采集、清洗、可视化到机器学习模型构建等一系列核心环节,这对于我这种希望构建完整数据科学项目流程的读者来说,简直是雪中送炭。我尤其关注书中关于大数据处理的部分,例如如何利用Java与Spark、Hadoop等框架集成,因为我深知在实际工作中,处理海量数据的能力至关重要。同时,书中对数据可视化工具的介绍也让我眼前一亮,我一直觉得直观的数据呈现能够极大地提升洞察力,能够学习到如何用Java生成精美图表,对我未来的项目汇报将大有裨益。这本书的结构设计也显得非常合理,循序渐进,从基础概念到高级应用,我相信即使是初学者也能通过这本书逐步掌握Java数据科学的精髓。

评分

对于《Java数据科学指南》这本书,我从一个寻求系统化学习路径的角度,给予高度肯定。在我的职业发展规划中,数据科学是一个不可或缺的环节,而Java作为我最熟悉的编程语言,我一直希望能找到一本能将Java与数据科学深度结合的书籍。这本书恰恰满足了我的这一需求。它没有回避Java在数值计算和科学计算方面的潜在挑战,而是提供了诸如利用JAMA、EJML等库进行矩阵运算,以及与Python生态(如通过Jython)进行交互的实用技巧。我尤其关注书中关于时间序列分析和异常检测的部分,这些技术在金融、物联网等领域有着广泛的应用。书中对如何构建实时数据处理管道的讲解,也让我受益匪浅,这对于理解和实现流式计算场景至关重要。这本书的深度和广度,预示着它将成为我未来数据科学学习和实践中的重要参考。

评分

这本《Java数据科学指南》在我眼中,简直是一部为有志于深入探索数据科学技术栈的开发者量身打造的宝藏。我尤其看重它在算法实现和模型优化方面的深度。书中对各种经典机器学习算法的Java实现进行了详尽的阐述,从线性回归、逻辑回归到支持向量机、决策树,再到神经网络,几乎涵盖了当前主流的监督学习和无监督学习算法。更重要的是,它并没有止步于算法的简单介绍,而是深入探讨了这些算法在Java环境下的调优策略,包括参数选择、特征工程、正则化等关键技术,这对于希望构建高性能、高准确率模型的工程师来说,具有极高的实用价值。此外,书中对深度学习框架(如DL4J)的集成和应用也进行了详细讲解,这无疑为想要踏入深度学习领域的Java开发者打开了一扇新的大门。我期待能从这本书中学到如何将理论知识转化为实际可运行的代码,并真正解决现实世界中的复杂数据问题。

评分

我一直认为,一个优秀的技术书籍,不仅要传授知识,更要激发读者的思考和创造力。《Java数据科学指南》在这方面做得非常出色。它不仅仅是代码的堆砌,而是通过大量的案例分析和实战项目,引导读者理解数据科学的本质和应用场景。我尤其欣赏书中对于数据挖掘和文本分析部分的讲解。如何利用Java的强大字符串处理能力和正则表达式,结合NLP(自然语言处理)库,从海量文本数据中提取有价值的信息,这对于社交媒体分析、舆情监控、智能客服等领域具有直接的应用价值。书中还探讨了如何利用Java构建预测模型,并将其部署到生产环境中,这为我理解数据科学项目的全生命周期管理提供了清晰的脉络。总的来说,这本书不仅仅是一本技术手册,更像是一位经验丰富的数据科学家在耐心指导你一步步走向成功。

评分

作为一名有一定Java开发经验,但对数据科学领域仍感到陌生的工程师,我对于《Java数据科学指南》的评价,更多地集中在其“桥梁”作用。过去,我一直觉得Python是数据科学领域的“官方语言”,而Java似乎与之关联不大。然而,这本书的出现彻底颠覆了我的认知。它清晰地展示了Java强大的生态系统如何能够支撑起完整的数据科学流程,从底层的性能优化到与现有企业级Java应用的无缝集成,都提供了可行的解决方案。我特别欣赏书中关于如何利用Java进行大规模数据ETL(抽取、转换、加载)的章节,这对于许多传统企业来说,是将现有数据资产转化为数据科学洞察的关键一步。此外,书中对Java在分布式计算和高性能计算方面的优势的强调,也让我看到了用Java构建更具扩展性和效率的数据科学平台的可能性。这本书不仅教会我如何“做”数据科学,更让我看到了Java在其中扮演的独特而重要的角色。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有