代码上传到git
parent
d75d888b43
commit
f245a2c520
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/6/21 8:50
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : __init__.py
|
@ -0,0 +1,56 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/6/21 8:53
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : utils.py
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def get_today(fmt='%Y%m%d'):
|
||||||
|
return datetime.date.today().strftime(fmt)
|
||||||
|
|
||||||
|
|
||||||
|
def get_row_top(row: pd.Series, num: int = 3):
|
||||||
|
# print(row)
|
||||||
|
top_sub_list = row.sort_values(ascending=False)[:num].index
|
||||||
|
top_sub = []
|
||||||
|
for sub in top_sub_list:
|
||||||
|
top_sub.append(sub.split('_')[-1])
|
||||||
|
return ';'.join(top_sub)
|
||||||
|
|
||||||
|
|
||||||
|
def get_row_top_join_sub(row: pd.Series, num: int = 3, split: float = 0.9, split_on: bool = True):
|
||||||
|
if split_on:
|
||||||
|
new_row = row[row.values >= split]
|
||||||
|
row_len = len(new_row)
|
||||||
|
if row_len == 0:
|
||||||
|
num = 1
|
||||||
|
elif row_len < num:
|
||||||
|
num = row_len
|
||||||
|
else:
|
||||||
|
num = num
|
||||||
|
top_sub_list = row.sort_values(ascending=False)[:num].to_dict()
|
||||||
|
top_sub = []
|
||||||
|
for sub, score in top_sub_list.items():
|
||||||
|
top_sub.append(f'{sub},{score}')
|
||||||
|
return '; '.join(top_sub)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_table(filepath, output_path: str = None):
|
||||||
|
"""
|
||||||
|
filepath: 输入文件路径
|
||||||
|
output_path: 如果不为空,则文件保存到此目录
|
||||||
|
"""
|
||||||
|
if filepath[-1] != '/':
|
||||||
|
filepath += '/'
|
||||||
|
file_list = os.listdir(filepath)
|
||||||
|
return_df = pd.DataFrame()
|
||||||
|
for filename in file_list:
|
||||||
|
temp_df = pd.read_csv(filepath+filename)
|
||||||
|
return_df = pd.concat([return_df, temp_df])
|
||||||
|
if output_path:
|
||||||
|
day = get_today()
|
||||||
|
return_df.to_csv(output_path+f'/merge_table_{day}.csv', index=False)
|
||||||
|
return return_df
|
@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/3/11 13:48
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : BCR_20240311.py
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pandas as pd
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
ADD_SOURCE = True
|
||||||
|
BASE_PATH = 'Y:\\BCR\\202407'
|
||||||
|
|
||||||
|
|
||||||
|
def load_all_small_file(path: str):
|
||||||
|
"""加载所有的小文件"""
|
||||||
|
dirs = os.listdir(path)
|
||||||
|
for dir_ in dirs:
|
||||||
|
path1 = os.path.join(path, dir_)
|
||||||
|
files = os.listdir(path1)
|
||||||
|
for file in files:
|
||||||
|
full_file_path = os.path.join(path1, file)
|
||||||
|
yield full_file_path
|
||||||
|
|
||||||
|
|
||||||
|
def step0():
|
||||||
|
gg = load_all_small_file(os.path.join(BASE_PATH, "API分工原始采集记录"))
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file_path in gg:
|
||||||
|
logger.debug('当前处理 %s' % file_path)
|
||||||
|
table = pd.read_csv(file_path, on_bad_lines='skip', low_memory=False, index_col=False)
|
||||||
|
if ADD_SOURCE:
|
||||||
|
simple_name = os.path.basename(file_path)
|
||||||
|
simple_name = simple_name
|
||||||
|
table['SOURCE'] = file_path
|
||||||
|
# columns = table.columns.values.tolist()
|
||||||
|
logger.debug('表头: %s' % table.columns.values.tolist())
|
||||||
|
big_table = pd.concat([big_table, table])
|
||||||
|
start = 0
|
||||||
|
split = 1000000
|
||||||
|
row, col = big_table.shape
|
||||||
|
file_idx = 1
|
||||||
|
for x in range(start, row, split):
|
||||||
|
table = big_table[x: x + split]
|
||||||
|
save_path = os.path.join(BASE_PATH, "After")
|
||||||
|
table.to_csv(os.path.join(save_path, '%s.txt' % file_idx), sep='\t', index=False)
|
||||||
|
table.to_excel(os.path.join(save_path, '%s.xlsx' % file_idx), index=False)
|
||||||
|
file_idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
step0()
|
||||||
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/4/26 14:15
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : BCR_20240426.py
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pandas as pd
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
ROOT_PATH = 'Y:\\zhaoxiangpeng\\BCR202404'
|
||||||
|
|
||||||
|
|
||||||
|
def func1():
|
||||||
|
"""
|
||||||
|
用22年的BCR填充24年错误的数据
|
||||||
|
"""
|
||||||
|
bcr22_path = 'Y:\\zhaoxiangpeng\\BCR2022'
|
||||||
|
bcr22_files = ['eid去重保留最大grandTotal-1.xlsx', 'eid去重保留最大grandTotal-2.xlsx',
|
||||||
|
'eid去重保留最大grandTotal-3.xlsx']
|
||||||
|
# 分片的旧文件合并
|
||||||
|
bcr22_table = pd.read_csv(os.path.join(bcr22_path, 'eid去重保留最大grandTotal.csv'))
|
||||||
|
bcr22_table = bcr22_table[['EID', '2021']]
|
||||||
|
bcr22_table.drop_duplicates(subset=['EID'], inplace=True)
|
||||||
|
"""
|
||||||
|
for bcr22_file in bcr22_files:
|
||||||
|
temp_file = pd.read_excel(os.path.join(bcr22_path, bcr22_file), engine='openpyxl', sheet_name=0)
|
||||||
|
temp_file = temp_file[['EID', '2021']]
|
||||||
|
bcr22_table = pd.concat([bcr22_table, temp_file])
|
||||||
|
"""
|
||||||
|
# 24年补充的数据
|
||||||
|
bcr24_extend = pd.read_csv(os.path.join(ROOT_PATH, 'Grand Total为空-20240410 11时06分下载.csv'), index_col=False)
|
||||||
|
table_head = bcr24_extend.columns.values.tolist()
|
||||||
|
new_table = pd.merge(bcr24_extend, bcr22_table, how='left', on=['EID'])
|
||||||
|
new_table = new_table[['作者', '作者 ID', '标题', '年份', '来源出版物名称', '卷', '期', '论文编号', '起始页码',
|
||||||
|
'结束页码', '页码计数', '施引文献', 'DOI', '链接', '归属机构', '带归属机构的作者',
|
||||||
|
'通讯地址',
|
||||||
|
'编者', '出版商', 'ISSN', 'ISBN', 'CODEN', 'PubMed ID', '原始文献语言',
|
||||||
|
'来源出版物名称缩写', '文献类型', '出版阶段', '访问类型', '来源出版物', 'EID', 'Sort Year',
|
||||||
|
'2021', '2022', '2023', '2024', 'Grand Total']]
|
||||||
|
print(new_table)
|
||||||
|
new_table.to_csv(os.path.join(ROOT_PATH, '补充数据填充2021年total.txt'), sep='\t', index=False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
func1()
|
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/12/1 14:20
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : __init__.py.py
|
@ -0,0 +1,71 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/12/1 16:48
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : api记录匹配.py
|
||||||
|
|
||||||
|
import data_process_tool
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
|
||||||
|
def step1():
|
||||||
|
# 合并小文件
|
||||||
|
data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\API采集-BCR2022相同记录\API采集', on_columns=['EID'], encoding='GB2312', encoding_errors='ignore', on_bad_lines='skip')
|
||||||
|
data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\2', on_columns=['EID'], encoding_errors='ignore', on_bad_lines='skip')
|
||||||
|
|
||||||
|
|
||||||
|
def step2():
|
||||||
|
record1 = data_process_tool.read_data(root_path+'2023记录.csv')
|
||||||
|
record1.drop_duplicates(inplace=True)
|
||||||
|
record1.rename(columns={'EID': '原始记录'}, inplace=True)
|
||||||
|
record2 = data_process_tool.read_data(root_path+'API采集.csv')
|
||||||
|
record2.drop_duplicates(inplace=True)
|
||||||
|
record3 = pd.merge(record2, record1, how='left', left_on=['EID'], right_on=['原始记录'])
|
||||||
|
print(record3)
|
||||||
|
error_record = record3[record3['EID'].isna()]
|
||||||
|
error_record.to_csv(root_path+'未匹配到记录2-EID.csv', index=False)
|
||||||
|
# error_record.to_excel(root_path+'未匹配到记录-EID.xlsx', index=False)
|
||||||
|
|
||||||
|
|
||||||
|
def step3():
|
||||||
|
record1 = data_process_tool.read_data(root_path + '2023原始记录.csv')
|
||||||
|
record1.drop_duplicates(subset=['EID'], inplace=True)
|
||||||
|
# 对每个表的列名做标记
|
||||||
|
record1_rename = {}
|
||||||
|
for r1_name in record1.columns:
|
||||||
|
record1_rename[r1_name] = r1_name + '(2023记录)'
|
||||||
|
record1.rename(columns=record1_rename, inplace=True)
|
||||||
|
|
||||||
|
record2 = data_process_tool.read_data(root_path + 'API下载记录.csv')
|
||||||
|
record2.drop_duplicates(subset=['EID'], inplace=True)
|
||||||
|
record2_rename = {}
|
||||||
|
for r2_name in record2.columns:
|
||||||
|
record2_rename[r2_name] = r2_name + '(API记录)'
|
||||||
|
record2.rename(columns=record2_rename, inplace=True)
|
||||||
|
|
||||||
|
# 左连接找出右表缺失字段
|
||||||
|
record3 = pd.merge(record2, record1, how='left', left_on=['EID(API记录)'], right_on=['EID(2023记录)'])
|
||||||
|
print(record3)
|
||||||
|
error_record = record3[record3['EID(2023记录)'].isna()]
|
||||||
|
error_record.to_excel(root_path + 'API下载记录有2023原始记录无.xlsx', index=False)
|
||||||
|
|
||||||
|
record4 = pd.merge(record1, record2, how='left', left_on=['EID(2023记录)'], right_on=['EID(API记录)'])
|
||||||
|
print(record4)
|
||||||
|
error_record2 = record4[record4['EID(API记录)'].isna()]
|
||||||
|
error_record2.to_excel(root_path + '2023原始记录有API下载记录无.xlsx', index=False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
root_path = 'F:/工作数据存储2022/20221201_bcrAPI对比/合并结果/'
|
||||||
|
# step2()
|
||||||
|
data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\API下载记录\API采集', to_type='csv',
|
||||||
|
encoding='GB2312', encoding_errors='ignore', on_bad_lines='skip')
|
||||||
|
# data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\2023原始记录', encoding_errors='ignore',
|
||||||
|
# on_bad_lines='skip')
|
||||||
|
# data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\2023原始记录\2022-11-21-下载记录', encoding_errors='ignore',
|
||||||
|
# on_bad_lines='skip')
|
||||||
|
# data_process_tool.merge_table(fr'F:\工作数据存储2022\20221201_bcrAPI对比\API下载记录\API失败记录重新下载采集',
|
||||||
|
# to_type='csv',
|
||||||
|
# encoding='GB2312', encoding_errors='ignore',
|
||||||
|
# on_bad_lines='skip')
|
||||||
|
# step3()
|
||||||
|
|
@ -0,0 +1,8 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/12/26 8:57
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : config.py
|
||||||
|
|
||||||
|
ROOT_PATH = r'Y:\BCR\BCR202412' # 根路径,输入输出的路径
|
||||||
|
KEEP_COLUMNS = ['作者', '作者 ID', '文献标题', '年份', '来源出版物名称', '施引文献', 'DOI', '链接', '归属机构', '带归属机构的作者', '通讯地址', '编者', '出版商', 'ISSN', 'ISBN', 'PubMed ID', '原始文献语言', '来源出版物名称缩写', '文献类型', 'EID', 'Sort Year', '2022', '2023', '2024', 'Grand Total'] # 要保存的列
|
||||||
|
REDUCE_COLUMNS = ['2022', '2023', '2024', 'Grand Total']
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,35 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/7/25 15:33
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : test.py
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
table = pd.DataFrame([
|
||||||
|
{"A": 1, "B": 2, "C": 3, "D": 2, "T": "X"},
|
||||||
|
{"A": 2, "B": 3, "C": 4, "D": 1, "T": "Y"},
|
||||||
|
{"A": 3, "B": 4, "C": 1, "D": 2, "T": "X"},
|
||||||
|
{"A": 4, "B": 1, "C": 2, "D": 3, "T": "Z"},
|
||||||
|
])
|
||||||
|
print(table)
|
||||||
|
print('-0'*50)
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
group_by = table.groupby(by=['T'])
|
||||||
|
for gn, group in group_by:
|
||||||
|
print('gn:', gn)
|
||||||
|
print(group)
|
||||||
|
a = group[["A", "B", "C", "D"]].sum()
|
||||||
|
print(a)
|
||||||
|
f = group[group['D'] == 2]
|
||||||
|
|
||||||
|
if f.empty:
|
||||||
|
first = group.head(1)
|
||||||
|
else:
|
||||||
|
first = f.head(1)
|
||||||
|
first.loc[:, ("A", "B", "C", "D")] = a
|
||||||
|
print(first)
|
||||||
|
big_table = pd.concat([big_table, first])
|
||||||
|
|
||||||
|
print('-0-' * 50)
|
||||||
|
|
||||||
|
print(big_table)
|
@ -0,0 +1,50 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/2/4 10:55
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : utils.py
|
||||||
|
|
||||||
|
import os
|
||||||
|
from typing import List, Union
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
|
||||||
|
def read_file(path_or_files: Union[List[str], str], path: bool = True):
|
||||||
|
if path and isinstance(path_or_files, str):
|
||||||
|
path_or_files = [os.path.join(path_or_files, file) for file in os.listdir(path_or_files)]
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file in path_or_files:
|
||||||
|
table = pd.read_csv(file, sep='\t', low_memory=False)
|
||||||
|
big_table = pd.concat([big_table, table])
|
||||||
|
return big_table
|
||||||
|
|
||||||
|
|
||||||
|
def export_small_file(big_table, export_path: str = None, split: int = int(8e5)):
|
||||||
|
"""
|
||||||
|
大的表导出为小的表
|
||||||
|
"""
|
||||||
|
row, col = big_table.shape
|
||||||
|
file_idx = 1
|
||||||
|
for x in range(0, row, split):
|
||||||
|
table = big_table[x: x + split]
|
||||||
|
table.to_excel(os.path.join(export_path, '%s.xlsx' % file_idx), index=False)
|
||||||
|
file_idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
def str2float(string, replace=0):
|
||||||
|
try:
|
||||||
|
val = float(string)
|
||||||
|
except ValueError:
|
||||||
|
val = replace
|
||||||
|
except TypeError:
|
||||||
|
val = replace
|
||||||
|
return val
|
||||||
|
|
||||||
|
|
||||||
|
def str2int(string, replace=0):
|
||||||
|
try:
|
||||||
|
val = int(string)
|
||||||
|
except ValueError:
|
||||||
|
val = replace
|
||||||
|
except TypeError:
|
||||||
|
val = replace
|
||||||
|
return val
|
@ -0,0 +1,224 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/2/1 17:10
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : 合并小文件.py
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import warnings
|
||||||
|
import chardet
|
||||||
|
import pandas as pd
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
|
||||||
|
def read_standard(filename):
|
||||||
|
table = pd.read_table(filename, encoding_errors='ignore', on_bad_lines='skip', low_memory=False)
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
|
def merge_files(path):
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
files = os.listdir(path)
|
||||||
|
for file in files:
|
||||||
|
file_path = os.path.join(path, file)
|
||||||
|
table = read_standard(file_path)
|
||||||
|
big_table = pd.concat([big_table, table])
|
||||||
|
|
||||||
|
big_table.to_csv(os.path.join("Y:\\zhaoxiangpeng\\2024BCR", '2024BCR总表.csv'), sep='\t', index=False)
|
||||||
|
|
||||||
|
|
||||||
|
def read_file(file_path, encoding: str = 'gbk', error: bool = False):
|
||||||
|
if not error:
|
||||||
|
f = open(file_path, encoding=encoding)
|
||||||
|
else:
|
||||||
|
warnings.warn('%s 编码异常,启用检查' % file_path)
|
||||||
|
check = open(file_path, 'rb')
|
||||||
|
data = check.read()
|
||||||
|
info = chardet.detect(data)
|
||||||
|
encoding = info['encoding']
|
||||||
|
kwargs = {}
|
||||||
|
kwargs.update(encoding=encoding)
|
||||||
|
warnings.warn('%s 尝试使用 "%s" 解码' % (file_path, encoding))
|
||||||
|
f = open(file_path, **kwargs)
|
||||||
|
code = encoding
|
||||||
|
return f, encoding
|
||||||
|
|
||||||
|
|
||||||
|
def merge_files_by_row(path):
|
||||||
|
"""
|
||||||
|
通过行读取的方式把小文件处理为标准的单个100,000条的文件
|
||||||
|
"""
|
||||||
|
ERROR_FILE = ['ALL-CM.CSV', 'ALL-HDX.CSV', '失败记录第二次重采-20231228 15时53分下载.csv']
|
||||||
|
data_column_count = 35
|
||||||
|
files = os.listdir(path)
|
||||||
|
decode_table = dict()
|
||||||
|
split_str = '\t'
|
||||||
|
documents = []
|
||||||
|
document_count = 0
|
||||||
|
file_seq = 1
|
||||||
|
for file in files:
|
||||||
|
|
||||||
|
if file in ERROR_FILE:
|
||||||
|
split_str = ','
|
||||||
|
logger.warning("文件可能被修改过, 跳过 %s" % file)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
split_str = '\t'
|
||||||
|
file_path = os.path.join(path, file)
|
||||||
|
logger.info('处理 %s' % file_path)
|
||||||
|
f, code = read_file(file_path)
|
||||||
|
try:
|
||||||
|
h = f.readline()
|
||||||
|
head = h.strip('\n').split(split_str)
|
||||||
|
logger.debug("表头长度: %s, %s" % (len(head), head))
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
f, code = read_file(file_path, error=True)
|
||||||
|
h = f.readline()
|
||||||
|
head = h.strip('\n').split(split_str)
|
||||||
|
logger.debug("表头长度: %s, %s" % (len(head), head))
|
||||||
|
if '' in head:
|
||||||
|
data_column_count = head.index('')
|
||||||
|
if len(head) > data_column_count:
|
||||||
|
head = head[:data_column_count]
|
||||||
|
# print(head)
|
||||||
|
while True:
|
||||||
|
# line = None
|
||||||
|
try:
|
||||||
|
line = f.readline()
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
logger.info('错误行: %s' % line)
|
||||||
|
continue
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
data = line.strip('\n').split(split_str)
|
||||||
|
documents.append(
|
||||||
|
dict(zip(head, data[:data_column_count]))
|
||||||
|
)
|
||||||
|
document_count += 1
|
||||||
|
|
||||||
|
if document_count >= 1e5:
|
||||||
|
shard = os.path.join("Y:\\zhaoxiangpeng\\2024BCR\\After", '%s.csv' % file_seq)
|
||||||
|
logger.info("数据条数到达 %s 保存一个文件: %s" % (document_count, shard))
|
||||||
|
big_table = pd.DataFrame(documents)
|
||||||
|
logger.info("配置 : %s %s" % big_table.shape)
|
||||||
|
big_table.to_csv(shard, sep='\t', index=False)
|
||||||
|
file_seq += 1
|
||||||
|
documents = []
|
||||||
|
document_count = 0
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
shard = os.path.join("Y:\\zhaoxiangpeng\\2024BCR\\After", '%s.csv' % file_seq)
|
||||||
|
logger.info("数据条数到达 %s 保存最后一片: %s" % (1e5, shard))
|
||||||
|
big_table = pd.DataFrame(documents)
|
||||||
|
big_table.to_csv(shard, sep='\t', index=False)
|
||||||
|
|
||||||
|
logger.info("文件编码表: %s" % decode_table)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_error_file(path, files: list):
|
||||||
|
"""合并小的文件"""
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file in files:
|
||||||
|
file_full_path = os.path.join(path, file)
|
||||||
|
small_table = pd.read_csv(file_full_path, low_memory=False, encoding_errors='ignore', on_bad_lines='skip')
|
||||||
|
print(small_table.shape)
|
||||||
|
big_table = pd.concat([big_table, small_table])
|
||||||
|
start = 0
|
||||||
|
split = 100000
|
||||||
|
row, col = big_table.shape
|
||||||
|
file_idx = 101
|
||||||
|
for x in range(start, row, split):
|
||||||
|
table = big_table[x: x + split]
|
||||||
|
table.to_csv(os.path.join('Y:\\zhaoxiangpeng\\2024BCR\\After', '%s.csv' % file_idx), index=False, sep='\t')
|
||||||
|
file_idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
def merge_standard_file(path):
|
||||||
|
files = os.listdir(path)
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file in files:
|
||||||
|
file_full_path = os.path.join(path, file)
|
||||||
|
small_table = pd.read_csv(file_full_path, sep='\t', low_memory=False)
|
||||||
|
big_table = pd.concat([big_table, small_table])
|
||||||
|
row, col = big_table.shape
|
||||||
|
split = 1000000
|
||||||
|
file_idx = 1
|
||||||
|
for x in range(0, row, split):
|
||||||
|
table = big_table[x: x + split]
|
||||||
|
table.to_csv(os.path.join("Y:\\zhaoxiangpeng\\2024BCR\\MergeFile", '%s.csv' % file_idx), index=False, sep='\t')
|
||||||
|
file_idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
def merge_small_file(path):
|
||||||
|
files = os.listdir(path)
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file in files:
|
||||||
|
file_full_path = os.path.join(path, file)
|
||||||
|
small_table = pd.read_csv(file_full_path, index_col=False, low_memory=False, encoding_errors='ignore', on_bad_lines='skip')
|
||||||
|
big_table = pd.concat([big_table, small_table])
|
||||||
|
row, col = big_table.shape
|
||||||
|
split = 800000
|
||||||
|
file_idx = 1
|
||||||
|
for x in range(0, row, split):
|
||||||
|
table = big_table[x: x + split]
|
||||||
|
table.to_excel(os.path.join("Y:\BCR\BCR202412\BCR2024书目补采API", '%s.xlsx' % file_idx), index=False)
|
||||||
|
file_idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
def find_eid_by_regex(text):
|
||||||
|
res = re.search(r'2-s2\.0-\d+', text)
|
||||||
|
if res:
|
||||||
|
return res.group(0)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def batch_match(path):
|
||||||
|
count = 0
|
||||||
|
line_count = 0
|
||||||
|
eid_collect = []
|
||||||
|
writer = open('Y:\\zhaoxiangpeng\\BCR\\2025BCR\\eid.csv', 'a+', encoding='utf-8')
|
||||||
|
writer.write('EID'+'\n')
|
||||||
|
file_list = os.listdir(path)
|
||||||
|
for fname in file_list:
|
||||||
|
file = os.path.join(path, fname)
|
||||||
|
with open(file, encoding='utf-8') as f:
|
||||||
|
while line := f.readline():
|
||||||
|
line_count += 1
|
||||||
|
eid = find_eid_by_regex(line)
|
||||||
|
if not eid:
|
||||||
|
print(line)
|
||||||
|
else:
|
||||||
|
count += 1
|
||||||
|
writer.write(eid + '\n')
|
||||||
|
writer.close()
|
||||||
|
print('总行数:%s\n匹配到:%s' % (line_count, count))
|
||||||
|
|
||||||
|
|
||||||
|
def func11():
|
||||||
|
path = 'Y:\\zhaoxiangpeng\\BCR\\2025BCR'
|
||||||
|
path2 = os.path.join(path, 'MergeFile')
|
||||||
|
files = os.listdir(path2)
|
||||||
|
big_table = pd.DataFrame()
|
||||||
|
for file in files:
|
||||||
|
file_full_path = os.path.join(path2, file)
|
||||||
|
small_table = pd.read_excel(file_full_path, engine='openpyxl', sheet_name=0)
|
||||||
|
small_table = small_table[['EID']]
|
||||||
|
print(small_table.shape)
|
||||||
|
big_table = pd.concat([big_table, small_table])
|
||||||
|
big_table.drop_duplicates(subset=['EID'], inplace=True)
|
||||||
|
t2 = pd.read_csv(os.path.join(path, 'eid.csv'))
|
||||||
|
t2.drop_duplicates(subset=['EID'], inplace=True)
|
||||||
|
t2.rename(columns={'EID': "EID2"}, inplace=True)
|
||||||
|
t0 = pd.merge(t2, big_table, how='left', left_on=['EID2'], right_on=['EID'])
|
||||||
|
print(t0)
|
||||||
|
t0[t0['EID'].isna()]['EID2'].to_csv(os.path.join(path, 'eid2.csv'), index=False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# merge_files_by_row("Y:\\zhaoxiangpeng\\2024BCR\\API采集数据")
|
||||||
|
# merge_error_file("Y:\\zhaoxiangpeng\\2024BCR\\API采集数据",
|
||||||
|
# files=['ALL-CM.CSV', 'ALL-HDX.CSV', '失败记录第二次重采-20231228 15时53分下载.csv'])
|
||||||
|
# merge_standard_file('Y:\\zhaoxiangpeng\\2024BCR\\After')
|
||||||
|
merge_small_file(r'Y:\BCR\BCR202412\BCR2024书目补采API')
|
||||||
|
# batch_match('Y:\\zhaoxiangpeng\\BCR\\2025BCR\\API采集')
|
||||||
|
# func11()
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2025/1/8 14:28
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : __init__.py.py
|
@ -0,0 +1,17 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/8/5 8:58
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : __init__.py
|
||||||
|
|
||||||
|
from .file_read import read_data
|
||||||
|
from .file_write import write_data
|
||||||
|
from .merge_table import merge_table, get_dirs_file
|
||||||
|
from .change_head import rename_head
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'read_data',
|
||||||
|
'write_data',
|
||||||
|
'merge_table',
|
||||||
|
'get_dirs_file',
|
||||||
|
'rename_head'
|
||||||
|
]
|
@ -0,0 +1,16 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2023/5/24 15:23
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : change_head.py
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
|
def rename_head(table_or_head: Union[pd.DataFrame, list], postfix: str = '-other') -> dict:
|
||||||
|
if isinstance(table_or_head, pd.DataFrame):
|
||||||
|
table_or_head = table_or_head.columns.values.tolist()
|
||||||
|
new_head = {}
|
||||||
|
for head in table_or_head:
|
||||||
|
new_head[head] = str(head) + postfix
|
||||||
|
return new_head
|
@ -0,0 +1,68 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/9/20 9:05
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : condition_filter.py
|
||||||
|
|
||||||
|
import data_process_tool
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
|
||||||
|
def get_filter(text):
|
||||||
|
text_list = text.split('; ')
|
||||||
|
for t in text_list:
|
||||||
|
t.index()
|
||||||
|
|
||||||
|
|
||||||
|
def method1(table):
|
||||||
|
table_name = None
|
||||||
|
if isinstance(table, str):
|
||||||
|
table_name = str(table)
|
||||||
|
table = data_process_tool.read_data(table)
|
||||||
|
# 只保留唯一id列 UT, 发文地址列 C1
|
||||||
|
# 讲地址列以';'分割, 筛选符合条件的行, 获取符合条件的id
|
||||||
|
# 原始表匹配符合条件的行, 保存匹配出结果的行
|
||||||
|
new_table = table[['UT', 'C1']]
|
||||||
|
new_table.rename(columns={'UT': 'UT-BP'}, inplace=True)
|
||||||
|
locations = table['C1'].str.split('; ', expand=True)
|
||||||
|
locations = locations.stack()
|
||||||
|
locations = locations.reset_index(level=1, drop=True)
|
||||||
|
locations.name = 'LOCATION'
|
||||||
|
new_table = new_table.drop(['C1'], axis=1).join(locations)
|
||||||
|
new_table['LOCATION'] = new_table['LOCATION'].str.lower()
|
||||||
|
print(new_table)
|
||||||
|
# univ petr|petr univ|unit petr|univj petr 条件由wos检索策略来的
|
||||||
|
# 筛选华东
|
||||||
|
hd: pd.DataFrame = new_table[(new_table['LOCATION'].str.contains('univ petr|petr univ|unit petr|univj petr')) & (new_table['LOCATION'].str.contains('shandong|qingdao|dongying'))]
|
||||||
|
del hd['LOCATION']
|
||||||
|
hd.drop_duplicates(subset=['UT-BP'], inplace=True)
|
||||||
|
hd = pd.merge(table, hd, 'left', left_on=['UT'], right_on=['UT-BP'])
|
||||||
|
hd = hd[hd['UT-BP'].notnull()]
|
||||||
|
del hd['UT-BP']
|
||||||
|
hd.to_excel(table_name.replace('.xlsx', '-华东.xlsx'), index=False)
|
||||||
|
# 筛选北京
|
||||||
|
bj: pd.DataFrame = new_table[(new_table['LOCATION'].str.contains('univ petr|petr univ|unit petr|univj petr')) & (new_table['LOCATION'].str.contains('beijing'))]
|
||||||
|
del bj['LOCATION']
|
||||||
|
bj.drop_duplicates(subset=['UT-BP'], inplace=True)
|
||||||
|
bj = pd.merge(table, bj, 'left', left_on=['UT'], right_on=['UT-BP'])
|
||||||
|
bj = bj[bj['UT-BP'].notnull()]
|
||||||
|
del bj['UT-BP']
|
||||||
|
bj.to_excel(table_name.replace('.xlsx', '-北京.xlsx'), index=False)
|
||||||
|
|
||||||
|
|
||||||
|
def condition_filter(table, filters: list = None):
|
||||||
|
table_name = None
|
||||||
|
if isinstance(table, str):
|
||||||
|
table_name = str(table)
|
||||||
|
table = data_process_tool.read_data(table)
|
||||||
|
table['C1_BP'] = table['C1'].str.lower()
|
||||||
|
hd = table[(table['C1_BP'].str.contains('shandong')) | (table['C1_BP'].str.contains('qingdao')) | (table['C1_BP'].str.contains('dongying'))]
|
||||||
|
del hd['C1_BP']
|
||||||
|
hd.to_excel(table_name.replace('.xlsx', '华东.xlsx'), index=False)
|
||||||
|
bj = table[(table['C1_BP'].str.contains('beijing'))]
|
||||||
|
del bj['C1_BP']
|
||||||
|
bj.to_excel(table_name.replace('.xlsx', '北京.xlsx'), index=False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# condition_filter(r'F:\工作数据存储2022\20220919_中国石油大学wos\2020.xlsx')
|
||||||
|
method1(r'Z:\客户数据存储\WOS\中国石油大学\OG=(China University of Petroleum) AND (PY==(2022))\OG=(China University of Petroleum) AND (PY==(2022)).xlsx')
|
@ -0,0 +1,14 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/9/21 15:12
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : example.py
|
||||||
|
|
||||||
|
import re
|
||||||
|
import pandas as pd
|
||||||
|
from data_process_tool import read_data
|
||||||
|
|
||||||
|
|
||||||
|
def format_conversion(file_name: str):
|
||||||
|
file_df = read_data(file_name)
|
||||||
|
# file_df['wss'].str
|
||||||
|
re.sub(r'<[A-Za-z]+>.*?</[A-Za-z]+>', '', )
|
@ -0,0 +1,43 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/8/5 8:58
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : file_read.py
|
||||||
|
|
||||||
|
import chardet
|
||||||
|
import pandas as pd
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'read_data'
|
||||||
|
]
|
||||||
|
|
||||||
|
file_type_operation = {
|
||||||
|
'csv': pd.read_csv,
|
||||||
|
'xlsx': pd.read_excel,
|
||||||
|
'xls': pd.read_excel,
|
||||||
|
'txt': pd.read_table,
|
||||||
|
'xls2': pd.read_html
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def read_data(file: str, **kwargs) -> pd.DataFrame:
|
||||||
|
if '.' in file:
|
||||||
|
file_type = file.rsplit('.')[-1]
|
||||||
|
else:
|
||||||
|
file_type = 'txt'
|
||||||
|
file_type = file_type.lower()
|
||||||
|
try:
|
||||||
|
# if file_type == 'txt':
|
||||||
|
# kwargs.update(sep='\t')
|
||||||
|
temp: pd.DataFrame = file_type_operation[file_type](file, **kwargs)
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
warnings.warn('%s 编码异常,启用检查' % file)
|
||||||
|
with open(file, 'rb') as f:
|
||||||
|
data = f.read()
|
||||||
|
info = chardet.detect(data)
|
||||||
|
encoding = info['encoding']
|
||||||
|
kwargs.update(encoding=encoding)
|
||||||
|
warnings.warn('%s 尝试使用 "%s" 解码' % (file, encoding))
|
||||||
|
temp = read_data(file, **kwargs)
|
||||||
|
|
||||||
|
return temp
|
@ -0,0 +1,23 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/11/1 14:26
|
||||||
|
# @Author : ZAOXG
|
||||||
|
# @File : file_write.py
|
||||||
|
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
'write_data'
|
||||||
|
]
|
||||||
|
|
||||||
|
file_type_operation = {
|
||||||
|
'csv': 'to_csv',
|
||||||
|
'xlsx': 'to_excel',
|
||||||
|
'xls': 'to_excel'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def write_data(data, file, index=True, **kwargs) -> pd.DataFrame:
|
||||||
|
file_type = file.rsplit('.')[-1]
|
||||||
|
temp: pd.DataFrame = getattr(data, file_type_operation[file_type])(file, index=index, **kwargs)
|
||||||
|
return temp
|
@ -0,0 +1,48 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2024/3/19 15:18
|
||||||
|
# @Author : zhaoxiangpeng
|
||||||
|
# @File : get_lose_year.py
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
ROOT_PATH = "Y:\wos-metadata\issn-data"
|
||||||
|
|
||||||
|
collection = dict()
|
||||||
|
has_year_collection = set()
|
||||||
|
|
||||||
|
# 获取主路径下的所有ISSN文件夹
|
||||||
|
master_dirs = os.listdir(ROOT_PATH)
|
||||||
|
for master_dir in master_dirs:
|
||||||
|
logger.debug('检测路径: %s' % master_dir)
|
||||||
|
# 一个ISSN的主文件下理应是以数字命名的文件或以IS=(xx)命名的文件夹
|
||||||
|
issn_file_path = os.path.join(ROOT_PATH, master_dir)
|
||||||
|
child_dirs = os.listdir(issn_file_path)
|
||||||
|
single_year_list = []
|
||||||
|
for child_dir_name in child_dirs:
|
||||||
|
# 判断是否是文件夹
|
||||||
|
child_dir = os.path.join(issn_file_path, child_dir_name)
|
||||||
|
if not os.path.isdir(child_dir):
|
||||||
|
# logger.debug('检测 %s 不是一个文件夹, 跳过' % child_dir_name)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
# 如果是文件夹,获取文件夹中的年份信息
|
||||||
|
results = re.findall(r'={1,2}\((\d{4})\)', child_dir_name)
|
||||||
|
if results:
|
||||||
|
single_year_list.append(int(results[0]))
|
||||||
|
has_year_collection.add(master_dir)
|
||||||
|
# 把单个年份的列表排序取最大最小值,计算应该有的年份数量,进行对比
|
||||||
|
if not single_year_list:
|
||||||
|
continue
|
||||||
|
single_year_list = sorted(single_year_list)
|
||||||
|
must_year_list = list(range(single_year_list[0], (single_year_list[-1]+1)))
|
||||||
|
if len(single_year_list) < len(must_year_list):
|
||||||
|
lose_year_list = set(must_year_list) - set(single_year_list)
|
||||||
|
lose_year_list = list(lose_year_list)
|
||||||
|
logger.warning("%s 有年份缺失, 缺失的年份有: %s" % (master_dir, list(lose_year_list)))
|
||||||
|
collection[master_dir] = lose_year_list
|
||||||
|
|
||||||
|
logger.warning('有年份的文件夹: %s' % has_year_collection)
|
||||||
|
logger.warning('缺失年份的文件夹: %s' % collection)
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/5/31 14:38
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : __init__.py
|
@ -0,0 +1,48 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/6/2 14:02
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : getkeys.py
|
||||||
|
|
||||||
|
from ReSpider.db.redisdb import RedisDB
|
||||||
|
import pandas as pd
|
||||||
|
import json
|
||||||
|
from typing import List, Dict
|
||||||
|
|
||||||
|
|
||||||
|
class GetCount:
|
||||||
|
def __init__(self, db: int = 1, write_path: str = None):
|
||||||
|
self.client = RedisDB(db=db)
|
||||||
|
self.write_path = write_path or 'E:/inspec/'
|
||||||
|
|
||||||
|
def get_keys(self) -> List[bytes]:
|
||||||
|
return self.client.keys(pattern='*-*')
|
||||||
|
|
||||||
|
def get_kv(self, key) -> dict:
|
||||||
|
return self.client.hgetall(key)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def format(records: dict, key: str) -> list:
|
||||||
|
temp = []
|
||||||
|
for k, v in records.items():
|
||||||
|
record: dict = {'doi': k.decode('utf-8'), 'count': int(v.decode('utf-8')), 'issn': key}
|
||||||
|
temp.append(record)
|
||||||
|
return temp
|
||||||
|
|
||||||
|
def to_csv(self, data: list = None, file_name: str = None):
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
df.to_csv(self.write_path+file_name+'.csv', index=False)
|
||||||
|
|
||||||
|
def aa(self):
|
||||||
|
redis_keys: List[bytes] = self.get_keys()
|
||||||
|
for redis_key in redis_keys:
|
||||||
|
key_string: str = redis_key.decode('utf-8')
|
||||||
|
kvs: dict = self.get_kv(key_string)
|
||||||
|
print('*'*5 + key_string + '*'*5)
|
||||||
|
key_records = self.format(kvs, key_string)
|
||||||
|
self.to_csv(data=key_records, file_name=key_string)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
gc = GetCount(db=2)
|
||||||
|
# gc.get_keys()
|
||||||
|
gc.aa()
|
@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/5/31 8:52
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : gz.py
|
||||||
|
|
||||||
|
import gzip
|
||||||
|
import json
|
||||||
|
import ujson
|
||||||
|
|
||||||
|
|
||||||
|
def data_parse(io):
|
||||||
|
data = json.load(io)
|
||||||
|
items = data['items']
|
||||||
|
for item in items:
|
||||||
|
doi = item.get('DOI')
|
||||||
|
dtype = item.get('type')
|
||||||
|
issn = item.get('ISSN')
|
||||||
|
title = item.get('title') and item.get('title')[0]
|
||||||
|
source = item.get('container-title') and item.get('container-title')[0]
|
||||||
|
print('****************************************************\n'
|
||||||
|
'TITLE: %s\n'
|
||||||
|
'DOI: %s\n'
|
||||||
|
'TYPE: %s\n'
|
||||||
|
'ISSN: %s\n'
|
||||||
|
'SOURCE: %s\n' % (title, doi, dtype, issn, source))
|
||||||
|
if not item.get('reference-count', 0):
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
reference_list = []
|
||||||
|
for reference in item.get('reference', []):
|
||||||
|
ref_doi = reference.get('DOI')
|
||||||
|
if ref_doi:
|
||||||
|
# do something
|
||||||
|
reference_list.append(ref_doi)
|
||||||
|
continue
|
||||||
|
ref_at = reference.get('article-title')
|
||||||
|
if ref_at:
|
||||||
|
print(ref_at)
|
||||||
|
reference_list.append(ref_at)
|
||||||
|
continue
|
||||||
|
ref_jt = reference.get('journal-title')
|
||||||
|
except KeyError:
|
||||||
|
print(item.keys())
|
||||||
|
|
||||||
|
|
||||||
|
def un_gz(file_name):
|
||||||
|
g_file = gzip.GzipFile(file_name)
|
||||||
|
return g_file
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
un_gz('H:/crossref_public_data_file_2021_01/1.json.gz')
|
@ -0,0 +1,174 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/5/31 10:02
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : inspec2redis.py
|
||||||
|
|
||||||
|
from ReSpider.db.redisdb import RedisDB
|
||||||
|
from doi_parse.gz import un_gz
|
||||||
|
from queue import Queue
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
|
||||||
|
|
||||||
|
class Counter:
|
||||||
|
def __init__(self, clint=None):
|
||||||
|
self.client: RedisDB = clint
|
||||||
|
if clint is None:
|
||||||
|
self.client = RedisDB(db=2)
|
||||||
|
|
||||||
|
def incr(self, key: list, counter: list):
|
||||||
|
"""
|
||||||
|
key: 可以作为刊唯一id的 redis key
|
||||||
|
counter: 可以作为文章唯一id的 doi 或 title
|
||||||
|
"""
|
||||||
|
pipe = self.client._redis.pipeline()
|
||||||
|
pipe.multi()
|
||||||
|
for k in key:
|
||||||
|
k = k.upper()
|
||||||
|
if not self.sismember('inspec:journals', k):
|
||||||
|
continue
|
||||||
|
for value in counter:
|
||||||
|
pipe.hincrby(k, value)
|
||||||
|
pipe.execute()
|
||||||
|
|
||||||
|
def decr(self, key: str, counter: str, amount=1):
|
||||||
|
"""计数累减"""
|
||||||
|
return self.client.hincrby(key, counter, amount=-amount)
|
||||||
|
|
||||||
|
def get_cnt(self, key: str, counter: str):
|
||||||
|
"""获取当前计数的值"""
|
||||||
|
return self.client.hget(key, counter)
|
||||||
|
|
||||||
|
def sismember(self, key, value):
|
||||||
|
return self.client.sismember(key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class InspecToRedis:
|
||||||
|
"""
|
||||||
|
1. 加载文件
|
||||||
|
2. 解压
|
||||||
|
3. 解析
|
||||||
|
4. 入库
|
||||||
|
4.1 ISSN 关联
|
||||||
|
4.2 ISSN1
|
||||||
|
doi1 1
|
||||||
|
doi2 1
|
||||||
|
ISSN2
|
||||||
|
doi1 2
|
||||||
|
doi2 1
|
||||||
|
"""
|
||||||
|
def __init__(self, counter=None, file_list=None, root: str = None):
|
||||||
|
self.counter = counter # 初始化计数器
|
||||||
|
self.file_list: list = file_list
|
||||||
|
print('初始化任务 %s 个' % len(file_list))
|
||||||
|
# self.to_queue(file_list)
|
||||||
|
self.root = root or 'H:/crossref_public_data_file_2021_01/'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def load_gz(file_path):
|
||||||
|
return os.listdir(file_path)
|
||||||
|
|
||||||
|
# def to_queue(self, file_list):
|
||||||
|
# for file in file_list:
|
||||||
|
# self.file_list.put_nowait(file)
|
||||||
|
# print('*'*50, '注入队列完成', '*'*50)
|
||||||
|
|
||||||
|
def inspec2redis(self):
|
||||||
|
df = pd.read_csv('F:/工作数据存储2022/20220526_inspec测试/inspec期刊列表2.csv')
|
||||||
|
issn_list = df['ISSN'].values.tolist()
|
||||||
|
return self.counter.client.sadd('inspec:journals', issn_list)
|
||||||
|
|
||||||
|
def get_next(self):
|
||||||
|
item = self.file_list.pop()
|
||||||
|
return item
|
||||||
|
|
||||||
|
def compatible(self, file):
|
||||||
|
if file[-2:] == 'gz':
|
||||||
|
io = un_gz(self.root+file)
|
||||||
|
else:
|
||||||
|
io = open(self.root+file, encoding='utf-8')
|
||||||
|
return io
|
||||||
|
|
||||||
|
def data_parse(self, io):
|
||||||
|
data = json.load(io)
|
||||||
|
items = data['items']
|
||||||
|
for item in items:
|
||||||
|
doi = item.get('DOI')
|
||||||
|
dtype = item.get('type')
|
||||||
|
issn = item.get('ISSN')
|
||||||
|
title = item.get('title') and item.get('title')[0]
|
||||||
|
source = item.get('container-title') and item.get('container-title')[0]
|
||||||
|
publisher = item.get('publisher')
|
||||||
|
ref_count = item.get('reference-count', 0)
|
||||||
|
"""
|
||||||
|
print('****************************************************\n'
|
||||||
|
'TITLE: %s\n'
|
||||||
|
'DOI: %s\n'
|
||||||
|
'TYPE: %s\n'
|
||||||
|
'ISSN: %s\n'
|
||||||
|
'SOURCE: %s\n' % (title, doi, dtype, issn, source))"""
|
||||||
|
"""
|
||||||
|
# mongodb存一份
|
||||||
|
ser_item = {'TITLE': title, 'DOI': doi, 'TYPE': dtype, 'PUBLISHER': publisher,
|
||||||
|
'REFERENCE-COUNT': ref_count,
|
||||||
|
'SOURCE': source, 'ISSN': issn}
|
||||||
|
"""
|
||||||
|
if not ref_count:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
reference_list = []
|
||||||
|
for reference in item.get('reference', []):
|
||||||
|
ref_doi = reference.get('DOI')
|
||||||
|
if ref_doi:
|
||||||
|
# do something
|
||||||
|
# print(ref_doi)
|
||||||
|
reference_list.append(ref_doi)
|
||||||
|
continue
|
||||||
|
ref_at = reference.get('article-title')
|
||||||
|
if ref_at:
|
||||||
|
# print(ref_at)
|
||||||
|
# reference_list.append(ref_at)
|
||||||
|
continue
|
||||||
|
ref_jt = reference.get('journal-title')
|
||||||
|
except KeyError:
|
||||||
|
print(item.keys())
|
||||||
|
else:
|
||||||
|
self.counter.incr(issn, reference_list)
|
||||||
|
|
||||||
|
def pro(self, file=None):
|
||||||
|
# print('剩余任务 %s 个' % self.file_list.__len__())
|
||||||
|
if not file and self.file_list.__len__():
|
||||||
|
file = self.get_next()
|
||||||
|
if not file:
|
||||||
|
return
|
||||||
|
print('******************** 当前处理文件 %s ********************' % file)
|
||||||
|
|
||||||
|
io = self.compatible(file)
|
||||||
|
self.data_parse(io)
|
||||||
|
io.close()
|
||||||
|
|
||||||
|
def batch(self):
|
||||||
|
with ThreadPoolExecutor(max_workers=2) as executor:
|
||||||
|
executor.map(self.pro, self.file_list)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
index_count = 0
|
||||||
|
while len(self.file_list):
|
||||||
|
index_count += 1
|
||||||
|
print('当前处理第 %s 个' % index_count)
|
||||||
|
self.pro()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
count = Counter()
|
||||||
|
# files = InspecToRedis.load_gz('H:/crossref_public_data_file_2021_01')
|
||||||
|
# files = files[40000:]
|
||||||
|
files = ['0.json']
|
||||||
|
i2r = InspecToRedis(counter=count, file_list=files)
|
||||||
|
s = time.time()
|
||||||
|
i2r.batch()
|
||||||
|
# i2r.inspec2redis()
|
||||||
|
print('耗时 %s 秒' % (time.time()-s))
|
@ -0,0 +1,443 @@
|
|||||||
|
doi,count,issn
|
||||||
|
10.1002/cite.201800135,3.0,0009-286X; 2058-9883
|
||||||
|
10.1002/cnm.3180,2.0,1617-7959; 2267-1242
|
||||||
|
10.1002/eng2.12217,1.0,1474-0346
|
||||||
|
10.1002/geot.201800058,2.0,1865-7362
|
||||||
|
10.1002/geot.201900076,2.0,0886-7798; 1865-7362
|
||||||
|
10.1002/inst.12189,2.0,2156-485X; 0937-7255
|
||||||
|
10.1002/inst.12279,1.0,1098-1241
|
||||||
|
10.1002/j.2334-5837.2019.00598.x,2.0,2334-5837
|
||||||
|
10.1002/lpor.202000254,1.0,1996-1944
|
||||||
|
10.1002/sys.21503,1.0,1539-7734
|
||||||
|
10.1007/978-3-030-04849-5_31,1.0,2078-2489
|
||||||
|
10.1007/978-3-030-23162-0_4,1.0,1742-6596
|
||||||
|
10.1007/978-3-030-23703-5_2,1.0,0020-7543
|
||||||
|
10.1007/978-3-030-27878-6_5,1.0,2504-4494
|
||||||
|
10.1007/978-3-030-29513-4_72,1.0,2076-3417
|
||||||
|
10.1007/978-3-030-29852-4_30,1.0,1424-8220
|
||||||
|
10.1007/978-3-030-30985-5_4,1.0,0925-9856
|
||||||
|
10.1007/978-3-030-34644-7_40,1.0,2220-9964
|
||||||
|
10.1007/978-3-030-34986-8_41,2.0,2161-3915
|
||||||
|
10.1007/978-3-030-38077-9_75,1.0,0042-3114
|
||||||
|
10.1007/978-3-030-42416-9_18,1.0,2071-1050
|
||||||
|
10.1007/978-3-319-59153-7_13,1.0,0941-0643
|
||||||
|
10.1007/978-3-319-65298-6_1,3.0,0020-7543; 1064-1246; 1068-798X
|
||||||
|
10.1007/978-981-15-0802-8_199,1.0,2076-3417
|
||||||
|
10.1007/s00170-011-3370-y,4.0,2234-7593; 0268-3768; 0043-1648
|
||||||
|
10.1007/s00170-013-5155-y,10.0,2076-3417; 2071-1050; 0377-2217; 0925-5273; 0951-192X; 0018-7208; 1387-3954; 0268-3768; 1996-1073; 1751-7575
|
||||||
|
10.1007/s00170-014-6091-1,3.0,0268-3768; 0263-2241; 1424-8220
|
||||||
|
10.1007/s00170-018-1617-6,43.0,0888-3270; 2041-1723; 1868-5137; 2288-6206; 0268-3768; 2075-1702; 2076-3417; 0141-9331; 0890-0604; 2071-1050; 2227-9717; 0360-3199; 1050-0472; 1022-0038; 0020-7543; 0013-7944; 1530-9827; 1742-6596; 1729-8814; 0951-192X; 0929-6212; 1747-7778; 1617-9846; 1751-7575
|
||||||
|
10.1007/s00170-018-2001-2,11.0,2076-3417; 2504-4494; 2227-9717; 1530-8669; 0951-192X; 2288-6206; 0268-3768; 1068-798X
|
||||||
|
10.1007/s00170-018-2748-5,12.0,0360-5442; 0161-0457; 2076-3417; 2504-4494; 0925-5273; 0951-192X; 1022-0038; 0950-7051; 0268-3768
|
||||||
|
10.1007/s00170-019-03794-z,4.0,0951-192X; 0268-3768; 0020-7543; 2234-7593
|
||||||
|
10.1007/s00170-019-04653-7,8.0,0161-0457; 2504-4494; 2288-6206; 0268-3768; 0020-7543
|
||||||
|
10.1007/s00170-019-04706-x,3.0,1050-0472; 2076-3417; 0268-3768
|
||||||
|
10.1007/s00170-020-05056-9,4.0,2071-1050; 1996-1073; 0268-3768
|
||||||
|
10.1007/s00170-020-05387-7,1.0,0268-3768
|
||||||
|
10.1007/s00170-020-05567-5,1.0,1059-9495
|
||||||
|
10.1007/s00170-020-05977-5,3.0,0268-3768; 2076-3417
|
||||||
|
10.1007/s00231-016-1961-8,9.0,0145-8892; 1556-3758; 0177-0667; 0947-7411; 0145-8876; 0921-8831
|
||||||
|
10.1007/s10257-018-0376-0,1.0,2504-4494
|
||||||
|
10.1007/s10586-016-0618-1,2.0,1386-7857
|
||||||
|
10.1007/s10586-018-2041-2,2.0,1367-5567; 0020-7543
|
||||||
|
10.1007/s10845-017-1350-2,28.0,0360-5442; 2076-3417; 1862-4472; 1568-4946; 2071-1050; 1092-7026; 2472-5854; 0268-3768; 0951-192X; 0944-6524; 1024-123X; 1063-293X; 1687-8140; 1741-038X; 0925-2312; 2571-5577; 0020-7543; 1064-1246
|
||||||
|
10.1007/s10845-019-01500-0,1.0,2504-4494
|
||||||
|
10.1007/s10845-019-01512-w,4.0,2071-1050; 1076-2787; 2076-3417; 1996-1073
|
||||||
|
10.1007/s10845-019-01516-6,2.0,2076-3417; 1996-1073
|
||||||
|
10.1007/s11831-018-9301-4,15.0,1134-3060; 2504-4494; 2213-7467; 1996-1944; 2523-3963; 0029-5981; 1960-6206; 1438-7492; 0268-3768; 1996-1073; 2311-5521
|
||||||
|
10.1007/s11837-017-2709-8,7.0,2214-8604; 1047-4838; 1424-8220; 0964-1726
|
||||||
|
10.1007/s11837-020-04028-4,3.0,2214-8604; 1047-4838; 0264-1275
|
||||||
|
10.1007/s12008-012-0165-9,13.0,0965-9978; 1530-9827; 0954-4062; 1955-2513; 2213-8463; 0268-3768; 0020-7543
|
||||||
|
10.1007/s12008-013-0201-4,4.0,2261-236X; 0723-2632; 1996-1944; 1955-2513
|
||||||
|
10.1007/s12008-016-0319-2,11.0,2076-3417; 1742-6596; 1955-2513; 0951-192X; 1868-5137; 1741-038X; 0954-4054; 1751-7575; 0020-7543
|
||||||
|
10.1007/s12008-019-00578-3,1.0,1955-2513
|
||||||
|
10.1007/s12008-019-00621-3,1.0,2227-9717
|
||||||
|
10.1007/s12008-020-00694-5,1.0,1350-4533
|
||||||
|
10.1007/s12161-013-9634-4,8.0,0149-6085; 0022-5142; 1541-4337; 0145-8876; 1936-9751
|
||||||
|
10.1007/s12517-019-4574-y,1.0,1070-9622
|
||||||
|
10.1007/s12599-019-00624-0,2.0,2076-3417; 1350-1917
|
||||||
|
10.1007/s12652-018-0881-5,31.0,0888-3270; 1077-5463; 1424-8220; 1868-5137; 0268-3768; 0926-5805; 0096-3003; 1562-2479; 2071-1050; 1367-5788; 2227-9717; 2095-8099; 0950-7051; 1687-8140; 0020-7543; 2504-4494; 0013-7944; 1742-6596; 1729-8814; 0951-192X; 2213-8463; 0929-6212
|
||||||
|
10.1007/s12652-018-0911-3,13.0,2076-3417; 2071-1050; 1742-6596; 0263-2241; 0951-192X; 2095-8099; 1350-6307; 0926-5805; 0268-3768; 0954-4054
|
||||||
|
10.1007/s12652-018-0944-7,3.0,1678-5878; 1742-6596; 0954-4054
|
||||||
|
10.1007/s12652-018-0946-5,15.0,2076-3417; 0954-4054; 2504-4494; 1729-8814; 0951-192X; 2073-8994; 1868-5137; 1350-6307; 0268-3768; 1678-5878; 0020-7543
|
||||||
|
10.1007/s12652-018-0953-6,9.0,2504-4494; 0263-2241; 1729-8814; 0951-192X; 1868-5137; 1741-0398
|
||||||
|
10.1007/s12652-018-1125-4,7.0,2504-4494; 0268-3768; 1868-5137; 1847-9790
|
||||||
|
10.1007/s13349-020-00403-6,2.0,2190-5452; 1424-8220
|
||||||
|
10.1007/s40430-020-02461-9,1.0,0268-3768
|
||||||
|
10.1007/s40684-020-00196-5,2.0,2234-7593; 2076-3417
|
||||||
|
10.1007/s40684-020-00227-1,3.0,2234-7593; 0737-8831; 0020-7543
|
||||||
|
10.1007/s40860-018-0069-y,2.0,0929-6212; 1022-0038
|
||||||
|
10.1016/j.apm.2019.09.036,4.0,0263-2241; 2470-0045; 0888-3270; 0307-904X
|
||||||
|
10.1016/j.arcontrol.2019.01.001,2.0,2213-8463; 0020-7543
|
||||||
|
10.1016/j.autcon.2019.102837,11.0,1134-3060; 2071-1050; 1093-9687; 1475-9217; 0926-5805; 1687-8086; 1545-2255
|
||||||
|
10.1016/j.autcon.2019.102915,4.0,0926-5805; 2076-3417; 1474-0346; 2631-4428
|
||||||
|
10.1016/j.autcon.2019.102930,9.0,2076-3417; 0969-9988; 0268-4012; 2071-1050; 1471-4175; 1350-6307; 0926-5805; 0020-7543
|
||||||
|
10.1016/j.autcon.2020.103179,12.0,2076-3417; 1618-954X; 2071-1050; 1424-8220; 1474-0346; 0926-5805; 1687-8086
|
||||||
|
10.1016/j.autcon.2020.103183,2.0,2071-1050; 1687-8086
|
||||||
|
10.1016/j.autcon.2020.103277,1.0,2076-3417
|
||||||
|
10.1016/j.cad.2011.07.007,6.0,0965-9978; 0951-192X; 0944-6524; 1745-2759; 0094-2405
|
||||||
|
10.1016/j.cherd.2012.08.004,28.0,0959-3330; 1932-2135; 0306-2619; 0145-8892; 1618-954X; 1385-8947; 1568-4946; 1556-7036; 1876-1070; 2077-0375; 0376-7388; 0360-3199; 0926-860X; 0167-7322; 0930-7516; 0022-1481; 0920-4105
|
||||||
|
10.1016/j.cirp.2017.04.038,53.0,0954-4062; 0944-6524; 1868-5137; 0268-3768; 2075-1702; 2076-3417; 1478-0771; 2332-9017; 1474-0346; 0965-9978; 0161-0457; 0890-0604; 2071-1050; 1367-5788; 1087-1357; 1050-0472; 0935-1175; 2095-8099; 0020-7543; 0013-7944; 1530-9827; 0263-2241; 2267-1242; 0951-192X; 1751-7575
|
||||||
|
10.1016/j.cirp.2017.04.040,80.0,1098-1241; 0378-7788; 1996-1944; 1424-8220; 1955-2513; 0029-5981; 0944-6524; 1868-5137; 2288-6206; 0268-3768; 2075-1702; 2076-3417; 1999-5903; 2332-9017; 2053-4701; 1474-0346; 2516-8398; 0926-5805; 2227-7080; 0735-3766; 1064-1246; 0268-4012; 0094-114X; 0890-0604; 2071-1050; 1367-5788; 1087-1357; 2227-9717; 1050-0472; 2095-8099; 1741-038X; 0010-4485; 0954-4054; 0020-7543; 1468-8115; 1530-9827; 1742-6596; 2523-3963; 0951-192X; 2234-7593; 0895-6308; 0040-5175; 2261-236X; 1751-7575
|
||||||
|
10.1016/j.cirp.2018.04.039,3.0,0951-192X; 1474-0346; 1087-1357
|
||||||
|
10.1016/j.cirp.2018.04.055,34.0,1098-1241; 1532-0626; 1868-5137; 2288-6206; 1863-8880; 0268-3768; 2076-3417; 0742-4795; 2332-9017; 1474-0346; 2071-1050; 1367-5788; 1087-1357; 0360-3199; 1050-0472; 2095-8099; 2391-5439; 0954-4054; 0020-7543; 2073-8994; 2504-4494; 0013-7944; 1742-6596; 1729-8814; 0951-192X
|
||||||
|
10.1016/j.cirp.2018.04.118,2.0,2076-3417; 1063-293X
|
||||||
|
10.1016/j.cirp.2019.04.011,6.0,0951-192X; 0161-0457; 2076-3417; 0954-4054
|
||||||
|
10.1016/j.cirp.2019.04.024,5.0,2076-3417; 0954-4054; 2227-9717; 0020-7543
|
||||||
|
10.1016/j.cirp.2019.04.041,1.0,1350-6307
|
||||||
|
10.1016/j.cirp.2019.05.010,1.0,2071-1050
|
||||||
|
10.1016/j.cirpj.2019.04.007,2.0,0360-5442; 1747-7778
|
||||||
|
10.1016/j.cma.2020.112907,2.0,0010-4485; 0178-7675
|
||||||
|
10.1016/j.cmpb.2019.01.003,2.0,1617-7959; 1025-5842
|
||||||
|
10.1016/j.cobme.2018.04.001,5.0,2296-4185; 0935-9648; 1742-7061; 2054-5703
|
||||||
|
10.1016/j.compag.2016.03.005,14.0,0950-5423; 0145-8892; 1866-7910; 2071-1050; 0038-7010; 0022-1155; 2072-4292; 0022-5142; 1537-5110; 2314-4920; 1936-9751
|
||||||
|
10.1016/j.compchemeng.2018.09.022,3.0,1735-1472; 1064-1246; 1996-1073
|
||||||
|
10.1016/j.compchemeng.2019.106577,1.0,0009-286X
|
||||||
|
10.1016/j.compind.2019.103130,11.0,2076-3417; 2071-1050; 0263-2241; 1424-8220; 0268-3768; 0020-7543
|
||||||
|
10.1016/j.compstruc.2020.106282,3.0,1424-8220
|
||||||
|
10.1016/j.ejor.2018.04.032,6.0,2071-1050; 0377-2217; 1868-5137; 1747-7778; 0160-5682; 0920-8542
|
||||||
|
10.1016/j.enbuild.2019.07.015,1.0,1940-1493
|
||||||
|
10.1016/j.eng.2019.01.014,26.0,1134-3060; 2076-3417; 0009-286X; 1866-7910; 2504-4494; 1999-5903; 2071-1050; 2640-4567; 1424-8220; 2214-7853; 2227-9717; 2523-3963; 2095-8099; 1474-0346; 1868-5137; 2516-8398; 0737-3937; 0954-4054
|
||||||
|
10.1016/j.engfracmech.2019.106673,2.0,2214-8604; 2193-9764
|
||||||
|
10.1016/j.engfracmech.2019.106674,3.0,1996-1944; 2267-1242; 0307-904X
|
||||||
|
10.1016/j.engfracmech.2019.106766,3.0,1099-4300; 1996-1944; 2571-631X
|
||||||
|
10.1016/j.engfracmech.2020.107075,2.0,2071-1050; 0013-7944
|
||||||
|
10.1016/j.ergon.2019.02.001,13.0,2076-3417; 1022-1360; 2071-1050; 0263-2241; 1424-8220; 2523-3963; 1955-2513; 1080-3548; 2169-3277; 0268-3768
|
||||||
|
10.1016/j.fusengdes.2017.10.012,6.0,2332-9017; 0029-5515; 0268-3768; 0020-7543; 2571-631X
|
||||||
|
10.1016/j.future.2019.12.020,6.0,2076-3417; 1424-8220; 0929-6212; 1741-0398; 2073-8994
|
||||||
|
10.1016/j.ifacol.2015.06.141,77.0,1434-5021; 2578-0727; 1424-8220; 0944-6524; 1532-0626; 1868-5137; 1350-6307; 1076-2787; 0268-3768; 2076-3417; 1092-7026; 2332-9017; 1474-0346; 2227-7080; 1064-1246; 0306-2619; 0268-4012; 0890-0604; 2071-1050; 2156-485X; 1367-5788; 1087-1357; 2227-9717; 2296-4185; 2095-8099; 1099-4300; 1246-0125; 2524-8510; 0954-4054; 0020-7543; 2073-8994; 0177-0667; 0952-1976; 2220-9964; 2267-1242; 1729-8814; 2214-7853; 0951-192X; 2169-3277; 2213-8463; 1617-9846
|
||||||
|
10.1016/j.ifacol.2016.11.115,30.0,1996-1944; 2363-7005; 1868-5137; 2288-6206; 0268-3768; 2332-9017; 1474-0346; 2071-1050; 2095-8099; 0010-485X; 1099-4300; 0954-4054; 0020-7543; 2073-8994; 0360-5442; 1742-6596; 2214-7853; 0951-192X; 1751-7575
|
||||||
|
10.1016/j.ifacol.2017.08.2360,2.0,0268-3768
|
||||||
|
10.1016/j.ifacol.2017.08.902,4.0,0951-192X; 2075-1702; 1042-9247; 0360-5442
|
||||||
|
10.1016/j.ifacol.2018.03.104,3.0,2504-4494; 0268-3768; 1678-5878
|
||||||
|
10.1016/j.ifacol.2018.06.356,4.0,0920-4105; 1687-8140
|
||||||
|
10.1016/j.ifacol.2019.10.024,1.0,0957-0233
|
||||||
|
10.1016/j.ifacol.2019.11.383,3.0,0953-7287; 0020-7543; 0268-4012
|
||||||
|
10.1016/j.ifacol.2019.11.536,1.0,0953-7287
|
||||||
|
10.1016/j.ifacol.2019.11.685,2.0,0178-2312
|
||||||
|
10.1016/j.ijinfomgt.2019.05.020,6.0,0926-5805; 2640-4567; 0268-4012; 0360-3199
|
||||||
|
10.1016/j.ijmst.2015.09.016,1.0,2071-1050
|
||||||
|
10.1016/j.infrared.2015.06.002,5.0,2076-3417; 2071-1050; 0263-2241; 0268-3768; 0948-7921
|
||||||
|
10.1016/j.infrared.2019.04.007,4.0,0703-8992; 2076-3417; 0145-8892; 1936-9751
|
||||||
|
10.1016/j.isatra.2019.05.011,3.0,0268-3768; 0263-2241; 2227-9717
|
||||||
|
10.1016/j.jclepro.2019.04.156,10.0,2412-3811; 2071-1050; 2076-3417; 1424-8220
|
||||||
|
10.1016/j.jclepro.2019.119299,2.0,0360-5442; 0890-0604
|
||||||
|
10.1016/j.jclepro.2019.119423,4.0,0951-192X; 2071-1050; 1741-0398; 0360-5442
|
||||||
|
10.1016/j.jmapro.2013.10.004,10.0,1042-6914; 0043-1648; 1091-0344; 2214-7853; 1876-990X; 0268-3768; 0890-6955; 1678-5878
|
||||||
|
10.1016/j.jmatprotec.2013.03.013,57.0,0884-2914; 1438-1656; 1996-1944; 2288-6206; 1350-6307; 0268-3768; 2159-6867; 0264-1275; 1464-4207; 2073-4360; 0925-5273; 2352-4928; 2227-7080; 0928-4931; 2214-8604; 1355-2546; 1359-6454; 1087-1357; 0167-6636; 1073-5623; 1073-5615; 0263-2241; 0734-743X; 0020-7403; 0921-5093; 2075-4701
|
||||||
|
10.1016/j.jmsy.2018.02.002,21.0,2076-3417; 2224-2708; 2071-1050; 0263-2241; 1729-8814; 0885-8624; 0951-192X; 2213-8463; 2516-8398; 1741-038X; 0268-3768; 0954-4054; 1064-1246; 0307-904X; 0020-7543
|
||||||
|
10.1016/j.jmsy.2018.05.003,25.0,2076-3417; 0890-0604; 1530-9827; 1424-8220; 0268-3768; 1386-7857; 0885-8624; 2234-7593; 2190-7188; 1868-5137; 1463-5771; 1741-038X; 1463-7154; 0020-7543
|
||||||
|
10.1016/j.jmsy.2020.04.005,1.0,1996-1073
|
||||||
|
10.1016/j.knosys.2014.03.010,4.0,0952-1976; 0950-7051
|
||||||
|
10.1016/j.measurement.2011.09.018,2.0,0957-0233; 0263-2241
|
||||||
|
10.1016/j.medengphy.2019.08.007,5.0,1350-4533; 2311-5521; 1364-503X; 2040-7939
|
||||||
|
10.1016/j.mfglet.2018.02.006,28.0,0306-2619; 2050-7038; 2075-1702; 2079-9292; 0890-0604; 1093-9687; 1742-6596; 1424-8220; 2227-9717; 0951-192X; 0178-2312; 2213-8463; 1350-6307; 0926-5805; 0268-3768; 0007-6813; 0020-7543; 0307-904X
|
||||||
|
10.1016/j.mfglet.2020.04.004,4.0,2214-8604; 1474-0346; 1996-1073
|
||||||
|
10.1016/j.molliq.2016.12.028,11.0,1350-4177; 0041-624X; 0956-053X; 1872-5805; 1615-9306; 0167-7322; 2297-8747; 2398-4902
|
||||||
|
10.1016/j.net.2020.03.028,1.0,1076-2787
|
||||||
|
10.1016/j.optlastec.2010.07.010,5.0,0732-8818; 1568-4946; 0263-2241; 2523-3963; 2196-7229
|
||||||
|
10.1016/j.procir.2016.11.152,68.0,1866-7910; 1574-017X; 1424-8220; 2363-7005; 0944-6524; 1868-5137; 0268-3768; 2075-1702; 2076-3417; 2332-9017; 0141-9331; 1474-0346; 2227-7080; 1996-1073; 0268-4012; 2071-1050; 1367-5788; 2288-5048; 2095-8099; 1687-8140; 1741-038X; 2095-0233; 2391-5439; 0954-4054; 0020-7543; 2224-2708; 0952-1976; 0013-7944; 1742-6596; 2504-4494; 0263-2241; 2214-7853; 0951-192X; 2169-3277; 2572-6668; 1747-7778; 1757-8981; 1687-8086; 2311-5521; 2424-8622
|
||||||
|
10.1016/j.procir.2017.02.035,2.0,0951-192X; 0268-3768
|
||||||
|
10.1016/j.procir.2017.12.168,9.0,2076-3417; 1742-6596; 0253-3839; 0178-2312; 0954-4054; 1996-1073
|
||||||
|
10.1016/j.procir.2018.02.010,5.0,0951-192X; 2071-1050; 2076-3417; 1424-8220
|
||||||
|
10.1016/j.procir.2018.03.103,19.0,0161-0457; 1098-1241; 0890-0604; 1367-5788; 1087-1357; 1729-8814; 2267-1242; 2095-8099; 1474-0346; 1532-0626; 0268-3768; 2227-7080; 0005-1055; 1331-677X
|
||||||
|
10.1016/j.procir.2018.03.139,6.0,1742-6596; 0951-192X; 0268-3768; 2075-1702; 2391-5439
|
||||||
|
10.1016/j.procir.2018.03.166,8.0,0178-2312; 1742-6596; 0268-3768; 0890-0604
|
||||||
|
10.1016/j.procir.2018.03.178,8.0,0890-0604; 2504-4494; 1087-1357; 1532-0626; 1474-0346; 1350-6307; 0268-3768; 0020-7543
|
||||||
|
10.1016/j.procir.2018.03.192,10.0,2076-3417; 0890-0604; 2504-4494; 2071-1050; 1424-8220; 1474-0346; 1747-7778; 0268-3768; 0020-7543
|
||||||
|
10.1016/j.procir.2018.04.076,2.0,2071-1050; 2076-3417
|
||||||
|
10.1016/j.procir.2018.04.078,6.0,2076-3417; 0094-114X; 1532-0626; 2075-5309; 0268-3768
|
||||||
|
10.1016/j.procir.2019.02.087,3.0,0268-3768; 1742-6596; 1350-6307
|
||||||
|
10.1016/j.procir.2019.02.104,3.0,2075-1702; 2095-8293; 2267-1242
|
||||||
|
10.1016/j.procir.2019.02.131,2.0,2076-3417; 1751-7575
|
||||||
|
10.1016/j.procir.2019.03.072,7.0,2076-3417; 2071-1050; 0951-192X; 2516-8398; 2571-631X
|
||||||
|
10.1016/j.procir.2019.03.141,4.0,0951-192X; 2227-9717; 0020-7543; 1087-1357
|
||||||
|
10.1016/j.procir.2019.03.182,1.0,1474-0346
|
||||||
|
10.1016/j.procir.2019.03.212,1.0,0268-3768
|
||||||
|
10.1016/j.procir.2019.03.223,3.0,2071-1050; 2076-3417; 0268-3768
|
||||||
|
10.1016/j.procir.2019.04.040,6.0,1087-1357; 0268-3768; 0171-8096; 0020-7543; 1064-1246
|
||||||
|
10.1016/j.procir.2019.04.049,2.0,2079-3197; 0020-7543
|
||||||
|
10.1016/j.procir.2019.04.084,6.0,2504-4494; 2076-3417; 1424-8220; 0950-7051
|
||||||
|
10.1016/j.procir.2019.04.103,3.0,1866-7511; 2076-3417; 1955-2513
|
||||||
|
10.1016/j.procir.2019.04.176,2.0,0926-5805; 0020-7543
|
||||||
|
10.1016/j.procir.2019.04.219,1.0,2071-1050
|
||||||
|
10.1016/j.procir.2019.04.330,3.0,2071-1050; 2076-3417; 2288-6206
|
||||||
|
10.1016/j.procir.2020.01.043,1.0,2267-1242
|
||||||
|
10.1016/j.procir.2020.01.049,2.0,2076-3417
|
||||||
|
10.1016/j.procir.2020.05.020,1.0,1999-5903
|
||||||
|
10.1016/j.procs.2017.09.003,11.0,1098-1241; 2156-485X; 2213-7467; 1530-9827; 1087-1357; 2214-7853; 2523-3963; 2213-8463; 0937-7255; 1687-8086; 0041-624X
|
||||||
|
10.1016/j.procs.2019.09.032,3.0,2314-4904; 1742-6596; 2424-8622
|
||||||
|
10.1016/j.proeng.2014.12.394,6.0,2072-666X; 0264-1275; 1757-8981; 1024-123X; 0143-991X; 0010-4485
|
||||||
|
10.1016/j.proeng.2014.12.395,1.0,0268-3768
|
||||||
|
10.1016/j.proeng.2015.07.314,10.0,1742-6596; 1757-8981; 1024-123X; 0268-3768; 1755-1307
|
||||||
|
10.1016/j.promfg.2017.04.039,8.0,0360-5442; 1742-6596; 2332-9017; 0954-4062; 0951-192X; 0268-3768; 0020-7543
|
||||||
|
10.1016/j.promfg.2017.04.043,33.0,0886-7798; 1424-8220; 1868-5137; 0268-3768; 2076-3417; 2332-9017; 2516-8398; 1463-5771; 1996-1073; 2071-1050; 1087-1357; 2227-9717; 1741-038X; 0954-4054; 0020-7543; 0360-5442; 1742-6596; 0951-192X; 2213-8463; 2572-6668; 1751-7575
|
||||||
|
10.1016/j.promfg.2017.07.094,20.0,0161-0457; 1742-6596; 1996-1944; 1087-1357; 2267-1242; 0951-192X; 2213-8463; 1350-6307; 0306-4549; 0268-3768; 2075-1702; 0020-7543; 1751-7575
|
||||||
|
10.1016/j.promfg.2017.07.198,43.0,2363-7005; 2305-7084; 1350-6307; 0268-3768; 2075-1702; 2076-3417; 1999-5903; 0953-7287; 2516-8398; 1996-1073; 1064-1246; 1134-3060; 2624-6511; 2071-1050; 1087-1357; 2227-9717; 2095-8099; 0020-7543; 1729-8814; 2214-7853; 0951-192X; 1871-6784; 2213-8463; 1747-7778; 0005-1055; 1751-7575
|
||||||
|
10.1016/j.promfg.2018.04.008,5.0,1742-6596; 0020-7543; 1754-2731; 1463-5771
|
||||||
|
10.1016/j.promfg.2018.06.041,2.0,0268-3768; 2331-1916
|
||||||
|
10.1016/j.promfg.2018.06.057,3.0,2234-7593; 0268-3768; 0020-7543
|
||||||
|
10.1016/j.promfg.2018.07.146,3.0,0926-5805; 1742-6596; 0951-192X
|
||||||
|
10.1016/j.promfg.2018.07.155,6.0,0268-3768; 2095-8099; 0954-4054; 0020-7543
|
||||||
|
10.1016/j.promfg.2018.10.047,10.0,2076-3417; 1424-8220; 0951-192X; 1050-0472; 2234-7593; 2288-6206; 1064-1246
|
||||||
|
10.1016/j.promfg.2018.10.070,1.0,2234-7593
|
||||||
|
10.1016/j.promfg.2019.03.035,4.0,2314-4904; 1092-7026; 0954-4054; 1747-7778
|
||||||
|
10.1016/j.promfg.2019.06.097,3.0,1050-0472; 2076-3417
|
||||||
|
10.1016/j.promfg.2020.02.084,1.0,0268-3768
|
||||||
|
10.1016/j.psep.2019.10.021,3.0,2071-1050; 1749-7728
|
||||||
|
10.1016/j.rcim.2018.07.006,6.0,2076-3417; 1424-8220; 1080-3548; 0951-192X; 0268-3768
|
||||||
|
10.1016/j.rcim.2019.101881,3.0,2071-1050; 0737-8831; 0268-3768
|
||||||
|
10.1016/j.rcim.2019.101895,4.0,0161-0457; 0013-7944; 1367-5788; 0268-3768
|
||||||
|
10.1016/j.rcim.2019.101917,2.0,1742-6596; 0020-7543
|
||||||
|
10.1016/j.resconrec.2019.06.002,3.0,0360-5442; 2071-1050; 2227-9717
|
||||||
|
10.1016/j.scriptamat.2016.12.005,31.0,1047-4838; 0022-0434; 2472-5854; 1424-8220; 0267-0836; 0268-3768; 2076-3417; 2073-4360; 2332-9017; 0307-904X; 2079-6412; 2214-8604; 2352-9407; 2071-1050; 1087-1357; 2095-8099; 1674-7321; 0020-7543; 1073-5623
|
||||||
|
10.1016/j.ymssp.2019.106612,5.0,2076-3417; 1070-9622; 1367-5788; 1424-8220; 1087-1357
|
||||||
|
10.1017/S089006041900012X,9.0,2076-3417; 2577-8196; 0890-0604; 2504-4494; 1742-6596; 1359-4311; 1474-0346; 1996-1073
|
||||||
|
10.1038/s41467-020-19059-3,2.0,1616-301X; 2397-4621
|
||||||
|
10.1049/iet-cim.2020.0009,1.0,1367-5788
|
||||||
|
10.1049/iet-cim.2020.0041,9.0,2076-3417; 2424-8622
|
||||||
|
10.1049/iet-epa.2018.5732,1.0,1367-5788
|
||||||
|
10.1051/e3sconf/201912301049,1.0,2267-1242
|
||||||
|
10.1051/e3sconf/201914004017,1.0,2267-1242
|
||||||
|
10.1051/e3sconf/201914006008,2.0,2267-1242
|
||||||
|
10.1051/matecconf/201930011004,2.0,2214-8604; 1047-4838
|
||||||
|
10.1061/(ASCE)CO.1943-7862.0000825,1.0,1474-0346
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000740,4.0,0926-5805; 2071-1050; 1474-0346; 1424-8220
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000741,3.0,2071-1050; 2227-9717; 0360-3199
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000745,3.0,1093-9687; 2364-8228; 1869-5450
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000748,1.0,1424-8220
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000774,1.0,2079-9292
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000779,1.0,1562-3599
|
||||||
|
10.1061/(ASCE)ME.1943-5479.0000797,1.0,0926-5805
|
||||||
|
10.1063/1.5031520,7.0,0001-9240; 2071-1050; 1548-1115; 0010-485X; 0268-3768; 0020-7543; 2571-631X
|
||||||
|
10.1063/1.5034337,1.0,1424-8220
|
||||||
|
10.1063/1.5099723,2.0,0888-3270; 1475-9217
|
||||||
|
10.1063/1.5128374,2.0,0307-904X; 2311-5521
|
||||||
|
10.1080/00207543.2018.1443229,33.0,2076-3417; 2071-1050; 2332-9017; 1729-8814; 0951-192X; 1050-0472; 1868-5137; 2516-8398; 0268-3768; 0020-7543; 0307-904X; 2073-8994
|
||||||
|
10.1080/00207543.2018.1471243,31.0,2076-3417; 0096-3003; 2071-1050; 0013-7944; 1424-8220; 1729-8814; 0951-192X; 2234-7593; 2190-7188; 0926-5805; 0268-3768; 0954-4054; 1562-2479; 0020-7543
|
||||||
|
10.1080/00207543.2018.1497819,11.0,0360-5442; 2071-1050; 0951-192X; 2516-8398; 0020-7543
|
||||||
|
10.1080/00207543.2018.1552032,22.0,2076-3417; 1070-9622; 2071-1050; 1367-5788; 1729-8814; 0360-3199; 1024-123X; 0268-3768; 0020-7543; 1996-1073; 0307-904X; 2073-8994
|
||||||
|
10.1080/00207543.2019.1566661,34.0,0965-9978; 2076-3417; 2504-4494; 2071-1050; 1367-5788; 1424-8220; 2624-9375; 0951-192X; 1469-1930; 1474-0346; 0950-7051; 0268-3768; 1743-6753; 0954-4054; 0020-7543
|
||||||
|
10.1080/00207543.2019.1581387,9.0,2076-3417; 1530-9827; 1424-8220; 1050-0472; 0268-3768; 0020-7543
|
||||||
|
10.1080/00207543.2019.1607978,14.0,0360-5442; 2076-3417; 1424-8220; 1087-1357; 2095-8099; 0268-3768; 0020-7543
|
||||||
|
10.1080/00207543.2019.1662133,4.0,0268-3768; 2095-8099; 0020-7543
|
||||||
|
10.1080/00207543.2019.1683250,3.0,0020-7543; 2227-9717
|
||||||
|
10.1080/00207543.2020.1714091,3.0,0020-7543; 0021-9983
|
||||||
|
10.1080/01691864.2017.1297735,2.0,0926-5805; 1424-8220
|
||||||
|
10.1080/01969722.2019.1705554,1.0,0360-5442
|
||||||
|
10.1080/07373937.2014.962143,19.0,1350-4177; 0360-5442; 2076-3417; 0145-8892; 1866-7910; 0737-3937; 0947-7411; 2352-4847; 0145-8876
|
||||||
|
10.1080/0951192X.2018.1529430,15.0,2076-3417; 1530-9827; 2332-9017; 1424-8220; 1080-3548; 0951-192X; 0268-3768
|
||||||
|
10.1080/0951192X.2019.1599433,1.0,0020-7543
|
||||||
|
10.1080/0951192X.2019.1599436,6.0,0951-192X; 0268-3768; 2076-3417; 2504-4494
|
||||||
|
10.1080/0951192X.2019.1599439,9.0,2071-1050; 0263-2241; 0951-192X; 2288-6206; 2190-7188; 0268-3768; 0020-7543; 1064-1246
|
||||||
|
10.1080/0951192X.2019.1686173,9.0,2076-3417; 2071-1050; 0263-2241; 1424-8220; 1087-1357; 0951-192X; 0020-7543
|
||||||
|
10.1080/0951192X.2019.1699254,2.0,2071-1050; 2076-3417
|
||||||
|
10.1080/0951192X.2020.1747642,1.0,2168-1163
|
||||||
|
10.1080/10494820.2013.815221,55.0,1361-4568; 1359-4338; 1574-017X; 1360-2357; 2472-5854; 1463-922X; 1955-2513; 1868-5137; 0268-3768; 1049-4820; 2077-1312; 2095-2686; 0007-1013; 2076-3417; 1080-3548; 0018-7208; 2468-2322; 0141-9331; 0735-6331; 0144-929X; 1042-1629; 2073-431X; 1044-8004; 2071-1050; 0265-671X; 2414-4088; 0020-7543; 1044-7318; 2296-9144; 0952-1976; 1742-6596; 2261-236X
|
||||||
|
10.1080/14786451.2012.724070,21.0,1744-2591; 0199-6231; 1556-3758; 1866-7910; 0737-3937; 2095-1701; 2071-1050; 1556-7036; 2523-3963; 0143-0750; 0947-7411; 1543-5075; 2352-4847; 1064-1246; 2050-0505
|
||||||
|
10.1080/15732479.2019.1620789,4.0,1573-2479; 1687-8086; 2076-3417
|
||||||
|
10.1080/16864360.2018.1462569,9.0,0360-5442; 1530-9827; 2193-9764; 2332-9017; 0951-192X; 1050-0472; 0954-4054
|
||||||
|
10.1080/17517575.2018.1526324,14.0,2076-3417; 0888-3270; 0954-4054; 2071-1050; 1424-8220; 1729-8814; 2227-9717; 0951-192X; 2234-7593; 2391-5439; 0020-7543
|
||||||
|
10.1080/21693277.2019.1660283,3.0,0951-192X; 0268-3768; 2076-3417
|
||||||
|
10.1080/25726668.2019.1569367,5.0,0161-0457; 0360-3199; 0951-192X; 2572-6668; 2073-8994
|
||||||
|
10.1080/25726668.2019.1645519,2.0,2572-6668; 2073-8994
|
||||||
|
10.1088/0957-0233/24/9/095401,1.0,0040-5175
|
||||||
|
10.1088/1674-4527/20/5/67,1.0,1674-4527
|
||||||
|
10.1088/1742-6596/1168/2/022044,1.0,1573-062X
|
||||||
|
10.1088/1742-6596/1391/1/012083,1.0,2571-631X
|
||||||
|
10.1088/1742-6596/1618/2/022065,1.0,2071-1050
|
||||||
|
10.1088/1757-899X/156/1/012002,1.0,1742-6596
|
||||||
|
10.1088/1757-899X/324/1/012077,6.0,1134-3060; 2076-3417; 2640-4567; 1359-4311; 0020-7543
|
||||||
|
10.1088/1757-899X/459/1/012075,1.0,0040-5175
|
||||||
|
10.1088/1757-899X/711/1/012017,1.0,2079-6412
|
||||||
|
10.1088/1757-899X/739/1/012048,1.0,2261-236X
|
||||||
|
10.1108/CI-11-2019-0133,4.0,0926-5805; 1562-3599; 0969-9988; 2071-1050
|
||||||
|
10.1108/ECAM-11-2019-0640,3.0,2071-1050; 1472-5967
|
||||||
|
10.1108/IMDS-01-2018-0033,5.0,0360-5442; 0268-3768; 0951-192X; 1741-038X; 1463-7154
|
||||||
|
10.1108/RPJ-06-2012-0058,15.0,2214-8604; 2411-5134; 1355-2546; 1738-494X; 2523-3963; 0268-3768; 1955-2513; 2631-8695
|
||||||
|
10.1108/RPJ-12-2016-0210,4.0,2076-3417; 0268-3768; 0010-4485; 0730-6679
|
||||||
|
10.1109/ACCESS.2017.2657006,57.0,2079-9292; 1077-5463; 1424-8220; 1532-0626; 1868-5137; 2288-6206; 0268-3768; 2076-3417; 2334-5837; 1386-145X; 2332-9017; 0141-9331; 1474-0346; 0926-5805; 1996-1073; 2050-7038; 0890-0604; 2071-1050; 2227-9717; 0010-485X; 1074-5351; 0954-4054; 0020-7543; 2078-2489; 2073-8994; 1742-6596; 0951-192X; 2213-8463; 2572-6668; 0929-6212; 1747-7778; 1617-9846; 1751-7575; 2424-8622
|
||||||
|
10.1109/ACCESS.2017.2756069,56.0,2040-4166; 0954-4062; 1868-5137; 2288-6206; 0268-3768; 2075-1702; 2076-3417; 0953-7287; 1474-0346; 2516-8398; 2227-7080; 0965-9978; 2071-1050; 2156-485X; 1367-5788; 2227-9717; 2095-8099; 0954-4054; 0020-7543; 0360-5442; 1530-9827; 1742-6596; 1729-8814; 0951-192X; 2234-7593; 1747-7778
|
||||||
|
10.1109/ACCESS.2017.2766453,35.0,2050-7038; 2076-3417; 2079-9292; 0890-0604; 1424-8220; 1729-8814; 2267-1242; 0951-192X; 0944-6524; 1050-0472; 1868-5137; 2095-8099; 0268-3768; 2075-1702; 0954-4054; 2391-5439; 0020-7543
|
||||||
|
10.1109/ACCESS.2018.2793265,66.0,1573-062X; 1866-7910; 2041-1723; 2079-9292; 2079-3197; 1424-8220; 0029-5981; 1868-5137; 2288-6206; 0268-3768; 1741-0398; 2075-1702; 2333-5777; 2076-3417; 1746-5664; 1478-0771; 0953-7287; 1092-7026; 2332-9017; 1471-4175; 1474-0346; 0138-9130; 0926-5805; 2227-7080; 2352-9407; 2071-1050; 1367-5788; 1087-1357; 1469-1930; 2095-8099; 0265-671X; 0954-4054; 0020-7543; 0360-5442; 2058-8437; 1742-6596; 0951-192X; 1476-1122
|
||||||
|
10.1109/ACCESS.2018.2890566,7.0,2076-3417; 0888-3270; 1367-5788; 0951-192X; 0925-2312; 2078-2489
|
||||||
|
10.1109/ACCESS.2019.2891060,5.0,1367-5788; 0020-7543; 1729-8814
|
||||||
|
10.1109/ACCESS.2019.2893309,5.0,0161-0457; 0951-192X; 1678-5878; 1063-293X; 0020-7543
|
||||||
|
10.1109/ACCESS.2019.2897018,4.0,0268-3768; 0013-7944; 1424-8220; 1751-7575
|
||||||
|
10.1109/ACCESS.2019.2909828,11.0,1134-3060; 2079-9292; 2398-6352; 1617-4909; 1424-8220; 2214-7853; 0010-485X; 1793-9623; 1751-7575
|
||||||
|
10.1109/ACCESS.2019.2923610,8.0,2076-3417; 2640-4567; 1742-6596; 0263-2241; 1424-8220; 2524-521X; 2095-8099
|
||||||
|
10.1109/ACCESS.2019.2928141,9.0,2076-3417; 1424-8220; 2072-4292; 1678-5878; 2073-8994
|
||||||
|
10.1109/ACCESS.2019.2946515,4.0,2071-1050; 1367-5788; 0969-9988
|
||||||
|
10.1109/ACCESS.2019.2950507,2.0,2076-3417; 1424-8220
|
||||||
|
10.1109/ACCESS.2019.2950955,1.0,1367-5788
|
||||||
|
10.1109/ACCESS.2019.2953499,7.0,2076-3417; 1098-1241; 2073-431X; 1424-8220; 2213-8463
|
||||||
|
10.1109/ACCESS.2020.2970143,10.0,2076-3417; 2071-1050; 1742-6596; 2470-0045; 2227-9717
|
||||||
|
10.1109/ACCESS.2020.2971576,1.0,2073-431X
|
||||||
|
10.1109/ACCESS.2020.2974241,1.0,0268-3768
|
||||||
|
10.1109/ACCESS.2020.2974810,3.0,2504-4494; 2071-1050; 1424-8220
|
||||||
|
10.1109/ACCESS.2020.2981745,13.0,2076-3417; 2161-3915; 1225-6463; 2079-9292; 2071-1050; 1999-5903; 2327-0012; 1424-8220; 1687-1499; 2424-8622
|
||||||
|
10.1109/ACCESS.2020.2998358,8.0,2076-3417; 2071-1050; 1742-6596; 1424-8220; 0096-3003; 1996-1073; 2571-631X
|
||||||
|
10.1109/ACCESS.2020.2998723,3.0,1050-0472; 1474-0346; 2571-631X
|
||||||
|
10.1109/ACCESS.2020.2999871,2.0,2040-2295; 1424-8220
|
||||||
|
10.1109/ACCESS.2020.3000437,1.0,1424-8220
|
||||||
|
10.1109/AIM.2018.8452707,1.0,0951-192X
|
||||||
|
10.1109/BigData.2018.8622412,1.0,0020-7543
|
||||||
|
10.1109/CIST.2018.8596460,1.0,0268-3768
|
||||||
|
10.1109/COASE.2019.8842888,1.0,2267-1242
|
||||||
|
10.1109/COASE.2019.8843166,2.0,2214-8604
|
||||||
|
10.1109/COASE.2019.8843269,1.0,0361-7688
|
||||||
|
10.1109/CyberC.2014.30,1.0,1942-4787
|
||||||
|
10.1109/EDOCW.2018.00021,2.0,0951-192X; 0020-7543
|
||||||
|
10.1109/EIConRus.2019.8656681,1.0,1229-7607
|
||||||
|
10.1109/EMBC.2014.6943963,1.0,1955-2513
|
||||||
|
10.1109/ETFA.2017.8247583,3.0,2288-5048; 1424-8220; 2411-5134
|
||||||
|
10.1109/ETFA.2017.8247712,2.0,0951-192X; 1687-8086
|
||||||
|
10.1109/ETFA.2018.8502467,3.0,0178-2312; 2424-8622
|
||||||
|
10.1109/ETFA.2019.8868954,1.0,0268-3768
|
||||||
|
10.1109/GHTC46095.2019.9033075,1.0,1999-5903
|
||||||
|
10.1109/GLOBECOM38437.2019.9013428,1.0,2076-3417
|
||||||
|
10.1109/HRI.2019.8673015,1.0,2296-9144
|
||||||
|
10.1109/ICAC.2016.29,13.0,1433-2779; 0951-192X; 2364-415X; 1474-0346; 0010-485X; 2288-6206; 1741-038X; 0268-3768; 0020-7543
|
||||||
|
10.1109/ICCCBDA.2018.8386518,1.0,0268-3768
|
||||||
|
10.1109/ICCVE45908.2019.8965086,1.0,1424-8220
|
||||||
|
10.1109/ICE.2019.8792577,1.0,1092-7026
|
||||||
|
10.1109/ICE.2019.8792613,1.0,2523-3963
|
||||||
|
10.1109/ICE.2019.8792622,1.0,2523-3963
|
||||||
|
10.1109/ICE/ITMC49519.2020.9198403,1.0,2076-3417
|
||||||
|
10.1109/ICIMTech.2019.8843814,1.0,2267-1242
|
||||||
|
10.1109/ICITM48982.2020.9080395,1.0,1999-5903
|
||||||
|
10.1109/ICNSC.2018.8361283,1.0,0268-3768
|
||||||
|
10.1109/ICNSC.2018.8361285,1.0,1474-0346
|
||||||
|
10.1109/ICNSC.2018.8361293,3.0,0268-3768; 1742-6596
|
||||||
|
10.1109/ICSE-NIER.2019.00011,1.0,2524-8510
|
||||||
|
10.1109/ICTC.2018.8539690,1.0,0951-192X
|
||||||
|
10.1109/IECON.2018.8591464,2.0,2076-3417; 0009-286X
|
||||||
|
10.1109/IECON.2018.8591653,1.0,1742-6596
|
||||||
|
10.1109/IEEM.2017.8289898,5.0,0951-192X; 0268-3768; 2076-3417; 2424-8622
|
||||||
|
10.1109/INDIN.2016.7819217,8.0,2071-1050; 0951-192X; 1868-5137; 0937-7255; 0268-3768; 0020-7543
|
||||||
|
10.1109/INDIN.2018.8471979,3.0,0268-3768; 2210-464X; 2424-8622
|
||||||
|
10.1109/INDIN.2018.8472014,2.0,0951-192X; 2504-4494
|
||||||
|
10.1109/INDIN.2018.8472083,1.0,2504-4494
|
||||||
|
10.1109/INDIN41052.2019.8972134,2.0,2504-4494; 1424-8220
|
||||||
|
10.1109/INDIN41052.2019.8972267,1.0,2267-1242
|
||||||
|
10.1109/IROS.2016.7759171,1.0,0253-3839
|
||||||
|
10.1109/IS.2018.8710526,1.0,1742-6596
|
||||||
|
10.1109/ISIE.2019.8781529,1.0,2523-3963
|
||||||
|
10.1109/ITAIC.2019.8785703,1.0,2523-3963
|
||||||
|
10.1109/JPROC.2017.2725482,6.0,2051-3305; 2079-9292; 0164-1212; 2213-8463; 1049-8923; 1687-1499
|
||||||
|
10.1109/JPROC.2020.2998530,5.0,1871-6784; 1999-5903; 2076-3417; 2192-113X
|
||||||
|
10.1109/JSYST.2019.2925627,1.0,1996-1073
|
||||||
|
10.1109/KBEI.2015.7436192,1.0,2214-7853
|
||||||
|
10.1109/M2VIP.2018.8600844,2.0,2076-3417; 1474-0346
|
||||||
|
10.1109/MLSD.2018.8551867,1.0,2267-1242
|
||||||
|
10.1109/MSP.2018.2842228,3.0,2476-1508; 0268-3768
|
||||||
|
10.1109/MetroInd4.0IoT48571.2020.9138264,1.0,1996-1073
|
||||||
|
10.1109/NAPS46351.2019.9000371,1.0,1999-5903
|
||||||
|
10.1109/PICMET.2016.7806826,2.0,2161-3915
|
||||||
|
10.1109/RUSAUTOCON.2019.8867800,1.0,1742-6596
|
||||||
|
10.1109/SAS.2019.8706111,1.0,1999-5903
|
||||||
|
10.1109/SEsCPS.2019.00012,2.0,0953-5438; 2076-3417
|
||||||
|
10.1109/SIBIRCON48586.2019.8958367,1.0,0361-7688
|
||||||
|
10.1109/SII.2017.8279217,1.0,1742-6596
|
||||||
|
10.1109/SPEEDAM.2018.8445302,1.0,0937-7255
|
||||||
|
10.1109/SSCI.2017.8285439,1.0,0003-682X
|
||||||
|
10.1109/SYSCON.2017.7934796,3.0,0041-624X; 2334-5837
|
||||||
|
10.1109/SYSOSE.2018.8428748,1.0,0951-192X
|
||||||
|
10.1109/SYSOSE.2019.8753845,1.0,0268-3768
|
||||||
|
10.1109/SYSOSE.2019.8753860,1.0,2523-3963
|
||||||
|
10.1109/SysEng.2016.7753162,7.0,1742-6596; 2214-7853; 0951-192X; 2213-8463; 0268-3768; 0005-1055; 1996-1073
|
||||||
|
10.1109/TII.2018.2804917,19.0,2076-3417; 2071-1050; 1092-7026; 1741-0401; 1424-8220; 0951-192X; 0141-9331; 0178-2312; 1868-5137; 1350-6307; 0926-5805; 0268-3768; 2075-1702; 0020-7543
|
||||||
|
10.1109/TII.2018.2873186,46.0,0888-3270; 1573-062X; 1098-1241; 1424-8220; 1868-5137; 0268-3768; 0026-2714; 2076-3417; 1474-0346; 0926-5805; 1996-1073; 0307-904X; 0306-2619; 2071-1050; 1367-5788; 1087-1357; 0950-7051; 0160-5682; 0954-4054; 0020-7543; 2073-8994; 0360-5442; 0013-7944; 1742-6596; 2470-0045; 2523-3963; 2214-7853; 0951-192X
|
||||||
|
10.1109/TII.2019.2938885,1.0,1996-1073
|
||||||
|
10.1109/TII.2020.2977113,1.0,1424-8220
|
||||||
|
10.1109/TLA.2020.9082917,1.0,1999-5903
|
||||||
|
10.1109/TPEL.2019.2911594,8.0,1367-5788; 1742-6596; 0263-2241; 2194-5756; 0894-3370; 1996-1073; 2073-8994
|
||||||
|
10.1109/TSMC.2019.2930418,4.0,2071-1050; 0020-7543; 1424-8220
|
||||||
|
10.1109/TWC.2019.2927312,2.0,0268-3768; 1999-4893
|
||||||
|
10.1109/UCC-Companion.2018.00039,1.0,0361-7688
|
||||||
|
10.1109/WF-IoT.2018.8355217,1.0,2214-7853
|
||||||
|
10.1109/WSC.2018.8632242,3.0,2076-3417; 2523-3963; 2213-8463
|
||||||
|
10.1109/WSC40007.2019.9004659,2.0,2076-3417; 0020-7543
|
||||||
|
10.1111/caim.12082,8.0,0963-1690; 0954-4062; 1363-9196; 1955-2513; 0934-9839
|
||||||
|
10.1111/cgf.14023,1.0,0167-7055
|
||||||
|
10.1111/exsy.12064,7.0,1042-6914; 0952-1976; 0254-5330; 0377-2217; 0361-2317; 1687-5265; 0950-7051
|
||||||
|
10.1117/12.2042170,2.0,1674-1056; 1644-9665
|
||||||
|
10.1134/S0005117915080111,1.0,0005-1179
|
||||||
|
10.1145/3061639.3079847,1.0,2214-8604
|
||||||
|
10.1155/2011/154798,65.0,0888-3270; 1047-4838; 0001-1452; 1868-5137; 1350-6307; 2364-415X; 0268-3768; 2075-1702; 1687-5966; 2076-3417; 2193-9764; 2332-9017; 2468-2322; 1475-9217; 0926-5805; 0307-904X; 0161-0457; 0268-4012; 2071-1050; 2156-485X; 1367-5788; 2227-9717; 0360-3199; 1050-0472; 0020-7543; 0022-460X; 1478-422X; 0013-7944; 1530-9827; 0951-192X; 2213-8463; 1687-8086; 2261-236X; 1751-7575
|
||||||
|
10.1155/2013/263218,1.0,1687-725X
|
||||||
|
10.1155/2014/439278,17.0,0376-9429; 2451-9049; 2071-1050; 0013-7944; 1367-5788; 2332-9017; 1424-8220; 2214-7853; 0094-9930; 1868-5137; 2364-415X; 0268-3768; 2571-631X
|
||||||
|
10.1155/2014/648562,2.0,0264-1275; 2073-4360
|
||||||
|
10.1155/2020/8888876,2.0,1424-8220
|
||||||
|
10.1177/0040517516632471,5.0,1558-9250; 0040-5175
|
||||||
|
10.1177/0954405412463857,14.0,2214-8604; 1355-2546; 2050-7526; 0264-1275; 1087-1357; 1779-6288; 1050-0472; 1745-2759; 0268-3768; 0954-4054
|
||||||
|
10.1177/0954405413500663,1.0,1748-006X
|
||||||
|
10.1177/0954406212473037,4.0,1674-7321; 0954-4828; 0954-4062
|
||||||
|
10.1177/0954406219854466,3.0,1050-0472; 1424-8220; 1087-1357
|
||||||
|
10.1177/1847979019828570,2.0,1847-9790
|
||||||
|
10.1186/s40323-020-00147-4,1.0,0268-3768
|
||||||
|
10.13196/j.cims.2017.01.001,1.0,1868-5137
|
||||||
|
10.13196/j.cims.2017.04.010,1.0,2076-3417
|
||||||
|
10.13196/j.cims.2017.08.001,1.0,0951-192X
|
||||||
|
10.13196/j.cims.2019.01.001,2.0,1687-8086; 1742-6596
|
||||||
|
10.1515/auto-2017-0133,4.0,0178-2312; 1093-9687; 2073-8994
|
||||||
|
10.1515/auto-2019-0039,5.0,0178-2312; 2076-3417; 1367-5788; 1742-6596
|
||||||
|
10.1515/eng-2020-0039,1.0,1424-8220
|
||||||
|
10.1515/eng-2020-0040,1.0,2076-3417
|
||||||
|
10.1515/itit-2017-0038,1.0,0951-192X
|
||||||
|
10.1515/mspe-2019-0004,2.0,2076-3417
|
||||||
|
10.1515/orga-2017-0017,20.0,2076-3417; 1746-5664; 2043-9377; 2071-1050; 0001-5970; 0953-7287; 1955-2513; 0951-192X; 1868-5137; 2288-6206; 1747-7778; 1366-5545; 0954-4054
|
||||||
|
10.15439/2017F253,1.0,1424-8220
|
||||||
|
10.21917/ijsc.2016.0173,2.0,1947-9344; 0256-2499
|
||||||
|
10.2514/1.J055201,25.0,0888-3270; 1098-1241; 0001-1452; 1424-8220; 0748-8017; 0029-5981; 1868-5137; 1350-6307; 0268-3768; 2076-3417; 2332-9017; 0307-904X; 2571-631X; 1367-5788; 0954-4054; 2073-8994; 0013-7944; 1530-9827; 0951-192X; 0892-7219; 1024-123X; 1573-2479
|
||||||
|
10.3103/S1068798X19060194,1.0,1068-798X
|
||||||
|
10.3103/S1068798X19100101,1.0,1068-798X
|
||||||
|
10.3103/S1068798X19120104,2.0,1742-6596; 1996-1073
|
||||||
|
10.3233/FI-2020-1943,2.0,2078-2489; 1367-4803
|
||||||
|
10.3390/app10020486,2.0,2076-3417; 2414-4088
|
||||||
|
10.3390/app10072377,2.0,2076-3417; 1424-8220
|
||||||
|
10.3390/app10082854,1.0,1424-8220
|
||||||
|
10.3390/app10103342,3.0,2076-3417
|
||||||
|
10.3390/app10103633,1.0,2076-3417
|
||||||
|
10.3390/app10134678,2.0,2071-1050; 1424-8220
|
||||||
|
10.3390/app10186519,2.0,2076-3417
|
||||||
|
10.3390/app9183780,8.0,2076-3417; 2075-5309; 1471-4175
|
||||||
|
10.3390/app9245567,5.0,1099-4300; 2076-3417
|
||||||
|
10.3390/designs4020009,1.0,1742-6596
|
||||||
|
10.3390/electronics9020319,6.0,2079-6374; 1424-8220; 1996-1073
|
||||||
|
10.3390/en12101909,8.0,2079-6412; 2073-4352; 1996-1073
|
||||||
|
10.3390/en12122389,7.0,0360-5442; 2073-4352; 1996-1073
|
||||||
|
10.3390/en13184762,1.0,1996-1073
|
||||||
|
10.3390/en13184979,1.0,1996-1944
|
||||||
|
10.3390/en13205413,1.0,2075-1702
|
||||||
|
10.3390/fi12090159,1.0,2076-3417
|
||||||
|
10.3390/fi12100163,1.0,2076-3417
|
||||||
|
10.3390/ijgi6070208,1.0,2267-1242
|
||||||
|
10.3390/ijgi9040228,3.0,2071-1050; 2412-3811; 1996-1073
|
||||||
|
10.3390/jmmp4030092,1.0,2504-4494
|
||||||
|
10.3390/jmse8030200,3.0,2076-3417; 1996-1073; 2077-1312
|
||||||
|
10.3390/machines7010002,3.0,0141-9331; 1076-2787; 2076-3417
|
||||||
|
10.3390/mi11060614,3.0,0264-1275; 2073-4360; 0032-3888
|
||||||
|
10.3390/pr7020094,12.0,1871-6784; 2227-9717; 2296-4185
|
||||||
|
10.3390/pr7080537,1.0,0263-2241
|
||||||
|
10.3390/pr8070866,1.0,2227-9717
|
||||||
|
10.3390/s17112488,12.0,2076-3417; 1424-8220; 2504-446X; 2072-4292; 1385-2256; 0378-3774; 0143-1161; 2078-2489
|
||||||
|
10.3390/s19173781,6.0,2227-9717; 1424-8220
|
||||||
|
10.3390/s19204410,1.0,0268-3768
|
||||||
|
10.3390/s20010097,4.0,2071-1050; 2076-3417; 1424-8220
|
||||||
|
10.3390/s20041187,1.0,1687-8086
|
||||||
|
10.3390/s20123515,2.0,1424-8220
|
||||||
|
10.3390/s20133709,2.0,2071-1050; 1424-8220
|
||||||
|
10.3390/s20164637,1.0,2073-8994
|
||||||
|
10.3390/s20175003,1.0,1424-8220
|
||||||
|
10.3390/su11010159,10.0,2071-1050; 1940-1493; 1996-1073
|
||||||
|
10.3390/su11185036,1.0,1024-123X
|
||||||
|
10.3390/su12030936,3.0,2071-1050; 1424-8220
|
||||||
|
10.3390/su12031088,7.0,2076-3417; 2071-1050; 1742-6596; 1424-8220; 1474-0346; 0020-7543
|
||||||
|
10.3390/su12062286,6.0,2071-1050; 2076-3417; 1996-1073
|
||||||
|
10.3390/su12062307,5.0,2624-6511; 2071-1050; 2220-9964; 1424-8220
|
||||||
|
10.3390/su12072940,1.0,2071-1050
|
||||||
|
10.3991/ijoe.v13i08.7270,1.0,2218-6581
|
||||||
|
10.4028/www.scientific.net/AMM.575.493,9.0,0178-7675; 0263-2241; 1424-8220; 0264-4401; 0268-3768; 0941-0643; 0217-9792; 2053-1591
|
||||||
|
10.4028/www.scientific.net/AMR.472-475.206,1.0,0020-7403
|
||||||
|
10.4028/www.scientific.net/MSF.957.340,1.0,1022-1360
|
|
@ -0,0 +1,40 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/6/6 10:26
|
||||||
|
# @Author : ZhaoXiangPeng
|
||||||
|
# @File : 合并统计.py
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
from 数据处理.文件合并 import join, load_file
|
||||||
|
|
||||||
|
path = 'E:/inspec合并/'
|
||||||
|
files = load_file(path)
|
||||||
|
# files = [f'{path}{f}' for f in files]
|
||||||
|
print(files)
|
||||||
|
|
||||||
|
|
||||||
|
def count(file_name: str):
|
||||||
|
temp_df: pd.DataFrame = pd.read_csv(file_name)
|
||||||
|
# group: pd.Series = temp_df.groupby(by=['doi'])['count'].sum()
|
||||||
|
# return pd.DataFrame(data=group)
|
||||||
|
return temp_df
|
||||||
|
|
||||||
|
|
||||||
|
df0 = pd.read_csv(r'F:\工作数据存储2022\20220526_inspec测试\Digital twin searching result 2.csv')
|
||||||
|
df0 = df0[['DI']]
|
||||||
|
df0.drop_duplicates(inplace=True)
|
||||||
|
big_df = pd.DataFrame()
|
||||||
|
for f in files:
|
||||||
|
t_df = count(path+f)
|
||||||
|
# 重设索引 以doi链接获取count
|
||||||
|
t_df = t_df.reset_index()
|
||||||
|
ts = pd.merge(df0, t_df, how='left', left_on=['DI'], right_on=['doi'])
|
||||||
|
ts = ts[ts['count'].notnull()]
|
||||||
|
big_df = pd.concat([big_df, ts], ignore_index=True)
|
||||||
|
pp = []
|
||||||
|
group_2 = big_df.groupby(by=['doi'])
|
||||||
|
for _, g in group_2:
|
||||||
|
row = {'doi': _, 'count': g['count'].sum(), 'issn': '; '.join(list(set(g['issn'])))}
|
||||||
|
pp.append(row)
|
||||||
|
df = pd.DataFrame(data=pp)
|
||||||
|
df.to_csv('inspec数据库施引测试数据.csv', index=False)
|
||||||
|
|
Loading…
Reference in New Issue