利用python信息检索的一个案例


利用python信息检索的一个案例

注:这部分代码为得到excel表后的利用代码

代码没有仔细整理,有点粗糙

# -*- coding:utf-8 -*-
import os #引用os系统库
import tkinter.filedialog as tf #引用Pyhon内置的文件对话框模块
import re  #引用内置的正则表达式模块
import pandas as pd #引用用于数据处理统计分析的pandas库
import numpy as np #引用numpy库
import matplotlib.pyplot as plt #引用matplotlib.pyplot模块用于作图
import wordcloud           #word云
cpath = tf.askdirectory()  #这一步选择excel所在的文件夹
os.chdir(cpath) #将cpath设置当前目录
weipufile = tf.askopenfilename() #这一步选择Excel文件
dwp = pd.read_excel(weipufile)  #利用pandas的read_excel方法来读取我们选择的Excel
dwp.rename(columns=dict(zip(dwp.columns,[re.sub('\s','',x) for x in dwp.columns])),inplace=True)         #使用正则,调整字段名称格式,去掉其中的空白字符

dwp1=dwp.query('机构.str.contains("成都信息工程")') #筛选机构字段包含“成都信息工程”的数据
print("数据记录的总数量为:%d"%len(dwp1))  #查看数据记录的数量
# print(dwp1.年)
# print(dwp1['年'].value_counts())   #用value_counts方法统计
# print(dwp1['年'].apply(lambda x:str(x)+'年').value_counts()) #为了符合使用习惯,在年度数据后面加上“年”
print(dwp1['年'].apply(lambda x:str(x)+'年').value_counts().sort_index()) #将统计结果按索引排序——即按年度排序

tjjg_year=dwp1['年'].apply(lambda x:str(x)+'年').value_counts().sort_index()#将年度统计结果赋值给变量tjjg_year
# tjjg_year.to_excel('year1.xlsx') #将年度统计结果保存到当前目录
# tjjg_year1 = tjjg_year.reset_index().rename(columns={'index':'年','年':'发文数量'}) #调整统计结果的结构和字段名称 赋值给变量tjjg_year1
# tjjg_year1.to_excel('year2.xlsx')  #保存到Excel

def show(x,choose):
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', '黑体']  # 正常显示中文标签
    plt.rcParams.update({'figure.autolayout': True})  # 自动适应布局
    plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
    #柱状图
    if choose == 1:
        plt.bar(x.index, x.values)
        plt.title('本校2017年以来中文期刊论文数量情况')
        for x, y in zip(np.arange(len(x)), tjjg_year.values, ):
            plt.text(x + 0.05, y + 0.05, '%d' % y, ha='center', va='bottom')

    #条形图
    elif choose == 2:
        plt.barh(np.arange(len(x)), left=0, height=0.5, width=x.values, tick_label=x.index)
        for x, y in zip(x.values, np.arange(len(x))):
            plt.text(x + 25, y + 0.05, '%d' % x, ha='center', va='bottom')
        plt.title('本校2017年以来中文期刊论文数量情况')

    #饼状图
    elif choose == 3:
        plt.pie(x.values, labels=x.index, autopct='%1.1f%%', )  # 做饼图
        plt.title('本校2017年以来中文期刊论文占比情况')  # 设置标题

    #折线图
    elif choose == 4:
        plt.plot(np.arange(len(tjjg_year)), tjjg_year.values, c='r', ls='-.', marker='o', label=tjjg_year.name)
        for x, y, z in zip(np.arange(len(tjjg_year)), tjjg_year.values, tjjg_year.index):
            plt.text(x + 0.05, y + 0.05, '%s\n%d' % (z, y), ha='center', va='bottom')
        # 添加节点文字
        plt.ylim(0, max(tjjg_year.values) + 100)  # 增加Y轴上限
        plt.title('本校2017年以来中文期刊论文数量情况')  # 显示标题
        plt.legend()  # 显示图例


    else:
        print("输入错误!")
        return 0
    return plt


def guanjianci_yuntu(dwp):
    gjc = dwp.关键词.dropna().apply(lambda x: re.sub('\[.*?\]', '', x))  # 清楚空白行,替换[*]为空
    gjc1 = gjc.apply(lambda x: [y.strip() for y in x.split(';') if y.strip()])
    gjc2 = gjc1.apply(pd.value_counts)
    gjc3 = gjc2.unstack().dropna().reset_index().groupby(by='level_0').count().reset_index().rename(
        columns={'level_0': '关键词', 'level_1': '频次'}).sort_values(by='频次')
    gjc3.to_excel('关键词.xlsx')
    wc = wordcloud.WordCloud(font_path='simhei.ttf', background_color='white', scale=5)
    wc.generate_from_frequencies(dict(zip(gjc3.关键词, gjc3.频次)))
    fig = plt.figure(figsize=(8, 8))
    fig.suptitle('本校2017年以来中文期刊论文关键词词云图', fontsize=26)
    plt.axis('off')  # 隐藏坐标轴
    plt.imshow(wc)  # 生成词云图
    plt.show()  # 显示图片

    return 0

def guanjianci_zhexian(dwp):
    ngjc = dwp[['年', '关键词']]  # 筛选“关键词”、“年”字段
    ngjc1 = ngjc.astype('str').query('关键词.str.contains("青藏高原|气象学|气候变化|降水|时空分布|教学改革")')  # 筛选包含指定关键词的数据
    ngjc1.关键词 = ngjc1.关键词.dropna().apply(lambda x: re.sub('\[.*?\]', '', x))  # 清楚空白行,替换[*]为空
    ngjc1.关键词 = ngjc1.关键词.apply(lambda x: [y.strip() for y in x.split(';') if y.strip()])  # 关键词以分号(;)分割
    ngjc_qzgy = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['青藏高原'].groupby(
        by='年').count().sort_index()  # 指定关键词统计
    ngjc_qxx = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['气象学'].groupby(
        by='年').count().sort_index()
    ngjc_qhbh = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['气候变化'].groupby(
        by='年').count().sort_index()
    ngjc_js = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['降水'].groupby(
        by='年').count().sort_index()
    ngjc_skfb = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['时空分布'].groupby(
        by='年').count().sort_index()
    ngjc_jxgg = ngjc1.关键词.apply(pd.value_counts).set_index(ngjc1.).unstack().dropna().loc['教学改革'].groupby(
        by='年').count().sort_index()
    plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', '黑体']  # 正常显示中文标签
    plt.rcParams.update({'figure.autolayout': True})  # 自动适应布局
    plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
    plt.plot(np.arange(len(ngjc_qzgy)), ngjc_qzgy.values, ls='-.', marker='o', label='青藏高原')  # 做折线图
    plt.plot(np.arange(len(ngjc_qxx)), ngjc_qxx.values, ls='-.', marker='o', label='气象学')
    plt.plot(np.arange(len(ngjc_qhbh)), ngjc_qhbh.values, ls='-.', marker='o', label='气候变化')
    plt.plot(np.arange(len(ngjc_js)), ngjc_js.values, ls='-.', marker='o', label='降水')
    plt.plot(np.arange(len(ngjc_skfb)), ngjc_skfb.values, ls='-.', marker='o', label='时空分布')
    plt.plot(np.arange(len(ngjc_jxgg)), ngjc_jxgg.values, ls='-.', marker='o', label='教学改革')
    plt.xticks(np.arange(len(ngjc_qzgy)), labels=ngjc_qzgy.index)
    plt.legend()
    plt.title('本校2017年以来中文期刊论文高频关键词年度趋势')
    plt.show()
    return 0

show(tjjg_year,int(input("选择图形(1,2,3,4 --即柱形,条形,饼状,折线):\n"))).show()
#guanjianci_zhexian(dwp=dwp)
# guanjianci_yuntu(dwp=dwp)

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值