一、数据读取、观察、合并
1.1、数据读取
1.1.1、工具包导入
import pandas as pd#工具包导入
import numpy as np#工具包导入
import matplotlib.pyplot as plt#引入绘图所用包
%matplotlib inline
#配置绘图环境
1.1.2、读取数据
data = pd.read_csv('./lianjia1/lianjia1.csv',encoding='gbk')#读取文件
#如果数据分为多条则可以使用循环进行读取数据
# data_list=[]#定义空列表
#1、在编码方式相同时
# for i in range(1,8):
# data = pd.read_csv('./lianjia1/lianjia1.csv',encoding='gbk')
# data_list.append(data)
#2、编码方式不同时,可以采用捕获异常的方式
# for i in range(1,8):
# try:
# data = pd.read_csv('./lianjia1/lianjia1.csv',encoding='gbk')
# except:
# data = pd.read_csv('./lianjia1/lianjia1.csv')
# data_list.append(data)
?1.1.3、显示数据
data.head()#显示数据(默认为前5行)
?
?
?1.2、数据观察
data.describe()#对所有数据进行分析,描述数据的属性(注意是对整数或者浮点型的数进行分析)
data.info()#展示所有数据的类型
?
?
?1.3、数据提取
data = data[['cjdanjia','cjxiaoqu','cjlouceng','bankuai']]#使用双中括号加类别名进行提取指定数据
?
?二、缺失值处理
2.1、检查是否存在缺失值和缺失值过滤
data.isnull()#isnull()方法可以判断数据是否缺失但是可能显示不完全,导致不能完全确实是否有缺失值
(data.isnull()).sum()#对isnull()的结果进行累加(在计算机中false代表0,true代表1),看结果是否有缺失值
#如果有缺失值我们可以使用
# data[data.+类别名+.isnull()]来查看缺失值具体是哪一行
# 如果想要删除缺失值,有几种方法进行删除
# 1、data.dropna(how = 'all',inplace=True)#此方法会把一行中所有数据都为NAN的数据删除,
# 其中inplace参数状态是否返回data,如果为真就不返回,否则返回
?2.2、重复值
data.duplicated()#duplicated()会展现数据是否重复,如果重复显示为true,反之为false
?
(data.duplicated()).sum()#对重复值进行2进制运算,
#不能直接把重复数据删除,因为当数据中第一行中有一个数据为null,第二行中也有一个数据为null但不是同一列,系统也会判断这俩个数据重复
# 所有我们要对非null数据进行重复值判断
(data.duplicated(subset=['cjdanjia','cjxiaoqu','cjlouceng'])).sum()
#先进性排序:把有效数据排在前面,null排在后面
data.sort_values(by = 'bankuai',inplace=True)
#现在进行重复值删除操作
data.drop_duplicates(subset=['cjdanjia','cjxiaoqu','cjlouceng'],inplace=True)
?
三、数据类型转换、异常值处理、数据离散化分析
?3.1、数据类型转换
这里以成交单价为例
3.1.1、判断数据中的格式是否相同
#将数据中的‘元/平’转化成可以进行计算的数据
#先判断是否所有数据都是包含'元/平’
(data.cjdanjia.str.contains('元/平')).sum()
3.1.2、转换类型
第一种方法:函数法
# data.cjdanjia.map(lambda x:round(float(x.replace('元/平',''))/10000,2))
#其中round是保留几位小数;lambda x:表达式,叫做单行函数;float强制类型转换;x.replace将A替换成B
第二种方法:向量法
data=data.assign(cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2))
#data.assign()将转换后的苏剧复制给原始数据,后面同上
?俩种方法都可以实现
?3.2、去除异常值
对不符合要求的数据设置一个’门槛‘,也就是进行一次过滤
#对数值设置一个规则,过滤不符合的
data=data[data.cjdanjia > 0.6]
data.cjdanjia.min()
3.3、离散化分析
就是将数据分为不同的组别,利于观察和分析
#将数据按成交单价划分为不同区间
bins=[0,1,2,3,4,5,7,10,15]
pd.cut(data.cjdanjia,bins).value_counts().plot.bar(rot = 20)#对每一个区间进行计数,plot为画图代码,rot 是将横坐标按行排列
?
?3.4、字符串处理
字符串处理和数据类型转换的步骤相似
3.4.1、判断数据格式是否一致
#判断楼层是否都以俩个斜杠划分
(data.cjlouceng.str.split('/').map(len)!=3).sum()
3.4.2、?解析楼层(利用向量法)
data=data.assign(chaoxiang = data.cjlouceng.map(lambda x:x.split('/')[0]))
data=data.assign(louceng = data.cjlouceng.map(lambda x:x.split('/')[1]))
?由于机器不能对中文数据很好的分析,所以我们将楼层,朝向数据进行one-hot编码处理
data.join(pd.get_dummies(data.louceng))
#data.join()添加一列数据
#pd.get_dummies()获取one-hot编码
?
|