当前位置: 首页 > news >正文

django+drf_haystack+elasticsearch+ik+高亮显示

0.前提准备

环境

1. 准备好django2.2
2. 创建一个app
3.elasticsearch7.5启动
4.可视化工具(实在没有,也没啥)

 models.py

from django.db import models


# Create your models here.

class Article(models.Model):
    title = models.CharField(verbose_name='文章标题', max_length=225, db_index=True)
    content = models.TextField(verbose_name='内容')
    # 外键
    tag = models.ForeignKey(verbose_name='标签', to='Tag', on_delete=models.DO_NOTHING)

    def __str__(self):
        return self.title


class Tag(models.Model):
    name = models.CharField(verbose_name='标签', max_length=225)

    def __str__(self):
        return self.name

1.安装

pip3 install jieba  -i https://pypi.douban.com/simple/           
pip3 install django-haystack -i https://pypi.douban.com/simple/
pip3 install drf-haystack -i https://pypi.douban.com/simple/
pip3 install elasticsearch==7.6.0 -i https://pypi.douban.com/simple/
pip3 install django==2.2 -i https://pypi.douban.com/simple/

 2.setting.py

es其他版本配置

Haystack 入门 — Haystack 2.5.0 文档 (django-haystack.readthedocs.io)https://django-haystack.readthedocs.io/en/master/tutorial.html

# 注册
INSTALLED_APPS = [
    ...
    'haystack',
    'rest_framework',
    ...
]
# 配置7.x
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack',
    },
}

3.配置 drf_haystack

3.1 目录介绍

文字介绍

app01/templates/search/indexes/app01/article_text.txt
indexes:是你要建立的索引的app,article是你要建立索引的那个模型名(小写)

图解

3.2 article.text.txt

给这几个字段建立索引,用作全文检索

{{ object.tile}}
{{ object.tag.name}}
{{ object.content }}

4. search_indexes.py

4.1 介绍

search_indexes.py固定写法,必须叫这个名字

位置:在自己的app下创建即可

4.2 search_indexes.py

索引模型类的名称必须是 模型类名称 + Index

from haystack import indexes
from .models import Article


# 必须继承  indexes.SearchIndex, indexes.Indexable

# ArticleIndex是固定格式命名,Article是你models.py中的类名
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
    # document=True:将为text字段内容建立索引,此字段内容,可以由多个字段内容联合而成,有且只有一个
    # use_template=True决定建立索引的字段内容,可以自定义模板
    text = indexes.CharField(document=True, use_template=True)
    # 下面的就是和你model里面的一样了
    # python manage.py rebuild_index
    # model_attr指定为对应模型的哪个字段
    # 以下字段作为辅助字段,我也不知道辅助什么
    id = indexes.IntegerField(model_attr='id')
    title = indexes.CharField(model_attr='title')
    tag = indexes.CharField(model_attr='tag')

    #  必须这个写,返回的就是你的model名称
    def get_model(self):
        """返回建立索引的模型类"""
        # 每次查询都走这个
        return Article

    # 返回你的查询的结果,可以改成一定的条件的,但是格式就是这样
    def index_queryset(self, using=None):
        """返回要建立索引的数据查询集"""
        # 写入es的数据
        query_set = self.get_model().objects.all()
        return query_set

5. serializers.py

from haystack.utils import Highlighter

from rest_framework import serializers
from drf_haystack.serializers import HaystackSerializer, HighlighterMixin

from .search_indexes import *


class ArticleSerializer(serializers.ModelSerializer):
    """
    序列化器
    """
    tag = serializers.CharField(source='tag.name')

    class Meta:
        model = Article
        # 返回除了搜索字段外的所需要的其他字段数据, 可以将所有需要返回的字段数据写上,便于提取
        fields = ('id', 'title', 'tag', 'content')


# 写法一:普通序列化,使用内置的高亮
class ArticleIndexSerializer(HaystackSerializer):
    """
    SKU索引结果数据序列化器
    """

    # 变量名称必须为 object 否则无法返回
    # 变量名称必须为 object 否则无法返回,
    # 返回除搜索字段以外的字段,由上面ArticleSerializer自定义返回字段
    object = ArticleSerializer(read_only=True)  # 只读,不可以进行反序列化

    class Meta:
        index_classes = [ArticleIndex]  # 索引类的名称,可以有多个

        # text 由索引类进行返回, object 由序列化类进行返回,第一个参数必须是text
        # 返回字段,不写默认全部返回
        # text字段必须有,不然无法实现搜索
        # 控制的是建立的索引字段
        fields = ['text', object]
        # fields = ['text']
        # 忽略字段
        # ignore_fields = ['title']
        # 除了该字段,其他的都返回,
        # exclude = ['title']


'''
# 写法二:自定义高亮,比内置的要慢一点
class ArticleIndexSerializer(HighlighterMixin, HaystackSerializer):
    """
    SKU索引结果数据序列化器
    """

    # 变量名称必须为 object 否则无法返回,
    # 返回除搜索字段以外的字段,由上面ArticleSerializer自定义返回字段
    object = ArticleSerializer(read_only=True)  # 只读,不可以进行反序列化
    # 高亮显示字段配置
    # highlighter_class = Highlighter
    # 前端自定义css名称
    highlighter_css_class = "my-highlighter-class"
    # html
    highlighter_html_tag = "em"
    # 最宽
    highlighter_max_length = 200

    class Meta:
        index_classes = [ArticleIndex]  # 索引类的名称,可以有多个
        fields = ['text', object]
'''

6. views.py

from django.shortcuts import HttpResponse
from drf_haystack.viewsets import HaystackViewSet
from drf_haystack.filters import HaystackOrderingFilter, HaystackHighlightFilter

from .models import *
from .paginations import ArticleSearchPageNumberPagination
from .serializers import ArticleIndexSerializer


class ArticleSearchViewSet(HaystackViewSet):
    """
    文章搜索
    """
    index_models = [Article]  # 表模型,可以添加多个
    serializer_class = ArticleIndexSerializer
    pagination_class = ArticleSearchPageNumberPagination
    # 高亮,排序
    # HaystackOrderingFilter:排序,
    # HaystackHighlightFilter:内置高亮,如果使用了方式自定义高亮,就不要配置这个了
    filter_backends = [HaystackOrderingFilter, HaystackHighlightFilter]
    ordering_fields = ('id',)
    """    """

    # 重写,自己可以构造数据
    def list(self, request, *args, **kwargs):
        response = super(ArticleSearchViewSet, self).list(request, *args, **kwargs)
        data = response.data
        # 本文修改返回数据,把返回的索引字段去掉,您可以根据自己的需求,把这一句注释掉
        [item.pop('text') for item in data['results']]
        return response

7.urls.py

from django.contrib import admin
from django.urls import path, re_path
from app01 import views

# 路由方式一,首页即可看到数据
# http://127.0.0.1:8000/search/?text=中国&ordering=id
# http://127.0.0.1:8000/search/?text=中国
from rest_framework.routers import SimpleRouter

router = SimpleRouter()
router.register('search', views.ArticleSearchViewSet, basename='search_api')
# router.register("", views.ArticleAPIView)

urlpatterns = [
    # re_path(r'^$', views.ArticleSearchViewSet.as_view({'get': 'list'})),
    path('admin/', admin.site.urls),
    path('update/', views.update)

]
urlpatterns += router.urls

# 路由方式二,大黄页
"""
# http://127.0.0.1:8000/search/?text=中国&ordering=id
# http://127.0.0.1:8000/search/?text=中国
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'search_one/(?P<pk>\d+)/', views.ArticleSearchViewSet.as_view({'get': 'retrieve'})),
    path('search/', views.ArticleSearchViewSet.as_view({'get': 'list'})),

]
"""

8.paginations

from rest_framework.pagination import PageNumberPagination


class ArticleSearchPageNumberPagination(PageNumberPagination):
    """文章搜索分页器"""
    # 每页显示几条
    page_size = 10
    # 最大数量
    max_page_size = 5000
    # 前端自定义查询的数量,?size=10
    page_size_query_param = "size"
    # 查询参数
    page_query_param = "page"

9.执行


python manage.py makemigrations
python manage.py migrate

# 重新创建索引,删掉之前的,进行数据同步
python manage.py rebuild_index

10. 验证是从es中查询的数据

1.直接修改mysql数据库数据,查看查询的数据会不会改变,不改就是es,改了就是mysql

11.换成ik分词器

11.1安装

基于docker安装Elasticsearch+ElasticSearch-Head+IK分词器_骑台风走的博客-CSDN博客基于docker安装Elasticsearch+ElasticSearch-Head+IK分词器https://blog.csdn.net/qq_52385631/article/details/126567059?spm=1001.2014.3001.5501ES--IK分词器安装_骑台风走的博客-CSDN博客ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。......https://blog.csdn.net/qq_52385631/article/details/126392092?spm=1001.2014.3001.5501

11.2 使用ik重写es7.5引擎

10.2.1 新建elasticsearch_ik_backend.py(在自己的app下)

在 blog应用下新建名为 elasticsearch7_ik_backend.py 的文件,

继承 Elasticsearch7SearchBackend(后端) 和 Elasticsearch7SearchEngine(搜索引擎) 并重写建立索引时的分词器设置

elasticsearch7_ik_backend.py

from haystack.backends.elasticsearch7_backend import Elasticsearch7SearchBackend, Elasticsearch7SearchEngine
 
"""
分析器主要有两种情况会被使用:
第一种是插入文档时,将text类型的字段做分词然后插入倒排索引,
第二种就是在查询时,先对要查询的text类型的输入做分词,再去倒排索引搜索
如果想要让 索引 和 查询 时使用不同的分词器,ElasticSearch也是能支持的,只需要在字段上加上search_analyzer参数
在索引时,只会去看字段有没有定义analyzer,有定义的话就用定义的,没定义就用ES预设的
在查询时,会先去看字段有没有定义search_analyzer,如果没有定义,就去看有没有analyzer,再没有定义,才会去使用ES预设的
"""
 
DEFAULT_FIELD_MAPPING = {
    "type": "text",
    "analyzer": "ik_max_word",
    # "analyzer": "ik_smart",
    "search_analyzer": "ik_smart"
 
}
 
 
class Elasticsearc7IkSearchBackend(Elasticsearch7SearchBackend):
    def __init__(self, *args, **kwargs):
        self.DEFAULT_SETTINGS['settings']['analysis']['analyzer']['ik_analyzer'] = {
            "type": "custom",
            "tokenizer": "ik_max_word",
            # "tokenizer": "ik_smart",
        }
        super(Elasticsearc7IkSearchBackend, self).__init__(*args, **kwargs)
 
 
class Elasticsearch7IkSearchEngine(Elasticsearch7SearchEngine):
    backend = Elasticsearc7IkSearchBackend

11.3 修改settings.py(切换成功)

# es 7.x配置
HAYSTACK_CONNECTIONS = {
    'default': {
        # 'ENGINE': 'haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine',
        'ENGINE': 'app01.elasticsearch_ik_backend.Elasticsearch7IkSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        # elasticsearch建立的索引库的名称,一般使用项目名作为索引库
        'INDEX_NAME': 'ha_drf',
    },
}

11.4 重建索引,同步数据

python manage.py rebuild_index

11.5 补充

11.5.1 未成功切换成ik

haystack 原先加载的是 ...\venv\Lib\site-packages\haystack\backends 文件夹下的 elasticsearch7_backend.py 文件,打开即可看到 elasticsearch7 引擎的默认配置 

若用上述方法建立出来的索引字段仍使用 snowball 分词器,则将原先elasticsearch7_backend.py 文件中的 DEFAULT_FIELD_MAPPING 也修改为 ik 分词器(或许是因为版本问题)

位置:D:\py_virtualenv\dj_ha\Lib\site-packages\haystack\backends\elasticsearch7_backend.py

修改内容:

DEFAULT_FIELD_MAPPING = {
    "type": "text",
    "analyzer": "ik_max_word",
    "search_analyzer": "ik_smart",
}

11.5.2 es6版本加入ik,重写引擎

from haystack.backends.elasticsearch_backend import ElasticsearchSearchBackend
from haystack.backends.elasticsearch_backend import ElasticsearchSearchEngine
class IKSearchBackend(ElasticsearchSearchBackend):
    DEFAULT_ANALYZER = "ik_max_word" # 这里将 es 的 默认 analyzer 设置为 ik_max_word
 
    def __init__(self, connection_alias, **connection_options):
        super().__init__(connection_alias, **connection_options)
 
    def build_schema(self, fields):
        content_field_name, mapping = super(IKSearchBackend, self).build_schema(fields)
        for field_name, field_class in fields.items():
            field_mapping = mapping[field_class.index_fieldname]
            if field_mapping["type"] == "string" and field_class.indexed:
                if not hasattr(
                    field_class, "facet_for"
                ) and not field_class.field_type in ("ngram", "edge_ngram"):
                    field_mapping["analyzer"] = getattr(
                        field_class, "analyzer", self.DEFAULT_ANALYZER
                    )
            mapping.update({field_class.index_fieldname: field_mapping})
        return content_field_name, mapping
 
 
class IKSearchEngine(ElasticsearchSearchEngine):
    backend = IKSearchBackend

相关文章:

头歌Python数据框、序列定义及数据处理应用实验闯关

粘贴答案不是目的 把Python学会这才叫做意义 童年的纸飞机 现在终于飞回我手里~~ 文章目录第1关&#xff1a;序列和数据框第2关&#xff1a;外部数据文件读取第3关&#xff1a;逻辑索引、切片方法&#xff0c;groupby 分组计算函数应用第4关&#xff1a;数据框关联操作第5关…...

使用pip下载时提示“You are using pip version 8.1.1, however version 22.1 is available.“

在使用pip install下载其他包时&#xff0c;报了错&#xff0c;如图&#xff1a; 提示&#xff1a;“You are using pip version 8.1.1, however version 22.1 is available. You should consider upgrading via the ‘pip install --upgrade pip’ command.” 根据提示&#…...

YOLOV8-gradcam 热力图可视化 即插即用 不需要对源码做任何修改!

YOLOV8 GradCam 热力图可视化. 本文给大家带来yolov8-gradcam热力图可视化&#xff0c;这个可视化是即插即用&#xff0c;不需要对源码做任何修改喔&#xff01;给您剩下的不少麻烦&#xff01; 代码链接&#xff1a;yolo-gradcam 里面还有yolov5和v7的热力图可视化代码&#…...

Anaconda创建虚拟环境并在Pycharm中使用创建好的环境

Anaconda创建虚拟环境并在Pycharm中使用创建好的环境1.Anaconda创建虚拟环境2.Pycharm中使用创建好的环境3.2022.12.8更新Anaconda的优势在于可以很方便地管理自己的工具包、开发环境和Python版本&#xff0c;同时还能使用不同的虚拟环境隔离不同要求的项目。假如你已经安装好了…...

python二级题库(百分之九十原题) 刷题软件推荐 第二套

目录 一、选择题 二、基本操作 三、简单应用 四、综合应用 刷题软件&#xff08;模拟python二级考试&#xff09;&#xff1a; 公众h&#xff1a;露露IT 回复&#xff1a;python二级 一、选择题 1、下列叙述中正确的是&#xff08;&#xff09;。 A.在栈中&#xff0c;栈…...

【模拟 简易银行系统~python】

目录~python面向对象编程之模拟银行系统相关程序代码如下&#xff1a;运行效果如下&#xff1a;pandas 每日一练&#xff1a;运行结果为&#xff1a;66、绘制sku_cost_prc的密度曲线运行效果为&#xff1a;67、计算后一天与前一天sku_cost_prc的差值运行结果为&#xff1a;68、…...

【YOLOv7/YOLOv5系列改进NO.52】融入YOLOv8中的C2f模块

文章目录 前言一、解决问题二、基本原理三、​YOLOv5添加方法四、​YOLOv7添加方法五、总结前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点…...

PyTorch 单机多GPU 训练方法与原理整理

PyTorch 单机多GPU 训练方法与原理整理 这里整理一些PyTorch单机多核训练的方法和简单原理&#xff0c;目的是既能在写代码时知道怎么用&#xff0c;又能从原理上知道大致是怎么回事儿。 就目前来说&#xff0c;并行训练的方法可以根据的不同的并行对象分为——模型并行和数据…...

anaconda创建、删除虚拟环境指令

使用conda创建、删除虚拟环境指令{\color{Red}使用conda创建、删除虚拟环境指令}使用conda创建、删除虚拟环境指令 使用conda创建、删除虚拟环境指令{\color{Red}使用conda创建、删除虚拟环境指令}使用conda创建、删除虚拟环境指令 一、创建虚拟环境 二、查看虚拟环境 三、激活…...

NCDC气象数据的提取与处理(二):python批量转换isd-lite数据为xlsx

目录 1.完整代码&#xff08;部分代码参考https://zhuanlan.zhihu.com/p/556150264&#xff09; 2.工作过程 2.1输入 2.2过程 3.实际效果 本例使用的相关数据及代码可见 链接&#xff1a;https://pan.baidu.com/s/1EYE0U7RrHSGGk3vptZyNVg 提取码&#xff1a;6666 书接上…...

MD5密码实验——Python实现(完整解析版)

文章目录更新&#xff1a;前言实验环境实验内容实验操作步骤1.初始化四个缓冲区2.设置常数表、位移位数等参数3.增加填充4.分组处理5.输出处理实验结果实验心得实验代码MD5-Python.py更新&#xff1a; 感谢评论区的大佬指出错误&#xff0c;现已改进代码 之前的错误在于没有考…...

如何在vscode中下载python第三方库(jieba和wordcloud为例)

本文由来 本来我并不想写文章的&#xff0c;但是我发现&#xff0c;对于一个0基础的小白vscode用户而言&#xff0c;想完整的下载一个第三方库还是存在一定的问题&#xff0c;并且我在搜索文章的时候发现&#xff0c;完全没有小白教程&#xff0c;太难了&#xff0c;所以说我就…...

python安装使用pip安装numpy

相信大家最近都在忙&#xff0c;因为到开学和上班的时候了&#xff0c;我最近也很忙&#xff0c;忙的快要流泪&#xff0c;这不是要考计算机三级了吗&#xff01;买了好厚一本书&#xff0c;备战过程中&#xff0c;最近洗头一次掉了100根不止的头发&#xff0c;有点恐惧&#x…...

yolov5ds-断点训练、继续训练、先终止训练并调整最终epoch(yolov5同样适用)

目录参考链接1. 训练过程中中断了&#xff0c;继续训练如果觉得数值差不多稳定了&#xff0c;但是距离最终设置的epoch还很远&#xff0c;所以想要停止训练但是又得到yolov5在运行完指定最大epoch后生成的一系列map、混淆矩阵等图2. 训练完原有epoch&#xff0c;但还继续训练&a…...

openCV第一篇

文章目录 前言&#xff1a;计算机眼中的图片 1. 图片的读取与显示 1.1 图片的读取 1.2 显示的图片 1.2.1 显示原始图片 1.2.2 灰度图 1.3 BGR转换成灰度图、RGB 2. 保存图片 3. 视频的读取与显示 4. 截取图像部分 5. 颜色通道提取 6. 边界填充 7. 数值计算 8.…...

基于Python构建机器学习Web应用

目录 一、内容介绍 1.Onnx模型 ①skl2onnx库安装 2.Netron安装 二、模型构建 1.数据加载 2.划分可训练特征与预测标签 3.训练模型 ①第三方库导入 ②数据集划分 ③SVC模型构建 ④精度评价 二、模型转换及可视化 1.参数配置 2.Onnx模型生成 3.可视化模型 四、构…...

python - 密码加密与解密

Python之密码加密与解密 - 对称算法一、对称加密1.1 安装第三方库 - PyCrypto1.2 加密实现二、非对称加密三、摘要算法3.1 md5加密3.2 sha1加密3.3 sha256加密3.4 sha384加密3.5 sha512加密3.6 “加盐”加密由于计算机软件的非法复制&#xff0c;通信的泄密、数据安全受到威胁。…...

百度飞桨PaddleSpeech的简单使用

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型&#xff0c;一些典型的应用示例如下&#xff1a;语音识别、语音翻译 (英译中)、语音合成、标点恢复等。…...

Python数据标准化

目录 一.数据标准化方式 1.实现中心化和正态分布的Z-Score 2.实现归一化的Max-Min 3.用于稀疏数据的MaxAbs 4.针对离群点的RobustScaler 二.Python针对以上几种标准化方法处理数据 三.总结 一.数据标准化方式 1.实现中心化和正态分布的Z-Score Z-Score标准化是基于原…...

Pycharm无法下载汉化包,一招教你搞定

Pycharm无法下载汉化包&#xff0c;一招教你搞定Pycharm直接导入汉化包Pycharm 无法采用自带的插件安装汉化包Pycharm直接导入汉化包 Pycharm 是可以直接导入汉化包的&#xff0c;这为很多初学者省区了不少麻烦。具体就是&#xff1a; 1&#xff1a;点击pycharm界面右上角的设…...

python成功实现“高配版”王者小游戏?【赠源码】

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 本游戏完整源码、素材: 点击此处跳转文末名片获取 咳咳&#xff0c;又是一款新的小游戏&#xff0c;就是大家熟悉的王者~ 来看我用python来实现高&#xff08;di&#xff09;配版的王者 是一款拿到代码运行后&#xff0c;…...

【项目实战】Python实现多元线性回归模型(statsmodels OLS算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 回归问题是一类预测连续值的问题&#xff0c;而能满足这样要求的数学模型称作回归模型&#xff0c;本项…...

graphviz安装教程(2022最新版)初学者适用

1、首先在官网下载graphviz 下载网址&#xff1a;https://www.graphviz.org/download/ 2、安装。 打开第一步已经下载好的软件。点击下一步&#xff0c;在安装路径选择时可将安装路径修改为 D:\graphviz 接着一直点下一步&#xff0c;即可安装完成。 3、配置环境变量 右键…...

【Windows】搭建Pytorch环境(GPU版本,含CUDA、cuDNN),并在Pycharm上使用(零基础小白向)

文章目录前言一、安装CUDA1、检查电脑是否支持CUDA2、下载并安装CUDA3、下载并安装cuDNN二、安装Pytorch1、安装Anaconda2、切换清华镜像源3、创建环境并激活4、输入Pytorch安装命令5、测试三、在Pycharm上使用搭建好的环境参考文章前言 本人纯python小白&#xff0c;第一次使用…...

Tensorflow与CUDA、cudnn版本对应关系

不同版本的Tensorflow需对应不同的CUDA和cudnn版本&#xff0c;否者容易安装失败。可按下图所示&#xff0c;根据想要安装的Tensorflow版本&#xff0c;选择对应版本的CUDA和cudnn。 其中CUDA的下载链接为&#xff1a; CUDA Toolkit Archive | NVIDIA Developer cudnn下载链…...

ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing.py)

报错背景&#xff1a; 因为安装tensorflow-gpu版本需要&#xff0c;我把原来的新建的anaconda环境&#xff08;我的名为tensorflow&#xff09;中的python3.8降为了3.7。 在导入seaborn包时&#xff0c;出现了以下错误&#xff1a; ImportError: cannot import name Literal …...

100天精通Python(数据分析篇)——第67天:Pandas数据连接、合并、加入、添加、重构函数(merge、concat、join、append、stack、unstack)

文章目录 一、数据连接(pd.merge)1. left、right2. how3. on4. left_on、right_on5. sort6. suffixes7. left_index、right_index二、数据合并(pd.concat)1. index 没有重复的情况2. index 有重复的情况3. DataFrame合并时同时查看行索引和列索引有无重复三、数据加入(pd.…...

yolov5 优化系列(三):修改损失函数

1.使用 Focal loss 在util/loss.py中&#xff0c;computeloss类用于计算损失函数 # Focal lossg h[fl_gamma] # focal loss gammaif g > 0:BCEcls, BCEobj FocalLoss(BCEcls, g), FocalLoss(BCEobj, g)其中这一段就是开启Focal loss的关键&#xff01;&#xff01;&…...

Python中数组切片的用法详解

Python中数组切片的用法详解一、python中“::-1”代表什么&#xff1f;二、python中“:”的用法三、python中数组切片三、numpy中的整数数组索引四、numpy中借助【切片 : 或 …与索引数组】组合进行复杂切片五、布尔索引六、花式索引一、python中“::-1”代表什么&#xff1f; …...

python 安装whl文件

前言 WHL文件是以Wheel格式保存的Python安装包&#xff0c;Wheel是Python发行版的标准内置包格式。在本质上是一个压缩包&#xff0c;WHL文件中包含了Python安装的py文件和元数据&#xff0c;以及经过编译的pyd文件&#xff0c;这样就使得它可以在不具备编译环境的条件下&#…...

Pycharm中安装pytorch

配置虚拟环境 为什么要安装虚拟环境&#xff1f;虚拟环境&#xff1a;把一部分内容独立出来&#xff0c;称之为容器。在容器中&#xff0c;安装我们自己想要的东西&#xff0c;比如不容版本的依赖包。各容器之间相互独立&#xff0c;互不影响。比如下载完 Anaconda 之后&#…...

Package | 解决 module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

. 问题背景 由于这个问题出现了两回&#xff0c;决定记录一下。实验背景是使用opencv python库进行数据预处理&#xff0c;遇到报错信息如下&#xff1a; “ import cv2 File “/opt/conda/lib/python3.8/site-packages/cv2/init.py”, line 181, in bootstrap() File “/op…...

如何在项目中搭建python接口自动化框架?

文章目录前言一、框架目录介绍1、common模块读取Excel代码读取yaml代码&#xff08;支持场景关联&#xff09;jsonpath断言封装代码requests二次封装&#xff08;get、post&#xff09;configparser读取配置文件递归遍历字典常用方法log日志封装2、conf模块3、data模块4、case模…...

应用统计432考研复试复试提问总结精简版【一】

一、区间估计与假设检验的联系与区别 联系&#xff1a;二者利用样本进行推断&#xff0c;都属于推断统计区别&#xff1a; 原理&#xff1a; 前者是基于大概率&#xff0c;后者基于小概率&#xff1b;统计量&#xff1a;前者是构造枢轴量&#xff08;不含未知参数&#xff0c;…...

Pytorch模型量化

在深度学习中&#xff0c;量化指的是使用更少的bit来存储原本以浮点数存储的tensor&#xff0c;以及使用更少的bit来完成原本以浮点数完成的计算。这么做的好处主要有如下几点&#xff1a; 更少的模型体积&#xff0c;接近4倍的减少&#xff1b;可以更快的计算&#xff0c;由于…...

已解决Encountered error while trying to install package.> lxml

已解决&#xff08;pip安装第三方模块lxml模块报错&#xff09;Building wheels for collected packages: lxml Building wheel for lxml (setup.py) … error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. note: This error o…...

距离度量 —— 闵可夫斯基距离(Minkowski Distance)

Python学习系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录一、概述二、计算公式1. 闵氏距离公式2. 闵氏距离的参数 p3. 闵氏距离的缺点一、概述 闵可夫斯基距离 (Minkowski Distance)&#xff0c;也被称为 闵氏距离。它不仅仅是一种距离&#xff0c;而是将多…...

python(模块)xlwt

目录一、xlwt简介二、xlwt语法1、模块安装2、模块导入3、向xls文件中写入内容4、设置写入文件的格式4.1 字体设置&#xff08;font&#xff09;4.2 背景颜色设置&#xff08;pattern&#xff09;4.3 边框设置&#xff08;borders&#xff09;4.4 对齐方式设置&#xff08;align…...

Pytorch中torch.unsqueeze()和torch.squeeze()函数解析

一. torch.squeeze()函数解析 1. 官网链接 torch.squeeze()&#xff0c;如下图所示&#xff1a; 2. torch.squeeze()函数解析 torch.squeeze(input, dimNone, outNone) squeeze()函数的功能是维度压缩。返回一个tensor&#xff08;张量&#xff09;&#xff0c;其中 input…...

python绘制相关系数热力图

python绘制相关系数热力图一.数据说明和需要安装的库二.准备绘图三.设置配色&#xff0c;画出多幅图全部代码&#xff1a;本文讲述如何利用python绘制如上的相关系数热力图一.数据说明和需要安装的库 数据是31个省市有关教育的12个指标&#xff0c;如下所示。&#xff0c;在文…...

DeepSpeed使用指南(简略版)

现在的模型越来越大&#xff0c;动辄几B甚至几百B。但是显卡显存大小根本无法支撑训练推理。例如&#xff0c;一块RTX2090的10G显存&#xff0c;光把模型加载上去&#xff0c;就会OOM&#xff0c;更别提后面的训练优化。 作为传统pytorch Dataparallel的一种替代&#xff0c;D…...

【Python】tqdm 介绍与使用

文章目录一、tqdm 简介二、tqdm 使用1. 基于迭代对象运行: tqdm(iterator)2. tqdm(list)3. trange(i)4. 手动更新参考链接一、tqdm 简介 tqdm 是一个快速&#xff0c;可扩展的 Python 进度条&#xff0c;可以在 Python 长循环中添加一个进度提示信息&#xff0c;用户只需要封装…...

Pytorch机器学习(十)—— 目标检测中k-means聚类方法生成锚框anchor

Pytorch机器学习&#xff08;十&#xff09;—— YOLO中k-means聚类方法生成锚框anchor 目录 Pytorch机器学习&#xff08;十&#xff09;—— YOLO中k-means聚类方法生成锚框anchor 前言 一、K-means聚类 k-means代码 k-means算法 二、YOLO中使用k-means聚类生成anchor 读取VO…...

Python的占位格式符

对于print函数里的语句 print("我的名字是%s, 年龄是%d"%(name, age)) 中的%s和%d叫做占位符&#xff0c;它们的完整形态是 %[(name)][flags][width][.precision]typecode 其中带有[]的前缀都是可以省略的。 [(name)]: (name)表示, 根据, 制定的名称(…...

关于sklearn库的安装

对于安装sklearn真的是什么问题都被我遇到了 例如pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out.遇到了 这种也遇到了Requirement already satisfied: numpy in c:\users\yjq\appdata\roamin…...

accuracy_score函数

1.acc计算原理 sklearn中accuracy_score函数计算了准确率。 在二分类或者多分类中&#xff0c;预测得到的label&#xff0c;跟真实label比较&#xff0c;计算准确率。 在multilabel&#xff08;多标签问题&#xff09;分类中&#xff0c;该函数会返回子集的准确率。如果对于一…...

怎么成为稚晖君?

如何成为IT大佬稚晖君——电子系统设计应具备的基本技能和方法论 快速提高电子技术的必经之路_一些老生常谈的道理 嵌入式AI入坑经历 稚晖君软件硬件开发环境总结 首先&#xff0c;机器学习深度学习这些和硬件是两个领域的内容&#xff0c;个人不建议一起学&#xff0c;注意力…...

Pandas库

Pandas是python第三方库&#xff0c;提供高性能易用数据类型和分析工具。Pandas基于NumPy实现&#xff0c;常与NumPy和Matplotlib一同使用。pandas库引用&#xff1a; import pandas as pd 包括两个数据类型&#xff1a;Series&#xff08;相当于一维数据类型&#xff09;&…...

通过两道一年级数学题反思自己

背景 做完这两道题我开始反思自己&#xff0c;到底是什么限制了我&#xff1f;是我自己&#xff1f;是曾经教导我的老师&#xff1f;还是我的父母&#xff1f; 是考试吗&#xff1f;还是什么&#xff1f; 提目 1、正方体个数问题 2、相碰可能性 过程 静态思维&#xff1a; …...

深度学习—卷积神经网络(CNN)全笔记,附代码

本文内容为哔站学习笔记【卷积神经网络-CNN】深度学习&#xff08;唐宇迪带你学AI&#xff09;&#xff1a;卷积神经网络理论详解与项目实战&#xff0c;计算机视觉&#xff0c;图像识别模块实战_哔哩哔哩_bilibili 目录 深度学习基础 什么是深度学习&#xff1f; 机器学习流…...