图数据库:基于历史学科的全球历史知识图谱构建,使用Neo4j图数据库实现中国历史与全球历史的关联查询。
目录
- 一、图数据库建模设计(Cypher)
- 二、时间轴查询示例(Cypher)
- 1. 查询中国某朝代时期的全球事件
- 2. 查询特定中国事件时的全球背景
- 3. 跨文明关联分析
- 三、Python可视化分析
- 四、典型应用场景
- 1. 比较文明发展(Python实现)
- 2. 历史影响路径分析
- 3. 时间轴重叠可视化(Python)
- 五、知识图谱扩展建议
- 1.添加更多维度数据
- 2.实现时空查询函数
- 3.构建GDS图算法分析
- 六、小结
- 七、欢迎纠错
- 八、免费爬虫
- 九、论文写作/Python 学习智能体
一、图数据库建模设计(Cypher)
// 1. 创建中国历史节点(朝代->时期->事件)
CREATE (china:Country {name:"中国"})// 1.1 创建中国朝代节点
CREATE (xia:Dynasty {name:"夏朝", start:-2070, end:-1600, capital:"阳城"}),(shang:Dynasty {name:"商朝", start:-1600, end:-1046, capital:"殷"}),(zhou:Dynasty {name:"周朝", start:-1046, end:-256, capital:"镐京/洛邑"}),(han:Dynasty {name:"汉朝", start:-202, end:220, capital:"长安/洛阳"}),(tang:Dynasty {name:"唐朝", start:618, end:907, capital:"长安"}),(song:Dynasty {name:"宋朝", start:960, end:1279, capital:"开封/临安"}),(ming:Dynasty {name:"明朝", start:1368, end:1644, capital:"南京/北京"})// 1.2 创建中国历史事件
CREATE (battle_of_red_cliffs:Event {name:"赤壁之战", year:208, description:"三国时期著名战役"}),(an_shi_rebellion:Event {name:"安史之乱", year:755, description:"唐朝由盛转衰的转折点"}),(zheng_he_voyages:Event {name:"郑和下西洋", start_year:1405, end_year:1433, description:"明朝航海壮举"})// 1.3 创建中国历史人物
CREATE (cao_cao:Person {name:"曹操", lifespan:"155-220", title:"三国时期政治家"}),(li_bai:Person {name:"李白", lifespan:"701-762", title:"唐代诗人"}),(zheng_he:Person {name:"郑和", lifespan:"1371-1433", title:"明朝航海家"})// 2. 创建全球历史节点
CREATE (rome:Country {name:"罗马帝国"}),(england:Country {name:"英格兰"}),(arab:Country {name:"阿拉伯帝国"})// 2.1 创建全球历史事件
CREATE (punic_wars:Event {name:"布匿战争", start_year:-264, end_year:-146, description:"罗马与迦太基的战争"}),(magna_carta:Event {name:"大宪章签署", year:1215, description:"英国限制王权的法律文件"}),(crusades:Event {name:"十字军东征", start_year:1096, end_year:1291, description:"基督教东征运动"})// 3. 建立中国历史关系
// 3.1 朝代更替关系
CREATE (xia)-[:NEXT]->(shang),(shang)-[:NEXT]->(zhou),(zhou)-[:NEXT]->(han),(han)-[:NEXT]->(tang),(tang)-[:NEXT]->(song),(song)-[:NEXT]->(ming)// 3.2 事件与朝代关系
CREATE (battle_of_red_cliffs)-[:OCCURRED_IN]->(han),(an_shi_rebellion)-[:OCCURRED_IN]->(tang),(zheng_he_voyages)-[:OCCURRED_IN]->(ming)// 3.3 人物关系
CREATE (cao_cao)-[:LIVED_IN]->(han),(li_bai)-[:LIVED_IN]->(tang),(zheng_he)-[:LIVED_IN]->(ming),(zheng_he)-[:RELATED_TO]->(zheng_he_voyages)// 4. 建立全球关联关系
// 4.1 时间平行关系(汉朝与罗马帝国同期)
CREATE (han)-[:CONTEMPORARY_WITH {relation:"同期文明"}]->(rome)// 4.2 事件关联(郑和下西洋与欧洲大航海时代前)
CREATE (zheng_he_voyages)-[:BEFORE {years:70}]->(columbus_voyage:Event {name:"哥伦布发现美洲", year:1492
})// 4.3 跨文明交流(唐朝与阿拉伯帝国)
CREATE (tang)-[:HAD_TRADE_WITH {route:"丝绸之路"}]->(arab)
二、时间轴查询示例(Cypher)
1. 查询中国某朝代时期的全球事件
// 查询唐朝时期(618-907)全球重大事件
MATCH (c:Dynasty {name:"唐朝"})
MATCH (globalEvent:Event)
WHERE globalEvent.year >= c.start AND globalEvent.year <= c.end
RETURN globalEvent.name AS event, globalEvent.year AS year,globalEvent.description AS description
ORDER BY globalEvent.year
2. 查询特定中国事件时的全球背景
// 查询郑和下西洋时期(1405-1433)全球事件
MATCH (chinaEvent:Event {name:"郑和下西洋"})
MATCH (worldEvent:Event)
WHERE worldEvent.year >= chinaEvent.start_year AND worldEvent.year <= chinaEvent.end_year
RETURN worldEvent.name AS concurrent_event,worldEvent.year AS year,CASE WHEN worldEvent.year < chinaEvent.start_year THEN "之前" ELSE "同期" END AS time_relation
ORDER BY worldEvent.year
3. 跨文明关联分析
// 查找与中国有直接关联的全球事件
MATCH (china:Country {name:"中国"})<-[:OCCURRED_IN]-(chinaEvent:Event)
MATCH (chinaEvent)-[r]-(worldEvent:Event)
RETURN chinaEvent.name AS chinese_event,type(r) AS relation_type,worldEvent.name AS world_event,chinaEvent.year AS china_year,worldEvent.year AS world_year
ORDER BY chinaEvent.year
三、Python可视化分析
import pandas as pd
import matplotlib.pyplot as plt
from pyvis.network import Networkdef visualize_timeline(start_year, end_year):# 连接Neo4j获取数据query = """MATCH (e:Event)WHERE e.year >= $start AND e.year <= $endOPTIONAL MATCH (e)-[:OCCURRED_IN]->(c:Country)RETURN e.name AS event, e.year AS year, e.description AS description,coalesce(c.name, '全球') AS countryORDER BY year"""df = pd.DataFrame([dict(record) for record in session.run(query, start=start_year, end=end_year)])# 创建时间轴图plt.figure(figsize=(12, 8))colors = {'中国': 'red', '罗马帝国': 'blue', '英格兰': 'green'}for _, row in df.iterrows():plt.plot(row['year'], 0, 'o', color=colors.get(row['country'], 'gray'),markersize=10)plt.text(row['year'], 0.1, f"{row['event']}\n({row['year']})",ha='center', va='bottom', rotation=45)plt.title(f"全球历史时间轴 ({start_year}-{end_year})")plt.yticks([])plt.xlabel("年份")plt.grid(axis='x')plt.tight_layout()plt.savefig('global_timeline.png', dpi=300)def create_interactive_network():# 创建交互式知识图谱query = """MATCH (c:Dynasty)-[r]-(e:Event)OPTIONAL MATCH (e)-[r2]-(ge:Event)RETURN *LIMIT 100"""results = session.run(query)net = Network(height="800px", width="100%", bgcolor="#222222", font_color="white")for record in results:# 添加节点if 'Dynasty' in record['c'].labels:net.add_node(record['c'].id, label=record['c']['name'], group='dynasty', title=record['c']['capital'])elif 'Event' in record['e'].labels:net.add_node(record['e'].id, label=record['e']['name'], group='event', title=record['e']['description'])# 添加边if record['r'] is not None:net.add_edge(record['r'].start, record['r'].end, title=type(record['r']).__name__)net.show("history_network.html")
四、典型应用场景
1. 比较文明发展(Python实现)
def compare_civilizations(dynasty_name):query = """MATCH (d:Dynasty {name: $name})MATCH (d)-[:CONTEMPORARY_WITH]->(c:Country)MATCH (c)<-[:OCCURRED_IN]-(e:Event)RETURN c.name AS civilization, count(e) AS event_count,collect(e.name)[..3] AS sample_events"""df = pd.DataFrame([dict(record) for record in session.run(query, name=dynasty_name)])# 生成对比图表df.plot.bar(x='civilization', y='event_count', title=f'{dynasty_name}时期文明对比')plt.ylabel('重大事件数量')plt.tight_layout()plt.savefig(f'{dynasty_name}_civilization_comparison.png')
2. 历史影响路径分析
// 查找从汉朝到罗马帝国的知识传播路径
MATCH path = (han:Dynasty {name:"汉朝"})-[:HAD_TRADE_WITH*..3]->(rome:Country {name:"罗马帝国"})
RETURN [n IN nodes(path) | n.name] AS path_nodes,[r IN relationships(path) | type(r)] AS relationships
LIMIT 5
3. 时间轴重叠可视化(Python)
def plot_parallel_timelines():query = """MATCH (c:Dynasty)-[:NEXT*]->(d:Dynasty)WITH collect(DISTINCT c) + collect(DISTINCT d) AS dynastiesUNWIND dynasties AS dMATCH (d)<-[:OCCURRED_IN]-(e:Event)RETURN d.name AS dynasty, d.start AS start, d.end AS end,collect({name:e.name, year:e.year}) AS events"""fig, axes = plt.subplots(figsize=(15, 8))# 绘制朝代时间条for i, record in enumerate(session.run(query)):axes.barh(i, width=record['end']-record['start'], left=record['start'], alpha=0.6)axes.text(record['start'], i, record['dynasty'], ha='left', va='center')# 标注事件for event in record['events']:axes.plot(event['year'], i, 'ro')axes.text(event['year'], i+0.1, event['name'], rotation=45, ha='right')axes.set_yticks([])axes.set_xlabel("年份")axes.set_title("中国朝代与重大事件时间轴")plt.tight_layout()plt.savefig('dynasty_timeline.png', dpi=300)
五、知识图谱扩展建议
1.添加更多维度数据
// 添加科技发展节点
CREATE (papermaking:Technology {name:"造纸术", origin:"中国", century:2}),(printing:Technology {name:"印刷术", origin:"中国", century:8})// 建立技术传播路径
MATCH (c:Dynasty {name:"汉朝"}), (t:Technology {name:"造纸术"})
CREATE (c)-[:INVENTED]->(t)
CREATE (t)-[:SPREAD_TO {century:8}]->(:Country {name:"阿拉伯帝国"})
2.实现时空查询函数
// 创建自定义函数(需安装APOC库)
CALL apoc.custom.asFunction('events.around','MATCH (e:Event) WHERE e.year >= $year - 50 AND e.year <= $year + 50RETURN e','READ',[['e', 'NODE']],true,'查找某年份前后50年的相关事件'
)
3.构建GDS图算法分析
// 发现历史关键转折点(使用PageRank算法)
CALL gds.graph.create('history', ['Event', 'Dynasty', 'Country'], ['OCCURRED_IN', 'CONTEMPORARY_WITH', 'HAD_TRADE_WITH']
)CALL gds.pageRank.stream('history')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC LIMIT 10
六、小结
这套方案通过:
时空双重维度建模:精确到年的历史事件定位
跨文明关联网络:揭示文明交流的隐藏模式
多层级结构:国家->朝代->事件->人物的知识体系
交互式可视化:直观展示复杂历史关系
典型查询示例:“当中国处于宋朝(960-1279)时,欧洲正在发生哪些重大事件?这些事件如何通过丝绸之路与中国产生关联?”
七、欢迎纠错
欢迎纠错,随时更新。
联系方式:评论、私信,或 企鹅 :179 0042 182 。
码字不易,如觉得还可以,请给个免费的 zan 和 soucang ,让我有动力继续写下去。
八、免费爬虫
https://affiliate
.bazhuayu
.com
/M8lKUC
九、论文写作/Python 学习智能体
https://chatglm.cn/share/WF2C5ree
-
- 以下关于 Markdown 编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
++ 新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
++ 功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
++ 合理的创建标题,有助于目录的生成
直接输入1次+,并按下space后,将生成1级标题。
输入2次+,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
++ 如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
++ 插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
++ 如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
++ 生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
++ 创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
+++ 设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
+++ SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
++ 创建一个自定义列表
Markdown
: Text-to-HTML conversion tool
- Authors
- John
- Luke
++ 如何创建一个注脚
一个具有注脚的文本。2
++ 注释也是必不可少的
Markdown将文本转换为 HTML。
++ KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
++ 新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
++ UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
++ FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
++ 导出与导入
+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎