目录
- 一、图数据库建模设计(Cypher)
- 二、时间轴查询示例(Cypher)
-
- [1. 查询中国某朝代时期的全球事件](#1. 查询中国某朝代时期的全球事件)
- [2. 查询特定中国事件时的全球背景](#2. 查询特定中国事件时的全球背景)
- [3. 跨文明关联分析](#3. 跨文明关联分析)
- 三、Python可视化分析
- 四、典型应用场景
-
- [1. 比较文明发展(Python实现)](#1. 比较文明发展(Python实现))
- [2. 历史影响路径分析](#2. 历史影响路径分析)
- [3. 时间轴重叠可视化(Python)](#3. 时间轴重叠可视化(Python))
- 五、知识图谱扩展建议
- 六、小结
- 七、欢迎纠错
- 八、免费爬虫
- [九、论文写作/Python 学习智能体](#九、论文写作/Python 学习智能体)
一、图数据库建模设计(Cypher)
python
// 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可视化分析
python
import pandas as pd
import matplotlib.pyplot as plt
from pyvis.network import Network
def visualize_timeline(start_year, end_year):
# 连接Neo4j获取数据
query = """
MATCH (e:Event)
WHERE e.year >= $start AND e.year <= $end
OPTIONAL MATCH (e)-[:OCCURRED_IN]->(c:Country)
RETURN e.name AS event, e.year AS year,
e.description AS description,
coalesce(c.name, '全球') AS country
ORDER 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实现)
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)
python
def plot_parallel_timelines():
query = """
MATCH (c:Dynasty)-[:NEXT*]->(d:Dynasty)
WITH collect(DISTINCT c) + collect(DISTINCT d) AS dynasties
UNWIND dynasties AS d
MATCH (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 + 50
RETURN 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](#甘特图的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.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
++ 如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
javascript
// An highlighted block
var foo = 'bar';
++ 生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
++ 创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
+++ 设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
+++ SmartyPants
SmartyPants将ASCII标点字符转换为"智能"印刷标点HTML实体。例如:
TYPE | ASCII | |
---|---|---|
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- conversion tool
:
John
:
Luke
++ 如何创建一个注脚
一个具有注脚的文本。[2](#2)
++ 注释也是必不可少的
Markdown将文本转换为 。
++ 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 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
++ 新的甘特图功能,丰富你的文章
2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
- 关于 甘特图 语法,参考 这儿,
++ UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五
这将产生一个流程图。:
链接 长方形 圆 圆角长方形 菱形
- 关于 Mermaid 语法,参考 这儿,
++ FLowchart流程图
我们依旧会支持flowchart的流程图:
Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
- 关于 Flowchart流程图 语法,参考 这儿.
++ 导出与导入
+++ 导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
+++ 导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释 ↩︎
*[HTML]: 超文本标记语言