2016-04-11 9 views
-2

Also das Ziel ist es, diese Twitter-Datei mit Tweets zu öffnen und die Hashtags nach Häufigkeit zu ordnen, um die Trendthemen zu erzählen, ich habe das schon vorher gefragt, aber ich habe meinen Code ein bisschen geändert und bin dazu gekommen der Punkt, wo es druckt die Hashtags und die Menge, aber wie würde ich diese bestellen und es in eine andere Datei trending.txtWie man nach Frequenz von am höchsten zum niedrigsten sortiert

counts ={} 
with open("/Users/Adnan/Desktop/twitter_data.txt") as data: 
    for tag in data: 
     for line in data: 
      for part in line.capitalize().split(): 
       if "#" in part: 
        counts[part] = counts.get(part,0) + 1 

for w in counts: 
    print((w+','+str(counts[w])+'/n')) 
+0

@ Smac89: Sortierung nach * Wert *, in umgekehrter Reihenfolge. Dazu gehört ein Zählvorgang. –

Antwort

0

Verwenden Sie ein Counter dict mit most_common die csv lib unter Verwendung der Daten zu Ihrem outfile zu schreiben:

from collections import Counter 
import csv 


with open("/Users/Adnan/Desktop/twitter_data.txt") as data, open("trending.txt") as out: 
    wr = csv.writer(out) 
    counts = Counter(part for tag in map(str.capitalize, data) 
        for part in data.split() 
         if "#" in part) 
    wr.writerows(counts.most_common()) 

map(str.capitalize, data) Mit str.capitalize auf allen Linien abbildet, die effizienter sein wird, in der Schleife als wiederholt aufrufen, Writerows benötigt eine iterierbare Anzahl von Iterablen, so dass die tag, count Tupel, die von most_common zurückgegeben werden, in jede Zeile Ihrer Outfile geschrieben werden.

+0

vielen Dank, das half, schnelle Frage, obwohl in einigen der Beiträge sie #BULLYING und # Mobbing haben, wie würde ich über das Zählen sie als das gleiche Hashtag? idk, wenn die .captalize() funktioniert einwandfrei – Rashid

+1

macht mir nichts ich denke, es hat einfach funktioniert: D – Rashid

+0

@Rashid, es sollte funktionieren, wie es ist, wenn Sie ein Beispiel der Datei hinzufügen, werde ich einen Blick –

0

Anstatt ein Wörterbuch, verwenden sie einen collections.Counter() object genannt senden; es ist ein Fachwörterbuch, das aus dem Feld Ihre gewünschte Funktionalität enthält:

from collections import Counter 

counts = Counter() 
with open("/Users/Adnan/Desktop/twitter_data.txt") as data: 
    for tag in data: 
     for line in data: 
      for part in line.capitalize().split(): 
       if "#" in part: 
        counts[part] += 1 

with open('trending.txt') as trending: 
    for hashtag, count in counts.most_common(): 
     print(hashtag, count, sep=',', file=trending) 

Die Counter.most_common() method erzeugt (key, count) Werte in sortierter Reihenfolge, von am häufigsten zu dest. Sie können, indem man in einer ganzen Zahl die Anzahl der zurückgegebenen Einträge beschränken:

with open('trending.txt') as trending: 
    # The 10 most popular hashtags 
    for hashtag, count in counts.most_common(10): 
     print(hashtag, count, sep=',', file=trending) 

Beachten Sie, dass Ihre for tag in data nur einmal laufen; es wird die erste Zeile lesen, nach der for line in data: den Rest der Datei verarbeitet. Sie könnten next(data, None) anstelle dieser Schleife verwenden:

with open("/Users/Adnan/Desktop/twitter_data.txt") as data: 
    tag = next(data, None) # read the first line 
    for line in data: 
     for part in line.capitalize().split(): 
      if "#" in part: 
       counts[part] += 1 

Last but not least, wenn Sie versuchen, eine CSV-Datei (Comma Separated Daten) zu erzeugen, verwenden Sie die csv module:

import csv 

with open('trending.txt') as trending: 
    writer = csv.csvwriter(trending) 
    writer.writerows(counts.most_common()) 

Die oben schreibt alle Zählwerte in sortierter Reihenfolge in die CSV-Datei.

Verwandte Themen