您好,我是为了写论文要利用Python进行一个文本分析的处理。但本人之前从未接触过Python,学了一段时间后发现要实现功能还是很困难,所以前来寻求大家的帮助。我的数据是公司回答投资者问题的文本数据。就会出现一家公司一年内有好几行回答问题的文本。我要实现的功能是将回答内容那一列的文本,按照公司和年份进行合并(也就是把一家公司一年所有回答内容合并到一个单元格中)然后将中带有一些特定关键字的句子都筛选出来,并进行语调积极程度的分析,最终想要得到的是该公司在该年语调积极程度评分。请问这个用Python代码怎么实现呢?因为没有Python基础,所以自己在编写代码上有困难,希望可以得到大家的帮助,谢谢!
我的原始数据长这样:
就是按照前两列合并?这个我帮你写了一个
import pandas as pd
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
# 读取Excel文件
filename = 'data.xlsx'
df = pd.read_excel(filename, sheet_name='Sheet1')
# 根据股票代码和会计年度进行分组并连接内容
grouped = df.groupby(['股票代码', '会计年度'], sort=False)['内容'].apply(''.join).reset_index()
# 创建新的Excel文件并写入数据
new_filename = 'merged_data.xlsx'
sheet_name = 'Sheet2'
book = Workbook()
writer = pd.ExcelWriter(new_filename, engine='openpyxl')
writer.book = book
grouped.to_excel(writer, sheet_name=sheet_name, index=False)
writer.save()
# 调整列宽以适应数据
wb = load_workbook(new_filename)
ws = wb[sheet_name]
for column in ws.columns:
max_length = 0
column = column[0].column_letter
for cell in ws[column]:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
ws.column_dimensions[column].width = adjusted_width
wb.save(new_filename)
至于语调分析,这个你可以找找相关的库去计算
不知道你这个问题是否已经解决, 如果还没有解决的话:回答:
首先,我们需要安装一些基本的包来完成这个任务,包括pandas
用于数据处理,nltk
用于自然语言处理。可以使用pip安装:
pip install pandas nltk
接下来,我们需要导入这些包,代码如下所示:
import pandas as pd
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
然后我们需要读取Excel文件中的数据,可以使用pandas提供的read_excel方法,代码如下所示:
df = pd.read_excel('example_file.xlsx')
接下来,我们需要按照公司和年份对回答进行分组,同时筛选出含有特定关键字的句子。这可以通过pandas中的groupby和filter来完成,代码如下所示:
# 设定关键字
keywords = ['sustainability', 'ethics']
# 分组并过滤
grouped = (df.groupby(['company', 'year'])
.filter(lambda x: any(k in x['response_text'].lower() for k in keywords)))
接下来,我们需要对筛选出来的句子进行情感分析,这里我们使用nltk中提供的SentimentIntensityAnalyzer进行处理,代码如下所示:
# 初始化情感分析器
sid = SentimentIntensityAnalyzer()
# 对每条回答进行情感分析,并且计算出它的积极程度分数
scores = grouped['response_text'].apply(lambda x: sid.polarity_scores(x)['pos'])
# 将结果添加到dataframe中
grouped['positive_score'] = scores
最后,我们需要把数据按照要求整理成特定的格式,并输出到一个新的Excel文件中。可以使用pivot_table将数据透视成特定的样子,代码如下所示:
# 整理数据,将积极程度分数转化为平均分数
results = (grouped.pivot_table(index=['company', 'year'],
values='positive_score', aggfunc='mean')
.reset_index())
# 写入excel中
results.to_excel('result_file.xlsx', index=False)
最终,得到的result_file.xlsx
文件中的数据格式如下图所示: