【头歌】 ------ 数据分析与实践-python_NumPy基础及取值操作-NumPy数组的高级操作-Numpy初体验-亲和性分析------商品推荐
-
- [Numpy 初体验](#Numpy 初体验)
-
- [第1关 Numpy 创建数组](#第1关 Numpy 创建数组)
- [第2关 Numpy 数组的基本运算](#第2关 Numpy 数组的基本运算)
- [第3关 Numpy 数组的切片与索引](#第3关 Numpy 数组的切片与索引)
- [第4关 Numpy 数组的堆叠](#第4关 Numpy 数组的堆叠)
- [第5关 Numpy 的拆分](#第5关 Numpy 的拆分)
- NumPy基础及取值操作
-
- [第1关 ndarray对象](#第1关 ndarray对象)
- [第2关 形状操作](#第2关 形状操作)
- [第3关 基础操作](#第3关 基础操作)
- [第4关 随机数生成](#第4关 随机数生成)
- [第5关 索引与切片](#第5关 索引与切片)
- [NumPy 数组的高级操作](#NumPy 数组的高级操作)
-
- [第1关 堆叠操作](#第1关 堆叠操作)
- [第2关 比较、掩码和布尔逻辑](#第2关 比较、掩码和布尔逻辑)
- [第3关 花式索引与布尔索引](#第3关 花式索引与布尔索引)
- [第4关 广播机制](#第4关 广播机制)
- [第5关 线性代数](#第5关 线性代数)
- 亲和性分析------商品推荐
-
- [第1关 使用 Numpy 加载文件中的数据](#第1关 使用 Numpy 加载文件中的数据)
- [第2关 处理 Numpy 加载到的数据](#第2关 处理 Numpy 加载到的数据)
- [第3关 商品推荐------计算支持度和置信度](#第3关 商品推荐——计算支持度和置信度)
- [第4关 商品推荐------排序找出最佳规则](#第4关 商品推荐——排序找出最佳规则)
Numpy 初体验
第1关 Numpy 创建数组
python
复制代码
# 引入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 数组的基本运算
python
复制代码
# 引入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 数组的切片与索引
python
复制代码
# 引入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 数组的堆叠
python
复制代码
# 引入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 的拆分
py
复制代码
# 引入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对象
python
复制代码
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关 形状操作
python
复制代码
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关 基础操作
python
复制代码
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关 随机数生成
python
复制代码
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关 索引与切片
py
复制代码
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关 堆叠操作
python
复制代码
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关 比较、掩码和布尔逻辑
python
复制代码
import numpy as np
def student(num,input_data):
result=[]
# ********* Begin *********#
a = np.array(input_data)
result = a[a > num]
# ********* End *********#
return result
第3关 花式索引与布尔索引
python
复制代码
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关 广播机制
python
复制代码
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关 线性代数
py
复制代码
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 加载文件中的数据
python
复制代码
input_file = input() #接收要导入的文件
#********* Begin *********#
import numpy as np
data_file = input_file
X = np.loadtxt(data_file,delimiter=",")
print(X)
#********* End *********#
第2关 处理 Numpy 加载到的数据
python
复制代码
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关 商品推荐------计算支持度和置信度
python
复制代码
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关 商品推荐------排序找出最佳规则
python
复制代码
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之外的代码框架-----#