python学习3

简介: python学习3

大家好,今天又来更新python学习篇了。本次的内容比较简单,时描述性统计代码,直接给出所有代码,如下:

import pandas as pd
from scipy.stats import fisher_exact
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import re
base_info = pd.read_excel("./data/附件1.xlsx", index_col=0)
sale_info = pd.read_excel("./data/附件2.xlsx")
sale_info['销售日期']=pd.to_datetime(sale_info['销售日期'])
 
data=sale_info.join(base_info,on="单品编码")
data["销售额(元)"]=data["销量(千克)"]*data["销售单价(元/千克)"]
 
print("--------------------------------------------")
print("统计打折销售情况")
print(data["是否打折销售"].groupby([data["是否打折销售"],data["分类名称"]]).count())
 
print("--------------------------------------------")
print("统计退货情况")
print(data["销售类型"].groupby([data["销售类型"],data["分类名称"]]).count())
 
print("--------------------------------------------")
print("执行Fisher 精确性检验")
print(data["销售类型"].groupby([data["销售类型"],data["是否打折销售"]]).count())
table=[[457,4],[830680,47362]]
result=fisher_exact(table,alternative='two-sided')
print("Fisher 精确性检验结果: ")
print("p-value:",result.pvalue)
print("statistic:",result.statistic)
 
print("--------------------------------------------")
print("执行Fisher 精确性检验")
names=base_info["单品名称"].tolist()
print(names)
 
print("--------------------------------------------")
print("执行字符串匹配")
strings=names
threshold=80
similar_strings={}
for string in strings:
    best_match=process.extractOne(
        string,
        [s for s in strings if s not in [string]],
        scorer=fuzz .ratio)
    if best_match[1]>=threshold and best_match[0]!=string and best_match[0][:2]==string[:2]:
        if re.search(r'\(\d+\)',best_match[0]) and re.search(r'\(\d+\)',string):
            similar_strings[string]=best_match[0]
 
for original,similar in similar_strings.items():
    print(f"'{original}'和'{similar}'")


输出结果如下:



对于其中的一些代码,在此解释:


代码1


第十五行

print(data["是否打折销售"].groupby([data["是否打折销售"],data["分类名称"]]).count())


这行代码使用 pandas 的 groupby() 方法和 count() 方法对 data 数据中的 "是否打折销售" 和 "分类名称" 列进行分组,并对每个分组计数。


groupby() 方法将 DataFrame 根据指定的列名进行分组,返回一个 GroupBy 对象。在这里,我们通过传递表示 "是否打折销售" 和 "分类名称" 的两个列名来分组 data DataFrame。


count() 方法用于计算每组中唯一值的数量。在这里,它返回唯一组合的数量,即 (是否打折销售, 分类名称) 组合的数量。


通过在 groupby() 方法中传递多个列名,我们可以获取多个类别之间的交叉计数。


代码2


table=[[457,4],[830680,47362]]
result=fisher_exact(table,alternative='two-sided')


这段代码是使用 `fisher_exact()` 函数对给定的二维表格 `table` 进行 Fisher 精确性检验,并计算 p-value 和统计量,结果将存储在变量 `result` 中。


- `table=[[457,4],[830680,47362]]` 表示给出一个二维表格,其中第一行包含两个元素 `[457,4]`,第二行包含两个元素 `[830680,47362]`;

- `fisher_exact(table, alternative='two-sided')` 表示使用 Fisher 精确性检验对给定的二维表格 `table` 进行检验。`alternative='two-sided'` 表示使用双侧检验。


执行这段代码将会得到 Fisher 精确性检验的结果,包括 p-value 和统计量。具体而言,`result` 变量中将包含一个二元组,第一个元素表示 p-value,第二个元素表示统计量。


代码3


for string in strings:
    best_match=process.extractOne(
        string,
        [s for s in strings if s not in [string]],
        scorer=fuzz .ratio)
    if best_match[1]>=threshold and best_match[0]!=string and best_match[0][:2]==string[:2]:
        if re.search(r'\(\d+\)',best_match[0]) and re.search(r'\(\d+\)',string):
            similar_strings[string]=best_match[0]
 
for original,similar in similar_strings.items():
    print(f"'{original}'和'{similar}'")


这段代码是一个字符串匹配的算法,它会找出与给定字符串相似的其他字符串,并将结果打印出来。


代码的执行过程如下:


1. 对于 `strings` 列表中的每个字符串,依次执行以下步骤:

2. 使用 `process.extractOne()` 函数找到与当前字符串 `string` 最相似的字符串。该函数会在剩余的字符串列表中进行搜索,返回一个二元组,其中第一个元素是最佳匹配的字符串,第二个元素是匹配的分数。

3. 判断最佳匹配的分数是否大于等于设定的阈值 `threshold`,并且最佳匹配的字符串不等于当前字符串 `string`,且最佳匹配的字符串和当前字符串的前两个字符相同。

4. 若上述条件满足,则继续执行下一步。

5. 判断最佳匹配的字符串和当前字符串都是否包含形如 `(数字)` 的字符串。

6. 若上述条件满足,则将原始字符串和相似字符串的对应关系添加到 `similar_strings` 字典中。

7. 遍历 `similar_strings` 字典中的每一项,将原始字符串和相似字符串的对应关系打印出来。


总结来说,该代码的目的是找出在给定阈值和条件下,符合相似性要求的字符串对,并将它们打印出来。这样可以帮助找出在字符串中存在相似内容的情况,并进一步进行处理或分析。


相关文章
|
3天前
|
机器学习/深度学习 分布式计算 物联网
【Python机器学习专栏】联邦学习:保护隐私的机器学习新趋势
【4月更文挑战第30天】联邦学习是保障数据隐私的分布式机器学习方法,允许设备在本地训练数据并仅共享模型,保护用户隐私。其优势包括数据隐私、分布式计算和模型泛化。应用于医疗、金融和物联网等领域,未来将发展更高效的数据隐私保护、提升可解释性和可靠性的,并与其他技术融合,为机器学习带来新机遇。
|
3天前
|
机器学习/深度学习 自然语言处理 搜索推荐
【Python机器学习专栏】迁移学习在机器学习中的应用
【4月更文挑战第30天】迁移学习是利用已有知识解决新问题的机器学习方法,尤其在数据稀缺或资源有限时展现优势。本文介绍了迁移学习的基本概念,包括源域和目标域,并探讨了其在图像识别、自然语言处理和推荐系统的应用。在Python中,可使用Keras或TensorFlow实现迁移学习,如示例所示,通过预训练的VGG16模型进行图像识别。迁移学习提高了学习效率和性能,随着技术发展,其应用前景广阔。
|
3天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习中的Bagging与Boosting
【4月更文挑战第30天】本文介绍了集成学习中的两种主要策略:Bagging和Boosting。Bagging通过自助采样构建多个基学习器并以投票或平均法集成,降低模型方差,增强稳定性。在Python中可使用`BaggingClassifier`实现。而Boosting是串行学习,不断调整基学习器权重以优化拟合,适合弱学习器。Python中可利用`AdaBoostClassifier`等实现。示例代码展示了如何在实践中运用这两种方法。
|
3天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
3天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
5天前
|
Python
【Python21天学习挑战赛】- 错误和异常
【Python21天学习挑战赛】- 错误和异常
|
5天前
|
容器
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
【Python21天学习挑战赛】-迭代器 & f-格式化 & 模块
|
5天前
|
Python
【Python21天学习挑战赛】- 函数进阶
【Python21天学习挑战赛】- 函数进阶
|
5天前
【Python21天学习挑战赛】文件读写操作
【Python21天学习挑战赛】文件读写操作
|
5天前
|
索引 Python
【Python21天学习挑战赛】集合 & 数据类型补充
【Python21天学习挑战赛】集合 & 数据类型补充