1

我正在尝试对 Pythonista 3(python 的 iOS 应用程序)进行一些数据分析,但是由于 pandas 的 C 库,它无法在 iOS 设备中编译。

熊猫有什么替代品吗?numpy 会是类型数据的选项string吗?

我现在拥有的数据集是我和朋友之间的消息历史。

整个历史记录在一个 csv 文件中。每行都有“day_of_the_week”、“date”、“time_of_message”、“author_of_message”、“message_body”列

分析的目的是生成我们过去一年聊天的报告。

我希望能够计算每个朋友发送的消息数。我希望能够绘制每个朋友发送消息的小时数的直方图。然后,我想单独和作为一个小组进行一些字数统计。

在 Pandas 中,我知道如何做到这一点。例如:

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

如何在没有 Pandas 的情况下过滤 csv 文件?

4

3 回答 3

3

由于 Pythonista 确实有 numpy,因此您将需要查看 recarrays,这是 numpy 解决此类问题的方法。以下为我在 Pythonista 中开箱即用:

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

根据您的数据格式,tou 可能会发现recsfromcsv“正常工作”,因为它会尝试猜测数据类型,或者您可能需要稍微自定义一些东西。请参阅genfromtext了解许多选项,例如明确指定数据类型或使用转换器将字符串日期转换为日期时间对象。recsfromcsv只是一个方便的包装genfromtext

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

进入recarray 后,许多简单的索引操作与pandas 中的工作方式相同。请注意,您可能需要使用带 b 前缀的字符串(字节对象)进行字符串比较,除非您转换为 unicode 字符串,如上所示。

于 2016-11-20T19:08:43.253 回答
1

使用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 阅读器和 acollections.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))
于 2016-11-20T14:22:35.993 回答
0

Pythonista 现在在 iOS 上有竞争。pyto 应用程序为 python 3.8 提供了 pandas。https://apps.apple.com/us/app/pyto-python-3-8

于 2020-01-05T01:43:29.700 回答