2016-11-20 27 views
1

我想在Pythonista 3(iOS應用程序for python)上做一些數據分析,但是因爲熊貓的C庫不能在iOS設備中編譯。如何過濾沒有熊貓的CSV文件? (在Pythonista中最佳替代熊貓)

熊貓有什麼替代品嗎? 對於string類型的數據,numpy會是一個選項嗎?

的數據集我目前所面對的是我的朋友和我

的整個歷史是一個CSV文件之間的消息歷史記錄。每一行都有「day_of_the_week」,「date」,「time_of_message」,「author_of_message」,「message_body」這幾列。分析的目標是生成過去一年的聊天報告。

我希望能夠統計每個朋友發送的消息數量。我希望能夠繪製每個朋友發送消息的小時直方圖。 然後,我想單獨進行一些字詞統計,並將其作爲一個組。

在熊貓我知道該怎麼做。例如:

df = read_csv("messages.csv") 
number_of_messages_friend1 = len(df[df.author_of_message == 'friend1'] 

如何過濾沒有熊貓的csv文件?

+0

我不知道Pythonista的確切限制,但numpy對熊貓有類似的要求 - 所以如果熊貓沒有,它不太可能工作。 添加關於你想做什麼的一些細節可能有助於給出更合適的結果 –

+0

我認爲numpy和Pandas是一樣的。但是這是pythonista提供的。我認爲應用程序的開發者在python中編譯numpy來啓用這個包。無論如何,我編輯了這個問題讓我的問題更清楚。 – zeh

+0

如果numpy不起作用,您可以使用標準庫工具將csv讀入「記錄」列表中(命名爲「可以是您的朋友」),但是當您要查詢事物時,這會導致大量的for循環。我不知道一個輕量級dbms作爲sqlite是否可以解決這個問題。 –

回答

0

使用標準庫中的csv模塊來讀取消息。 您可以將其存儲在collections.namedtuple的列表中以便於訪問。

import csv 

messages = [] 
with open('messages.csv') as csvfile: 
    reader = csv.DictReader(csvfile, fieldnames=('day_of_the_week', 'date', 'time_of_message', 'author_of_message', 'message_body')) 
    for row in reader: 
     messages.append(row) 

這給你所有的消息作爲詞典列表。

或者,您可以使用普通的csv閱讀器與collections.namedtuple相結合來創建一個命名元組的列表,這些列表稍微容易訪問。

import csv 
from collections import namedtuple 

Msg = namedtuple('Msg', ('day_of_the_week', 'date', 'time_of_message', 'author_of_message', 'message_body')) 

messages = [] 
with open('messages.csv') as csvfile: 
    msgreader = csv.reader(csvfile) 
    for row in msgreader: 
     messages.append(Msg(*row)) 
2

由於Pythonista確實有numpy,所以您需要查看recarrays,這是numpy針對此類問題的方法。下面摸索出在Pythonista的箱子我:

import numpy as np 
df=np.recfromcsv('messages.csv') 
len(df[df.author_of_message==b'friend1']) 

根據您的數據格式,土特產品可能會發現,recsfromcsv「只是工程」,因爲它試圖猜測的數據類型,或者您可能需要自定義的東西一點點。請參閱genfromtext瞭解多種選項,例如明確指定數據類型或使用轉換器將字符串日期轉換爲日期時間對象。 recsfromcsv只是圍繞genfromtext

https://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html#

一個convienece包裝一旦recarray,許多簡單的索引操作的工作方式相同的大熊貓。請注意,您可能需要使用帶b前綴的字符串(字節對象)進行字符串比較,除非您轉換爲unicode字符串,如上所示。