修改后的代码如下:

import pandas as pd import os

指定数据文件和输出文件路径

data_folder = '202305CHErefRA/' # 共现矩阵数据文件夹路径 base_folder = 'COS-SCbased/' # COS-SCbased文件夹路径 data_file = '202305CHErefRA.dta' # 数据文件名 output_file = 'output.csv' # 输出文件名

加载数据文件并提取pubyearn变量

data_df = pd.read_stata(os.path.join(data_folder, data_file)) pubyearn = data_df['pubyearn']

定义函数用于计算Dis并输出结果到DataFrame中

def calc_dis(base_path, dim_num): dis_list = [] for pubid in range(1, len(pubyearn) + 1): file_name = 'che{:03}.csv'.format(pubid) year = int(str(pubyearn[pubid - 1]).split('.')[0]) if year < 1950: base_file = '1925.xlsx' elif year < 1980: base_file = '1955.xlsx' else: base_file = '1985.xlsx'

    # 从基础文件中读取S_ij数值
    base_df = pd.read_excel(os.path.join(base_folder, base_file), sheet_name=pubid - 1, header=None)
    base_df = base_df.fillna(0)
    S_ij = (base_df.values.sum() - base_df.values.diagonal().sum()) / (dim_num * (dim_num - 1))

    # 计算Dis值
    dis_value = (1 - S_ij) / (dim_num * (dim_num - 1))
    dis_list.append(dis_value)

return pd.DataFrame({'pubid': range(1, len(pubyearn) + 1), 'Dis': dis_list})

提取共现矩阵维度数

dim_num = pd.read_csv(os.path.join(data_folder, 'che001.csv')).shape[0]

计算Dis并输出到CSV文件

dis_df = calc_dis(base_folder, dim_num) output_path = os.path.join(data_folder, output_file) dis_df.to_csv(output_path, index=False)

主要修改了计算S_ij的部分代码,使用.values将DataFrame转换为numpy数组,这样就可以直接使用diag方法计算对角线元素的和了。同时,也修改了计算Dis的代码,使用的是dim_num而不是dim_num-1作为除数

import pandas as pdimport os# 指定数据文件和输出文件路径data_folder = 202305CHErefRA # 共现矩阵数据文件夹路径base_folder = COS-SCbased # COS-SCbased文件夹路径data_file = 202305CHErefRAdta # 数据文件名output_file = outputcsv # 输出文件

原文地址: http://www.cveoy.top/t/topic/fbow 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录