gpt4 book ai didi

python - 嵌套的 For 循环与计算对比。线性过程

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:04 27 4
gpt4 key购买 nike

我正在遍历 M 个数据框,每个数据框都包含一个包含 N 个 URL 的列。对于每个 URL,我提取段落文本,然后在计算“情感”分数之前进行文本分析的标准清洗。

我这样做是否更有效率:

  1. 按原样继续(在 URL for 循环本身中计算分数)

  2. 首先从 URL 中提取所有文本,然后分别遍历文本列表/列?

还是没有什么区别?

当前在循环本身内运行计算。每个 DF 有大约 15,000 - 20,000 个 URL,所以它也花费了大量的时间!

# DFs are stored on a website
# I extract links to each .csv file and store it as a list in "df_links"

for link in df_links:
cleaned_articles = []
df = pd.read_csv(link, sep="\t", header=None)
# Conduct df cleaning
# URLs for articles to scrape are stored in 1 column, which I iterate over as...
for url in df['article_url']:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
para_text = [text.get_text() for text in soup.findAll('p')]
text = " ".join(para_text)
words = text.split()

if len(words) > 500:
# Conduct Text Cleaning & Scores Computations
# Cleaned text stored as a variable "clean_text"
cleaned_articles.append(clean_text)

df['article_text'] = cleaned_articles
df.to_csv('file_name.csv')

最佳答案

要回答这个问题,如果您下载数据然后对其进行分析,应该不会有太大的不同。您只需重新安排执行一组任务的顺序,这些任务实际上会花费相同的时间。

唯一的区别可能是,如果文本语料库相当大,那么磁盘的读写时间将开始发挥作用,因此在内存中运行分析可能会更快一些。但这仍然不能真正解决您的问题。

我可以大胆地将您的问题重新解释为:“我的分析花费的时间太长了,请帮助我加快速度!”

这听起来像是多处理的完美用例!由于这听起来像是一个数据科学项目,如果您使用的是 ipython 笔记本(如 Jupyter),则需要pip install multiprocess,如果使用 python 脚本,则需要import multiprocessing .这是因为 python 在进程之间传递信息的方式,尽管多进程和多处理的 API 是相同的,但不要担心!

加速分析的一种基本且简单的方法是缩进 for 循环并将其放入函数中。然后可以将该函数传递给一个多处理映射,该映射可以产生多个进程并同时对多个 url 进行分析:

from multiprocess import Pool
import numpy as np
import os
import pandas as pd
num_cpus = os.cpu_count()

def analytics_function(*args):
#Your full function including fetching data goes here and accepts a array of links
return something

df_links_split = np.array_split(df_links, num_cpus * 2) #I normally just use 2 as a rule of thumb
pool = Pool(num_cpus * 2) #Start a pool with num_cpus * 2 processes
list_of_returned = pool.map(analytics_function, df_links_split)

这将启动大量进程并充分利用您的 CPU。你将无法在你的计算机上做很多其他事情,你需要打开你的资源监视器来检查你没有最大化你的内存并减慢/崩溃进程。但它应该可以显着加快您的分析速度,大约是 num_cpus * 2 倍!!

关于python - 嵌套的 For 循环与计算对比。线性过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56704952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com