社科基金项目分析

本文介绍了如何利用Python进行社科基金项目的词云和图谱分析。通过定义绘制词云和图谱的函数,展示了Python在数据分析中的应用,强调了其在学习工作中的实用性。
摘要由CSDN通过智能技术生成
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图书馆公共文化服务平衡性充分性发展的法律问题研究图书馆、情报与文献学重点项目18ATQ0012018-06-21赵媛正高级四川大学四川
1民国时期革命历史文献整理与研究图书馆、情报与文献学重点项目18ATQ0022018-06-21马静正高级国家图书馆机关
2面向国家发展与安全决策的情报服务创新研究图书馆、情报与文献学重点项目18ATQ0032018-06-21杨建林正高级南京大学江苏
3创新驱动的中国特色新型智库知识服务发展机制研究图书馆、情报与文献学重点项目18ATQ0042018-06-21申静正高级北京大学高校
4大数据时代政府数据治理体系建构研究图书馆、情报与文献学重点项目18ATQ0052018-06-21夏义堃正高级武汉大学湖北
5学术出版体制机制创新研究图书馆、情报与文献学重点项目18ATQ0062018-06-21方卿正高级武汉大学湖北
6开放科学环境下的科学数据开放共享机制与对策研究图书馆、情报与文献学重点项目18ATQ0072018-06-21盛小平正高级华南师范大学广东
7国家大数据战略下档案管理理论与实践创新研究图书馆、情报与文献学重点项目18ATQ0082018-06-21李泽锋正高级郑州航空工业管理学院河南
8基于全地区样本的国家档案馆公共服务能力评估体系研究图书馆、情报与文献学重点项目18ATQ0092018-06-21傅荣校正高级浙江大学浙江
91930年代“民族复兴”话语下的全国读书运动研究图书馆、情报与文献学一般项目18BTQ0012018-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运用到平时的学习工作中来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值