欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python数据分析与可视化(读取数据)

程序员文章站 2023-09-04 18:13:59
读取数据含有逗号分隔符文件JSON文件源文件含有逗号分隔符文件本节主要讲CSV类型的文件以及如何使用Pandas库来读取CSV文件。CSV文件的简介用Pandas来读取CSV文件CSV文件的简介在机器学习中以逗号作为分隔符的文件很常见(CSV文件),这种类型的文件每一行都有数据,每行的数据元素之间通过通过逗号分隔,用Pandas可以很方便的读取这类文件。用Pandas来读取CSV文件这是详细的说明文档在读取文件之前先了解一下三个参数sep-指定分隔符,如果不指定默认值是’,...

读取数据

  1. 含有逗号分隔符文件
  2. JSON文件
  3. 源文件

含有逗号分隔符文件

本节主要讲CSV类型的文件以及如何使用Pandas库来读取CSV文件。

  • CSV文件的简介
  • 用Pandas来读取CSV文件

CSV文件的简介
在机器学习中以逗号作为分隔符的文件很常见(CSV文件),这种类型的文件每一行都有数据,每行的数据元素之间通过通过逗号分隔,用Pandas可以很方便的读取这类文件。
用Pandas来读取CSV文件
这是详细的说明文档在读取文件之前先了解一下三个参数

  • sep-指定分隔符,如果不指定默认值是’,'支持自定义分隔符。
  • header-指定作为整个数据集列名的行.如果数据集中没有列名,则需要设置header=None.对有表头的数据识别第一行作为header.
  • names-用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。
    如果CSV文件的格式比较好,那么参数采用默认值,就可以读取好。
    虽然在不用Pandas的情况下也可以读取CSV文件,但是CSV文件的格式通常很混乱,读取他们通常会遇到很多难以处理的问题,Pandas模块具有许多参数,我们可以更改这些参数以处理更复杂的CSV文件。
    用一段代码来说明
import pandas as pd

# 创建列名列表
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
        'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
# 利用定义好的列名来读取数据
df = pd.read_csv("data/adult.data", header=None, names=names)
                      
print(df.head())

下面来解释一下代码,首先下载需要的数据(数据下载地址)进入到页面后点击Data Folder,然后选择adult.data。下载好后,可以用Excel或者其他文本编辑器打开。可以看到每行的数据都是以逗号分隔开的,如下图
Python数据分析与可视化(读取数据)
我们可以发现这个CSV文件没有列名。但是我们在第二行的代码中定义了列名,并把它传递给了names参数。在第三行代码中我们设置了header=None,这是由于,Pandas默认将第一行作为列名,这样设置后第一行就会作为正常数据进行展示。
数据读入后将转为Pandas的dataframe格式。
dataframe格式非常类似于数据矩阵,但他还有其他的特点。比如,我们可以获取指定名称的行和列,并且在每一列中可以存储不同的数据类型,比如某一列可以是整型,另外一列可以是文本型。
我们可以将dataframe格式看作是一张Excel数据表。例如,有一张工作表,这张表中一列是日期,另外一列是日期对应的温度。我就可以把这张表看作是dataframe格式.
通过调用head()函数,我们可以看到dataframe格式数据的前五行。在下一节“数据描述”中再详细讨论如何使用dataframe格式。
接下来,让我们看一下JSON文件的读取。

JSON文件

本节主要讲JSON类型的文件以及如何使用Pandas库来读取JSON文件。

  • JSON文件介绍
  • 读取JSON文件

JSON文件介绍
JSON (JavaScript Object Notation)是一种流行的格式具有灵活的模式。人类也很容易读写。在网络上发送的许多数据都是以JSON传输的。下面JSON文件例子:

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

读取JSON文件
Python可以使用内置json库轻松地将这些数据从字符串读取为字典:

import json

## 将JSON对象定义为字符串
json_string = """{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}"""


# 读取JSON数据
json_data = json.loads(json_string)

print(json_data)

当定义的JSON数据是字符串时,我们可以使用该oads()函数将其读入Python中字典。JSON与字典的格式相同,它由各种类型的键,值对组成。上面的JSON对象具有一个名为title的键,其值是“example glossary”。它还具有一个名为GlossList的键,该键具有一个字典值,这个值又包含其自己的键值对。我们可以将看到JSON是如何表示我们想要的任何类型的嵌套模式。
现在,我们可以将JSON对象作为字典,并且可以按照在上节中讨论的方法来访问值。如果文件中包含JSON数据,则可以使用load()函数读取数据。
如果有一个名为data.json的文件,则将按照以下方法进行操作:

with open('data.json') as f:
    data = json.load(f)

现在我们熟悉了JSON文件的操作,下面讨论源文件的操作

源数据

本节主要讲源数据类型的文件以及如何使用Pandas库来读取源数据文件

  • 源数据文件的介绍
  • 源数据文件的读取

源数据文件的介绍
有时我们会得到奇怪格式的数据,并且必须自己写Python代码来处理数据。
例如,可能有一个用竖线(|)分隔的文件。它可能看起来像这样:

James|22|M
Sarah|31|F
Mindy|25|F

在上方,我们有3列数据,每行的3个值用竖线(|)分隔-分别代表名称,年龄和性别。
我们可以在Python中创建相同的文件并使用tempfile进行处理。

import tempfile

tmp = tempfile.NamedTemporaryFile()

# 将数据写入文件
with open(tmp.name, 'w') as f:
    f.write("James|22|M\n")
    f.write("Sarah|31|F\n")
    f.write("Mindy|25|F")

# 逐行读取文件中的数据
with open(tmp.name, "r") as f:
    for line in f:
      print(line)

上面,我们使用tempfile创建了一个包含三行数据的文件。数据的前2行末尾的\ n让程序创建新行。

源数据文件的读取
我们要注意下面这段代码:

with open(tmp.name, "r") as f:
    for line in f:
      print(line)

我们使用open()命令来读取文件。首先传递要处理的文件名,然后传递r代表读取。
由于我们with as功能,因此变量f代表文件句柄,并且仅在此范围内有用。这是读取文件的好习惯,因为我们不xu关闭文件句柄。有了文件句柄后,Python可以非常轻松地访问这些行。变量f现在是可迭代的,其中每个可迭代的都是文件的一行。因此,我们可以这样迭代:

for line in f

上面的代码仅打印出这些行,但是由于我们可以直接访问文件的每行数据,因此我们可以在处理过程中做任操作。例如,以下代码仅取每行的第一个值,并将它们添加到列表中。

import tempfile

tmp = tempfile.NamedTemporaryFile()

# 将数据写入文件
with open(tmp.name, 'w') as f:
    f.write("James|22|M\n")
    f.write("Sarah|31|F\n")
    f.write("Mindy|25|F")

first_values = []  # 定义一个列表来存储每一行的第一个值
with open(tmp.name, "r") as f:  # 打开要读的文件
    for line in f:  # 迭代每一行
      row_values = line.split("|")  # 以“|”切分
      first_values.append(row_values[0])  # 将第一个值添加到列表中
      
print(first_values)

本文地址:https://blog.csdn.net/qq_45408935/article/details/107568110