欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

社科基金

程序员文章站 2022-05-25 09:49:51
import pandas as pdshekedata= pd.read_excel(r'C:\Users\lenovo\Desktop\shekedata.xlsx')print(shekedata.head(10)) 项目名称 学科分类 项目类别 项目批准号 立项时间 项目负责人 \0 图书馆公共文化服务平衡性充分性发展的法律问题研究 图书馆、情报与文献学 重点项目 18ATQ001 2018-...
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运用到平时的学习工作中来。


本文地址:https://blog.csdn.net/qq_44321367/article/details/107498776

相关标签: 数据分析 python