我的桌面上有一个名为' companyfollowerstweets'其中包含91个文件夹,每个文件夹名为' followerstweets(公司名称)',它们都包含200个csv文件,每个文件包含Twitter上该公司关注者的最新推文。我在前200行中进行情绪分析,其中包含每家公司200名粉丝中的每一位的推文,其中结果被添加到一个列表中,最终给出了每个公司一个结果;所有40,000条推文的负推文和正推文的百分比(每200个粉丝200条推文)。希望这是有道理的。现在我只设法在每个文件夹的200个csv文件上运行一个循环,每次我手动输入公司的名称。但是,我希望在我不必输入公司名称的情况下运行这91个文件夹中的每一个。这是我的代码:
import nltk
import csv
import sklearn
import nltk, string, numpy
from sklearn.feature_extraction.text import TfidfVectorizer
from collections import defaultdict
from sklearn.feature_extraction.text import CountVectorizer
columns = defaultdict(list)
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfTransformer
import math
import sentiment_mod as s
import glob
import itertools
lijst = glob.glob('companyfollowerstweets/followerstweetsCisco/*.csv')
tweets1 = []
sent1 = []
print(lijst[0])
for item in lijst:
stopwords_set = set(stopwords.words("english"))
with open(item, encoding = 'latin-1') as d:
reader1=csv.reader(d)
next(reader1)
for row in itertools.islice(reader1,200):
tweets1.extend([row[2]])
words_cleaned = [" ".join([words for words in sentence.split() if 'http' not in words and not words.startswith('@')]) for sentence in tweets1]
words_filtered = [e.lower() for e in words_cleaned]
words_without_stopwords = [word for word in words_filtered if not word in stopwords_set]
tweets1 = words_without_stopwords
tweets1 = list(filter(None, tweets1))
for d in tweets1:
new1 = s.sentiment(d)
sent1.extend(new1)
total1 = len(sent1)/2
neg_percentage1 = (sent1.count("neg")/total1)*100
pos_percentage1 = (sent1.count("pos")/total1)*100
res = sum(sent1[1::2])/total1
low = min(sent1[1::2])
high = max(sent1[1::2])
print("% of negative Tweets:", neg_percentage1)
print("% of positive Tweets:", pos_percentage1)
print("Total number of Tweets:", total1)
print("Average confidence:", res)
print("min confidence:", low)
print("max confidence:", high)
这个具体的例子适用于公司'思科'如你看到的。如何为这个文件夹中的每个文件夹保留此代码?
答案 0 :(得分:0)
os.walk()
)上的 os.getcwd()
就是您想要的。这将以递归方式迭代当前工作目录中的所有内容。
答案 1 :(得分:0)
你可以像这样使用嵌套的glob:
from glob import glob
[glob(i+'/*.csv') for i in glob('companyfollowerstweets/followerstweets*')]
这将返回一个列表列表(每个公司的推文列表)。
请注意,这不会有任何特定的顺序。
答案 2 :(得分:0)
你可以做两个循环或使用os.walk
,后者更干净:
import os
company_results={}
for root, dirs, files in os.walk('companyfollowerstweets'):
if len(dirs)==0:
results=do_analysis(files)
company_results[root]=results
我建议将所有分析放在一个功能更清晰的代码中。然后你可以用上面的代码得到所有结果的字典。