Ik probeer een CSV te bouwen met twee timeseries. Één timeseries met occurences per uur, en één aan de hand van sentiment analysis. De input is een set CSV's met een tweet en een timestamp, en als output probeer ik dus het aantal tweets per uur te krijgen, en een gemiddeld sentiment per uur. Het eerste is natuurlijk niet zo spannend en ook het tweede hoort niet zo spannend te zijn: bij positive "assign" ik een 1 en en bij negative een 0. In principe is met het gemiddelde van de values dit te berekenen.
Ik kom er echter totaal niet uit.
Ik weet dat ik in principe een DataFrame moet maken met die pos/neg (0/1) ratings erbij, daarna met Timegrouper uit Pandas moet in principe het gemiddelde wel uit te rekenen zijn, als ik naar de documentatie kijk.
Ter verduidelijking: dit is een voorbeeld van de input waarmee ik werk:

De achtste kolom bevat natuurlijk de timestamp (belangrijk voor de timeseries) en de vijfde kolom de inhoud (belangrijk voor sentiment).
Dit is de output die ik probeer te krijgen:

En dit is de code waarmee ik het probeer uit te voeren. De problemen centreren zich dus rond a] het creëren van een dataframe met die sentiment rating (0/1) en b] dat dataframe zo zien te bewerken dat dat gemiddelde sentiment in een timeseries terecht komt.
Ik kom er echter totaal niet uit.
Ter verduidelijking: dit is een voorbeeld van de input waarmee ik werk:

De achtste kolom bevat natuurlijk de timestamp (belangrijk voor de timeseries) en de vijfde kolom de inhoud (belangrijk voor sentiment).
Dit is de output die ik probeer te krijgen:

En dit is de code waarmee ik het probeer uit te voeren. De problemen centreren zich dus rond a] het creëren van een dataframe met die sentiment rating (0/1) en b] dat dataframe zo zien te bewerken dat dat gemiddelde sentiment in een timeseries terecht komt.
code: test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| import os import pandas as pd import csv import numpy as np import nltk.classify.util from nltk.classify import NaiveBayesClassifier from nltk.corpus import movie_reviews def word_feats(words): return dict([(word, True) for word in words]) negids = movie_reviews.fileids('neg') posids = movie_reviews.fileids('pos') negfeats = [(word_feats(movie_reviews.words(fileids=[f])), 'neg') for f in negids] posfeats = [(word_feats(movie_reviews.words(fileids=[f])), 'pos') for f in posids] negcutoff = len(negfeats)*3/4 poscutoff = len(posfeats)*3/4 trainfeats = negfeats[:negcutoff] + posfeats[:poscutoff] testfeats = negfeats[negcutoff:] + posfeats[poscutoff:] print 'train on %d instances, test on %d instances' % (len(trainfeats), len(testfeats)) classifier = NaiveBayesClassifier.train(trainfeats) # print 'accuracy:', nltk.classify.util.accuracy(classifier, testfeats) # classifier.show_most_informative_features() mydir = './CSV/' for path, dirs, files in os.walk(mydir): for filename in files: if not filename.endswith('series.csv'): fullpath = os.path.join(path, filename) ## Read CSV dataframe = pd.read_csv(fullpath, parse_dates = {'Timestamp' : [7]}, index_col = 'Timestamp', header = None) dataset = dataframe[4].tolist() for sentence in dataset: pos = 0 neg = 0 sentiment = classifier.classify(word_feats(sentence)) if sentiment == 'neg': neg+=1 elif sentiment == 'pos': pos+=1 print pos, neg hourlycount = dataframe.resample('H').count() dataframe = hourlycount[0].to_frame() dataframe['game'] = fullpath dataframe['nominal timeslot'] = dataframe.index.hour # print dataframe # dataframe.to_csv('alltimeseries.csv', sep=',', encoding='utf-8', mode='a', header=False) |
So now, less than five years later, you can go up on a steep hill in Las Vegas and look West, and with the right kind of eyes you can almost see the high-water mark — that place where the wave finally broke and rolled back.