用Python做数据分析(2)获取数据


本文代码与使用到的公开数据集可在 本人Github 中进行阅读与使用

如何理解数据

数据是指通过观察、测量或收集得到的信息集合。他的存在方式可以是数字、图像、文字、声音。
数据是数据分析的基础,整个数据分析过程通常包括以下几个步骤:

  1. 获取数据: 从数据库,接口服务,txt文件,scv文件等数据源拿到数据
  2. 数据清洗和预处理:对原始数据进行清洗、筛选、去除异常值或缺失值,并进行格式转换和标准化
  3. 探索性分析数据 (EDA) : 对数据进行可视化与统计分析。了解数据的分布特征,相关性。对数据有一个整体的认知。例如网络质量分析:我们单纯从数据层面上来看,可以发现当我们的访问时延越高,我们的下载速度会越差。在没有网络知识基础的情况下也能够知道,下载速度和时延是高度相关的。
  4. 数据建模与分析: 通过适当的统计方法、机器学习算法等,对数据进行建模。发现因此在数据下的潜在规律。
  5. 最终的解释性报告:画出老板想要的图表,得到有价值的结论。

整个数据分析生命周期里贯穿着对数据的操作

如何获取数据

从不同的文件格式获取数据

TXT

TXT: 纯文本文件,往往是没有任何格式或者样式的文本信息。当前很火的gtp的语料库多为这个格式。
接下来用一个简单的例子来说明如何读取TXT文件。
这里以小说 《诡异之主》为例子说明如何使用python读文件。再后续章节会介绍对文本进行词频统计,提取关键字,自动生成摘要的相关算法。

with open("《诡秘之主》.txt","r") as f:
    for i in f.readlines():
        print(i)

这里使用到的函数有:

  1. open() : 打开一个文件:若我们使用 ./文件名或者直接的文件名则可以读去到当前jupyter的同级文件下其运行效果为将文本中的内容打印在交互式单元格内。
  2. with 是 Python 中的一种上下文管理器,它可以用来管理资源的获取和释放。with 语句提供了一种更简洁、更安全的方式来处理文件、网络连接、数据库连接等资源的打开和关闭。在打开文件时通常会适用该功能,防止没有正确的关闭资源
  3. f.readlines() : readlines() 是 Python 文件对象的一个方法,用于一次性读取整个文件的内容,并将每行内容存储为一个字符串元素的列表。该方法可以将我们的文件内容读去到内存中存放在变量里,以便后续对他进行操作。

CSV

CSV(Comma-Separated Values)是一种常见的文本文件格式,用于存储表格数据。它是一种纯文本格式,可以通过逗号或其他字符(如分号、制表符等)作为字段之间的分隔符。

以下是 CSV 文件的一些特点和常见规则:

  1. 分隔符:CSV 文件使用特定字符作为字段之间的分隔符。逗号是最常见的分隔符,但也可以使用其他字符,如分号、制表符等。分隔符的选择通常取决于文件的要求和数据内容。
  2. 行:每一行表示一个数据记录。每行中的字段由分隔符进行分隔,字段的顺序对应于表格中的列。
  3. 引号:如果字段中包含分隔符或换行符等特殊字符,可以使用引号将该字段括起来。通常,双引号是用于引用字段的字符。
  4. 头部行:CSV 文件通常包含一个头部行,其中包含列名或字段名称。这样可以提供对每列数据的标识,方便后续处理和操作。
  5. 缺失值:如果某些单元格没有值,可以用空字符串或特定符号表示缺失值。

下面是一个示例,我们的乳腺癌分类数据集CSV文件:

"id","diagnosis","radius_mean","texture_mean","perimeter_mean","area_mean","smoothness_mean","compactness_mean","concavity_mean","concave points_mean","symmetry_mean","fractal_dimension_mean","radius_se","texture_se","perimeter_se","area_se","smoothness_se","compactness_se","concavity_se","concave points_se","symmetry_se","fractal_dimension_se","radius_worst","texture_worst","perimeter_worst","area_worst","smoothness_worst","compactness_worst","concavity_worst","concave points_worst","symmetry_worst","fractal_dimension_worst",
842302,M,17.99,10.38,122.8,1001,0.1184,0.2776,0.3001,0.1471,0.2419,0.07871,1.095,0.9053,8.589,153.4,0.006399,0.04904,0.05373,0.01587,0.03003,0.006193,25.38,17.33,184.6,2019,0.1622,0.6656,0.7119,0.2654,0.4601,0.1189
842517,M,20.57,17.77,132.9,1326,0.08474,0.07864,0.0869,0.07017,0.1812,0.05667,0.5435,0.7339,3.398,74.08,0.005225,0.01308,0.0186,0.0134,0.01389,0.003532,24.99,23.41,158.8,1956,0.1238,0.1866,0.2416,0.186,0.275,0.08902
84300903,M,19.69,21.25,130,1203,0.1096,0.1599,0.1974,0.1279,0.2069,0.05999,0.7456,0.7869,4.585,94.03,0.00615,0.04006,0.03832,0.02058,0.0225,0.004571,23.57,25.53,152.5,1709,0.1444,0.4245,0.4504,0.243,0.3613,0.08758

接下来我们使用python将文件进行读取

首先我们需要安装pandas库

pip install pandas -i https://pypi.douban.com/simple/

然后执行以下代码

import pandas as pd
df = pd.read_csv("./data/breast_cancer.csv")
df 

完成将csv文件读入内存形成表格方便后续操作
在这里插入图片描述

这里使用了一个强大的数据分析第三方库pandas 后续的百分之90数据分析操作基本都在使用这个库,因此需要好好掌握他的基础用法。

  1. 使用pip安装pandas: 其中 -i 表示使用指定的国内的镜像源进行下载。一般没有制定会访问到国外的源,若你的网络环境无法科学上网,那么可能需要下载两到三个小时
  2. import as : 给pandas包 取一个别名,后续应用不需要打六个字母只需要打 pd.function()
  3. pd.read_csv() : 可以根据需要进行配置。例如,可以指定分隔符、跳过行、指定列名等。具体的参数和用法可以参考 Pandas 文档中的相关说明。

JSON

JSON(JavaScript Object Notation)是一种常用的数据交换格式,用于存储和传输结构化数据。它基于JavaScript的语法,但已成为许多编程语言的通用格式。

JSON使用简洁的文本表示法来描述数据对象,具有易读性和易解析性。它由键值对(key-value pairs)组成,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。

以下是一个JSON示例:

{
  "name": "John Smith",
  "age": 30,
  "isStudent": false,
  "hobbies": ["reading", "running", "traveling"],
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "country": "USA"
  }
}

接下来我们先用刚刚的breast_cancer 数据集转一份json

df.to_json("./data/breast_cancer.json",orient = "records")

我们来看一看在文件中的json格式是长什么样的:
它是一个 [] 里面包裹着多个的json对象

[{"id":842302,"diagnosis":"M","radius_mean":17.99,"texture_mean":10.38,"perimeter_mean":122.8,"area_mean":1001.0,"smoothness_mean":0.1184,"compactness_mean":0.2776,"concavity_mean":0.3001,"concave points_mean":0.1471,"symmetry_mean":0.2419,"fractal_dimension_mean":0.07871,"radius_se":1.095,"texture_se":0.9053,"perimeter_se":8.589,"area_se":153.4,"smoothness_se":0.006399,"compactness_se":0.04904,"concavity_se":0.05373,"concave points_se":0.01587,"symmetry_se":0.03003,"fractal_dimension_se":0.006193,"radius_worst":25.38,"texture_worst":17.33,"perimeter_worst":184.6,"area_worst":2019.0,"smoothness_worst":0.1622,"compactness_worst":0.6656,"concavity_worst":0.7119,"concave points_worst":0.2654,"symmetry_worst":0.4601,"fractal_dimension_worst":0.1189,"Unnamed: 32":null},{"id":842517,"diagnosis":"M","radius_mean":20.57,"texture_mean":17.77,"perimeter_mean":132.9,"area_mean":1326.0,"smoothness_mean":0.08474,"compactness_mean":0.07864,"concavity_mean":0.0869,"concave points_mean":0.07017,"symmetry_mean":0.1812,"fractal_dimension_mean":0.05667,"radius_se":0.5435,"texture_se":0.7339,"perimeter_se":3.398,"area_se":74.08,"smoothness_se":0.005225,"compactness_se":0.01308,"concavity_se":0.0186,"concave points_se":0.0134,"symmetry_se":0.01389,"fractal_dimension_se":0.003532,"radius_worst":24.99,"texture_worst":23.41,"perimeter_worst":158.8,"area_worst":1956.0,"smoothness_worst":0.1238,"compactness_worst":0.1866,"concavity_worst":0.2416,"concave points_worst":0.186,"symmetry_worst":0.275,"fractal_dimension_worst":0.08902,"Unnamed: 32":null}]

接下来再使用pandas 进行读取

pd.read_json("./data/breast_cancer.json",orient = "records")

在这里插入图片描述
但是我们常见的json文件通常是不会带括号的每一行是一个json字符串形如

{"key1": 1}
{"key1": 3}

此时我们可以通过最原始的方法将其放到列表内,在用pandas进行读取最终生成df对象

import json
data = []
with open("./data/json.txt","r") as f :
    for i in f.readlines():
        item = json.loads(i)
        data.append(item)
data
df = pd.DataFrame(data)
df

在这里插入图片描述

从服务接口获取数据

首先我们介绍一些我们从服务接口拿数据通常使用的HTTP协议是什么
HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议。HTTP服务指的是基于HTTP协议提供服务的服务器端应用程序。
HTTP服务使用标准的HTTP方法(如GET、POST、PUT、DELETE等)来定义不同类型的请求和操作。
服务器生成HTTP响应,包括响应状态码(如200表示成功、404表示未找到资源等)、响应头(包含附加信息如内容类型、缓存控制等)以及可选的响应正文(如HTML、JSON、文件等)。
在实际工作场景中我们通常使用GET或POST方法携带我们的需求信息,然后服务端其内容以JSON的格式进行返回。
在Python中我们想要访问服务接口通常使用的是requests库:
使用方式首先安装pip包:

pip install requests -i https://pypi.douban.com/simple/

然后通过requests库进行网络请求

import requests
params = {} 
body = {}
headers = {}
res = requests.get("http://www.baidu.com",params =params, data= body ,headers = headers )
res.text

得到返回的文本信息

<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>ç\x99¾åº¦ä¸\x80ä¸\x8bï¼\x8cä½\xa0å°±ç\x9f¥é\x81\x93</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=ç\x99¾åº¦ä¸\x80ä¸\x8b class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>æ\x96°é\x97»</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>å\x9c°å\x9b¾</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>è§\x86é¢\x91</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>è´´å\x90§</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>ç\x99»å½\x95</a> </noscript> <script>document.write(\'<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=\'+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ \'" name="tj_login" class="lb">ç\x99»å½\x95</a>\');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">æ\x9b´å¤\x9a产å\x93\x81</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>å\x85³äº\x8eç\x99¾åº¦</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使ç\x94¨ç\x99¾åº¦å\x89\x8då¿\x85读</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>æ\x84\x8fè§\x81å\x8f\x8dé¦\x88</a>&nbsp;京ICPè¯\x81030173å\x8f·&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>\r\n

从数据库获取数据

数据即存放数据的仓库目前百分之80的关系性数据库是支持jdbc链接。
这里示例使用python读mysql数据:
是需安装 mysql-connector-python 库:

pip install mysql-connector-python -i https://pypi.douban.com/simple/
import mysql.connector
# 创建数据库连接
con = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)
df = pd.read_sql(con,"select * from your_table limit 100")
df 

总结

这一章主要介绍了JSON,CSV,TXT三种工作常见格式的文件读取,以及pandas、requests、mysql-connector-python这三个优秀的第三方库使用来辅助我们优雅的获取数据
在下一章节将进入到数据的操作,主要涉及数据的转换,清洗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值