【头歌】 —— 数据分析与实践-python_NumPy基础及取值操作-NumPy数组的高级操作-Numpy初体验-亲和性分析——商品推荐

【头歌】 —— 数据分析与实践-python_NumPy基础及取值操作-NumPy数组的高级操作-Numpy初体验-亲和性分析——商品推荐

    • Numpy 初体验
      • 第1关 Numpy 创建数组
      • 第2关 Numpy 数组的基本运算
      • 第3关 Numpy 数组的切片与索引
      • 第4关 Numpy 数组的堆叠
      • 第5关 Numpy 的拆分
    • NumPy基础及取值操作
      • 第1关 ndarray对象
      • 第2关 形状操作
      • 第3关 基础操作
      • 第4关 随机数生成
      • 第5关 索引与切片
    • NumPy 数组的高级操作
      • 第1关 堆叠操作
      • 第2关 比较、掩码和布尔逻辑
      • 第3关 花式索引与布尔索引
      • 第4关 广播机制
      • 第5关 线性代数
    • 亲和性分析——商品推荐
      • 第1关 使用 Numpy 加载文件中的数据
      • 第2关 处理 Numpy 加载到的数据
      • 第3关 商品推荐——计算支持度和置信度
      • 第4关 商品推荐——排序找出最佳规则

Numpy 初体验

第1关 Numpy 创建数组

# 引入numpy库
import numpy as np
# 定义cnmda函数
def cnmda(m,n):
    '''
    创建numpy数组
    参数:
           m:第一维的长度
           n: 第二维的长度
    返回值:
        ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加创建多维数组的代码并赋值给ret
    #********** Begin *********#
    x = [y for y in range(n)]
    ret = np.array([x]*m)
    #********** End **********#
    return ret

第2关 Numpy 数组的基本运算

# 引入numpy库
import numpy as np
# 定义opeadd函数
def opeadd(m,b,n):
    '''
    参数:
    m:是一个数组
    b:是一个列表
    n:是列表中的索引
    你需要做的是 m+b[n]
    返回值:
    ret: 一个numpy数组
    '''    
    ret = 0

    #********** Begin *********#
    ret = m+b[n]
      #********** End **********#

    return ret
# 定义opemul函数
def opemul(m,b,n):
    '''
    参数:
    m:是一个数组
    b:是一个列表
    n:是列表中的索引
    你需要做的是 m*b[n]
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0

    #********** Begin *********#
    ret = m*b[n]
    #********** End **********#
    return ret

第3关 Numpy 数组的切片与索引

# 引入numpy库
import numpy as np
# 定义cnmda函数
def ce(a,m,n):
    '''
    参数:
    a:是一个Numpy数组
    m:是第m维数组的索引
    n:第m维数组的前n个元素的索引
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加切片的代码,实现找出多维数组a中第m个数组的前n个元素 并赋值给ret
    #********** Begin *********#
    ret = a[m,:n]
    #********** End **********#
    return ret

第4关 Numpy 数组的堆叠

# 引入numpy库
import numpy as np
# 定义varray函数
def  varray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的垂直叠加并赋值给ret
    #********** Begin *********#
    ret = np.vstack((m,n))
    #********** End **********#
    return ret
# 定义darray函数
def  darray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度叠加并赋值给ret
    #********** Begin *********#
    ret = np.dstack((m,n))
    #********** End **********#
    return ret
 # 定义harray函数
def  harray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是第二个数组
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平叠加并赋值给ret
    #********** Begin *********#
    ret = np.hstack((m,n))
    #********** End **********#
    return ret

第5关 Numpy 的拆分

# 引入numpy库
import numpy as np
# 定义varray函数
def  vsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的纵向拆分并赋值给ret
    #********** Begin *********#
    ret = np.vsplit(m,n)
    #********** End **********#
    return ret
# 定义darray函数
def  dsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的深度拆分并赋值给ret
    #********** Begin *********#
    ret = np.dsplit(m,n)
    #********** End **********#
    return ret
 # 定义harray函数
def  hsarray(m,n):
    '''
    参数:
    m:是第一个数组
    n:是需要拆分到的维度
    返回值:
    ret: 一个numpy数组
    '''
    ret = 0
    # 请在此添加代码实现数组的水平拆分并赋值给ret
    #********** Begin *********#
    ret = np.hsplit(m,n)
    #********** End **********#
    return ret




NumPy基础及取值操作

第1关 ndarray对象

import numpy as np
 
 
def print_ndarray(input_data):
    '''
    实例化ndarray对象并打印
    :param input_data: 测试用例,类型为字典类型
    :return: None
    '''
 
    #********* Begin *********#
    a = np.array(input_data['data'])
    print(a)
    #********* End *********#

第2关 形状操作

import numpy as np
 
 
def reshape_ndarray(input_data):
    '''
    将ipnut_data转换成ndarray后将其变形成一位数组并打印
    :param input_data: 测试用例,类型为list
    :return: None
    '''
 
    #********* Begin *********#
    a = np.array(input_data)
    a = a.reshape((1,-1))
    print(a[0,])
    #********* End *********#

第3关 基础操作

import numpy as np
 
 
def get_answer(input_data):
    '''
    将input_data转换成ndarray后统计每一行中最大值的位置并打印
    :param input_data: 测试用例,类型为list
    :return: None
    '''
 
    #********* Begin *********#
    a = np.array(input_data)
    print(a.argmax(axis=1))
    #********* End *********#

第4关 随机数生成

import numpy as np
 
 
def shuffle(input_data):
    '''
    打乱input_data并返回打乱结果
    :param input_data: 测试用例输入,类型为list
    :return: result,类型为list
    '''
 
    # 保存打乱的结果
    result = []
    #********* Begin *********#
    result = list(np.random.choice(a=input_data,size=len(input_data),replace=False))
    #********* End *********#
    return result

第5关 索引与切片

import numpy as np
 
def get_roi(data, x, y, w, h):
    '''
    提取data中左上角顶点坐标为(x, y)宽为w高为h的ROI
    :param data: 二维数组,类型为ndarray
    :param x: ROI左上角顶点的行索引,类型为int
    :param y: ROI左上角顶点的列索引,类型为int
    :param w: ROI的宽,类型为int
    :param h: ROI的高,类型为int
    :return: ROI,类型为ndarray
    '''
 
    #********* Begin *********#
    a = data[x:x+h+1,y:y+w+1]
    return a
    #********* End *********#



NumPy 数组的高级操作

第1关 堆叠操作

import numpy as np


def get_mean(feature1, feature2):
    '''
    将feature1和feature2横向拼接,然后统计拼接后的ndarray中每列的均值
    :param feature1:待`hstack`的`ndarray`
    :param feature2:待`hstack`的`ndarray`
    :return:类型为`ndarray`,其中的值`hstack`后每列的均值
    '''
    #********* Begin *********#
    feature3 = np.hstack((feature1,feature2))
    return feature3.mean(axis = 0)
    
    #********* End *********#

第2关 比较、掩码和布尔逻辑

import numpy as np


def student(num,input_data):
    result=[]
    # ********* Begin *********#
    a = np.array(input_data)
    result = a[a > num]




    # ********* End *********#
    return result
    

第3关 花式索引与布尔索引

import numpy as np

def student(input_data):
    result=[]
    #********* Begin *********#
    d = np.array(input_data)
    result = d[(d >= 'A') & (d <= 'Z')]

    # ********* End *********#
    return result

第4关 广播机制

import numpy as np

def student(a,b,c):
    result=[]
    # ********* Begin *********#
    a = np.array(a)
    b = np.array(b)
    c = np.array(c)
    result = a + b + c



    # ********* End *********#
    return result

第5关 线性代数

from numpy import linalg
import numpy as np
def student(input_data):
    '''
    将输入数据筛选性别为男,再进行线性方程求解
    :param input_data:类型为`list`的输入数据
    :return:类型为`ndarray`
    '''
    result=[]
    # ********* Begin *********#
    a = np.array(input_data)
    x=[]
    y=[]
    for i in a:
        if i[0]=="男":
            x.append([int(i[1]),int(i[2])])
            y.append([int(i[-1])])
    if x==[] and y==[]:
        return result
    x=np.array(x)
    y=np.array(y)
    result=linalg.solve(x,y)
    # ********* End *********#
    return result





亲和性分析——商品推荐

第1关 使用 Numpy 加载文件中的数据

input_file = input()   #接收要导入的文件  
#********* Begin *********#  
import numpy as np   
data_file = input_file  
X = np.loadtxt(data_file,delimiter=",")  
print(X)  
#********* End *********#

第2关 处理 Numpy 加载到的数据

input_file = input()   #接收要导入的文件  
#********* Begin *********#  
import numpy as np 
data_file = input_file
X = np.loadtxt(data_file,delimiter=",")
num_milk_purchases = 0
num_bread_purchases = 0
num_milkbread_purchases = 0
for sample in X:
    if sample[0] == 1:
        num_milk_purchases += 1 
        if sample[1] == 1:
            num_milkbread_purchases += 1
    if sample[1] == 1:
        num_bread_purchases += 1
print("{0} people bought milk".format(num_milk_purchases))
print("{0} people bought bread".format(num_bread_purchases))
print("{0} people bought both milk and bread".format(num_milkbread_purchases))
#********* End *********#

第3关 商品推荐——计算支持度和置信度

input_file = input()   #接收要导入的文件  
import numpy as np   
data_file = input_file  
Data = np.loadtxt(data_file,delimiter=" ")
from collections import defaultdict  
features = ["milk","bread","apple","banana","ham"]  #存放商品名称  
valid_rules = defaultdict(int)      #存放所有的规则应验的情况  
invaild_rules = defaultdict(int)    #存放规则无效  
num_occurances = defaultdict(int)   #存放条件相同的规则数量
#********* Begin *********#  
#-----在此补充算法计算每条规则的置信度和支持度-----#  
for sample in Data:             
    for premise in range(4):  
        if sample[premise] == 0:continue   
        num_occurances[premise] += 1        
        for conclusion in range(len(features)):  
            if premise == conclusion:continue  
            if sample[conclusion] == 1:  
                valid_rules[(premise,conclusion)] += 1  
            else:  
                invaild_rules[(premise,conclusion)] += 1            
support = valid_rules
confidence = defaultdict(float)  
for premise,conclusion in valid_rules.keys():  
    rule = (premise,conclusion)  
    confidence[rule] = valid_rules[rule] / num_occurances[premise]  
def print_rule(premise,conclusion,support,confidence,features):  
    premise_name = features[premise]  
    conclusion_name = features[conclusion]
    print("Rule: If a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))  
    print("- Confidence: {0:.3f}".format(confidence[(premise,conclusion)]))    
    print("- Support: {0}".format(support[(premise,conclusion)]))
#********* End *********#  
#-----请勿删除Begin-End之外的代码框架-----#  
premise = int(input())         #获取条件  
conclusion = int(input())      #获取结论  
print_rule(premise, conclusion, support, confidence, features)

第4关 商品推荐——排序找出最佳规则

input_file = input()   #接收要导入的文件  
import numpy as np   
data_file = input_file  
Data = np.loadtxt(data_file,delimiter=" ")  
from collections import defaultdict  
features = [ "milk", "bread", "apple", "banana","ham"]  #存放商品名称  
valid_rules = defaultdict(int)      #存放所有的规则应验的情况  
invaild_rules = defaultdict(int)    #存放规则无效  
num_occurances = defaultdict(int)   #存放条件相同的规则数量  
#********* Begin *********#  
#-----在此补充算法得到所有规则的置信度和支持度,并输出支持度最高的前5条规则-----#  
for sample in Data:             
    for premise in range(4):  
        if sample[premise] == 0:continue   
        num_occurances[premise] += 1        
        for conclusion in range(len(features)):  
            if premise == conclusion:continue  
            if sample[conclusion] == 1:  
                valid_rules[(premise,conclusion)] += 1  
            else:  
                invaild_rules[(premise,conclusion)] += 1              
support = valid_rules  
confidence = defaultdict(float)  
for premise,conclusion in valid_rules.keys():  
    rule = (premise,conclusion)  
    confidence[rule] = valid_rules[rule] / num_occurances[premise]  
def print_rule(premise,conclusion,support,confidence,features):  
    premise_name = features[premise]  
    conclusion_name = features[conclusion]  
    print("Rule: If a person buys {0} they will also buy {1}".format(premise_name,conclusion_name))  
    print("- Confidence: {0:.3f}".format(confidence[(premise,conclusion)]))    
    print("- Support: {0}".format(support[(premise,conclusion)]))  
from operator import itemgetter   
sorted_support = sorted(support.items(), key=itemgetter(1), reverse=True)
for index in range(5):   
    print("Rule #{0}".format(index + 1))   
    premise, conclusion = sorted_support[index][0]   
    print_rule(premise, conclusion, support, confidence, features)   
#********* End *********#  
#-----请勿删除Begin-End之外的代码框架-----#

你可能感兴趣的:(【头歌】——数据分析与实践答案,数据分析,python,numpy)