第一节数据存储
在大数据时代,各领域都为数据分析提供海量的数据源。数据可以分为非结构化数据、半结构化数据和结构化数据。对于数据分析师而言,工作中经常面对的数据格式有excel数据,JSON数据,以及SQLite等数据库数据。因此,本章节将以这三种格式的数据为例,讲解数据的常用存取方法。
-
对于csv格式文件,可以用csv模块的csv.reader()方法读取,也可以利用pandas的read_csv()方法读取。
-
对于xlsx和xls格式文件,可以用pandas和read_Excel()方法读取
-
对于txt格式文件,可以用pandas的read_table()读取并导入文件。
一、CSV格式数据的导入
序号 | 天气 | 是否周末 | 是否有促销 | 销量 |
---|---|---|---|---|
1 | 坏 | 是 | 是 | 高 |
2 | 坏 | 是 | 是 | 高 |
3 | 坏 | 是 | 是 | 高 |
4 | 坏 | 否 | 是 | 高 |
5 | 坏 | 是 | 是 | 高 |
-
方法(1)使用csv.reader()的方式进行读取,代码如下:
import csv with open('D:/大数据/items/10-5.csv','r',encoding='utf8')as csvfile: reader=csv.reader(csvfile) for row in reader: print(row)
**panda库和csv库的区别
-
panda输出的每一行,最前面的数字是行索引号
import pandas as pd df=pd.read_csv('D:/大数据/items/10-5.csv',encoding='utf8') print(df)
3.对于Excel数据的xls和xlsx的文件,可用pandas的read_Excel()方式导入
import pandas as pd import xlrd df=pd.read_excel("D:/大数据/items/10-5.xls") print(df)
这种方法需要安装xlrd库,并且xlrd库只支持xls文件(不支持xlsx文件)
二、JSON格式数据的导入
【例】某数据分析师通过队网站爬虫获取各个网站的用户数据sites.json,数据包括了用户的id,其访问的网站名,网站的url地址,以及用户所喜欢的产品,部分示例数据如下:
{
"id":["1","2","3"],
"name":["Google","Runoob","Taobao"],
"url":["www.google.com","www.runoob.com","www.taobao.com"],
"like":[11,22,33]
}
【解】如果从json文件中读取内容,利用python的loads()方法加载文件,需要注意的是,json.loads()读取的json字符串,因此需要先用read()方法读取文件“data.json”的每一行,然后利用loads()方法加载为字典形式**,程序语句如下:
import json with open('D:/大数据/items/10-5.json','r',encoding='utf-8')as file: str=file.read() data=json.loads(str) print(data)
ps:注意json的格式
三、SQLite格式数据的导入
SQLite是一个软件库,实现了自给自足、无服务器的、零配置的、事务性的SQL数据库引擎。SQLite是在世界上最广泛部署的SQL数据库引擎。SQLite源代码不受版权限制。
【例】请采用python内置的sqlite数据库,创建一个sales_table的数据表包含时间,城市和销售值三个字段,三个字段的类型分别为文本型、文本型和实数型,并插入两条数据‘2021-01-10’,‘beijing’,10000和2020-01-10‘,’shanghai‘,15000。最后从数据库中查询sales_table中的所有数据样本。
【解】可以利用sqlite3的connect方法连接数据库,然后利用pandas的read_sql_query()方法读取数据库表格,程序代码如下所示:
import sqlite3 import pandas as pd with sqlites3.connect('text_database.sqlite')as con: df = pd.read_sql_query('SELECT * FROM sales_table',con=con) print(df)
四、txt文本格式数据导入
【例】戈丁的数据集abalone.txt 记录了鲍鱼的一些 比较容易获得的量测数据,一次为属性的名称、数据类型、单位和描述,如下表所示。
【解】用pandas模块的read_table()方法进行读取
import pandas as pd stock = pd.read_table('D:/大数据/items/shushu.txt',sep='\t') stock.head(n=2)###意为读入数据前两行
五、专业数据库平台的数据导入
【例】从yahoo数据源获取2015年1月1日至今宝洁公司(PG)的股票交易数据,交易数据包括最高价、最低价、开盘价、收盘价、成交量、调整收盘价、简单收益率。
【解】某些数据源平台提供了数据读取的接口api,如Tushare平台提供了get_hist_data方法读取股票数据,程序代码如下:
import tushare as ts ts.get_hist_data('600848',start='2021-01-05',end='2021-07-10')
第二节输出数据
-
对于csv格式文件,python的csv模块库提供了csv.writer()方法对数据进行写入操作。
-
对于xls和xlsx格式文件,python提供了xlsx文件的存取库slsxwriter和oopenpyxl,分别用于xlsx文件的写入和读取。
-
对于txt格式文本,可以使用python的open方法打开文件,然后调用write()方法对文本文件进行写入输出。
-
对于json格式文件,python提供了dumps()方法用于将json对象转换成字符串,然后再调用文件的write()方法写入文件并保存。
一、CSV格式数据输出
【例】利用CSV库提供的writer()方法,将新增的一行销售数据写入原文件sales.csv中,对元数据进行覆盖,并将其另存到备份文件stock_bake.csv中。
【解】csv库提供了writer()方法进行写入操作。具体来说,csv.writer(csvfile,dialect='Excel',**fmtparams)方法可以将数据写入指定文件,其参数与csv.reader()方法中的参数含义相同。程序语句如下:
import csv with open('D:/大数据/items/10-5.csv','w')as csvfile: writer = csv.writer(csvfile) writer.writerow([57,'faker','mid','hati','forever']) print('数据输出完成!')
【解】采用pandas库中的to_csv()方法,也可以将数据存储为csv格式,程序语句如下所示:
import pandas as pd df = pd.read_csv('D:/大数据/items/10-5.csv',encoding='utf-8') df.to_csv('D:/大数据/items/10-5(2).csv') df1 = pd.read_csv('D:/大数据/items/10-5(2).csv') print(df1)
输出结果:
Empty DataFrame Columns: [Unnamed: 0, 57, faker, mid, hati, forever] Index: []
二、xlsx格式数据输出
【例】对于上述问题,如销售文件格式为sales.xlsx文件,这种情况下该如何处理?
【解】python提供了xlsx文件的存取库xlsxwrite,用于xlsx的写入和读取。
import os import xlsxwriter data = xlsxwriter.Workbook('D:/大数据/items/10-5.xlsx') worksheet = data.add_worksheet('表1')##sheet的名字 worksheet.write('A1',"57,'faker','hati','love','forever'") data.close()
三、json格式数据输出
【例】某数据分析师通过对网站爬虫获取各个网站的用户数据sites.json,数据包括了用户的id,其访问的网站名,网站的url地址,以及用户所喜欢的产品,数据文件格式是sites.json格式,存储位置为D盘,这种情况下如何将一条形式如下的新记录,写入文件并进行保存?
【解】python提供了dumps()方法用于将json对象转换成字符串,然后再调用文件的write()方法写入文件并保存,程序语句如下:
import json data = [{ 'id':'57', 'name':'faker', 'adress':'soul', 'likes':'hati' }] with open('D:/大数据/items/10-5.json','w',encoding='utf-8')as file: ##下面是最关键的一行 file.write(json.dumps(data,indent=2,ensure_ascii=False)) with open('D:/大数据/items/10-5.json','r',encoding='utf-8')as file: str = file.read() ##用json.load()转换才能读取 data = json.loads(str) print(data)
四、txt格式数据输出
【例】给定的数据集abalone.txt记录了鲍鱼的一些比较容易获得的量测数据,一次为属性的名称、数据类型、单位和描述,如下表所示。请利用python写入一条形式如下的数据,并保存。
性别 | 长度 | 直径 | 高度 | 整体重量 | 肉重量 | 内脏重量 | 壳重 | 年龄 |
---|---|---|---|---|---|---|---|---|
0 | 0.35 | 0.25 | 0.07 | 0.1605 | 0.0715 | 0.0335 | 0.046 | 6 |
【解】可以使用python的open方法打开文件,然后调用write()方法对文本文件进行写入输出。
f=open('d:/大数据/items/shushu.txt','w') f.write("0,57,130,131,120,112,1103") f.close()
注意:’w'输出方式将覆盖原有文件内容,如果想在文件尾部追加数据,可以使用‘a'
f=open('d:/大数据/items/shushu.txt','a') f.write("0,57,130,131,120,112,1103") f.close()
五、章节练习
1.餐饮企业的决策者想要了解影响餐厅销量的一些因素,如天气的好坏,促销活动,周末和非周末销量的区别。对于数据集sales.csv,为某餐厅收集的数据,请将其转换为txt格式后,利用python方法进行读取导入。
Pandas 数据的导入和导出
Pandas能从文本文件和Excel文件中读入数据,形成dataframe,也可以将dataframe导出到文本文件、Excel文件中存储起来。
导入函数有(1)pd.read_csv():导入后缀名为.csv,.txt的文本文件;(2)pd.read_excel():导入后缀名为.xlsx的Excel文件。
导出函数有(1)df.to_csv)():将数据存储到csv文件或txt文件中;(2)df.to_excel():将数据存储到Excel文件中;
无论是导入函数还是导出函数,都有参数 header,表示 dataframe 的列索引。而行索引在导入函数中用参数 index_col 表示,将某列指定为行索引;行索引在导出函数中用参数 index 表示,指示是否要存好行索引。
题目代码:
import pandas as pd df=pd.read_csv("d:/大数据/items/10-12.csv",encoding="gbk") print(df) df.to_csv("d:/大数据/items/10-14.txt") df=pd.read_csv("d:/大数据/items/10-14.txt",encoding="utf-8") print(df)
2.对于本章给定的数据集 abalone.txt记录了鲍鱼(一种壳类水生生物)的一些比较容易获得的量测数据,依次为属性的名称,数据类型,单位和描述,请将其手动转换成csv和xlsx格式后,利用python进行读取和导入
import pandas as pd abalone = pd.read_table("d:/大数据/items/10-14.txt",sep="\t") print(abalone) abalone.to_csv("d:/大数据/items/10-14.csv") abalone.to_excel("d:/大数据/items/10-14.xls") abalone = pd.read_csv("d:/大数据/items/10-14.csv",sep="\t") print(abalone) abalone = pd.read_excel("d:/大数据/items/10-14.xls") print(abalone)
3.请利用Tushare平台提供的get_hist_data()方法来获取2021年2月10日至2022年2月10日期间段内代码‘600848’为股票交易数据,交易数据包括:开盘价,最高价,收盘价,最低价,成交量,价格波动,涨跌幅,5日平均。。。等。
import tushare as ts data = ts.get_hist_data('600848',start='2022-2-10',end='2022-2-10') print(data)
4.对于给定的数据库文件test_database.sqlite,数据形式如下所示,请利用python对数据库中的sales_table文件读取导入。
import sqlite3 import pandas as pd with sqlite3.connect('test_database.sqlite') as con: df = pd.read_sql_query("SELECT * FROM sales_table",con=con) print(df)
5.某数据分析师通过对网站爬虫获取哥哥网站的用户数据sites.json, 数据包括了用户id,其访问的网站名,url地址,用户喜欢的茶农。请利用python读入导入后,将结果保存并输出到d盘sites.csv格式文件中。
import json data = [{ 'id': '4', 'name': 'baidu', 'url': 'zhizhi', 'like':'shushu' }] with open('d:/大数据/items/10-14.csv','w',encoding='utf-8')as file: ##json.dump() :将python中的对象转化成json储存到文件中 ##indent表示缩进,ensure_ascii设置编码 file.write(json.dumps(data,indent=2,ensure_ascii=False))