2016-04-11 29 views
-2

Amaç, bu twitter dosyasını tweet'lerle açmak ve trendi konuları anlatmak için sık sık hashtag'leri sipariş etmek, bunu daha önce sordum ama kodumu biraz değiştirdim ve nokta nerede hashtag'leri ve miktarı yazdırıyor, ama nasıl ben bu sipariş ve collections.Counter() object kullanın Aksine bir sözlüğe dahaEn yüksek ile en düşük arasındaki sıklığa göre sipariş verme

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: Bu, ters sırayla * değer * ile sıralanıyor. Üstelik bu bir sayım işleminden oluşur .. –

cevap

0

sizin outfile veri yazmak için csv lib kullanılarak most_common ile Counter dicti kullanın:

defalarca Döngünüzden aramadan daha daha verimli olacak tüm hatlarda str.capitalize eşler map(str.capitalize, data) kullanma
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()) 

, writerows iterables yinelenen alır bu yüzden outfile her satırına most_common döndürülen tag, count tuples yazacaktır.

+0

Bu mesajın bazılarında, #BULLYING ve #bullying sahip oldukları mesajlarda aynı hashtag olarak saymayı nasıl başarabileceğimi çabucak teşekkür ettiniz. .captalize() düzgün çalışıyorsa idk – Rashid

+1

sanırım sadece işe yaradı düşünüyorum: D – Rashid

+0

@Rashid, olması gerektiği gibi çalışmalı, eğer dosyanın bir örneğini eklerseniz bir göz atacağım –

0

trending.txt denilen başka bir dosyaya göndermek istiyorum;

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) 

Counter.most_common() method en sık olandan en az olana, sıralanmış sırada (key, count) değerleri üretir: o kutudan istediğiniz işlevselliği içeren bir ihtisas sözlüğüdür. Bir tamsayı verilirse tarafından döndürülen kayıtların sayısını sınırlamak edebilirsiniz: for tag in data sadece kez yineleme olacak

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) 

Not; İlk satırı okur, bundan sonra for line in data: dosyanın geri kalanını işler. Bunun yerine o döngünün next(data, None) kullanabilirsiniz:

import csv 

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

yukarıda: Eğer (virgülle ayrılmış verileri) CSV dosyası üretmek çalışıyorsanız

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 

Son olarak, csv module kullanmak tüm sayıları, sıralanmış sırayla CSV dosyasına yazar.

İlgili konular