Mam dataframe zawierającą wiadomości na każdy dzień. zawierającą wiadomości na każdy dzień. Próbuję analizować intensywność uczuć na dany dzień. Można powiedzieć, że ogólne odczucie dnia z wiadomości jest pozytywne, negatywne lub neutralne. Oto ramka danych `df_news` :
Date name
0 2017-10-20 Gucci debuts art installation at its Ginza sto...
1 2018-08-01 Gucci Joins Paris Fashion Week for Its Spring ...
2 2018-04-20 Gucci launches its new creative hub Gucci ArtL...
3 2017-10-20 Gucci to launch homeware line Gucci Decor - CP...
4 2017-12-07 GUCCI opens new store at Miami Design District...
5 2018-01-12 Gucci opens Gucci Garden in Florence - LUXUO
6 2018-02-26 GUCCI's wild experiment with the Fall Winter 2...
7 2018-08-09 Gucci Revamped London Flagship Store | The Imp...
8 2018-08-01 Alessandro Michele Announces new Gucci Home co...
9 2017-10-20 Before He Picks Up the CFDA’s International Aw...
Próbował uzyskać intensywność uczuć za pomocą następującego kodu, który używa [SentimentIntensityAnalyzer] [1] z [nltk.sentiment.vader] [2]:
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import unicodedata
sid = SentimentIntensityAnalyzer()
for date, row in df_news.T.iteritems():
try:
sentence = unicodedata.normalize('NFKD', df_news.loc[date, 'name']).encode('ascii','ignore')
#print((sentence))
ss = sid.polarity_scores(str(sentence))
df_news.set_value(date, 'compound', ss['compound'])
df_news.set_value(date, 'neg', ss['neg'])
df_news.set_value(date, 'neu', ss['neu'])
df_news.set_value(date, 'pos', ss['pos'])
except TypeError:
print(df_news.loc[date, 'name'])
print(date)
Jednak otrzymuję TypeError dla niektórych dat. Dzięki "try catch" nie bierze tego pod uwagę i rysuje mi następującą tabelę:
name compound neg neu pos
Date
2017-10-20 Gucci debuts art installation at its Ginza sto...
2018-08-01 Gucci Joins Paris Fashion Week for Its Spring ...
2018-04-20 Gucci launches its new creative hub Gucci ArtL... 0.4404 0 0.756 0.244
2017-10-20 Gucci to launch homeware line Gucci Decor - CP...
2017-12-07 GUCCI opens new store at Miami Design District... 0 0 1 0
2018-01-12 Gucci opens Gucci Garden in Florence - LUXUO 0 0 1 0
2018-02-26 GUCCI's wild experiment with the Fall Winter 2... 0 0 1 0
2018-08-09 Gucci Revamped London Flagship Store | The Imp... 0.3182 0 0.602 0.398
2018-08-01 Alessandro Michele Announces new Gucci Home co...
2017-10-20 Before He Picks Up the CFDA’s International Aw...
Ale kiedy usunę try catch, aby zrozumieć, dlaczego to się nie udało, pojawia się następujący błąd:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-2e9dbfc62bce> in <module>
4 for date, row in df_news.T.iteritems():
5 # try:
----> 6 sentence = unicodedata.normalize('NFKD', df_news.loc[date, 'name']).encode('ascii','ignore')
7 #print((sentence))
8 ss = sid.polarity_scores(str(sentence))
TypeError: normalize() argument 2 must be str, not Series
Wtedy pomyślałem, że problem dotyczy linii, które nie były ciągami, ale. Na przykład z pierwszym:
>>>type(df_news['name'][0])
str