zoukankan      html  css  js  c++  java
  • 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格式而不是网页的形式
          很丑需要自己做后期处理
    

    为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
  • 相关阅读:
    [Python图像处理]十.图像的灰度线性变换
    pyecharts实现散点图,词云图,饼状图,直方图
    pyecharts(柱状图)
    [Python图像处理]九.图像形态学相关运算
    如何排查内存泄漏
    如何进行SDK的测试
    分享两个实用的shell脚本实例
    分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息
    Linux服务器问题排查思路及常用命令
    工作中最常用的Linux命令,排查问题必备
  • 原文地址:https://www.cnblogs.com/abudrSatan1998/p/13646080.html
Copyright © 2011-2022 走看看