数据分析--数据采集方法
数据采集方法
本文主要是个人学习过程中记录的笔记,此部分内容包括常见的数据文件的存储和读取,通常在使用Python读取数据文件比较推荐Pandas模块,当然在对Excel进行读取和操作时也可以配合openpyxl
,xlwings
等。由于此前是使用JupyterNotebook
进行编写和学习的,如果使用其它工具来观察文中的案例结果可能还需要你使用print
来打印。
Excel和CSV文件
-
Excel 表格有最大的行数存储限制(16,384列 x 1,048,576行)
-
CSV 是通过字符分隔数据并以纯文本形式存储,无最大行数的存储限制
下面是对简单的文件读写操作:
import numpy as np import pandas as pd # 生成示例数据 df = pd.DataFrame({'A':np.random.randn(10), 'B':np.random.randn(10)}) # 写入为Excel和CSV文件 df.to_csv('test.csv',index=None) df.to_excel('test.xlsx',index=None) print("*****实例文件写入成功*****")
-
接下来是对文件的读取操作,注意读取Excel文件时,首先需要在运行环境中安装
openpyxl
模块,否则会报错pd.read_csv('test.csv') pd.read_excel('test.xlsx')
HDF5格式
-
HDF
(Hierarchical Data Format) 一种为存储和处理大容量科学数据设计的文件格式及相应库文件 -
HDF5
格式的特点在于能存储多个数据集,并支持metadata
-
包含两种基本数据对象:
- 群组(group):类似文件夹,可以包含多个数据集或下级群组
- 数据集(dataset):数据内容,可以是多维数组,也可以是更复杂的数据类型
-
该文件格式还能被Java,MATLAB,Octave,,Julia,R等语言或商业软件支持
-
存储和读取
HDF5
文件需要安装模块PyTables
,安装命令为:pip install tables
-
下列存储示例数据时,
df2
后面指定format='table'
参数。这是因为,HDF
支持两种存储架构:fixed 和 table。默认为fixed
,因为其读取速度更快,但是table
却支持查询操作df1 = pd.DataFrame({'A': np.random.randn(10), 'B': np.random.randn(10)}) # 随机数据 df2 = pd.DataFrame({'C': np.random.randn(10), 'D': np.random.randn(10)}) # 随机数据 df1.to_hdf('test.h5', key='df1') # 存储 df1 df2.to_hdf('test.h5', key='df2', format='table') # 存储 df2 pd.read_hdf('test.h5',key='df1') # 读取 pd.read_hdf('test.h5',key='df2',where=['index < 5']) # 查询df2中index<5的数据
JSON
-
JSON
(JavaScript Object Nation) 属于JavaScript的一个子集,但它是独立于语言的文本格式 -
JSON
的官方MIME类型是application/json
,文件扩展名是.json
-
HTTP请求过程中的标准数据格式
# JSON的示例数据 obj = """ [ { "aqi": 46, "area": "成都", "pm2_5": 32, "pm2_5_24h": 33, "position_name": "金泉两河", "primary_pollutant": null, "quality": "优", "station_code": "1431A", "time_point": "2018-09-05T09:00:00Z" }, { "aqi": 29, "area": "成都", "pm2_5": 20, "pm2_5_24h": 26, "position_name": "十里店", "primary_pollutant": null, "quality": "优", "station_code": "1432A", "time_point": "2018-09-05T09:00:00Z" } ] """
-
JSON
数据中的key
必须是字符串类型,缺失值用null
表示 -
Pandas中的
read_json
往往能直接把JSON
解析为DataFrame
pd.read_json(obj)
-
JSON
支持复杂嵌套,用上面方法读取不一定回是我们想要的,某些键值以列表或字典存在,此时就需要换种工具解析 -
使用内建库
json
,将其转换为Python的数据类型(Python Object),json.loads(obj)
import json obj = json.loads(obj) obj
- 然后就可以使用Python对字典、列表的方法来处理
obj[0]['position_name'] # 将Python Object 转换为JSON类型 json.dumps(obj)
read_
操作参数详解
- Pandas 中的
read_
操作可不仅仅是加载数据文件这么简单,它带有的一些参数可以实现更加个性化的读取结果。我们以pandas.read_csv()
的 API 为例。
pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
path
:路径不仅仅可以读取本地文件,还支持远程 URL 链接。sep
:支持按特定字符分割。header
:可以指定某一行为列名,默认是第一行。names
:自定义列名。skiprows
:指定忽略某些行。na_values
:对空值进行指定替换操作。parse_dates
:尝试将数据解析为日期。nrows
:读取指定行数的数据。chunksize
:指定分块读取数据大小。encoding
:指定文件编码。
# 读取CSV文件忽略前四行 pd.read_csv("test.csv",skiprows=range(1,5))
分块读取数据
-
直接读取一个 GB 级别的
CSV
文件时,不仅速度很慢,还有可能因为内存不足而报错。此时,通过分块读取的方式加载数据文件就非常方便了 -
通过上面的
read_
参数可以看出,分块读取需要指定chunksize
,也就是每一块的大小
''' chunker 返回的 pandas.io.parsers.TextFileReader`是一个可迭代对象。你可以通过 `get_chunk() 逐次返回每一个块状数据的内容 ''' chunker = pd.read_csv("test.csv", chunksize=2) chunker.get_chunk() # 迭代返回分块数据内容 '''多次迭代后返回的分块内容超过文件大小会报错'''
下面是一个数据文件读取转换的案例:
import pandas as pd def conver(file): fileobj = open(file) filedata = fileobj.read() jsondata = json.loads(filedata)[:1000] df = pd.DataFrame(jsondata) df.to_hdf("convert.h5",key='data')
上述代码中的convert()
函数功能是读取JSON
文件前1000行然后转为HDF5
格式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?