目录

  • 1 第一章 数据仓库概述
    • 1.1 授课安排
    • 1.2 数据仓库及其历史
      • 1.2.1 数据仓库的概念
        • 1.2.1.1 本节视频
      • 1.2.2 数据仓库特征
        • 1.2.2.1 本节视频
    • 1.3 数据仓库系统结构
      • 1.3.1 数据仓库系统的组成
        • 1.3.1.1 本节视频
      • 1.3.2 ETL
        • 1.3.2.1 本节视频
      • 1.3.3 数据仓库和数据集市的关系
      • 1.3.4 元数据及其管理
      • 1.3.5 数据集市和元数据管理视频
    • 1.4 数据仓库系统开发工具
    • 1.5 数据仓库与操作型数据库的关系
      • 1.5.1 本节视频内容
  • 2 第二章 数据仓库设计
    • 2.1 授课安排
    • 2.2 数据仓库设计概述
    • 2.3 数据仓库的规划和需求分析
    • 2.4 数据仓库的建模
    • 2.5 数据仓库的物理模型设计
    • 2.6 数据仓库的部署和维护
  • 3 第三章 OLAP技术
    • 3.1 授课安排
    • 3.2 OLAP概述
    • 3.3 OLAP的多维数据模型
    • 3.4 OLAP实现
  • 4 第四章 数据
    • 4.1 课程资料
  • 5 第五章 数据挖掘概述
    • 5.1 授课安排
    • 5.2 什么是数据挖掘?
    • 5.3 数据挖掘系统
    • 5.4 视频
    • 5.5 数据挖掘过程
  • 6 第六章 关联分析
    • 6.1 授课安排
    • 6.2 关联分析概念
    • 6.3 Apriori算法
    • 6.4 FP-growth树
    • 6.5 多层关联规则
    • 6.6 【扩充知识】机器学习——关联规则——支持度(support)、置信度(confidence)、提升度(Lift)
  • 7 第七章 序列模式挖掘
    • 7.1 序列模式挖掘概述
    • 7.2 AprioriAll算法
    • 7.3 AprioriSome算法
    • 7.4 FreeSpan算法
    • 7.5 PrefixSpan算法
  • 8 第八章 聚类分析
    • 8.1 聚类概述
  • 9 分类算法
    • 9.1 课件
  • 10 实验1 python基础
    • 10.1 讲解文本内容
    • 10.2 课程PDF
    • 10.3 实验代码
    • 10.4 实验报告封皮
  • 11 实验2-python
    • 11.1 讲解文本内容
    • 11.2 实验代码
    • 11.3 实验报告封面
  • 12 实验3--python
    • 12.1 讲解文本内容
    • 12.2 实验代码
    • 12.3 实验报告封面
  • 13 实验4--python
    • 13.1 讲解文本内容
    • 13.2 21.1实验代码
    • 13.3 实验内容2
    • 13.4 实验内容3
    • 13.5 实验报告封面
  • 14 实验5--python
    • 14.1 文本内容-NumPy模块
    • 14.2 第三方可视化数据分析图表
    • 14.3 数据
    • 14.4 思考题
    • 14.5 实验报告封面
  • 15 实验6--python
    • 15.1 实验 NumPy矩阵的基本操作
    • 15.2 实验 关联规则算法
    • 15.3 实验 商品零售购物篮分析
    • 15.4 实验报告封面
  • 16 实验7--python
    • 16.1 实验1 用关联规则分析方法推荐电影
    • 16.2 实验2 FP-growth算法
    • 16.3 实验3 教育平台的线上课程推荐策略
    • 16.4 实验报告封面
  • 17 实验8-python
    • 17.1 实验1 购物车分析
    • 17.2 实验2 基于关联规则的文本分析
  • 18 实验9--python
    • 18.1 实验1 聚类分析
    • 18.2 实验2 航空公司客户价值分析
    • 18.3 实验3 运输车辆安全驾驶行为分析
    • 18.4 实验报告封面
实验内容2


   空值和缺失值的处 理

【例1】


  【例2】

【例3】


   【例4】

   【例5】

import pandas as pd
import numpy as np
from numpy import NaN
df_obj = pd.DataFrame({'A': [1, 2, 3, NaN],
                       'B': [NaN, 4, NaN, 6],
                       'C': ['a', 7, 8, 9],
                       'D':[NaN, 2, 3, NaN]})
df_obj

【例6】

df_obj.fillna('66.0')   # 使用66替换缺失值

【例7】

import pandas as pd
import numpy as np
from numpy import NaN
df_obj = pd.DataFrame({'A': [1, 2, 3, NaN],
                       'B': [NaN, 4, NaN, 6],
                       'C': ['a', 7, 8, 9],
                       'D': [NaN, 2, 3, NaN]})
df_obj

【例8】    

df_obj.fillna({'A': 4.0, 'B': 5.0})  # 指定列填充数据

【例9】

import pandas as pd
import numpy as np
from numpy import NaN
df = pd.DataFrame({'A': [1, 2, 3, None],
                   'B': [NaN, 4, None, 6],
                   'C': ['a', 7, 8, 9],
                   'D': [None, 2, 3, NaN]})
df

【例10】

df.fillna(method='ffill')   # 使用前向填充的方式替换空值或缺失值

重复值的处理

【例11】

import pandas as pd
person_info = pd.DataFrame({'id': [1, 2, 3, 4, 4, 5],

【例12】

import pandas as pd
person_info = pd.DataFrame({'id': [1, 2, 3, 4, 4, 5],
                            'name': ['小铭', '小月月', '彭岩', '刘华', '刘华', '周华'],
                            'age': [18, 18, 29, 58, 58, 36],
                            'height': [180, 180, 185, 175, 175, 178],
                            'gender': ['女', '女', '男', '男', '男', '男']})
person_info. drop_duplicates()

 异常值的处理

【例13】

import pandas as pd
import numpy as np
# ser1 表示传入DataFrame的某一列
def three_sigma(ser1): 
    # 求平均值
    mean_value = ser1.mean()
    # 求标准差
    std_value = ser1.std()
    # 位于(μ-3σ,μ+3σ)区间的数据是正常的,不在这个区间的数据为异常的
    # ser1中的数值小于μ-3σ或大于μ+3σ均为异常值
    # 一旦发现有异常值,就标注为True,否则标注为False
    rule = (mean_value - 3 * std_value > ser1) | (ser1.mean() + 3 * ser1.std() < ser1)
    # 返回异常值的位置索引
    index = np.arange(ser1.shape[0])[rule]
    # 获取异常数据
    outrange = ser1.iloc[index]
    return outrange

【例14

# 导入需要使用的包
file = open('E:/数据分析/example_data.csv')
df = pd.read_csv(file)
df

【例15】

three_sigma(df['A'])

【例16】

three_sigma(df['B'])

【例17】

import pandas as pd
%matplotlib inline
df = pd.DataFrame({'A': [1, 2, 3, 4],
'B': [2, 3, 5, 2],
'C': [1, 4, 7, 4],
'D': [1, 5, 30, 3]})
df.boxplot(column=['A', 'B', 'C', 'D'])

【例18】

import pandas as pd
df = pd.DataFrame ({'菜谱名': ['红烧肉', '铁板鱿鱼', 
                    '小炒肉', '干锅鸭掌', '酸菜鱼'],
                    '价格': [38, 25, 26, 388, 35]})
df.replace(to_replace=388,value=38.8)
    【例22】

import pandas as pd
df = pd.DataFrame({'A':['5', '6', '7'], 'B':['3', '2', '1']})
df.dtypes  # 查看数据的类型

【例23】

import pandas as pd
# 创建DataFrame对象,数据的类型为int
df = pd.DataFrame({'A': ['5', '6', '7'], 'B': ['3', '2', '1']},
                  dtype='int')
df.dtypes
【例24】
import pandas as pd
df = pd.DataFrame({'A': ['1', '1.2', '4.2'],
                   'B': ['-9', '70', '88'],
                   'C': ['x', '5.0', '0']})
df.dtypes
【例25】
df['B'].astype(dtype='int')  # 强制转换为int类型


【例26】
import pandas as pd
ser_obj = pd.Series(['1', '1.2', '4.2'])
ser_obj
【例27】
# 转换object类型为float类型
pd.to_numeric(ser_obj, errors='raise')

数据合并

轴向堆叠数据

   【例28】
import pandas as pd
df1 = pd.DataFrame({'A': ['A0', 'A0', 'A1'],
                    'B': ['B0', 'B0', 'B1']})
df2 = pd.DataFrame({'C': ['C0', 'C0', 'C1', 'C3'],
                    'D': ['D0', 'D2', 'D2', 'D3']})
# 横向堆叠合并df1和df2,采用外连接的方式
pd.concat([df1, df2], join='outer', axis=1)

【例29】

import pandas as pd
first = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                      'B': ['B0', 'B1', 'B2'],
                      'C': ['C0', 'C1', 'C2']})
second = pd.DataFrame({'B': ['B3', 'B4', 'B5'],
                       'C': ['C3', 'C4', 'C5'],
                       'D': ['D3', 'D4', 'D5']})
pd.concat([first, second], join='inner', axis=0)

主键合并数据

   【例30】

import pandas as pd
left = pd.DataFrame({'key':['K0','K1','K2'],
                       'A':['A0','A1','A2'],
                        'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K1','K2','K3'],
                         'C':['C0','C1','C2','C3'],
                         'D':['D0','D1','D2','D3']})
pd.merge(left, right, on='key')

【例31】

import pandas as pd
left = pd.DataFrame({'key':['K0','K1','K2'],
                       'A':['A0','A1','A2'],
                       'B':['B0','B1','B2']})
right = pd.DataFrame({'key':['K0','K5','K2','K4'],
                         'B':['B0','B1','B2','B5'],
                         'C':['C0','C1','C2','C3'],
                         'D':['D0','D1','D2','D3']})
pd.merge(left, right, on=['key', 'B'])

【例32】

import pandas as pd
left = pd.DataFrame({'A':['A0','A1','A2'],
                       'B':['B0','B1','B2']})
right = pd.DataFrame({'C':['C0','C1','C2'],
                         'D':['D0','D1','D2']})
pd.merge(left,right,how='outer',left_index=True,right_index=True)


根据索引合并数据

      【例33】

import pandas as pd
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                        'B': ['B0', 'B1', 'B2']})
right = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                         'D': ['D0', 'D1', 'D2']},
                        index=[ 'a','b','c'])
left.join(right, how='outer')

【例34】

import pandas as pd
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                        'B': ['B0', 'B1', 'B2'],
                      'key': ['K0', 'K1', 'K2']})
right = pd.DataFrame({'C': ['C0', 'C1','C2'],
                         'D': ['D0', 'D1','D2']},
                        index=['K0', 'K1','K2'])
# on参数指定连接的列名
left.join(right, how='left', on='key')


合并重叠数据

     【例35】

import pandas as pd
import numpy as np
from numpy import NAN
left = pd.DataFrame({'A': [np.nan, 'A1', 'A2', 'A3'],
                        'B': [np.nan, 'B1', np.nan, 'B3'],
                        'key': ['K0', 'K1', 'K2', 'K3']})
right = pd.DataFrame({'A': ['C0', 'C1','C2'],
                         'B': ['D0', 'D1','D2']},
                         index=[1,0,2])
# 用right的数据填充left缺失的部分
left.combine_first(right)

数据重塑

 重塑层次化索引

   【例36】
import pandas as pd
df = pd.DataFrame({'A':['A0','A1','A2'],
                 'B':['B0','B1','B2']})
# 将df进行重塑
result = df.stack()
result

【例37】

type(result)

【例38】

import pandas as pd
df = pd.DataFrame({'A':['A0','A1','A2'],
                      'B':['B0','B1','B2']})
res = df.stack()  # 将df重塑为Series对象
res.unstack()      # 将Series对象转换成df

【例39】

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[26,20,22,26],[30,25,24,20]]),
                   index=['男生人数','女生人数'],
                   columns=[['一楼','一楼','二楼','二楼'],
                              ['A教室','B教室','A教室','B教室']])
df.stack()

【例40】

df.stack(level=0)   # 旋转外层索引

轴向旋转

   【例41】

import pandas as pd
df =  pd.DataFrame({'商品名称': ['荣耀9青春版','小米6x','OPPO A1',
                   '荣耀9青春版','小米6x','OPPO A1'],
                   '出售日期': ['2017年5月25日', '2017年5月25日',
                   '2017年5月25日','2017年6月18日',
                   '2017年6月18日', '2017年6月18日'],
                   '价格': ['999元', '1399元', '1399元',
                   '800元', '1200元', '1250元']})
df.pivot(index='出售日期', columns='商品名称', values='价格')

转换数据

重命名轴索引

【例42】
import pandas as pd
df = pd.DataFrame({'A':['A0', 'A1', 'A2', 'A3'],
                 'B':['B0', 'B1', 'B2', 'B3'],
                 'C':['C0', 'C1', 'C2', 'C3']})
df

【例43】

# 重命名列索引的名称,并且在原有数据上进行修改
df.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace=True)
df

【例44】

import pandas as pd
df = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                   'B': ['B0', 'B1', 'B2', 'B3'],
                   'C': ['C0', 'C1', 'C2', 'C3']})
df.rename(str.lower, axis='columns')

【例45】

import pandas as pd
df = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3']})
df.rename(index={1: 'a', 2: 'b'}, inplace=True)
df

离散化连续数据

【例46】

import pandas as pd
# 使用pandas的cut函数划分年龄组
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 32]
bins = [0, 18, 25, 35, 60, 100]
cuts = pd.cut(ages, bins)
cuts

 【例47】

pd.cut(ages, bins=bins, right=False)

哑变量处理类别型数据

 【例48】

import pandas as pd
df1 = pd.DataFrame({'职业': ['工人', '学生', '司机', '教师', '导游']})
pd.get_dummies(df1, prefix=['col'])  # 哑变量处理

案例—预处理部分地区信息

    【例49】

import pandas as pd
# 读取北京地区信息
file_path_bj = open('C:/Users/admin/Desktop/北京地区信息.csv')
file_data_bjinfo = pd.read_csv(file_path_bj)
file_data_bjinfo

【例50】

# 读取天津地区信息
file_path_tj = open('C:/Users/admin/Desktop/天津地区信息.csv')
file_data_tjinfo = pd.read_csv(file_path_tj)
file_data_tjinfo

【例51】

# 检测file_data_bjinfo中的数据,返回True的表示是重复数据
file_data_bjinfo.duplicated()

【例52】

# 检测file_data_tjinfo中的数据,返回True的表示是重复数据
file_data_tjinfo.duplicated()

【例53】

# 北京地区 删除重复数据
file_data_bjinfo = file_data_bjinfo.drop_duplicates()
file_data_bjinfo

【例54】

file_data_tjinfo.isnull() # 检测数据是否存在缺失数据

【例55】

# 计算常住人口的平均数,设置为float类型并保留两位小数
population = float("{:.2f}".format(file_data_tjinfo['常住人口(万人)'].mean()))
# 以字典映射的形式将需要填充的数据进行对应
values={'常住人口(万人)':population}
file_data_tjinfo = file_data_tjinfo.fillna(value=values)
file_data_tjinfo

【例56】

# 对北京地区信息进行异常值检测
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
file_data_bjinfo.boxplot(column=['行政面积(K㎡)','户籍人口(万人)','男性','女性','GDP(亿元)','常住人口(万人)'])

【例57】

# 对天津地区信息进行异常值检测
file_data_tjinfo.boxplot(column=['行政面积(K㎡)','户籍人口(万人)','男性','女性','GDP(亿元)','常住人口(万人)'])

【例58】

# 对两地信息数据进行合并
pd.concat([file_data_bjinfo,file_data_tjinfo],ignore_index=True)