2016-11-20 112 views
1

Pythonista 3(PythonのiOSアプリ)でデータ分析をしようとしていますが、iOSデバイスでコンパイルされないパンダのCライブラリがあるためです。PandasのないCSVファイルをフィルタリングする方法は? (Pythonistaのパンダのベスト代替)

パンダに代わるものはありますか? numpyは、タイプstringのデータのオプションですか?現時点で私が持っている

データセットは、全体の歴史は1つのcsvファイルである私の友人とI.

間のメッセージの履歴です。各行に 'day_of_the_week'、 'date'、 'time_of_message'、 'author_of_message'、 'message_body'の各列があります。

この分析の目的は、過去1年間のチャットのレポートを作成することです。

各友達が送信したメッセージの数を数えたいと思っています。私は、メッセージが各友達から送られた時間のヒストグラムをプロットできるようにしたい。 次に、私は個人的に、そしてグループとしていくつかの単語を数えたいと思います。

パンダで私はそれをどうやって行うのか知っています。例:

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

パンダなしでcsvファイルをフィルタリングするにはどうすればよいですか?

+0

Pythonistaの正確な制限はわかりませんが、numpyはpandasと似た要件を持っています。したがって、pandasがそうでない場合はうまくいかないでしょう。 あなたがしたいことについていくつかの詳細を追加すると、より適切な結果を得るのに役立ちます –

+0

私はnumpyとPandasについて同じ考えをしました。しかし、それはpythonistaが提供するものです。私は、このパッケージを有効にするために、Pythonでnumpyをコンパイルしたアプリの開発者だと思います。とにかく、問題をより明確にするために質問を編集しました。 – zeh

+0

numpyが機能しない場合は、標準ライブラリツールを使ってcsvを 'records'のリストに読み込むことができます(namedtupleはあなたの友人かもしれませんが)。これは、物事を問い合わせたいときにfor-loopsをたくさん必要とします。私はsqliteとして軽量dbmsがこれを改善できるかどうかはわかりません。 –

答えて

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) 

これですべてのメッセージが辞書のリストとして表示されます。

また、collections.namedtupleと組み合わされた通常のcsvリーダーを使用して、名前の付いたタプルのリストを作成することもできます。これは、アクセスがやや簡単です。

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のを持っているので、あなたはこの種の問題にnumpyののアプローチですrecarrays、見たいと思うでしょう。以下は私のためPythonistaに箱から出して働いていた:

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

をあなたのデータ形式によっては、TOUは、データ型を推測しようとするのでrecsfromcsvは、「ただ働き」、またはあなたは、物事をカスタマイズする必要があるかもしれないことがあります少し。データ型を明示的に指定する方法や、文字列の日付をdatetimeオブジェクトに変換するコンバータを使用する方法については、多くのオプションについてはgenfromtextを参照してください。 recsfromcsvgenfromtext一度recarrayで

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

周りだけconvieneceラッパーで、シンプルなインデックス操作の多くは、パンダのように同じように機能します。上記のように、Unicode文字列に変換しない限り、b接頭文字列(バイトオブジェクト)を使用して文字列比較を行う必要があることに注意してください。

関連する問題