资讯详情

《基于Python的大数据分析基础及实战》第二章

第二章

??个人信息
  • kwd:info
  • kwd:info
  • kwd:info
???

ipynb下载等文件:https://wwm.lanzouf.com/iklXf023qeef

分析数据首先要处理数据,本章主要介绍Pγthon常用的数据处理方法和技巧,以及Anaconda安装Anaconda 和 Jupγter notebook 已成为资料分析的标准坏境。

本章开始进入Python介绍革之据分析工具。革命的基础分析一般都很周到Numpγ 、Scipγ 和Pandas三个包。Numpγ是Pγthon的主义值计算扩在包,主妥用来处理矩阵,宅的运算效率比到家史高效。Scipy是基于Numpy 包括线性代狄、统计等工具的科学计算包。Pandas是基于Numpγ大型数据集可以轻松操作数据分析工具。

2.1Anaconda简介

Anaconda 是Python 开源发行版主要是科学计算学计算非常好用最省心的Python 学习工具。对于学习Pyt hon 的“小白" 安装第三方库对人来说是一个折腾,但是用了Anaconda 方便多了。它预装了许多我们使用或不使用的第三方库,与它相比Python 用pip install 安装仓库也更方便。Anaconda 中增加了conda install 命令安装第三方库的方法和方法pip install 命令一样。当用户熟悉时Anaconda 将来会发现,使用conda install 命令将比使用更多pip install 命令更方便。例如,人们经常担心lxml 包的问题, 在Windows 下使用pip install 命令不能顺利安装,使用conda 命令可以。

1. 代码提示

代码提示是开发工具的必要功能。当用户需要时Spyder 只有在给出代码提示时 按下函数名的前几个字母Ta b 键,即可得到IDE 代码提示。

2. 变量浏览

变量是代码执行过程中留在内存中的数据,可以通过Spy der 对变量承载 查看数据,方便用户处理数据。

3. 图形查看

绘图是数据分析的必备技能之一。一个好的工具必须有图形绘制 的功能, Spyder 窗户还集成了绘图功能

2.2Numpy简介

Numpy 数据结构是n 维的数组对象,叫做ndarray 。在前一章中,我 我们已经知道了Python 列表也可以表示数组,但效率会随着列表数据的增加而提高 降低。

本书使用 Anaconda ,不需要单独安装 Numpy ,但因为它属于 Python 第三方工具,所以每次使用前必须在代码中加载 导入(载入)命令如下:

import numpy as np data1=[1,2,3,4,5]  array1=np.array(data1) array1  
array([1, 2, 3, 4, 5]) 

使用创建数组(矩阵)Numpy中的array新手要记得添加函数"np."。上面的代码已经列出了系统自带的列表(list)转换成Numpy中间的数组。以列表为元素的嵌套列表可以使用np.转换为多维数组,我们称之为矩阵。

具体代码如下:

data2=[[1,3,4], [2,5, 6]]  array2=np.array (data2)  array2 
array([[1, 3, 4],        [2, 5, 6]]) 

2.3关于Pandas

2.3.1什么是Pandas

Pandas 是Python 的一个数据分析包。最初由AQR Capital Management 于 2008 年4 2009年月开发, 年年底开源面市。目前由专注于Python 数据包开 发的PyData 开发团队继续开发和维护,属于PyData 项目的一部分。Pandas 最 它最初是作为金融数据分析工具开发的,因此, Pandas 分析时间序列 很好的支持。Pandas 面板数据的名称来自( Panel Data )和Python 数据 分析( Data Analysis ) 。Panel Data 它是经济学中关于多维数据集的术语 Pandas 中也提供了Panel Data 数据类型。

2.3.2Pandas中数据结构

Pandas 中除了Panel 数据结构还引入了两种新的数据结构1- Series 和 DataFrame ,这两种数据结构都是建立在基础上的NumPy 在此基础上。

( 1 ) Series :一维数组系列,又称序列Numpy 中的一维array 类似。 二者与Python 基本数据结构list 也很相近。

( 2 ) DataFrame :二维表格数据结构。DataFrame 理解为Series 容器。以下内容主要包括DataFrame 为主。

( 3) Panel :三维数组可以理解为DataFrame 的容器。

2.4数据准备

2.4.1数据类型

1. Logical

Logical 又叫布尔型,只有两种取值: 0 和1 ,或者真和假( True 和False ) 。 逻辑运算符有:& (与,两个逻辑型数据中,有一个为假,则结果为假〉, |(或,两个逻辑型数据中,有一个为真,则结果为真) , not (非,取反〉。

表2-1 运算规则
运算符 注释 运算规则
& 两个逻辑型数据中,其中一个数据为假, 则结果为假
| 两个逻辑型数据中,其中一个数据为真, 则结果为真
not 取相反值,非真的逻辑型数据为假,非假的逻辑型数据为真

2. Numeric

数值运算符有:+、-、*、/。

3. Character

宇符型数据一般使用单引号(")或者双引号( “” )包起来。 Python 数据类型变量命名规则如下:

( 1 )变量名可以由a~z 、A~Z、数字、下划线组成, 首字母不能是数字和 下划线;

( 2 )大小写敏感,即区分大小写;

( 3 )变量名不能为Python 中的保留字,如and 、continue 、lambda 、 or 等。

2.4.2数据结构

1. Series

Series (系列,也称序列)用于存储一行或 列的数据,以及与之相关的索引的集合 。使用方法如下:

Ser es ([数据 ,数据 ... ],index=[索引 ,索引 2, ...])

例如:

from pandas import Series 
X = Series (['a',2 ,'螃蟹'], index= [1,2,3] )
X
1     a
2     2
3    螃蟹
dtype: object

一个系列允许存放多种数据类型 ,索引 Index )也可 以省略,可以通过位 置或者索引访问数据,如X[3],返回 螃蟹。 Series index 如果省略,索引号默认从 开始,也可以指定索引名 。为了 方便后面的使用和说明,此处定义可以省略的 index ,也就是默认的索引号从 开始计数,赋值给定的 index ,我们称为索引名,有时也称为行标签

在Spyder 中写入如下代码:

from pandas import Series 
A=Series([1,2,3]) 
print(A) 
0    1
1    2
2    3
dtype: int64
from pandas import Series 
A=Series(
    [1,2,3],
    index=[1,2,3]
)
print(A)
1    1
2    2
3    3
dtype: int64
from pandas import Series 
A=Series([1,2,3],index= [ 'A','B', 'c']) 
print (A) 
A    1
B    2
c    3
dtype: int64

2. DataFrame

2.4.3数据导入

  1. 导入txt文件

read table 函数用于导入txt 文件。其命令格式如下:

read table(file, names =[歹u名1 ,列名2, ... J , sep="", ...)

其中:

  • 目怆为文件路径与文件名;
  • names 为列名,默认为文件中的第一行作为列名:
  • sep 为分隔符,默认为空。

【例 2-1】读取(导入) txt 文件

from pandas import read_table
df = read_table(r'rz.txt',sep=" ")
df.head()
学号\t班级\t姓名\t性别\t英语\t体育\t军训\t数分\t高代\t解几
0 2308024241\t23080242\t成龙\t男\t76\t78\t77\t40\t2...
1 2308024244\t23080242\t周怡\t女\t66\t91\t75\t47\t4...
2 2308024251\t23080242\t张波\t男\t85\t81\t75\t45\t4...
3 2308024249\t23080242\t朱浩\t男\t65\t50\t80\t72\t6...
4 2308024219\t23080242\t封印\t女\t73\t88\t92\t61\t4...

2. 导入csv文件

csv (Comma-Separated Values )一般称为逗号分隔值,有时也称为字符分隔 因为分隔字符也可以不是逗号,其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含有必须像二进制数字那 样被解读的数据。csv 文件由任意数目的记录组成, 记录间以某种换行符分 隔; 每条记录由字段组成, 字段间的分隔符是其他字符或字符串,最常见的是 逗号或制表符。通常, 所有记录都有完全相同的字段序列。通常都是纯文本文 件。csv 文件格式常见于手机通讯录,可以使用Excel 打开。

read_csv 函数可以导入csv 文件。其命令格式如下:

read_csv(file , names =[列名1 ,列名2, .. ] , sep="",… )

其中:

  • file 为文件路径与文件名;
  • names 为列名,默认为文件中的第一行作为列名;
  • sep 为分隔符, 默认为空, 表示默认导入为一列。

【例2-2】读取(导入) csv文件。

示例代码如下:
from pandas import read_csv
df = read_csv(r'rz.csv',sep ="," )
df
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 76 78 77 40 23 60
1 2308024244 23080242 周怡 66 91 75 47 47 44
2 2308024251 23080242 张波 85 81 75 45 45 60
3 2308024249 23080242 朱浩 65 50 80 72 62 71
4 2308024219 23080242 封印 73 88 92 61 47 46
5 2308024201 23080242 迟培 60 50 89 71 76 71
6 2308024347 23080243 李华 67 61 84 61 65 78
7 2308024307 23080243 陈田 76 79 86 69 40 69
8 2308024326 23080243 余皓 66 67 85 65 61 71
9 2308024320 23080243 李嘉 62 作弊 90 60 67 77
10 2308024342 23080243 李上初 76 90 84 60 66 60
11 2308024310 23080243 郭窦 79 67 84 64 64 79
12 2308024435 23080244 姜毅涛 77 71 缺考 61 73 76
13 2308024432 23080244 赵宇 74 74 88 68 70 71
14 2308024446 23080244 周路 76 80 77 61 74 80
15 2308024421 23080244 林建祥 72 72 81 63 90 75
16 2308024433 23080244 李大强 79 76 77 78 70 70
17 2308024428 23080244 李侧通 64 96 91 69 60 77
18 2308024402 23080244 王慧 73 74 93 70 71 75
19 2308024422 23080244 李晓亮 85 60 85 72 72 83
20 2308024201 23080242 迟培 60 50 89 71 76 71

3. 导入Excel文件

read_excel 函数可以导入Excel 文件。其命令格式如下:

read_excel (file,sheetname,header=0)

其中:

  • file 为文件路径与文件名:
  • sheetname 为sheet 的名称,如sheetl;
  • header 为列名,默认为0 (只接收布尔型数据0 和1 ),一般以文件的 第一行作为列名。

【例2-3】 读取(导入)Excel文件

实例代码如下:
from pandas import read_excel
df =read_excel(r'i_nuc.xls',sheet_name='Sheet3')
df
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 76 78 77 40 23 60
1 2308024244 23080242 周怡 66 91 75 47 47 44
2 2308024251 23080242 张波 85 81 75 45 45 60
3 2308024249 23080242 朱浩 65 50 80 72 62 71
4 2308024219 23080242 封印 73 88 92 61 47 46
5 2308024201 23080242 迟培 60 50 89 71 76 71
6 2308024347 23080243 李华 67 61 84 61 65 78
7 2308024307 23080243 陈田 76 79 86 69 40 69
8 2308024326 23080243 余皓 66 67 85 65 61 71
9 2308024320 23080243 李嘉 62 作弊 90 60 67 77
10 2308024342 23080243 李上初 76 90 84 60 66 60
11 2308024310 23080243 郭窦 79 67 84 64 64 79
12 2308024435 23080244 姜毅涛 77 71 缺考 61 73 76
13 2308024432 23080244 赵宇 74 74 88 68 70 71
14 2308024446 23080244 周路 76 80 77 61 74 80
15 2308024421 23080244 林建祥 72 72 81 63 90 75
16 2308024433 23080244 李大强 79 76 77 78 70 70
17 2308024428 23080244 李侧通 64 96 91 69 60 77
18 2308024402 23080244 王慧 73 74 93 70 71 75
19 2308024422 23080244 李晓亮 85 60 85 72 72 83
20 2308024201 23080242 迟培 60 50 89 71 76 71

4. 导入MySQL库

Python 中操作MySQL 的模块是PyMy SQL,在导入MySQL 数据之前, 需 要安装PyMySQL 模块。目前Py由on3.x 仅支持PyMySQL ,不支持MySQLdb 。 安装PyMySQL ,命令为pip install pymysql

read_sql 函数可以导入My SQL 库。其命令格式如下:

read_sql(sql,conn)

其中:

  • sql 为从数据库中查询数据的SQL 语句;
  • conn 为数据库的连接对象,需要在程序中选创建。

示例代码如下:

import pandas as pd
import pymysql

dbconn=pymysql.connect(
    host="**********",
    database="kimbo",
    passwd="******",
    port=3306,
    charset='utf8'
    )
sqlcmd="select * from tabl e name"#SQL语句
a =pd.read_sql(sqlcmd , dbconn) #利用pandas模块导入MySQL数据
dbconn.close()
b=a.head()
print(b)

下面介绍读取MySQL 数据的其他方法。

方法一:

```python
一段代码,我懒得写了

方法二:

一段代码,懒得写了

2.4.2数据导出

1. 导出csv文件

to_csv 函数可以导出 csv 文件。其命令格式如下:

to_csv (file path,sep=",", index=TRUE, header=TRUE)

其中:

  • file_path 为文件路径:
  • sep 为分隔符,默认是逗号:
  • index 表示是否导出行序号,默认是 TR阻,导出行序号:
  • header 表示是否导出列名,默认是 TRUE ,导出列名。

【例 2-4 】导出 CSV 文件。

示例代码如下:
from pandas import DataFrame 
from pandas import Series 
df = DataFrame(
    { 
        
    'age':Series([26, 85 , 64]), 
    'name':Series(['Ben','John','Jerry'])
    })
df 
age name
0 26 Ben
1 85 John
2 64 Jerry

2. 导出Excel文件

to_excel 函数可以导出 Excel 文件。其命令格式如下:

to excel(file_path ,index=TRUE ,header=TRUE)

其中:

  • file_path 表示文件路径;
  • index 表示是否导出行序号,默认是 TRUE ,导出行序号;
  • header 表示是否导出 名,默认是 TRUE ,导 出列名。

例2-5 导出Excel文件。

示例代码如下:
from pandas import DataFrame
from pandas import Series
df=DataFrame(
    { 
        'age':Series([26,85,64]),
    'name':Series(['Ben','John','Jerry'])
    })
df .to_excel ('./data/01.xlsx') #默认带上index
df.to_excel('./data/02.xlsx', index= False) #无index

3. 导出到MySQL

to_sql 函数可以将文件写入到MySQL数据库。其命令格式如下:

to_sql(tableName, con =数据库连接)

其中:

  • tableName 表示数据库中的表名;
  • con 表示数据库的连接对象,需要在程序中先创建。

示例代码如下:

#Python3.6 下利用PyMySQL 将Data Frame 文件写入到MySQL 数据库
from pandas import DataFrame
from pandas import Series
from sqlalchemy import create_engine
#启动引擎
engine = create_engine ("mysql+pymysql://user:password@host:port/databasename?charset=utf8")
#这里一定要写成mysql +pymysql ,不要写成mysql+mysqldb
#user:password 是账户和密码, host:port 是访问地址和端口,databasename 是库名
#DtaFrame 数据
df = DataFrame ( { 
        ' age ': Series ( [26, 85, 64 ]),' name ': Series ([' Ben ',' John ',' Jerry'])})
#存入MySQL
df.to_sql(
    name ='table name',
    con = engine,
    if_exists ='append',
    index = False,
    index_label = False)

## 2.5数据处理

***数据处理是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节。***<br>
***数据处理一方面能提高数据的质量,另一方面能让数据更好地适应特定的数据分析工具。数据处理的主要内容包括数据清洗、数据抽取、数据交换和数
据计算等。***

### 2.5.1数据清洗

在数据分析时,海量的原始数据中存在着大量不完整、不一致、有异常的
数据,严重影响到数据分析的结果,所以进行数据清洗就显得尤为重要。

数据清洗是数据价值链中最关键的步骤。垃圾数据,即使是通过最好的分
析,也将产生错误的结果,并误导业务本身。因此在数据分析过程中,数据清
洗占据了很大的工作量。

数据清洗就是处理缺失数据以及清除无意义的信息,如删除原始数据集中
的无关数据、重复数据,平滑噪声数据,筛选掉与分析主题无关的数据,处理
缺失值、异常值等。

#### 1. 重复值的处理

#### 例2-6 去掉重复数据

    示例代码如下:


```python
from pandas import DataFrame
from pandas import Series
df = DataFrame({ 
        
    'age':Series ([26 , 85 , 64 , 85 , 85]) ,
    'name': Series ([' Ben ',' John ',' Jerry ',' John ',' John'])
    })
df
age name
0 26 Ben
1 85 John
2 64 Jerry
3 85 John
4 85 John
df.duplicated()
0    False
1    False
2    False
3     True
4    False
dtype: bool
df.duplicated('name')
0    False
1    False
2    False
3     True
4    False
dtype: bool
df.drop_duplicates('age')
age name
0 26 Ben
1 85 John
2 64 Jerry

2. 缺失值处理

从统计上说,缺失的数据可能会产生有偏估计,从而使样本数据不能很 好地代表总体,而现实中绝大部分数据都包含缺失值,因此如何处理缺失值很 重要。

一般说来,缺失值的处理包括两个步骤,即缺失数据的识别和缺失数据的 处理。

  • 缺失数据的识别

Pandas 使用浮点值NaN 表示浮点和非浮点数组里的缺失数据,并使 用.isnull 和.notnull 函数来判断缺失情况。

例2-7 缺失数据的识别。

示例代码如下:
from pandas import DataFrame
from pandas import read_excel
df = read_excel('rz.xlsx', sheet_name='Sheet2')
df
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 NaN 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 NaN 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
df.isnull()
学号 姓名 英语 数分 高代 解几
0 False False False False False False
1 False False False False False False
2 False False False True False False
3 False False False False False False
4 False False False False False False
5 False False False False False False
6 False False False False False False
7 False False False False True False
8 False False False False False False
9 False False False False False False
df.notnull()
学号 姓名 英语 数分 高代 解几
0 True True True True True True
1 True True True True True True
2 True True True False True True
3 True True True True True True
4 True True True True True True
5 True True True True True True
6 True True True True True True
7 True True True True False True
8 True True True True True True
9 True True True True True True
  • 缺失数据的处理

对于缺失数据的处理方式有数据补齐、删除对应行、不处理等方法。 ( 1 ) dropna(): 去除数据结构中值为空的数据行。

例2-8 删除数据为空所对应的行。

示例代码如下:
newDF=df.dropna ()
newDF
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46

( 2 ) df. fillna(): 用其他数值替代NaN.

有些时候直接删除空数据会影响分析的结果,可以对数据进行填补。

例2-9 使用数值或者任意字符代替缺失值

示例代码如下:
df.fillna('?')
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 4

标签: t81光电开关传感器传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台