当Excel遇到大数据问题,是时候用Python来拯救了

发表于:2020-5-19 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:机器学习与数据分析

#
Python
分享:
  与从事分析工作的人交谈,他们会告诉你他们对Excel的爱恨情仇:
  Excel能做很多事情;当涉及到更大的数据集时,这简直是一种痛苦。数据需要很长时间才能加载,在你意识到机器的内存耗尽之前,整个事情就变得无法管理了。更不用说Excel最多只能支持1,048,576行。
  如果有一种简单的方法,那就是将数据传输到SQL数据库中进行分析。这就是Python拯救世界的方式。
  
  Python中的SQL
  首先,让我们研究一下在Python中使用SQL时最流行的选项:MySQL和SQLite。
  MySQL有两个流行的库:PyMySQL和MySQLDb;而SQLite有SQLite3。
  SQLite就是所谓的嵌入式数据库,这意味着它在我们的应用程序中运行,因此不需要先在某个地方安装它(不像MySQL)。
  这是一个重要的区别;在我们寻求快速数据分析的过程中起着关键作用。因此,我们将继续学习如何使用SQLite。
  在Python中设置SQLite
  我们需要做的第一件事是导入库:
 import sqlite3
  然后,我们需要确定是否要在任何地方保存这个数据库,还是在应用程序运行时将它保存在内存中。
  如果决定通过导入任何数据来实际保存数据库,那么我们必须给数据库一个名称,例如' FinanceExplainedDb ',并使用以下命令:
   dbname = 'FinanceExplainedDb'
  conn = sqlite3.connect(dbname + '.sqlite')
  另一方面,如果我们想把整个东西保存在内存中,并在完成后让它消失,我们可以使用以下命令:
 conn = sqlite3.connect(':memory:')
  至此,SQLite已经全部设置好,可以在Python中使用了。假设我们在Table 1中加载了一些数据,我们可以用以下方式执行SQL命令:
   cur = conn.cursor()
  cur.execute('SELECT * FROM Table1')
  for row in cur:
  print(row)
  现在让我们探索如何通过使用pandas的应用程序使数据可用。
  使用pandas加载数据
  假设我们已经有了数据,我们想要进行分析,我们可以使用Pandas库来做这件事。
  首先,我们需要导入pandas库,然后我们可以加载数据:
   import pandas as pd
  #if we have a csv file
  df = pd.read_csv('ourfile.csv')
  #if we have an excel file
  df = pd.read_excel('ourfile.xlsx')
  一旦我们加载数据,我们可以把它直接放入我们的SQL数据库与一个简单的命令:
 df.to_sql(name='Table1', con=conn)
  如果在同一个表中加载多个文件,可以使用if_exists参数:
 df.to_sql(name='Table1', con=conn, if_exists='append')
  在处理较大的数据集时,我们将无法使用这个单行命令来加载数据。我们的应用程序将耗尽内存。相反,我们必须一点一点地加载数据。在这个例子中,我们假设每次加载10,000行:
   chunksize = 10000
  for chunk in pd.read_csv('ourfile.csv', chunksizechunksize=chunksize):
  chunk.to_sql(name='Table1', con=conn, if_exists='append')
  把所有的东西放在一起
  为了将所有内容综合起来,我们提供一个Python脚本,它涵盖了我们讨论的大部分内容。
   import sqlite3, pandas as pd, numpy as np
  #####Creating test data for us -- you can ignore
  from sklearn import datasets
  iris = datasets.load_iris()
  df1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
  df1.to_csv('TestData.csv',index=False)
  ###########################
  conn = sqlite3.connect(':memory:')
  cur = conn.cursor()
  chunksize = 10
  for chunk in pd.read_csv('TestData.csv', chunksizechunksize=chunksize):
  chunkchunk.columns = chunk.columns.str.replace(' ', '_') #replacing spaces with underscores for column names
  chunk.to_sql(name='Table1', con=conn, if_exists='append')
  cur.execute('SELECT * FROM Table1')
  names = list(map(lambda x: x[0], cur.description)) #Returns the column names
  print(names)
  for row in cur:
  print(row)
  cur.close()
 
      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号