首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫与Linux数据科学

熊猫与Linux数据科学
EN

Data Science用户
提问于 2018-09-11 21:18:12
回答 2查看 994关注 0票数 4

我在我的学校加入了一个数据科学学习社区,我们正在使用linux终端命令和awk命令来练习从存储在csv文件中的大数据集中收集一些信息。一个文件中大约有7140596列29行。

一个样本问题是:“2005年航班的平均到达时间(以分钟为单位)是多少?”其中,我们必须对每一行的延迟值进行求和,然后除以总数。

我知道类似的数据处理可以在潘达斯的木星笔记本上进行,我想知道每种方法的优缺点。

谢谢!

EN

回答 2

Data Science用户

回答已采纳

发布于 2018-09-11 23:00:45

熊猫数据集有许多更高级别的功能,可以集成到为您存储数据的基类中。

有些命令行工具可以非常强大地有效地操作文本(特别是Perl),但我认为学习过程非常陡峭,交互体验也不那么友好。首先,简单地浏览一下您的数据或创建一个吸引人的情节并不容易。

虽然我承认我不是专业的awk/sed或Perl用户,但我确信,在这些工具/语言中,做这样的假设计算(包括数值数据和文本)的操作会有点不直观:

代码语言:javascript
复制
In [1]: import pandas as pd
In [2]: import numpy as np

# Create a DataFrame holding some data over a time range

In [3]: df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                                  'foo', 'bar', 'foo', 'foo']*4,
                           'B' : ['one', 'one', 'two', 'three',
                                  'two', 'two', 'one', 'three']*4,
                           'C' : np.random.randn(32)},
                          index=pd.date_range('01.01.2018', periods=32))

In [4]: df.head()
Out[4]:
              A      B         C
2018-01-01  foo    one  0.965554
2018-01-02  bar    one  0.053814
2018-01-03  foo    two  1.075539
2018-01-04  bar  three -0.999941
2018-01-05  foo    two -1.940361

现在假设我们希望对行进行分组,以便在一个表中只包含列A foo的行,而另一个表只包含包含foo的行。

从这两个表中,我们只关心列C。我们要在5天的时间框架内计算移动平均值。移动平均线在开始时会留下一些NaN值,所以我们想要删除这些时间步骤。

哦,我们想把它想象出来!

代码语言:javascript
复制
In[5]: df.groupby('A')['C'].rolling(5).mean().dropna().plot(grid=True, legend=True)

从这一行代码中,我们可以得到以下信息:

上面的内容还突出了Python环境中其他功能强大的专用包的丰富--在这里,我与Pandas一起使用了numpy

为了操作文本文件、清理刮过的文本和使用正则表达式解析大量文本,使用命令行选项之一可能会更快,但只要您想要进行任何数据科学,我就建议您使用一些专门的工具,比如Pandas。

票数 1
EN

Data Science用户

发布于 2018-09-11 23:09:50

如果他们直接使用bash来遍历CSV文件,那么这是非常低效率的,并且随着数据库的增长,会导致非常长的查询时间。此外,当您想要进行不标准的分析时,bash很快变得非常复杂,因此您肯定希望使用Python而不是bash。

我的建议是:

  • 使用Linux作为您的操作系统
  • 设置一个数据库,如postgres http://postgresguide.com/setup/install.html
  • 构建一个刮板,将存储在CSV文件中的数据输入postgres中的表中。
  • 根据您将执行的查询在数据上创建一些索引,以显著减少查询延迟。

然后,您可以使用Python来使用以下方法查询postgres表。

代码语言:javascript
复制
import pandas as pd
import psycopg2

sql = "SELECT arrival_delay FROM table_name WHERE year = 2005"
conn = psycopg2.connect(**params)
df = pd.read_sql(sql, conn)
票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/38119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档