import pandas as pd
shekedata= pd.read_excel(r'C:\Users\lenovo\Desktop\shekedata.xlsx')
print(shekedata.head(10))
项目名称 学科分类 项目类别 项目批准号 立项时间 项目负责人 \
0 图书馆公共文化服务平衡性充分性发展的法律问题研究 图书馆、情报与文献学 重点项目 18ATQ001 2018-06-21 赵媛
1 民国时期革命历史文献整理与研究 图书馆、情报与文献学 重点项目 18ATQ002 2018-06-21 马静
2 面向国家发展与安全决策的情报服务创新研究 图书馆、情报与文献学 重点项目 18ATQ003 2018-06-21 杨建林
3 创新驱动的中国特色新型智库知识服务发展机制研究 图书馆、情报与文献学 重点项目 18ATQ004 2018-06-21 申静
4 大数据时代政府数据治理体系建构研究 图书馆、情报与文献学 重点项目 18ATQ005 2018-06-21 夏义堃
5 学术出版体制机制创新研究 图书馆、情报与文献学 重点项目 18ATQ006 2018-06-21 方卿
6 开放科学环境下的科学数据开放共享机制与对策研究 图书馆、情报与文献学 重点项目 18ATQ007 2018-06-21 盛小平
7 国家大数据战略下档案管理理论与实践创新研究 图书馆、情报与文献学 重点项目 18ATQ008 2018-06-21 李泽锋
8 基于全地区样本的国家档案馆公共服务能力评估体系研究 图书馆、情报与文献学 重点项目 18ATQ009 2018-06-21 傅荣校
9 1930年代“民族复兴”话语下的全国读书运动研究 图书馆、情报与文献学 一般项目 18BTQ001 2018-06-21 刘平
专业职务 工作单位 所在省区市
0 正高级 四川大学 四川
1 正高级 国家图书馆 机关
2 正高级 南京大学 江苏
3 正高级 北京大学 高校
4 正高级 武汉大学 湖北
5 正高级 武汉大学 湖北
6 正高级 华南师范大学 广东
7 正高级 郑州航空工业管理学院 河南
8 正高级 浙江大学 浙江
9 副高级 湖南大学 湖南
!pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting jieba
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/c6/cb/18eeb235f833b726522d7ebed54f2278ce28ba9438e3135ab0278d9792a2/jieba-0.42.1.tar.gz (19.2 MB)
Building wheels for collected packages: jieba
Building wheel for jieba (setup.py): started
Building wheel for jieba (setup.py): finished with status 'done'
Created wheel for jieba: filename=jieba-0.42.1-py3-none-any.whl size=19314481 sha256=a3951faf37d16651803c287b98ae0e3ff934fd7bece035f9e4719c31719848d3
Stored in directory: c:\users\lenovo\appdata\local\pip\cache\wheels\95\1a\6d\75355e7a5c76ed48e2d6cde3b95c4828e83274b93f5392ac96
Successfully built jieba
Installing collected packages: jieba
Successfully installed jieba-0.42.1
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pyecharts
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/18/f6/e893384d142fdb05c93d101ac26588db0a075033f2e8abf634b8d76d78bd/pyecharts-1.8.1-py3-none-any.whl (134 kB)
Collecting prettytable
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ef/30/4b0746848746ed5941f052479e7c23d2b56d174b82f4fd34a25e389831f5/prettytable-0.7.2.tar.bz2 (21 kB)
Collecting simplejson
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ae/fd/36160c9ba8623b37e85ee40044046f965c050c29630536d55d83bc7a1c4e/simplejson-3.17.2-cp37-cp37m-win_amd64.whl (73 kB)
Requirement already satisfied: jinja2 in e:\anaconda\lib\site-packages (from pyecharts) (2.11.1)
Requirement already satisfied: MarkupSafe>=0.23 in e:\anaconda\lib\site-packages (from jinja2->pyecharts) (1.1.1)
Building wheels for collected packages: prettytable
Building wheel for prettytable (setup.py): started
Building wheel for prettytable (setup.py): finished with status 'done'
Created wheel for prettytable: filename=prettytable-0.7.2-py3-none-any.whl size=13704 sha256=40e52a34ddfb56d17feb5aed91646f539f5cdd9863dbf5960c7532d335c57ec7
Stored in directory: c:\users\lenovo\appdata\local\pip\cache\wheels\44\3e\a7\b6c2602477215f8b7b586ace0bf4050c6ded7afd6f218a6ee7
Successfully built prettytable
Installing collected packages: prettytable, simplejson, pyecharts
Successfully installed prettytable-0.7.2 pyecharts-1.8.1 simplejson-3.17.2
import pandas as pd
import jieba
from pyecharts.charts import WordCloud,Graph
from pyecharts import options as opts
import numpy as np
df = pd.read_excel(r'C:\Users\lenovo\Desktop\shekedata.xlsx')
df.head(10)
项目名称 | 学科分类 | 项目类别 | 项目批准号 | 立项时间 | 项目负责人 | 专业职务 | 工作单位 | 所在省区市 | |
---|---|---|---|---|---|---|---|---|---|
0 | 图书馆公共文化服务平衡性充分性发展的法律问题研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ001 | 2018-06-21 | 赵媛 | 正高级 | 四川大学 | 四川 |
1 | 民国时期革命历史文献整理与研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ002 | 2018-06-21 | 马静 | 正高级 | 国家图书馆 | 机关 |
2 | 面向国家发展与安全决策的情报服务创新研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ003 | 2018-06-21 | 杨建林 | 正高级 | 南京大学 | 江苏 |
3 | 创新驱动的中国特色新型智库知识服务发展机制研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ004 | 2018-06-21 | 申静 | 正高级 | 北京大学 | 高校 |
4 | 大数据时代政府数据治理体系建构研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ005 | 2018-06-21 | 夏义堃 | 正高级 | 武汉大学 | 湖北 |
5 | 学术出版体制机制创新研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ006 | 2018-06-21 | 方卿 | 正高级 | 武汉大学 | 湖北 |
6 | 开放科学环境下的科学数据开放共享机制与对策研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ007 | 2018-06-21 | 盛小平 | 正高级 | 华南师范大学 | 广东 |
7 | 国家大数据战略下档案管理理论与实践创新研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ008 | 2018-06-21 | 李泽锋 | 正高级 | 郑州航空工业管理学院 | 河南 |
8 | 基于全地区样本的国家档案馆公共服务能力评估体系研究 | 图书馆、情报与文献学 | 重点项目 | 18ATQ009 | 2018-06-21 | 傅荣校 | 正高级 | 浙江大学 | 浙江 |
9 | 1930年代“民族复兴”话语下的全国读书运动研究 | 图书馆、情报与文献学 | 一般项目 | 18BTQ001 | 2018-06-21 | 刘平 | 副高级 | 湖南大学 | 湖南 |
定义绘制词云的函数
# 过滤标题中的数字
def not_num(x):
try:
x = int(x)
except:
return True
return False
def draw_wordcloud(title,data):
texts = []
for item in data:
temp = [ x for x in jieba.cut(item,cut_all=True) if len(x)>1 and not_num(x)]
texts+=temp
mset = set(texts)
word = []
keys = []
values = []
for item in mset:
if texts.count(item) > 3 and item !='研究': # 达到一定阈值,过滤无意义词汇(如研究)
word.append((item,texts.count(item)))
keys.append(item)
values.append(texts.count(item))
word = list(reversed(sorted(word,key = lambda x:x[1])))
wc = WordCloud()
wc.add('词频',word,shape='circle')
wc.set_global_opts(title_opts=opts.TitleOpts(title=title))
return wc.render_notebook()
print('函数已成功定义,请进行下一步')
函数已成功定义,请进行下一步
college = '武汉大学'
draw_wordcloud('{}-国家社科项目研究热点词云'.format(college),df[df['工作单位']==college]['项目名称']) # 可以筛选特定学校数据
E:\anaconda\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :)
super().__init__(init_opts=init_opts)
<div id="6c9b64061d6845f7a92c1f8d11cd4054" style="width:900px; height:500px;"></div>
定义绘制图谱的函数
此函数用于获取图谱节点数据,返回图谱节点信息
def get_nodes(items):
texts = [] # 存放所有切割好的字段
for item in items:
temp = [ x for x in jieba.cut(item,cut_all=True) if len(x)>1 and not_num(x)]
texts+=temp
mset = set(texts)
keys = []
values = []
stop_list = ['研究'] # 停用词表
for item in mset:
if texts.count(item) > 5 and item not in stop_list: # 达到一定阈值,去停用词
keys.append(item)
values.append(texts.count(item))
return zip(keys,values)
此函数用于获取节点之间的联系信息
def get_links(key1,key2,items):
'''两节点之间的连线数量'''
counts = 0
# print('{} {} {}'.format(key1,key2,items))
for item in items:
if key1 in item and key2 in item:
counts = counts + 1
return counts
def draw_graph(items,datas):
'''绘制知识图谱'''
def link_color_map(x): #
if x < 5:
return '#DAA520'
if x < 10:
return '#40E0D0'
if x < 15:
return '#FFD700'
else:
return '#FF7F50'
def node_color_map(x):
if x < 7:
return '#98FB98'
if x < 14:
return '#00FFFF'
if x < 21:
return '#4169E1'
return '#FF1493'
nodes_data = [{'name':x[0],'symbolSize':x[1],'itemStyle' :{'normal':{'color':node_color_map(x[1])}}} for x in datas]
#nodes_data = [opts.GraphNode(name=x[0],symbol_size=x[1],item_style =opts.ItemStyleOpts(color=node_color_map(x[1]))) for x in datas]
keys = []
for x in datas:
keys.append(x[0])
links_data = []
for i in range(len(keys)-1):
for j in range(i+1,len(keys)):
thecount = get_links(keys[i],keys[j],items)
if thecount == 0:
continue
links_data.append(opts.GraphLink(source=keys[i],target=keys[j],linestyle_opts = opts.LineStyleOpts(curve=0.3,width=thecount*0.2,color=link_color_map(thecount))))
c = (
Graph()
.add(
'',
nodes_data,
links_data,
repulsion=4000,
)
)
return c
temp_df = df[df['工作单位']=='武汉大学']
node_value = get_nodes(temp_df['项目名称'])
map = draw_graph(temp_df['项目名称'],list(node_value))
map.render_notebook() #图形渲染可能需要一段时间,请耐心等待
E:\anaconda\lib\site-packages\pyecharts\charts\chart.py:14: PendingDeprecationWarning: pyecharts 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 :)
super().__init__(init_opts=init_opts)
<div id="9ad5e95eafa34d71bd19e6d7f3bd951c" style="width:900px; height:500px;"></div>
总结
因为手头有一个项目需要做,然后今天发现如果用python去做的话也是非常好的,这个代码是找到的,要是以后能够写到这个这个程度就非常好了,将Python运用到平时的学习工作中来。