精华内容
下载资源
问答
  • https://blog.csdn.net/Mind_programmonkey/article/details/102732555 ... 四、RTMP Client RTMP客户端使用videojs实现了在浏览器中的展示,demo如下 https://blog.csdn.net/steveyg/article/details/86488706
  • 安装好Anaconda 3.6,在目录文件夹中用Jupyter notebook打开) 本书是2017年10月20号正式出版的,和第1版的不同之处有: 包括Python教程内的所有代码升级为Python 3.6(第1版使用的是Python 2.7) 更新了Anaconda和...

    译者:SeanCheney

    欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。

    下载本书代码(本书GitHub地址):https://github.com/wesm/pydata-book (建议把代码下载下来之后,安装好Anaconda 3.6,在目录文件夹中用Jupyter notebook打开)

    本书是2017年10月20号正式出版的,和第1版的不同之处有:

    • 包括Python教程内的所有代码升级为Python 3.6(第1版使用的是Python 2.7)
    • 更新了Anaconda和其它包的Python安装方法
    • 更新了Pandas为2017最新版
    • 新增了一章,关于更高级的Pandas工具,外加一些tips
    • 简要介绍了使用StatsModels和scikit-learn

    对有些内容进行了重新排版。(译者注1:最大的改变是把第1版附录中的Python教程,单列成了现在的第2章和第3章,并且进行了扩充。可以说,本书第2版对新手更为友好了!)

    (译者注2:毫无疑问,本书是学习Python数据分析最好的参考书。本来想把书名直接译为《Python数据分析》,这样更简短。但是为了尊重第1版的翻译,考虑到继承性,还是用老书名。这样读过第一版的老读者可以方便的用之前的书名检索到第二版。作者在写第二版的时候,有些文字是照搬第一版的。所以第二版的翻译也借鉴copy了第一版翻译:即,如果第二版中有和第一版相同的文字,则copy第一版的中文译本,觉得不妥的地方会稍加修改,剩下的不同的内容就自己翻译。这样做也是为读过第一版的老读者考虑——相同的内容可以直接跳过。)

    展开全文
  • 利用Python做一个漂亮小姐姐词云跳舞视频

    万次阅读 多人点赞 2021-01-28 16:58:12
    利用Python做一个漂亮小姐姐词云跳舞视频。实现思路:1. 下载视频 2. 获取弹幕内容 3. 从视频中提取图片 4. 利用百度AI进行人像分割 5. 小姐姐跳舞词云生成 6. 合成跳舞视频 7. 视频插入音频 B站上的漂亮的小姐姐真...

    一、前言

    B站上的漂亮的小姐姐真的好多好多,利用 you-get 大法下载了一个 B 站上跳舞的小姐姐视频,利用视频中的弹幕来制作一个漂亮小姐姐词云跳舞视频,一起来看看吧。

    二、实现思路

    1. 下载视频

    安装 you-get 库

    pip install you-get -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
    

    利用 you-get 下载 B 站视频到本地
    视频链接:https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619

    you-get -i https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619
    you-get -o 本地保存路径 视频链接 
    

    更多 you-get 大法的详细使用,可以参考官方文档:
    https://github.com/soimort/you-get/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E


    2. 获取弹幕内容

    写 python 爬虫,解析网页、提取弹幕数据保存到txt,注意构造 URL 参数和伪装请求头。

    导入需要的依赖库

    import requests
    import pandas as pd
    import re
    import time
    import random
    from concurrent.futures import ThreadPoolExecutor
    import datetime
    from fake_useragent import UserAgent
    
    # 随机产生请求头
    ua = UserAgent(verify_ssl=False, path='fake_useragent.json')
    start_time = datetime.datetime.now()
    

    爬取弹幕数据

    def  Grab_barrage(date):
        # 伪装请求头
        headers = {
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-site",
            "accept-encoding": "gzip",
            "origin": "https://www.bilibili.com",
            "referer": "https://www.bilibili.com/video/BV1rD4y1Q7jc?from=search&seid=10634574434789745619",
            "user-agent": ua.random,
            "cookie": "chage to your cookies"
        }
        # 构造url访问   需要用到的参数  爬取指定日期的弹幕
        params = {
            'type': 1,
            'oid': '206344228',
            'date': date
        }
        # 发送请求  获取响应
        response = requests.get(url, params=params, headers=headers)
        # print(response.encoding)   重新设置编码
        response.encoding = 'utf-8'
        # print(response.text)
        # 正则匹配提取数据  转成集合去除重复弹幕
        comment = set(re.findall('<d p=".*?">(.*?)</d>', response.text))
        # 将每条弹幕数据写入txt
        with open('bullet.txt', 'a+') as f:
            for con in comment:
                f.write(con + '\n')
                print(con)
        time.sleep(random.randint(1, 3))   # 休眠
    

    主函数

    def main():
        # 开多线程爬取   提高爬取效率
        with ThreadPoolExecutor(max_workers=4) as executor:
            executor.map(Grab_barrage, date_list)
        # 计算所用时间
        delta = (datetime.datetime.now() - start_time).total_seconds()
        print(f'用时:{delta}s  -----------> 弹幕数据成功保存到本地txt')
    

    主函数调用

    if __name__ == '__main__':
        # 目标url
        url = "https://api.bilibili.com/x/v2/dm/history"
        start = '20201201'
        end = '20210128'
        # 生成时间序列
        date_list = [x for x in pd.date_range(start, end).strftime('%Y-%m-%d')]
        print(date_list)
        count = 0
        # 调用主函数
        main()
    

    结果如下:


    3. 从视频中提取图片

    经过实践发现,这个视频完整分离出图片来有 3347 张,本文截取 800 张图片来做词云。

    import cv2
    
    # ============================ 视频处理 分割成一帧帧图片 =======================================
    cap = cv2.VideoCapture(r"beauty.flv")
    num = 1
    while True:
        # 逐帧读取视频  按顺序保存到本地文件夹
        ret, frame = cap.read()
        if ret:
            if 88 <= num < 888:
                cv2.imwrite(f"./pictures/img_{num}.jpg", frame)   # 保存一帧帧的图片
                print(f'========== 已成功保存第{num}张图片 ==========')
            num += 1
        else:
            break
    cap.release()   # 释放资源
    

    结果如下:

    4. 利用百度AI进行人像分割

    创建一个人像分割的应用,记住你的AppID、API Key、Secret Key,后面会用到。

    查看人像分割的 Python SDK 文档,熟悉它的基本使用。

    # -*- coding: UTF-8 -*-
    """
    @Author  :叶庭云
    @公众号  :修炼Python
    @CSDN    :https://yetingyun.blog.csdn.net/
    @百度AI  :https://ai.baidu.com/tech/body/seg
    """
    import cv2
    import base64
    import numpy as np
    import os
    from aip import AipBodyAnalysis
    import time
    import random
    
    # 利用百度AI的人像分割服务 转化为二值图  有小姐姐身影的蒙版
    # 百度云中已创建应用的  APP_ID API_KEY SECRET_KEY
    APP_ID = '23485847'
    API_KEY = 'VwGY053Y1A8ow3CFBTFrK0Pm'
    SECRET_KEY = '**********************************'
    
    client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
    # 保存图像分割后的路径
    path = './mask_img/'
    
    # os.listdir  列出保存到图片名称
    img_files = os.listdir('./pictures')
    print(img_files)
    for num in range(88, len(img_files) + 1):
        # 按顺序构造出图片路径
        img = f'./pictures/img_{num}.jpg'
        img1 = cv2.imread(img)
        height, width, _ = img1.shape
        # print(height, width)
        # 二进制方式读取图片
        with open(img, 'rb') as fp:
            img_info = fp.read()
    
        # 设置只返回前景   也就是分割出来的人像
        seg_res = client.bodySeg(img_info)
        labelmap = base64.b64decode(seg_res['labelmap'])
        nparr = np.frombuffer(labelmap, np.uint8)
        labelimg = cv2.imdecode(nparr, 1)
        labelimg = cv2.resize(labelimg, (width, height), interpolation=cv2.INTER_NEAREST)
        new_img = np.where(labelimg == 1, 255, labelimg)
        mask_name = path + 'mask_{}.png'.format(num)
        # 保存分割出来的人像
        cv2.imwrite(mask_name, new_img)
        print(f'======== 第{num}张图像分割完成 ========')
        time.sleep(random.randint(1,2))
    

    结果如下:

    5. 小姐姐跳舞词云生成

    # -*- coding: UTF-8 -*-
    """
    @Author  :叶庭云
    @公众号  :修炼Python
    @CSDN    :https://yetingyun.blog.csdn.net/
    """
    from wordcloud import WordCloud
    import collections
    import jieba
    import re
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    # 读取数据
    with open('bullet.txt') as f:
        data = f.read()
    
    # 文本预处理  去除一些无用的字符   只提取出中文出来
    new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
    new_data = "/".join(new_data)
    
    # 文本分词
    seg_list_exact = jieba.cut(new_data, cut_all=True)
    
    result_list = []
    with open('stop_words.txt', encoding='utf-8') as f:
        con = f.read().split('\n')
        stop_words = set()
        for i in con:
            stop_words.add(i)
    
    for word in seg_list_exact:
        # 设置停用词并去除单个词
        if word not in stop_words and len(word) > 1:
            result_list.append(word)
    
    # 筛选后统计词频
    word_counts = collections.Counter(result_list)
    path = './wordcloud/'
    
    for num in range(88, 888):
        img = f'./mask_img/mask_{num}'
        # 获取蒙版图片
        mask_ = 255 - np.array(Image.open(img))
        # 绘制词云
        plt.figure(figsize=(8, 5), dpi=200)
        my_cloud = WordCloud(
            background_color='black',  # 设置背景颜色  默认是black
            mask=mask_,      # 自定义蒙版
            mode='RGBA',
            max_words=500,
            font_path='simhei.ttf',   # 设置字体  显示中文
        ).generate_from_frequencies(word_counts)
    
        # 显示生成的词云图片
        plt.imshow(my_cloud)
        # 显示设置词云图中无坐标轴
        plt.axis('off')
        word_cloud_name = path + 'wordcloud_{}.png'.format(num)
        my_cloud.to_file(word_cloud_name)    # 保存词云图片
        print(f'======== 第{num}张词云图生成 ========')
    

    结果如下:

    6. 合成跳舞视频

    # -*- coding: UTF-8 -*-
    """
    @Author  :叶庭云
    @公众号  :修炼Python
    @CSDN    :https://yetingyun.blog.csdn.net/
    """
    import cv2
    import os
    
    # 输出视频的保存路径
    video_dir = 'result.mp4'
    # 帧率
    fps = 30
    # 图片尺寸
    img_size = (1920, 1080)
    
    fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')  # opencv3.0 mp4会有警告但可以播放
    videoWriter = cv2.VideoWriter(video_dir, fourcc, fps, img_size)
    img_files = os.listdir('./wordcloud')
    
    for i in range(88, 888):
        img_path = './wordcloud/' + 'wordcloud_{}.png'.format(i)
        frame = cv2.imread(img_path)
        frame = cv2.resize(frame, img_size)   # 生成视频   图片尺寸和设定尺寸相同
        videoWriter.write(frame)      # 写进视频里
        print(f'======== 按照视频顺序第{i}张图片合进视频 ========')
    
    videoWriter.release()   # 释放资源
    

    效果如下:

    7. 视频插入音频

    漂亮小姐姐跳舞那么好看,再加上自己喜欢的背景音乐,岂不美哉。

    # -*- coding: UTF-8 -*-
    """
    @Author  :叶庭云
    @公众号  :修炼Python
    @CSDN    :https://yetingyun.blog.csdn.net/
    """
    import moviepy.editor as mpy
    
    # 读取词云视频
    my_clip = mpy.VideoFileClip('result.mp4')
    # 截取背景音乐
    audio_background = mpy.AudioFileClip('song.mp4').subclip(17, 44)
    audio_background.write_audiofile('vmt.mp3')
    # 视频中插入音频
    final_clip = my_clip.set_audio(audio_background)
    # 保存为最终的视频   动听的音乐!漂亮小姐姐词云跳舞视频!
    final_clip.write_videofile('final_video.mp4')
    

    结果如下:

    漂亮小姐姐词云跳舞

    三、结语

    最后安利一份Python全栈知识图谱:

    • 全栈知识:100+核心知识点
    • 系统化:六大模块,全链路梳理。
    • 专业化:8位专家耗时100天打造
    • 精选材质:250G铜版纸,双面哑模。
    展开全文
  • 利用python开发app实战

    万次阅读 多人点赞 2020-11-12 14:23:58
    我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了。最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻...

    我很早之前就想开发一款app玩玩,无奈对java不够熟悉,之前也没有开发app的经验,因此一直耽搁了。最近想到尝试用python开发一款app,google搜索了一番后,发现确实有路可寻,目前也有了一些相对成熟的模块,于是便开始了动手实战,过程中发现这其中有很多坑,好在最终依靠google解决了,因此小记一番。

    说在前面的话

      python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用python开发的app应当是作为编码练习、或者自娱自乐所用,加上目前这方面的模块还不是特别成熟,bug比较多,总而言之,劝君莫轻入。

    准备工作

      利用python开发app需要用到python的一个模块–kivy,kivy是一个开源的,跨平台的Python开发框架,用于开发使用创新的应用程序。简而言之,这是一个python桌面程序开发框架(类似wxpython等模块),强大的是kivy支持linux、mac、windows、android、ios平台,这也是为什么开发app需要用到这个模块。
      虽然kivy是跨平台的,但是想要在不同的平台使用python代码,还需要将python代码打包成对应平台的可执行程序,好在kivy项目下有个打包工具项目–buildozer,这是官方推荐的打包工具,因为相对比较简单,自动化程度高,其他项目比如:python-for-android也能起到类似的作用,这里不展开介绍。

    搭建kivy开发环境

    需要在pc上安装kivy开发环境,这里演示下mac与linux下的安装过程。

    install kivy for mac

    安装一些依赖包:

    brew install pkg-config sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer
    

    安装cython以及kivy:

    pip install cython==0.25
    pip install kivy
    

    如果安装kivy报错,则使用下面的方式安装kivy:

    git clone https://github.com/kivy/kivy
    python setup.py install
    

    安装后测试:

    $python
    Python 2.7.10 (default, Jul 15 2017, 17:16:57)
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    >>> import kivy
    [INFO   ] [Logger      ] Record log in /Users/didi/.kivy/logs/kivy_18-05-08_4.txt
    [INFO   ] [Kivy        ] v1.10.1.dev0, git-5f6c66e, 20180507
    [INFO   ] [Python      ] v2.7.10 (default, Jul 15 2017, 17:16:57)
    [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)]
    

    说明:导入kivy模块没有报错则说明安装成功。

    install kivy for centos7

    先安装依赖:

    yum install \
    make \
    mercurial \
    automake \
    gcc \
    gcc-c++ \
    SDL_ttf-devel \
    SDL_mixer-devel \
    khrplatform-devel \
    mesa-libGLES \
    mesa-libGLES-devel \
    gstreamer-plugins-good \
    gstreamer \
    gstreamer-python \
    mtdev-devel \
    python-devel \
    python-pip \
    java-devel
    
    
    

    安装cython以及kivy:

    pip install Cython==0.20
    pip install kivy
    

    centos安装kivy参考:https://kivy.org/docs/installation/installation-linux.html#using-software-packages

    说明:其他安装kivy方式可移步:https://kivy.org/#download(需要翻墙)

    用kivy开发第一个python app

    安装完kivy就可以开发app程序了,这里演示下hello-world程序,关于kivy更复杂的用法不是本文重点,后面再成文介绍。
    1) 创建一个main.py文件,写入:

    #! -*- coding:utf-8 -*-
    from kivy.app import App
    class HelloApp(App):
    pass
    if __name__ == '__main__':
    HelloApp().run()
    

    2)创建一个hello.kv文件,写入:

    Label:
    text: 'Hello, World! I am nMask'
    

    简单说明:main.py是入口函数,定义了一个HelloApp类,该类继承kivy.app;hello.kv文件是kivy程序,相当于定义界面风格等,该文件命名规则为类名小写且去除app。

    运行第一个python app

    python main.py
    

    运行结果:

    安装buildozer工具

      通过以上的编码,我创建了自己的第一个python app程序,该程序可以直接在mac、linux、windows平台下运行,那么如何让它在安卓或者苹果手机上运行呢?我们知道在安卓上运行,需要将其打包成apk安装程序,因此就需要用到前面提到过的buildozer工具,(buildozer工具可以打包kivy程序,支持android、ios等),buildozer的安装过程比较简单:

    pip install buildozer
    

    使用buildozer工具将kivy程序打包成apk

    在python项目目录下运行:

    buildozer init
    

    运行成功将会创建一个配置文件buildozer.spec,可以通过修改配置文件更改app的名称等,然后运行:

    buildozer android debug deploy run
    

    运行以上命令将会生成跨平台的安装包,可适用安卓、ios等,如果用于安卓,则是利用python-for-android项目。

    在第一次运行以上命令的时候,会自动在系统中下载安卓sdk等必要文件,如下图。(过程需要翻墙,而且有很多依赖需要下载)

    说明:这里只演示打包成apk文件,iso平台的可自行研究,参考文档:https://github.com/kivy/buildozer。

    python apk程序测试

    如果以上步骤都运行成功的话,应该会在项目目录下的bin目录下生成一个apk文件,类似如下:

    然后将apk下载到安卓系统的手机上,安装即可,测试效果如下:

    打开app:

    buildozer使用说明

    Usage:
    buildozer [--profile <name>] [--verbose] [target] <command>...
    buildozer --version
    Available targets:
    android        Android target, based on python-for-android project
    ios            iOS target, based on kivy-ios project
    android_old    Android target, based on python-for-android project (old toolchain)
    Global commands (without target):
    distclean          Clean the whole Buildozer environment.
    help               Show the Buildozer help.
    init               Create a initial buildozer.spec in the current directory
    serve              Serve the bin directory via SimpleHTTPServer
    setdefault         Set the default command to run when no arguments are given
    version            Show the Buildozer version
    Target commands:
    clean      Clean the target environment
    update     Update the target dependencies
    debug      Build the application in debug mode
    release    Build the application in release mode
    deploy     Deploy the application on the device
    run        Run the application on the device
    serve      Serve the bin directory via SimpleHTTPServer
    Target "android_old" commands:
    adb                Run adb from the Android SDK. Args must come after --, or
    use --alias to make an alias
    logcat             Show the log from the device
    Target "ios" commands:
    list_identities    List the available identities to use for signing.
    xcode              Open the xcode project.
    Target "android" commands:
    adb                Run adb from the Android SDK. Args must come after --, or
    use --alias to make an alias
    logcat             Show the log from the device
    p4a                Run p4a commands. Args must come after --, or use --alias
    to make an alias
    

    buildozer打包过程中的坑点

    如果在打包过程中遇到报错,可以修改buildozer.spec配置文件中的log_level为2,然后重新运行,可以看具体的错误信息。

    报错:You might have missed to install 32bits libs

    这个错是我在centos7上运行时报的错,大意是系统缺少了某些32位的依赖文件。
    解决方案:

    yum -y install --skip-broken glibc.i686 arts.i686 audiofile.i686 bzip2-libs.i686 cairo.i686 cyrus-sasl-lib.i686 dbus-libs.i686 directfb.i686 esound-libs.i686 fltk.i686 freeglut.i686 gtk2.i686 hal-libs.i686 imlib.i686 lcms-libs.i686 lesstif.i686 libacl.i686 libao.i686 libattr.i686 libcap.i686 libdrm.i686 libexif.i686 libgnomecanvas.i686 libICE.i686 libieee1284.i686 libsigc++20.i686 libSM.i686 libtool-ltdl.i686 libusb.i686 libwmf.i686 libwmf-lite.i686 libX11.i686 libXau.i686 libXaw.i686 libXcomposite.i686 libXdamage.i686 libXdmcp.i686 libXext.i686 libXfixes.i686 libxkbfile.i686 libxml2.i686 libXmu.i686 libXp.i686 libXpm.i686 libXScrnSaver.i686 libxslt.i686 libXt.i686 libXtst.i686 libXv.i686 libXxf86vm.i686 lzo.i686 mesa-libGL.i686 mesa-libGLU.i686 nas-libs.i686 nss_ldap.i686 cdk.i686 openldap.i686 pam.i686 popt.i686 pulseaudio-libs.i686 sane-backends-libs-gphoto2.i686 sane-backends-libs.i686 SDL.i686 svgalib.i686 unixODBC.i686 zlib.i686 compat-expat1.i686 compat-libstdc++-33.i686 openal-soft.i686 alsa-oss-libs.i686 redhat-lsb.i686 alsa-plugins-pulseaudio.i686 alsa-plugins-oss.i686 alsa-lib.i686 nspluginwrapper.i686 libXv.i686 libXScrnSaver.i686 qt.i686 qt-x11.i686 pulseaudio-libs.i686 pulseaudio-libs-glib2.i686 alsa-plugins-pulseaudio.i686 python-matplotli
    

    参考:https://ask.fedoraproject.org/en/question/9556/how-do-i-install-32bit-libraries-on-a-64-bit-fedora/

    报错:Error compiling Cython file

    错误大意为cython文件出错,可能是cython模块没有安装,或者版本有问题。
    解决方案:

    pip install cython==0.25
    

    报错:IOError: [Errno 2] No such file or directory…..

    这是在打包的最后一步,将apk文件copy到项目bin目录下时报的错,是buildozer的一个bug。
    解决方案:
    修改/usr/local/lib/python2.7/dist-packages/buildozer/tagets/android.py文件:
    (1)在文件开头导入:

    from distutils.version import LooseVersion
    

    (2) 将786行:XXX found how the apk name is really built from the title这一行以下的代码替换为:

    __sdk_dir = self.android_sdk_dir
    build_tools_versions = os.listdir(join(__sdk_dir, 'build-tools'))
    build_tools_versions = sorted(build_tools_versions, key=LooseVersion)
    build_tools_version = build_tools_versions[-1]
    gradle_files = ["build.gradle", "gradle", "gradlew"]
    is_gradle_build = any((exists(join(dist_dir, x)) for x in gradle_files)) and build_tools_version >= ’25.0'
    

    buildozer虚拟机

      kivy官方推出了一个buildozer虚拟机镜像,已经安装好了buildozer以及一些依赖文件,为buildozer打包测试提供平台。由于之前我在mac上利用buildozer打包一直报错,后来换成centos也依然没有成功,因此便下载了此虚拟机,测试效果如下:

    虚拟机下载地址:http://txzone.net/files/torrents/kivy-buildozer-vm-2.0.zip

    说明:对于无法解决依赖问题的朋友,可以使用此虚拟机进行程序打包,开发环境还是推荐用自己的本机。

    kivy开发实例

      因为本文重点在于介绍如何利用kivy+buildozer开发一款python app,因此对于kivy的开发过程,以及app功能进行了最简化。想要学习如何开发更复杂的app,可参考:https://muxuezi.github.io/posts/kivy-perface.html#

    展开全文
  • 利用python进行T检验

    万次阅读 多人点赞 2017-07-11 00:35:02
    利用python进行t检验

    引入所需的包

    from scipy import stats
    import numpy as np

    注:ttest_1samp, ttest_ind, ttest_rel均进行双侧检验
    H0:μ=μ0
    H1:μμ0

    单样本T检验-ttest_1samp

    ttest_1samp官方文档

    生成50行x2列的数据

    np.random.seed(7654567)  # 保证每次运行都会得到相同结果
    # 均值为5,方差为10
    rvs = stats.norm.rvs(loc=5, scale=10, size=(50,2))

    检验两列数的均值与1和2的差异是否显著

    stats.ttest_1samp(rvs, [1, 2])

    返回结果:

    Ttest_1sampResult(statistic=array([ 2.0801775 , 2.44893711]), pvalue=array([ 0.04276084, 0.01795186]))

    分别显示两列数的t统计量和p值。由p值分别为0.042和0.018,当p值小于0.05时,认为差异显著,即第一列数的均值不等于1,第二列数的均值不等于2。


    不拒绝原假设——均值等于5

    stats.ttest_1samp(rvs, 5.0)

    Ttest_1sampResult(statistic=array([-0.68014479, -0.04323899]), pvalue=array([ 0.49961383, 0.96568674]))


    拒绝原假设——均值不等于5

    stats.ttest_1samp(rvs, 0.0)

    Ttest_1sampResult(statistic=array([ 2.77025808, 4.11038784]), pvalue=array([ 0.00789095, 0.00014999]))


    第一列数均值等于5,第二列数均值不等于0

    stats.ttest_1samp(rvs,[5.0,0.0])

    Ttest_1sampResult(statistic=array([-0.68014479, 4.11038784]), pvalue=array([ 4.99613833e-01, 1.49986458e-04]))


    第一行数均值等于5,第二行数均值不等于0

    #axis=0按列运算,axis=1按行运算
    stats.ttest_1samp(rvs.T,[5.0,0.0],axis=1) 

    Ttest_1sampResult(statistic=array([-0.68014479, 4.11038784]), pvalue=array([ 4.99613833e-01, 1.49986458e-04]))


    将两列数据均值分别与5.0和0.0比较,得到4个t统计量和p值

    stats.ttest_1samp(rvs,[[5.0],[0.0]])

    Ttest_1sampResult(statistic=array([[-0.68014479, -0.04323899],
    [ 2.77025808, 4.11038784]]), pvalue=array([[ 4.99613833e-01, 9.65686743e-01],
    [ 7.89094663e-03, 1.49986458e-04]]))

    两独立样本t检验-ttest_ind

    ttest_ind官方文档
    生成数据

    np.random.seed(12345678)
    #loc:平均值  scale:方差
    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)  
    rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)

    当两总体方差相等时,即具有“方差齐性”,可以直接检验
    不拒绝原假设——两总体均值相等

    stats.ttest_ind(rvs1,rvs2)

    Ttest_indResult(statistic=0.26833823296238857, pvalue=0.78849443369565098)


    当不确定两总体方差是否相等时,应先利用levene检验,检验两总体是否具有方差齐性。

    stats.levene(rvs1, rvs2)

    LeveneResult(statistic=1.0117186648494396, pvalue=0.31473525853990908)

    p值远大于0.05,认为两总体具有方差齐性。

    如果两总体不具有方差齐性,需要将equal_val参数设定为“False”。


    需注意的情况:

    如果两总体具有方差齐性,错将equal_var设为False,p值变大

    stats.ttest_ind(rvs1,rvs2, equal_var = False)

    Ttest_indResult(statistic=0.26833823296238857, pvalue=0.78849452749501059)


    两总体方差不等时,若没有将equal_var参数设定为False,则函数会默认equal_var为True,这样会低估p值

    rvs3 = stats.norm.rvs(loc=5, scale=20, size=500)
    stats.ttest_ind(rvs1, rvs3, equal_var = False)

    正确的p值
    Ttest_indResult(statistic=-0.46580283298287956, pvalue=0.64149646246568737)


    stats.ttest_ind(rvs1, rvs3)

    被低估的p值
    Ttest_indResult(statistic=-0.46580283298287956, pvalue=0.64145827413435608)


    当两样本数量不等时,equal_val的变化会导致t统计量变化
    rvs1:来自总体——均值5,方差10,样本数500
    rvs2:来自总体——均值5,方差20,样本数100
    两总体不具有方差齐性,应设定equal_var=False

    rvs4 = stats.norm.rvs(loc=5, scale=20, size=100)
    stats.ttest_ind(rvs1, rvs4)

    错误的t统计量
    Ttest_indResult(statistic=-0.99882539442782847, pvalue=0.31828327091038783)


    stats.ttest_ind(rvs1, rvs4, equal_var = False)

    正确的t统计量
    Ttest_indResult(statistic=-0.69712570584654354, pvalue=0.48716927725401871)


    不同均值,不同方差,不同样本量的t检验
    错误的检验:未将equal_var设定为False

    rvs5 = stats.norm.rvs(loc=8, scale=20, size=100)
    stats.ttest_ind(rvs1, rvs5)

    Ttest_indResult(statistic=-1.4679669854490669, pvalue=0.14263895620529113)


    正确的检验:

    stats.ttest_ind(rvs1, rvs5, equal_var = False)

    Ttest_indResult(statistic=-0.94365973617133081, pvalue=0.34744170334794089)


    配对样本t检验

    ttest_rel官方文档

    np.random.seed(12345678)

    不拒绝原假设,认为rvs1 与 rvs2 所代表的总体均值相等

    rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
    rvs2 = (stats.norm.rvs(loc=5,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500))
    stats.ttest_rel(rvs1,rvs2)

    Ttest_relResult(statistic=0.24101764965300979, pvalue=0.80964043445811551)


    拒绝原假设,认为rvs1 与 rvs3所代表的总体均值不相等

    rvs3 = (stats.norm.rvs(loc=8,scale=10,size=500) + stats.norm.rvs(scale=0.2,size=500))
    stats.ttest_rel(rvs1,rvs3)

    Ttest_relResult(statistic=-3.9995108708727924, pvalue=7.3082402191661285e-05)


    展开全文
  • Python:利用Python查看自己电脑上CUDA的版本信息 目录 利用Python查看自己电脑上CUDA的版本信息 1、输出的信息即为编译该发行版 Pytorch 时所使用的 cuda 信息 2、Pytorch实际使用的运行时的 CUDA 目录 ...
  • 利用Python进行数据分析

    千次阅读 2018-09-12 16:15:17
    利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算 《利用python进行数据分析》读书笔记--第五章 pandas入门 《利用python进行数据分析》读书笔记--第六章 数据加载、存储与文件格式 《利用...
  • 如何利用Python画图

    千次阅读 2019-03-31 00:12:08
    高中忙于学习的我们甚至可以说是对编程是一无所知,进入大学进入到这个专业才开始接触很多电脑相关的东西才开始接触编程,下面我就教大家如何利用编程语言画图,以Python语言为例,我们这次利用Python画一个爱心。...
  • 现在磁力站很多,但是搜出来的东西乱七八糟的,广告也多,我看多了觉得挺烦的,正好周末无聊,想着自己做一个,下面附上本次利用Python爬虫磁力站点的教程。 下面是我写爬虫时候主要引用的库 当然,抓取的关键词...
  • [539]利用python开发app

    万次阅读 多人点赞 2019-02-25 18:24:09
    说在前面的话 python语言虽然很万能,但用它来开发app还是显得...利用python开发app需要用到python的一个模块–kivy,kivy是一个开源的,跨平台的Python开发框架,用于开发使用创新的应用程序。简而言之,这是一个...
  • 利用Python下载文件

    万次阅读 多人点赞 2017-03-16 16:32:47
    利用Python下载文件也是十分方便的:小文件下载下载小文件的话考虑的因素比较少,给了链接直接下载就好了:import requests image_url = ...
  • 利用python-docx 读取word文件 https://blog.csdn.net/AI_LINNGLONG/article/details/104342729 【PYTHON,WORD】2.利用python-docx向word内写入内容 https://blog.csdn.net/AI_LINNGLONG/article/details/104344114 ...
  • 利用Python进行数据分析·第2版

    千次阅读 多人点赞 2018-10-18 10:31:29
    【翻译】《利用Python进行数据分析·第2版》第1章 准备工作 【翻译】《利用Python进行数据分析·第2版》第2章(上)Python语法基础,IPython和Jupyter 【翻译】《利用Python进行数据分析·第2版》第2章(中)...
  • 利用Python搭建用户画像系统

    万次阅读 多人点赞 2017-08-30 16:32:50
    本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统。 1.什么是用户画像 用户画像可以理解成是海量数据的标签,根据用户的目标、行为和观点的差异,将他们区分为不同的类型...
  • 利用Python turtle库制作夜空

    千次阅读 多人点赞 2019-11-17 21:53:27
    利用Python turtle库制作夜空 打包后可送给女友
  • 利用Python将py文件编译成so文件

    千次阅读 2021-02-22 12:04:17
    利用Python将py文件编译成so文件
  • Python之ffmpeg:利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 目录 利用python编程基于ffmpeg将m4a格式音频文件转为mp3格式文件 1、先下载ffmpeg程序 2、编写python代码 利用...
  • 利用python进行数据分析 pdf

    千次阅读 多人点赞 2019-09-13 12:36:58
    利用python进行数据分析 链接:https://pan.baidu.com/s/1mFg7kB0WG6edKnhumMbbJg 提取码:6kos
  • 利用Python实现杨辉三角

    万次阅读 多人点赞 2018-10-11 21:42:07
    利用Python实现杨辉三角 最近刚学python,边学边进行了一些小练习,以下是杨辉三角的实现思路和代码,希望大家给与支持,喜欢的给一个关注,我会继续努力。(有问题发我邮箱1318658394@qq.com,互相进步) 我们需要...
  • 利用 Python 计算MD5值

    万次阅读 2018-03-20 18:59:34
    文章架构 目的 ...利用 Python 某些模块将 DataFrame(pandas)某列...利用Python 3 与 Python 2中不同模块处理之间的差异(例如,Python2 MD5模块与Python 3 hashlib模块)。 加密方式 hashlib 模...
  • 利用Python实现高斯混合模型(GMM)

    万次阅读 多人点赞 2018-07-20 16:27:09
    之前将网易公开课上吴恩达机器学习视频中高斯混合模型(GMM)及其EM算法反反复复看了几遍之后并将所有公式重新推导了一遍,现在利用Python进行手写进一步加深理解。关于吴恩达机器学习中相关讲义的整理另行抽时间...
  • python爬虫教程:《利用Python爬取表情包》,微信没有表情包?不用愁!老师带领你使用多线程爬虫一键爬取20w的表情包~ 项目源码: ''' 在学习过程中有什么不懂得可以加我的 python学习交流扣扣qun,934109170 群...
  • 利用python-cdo处理气象数据

    千次阅读 2020-01-17 10:50:21
    利用python-cdo处理气象数据
  • 利用python之wxpy模块玩转微信

    千次阅读 多人点赞 2020-08-16 10:39:13
    首先利用一句代码我们就可以利用python登录网页版微信 bot = Bot(cache_path= True) 这条语句会产生一个二维码,我们扫描了这个二维码之后就可以登录我们的微信了 功能一:获得微信好友信息 利用一行语句获得你微信...
  • 利用Python的turtle库绘制四叶草

    千次阅读 2020-07-27 11:42:25
    利用Python的turtle库绘制四叶草 Good Luck!
  • 利用python转置csv文件

    千次阅读 2019-07-17 09:17:52
    利用python将csv文件的行列互换并保存: df = pd.read_csv(file) df.values data = df.as_matrix() data = list(map(list,zip(*data))) data = pd.DataFrame(data) data.to_csv('dataset/'+file,header=0,...
  • 根据相关政策规定,国内比特币交易将于2017年9月底关闭,但这几年里,比特币交易的历史行情数据,可能对日后用于研究经济、金融以及量化交易策略等都有重大的价值...利用 Python 获取 okcoin.cn 比特币历史数据 利用 Py
  • Python:利用python语言绘制多个子图经典案例、代码实现之详细攻略 目录 利用python语言绘制多个子图代码实现、经典案例 1、绘制多个子图框架 多个子图绘制的经典案例 1、绘制多个直方图 2、绘制多个曲线...
  • Python语言学习:利用python语言实现调用内部命令—命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令—命令提示符cmd的几种方法 T1方法 T2方法 T3方法 利用python语言实现调用...
  • 利用python爬取英语单词和释义。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,167
精华内容 34,066
关键字:

利用python

python 订阅