龙空技术网

数据科学入门笔记:Python数据处理

林小婵的店 604

前言:

今天兄弟们对“python中退出”大致比较关注,姐妹们都需要剖析一些“python中退出”的相关知识。那么小编在网上网罗了一些对于“python中退出””的相关内容,希望朋友们能喜欢,姐妹们快快来学习一下吧!

获取数据

在线的大量数据存储在文本文件中,尤其是在政府网站上,而且通常只是从网站下载文件。例如,让我们获取我们可以在这里找到的所有主要联盟棒球统计数据库。在页面上,我们可以看到数据有多种格式。三种最常见的格式是csv,xml和json。

我下载了名为“ 2016 - 逗号分隔版  - 2017年2月26日更新”的csv数据。在查看文件AllstarFull.csv时,前两行是:

playerID,yearID,gameNum,gameID,teamID,lgID,GP,startingPos

gomezle01,1933,0,ALS193307060,NYA,AL ,, 1

在csv格式中,我们通常有一系列的行,每行对应一个条目。条目以逗号分隔。文件顶部的标题行对应于标识符,例如玩家ID,yearID ......如果我们查看第一个玩家的条目,我们可以按照相同的顺序查看相应的数据。如果数据丢失,我们只会看到两个逗号,因为没有空格。

在xml文档的情况下,我们最终得到了与html非常相似的东西。我们可以打开一个文档元素,并打开一系列表格。该表具有与上述值相对应的许多孩子。如果数据丢失,该字段在末尾以斜线打开(例如:<playerID />)

<Document Element>

<Table>

<playerID>gomezle01</playerID>

<yearID>1933</yearID>

<gameNum>0</gameNum>

<gameID>ALS193307060</gameID>

<teamID>NYA</teamID>

<lgID>AL</lgID>

<GP/>

<startingPos>1</startingPos>

在json文档中,我们有许多用大括号表示的json对象。json文档很像Python字典。我们有密钥,对应于csv文件中的标题行,后跟值。在缺失值的情况下,我们只需打开并关闭引号

{

“playerID”:“gomezle01”

“yearID”:1933

“gameNum”:0

“gameID”:“ALS193307060”

“teamID”:“NYA”

“lgID”:“AL”

“GP”:“”

“startingPos”:1

}

xml和json的好处是它们支持嵌套结构,尽管csv文件仍然不是一种非常流行的存储数据的方式。

CSV数据

将csv数据加载到Pandas数据框中可以在一行代码中完成。每列都可以通过提及他们的名字来回顾。我们还可以通过以矢量化方式操纵列来在数据框上创建新列。例如,如果我们想要一个新的列,它是每个玩家的身高和体重的总和,我们可以按如下所示编写“到”列的算术。

也可以将数据写入一个新的csv文件,其中包括我们刚添加的to_csv()函数中的新列。

import pandas as ps

baseball_data = pd.read_csv('Master.csv')

#retrieve a column

print baseball_data['playerID'].head()

# manipulating columns in a vectorized way

baseball_data['height+weight'] = baseball_data['height'] + baseball_data['weight']

print baseball_data['height+weight'].head()

#write data in a new csv

baseball_data.to_csv('Master_with_height+weight.csv')

>>>

playerID birthYear birthMonth birthDay birthCountry ...

0 aardsda01 1981.0 12.0 27.0 USA ...

1 aaronha01 1934.0 2.0 5.0 USA ...

2 aaronto01 1939.0 8.0 5.0 USA ...

3 aasedo01 1954.0 9.0 8.0 USA ...

4 abadan01 1972.0 8.0 25.0 USA ...

>>>

0 290.0

1 252.0

2 265.0

3 265.0

4 257.0

关系数据库

我们现在知道如何从像csv这样的平面文件加载数据。现在让我们看看如何处理存储在关系数据库中的数据。关系数据库类似于电子表格的集合。在每个电子表格中,都有列和行。一列指定一个值及其类型,如playerID。每行包含每列的值,我们称每一组行和列为表格而不是电子表格,并且表格通常以某种方式相互关联。

关系数据库有三个主要的原因是有用的:

使用复杂查询提取数据很简单。

它的规模很好

它确保所有数据的格式一致

事实上,为年龄大于50岁,体重<50的人选择所有记录,并且城市等于孟买,与平面文件相比,使用数据库很容易。

拥有数十万或数百万条目的数据库并不罕见。由于所有信息都理想地存储在一个位置,因此可以通过可扩展的方式更新,删除和向数据库添加新数据。

最后,关系数据库总是有一个模式。模式是一个蓝图,告诉数据库我们计划如何存储数据。例如,人的年龄不能是一个弦,而其他人的年龄是一个整数。此外,架构表示,对于给定的表,每个单独的行或条目将具有与相同值相对应的完全相同数量的列,并且每个列的值将以相同方式格式化。

查询

我们如何从关系数据库获取数据?通常使用结构查询语言(SQL)从关系数据库中检索数据。如果我们想要选择所有(*)的数据,查询将是:

SELECT * FROM database_name;

我们可以通过在SQL命令结尾添加限制20来限制行数。

SELECT * FROM database_name LIMIT 20;

我们也可以要求提供具体的专栏,如姓名和年龄。

SELECT name,age FROM database_name LIMIT 20;

让我们将这个查询写入一个python文件,并将数据存储在“database_solution”中。

import pandas as pd

import pandasql

database_name = pd.read_csv(filename)

q = """

SELECT name, age FROM database_name LIMIT 20;

"""

#Execute your SQL command against the pandas frame

database_solution = pandasql.sqldf(q, locals())

我们也可以执行更复杂的查询。以下查询选择与冰岛国家相对应的所有数据。

SELECT * FROM database_name WHERE country =“Iceland”;

SQL中存在一些诸如group和aggregate之类的函数。一个集合函数需要一些值,通常是数字,并对它们进行数学运算。例如sum()是一个聚合函数。

每个地区数据库中登记的年龄超过50岁的人总数是多少?以下查询首先选择每个区域登记了多少名男性和女性。由于我们使用的是聚合函数,因此我们需要包含一个GROUP BY,以及我们的非聚合字段,在这种情况下是区域和性别。最后,我们希望限制50岁以上的男性和女性。因此,我们在表名之后加入where子句,WHERE age> 50。

SELECT gender, district, sum(database_generated)

FROM database_name

WHERE age > 50

GROUP BY gender, district

API(应用程序编程接口)

我们现在知道如何从文件或数据库中获取数据,但是有些网站中的网站如Twitter的数据呢?通过搜索或爬行网站获取所有数据可能会变得复杂。幸运的是,许多公司允许用户和开发人员通过API以简单的机器可读格式直接访问数据。有几种不同类型的API,但最常见的类型之一,以及Twitter使用的类型是代表性状态转移或REST API。

现在让我们在一个使用json和request库的简单python程序中实现它。

import json

import requests

url = ";api_key=YOUR_API_KEY&=Cher&album=Believe&format=json"

data = json.loads(requests.get(url).text)

首先我们指定一个URL,就像我们之前看到的 函数requests.get()将从.txt中的url中获取数据。查看json对象,我们会发现字符串格式很难处理,但是json库允许与json数据进行非常简单的交互,这要归功于json.load()函数。现在json数据被转换成Python字典。

完整性检查数据

现在我们已经获得了我们的数据,无论是非正式平面文件续集如关系数据库还是API,我们都需要在进行任何分析之前进行健全性检查数据。完整性检查使我们能够确定数据是否有意义。Pandas DataFrames确实有一个有用的方法,叫做describe(),我们不会过分注意细节,只是做一些简单的理智检查。

import pandas as pd

baseball_data = pd.read_csv('Master.csv')

print (baseball_data.describe())

>>>birthYear birthMonth birthDay deathYear deathMonth

count 18973 18803 18656 9441 9440

mean 1931 6 15 1964 6

std 41 3 8 31 3

min 1820 1 1 1872 1

25% 1895 4 8 1942 3

50% 1937 7 16 1967 6

75% 1969 10 23 1990 10

max 1996 12 31 2017 12

deathDay weight height

count 9439 18251 18320

mean 15 186 72

std 8 21 2

min 1 65 43

25% 8 170 71

50% 15 185 72

75% 23 200 74

max 31 320 83

函数describe()返回一个数据框。对于每个数字列,我们都可以看到计数,平均值,标准偏差,平均值。我们可以做一些快速检查,以确保有数据通常有意义,如月份在1到12之间,天数在1到3之间。有没有异常值?查看最小值和最大值是否大于与第25或第75百分点相对应的值...

你可能会注意到的一件事是,每列的计数是不同的。这表明我们可能有一堆缺失的值。值可能会丢失的原因很多,例如收集数据失败,数据丢失,无响应值。缺失值可能会使您的发现无效,因此设计数据收集方法非常重要。可以使用不同的方法来减轻这些缺失值对我们分析的影响。

存在两种方法,部分删除和插补。部分删除正是它听起来的样子,将我们用于分析的数据集限制为我们可用的数据。我们可以使用的一种方法称为Listwise Deletion。在我们执行Listwise Deletion的情况下,即使存在一些有用的值,我们也会从所有分析中排除特定的数据点。

当我们没有太多的数据时,我们使用插补,或者删除我们缺失的值会影响我们样本的代表性。仅仅因为缺少值而抛出一堆条目会严重影响我们试图执行的任何分析的统计效力。在这种情况下,对我们的数据中的缺失值进行智能猜测(如逼近)可能是有意义的。例如,我们可以用所有其他值的平均值替代所有缺失值,或使用线性回归来估计缺失值。但是,插补会在数据集中引入偏见和不准确性。这是一个非常棘手的问题,新技术不断发展。存在更复杂和可靠的方法。

在下面的代码中,我们计算“权重”数组的平均值,并通过将它们设置为平均权重来计算“权重”列中的任何缺失值。

import pandas

import numpy

baseball = pandas.read_csv(filename)

baseball['weight'] = baseball['weight'].fillna(numpy.mean(baseball['weight']))

标签: #python中退出