matplotlib补充知识及数据清理方法

今日内容概要

  • 数据操作
  • 数据清洗理论
  • 数据清洗实操

数据操作

read_csv
read_excel
read_hdf
read_html
read_json
read_msgpack
read_sql

import pandas as pd
# 读取文件的时候直接指定类名称names参数
cf = pd.read_csv("D:\userbook.csv",names=['数','据','分','析','真','好','玩'])
cf
运行结果:
数	据	分	析	真	好	玩
0	ID	name	age	NaN	NaN	NaN	NaN
1	01	satan	22	NaN	NaN	NaN	NaN
2	02	jason	23	NaN	NaN	NaN	NaN
3	03	tanke	24	NaN	NaN	NaN	NaN
4	04	egon	25	NaN	NaN	NaN	NaN
5	05	jerry	26	NaN	NaN	NaN	NaN
6	06	tom	27	NaN	NaN	NaN	NaN
7	07	jack	28	NaN	NaN	NaN	NaN
8	08	qiaozhi	29	NaN	NaN	NaN	NaN
9	09	peiqi	30	NaN	NaN	NaN	NaN
10	10	king	31	NaN	NaN	NaN	NaN

import pandas as pd
import numpy as np
frame = pd.DataFrame({'a':np.random.randn(100)})
运行结果:
a
0	0.932126
1	-1.668897
2	1.720300
3	-1.485955
4	1.058283
...	...
95	0.790048
96	0.563777
97	-0.611943
98	-0.544918
99	0.667453
100 rows × 1 columns
frame.to_hdf("D:/mydata.h5",'obj3',format='table')
pd.read_hdf('D:/mydata.h5','obj3',where=['index < 5'])


import requests
import pandas as pd
url = "http://api.github.com/repos/pandas-dev/pandas/issues"
resp = requeses.get(url)
data = resp.json()
# 因为data中的每一个元素都是一个字典,可以直接将data传给DataFrame,并且将其中自己喜欢的字段展示出来
issue = pd.DataFrame(data.columns=['number','title','labels','state'])
issue

数据清洗

数据清洗的工作节点
        在你获取到第一手数据之后就应该进行数据清洗操作

脏数据
   残缺数据、错误数据、重复数据、不符合规则的数据……

干净的数据
    可以直接带入模型的数据

数据清洗的大致 步骤
1.数据的读取
2.数据的探索
3.数据简单处理
4.重复值处理
5.缺失值处理
6.异常值处理
7.文本字符数据处理
8.时间序列处理
# 上述步骤3~8有时候不需要按照固定的顺序来,并且也不是所有的数据都需要经历上述所有的清洗操作

数据清洗案例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# jupyter notebook打开的话需要运行这一行代码,在cell中显示图形

# 导入数据集及初步探索
cf = pd.read_csv('qunar_freetrip(1).csv',index_col=0)
cf
运行结果:
出发地	目的地	价格	节省	路线名	酒店	房间	去程航司	去程方式	去程时间	回程航司	回程方式	回程时间
0	哈尔滨	北海	2208.0	650.0	哈尔滨-北海3天2晚 | 入住北海祥丰嘉年华大酒店 + 春秋航空往返机票	北海祥丰嘉年华大酒店 舒适型 4.7分/5分	标准双人间(双床) 双床 不含早 1间2晚	春秋航空 9C8741	直飞	17:10-21:50	春秋航空 9C8742	直飞	10:20-15:05
1	成都	泸沽湖	1145.0	376.0	成都-泸沽湖3天2晚 | 入住7天酒店丽江古城中心店 + 成都航空往返机票	7天酒店丽江古城中心店 经济型 4.0分/5分	经济房-不含早-限时特... 其他 不含早 1间2晚	成都航空 EU2237	直飞	19:45-21:20	成都航空 EU2738	直飞	23:30-01:05
2	广州	沈阳	2702.0	618.0	广州-沈阳3天2晚 | 入住沈阳中煤宾馆 + 南方航空/深圳航空往返机票	沈阳中煤宾馆 舒适型 4.5分/5分	大床间(内宾) 大床 双早 1间2晚	南方航空 CZ6384	直飞	08:05-11:45	深圳航空 ZH9652	经停	08:20-13:05
3	上海	九寨沟	1954.0	484.0	上海-九寨沟3天2晚 | 入住红原芸谊大酒店 + 成都航空往返机票	红原芸谊大酒店 舒适型 4.6分/5分	豪华双床房[双早] 双床 双早 1间2晚	成都航空 EU6678	直飞	21:55-01:15	成都航空 EU6677	直飞	17:45-20:35
4	广州	天津	1608.0	422.0	广州-天津3天2晚 | 入住天津逸海明珠大酒店 + 奥凯航空/海南航空往返机票	天津逸海明珠大酒店 高档型 4.1分/5分	豪华双床房(预付) 双床 不含早 1间2晚	奥凯航空 BK2787	直飞	06:55-10:00	海南航空 HU7201	直飞	20:15-23:25
...	...	...	...	...	...	...	...	...	...	...	...	...	...
5095	宁波	九寨沟	2085.0	562.0	宁波-九寨沟3天2晚 | 入住黑水县达古冰山国际大酒店 + 成都航空/四川航空往...	黑水县达古冰山国际大酒店 豪华型 3.9分/5分	B区豪华标间(双床) 双床 不含早 1间2晚	成都航空 EU2730	经停	19:45-00:45	四川航空 3U8927	经停	07:55-12:15
5096	成都	泸沽湖	1158.0	376.0	成都-泸沽湖3天2晚 | 入住丽江望月阁客栈 + 成都航空往返机票	丽江望月阁客栈 经济型 4.6分/5分	标准双人间-不含早(预... 双床 不含早 1间2晚	成都航空 EU2237	直飞	19:45-21:20	成都航空 EU2738	直飞	23:30-01:05
5097	天津	丽江	1616.0	426.0	天津-丽江3天2晚 | 入住丽江凡间度假连锁客栈青旅店 + 天津航空/首都航空往...	丽江凡间度假连锁客栈青旅店 经济型 4.5分/5分	大床房-预付 大床 不含早 1间2晚	天津航空 GS7861	直飞	16:25-19:45	首都航空 JD5739	直飞	07:50-10:50
5098	大连	重庆	1703.0	446.0	大连-重庆3天2晚 | 入住重庆酉阳锦宏大酒店 + 华夏航空/山东航空往返机票	重庆酉阳锦宏大酒店 舒适型 4.0分/5分	特惠房(大床) 大床 不含早 1间2晚	华夏航空 G52762	经停	18:25-23:30	山东航空 SC4837	经停	07:00-11:30
5099	天津	哈尔滨	1192.0	356.0	天津-哈尔滨3天2晚 | 入住哈尔滨钰轩酒店中央大街店 + 奥凯航空/福州往返机票	哈尔滨钰轩酒店中央大街店 舒适型 4.0分/5分	标准大床房 大床 大床 双早 1间2晚	奥凯航空 BK2918	直飞	21:10-23:25	福州 FU6556	直飞	11:35-13:45
5100 rows × 13 columns

cf.head # 简答查看
cf.head(3)# 简单查看前三行数据
运行结果:
出发地	目的地	价格	节省	路线名	酒店	房间	去程航司	去程方式	去程时间	回程航司	回程方式	回程时间
0	哈尔滨	北海	2208.0	650.0	哈尔滨-北海3天2晚 | 入住北海祥丰嘉年华大酒店 + 春秋航空往返机票	北海祥丰嘉年华大酒店 舒适型 4.7分/5分	标准双人间(双床) 双床 不含早 1间2晚	春秋航空 9C8741	直飞	17:10-21:50	春秋航空 9C8742	直飞	10:20-15:05
1	成都	泸沽湖	1145.0	376.0	成都-泸沽湖3天2晚 | 入住7天酒店丽江古城中心店 + 成都航空往返机票	7天酒店丽江古城中心店 经济型 4.0分/5分	经济房-不含早-限时特... 其他 不含早 1间2晚	成都航空 EU2237	直飞	19:45-21:20	成都航空 EU2738	直飞	23:30-01:05
2	广州	沈阳	2702.0	618.0	广州-沈阳3天2晚 | 入住沈阳中煤宾馆 + 南方航空/深圳航空往返机票	沈阳中煤宾馆 舒适型 4.5分/5分	大床间(内宾) 大床 双早 1间2晚	南方航空 CZ6384	直飞	08:05-11:45	深圳航空 ZH9652	经停	08:20-13:05

cf.shape # 查看数据形状 
运行结果:
(5100, 13) # 5100行数据,13列也称为13个特征

cf.info() # 查看数据结构(如是否有缺失值,数据类型等)
运行结果:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5100 entries, 0 to 5099
Data columns (total 13 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   出发地     5098 non-null   object 
 1    目的地    5099 non-null   object 
 2   价格      5072 non-null   float64
 3   节省      5083 non-null   float64
 4   路线名     5100 non-null   object 
 5   酒店      5100 non-null   object 
 6   房间      5100 non-null   object 
 7   去程航司    5100 non-null   object 
 8   去程方式    5100 non-null   object 
 9   去程时间    5100 non-null   object 
 10  回程航司    5100 non-null   object 
 11  回程方式    5100 non-null   object 
 12  回程时间    5100 non-null   object 
dtypes: float64(2), object(11)
memory usage: 338.7+ KB
    
cf.describe() # 查看快速统计(只展现数值型数据统计,非数值型直接忽略)
运行结果:
价格	节省
count	5072.000000	5083.000000
mean	1765.714905	474.139878
std	2580.129644	168.893780
min	578.000000	306.000000
25%	1253.000000	358.000000
50%	1632.000000	436.000000
75%	2028.250000	530.000000
max	179500.000000	3500.000000

cf.columns # 查看列名称 注意这里可能会出现列名称多空格的情况导致无法直接导出
运行结果:
Index(['出发地 ', ' 目的地', '价格 ', '节省', '路线名', '酒店', '房间', '去程航司', '去程方式', '去程时间',
       '回程航司', '回程方式 ', '回程时间'],
      dtype='object')
cf.head(2) # 对比列名称是否有空格
# 移除列名称里面多余的空格
col = cf.columns.values # 将列名变成支持for循环的ndarray
col
运行结果:
array(['出发地 ', ' 目的地', '价格 ', '节省', '路线名', '酒店', '房间', '去程航司', '去程方式',
       '去程时间', '回程航司', '回程方式 ', '回程时间'], dtype=object)
# for循环加strip移除字符串首尾的空格
cf.columns = [i.strip() for i in cool]
cf.columns
运行结果:
Index(['出发地', '目的地', '价格', '节省', '路线名', '酒店', '房间', '去程航司', '去程方式', '去程时间',
       '回程航司', '回程方式', '回程时间'],
      dtype='object')
# 重复值处理
duplicated()函数:查看并显示数据表中的重复值
1.当两条记录中的所有的数据都相等的时候才会判定为重复值
2.函数支持从前往后和从后往前两种重复值查找模式(默认是从前往后进行查看和判断)
cf.duplicated() # 返回布尔值数据
运行结果:
0       False
1       False
2       False
3       False
4       False
        ...  
5095     True
5096    False
5097    False
5098    False
5099    False
Length: 5100, dtype: bool

# 查看所有的重复值数据 利用布尔值索引
cf[cf.duplicated()]
运行结果:
出发地	目的地	价格	节省	路线名	酒店	房间	去程航司	去程方式	去程时间	回程航司	回程方式	回程时间
454	广州	黄山	1871.0	492.0	广州-黄山3天2晚 | 入住黄山汤口醉享主题酒店 + 南方航空往返机票	黄山汤口醉享主题酒店 舒适型 4.8分/5分	睫毛弯弯(大床) 大床 不含早 1间2晚	南方航空 CZ3627	直飞	19:20-21:15	南方航空 CZ3628	直飞	22:05-23:50
649	济南	长沙	1134.0	360.0	济南-长沙3天2晚 | 入住长沙喜迎宾华天大酒店 + 山东航空往返机票	长沙喜迎宾华天大酒店 高档型 3.7分/5分	特惠双间(特惠抢购)(... 双床 不含早 1间2晚	山东航空 SC1185	直飞	18:40-20:50	山东航空 SC1186	直飞	10:20-12:15
685	青岛	重庆	1474.0	420.0	青岛-重庆3天2晚 | 入住怡家丽景酒店重庆垫江店 + 山东航空/华夏航空往返机票	怡家丽景酒店重庆垫江店 舒适型 4.3分/5分	法式房(内宾)(无窗)... 大床 不含早 1间2晚	山东航空 SC4709	经停	19:30-00:05	华夏航空 G54710	经停	18:00-22:25
852	北京	哈尔滨	1450.0	368.0	北京-哈尔滨3天2晚 | 入住哈尔滨水逸城市酒店 + 南方航空/大新华航空往返机票	哈尔滨水逸城市酒店 舒适型 4.6分/5分	标准间-【预付特惠】独... 双床 双早 1间2晚	南方航空 CZ6202	直飞	22:20-00:20	大新华航空 CN7150	直飞	22:50-00:55
922	北京	长沙	1289.0	334.0	北京-长沙3天2晚 | 入住浏阳市华尔宫大酒店 + 海南航空/南方航空往返机票	浏阳市华尔宫大酒店 3.8分/5分	豪华双人间(双床) 双床 不含早 1间2晚	海南航空 HU7135	直飞	17:45-20:30	南方航空 CZ3855	直飞	22:55-01:10
...	...	...	...	...	...	...	...	...	...	...	...	...	...
5045	杭州	丽江	2872.0	718.0	杭州-丽江3天2晚 | 入住丽江松竹居客栈玉观音店 + 长龙航空/首都航空往返机票	丽江松竹居客栈玉观音店 高档型 4.6分/5分	特惠房(大床) 大床 不含早 1间2晚	长龙航空 GJ8869	经停	08:50-13:35	首都航空 JD5192	直飞	13:00-16:15
5066	哈尔滨	西安	1843.0	450.0	哈尔滨-西安3天2晚 | 入住西安铁通商务酒店贵宾楼 + 天津航空/东方航空往返...	西安铁通商务酒店贵宾楼 舒适型 4.2分/5分	标准间(持房卡尊享清凉... 双床 不含早 1间2晚	天津航空 GS7584	经停	12:30-17:40	东方航空 MU2211	经停	08:45-13:25
5068	南京	成都	1922.0	552.0	南京-成都3天2晚 | 入住成都伊丽特酒店 + 东方航空/西藏航空往返机票	成都伊丽特酒店 高档型 4.5分/5分	行政标准间-含早立即确... 双床 双早 1间2晚	东方航空 MU2880	直飞	21:55-00:35	西藏航空 TV9839	直飞	06:30-08:55
5081	上海	青岛	769.0	354.0	上海-青岛3天2晚 | 入住青岛金中太大酒店 + 春秋航空/吉祥航空往返机票	青岛金中太大酒店 舒适型 4.8分/5分	特惠大床房[无早] 大床 不含早 1间2晚	春秋航空 9C8853	直飞	19:50-21:35	吉祥航空 HO1242	直飞	23:05-00:35
5095	宁波	九寨沟	2085.0	562.0	宁波-九寨沟3天2晚 | 入住黑水县达古冰山国际大酒店 + 成都航空/四川航空往...	黑水县达古冰山国际大酒店 豪华型 3.9分/5分	B区豪华标间(双床) 双床 不含早 1间2晚	成都航空 EU2730	经停	19:45-00:45	四川航空 3U8927	经停	07:55-12:15
100 rows × 13 columns

# 统计重复值的数量
                                                       cf.duplicated().sum()
运行结果:
100                                                   # 删除重复值 drop_duplicates()
cf.drop_duplicates(inplace=True) # inplace为true则修改原数据,默认为false不会修改原数据
# 确认删除操作
cf.shape
                                                       # 重置行索引(动了原数据集就需要考虑是否重置行索引)
cf.index = range(cf.shape[0])
                                                       # 异常值处理
cf.describe() # 观察可能的异常值
运行结果:                                               价格	节省
count	4972.000000	4983.000000
mean	1767.782381	474.490869
std	2604.329780	169.148391
min	578.000000	306.000000
25%	1253.000000	358.000000
50%	1633.000000	436.000000
75%	2031.000000	532.000000
max	179500.000000	3500.000000                      
                                                        # 1.找出价格的异常值
ses = (cf['价格']-cf['价格'].mean())/cf['价格'].std()
ses
运行结果:                                               0       0.169033
1      -0.239133
2       0.358717
3       0.071503
4      -0.061353
          ...   
4995   -0.113189
4996   -0.234142
4997   -0.058281
4998   -0.024875
4999   -0.221087
Name: 价格, Length: 5000, dtype: float64
# 找出大于三倍标准差的数据就是异常值
cf[ses.abs()>3]
运行结果:
出发地	目的地	价格	节省	路线名	酒店	房间	去程航司	去程方式	去程时间	回程航司	回程方式	回程时间
2763	杭州	九寨沟	179500.0	538.0	杭州-九寨沟3天2晚 | 入住九寨沟九乡宾馆 + 成都航空/长龙航空往返机票	九寨沟九乡宾馆 舒适型 4.3分/5分	特惠房(双床) 双床 不含早 1间2晚	成都航空 EU2206	经停	20:30-01:00	长龙航空 GJ8680	经停	20:25-00:50
                                                       # 2.找出节省的异常值(价格肯定要比节省的大)
sum(cf.价格 > cf.节省)
cf[cf.节省>cf.价格]
运行结果:                                                出发地	目的地	价格	节省	路线名	酒店	房间	去程航司	去程方式	去程时间	回程航司	回程方式	回程时间
2904	武汉	西安	949.0	3500.0	武汉-西安3天2晚 | 入住西安西稍门大酒店 + 东方航空往返机票	西安西稍门大酒店 舒适型 3.3分/5分	标准间B(丝路之旅)(... 双床 不含早 1间2晚	东方航空 MU2194	直飞	21:50-23:30	东方航空 MU2462	直飞	19:35-21:20
3108	济南	大连	911.0	3180.0	济南-大连3天2晚 | 入住普兰店科洋大酒店 + 山东航空/厦门航空往返机票	普兰店科洋大酒店 舒适型 4.4分/5分	大床房(限量促销) 大床 不含早 1间2晚	山东航空 SC4916	直飞	19:45-20:50	厦门航空 MF8042	直飞	13:10-14:20
3660	沈阳	青岛	924.0	3200.0	沈阳-青岛3天2晚 | 入住星程酒店青岛台东步行街店 + 青岛航/南方航空往返机票	星程酒店青岛台东步行街店 舒适型 4.2分/5分	大床房(内宾)(提前1... 大床 不含早 1间2晚	青岛航 QW9780	直飞	22:35-00:10	南方航空 CZ6568	直飞	20:55-22:35
# 3.删除1和2中出现的异常数据                               
                                                                                                              先将1和2的异常数据拼接起来获取到数据的行索引  
                                                       ses1 = pd.concat([cf[cf.节省>cf.价格],cf[ses.abs()>3]])
delete_line = ses1.index
cf.drop(delete_line,inplace=True)                                           

补充

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 1.多个图形在一个图片上显示
x = [1,2]
y =[2,4]
plt.subplot(2,2,1) # 接下来的产生的图片会分成四个区域 2行2列 第三个参数就是指定在哪个区域画图
plt.plot(x,y,color='darkorange')
plt.subplot(2,2,4)
plt.plot(x,y,color='gold')
plt.subplot(2,2,2)
plt.plot(x,y,color='pink')
plt.subplot(2,2,3)
plt.bar(x,y,color='cyan')

# 2.直方图
t =  pd.Series(np.random.randn(100))
plt.title('直方图',fontsize=30,color='lime')
plt.hist(t)  # 默认没有间隙
plt.hist(t,rwidth=0.5) # 设置间隙
plt.hist(t,rwidth=0.5,bins=50) # 设置x轴密度 默认10
plt.savefig('直方图')
plt.show()
# 3.博客园小猿取经密码
xiaoyuanqujing@666

# json格式数据
JSON的6种数据类型

上面两种JSON形式内部都是包含value的,那json的value到底有哪些类型,而且上期我们说JSON其实就是从js数据格式中提取了一个子集,那具体有哪几种数据类型呢?
**************************************
string:字符串,必须要用双引号引起来
**************************************
number:数值,与javascript的number一致,整数(不使用小数点或指数计数法) 最多为15位,小数的最大位数是17。
object:JavaScript的array表示方式[value],可嵌套。
array:数组,javascript的array表示方式[value],可嵌套。
true:空值,javascript的null。

接口ARI
      你可以简单的认为接口api就是一个个网址
      我们可以访问这些网址拿到我们想要的数据
      这些数据一般情况下都会是json格式而不是网页的形式
      很丑需要自己做后期处理

为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
原文地址:https://www.cnblogs.com/abudrSatan1998/p/13646080.html