我在我的学校加入了一个数据科学学习社区,我们正在使用linux终端命令和awk命令来练习从存储在csv文件中的大数据集中收集一些信息。一个文件中大约有7140596列29行。
一个样本问题是:“2005年航班的平均到达时间(以分钟为单位)是多少?”其中,我们必须对每一行的延迟值进行求和,然后除以总数。
我知道类似的数据处理可以在潘达斯的木星笔记本上进行,我想知道每种方法的优缺点。
谢谢!
发布于 2018-09-11 23:00:45
熊猫数据集有许多更高级别的功能,可以集成到为您存储数据的基类中。
有些命令行工具可以非常强大地有效地操作文本(特别是Perl),但我认为学习过程非常陡峭,交互体验也不那么友好。首先,简单地浏览一下您的数据或创建一个吸引人的情节并不容易。
虽然我承认我不是专业的awk/sed或Perl用户,但我确信,在这些工具/语言中,做这样的假设计算(包括数值数据和文本)的操作会有点不直观:
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值,所以我们想要删除这些时间步骤。
哦,我们想把它想象出来!
In[5]: df.groupby('A')['C'].rolling(5).mean().dropna().plot(grid=True, legend=True)从这一行代码中,我们可以得到以下信息:

上面的内容还突出了Python环境中其他功能强大的专用包的丰富--在这里,我与Pandas一起使用了numpy。
为了操作文本文件、清理刮过的文本和使用正则表达式解析大量文本,使用命令行选项之一可能会更快,但只要您想要进行任何数据科学,我就建议您使用一些专门的工具,比如Pandas。
发布于 2018-09-11 23:09:50
如果他们直接使用bash来遍历CSV文件,那么这是非常低效率的,并且随着数据库的增长,会导致非常长的查询时间。此外,当您想要进行不标准的分析时,bash很快变得非常复杂,因此您肯定希望使用Python而不是bash。
我的建议是:
然后,您可以使用Python来使用以下方法查询postgres表。
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)https://datascience.stackexchange.com/questions/38119
复制相似问题