2011-07-28 8 views
7

Python ortamımda Rpy ve Scipy paketleri zaten yüklü.Python: geniş bir veri kümesinin işlenmesi. Scipy veya Rpy? Ve nasıl?

Ben mücadele etmek istiyorum sorun şekildedir:

1) finansal verilerin büyük bir set bir metin dosyasına kaydedilir. Excel'e yükleme mümkün değil

2) Belirli alanları toplamalı ve toplamları almam gerekiyor.

3) Toplam 10 satıra toplamı göstermem gerekiyor.

Bu paket için hangi paket (Scipy veya Rpy) daha uygundur? Öyleyse, bana bir çözüm üretmeme yardımcı olabilecek bazı işaretçiler (örneğin, dokümantasyon veya çevrimiçi örnek) verebilir misiniz?

Hız bir husustur. İdeal bir şekilde scipy ve Rpy, dosyalar o kadar büyük olduğunda bile büyük dosyaları işleyebilirler. Bellek

+0

Bazı yararlı bilgileri şu adreste bulabilirsiniz: http://www.dabeaz.com/generators-uk/ – lazy1

+1

'Büyük set' tam olarak sizin durumunuzda ne anlama geliyor? – radek

cevap

2

@ GSK3 belirtildiği gibi, bigmemory paketleri biganalytics ve bigtabulate birlikte bu büyük bir pakettir (orada daha vardır, ancak bunlar kontrol dışarı değer). ff da var, ancak kullanımı kolay değil.

Hem R hem de Python için ortak olan, HDF5'i desteklemektir (R'deki ncdf4 veya NetCDF4 paketleri), diskteki büyük veri kümelerine çok hızlı ve kolay erişilmesini sağlar. Şahsen, ben özellikle R spesifik olan bigmemory kullanın. Python'da HDF5 mevcut olduğundan ve çok hızlı bir şekilde, muhtemelen Python'da en iyi bahis olacak.

5

Ne tür Rpy veya Scipy gerekli olsa da, numpy biraz daha kolaylaştırabilir. Bu sorun, bir satır içi ayrıştırıcı için ideal olarak uygun görünüyor. Dosyayı açın, bir satırı bir dizgeye okuyun, satırı bir diziye tarayın (bkz. Numpy.fromstring), çalışan miktarlarınızı güncelleyin ve bir sonraki satıra geçin.

1

Rpy hakkında hiçbir şey bilmiyorum. SciPy'nin gerçekten büyük veri kümeleriyle ciddi bir şekilde çakışmasını sağlamak için kullanıldığını biliyorum, bu yüzden sorunlarınız için çalışmalı.

Zephyr'in belirttiği gibi, ikisinden birine ihtiyacınız olmayabilir; Eğer bazı koşulan miktarları tutmanız gerekiyorsa, muhtemelen Python'da yapabilirsiniz. Bir CSV dosyası veya başka bir ortak dosya biçimiyse, sizin için ayrıştıracak bir Python modülünün olup olmadığını kontrol edin ve ardından uygun değerleri toplayan bir döngü yazın.

En iyi on satırı nasıl alacağımı bilmiyorum. Giderken onları anında toplayabilir misiniz, yoksa toplamları hesaplayıp sonra satırları mı seçmelisiniz? Onları toplamak için, geçerli 10 en iyi satırın kaydını tutmak için bir sözlük kullanmak isteyebilirsiniz ve bunları sıralamak için kullandığınız metriği saklamak için anahtarları kullanabilirsiniz (başka bir satırın yerini alması durumunda bir satır bulmayı ve satır atmayı kolaylaştırmak için)). Hesaplama bittikten sonra satırları bulmanız gerekiyorsa, tüm verileri bir numpy.array haline getirin ya da on satırı almak için dosyadan ikinci bir geçiş yapın.

3

Python'un Dosya G/Ç'sinin performansı kötü değil, bu nedenle file modülünü doğrudan kullanabilirsiniz. Etkileşimli işlevli çeviricide help (file) yazarak hangi işlevlerin kullanılabildiğini görebilirsiniz. Bir dosya oluşturmak çekirdek dil işlevselliğinin bir parçasıdır ve import file'u gerektirmez. gibi

şey:

f = open ("C:\BigScaryFinancialData.txt", "r"); 
for line in f.readlines(): 
    #line is a string type 
    #do whatever you want to do on a per-line basis here, for example: 
    print len(line) 

Yasal Uyarı: Bu bir Python 2 cevaptır. Bu Python 3'te çalıştığından% 100 emin değilim.

En üstteki 10 satırın nasıl gösterileceğini ve satır toplamlarının nasıl bulunacağını bulmak için onu size bırakacağım. Bu, herhangi bir özel kütüphane olmadan bir problem olmamalı basit program mantığı ile yapılabilir. Elbette, satırların değerleri ayrıştırmayı zorlaştıran karmaşık bir biçimlendirmesi varsa, örneğin ayrıştırma için bir çeşit modül kullanmak isteyebilirsiniz, örneğin (help(re) etkileşimli yorumlayıcıya yazın).

2

Verileriniz ne kadar büyük, bilgisayarınızın belleğinden daha büyük mü? Hafızaya yüklenebiliyorsa, numpy.loadtxt() öğesini kullanarak numpy dizisine metin verilerini yükleyebilirsiniz. örneğin:

import numpy as np 
with file("data.csv", "rb") as f: 
    title = f.readline() # if your data have a title line. 
    data = np.loadtxt(f, delimiter=",") # if your data splitted by "," 
    print np.sum(data, axis=0) # sum along 0 axis to get the sum of every column