【头歌】 —— 数据分析与实践-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 创建数组
import numpy as np
def cnmda(m,n):
'''
创建numpy数组
参数:
m:第一维的长度
n: 第二维的长度
返回值:
ret: 一个numpy数组
'''
ret = 0
x = [y for y in range(n)]
ret = np.array([x]*m)
return ret
第2关 Numpy 数组的基本运算
import numpy as np
def opeadd(m,b,n):
'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m+b[n]
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = m+b[n]
return ret
def opemul(m,b,n):
'''
参数:
m:是一个数组
b:是一个列表
n:是列表中的索引
你需要做的是 m*b[n]
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = m*b[n]
return ret
第3关 Numpy 数组的切片与索引
import numpy as np
def ce(a,m,n):
'''
参数:
a:是一个Numpy数组
m:是第m维数组的索引
n:第m维数组的前n个元素的索引
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = a[m,:n]
return ret
第4关 Numpy 数组的堆叠
import numpy as np
def varray(m,n):
'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.vstack((m,n))
return ret
def darray(m,n):
'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.dstack((m,n))
return ret
def harray(m,n):
'''
参数:
m:是第一个数组
n:是第二个数组
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.hstack((m,n))
return ret
第5关 Numpy 的拆分
import numpy as np
def vsarray(m,n):
'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.vsplit(m,n)
return ret
def dsarray(m,n):
'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.dsplit(m,n)
return ret
def hsarray(m,n):
'''
参数:
m:是第一个数组
n:是需要拆分到的维度
返回值:
ret: 一个numpy数组
'''
ret = 0
ret = np.hsplit(m,n)
return ret
NumPy基础及取值操作
第1关 ndarray对象
import numpy as np
def print_ndarray(input_data):
'''
实例化ndarray对象并打印
:param input_data: 测试用例,类型为字典类型
:return: None
'''
a = np.array(input_data['data'])
print(a)
第2关 形状操作
import numpy as np
def reshape_ndarray(input_data):
'''
将ipnut_data转换成ndarray后将其变形成一位数组并打印
:param input_data: 测试用例,类型为list
:return: None
'''
a = np.array(input_data)
a = a.reshape((1,-1))
print(a[0,])
第3关 基础操作
import numpy as np
def get_answer(input_data):
'''
将input_data转换成ndarray后统计每一行中最大值的位置并打印
:param input_data: 测试用例,类型为list
:return: None
'''
a = np.array(input_data)
print(a.argmax(axis=1))
第4关 随机数生成
import numpy as np
def shuffle(input_data):
'''
打乱input_data并返回打乱结果
:param input_data: 测试用例输入,类型为list
:return: result,类型为list
'''
result = []
result = list(np.random.choice(a=input_data,size=len(input_data),replace=False))
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
'''
a = data[x:x+h+1,y:y+w+1]
return a
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`后每列的均值
'''
feature3 = np.hstack((feature1,feature2))
return feature3.mean(axis = 0)
第2关 比较、掩码和布尔逻辑
import numpy as np
def student(num,input_data):
result=[]
a = np.array(input_data)
result = a[a > num]
return result
第3关 花式索引与布尔索引
import numpy as np
def student(input_data):
result=[]
d = np.array(input_data)
result = d[(d >= 'A') & (d <= 'Z')]
return result
第4关 广播机制
import numpy as np
def student(a,b,c):
result=[]
a = np.array(a)
b = np.array(b)
c = np.array(c)
result = a + b + c
return result
第5关 线性代数
from numpy import linalg
import numpy as np
def student(input_data):
'''
将输入数据筛选性别为男,再进行线性方程求解
:param input_data:类型为`list`的输入数据
:return:类型为`ndarray`
'''
result=[]
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)
return result
亲和性分析——商品推荐
第1关 使用 Numpy 加载文件中的数据
input_file = input()
import numpy as np
data_file = input_file
X = np.loadtxt(data_file,delimiter=",")
print(X)
第2关 处理 Numpy 加载到的数据
input_file = input()
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))
第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)
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)]))
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)
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)