python数据分析实操练习III¶
Pandas数据载入与预处理¶
读/写文本文件¶
1.文本文件读取¶
文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。
txt文件:是Windows操作系统上附带的一种文本格式,文件以.txt为后缀。
CSV文件:是Comma-Separated Values的缩写,用半角逗号(’,’)作为字段值的分隔符。
Pandas中使用read_table来读取文本文件:
pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
Pandas中使用read_csv函数来读取CSV文件:
pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
2. 文本文件的存储¶
文本文件的存储和读取类似,结构化数据可以通过pandas中的to_csv函数实现以CSV文件格式存储文件。
DataFrame.to_csv(path_or_buf = None, sep = ’,’, na_rep, columns=None, header=True, index=True, index_label=None, mode=’w’, encoding=None)
读/写Excel文件¶
1. Excel文件的读取¶
Pandas提供了read_excel函数读取“xls”和“xlsx”两种excel文件,其格式为:
pandas.read_excel(io, sheetname, header=0, index_col=None, names=None, dtype)
read_excel函数和read_table函数的部分参数相同,
2. Excel文件的存储¶
将文件存储为Excel文件,可使用to_excel方法。其语法格式如下: DataFrame.to_excel(excel_writer=None, sheetname=None’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
与 to_csv方法的常用参数基本一致,区别之处在于指定存储文件的文件路径参数excel_writer,增加了一个sheetnames参数,用来指定存储的Excel sheet的名称,默认为sheet1。
In [6]:
#请编写代码练习文本文件和Excel文件的读取和存储
import pandas as pd
#使用read_csv函数读取csv文件
df1 = pd.read_csv(‘student.csv’)
#读取csv文件到DataFrame中
df1
#df2 = pd.read_table(‘test.csv’,sep=’,’)
#使用read_table,并指定分隔符
#df2
#df3 = pd.read_csv(‘test.csv’,names=[‘a’,’b’,’c’,’d’])
#文件不包含表头行,允许自动分配默认列名,也可指定列名
#df3
Out[6]:
No.
Name
Age
Score
0
0
Hanmeimei
23
81
1
1
Mayi
18
99
2
2
Jack
21
89
3
3
Tom
25
95
4
4
Rain
19
80
5
5
Dan
22
86
数据合并¶
In [ ]:
#请编写代码练习数据的合并,练习merge、concat和combine_first等方法进行合并数据练习
#自己生成两个DataFrame,通过一个或多个键进行合并处理练习(参考第 5 章 Pandas数据载入与预处理.ipynb中的示例)
数据清洗¶
数据一般是不完整、有噪声和不一致的。数据清洗试图填充缺失的数据值、光滑噪声、识别离群点并纠正数据中的不一致
检测与处理缺失值¶
1. 缺失值的检测与统计¶
isnull()函数可以直接判断某列中的哪个数据为NaN, 利用isnull().sum()可以统计缺失值的缺失数目
2. 缺失值的处理¶¶
1)删除缺失值
在缺失值的处理方法中,删除缺失值是常用的方法之一。通过dropna方法可以删除具有缺失值的行。
dropna方法的格式: dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
2)填充缺失值
直接删除有缺失值的样本并不是一个很好的方法,尹成可以用一个特定的值替换缺失值。缺失值所在的特征为数值型时,
通常使用其均值、中位数和众数等描述其集中趋势的统计量来填充;缺失值所在特征为类别型数据时,则选择众数来填充。
Pandas库众提供了缺失值替换的方法fillna,其格式如下:
pandas.DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None)
检测与处理重复值¶
在DataFrame中利用duplicates方法判断各行是否有重复数据。duplicates方法返回一个布尔值的series,反映每一行是否与之前的行重复。
Pandas通过drop_duplicates删除重复的行,格式为: drop_duplicates(self, subset=None, keep=’first’, inplace=False)
检测异常值¶
简单的数据统计方法中常用散点图、箱线图和3σ法则检测异常值。
散点图方法: 通过数据分布的散点图发现异常数据。
箱线图分析: 利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据。
3σ法则: 在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
1.散点图方法:¶
通过数据分布的散点图发现异常数据
2. 箱线图分析¶
箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息。
3σ法则¶
若数据服从正态分布,在3σ原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值,因为在正态分布的假设下,距离平均值3σ之外的值出现的概率小于0.003。因此根据小概率事件,可以认为超出3σ之外的值为异常数据。
数据转换¶
1. 数据值替换¶
数据值替换是将查询到的数据替换为指定数据。
在pandas中通过replace进行数据值的替换。
2. 利用函数或映射进行数据转换¶
在Pandas中可以自定义函数,然后通过map方法实现。
In [ ]:
#(参考第 5 章 Pandas数据载入与预处理.ipynb中的示例)
from numpy import nan as NA
data = pd.DataFrame([[1.,4.5,3.],[1.,NA,NA],[NA,2,NA],[NA,2.5,3]])
print(data)
#给定如下数据,完成如下练习:
#1.编写代码判断哪些值是缺失值,并统计缺失值的个数
#2.删除缺失值,并打印删除缺失值后的DataFrame
#3.练习用指定的值去填充DataFrame中的缺失值
In [ ]:
#给定如下数据,练习重复值的判断、去除指定列的重复值等操作
data=pd.DataFrame({‘k1’:[‘one’,’two’,’three’]*2+[‘three’],’k2′:[2,3,2,3,1,4,4],’k3′:[2,3,5,2,1,4,4]})
print(data)
In [ ]:
In [9]:
#给定如下数据生成的DataFrame
data = {
‘name’:[‘张三’, ‘李四’, ‘王五’, ‘小明’],
‘sex’:[‘female’, ‘female’, ‘male’, ‘male’],
‘year’:[2001, 2001, 2003, 2002],
‘city’:[‘北京’, ‘上海’, ‘广州’, ‘北京’],
‘score’:[89,78,65,50]
}
df = pd.DataFrame(data)
print(df)
#1.请使用使用replace将“北京”替换为“深圳”
#2.编制代码实现将score分级为优、良、中、及格、差五个等级,练习使用map方法将数据中的值映射为相应等级
name sex year city score
0 张三 female 2001 北京 89
1 李四 female 2001 上海 78
2 王五 male 2003 广州 65
3 小明 male 2002 北京 50
数据标准化¶
离差标准化数据¶
离差标准化是对原始数据所做的一种线性变换,将原始数据的数值映射到[0,1]区间。
标准差标准化数据¶
标准差标准化又称零均值标准化或z分数标准化,是当前使用最广泛的数据标准化方法。
In [ ]:
#请分别对如下原始数据进行离差标准化处理和#标准差标准化处理:
x=np.array([[1.,-1,1.5.],[2.,1.,0.],[-0.5,1.5,-1.]])
数据的可视化¶
pandas的数据可视化¶
Pandas中集成了Matplotlib中的基础组件,让绘图更加便捷,结合Matplotlib的可视化一起练习
线形图、柱状图、直方图和密度图、散点图等的画法
In [ ]:
#请练习线形图、柱状图、直方图和密度图、散点图等的画法。数据可导入已有的数据,也可以自己编码生成相应数据。
#Series的plot方法绘图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
s = pd.Series(np.random.normal(size = 10))
s.plot()
#通过DataFrame对象的plot 方法可以为各列绘制一条线,并会创建好图例
df = pd.DataFrame({‘normal’:np.random.normal(size=50),’gamma’:np.random.gamma(1,size=50)})
df.plot()
#在DataFrame中绘制柱状图
stu = {‘name’:[‘张三’, ‘王芳’, ‘王五’, ‘李红’,’李函’],
‘sex’:[‘male’,’female’,’male’, ‘female’, ‘male’],
‘year’:[2001, 2001, 2003, 2002,2000]}
data4 = pd.DataFrame(stu)
print(data4[‘sex’].value_counts())
print(data4[‘sex’].value_counts().plot(kind = ‘bar’,rot = 30))
#DataFrame数据对象的柱状图
df = pd.DataFrame(np.random.randint(1,100,size=(3,3)),index = {‘one’,’two’,’three’},
columns = [‘I1′,’I2′,’I3’])
df.plot(kind = ‘barh’)
#在Pandas中绘制直方图
wy = pd.Series(np.random.normal(size = 80))
s.hist(bins=15,grid=False)
#在Pandas中绘制密度图
wy = pd.Series(np.random.normal(size=80))
s.plot(kind = ‘kde’)
#在Pandas中绘制散点图
wd = pd.DataFrame(np.arange(10),columns=[‘A’])
wd[‘B’] = 2*wd[‘A’] + 4
wd.plot(kind = ‘scatter’,x = ‘A’,y = ‘B’)
Matplotlib数据可视化基础¶
Seaborn可视化¶
pyecharts可视化¶
请参考第6-8章的内容,练习相应库的可视化操作
提供了学生数据表(见student-mat.csv文件)给大家,请就该数据进行分析:¶
1.请统计各学校的性别(男女生)分布柱状图(直方图)
2.请统计不同性别的年龄分布图
3.绘制散点图等分析,请分析父亲工作情况和母亲工作情况的数据分散性。
数据表说明:本数据变量数较多,在第一行中给出。下面给出需要用到的部分变量的中译名:
school;学校(GP和MS两个学校)
sex;性别
age;年龄
address;地址
Mjob;母亲工作情况(有”health”;”services”,”at_home”;”teacher””other”等取值)
Fjob;父亲工作情况(有”health”;”services”,”at_home”;”teacher””other”等取值)
In [ ]:
给定一个简单的APP下载量数据(见appdownloaddata.csv文件),请编写代码:¶
(1)绘制数据的柱状图
(2)绘制各类APP下载量的饼图
In [ ]: