|
|
# -*- coding: utf-8 -*-
|
|
|
# @Time : 2022/6/21 8:56
|
|
|
# @Author : ZhaoXiangPeng
|
|
|
# @File : main.py
|
|
|
|
|
|
import pandas as pd
|
|
|
from article_subject.utils import get_row_top, merge_table, get_today
|
|
|
|
|
|
|
|
|
def func(row: pd.Series, num: int = 3):
|
|
|
x, y, z = row['教育部一级学科'],row['HighScoreSubject'],row['HighScoreSubjectJournal']
|
|
|
subjects = ';'.join([x, y, z]).split(';')
|
|
|
# subjects = ''
|
|
|
# subjects += x and x
|
|
|
# subjects += ';' + y and y
|
|
|
# subjects += ';' + z and z
|
|
|
sub_count = {}
|
|
|
for sub in subjects:
|
|
|
if sub in sub_count:
|
|
|
sub_count[sub] += 1
|
|
|
else:
|
|
|
sub_count[sub] = 1
|
|
|
sub_list = []
|
|
|
sub_sort = sorted(sub_count.items(), key=lambda x: -x[1])
|
|
|
for sub in sub_sort:
|
|
|
# 出现次数2次以上
|
|
|
if len(sub_list) < 3 and sub[1] > 2:
|
|
|
sub_list.append(sub[0])
|
|
|
return ';'.join(sub_list)
|
|
|
|
|
|
|
|
|
class Article2Subject:
|
|
|
def __init__(self):
|
|
|
self.periodical = None
|
|
|
|
|
|
def periodical_top(self, filename):
|
|
|
periodical = pd.read_csv(filename)
|
|
|
periodical.set_index(['issn'], inplace=True)
|
|
|
periodical['HighScoreSubjectJournal'] = periodical.apply(get_row_top, axis=1)
|
|
|
periodical = periodical[['HighScoreSubjectJournal']]
|
|
|
periodical.reset_index(inplace=True)
|
|
|
self.periodical = periodical
|
|
|
return periodical
|
|
|
|
|
|
def tc_huang_subject(self, filename):
|
|
|
tc_huang = pd.read_csv(filename)
|
|
|
tc_huang = tc_huang[tc_huang['一级学科'].notnull()]
|
|
|
tc_huang_list = []
|
|
|
group = tc_huang.groupby(by=['issn'])
|
|
|
for _, g in group:
|
|
|
tc_huang_list.append({'issn': _, 'HighScoreSubjectJournal': ';'.join(g['一级学科'])})
|
|
|
tc_huang = pd.DataFrame(tc_huang_list)
|
|
|
self.tc_huang = tc_huang
|
|
|
return tc_huang
|
|
|
|
|
|
def join_journal_subject(self):
|
|
|
journal_subject = pd.concat([self.periodical, self.tc_huang])
|
|
|
journal_subject.drop_duplicates(subset=['issn'], keep='last', inplace=True)
|
|
|
self.journal_subject = journal_subject
|
|
|
|
|
|
def score_model(self, filename):
|
|
|
base_columns = ['论文标题', '文献类型', '发表年份', '卷', '期', '发表月份', 'WOS核心合集被引频次', 'Scopus被引频次', '语言', '开始页数', '结束页数', 'WOSID', 'EID', '出版物名称', 'ISSN', '出版社', 'SCIE收录', 'SSCI收录', 'ESCI收录', 'A&HCI收录', 'EI收录', 'SCOPUS收录', 'snip值', 'sjr值', 'JCR收录', 'Q区间', 'IF值', 'JCR学科', 'ESI收录', 'ESI学科', '教育部门类', '教育部一级学科', '教育部二级学科', 'CSSCI收录', 'CSCD收录', 'AF', '作者列表', '是否第一作者', '第一作者机构', '第一作者', 'RP', '通讯作者地址', '是否通讯作者', '通讯作者机构', '通讯作者', 'C1', '作者地址', '本校机构信息', '本校学者排序', '本校学者信息', '摘要', 'sc']
|
|
|
# del_columns = ['论文标题', '文献类型', '发表年份', '卷', '期', '发表月份', 'WOS核心合集被引频次', 'Scopus被引频次', '语言', '开始页数', '结束页数', 'WOSID', 'EID', '出版物名称', '出版社', 'SCIE收录', 'SSCI收录', 'ESCI收录', 'A&HCI收录', 'EI收录', 'SCOPUS收录', 'snip值', 'sjr值', 'JCR收录', 'Q区间', 'IF值', 'JCR学科', 'ESI收录', 'ESI学科', '教育部门类', '教育部一级学科', '教育部二级学科', 'CSSCI收录', 'CSCD收录', 'AF', '作者列表', '是否第一作者', '第一作者机构', '第一作者', 'RP', '通讯作者地址', '是否通讯作者', '通讯作者机构', '通讯作者', 'C1', '作者地址', '本校机构信息', '本校学者排序', '本校学者信息', '摘要', 'sc']
|
|
|
score = pd.read_csv(filename)
|
|
|
score_columns = ['军事学_军事后勤学与军事装备学', '军事学_军事思想及军事历史', '军事学_军事管理学', '军事学_军事训练学', '军事学_军队指挥学', '军事学_军队政治工作学', '军事学_战役学', '军事学_战术学', '军事学_战略学', '农学_作物学', '农学_兽医学', '农学_农业资源与环境', '农学_园艺学', '农学_林学', '农学_植物保护', '农学_水产', '农学_畜牧学', '农学_草学', '医学_中医学', '医学_中药学', '医学_中西医结合', '医学_临床医学', '医学_公共卫生与预防医学', '医学_医学技术', '医学_口腔医学', '医学_基础医学', '医学_护理学', '医学_特种医学', '医学_药学', '历史学_世界史', '历史学_中国史', '历史学_考古学', '哲学_哲学', '工学_交通运输工程', '工学_仪器科学与技术', '工学_信息与通信工程', '工学_光学工程', '工学_公安技术', '工学_兵器科学与技术', '工学_农业工程', '工学_冶金工程', '工学_力学', '工学_动力工程及工程热物理', '工学_化学工程与技术', '工学_土木工程', '工学_地质资源与地质工程', '工学_城乡规划学', '工学_安全科学与工程', '工学_建筑学', '工学_控制科学与工程', '工学_机械工程', '工学_材料科学与工程', '工学_林业工程', '工学_核科学与技术', '工学_水利工程', '工学_测绘科学与技术', '工学_环境科学与工程', '工学_生物医学工程', '工学_生物工程', '工学_电子科学与技术', '工学_电气工程', '工学_石油与天然气工程', '工学_矿业工程', '工学_纺织科学与工程', '工学_网络空间安全', '工学_航空宇航科学与技术', '工学_船舶与海洋工程', '工学_计算机科学与技术', '工学_软件工程', '工学_轻工技术与工程', '工学_风景园林学', '工学_食品科学与工程', '教育学_体育学', '教育学_心理学', '教育学_教育学', '文学_中国语言文学', '文学_外国语言文学', '文学_新闻传播学', '法学_公安学', '法学_政治学', '法学_民族学', '法学_法学', '法学_社会学', '法学_马克思主义理论', '理学_化学', '理学_地球物理学', '理学_地理学', '理学_地质学', '理学_大气科学', '理学_天文学', '理学_数学', '理学_海洋科学', '理学_物理学', '理学_生态学', '理学_生物学', '理学_科学技术史', '理学_系统科学', '理学_统计学', '管理学_公共管理', '管理学_农林经济管理', '管理学_图书情报与档案管理', '管理学_工商管理', '管理学_管理科学与工程', '经济学_应用经济学', '经济学_理论经济学', '艺术学_戏剧与影视学', '艺术学_美术学', '艺术学_艺术学理论', '艺术学_设计学', '艺术学_音乐与舞蹈学']
|
|
|
# 计算分数列的最高分学科
|
|
|
score['HighScoreSubject'] = score[score_columns].apply(get_row_top, axis=1)
|
|
|
del_columns = ['军事学_军事后勤学与军事装备学', '军事学_军事思想及军事历史', '军事学_军事管理学', '军事学_军事训练学', '军事学_军队指挥学', '军事学_军队政治工作学', '军事学_战役学', '军事学_战术学', '军事学_战略学', '农学_作物学', '农学_兽医学', '农学_农业资源与环境', '农学_园艺学', '农学_林学', '农学_植物保护', '农学_水产', '农学_畜牧学', '农学_草学', '医学_中医学', '医学_中药学', '医学_中西医结合', '医学_临床医学', '医学_公共卫生与预防医学', '医学_医学技术', '医学_口腔医学', '医学_基础医学', '医学_护理学', '医学_特种医学', '医学_药学', '历史学_世界史', '历史学_中国史', '历史学_考古学', '哲学_哲学', '工学_交通运输工程', '工学_仪器科学与技术', '工学_信息与通信工程', '工学_光学工程', '工学_公安技术', '工学_兵器科学与技术', '工学_农业工程', '工学_冶金工程', '工学_力学', '工学_动力工程及工程热物理', '工学_化学工程与技术', '工学_土木工程', '工学_地质资源与地质工程', '工学_城乡规划学', '工学_安全科学与工程', '工学_建筑学', '工学_控制科学与工程', '工学_机械工程', '工学_材料科学与工程', '工学_林业工程', '工学_核科学与技术', '工学_水利工程', '工学_测绘科学与技术', '工学_环境科学与工程', '工学_生物医学工程', '工学_生物工程', '工学_电子科学与技术', '工学_电气工程', '工学_石油与天然气工程', '工学_矿业工程', '工学_纺织科学与工程', '工学_网络空间安全', '工学_航空宇航科学与技术', '工学_船舶与海洋工程', '工学_计算机科学与技术', '工学_软件工程', '工学_轻工技术与工程', '工学_风景园林学', '工学_食品科学与工程', '教育学_体育学', '教育学_心理学', '教育学_教育学', '文学_中国语言文学', '文学_外国语言文学', '文学_新闻传播学', '法学_公安学', '法学_政治学', '法学_民族学', '法学_法学', '法学_社会学', '法学_马克思主义理论', '理学_化学', '理学_地球物理学', '理学_地理学', '理学_地质学', '理学_大气科学', '理学_天文学', '理学_数学', '理学_海洋科学', '理学_物理学', '理学_生态学', '理学_生物学', '理学_科学技术史', '理学_系统科学', '理学_统计学', '管理学_公共管理', '管理学_农林经济管理', '管理学_图书情报与档案管理', '管理学_工商管理', '管理学_管理科学与工程', '经济学_应用经济学', '经济学_理论经济学', '艺术学_戏剧与影视学', '艺术学_美术学', '艺术学_艺术学理论', '艺术学_设计学', '艺术学_音乐与舞蹈学']
|
|
|
# score.drop(del_columns, inplace=True)
|
|
|
for c in del_columns:
|
|
|
del score[c]
|
|
|
# 处理基础数据
|
|
|
hebing_df = self.base_add_journal(score)
|
|
|
# hebing_df['LikeSubject'] = hebing_df['教育部一级学科']+hebing_df['HighScoreSubject']+hebing_df['HighScoreSubjectJournal']
|
|
|
hebing_df['LikeSubject'] = hebing_df.apply(func, axis=1)
|
|
|
# hebing_df.drop(['issn'], inplace=True)
|
|
|
hebing_df.to_csv(f'./文章到学科{get_today()}.csv', index=False)
|
|
|
|
|
|
def base_add_journal(self, base_table):
|
|
|
base_table = base_table[base_table['教育部一级学科'].notnull()]
|
|
|
new_df = pd.merge(left=base_table, right=self.journal_subject, how='left', left_on=['ISSN'], right_on=['issn'])
|
|
|
return new_df[new_df['HighScoreSubjectJournal'].notnull()]
|
|
|
# return new_df
|
|
|
|
|
|
def execute(self):
|
|
|
self.periodical_top('../SubjectData/getScore:step1.csv')
|
|
|
self.tc_huang_subject('D:/Work/教育部学科数据2021年6月2日_processed.csv')
|
|
|
self.join_journal_subject()
|
|
|
self.score_model(f'./merge_table_{get_today()}.csv')
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
# merge_table('Z:/文章摘要推荐池/学科评分/toppaper核心数据/', './')
|
|
|
a2s = Article2Subject()
|
|
|
a2s.execute()
|