精华内容
下载资源
问答
  • 今天为大家分享一个Jason Jerald关于“以人为中心的沉浸式交互设计“的演讲,他是一个有着20年VR经验,参与过包括世界五百强在内的30家企业的60多个VR项目的高级工程师。他同时也是Principal Consultant at Next Gen...
    今天为大家分享一个Jason Jerald关于“以人为中心的沉浸式交互设计“的演讲,他是一个有着20年VR经验,参与过包括世界五百强在内的30家企业的60多个VR项目的高级工程师。他同时也是Principal Consultant at Next Gen Interactions的联合创始人。

    演讲中,他在VR设计的基本理论、输入设备、交互模式和技术以及迭代这四个方面具体展开了论述。下面就让我们一起来学习。

    一、基本理论

    众所周知, VR设计是一种持续性的保真(Fidelity continua)。可是有时候,为了达到更好的体验,我们往往要做一些权衡和妥协。 比如 在交互保真度里,我们要在真实和不真实之间做权衡。一个很好的例子是:激光。 为了更好的锁定物体,我们可能需要通过激光来射出一条线,尽管这个在现实生活中可能不怎么常见。

    另一个我们VR人士需要掌握的是Norman提出的 交互设计理论中的功能可见性(Affordances, 以下简称功能)和指示信号(Signifiers)。需要特别注意的是这两者是不同的。功能指的是用户和物体之间的关系,它定义了哪些行为是可行的,同时某个物体是如何被不同用户操作的。而指示信号是提供了一个物体应该是怎样的线索和提示。综合来说,我们应该为我们的交互中每一个功能提供显而易见的指示信号。

    此外,还有一个在 VR设计中重要的概念是——参考系。它在“以人为中心的VR设计中”尤其重要。

    比如头部参考系:它通常定义了一个透明的光标来定位屏幕坐标系。

    又比如虚拟现实坐标系:由于我们容易在虚拟世界中迷路,所以放一个指南针在脚下使得用户一直有方向感是个不错的选择。

    还有躯干参考系:我们可以把信息和工具放在躯干的周围,使它一直跟随着用户,这样当用户低下头时就能看见他需要的东西。

    此外,现实世界参考系:我们可以提供和现实世界有着稳固联系的线索来减少VR眩晕,通过现实参考系可以减少用户看到的和感觉到的感知冲突。
    显而易见的是用好参考系对于VR设计是非常有帮助的。

    二、输入设备

    如下图可知,在VR头戴式显示器之外,如今的VR市场已经出现了很多硬件设备。

    以人为中心的沉浸式交互设计如何做?

    这些硬件各式各样, 基本依赖于不同项目的目标, 但是没有一个输入设备适用于所有的VR项目的需求。那么在这些疯狂的输入设备中,有没有哪一个对于VR来说尤其的重要呢?

    答案是肯定的。那就是我们人的“手”。 手是人类最重要的感知器官,以至于人类大脑的大部分活动都是手的输入输出。在如今的VR体验已经可以容易地引入人类的双手时,我们应该有效利用起我们的手。

    对于双手作为VR输入的使用,两只手并不需要一定等价或平行使用。主流的定义方式将双手输入定义为两类:

    1、对称式:每只手执行等价的行为,两只手可以同时执行,也可以一次只有一张手。


    2、非对称式:每只手执行不同的行为,非惯用手为惯用手提供便捷。


    好的VR设计应该是用户可以很自如使用它们的双手工作,并且通常伴随着对称模式和非对称模式交替使用。


    三、交互模式

    如下图所示, Jason将交互模式分为以下五个大类,选择、操作、视角控制、间接控制、复合模式。这五个大类又可以细分为16个小类。每个小类还可以再具体细分。Jason说这个分类完全是从用户的视角得来的。

    以人为中心的沉浸式交互设计如何做?

    手势技术(Hand Technique)

    提到手势追踪,人们能想到的第一件事情一定是直接用手选择和操作物体。例如像现实生活一样直接用手捡起一个物体,或是很自然地用手势进行交流。下面让我们具体来看几个例子:

    1、 手势选择模式(Hand Selection Pattern):像真实世界中一样触屏和抓起物体。

    2、手掌中用户界面(Interface in Hands):将用户界面显示在虚拟的手掌中,用户可以像真实世界中一样在虚拟世界中看着双手完成工作。如下图的虚拟手柄就是一个很好的例子。

    以人为中心的沉浸式交互设计如何做?


    以人为中心的沉浸式交互设计如何做?


    3、 不逼真的手(Non-Realistic Hands):有些时候我们并不需要显示手臂,甚至不需要显示一个和真实世界中一模一样的手。例如,当你想触碰比你手掌能触及的地方更远的东西,不显示手臂就是一个好的选择。再比如一些恰当的3D光标往往操作起来比双手更让人觉得直观。


    其他的设计模式:


    1、 图像平面模式(Image-Pan Pattern):把背景当做一个2D的平面,直接利用头部所面向的方向在这个2D平面上通过X、Y坐标来选择物体。

    2、窗体部件和面板模式(Widgets&panels):将2D的桌面应用引入VR有时候也是一个明智的选择。例如用户可能不希望为了做一个计算而退出你的VR程序去电脑桌面找计算器应用。

    3、缩小的虚拟世界(World-In-Miniature): 通常情况下这个模式是指我们熟悉的小地图。用户可以通过接触该地图的某一位置来移动到那个位置。

    4、3D 多点触控模式(3D Multitouch Pattern): 把虚拟世界当做一个物体,用户可以自由的移动、旋转、缩放该物体。这种模式的一个最大的好处是用户会理解成是虚拟世界在动,而不是自己在虚拟世界中动,在一些场景下可以减少VR眩晕。


    四、 迭代


    对于VR而言,几乎没有什么绝对的准则。但是相信每一位做VR的同行们都知道:迭代比其他方法对于VR的设计要重要的多。

    要想设计好一个以人为中心的VR交互体验需要很多来自用户的反馈。并且在这过程中,我们可能还会经历很多失败。但如果你想最终成功的话请习惯这些失败。通常来说好的VR设计会经历:定义->制作->学习的循环。在这一次次循环中,我们通过专业的方式不断评估我们的产品,这样才能最终产生高可用性的VR产品。

    以人为中心的沉浸式交互设计如何做?

    上图为迭代过程

    以人为中心的沉浸式交互设计如何做?

    上图为在迭代的过程中专业的评估过程

    五、总结

    以人为中心的沉浸式设计最重要的便是交互性。其中利用好我们的双手这最重要的输入工具将带领VR进入更高的级别。对于VR的产品中很多的的问题,我们并没有一个通用的解决方式,最好的办法依然是迭代、迭代、迭代!

    http://www.chanpin100.com/article/100085

    展开全文
  • 用 python 一个动态可视化交互大屏

    千次阅读 2020-06-08 17:11:00
    你可能经常会在公司前台、展会、路演时看到可视化数据的交互大屏。今天我们就来用 python 一个动态可视化的交互大屏图。一、项目背景随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆...

    你可能经常会在公司前台、展会、路演时看到可视化数据的交互大屏。今天我们就来用 python 做一个动态可视化的交互大屏图。

    一、项目背景

    随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大。因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于在校生,还是对于求职者来说,都显得很有必要。

    本文基于这个问题,针对51job招聘网站,爬取了全国范围内大数据、数据分析、数据挖掘、机器学习、人工智能等相关岗位的招聘信息。

    分析比较了不同岗位的薪资、学历要求;分析比较了不同区域、行业对相关人才的需求情况;分析比较了不同岗位的知识、技能要求等。

    二、效果展示

    本次数据分析的特点在于:使用Tableau将数据分析的结果做成 可视化交互大屏,效果如下:

    三、爬取数据

    基于51job招聘网站,我们搜索全国对于“数据”岗位的需求,大概有2000页。

    1. 爬取岗位:大数据、数据分析、机器学习、人工智能等相关岗位。

    2. 爬取字段:公司名、岗位名、工作地址、薪资、发布时间、工作描述、公司类型、员工人数、所属行业。

    我们爬取的字段,既有一级页面的相关信息,还有二级页面的部分信息,大概爬取思路为:先针对某一页数据的一级页面做一个解析,然后再进行二级页面做一个解析,最后再进行翻页操作

    使用工具:Python+requests+lxml+pandas+time+Xpath

    1.导入相关库

    import requests
    import pandas as pd
    from pprint import pprint
    from lxml import etree
    import time
    import warnings
    warnings.filterwarnings("ignore")
    

    2.关于翻页的说明

    # 第一页的特点
    https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,1.html?
    # 第二页的特点
    https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,2.html?
    # 第三页的特点
    https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,3.html?
    

    注意:通过对于页面的观察,可以看出,就一个地方的数字变化了,因此只需要做字符串拼接,然后循环爬取即可。

    3.完整的爬取代码

    import requests
    import pandas as pd
    from pprint import pprint
    from lxml import etree
    import time
    import warnings
    warnings.filterwarnings("ignore")
    
    for i in range(1,1501):
        print("正在爬取第" + str(i) + "页的数据")
        url_pre = "https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,"
        url_end = ".html?"
        url = url_pre + str(i) + url_end
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        }
        web = requests.get(url, headers=headers)
        web.encoding = "gbk"
        dom = etree.HTML(web.text)
        # 1、岗位名称
        job_name = dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@title')
        # 2、公司名称
        company_name = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t2"]/a[@target="_blank"]/@title')
        # 3、工作地点
        address = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t3"]/text()')
        # 4、工资
        salary_mid = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t4"]')
        salary = [i.text for i in salary_mid]
        # 5、发布日期
        release_time = dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t5"]/text()')
        # 6、获取二级网址url
        deep_url = dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@href')
        RandomAll = []
        JobDescribe = []
        CompanyType = []
        CompanySize = []
        Industry = []
        for i in range(len(deep_url)):
            web_test = requests.get(deep_url[i], headers=headers)
            web_test.encoding = "gbk"
            dom_test = etree.HTML(web_test.text)
            # 7、爬取经验、学历信息,先合在一个字段里面,以后再做数据清洗。命名为random_all
            random_all = dom_test.xpath('//div[@class="tHeader tHjob"]//div[@class="cn"]/p[@class="msg ltype"]/text()')
            # 8、岗位描述性息
            job_describe = dom_test.xpath('//div[@class="tBorderTop_box"]//div[@class="bmsg job_msg inbox"]/p/text()')
            # 9、公司类型
            company_type = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[1]/@title')
            # 10、公司规模(人数)
            company_size = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[2]/@title')
            # 11、所属行业(公司)
            industry = dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[3]/@title')
            # 将上述信息保存到各自的列表中
            RandomAll.append(random_all)
            JobDescribe.append(job_describe)
            CompanyType.append(company_type)
            CompanySize.append(company_size)
            Industry.append(industry)
            # 为了反爬,设置睡眠时间
            time.sleep(1)
        # 由于我们需要爬取很多页,为了防止最后一次性保存所有数据出现的错误,因此,我们每获取一夜的数据,就进行一次数据存取。
        df = pd.DataFrame()
        df["岗位名称"] = job_name
        df["公司名称"] = company_name
        df["工作地点"] = address
        df["工资"] = salary
        df["发布日期"] = release_time
        df["经验、学历"] = RandomAll
        df["公司类型"] = CompanyType
        df["公司规模"] = CompanySize
        df["所属行业"] = Industry
        df["岗位描述"] = JobDescribe
        # 这里在写出过程中,有可能会写入失败,为了解决这个问题,我们使用异常处理。
        try:
            df.to_csv("job_info.csv", mode="a+", header=None, index=None, encoding="gbk")
        except:
            print("当页数据写入失败")
        time.sleep(1)
    print("数据爬取完毕,是不是很开心!!!")
    

    这里可以看到,我们爬取了1000多页的数据做最终的分析。因此每爬取一页的数据,做一次数据存储,避免最终一次性存储导致失败。同时根据自己的测试,有一些页数进行数据存储,会导致失败,为了不影响后面代码的执行,我们使用了“try-except”异常处理。

    在一级页面中,我们爬取了“岗位名称”,“公司名称”,“工作地点”,“工资”,“发布日期”,“二级网址的url”这几个字段。

    在二级页面中,我们爬取了“经验、学历信息”,“岗位描述”,“公司类型”,“公司规模”,“所属行业”这几个字段。

    四、数据预处理

    从爬取到的数据中截取部分做了一个展示,可以看出数据很乱。

    杂乱的数据并不利于我们的分析,因此需要根据研究的目标做一个数据预处理,得到我们最终可以用来做可视化展示的数据。

    1.相关库的导入及数据的读取

    df = pd.read_csv(r"G:\8泰迪\python_project\51_job\job_info1.csv",engine="python",header=None)
    # 为数据框指定行索引
    df.index = range(len(df))
    # 为数据框指定列索引
    df.columns = ["岗位名","公司名","工作地点","工资","发布日期","经验与学历","公司类型","公司规模","行业","工作描述"]
    

    2.数据去重

    我们认为一个公司的公司名和和发布的岗位名一致,就看作是重复值。因此,使用drop_duplicates(subset=[])函数,基于“岗位名”和“公司名”做一个重复值的剔除。

    # 去重之前的记录数
    print("去重之前的记录数",df.shape)
    # 记录去重
    df.drop_duplicates(subset=["公司名","岗位名"],inplace=True)
    # 去重之后的记录数
    print("去重之后的记录数",df.shape)
    

    3.岗位名字段的处理

    1)岗位名字段的探索

    df["岗位名"].value_counts()
    df["岗位名"] = df["岗位名"].apply(lambda x:x.lower())
    

    首先我们对每个岗位出现的频次做一个统计,可以看出“岗位名字段”太杂乱,不便于我们做统计分析。接着我们将岗位名中的大写英文字母统一转换为小写字母,也就是说“AI”和“Ai”属于同一个东西。

    2)构造想要分析的目标岗位,做一个数据筛选

    job_info.shape
    target_job = ['算法', '开发', '分析', '工程师', '数据', '运营', '运维']
    index = [df["岗位名"].str.count(i) for i in target_job]
    index = np.array(index).sum(axis=0) > 0
    job_info = df[index]
    job_info.shape
    

    首先我们构造了如上七个目标岗位的关键字眼。然后利用count()函数统计每一条记录中,是否包含这七个关键字眼,如果包含就保留这个字段;不过不包含就删除这个字段,最后查看筛选之后还剩余多少条记录。

    3)目标岗位标准化处理

    由于目标岗位太杂乱,我们需要统一一下

    job_list = ['数据分析', "数据统计","数据专员",'数据挖掘', '算法',
                '大数据','开发工程师', '运营', '软件工程', '前端开发',
                '深度学习', 'ai', '数据库', '数据库', '数据产品',
                '客服', 'java', '.net', 'andrio', '人工智能', 'c++',
                '数据管理',"测试","运维"]
    job_list = np.array(job_list)
    def rename(x=None,job_list=job_list):
        index = [i in x for i in job_list]
        if sum(index) > 0:
            return job_list[index][0]
        else:
            return x
    job_info["岗位名"] = job_info["岗位名"].apply(rename)
    job_info["岗位名"].value_counts()
    # 数据统计、数据专员、数据分析统一归为数据分析
    job_info["岗位名"] = job_info["岗位名"].apply(lambda x:re.sub("数据专员","数据分析",x))
    job_info["岗位名"] = job_info["岗位名"].apply(lambda x:re.sub("数据统计","数据分析",x))
    

    首先我们定义了一个想要替换的目标岗位job_list,将其转换为ndarray数组。然后定义一个函数,如果某条记录包含job_list数组中的某个关键词,那么就将该条记录替换为这个关键词,如果某条记录包含job_list数组中的多个关键词,我们只取第一个关键词替换该条记录。接着使用value_counts()函数统计一下替换后的各岗位的频次。最后,我们将“数据专员”、“数据统计”统一归为“数据分析”。

    4.工资水平字段的处理

    工资水平字段的数据类似于“20-30万/年”、“2.5-3万/月”和“3.5-4.5千/月”这样的格式。我们需要做一个统一的变化,将数据格式转换为“元/月”,然后取出这两个数字,求一个平均值。

    job_info["工资"].str[-1].value_counts()
    job_info["工资"].str[-3].value_counts()
    
    index1 = job_info["工资"].str[-1].isin(["年","月"])
    index2 = job_info["工资"].str[-3].isin(["万","千"])
    job_info = job_info[index1 & index2]
    
    def get_money_max_min(x):
        try:
            if x[-3] == "万":
                z = [float(i)*10000 for i in re.findall("[0-9]+\.?[0-9]*",x)]
            elif x[-3] == "千":
                z = [float(i) * 1000 for i in re.findall("[0-9]+\.?[0-9]*", x)]
            if x[-1] == "年":
                z = [i/12 for i in z]
            return z
        except:
            return x
    
    salary = job_info["工资"].apply(get_money_max_min)
    job_info["最低工资"] = salary.str[0]
    job_info["最高工资"] = salary.str[1]
    job_info["工资水平"] = job_info[["最低工资","最高工资"]].mean(axis=1)
    

    首先我们做了一个数据筛选,针对于每一条记录,如果最后一个字在“年”和“月”中,同时第三个字在“万”和“千”中,那么就保留这条记录,否则就删除。接着定义了一个函数,将格式统一转换为“元/月”。最后将最低工资和最高工资求平均值,得到最终的“工资水平”字段。

    5.工作地点字段的处理

    由于整个数据是关于全国的数据,涉及到的城市也是特别多。我们需要自定义一个常用的目标工作地点字段,对数据做一个统一处理。

    #job_info["工作地点"].value_counts()
    address_list = ['北京', '上海', '广州', '深圳', '杭州', '苏州', '长沙',
                    '武汉', '天津', '成都', '西安', '东莞', '合肥', '佛山',
                    '宁波', '南京', '重庆', '长春', '郑州', '常州', '福州',
                    '沈阳', '济南', '宁波', '厦门', '贵州', '珠海', '青岛',
                    '中山', '大连','昆山',"惠州","哈尔滨","昆明","南昌","无锡"]
    address_list = np.array(address_list)
    
    def rename(x=None,address_list=address_list):
        index = [i in x for i in address_list]
        if sum(index) > 0:
            return address_list[index][0]
        else:
            return x
    job_info["工作地点"] = job_info["工作地点"].apply(rename)
    

    首先我们定义了一个目标工作地点列表,将其转换为ndarray数组。接着定义了一个函数,将原始工作地点记录,替换为目标工作地点中的城市。

    6.公司类型字段的处理

    这个很容易,就不详细说明了。

    job_info.loc[job_info["公司类型"].apply(lambda x:len(x)<6),"公司类型"] = np.nan
    job_info["公司类型"] = job_info["公司类型"].str[2:-2]
    

    7.行业字段的处理

    每个公司的行业字段可能会有多个行业标签,但是我们默认以第一个作为该公司的行业标签。

    # job_info["行业"].value_counts()
    job_info["行业"] = job_info["行业"].apply(lambda x:re.sub(",","/",x))
    job_info.loc[job_info["行业"].apply(lambda x:len(x)<6),"行业"] = np.nan
    job_info["行业"] = job_info["行业"].str[2:-2].str.split("/").str[0]
    

    8.经验与学历字段的处理

    关于这个字段的数据处理,我很是思考了一会儿,不太好叙述,放上代码自己下去体会。

    job_info["学历"] = job_info["经验与学历"].apply(lambda x:re.findall("本科|大专|应届生|在校生|硕士",x))
    def func(x):
        if len(x) == 0:
            return np.nan
        elif len(x) == 1 or len(x) == 2:
            return x[0]
        else:
            return x[2]
    job_info["学历"] = job_info["学历"].apply(func)
    

    9.工作描述字段的处理

    对于每一行记录,我们去除停用词以后,做一个jieba分词。

    with open(r"G:\8泰迪\python_project\51_job\stopword.txt","r") as f:
        stopword = f.read()
    stopword = stopword.split()
    stopword = stopword + ["任职","职位"," "]
    
    job_info["工作描述"] = job_info["工作描述"].str[2:-2].apply(lambda x:x.lower()).apply(lambda x:"".join(x))\
        .apply(jieba.lcut).apply(lambda x:[i for i in x if i not in stopword])
    job_info.loc[job_info["工作描述"].apply(lambda x:len(x) < 6),"工作描述"] = np.nan
    

    10.公司规模字段的处理

    #job_info["公司规模"].value_counts()
    def func(x):
        if x == "['少于50人']":
            return "<50"
        elif x == "['50-150人']":
            return "50-150"
        elif x == "['150-500人']":
            return '150-500'
        elif x == "['500-1000人']":
            return '500-1000'
        elif x == "['1000-5000人']":
            return '1000-5000'
        elif x == "['5000-10000人']":
            return '5000-10000'
        elif x == "['10000人以上']":
            return ">10000"
        else:
            return np.nan
    job_info["公司规模"] = job_info["公司规模"].apply(func)
    

    11.构造新数据

    我们针对最终清洗干净的数据,选取需要分析的字段,做一个数据存储。

    feature = ["公司名","岗位名","工作地点","工资水平","发布日期","学历","公司类型","公司规模","行业","工作描述"]
    final_df = job_info[feature]
    final_df.to_excel(r"G:\8泰迪\python_project\51_job\词云图.xlsx",encoding="gbk",index=None)
    

    五、字段的特殊处理

    由于我们之后需要针对不同的岗位名做不同的词云图处理,并且是在tableau中做可视化展示,因此我们需要按照岗位名分类,求出不同岗位下各关键词的词频统计。

    import numpy as np
    import pandas as pd
    import re
    import jieba
    import warnings
    warnings.filterwarnings("ignore")
    
    df = pd.read_excel(r"G:\8泰迪\python_project\51_job\new_job_info1.xlsx",encoding="gbk")
    df
    
    def get_word_cloud(data=None, job_name=None):
        words = []
        describe = data['工作描述'][data['岗位名'] == job_name].str[1:-1]
        describe.dropna(inplace=True)
        [words.extend(i.split(',')) for i in describe]
        words = pd.Series(words)
        word_fre = words.value_counts()
        return word_fre
    
    zz = ['数据分析', '算法', '大数据','开发工程师', '运营', '软件工程','运维', '数据库','java',"测试"]
    for i in zz:
        word_fre = get_word_cloud(data=df, job_name='{}'.format(i))
        word_fre = word_fre[1:].reset_index()[:100]
        word_fre["岗位名"] = pd.Series("{}".format(i),index=range(len(word_fre)))
        word_fre.to_csv(r"G:\8泰迪\python_project\51_job\词云图\bb.csv", mode='a',index=False, header=None,encoding="gbk")
    

    六、tableau可视化展示

    1. 热门城市的用人需求TOP10

    2. 热门城市的岗位数量TOP10

    3. 不同工作地点岗位数量的气泡图

    4. 热门岗位的薪资待遇

    5. 热门行业的薪资待遇

    6. 可视化大屏的“动态”展示

    这里最终就不做结论分析了,因为结论通过上图,就可以很清晰的看出来。想学习实践的同学可以下载源码自己分析哦!

    源码链接:

    https://pan.baidu.com/s/1ZF_r8FKGeYxalqvz25IQwA 

    提取码:hbix

    作者:黄伟呢 

    来源:凹凸数据

    不同的是,print和pprint是python的内置模块,而 beeprint 需要额外安装。

      延伸阅读  

    Python:

    ☞ 这是我看过的最好的Python零基础Pandas教程(可下载)

    ☞ 我用 pyhton 做了款可开淘宝店赚钱的工具

    ☞ 一个超有意思的 Python 综合能力测试网站

    技能GET:

    ☞ 立刻、马上对你的电脑做这三件事!

    ☞ 专为技术人员打造的搜索引擎,提升n倍搜索效率!

    ☞ 一个聚合全网热点信息的神网站

    展开全文
  • 高分SCI中几乎必备有交互效应分析,通常为文章的三或者五,上一篇文章我们已经讲过怎么使用SPSS做出交互效应分析,今天我们R手把手实战做出下图这篇20分的文章的交互效应。 我们先要看他是怎么分析的,他把...

    高分SCI中几乎必备有交互效应分析表,通常为文章的表三或者表五,上一篇文章我们已经讲过怎么使用SPSS做出交互效应分析,今天我们R手把手实战做出下图这篇20分的文章的交互效应表。
    在这里插入图片描述
    我们先要看他是怎么分析的,他把血小板进行4分组和2分组后,在进行血小板和叶酸的交互作用分析,从各个层面分析了血小板对叶酸的影响,所以别人能发高分不是没有原因的。在模型中,他还使用了调整模型和未调整模型进行比较,支持自己的证据力度。我们还是沿用上次的数据来进行分析
    把数据导入并查看数据
    library(foreign)
    library(survival)
    bc <- read.spss(“E:/r/Breast cancer survival agec.sav”,
    use.value.labels=F, to.data.frame=T)
    bc <- na.omit(bc)
    head(bc)
    在这里插入图片描述
    假如我们研究的是乳腺癌各个pr(孕激素受体状态)和死亡的关系,我们想知道pr(孕激素受体状态)和年龄是否产生交互作用。
    先使用CUT函数进行分割

    age2<-cut(bc$age,breaks=c(0,40,60,100),include.lowest=T,
    labels = c(1,2,3))#把age划分为0-20,20-60,60到100这样3个区间
    dd<-cbind(bc,age2)#把变量加入表格
    

    在这里插入图片描述

    刚才是3分组的,再来一个2分组的

    Age3<-cut(bc$age,breaks=c(0,40, 100),include.lowest=T,
              labels = c(1,2))
    df<-cbind(bc,age2)
    

    在这里插入图片描述

    然后通过函数subset和if函数设定子集,每个分类变量都要设定一个子集
    我们先来做3分类变量的age2,它的3个标签是,1,2,3,简单设置一下
    目前age2是因子变量,我们把它转换成数字的

    n.age2<-as.numeric(as.character(df$age2))
    df<-cbind(df,n.age2)
    

    然后再对它取其中是1的子集

    agec1<-subset(df,df$n.age2<=1) #就是age2中取1的子集
    

    在这里插入图片描述
    得出这个子集后就对他进行分析
    先来个广义线性方程得个回归系数,

    f1<-glm(status ~pr,family = binomial,)
    summary(f1)
    

    在这里插入图片描述
    计算OR和95%CI

    exp(confint(f1))
    exp(coef(f1))
    

    在这里插入图片描述
    由此已经算出年龄0-40岁的亚组的OR,95%CI和P值,同理可以算出其他的组
    现在我们来做2分组的交互效应
    交互效应就不能拿子集了,要用原来的数据

    f2<-glm(status ~pr+age3,family = binomial,data =df)
    summary(f2)
    

    在这里插入图片描述
    求交互效应其实很简单,加入一个a*b就可以了,箭头所示就是交互的P值了

    f3<-glm(status ~pr+age3+pr*age3,family = binomial,data =df)
    

    在这里插入图片描述
    调整模型就是在模型中加入其他变量就可以了,我这里就调整了er,其实做出来用到R的代码并不难,关键是你要思路清晰,明白它是怎么做出来的,
    在这里插入图片描述

    动动小手关注一下吧,更多精彩文章尽在零基础说科研
    在这里插入图片描述

    展开全文
  • Chapter5 交互设计测试与评估 第一章 为什么要开展测试与评估 用户测试:请目标用户使用产品来完成任务,观察并记录用户使用产品的整个过程. 用户测试的定义:也被称为产品可用性测试,指特定的用户在特定的使用...

    如果有需要视频资源的可以关注"AI产品经理人",回复关键字“网易交互设计微专业”获取下载链接~ 

    Chapter5  交互设计测试与评估

    第一章 为什么要开展测试与评估

    用户测试:请目标用户使用产品来完成任务,观察并记录用户使用产品的整个过程.

    用户测试的定义:也被称为产品可用性测试,指特定的用户在特定的使用场景中,为了达到特定的目标而使用某产品时,所感受到的有效性、效率以及满意度。从而找出产品可用性问题,并解决这些问题,目的是为了改善这些产品,让产品更容易使用。

    用户测试的测试目标

    • 有效性--用户能够达成自己的目标;
    • 效    率--用户能以最短路径达成目的;
    • 满意度--用户没有产品不愉快的体验;

    用户测试基本流程:

    1. 设计测试。设计参与者在测试中需要完成的任务;
    2. 招募用户。筛选符合测试要求的目标用户进行测试;
    3. 进行测试。观察并记录参与者完成任务过程中的情况。Tips:以抛出问题为主,少做建议。
    4. 分析报告。列出问题并进行分析,判定问题的严重性及特殊性。

    案例:网易云课堂

    用户测试的意义

    1. 挖掘用户的潜在需求
    2. 发现并解决产品存在的问题
    3. 降低产品周期成本
    4. 增强设计的说服力

    评估形式分类:

    • 评估主体,主要有用户评估和专家评估

    用户评估,就是用户测试,主要靠收集用户使用数据,它相对客观,但时间和费用花费较多,评估范围较宽

    专家评估,是让工程师及设计师等专家基于自身的专业知识和经验进行评估的一种方式。它相对主观,但时间和费用花费少,评估的范围较窄

    • 评估性质,主要有定性评估和定量评估

    定量评估,是指对可以计量的部分进行评价,如点击量、使用率等

    定性评估,是指对非计量性的部分进行评价,如流畅度、舒适性、创造性等

    • 评估过程,主要有理性评估和感性评估

    理性评估,相对客观,从客观角度出来判断客观事物,例如对比的是价格,我们一定会选择便宜的

    感性评估,更为主观,评估结果并没有客观规律

    以上评估方式各有优缺,需要结合起来使用。

    四种常见评估方法

    • 1、原型评估方法

    “在产品研发过程中,对于界面设计以及程序的测试来获得用户的反馈是至关重要的。以用户为中心交互式设计的重要因素之一就是原型方法,原型方法的目的是将界面设计与用户的需求进行匹配。”

    • 快速原型:原型迅速成型,系统从草案中得到完善;
    • 增量原型:需要阶段性的测试;
    • 演化原型 :对前期的原型进行不断地补充;
    • 2、简易测试评估方法(摄像机、实验室、记录员)

    “在条件不允许的情况下,可以采用简易的方法来对用户体验进行评价”

    • 3、眼动评估方法

    眼动追踪可以用来评价用户对产品设计的感性意象,评测产品设计的特性。眼动评估的指标主要有注视热点图(Hotspot)、搜索过程测量指标、兴趣区域(AOI,即用户视觉注意的交点去)

    • 4、脑电评估方法

    通过对脑电信号的分析,研究者可以探索大脑的认知加工过程和受试者的心理状况

    第二章  启发式评估

    1. 什么是启发式评估?

    定义:是专家评估法的一种,也被称为经验性评估。是一种简易的可用性评估方法,使用一套相对简单、通用、有启发性的可用性原则,让几个评审人员根据专业知识和经验来进行评估,发现产品潜在的可用性问题。

    两大要素:

    • (1)评估者

    人数:推荐3~5人,有时也会简化

    岗位:设计师、用户研究员

    身份:最好非设计者本人

    知识:同时具有可用性知识及设计知识更佳

    • (2)评估原则

    Nielsen启发式10原则、Nielsen拓展原则、Nielsen首页可用性指南、iSO9241、八项黄金法则、HHS网页设计与可用性指南

    适用阶段:

    • “评估越早越好”,一般是在交互/视觉设计阶段、测试优化阶段、正式发布阶段进行评估

    特点:

    • 优:成本低;效率高;发现大多数可用性问题;
    • 缺:不能代表真实用户,相对主观;有时发现问题过多;对评估人员知识背景要求较高;

    适用情况:

    • 适合时间、资源有限的情况下快速发现可用性问题,降低风险及成本;
    • 版本变动不大的情况下,小成本检验
    • 作为可用性测试之前的准备

    2. 如何进行启发式评估?

    Step1:评估准备阶段

    • 确定范围:整体vs局部
    • 背景信息:用户、场景、主要任务、竞品
    • 评估参考原则(如尼尔森10原则):根据评审目标和产品特性选择
    • 评委邀约:设计师、用户研究员、非本人
    • 材料准备:评估说明、用户手册、评分表等

    案例:网易云课堂

    TIPS:事先提供一些评估表,比如启发式评估表等。

    Step2:评估执行阶段

    Step3:结果分析阶段

    问题清单一般包括:问题序号、页面名称、问题维度、截图、问题/需求描述、解决方案;

    报告形式:word形式、ppt形式、表格形式(建议);

    第三章  可用性测试

    1. 什么是可用性测试?

    定义:通过观察具有代表性的用户,完成产品的典型任务,从而找出产品可用性问题,并解决这些问题,目的是为了改善产品让产品更容易使用

    适用阶段

    • “测试越早越好”,一般是在交互/视觉设计阶段、测试优化阶段、正式发布阶段进行测试

     

    可用性测试类型:

    • 1)形成式:小样本;发现问题解决问题为主;不能做定量对比(互联网产品常用:快速用户测试)
    • 2)总结式:大样本,30人以上;可以做版本的对比评估和定量评估

    可用性测试解决什么问题?

    可用性测试的特点

    2. 如何进行可用性测试?

    流程:准备阶段--->正式测试--->结果分析--->优化(迭代,很多轮)

    (1) 准备阶段

    • 确定目标
    • 测试方案

    • 测试脚本

    给用户找点事儿做,观察、提问,获得我们想要的信息;

    重点:设计测试任务

    测试任务关注点:

    • 锁定在主要任务上
    • 从用户角度出发
    • 明确起点和终点
    • 任务场景化
    • 招募用户

    招募用户时可以用过滤问卷快速筛选用户.

    招募用户案例: 

     

    • 材料工具
    1. 待测试产品素材(草图、低保真原型、高保真原型);
    2. 常用量表工具 (可用性测试量表、形容词语义量表、概念吸引力测试卡片、卡片分类内容卡片、生活形态价值观量表、彩色竞品示卡、背景信息问卷);
    3. 电子设备、桌椅、纸笔、办公区域、摄像机、录音笔等;
    4. 测试清单:测试流程、测试中用到的设备&材料等,核对清单防止遗漏!
    • 测试场地

    (1)专业实验室:

    (2)普通会议室:观察人数较少时;条件有限时;

    • 预测试

    保证测试顺利进行! 

    (2) 正式测试

    • 正式测试输出物:测试记录、录像录音
    • 测试参与人员:主持人、记录员、产品团队、用户

    • 测试前:暖场、测前访谈、简单试用

    • 测试中:用户执行任务、事后访谈

    测试过程中的观察要点:

    1. 用户是否独立完成了任务;
    2. 是否存在无效操作或者不知所措;
    3. 用户是否不满

     

    • 测试后:道别、准备下一场测试、简单总结发现

    (3)结果分析

     

    结果分析输出物:测试报告

    结果分析步骤:对发现分类、整理不确定项、评定优先级(参考常见标准)、结果记录;

    结果分析工具:贴纸归类、excel表;

    结果分析报告撰写

    1. 总体如何
    2. 有哪些问题?截图
    3. 严重程度如何?优先级的描述和排
    4. 建议是什么?
    5. 除此之外,可以问绕用户核心关注的问题和一些为满足需求做补充分析

    报告样例:

    • ppt形式:

    • excel形式:

    (4) 优化

    • 优化跟踪输出物、优化方案

    问题追踪表

    敏捷测试

    • Q1:可用性测试耗时太久,测试赶不上产品节奏?
    • A1:敏捷测试,边测试边改进;提高测试效率(建立用户库、工具模板、简化流程或报告)

    • Q2:正规测试耗时耗力?
    • A2:简易测试

    第四章 其他评估方法

    (一)问卷调查

    Q:产品上线后,想了解用户对上线后产品的满意度

    适用阶段:产品研发前(挖掘需求)、产品设计(了解用户使用习惯、偏好)、正式发布(用户满意度)

    适用场景:

    适用于做定量分析、匿名调研、对已有假设进行检验、对用户的认知和态度进行评估,不适用于发现和描述具体问题、获取创新的想法、获取精确的行为数据。

    问卷调查步骤:

    • step1:确定调研目的

    • step2:设计调研方案

    常见抽样方法:随机抽样、分层抽样、分群抽样、系统抽样;

    问卷投放量的考虑

    (1)线上问卷,一般相聚工时估计满足统计需求需要回收的量。置信区间,抽样误差,总体大小,需要交叉的变量几个因素影响;

    (2)工具各个渠道投放回收率情况,计算所需投放量或投放天数;

    投放方式选择

    问卷投放渠道 

    • step3:问卷设计

     

    • step4:问卷测试

    (1)多找几个人一起试填,检查题项表述用户是否理解,是否有歧义,逻辑是否通;

    (2)检查问卷跳转是否正常,在不同浏览器中能否正常显示;

    (3)数据回收是否正常,避免回收出现问题;

    • step5:问卷投放

    投放方式选择:

    问卷投放渠道 

    问卷回收效果跟踪

    • step6:数据分析

     案例:

     

     

    (二)产品数据分析

    1.数据分析概述

    定义:通过在网站或应用中进行数据埋点,进而获取用户对产品的使用和行为数据,并进行基于产品体验优化的数据统计分析;

    评估方法:

    适用时间:

    web端数据来源

    • 服务器日志文件记录

    • javascript页面标记

    移动端数据来源:

    常用数据监控平台:

    • 第三方网站监测分析工具​
    • 自己的数据分析平台

    数据分析流程:监控-定义-埋点-测量(获取数据)-分析-优化-监控

    2. 基础分析指标

    • web页面常用基础指标:PV、UV、UPV、访问

    识别用户的方式:IP、IP+User Agent、Cookie、User ID、设备ID、其他

    • 复合指标:跳出率(来了就走)、退出率、访问时长、访问深度、转化率

    3. 常见分析内容
    4. 常见分析思路

    展开全文
  • 外行人对交互设计的第一印象是什么?画线框图的?草稿的?的确,大家所看到交互设计师的日常工作成果都是一些线框图,从表面上理解的确是这样。...信息的分类、布局将影响用户与信息的交互。用户获取信
  • 产品读书《交互设计沉思录》

    千次阅读 2019-04-23 14:12:22
    交互设计是人与产品、系统、服务之间创建的一系列对话。对话随着第四维度(时间)而推进,因此要针对对话进行设计,就要理解自然对话的易变性和流动性。同时,可用性并不是衡量交互设计的唯一重要指标,其内核更应是...
  • 导语:从现在开始的相当长一段时间里,手部交互依然是最成熟的控制类人机交互方式,并且体验也远远没到完美,值得投入完善。 我们与现实世界进行交互的主要方式是手,我们与VR世界的交互同样如此...
  • UML—交互

    千次阅读 热门讨论 2014-02-27 10:02:24
    一、交互图: 交互图用来描述协作的动态行为方面,表达系统中的对象是如何进行相互作用的,即一组对象是如何进行消息传递的。 当对交互建模时,通常既包括对象(每个对象都扮演某一特定的角色),又包括消息(每个...
  • 答案只有一个 浅谈问答式交互问题 交互式问题的分类 ? 分类依据库函数和选手程序的关系 ? 博弈式交互 ? 问答式交互 博弈式交互 问答式交互 问答式交互的逻辑模型 最后 的答 案 发现之旅 我们的目标 ? 把题目对拿到...
  • 2,既然这种方式可以做分类交互和属性绑定,和3dtiles中默认的对象交互有什么区别,我们该怎么选择? 回答:分类交互以及属性更贴近实际业务。 我们在数据,尤其是max场景的时候,更多的是考虑的数据的美观性,...
  • 语音交互的三驾马车:ASR、NLP、TTS

    千次阅读 2019-07-24 08:49:30
    语音交互是AI最重要的领域之一,也是目前落地产品比较成熟的领域,比如说智能客服、智能音箱、聊天机器人等,都已经有成熟的产品了。语音交互主要由哪些部分组成?各自主要处理什么任务?目前都遇到什么困难?本文将...
  • ,以上分类,反映了数据库不同字段的读写频度,可以实现读写分离,很明显1与应用程序交互的频率最为频繁,特别是某些操作会锁。这样的隔离,使得对数据库访问得到一定程度的优化。 (2) 对于 为Memcached带来清晰...
  • 游戏交互设计入门

    千次阅读 2015-04-11 00:36:46
    5、 细化各类UI元素,将各类的细化元素切分保存,并利用UI编辑器对分类素材进行拼接; 6、 部分公司网站页面以及各类网络广告的设计。 职位要求: 1、 精通Photoshop、Flash、Dreamweaver、CorelDraw等设计软件,熟悉...
  • 什么是多模态交互

    千次阅读 2021-02-21 09:16:57
    什么是多模态交互? “模态”(Modality)是德国理学家赫尔姆霍茨提出的一种生物学概念,即生物凭借感知器官与经验来接收信息的通道,如人类有视觉、听觉、触觉、味觉和嗅觉模态。多模态是指将多种感官进行融合,而...
  • 第六章 人机交互界面表示模型与实现 1.表示模型(第二版课本P99)  使用人机交互界面的表示模型和形式化的设计语言来分析和表达用户界面的功能以及用户和系统之间的交互情况,并且界面表示模型能方便映射到实际的...
  • 如果有需要视频资源的可以关注"AI产品经理人",回复关键字“网易交互设计微专业”获取下载链接~ Chapter3 规范信息架构与流程设计 ...让用户一眼就明白你的产品能什么,大概怎么用。(如:底部导...
  • JavaScript人机交互

    千次阅读 多人点赞 2018-11-25 18:35:21
    3. 函数里面要一些事情:(通常会去操作元素,提供交互) 1. 开启定时器: 执行切换图片的函数 changeImg() 4. changeImg() 1. 获得要切换图片的那个元素 1. 完成页面定时弹出广告 1.1 需求分析 ​ 一般网页...
  • DHCP 协议及其交互过程

    千次阅读 2019-05-25 15:52:23
    一般情况下,我们的家用、公司、公共场合使用的路由器都具有DHCP服务功能,当我们的手机或者电脑需要联网时会和DHCP服务器进行自动交互,之后服务器会给我们的终端分配一个IP地址,同时我们的终端也会保留服务器的...
  • HTML制作简单交互网页

    千次阅读 2020-04-14 17:48:54
    今天我们要的事一个简单的交互式网页,主要用的是设置百分比宽度以及媒体查询器。先看一下效果:
  • 本文通过交互概述图进一步说明交互的使用场景。
  • 人机交互界面设计

    万次阅读 2019-09-10 18:16:07
    《人机交互界面设计》期末考试 一、题型: (一)简答题 (二)论述题 (三)设计题 二、考点 : 1.什么是人机交互技术? 人机交互技术(Human-Computer Interaction Techniques)是指通过计算机输入、输出...
  • 如果有需要视频资源的可以关注"AI产品经理人",回复关键字“网易交互设计微专业”获取下载链接~ Chapter2 设计需求分析与方案选择 第一章 设计方案不能让人满意的原因 设计方案不能让人满意的原因 业务需求=...
  • 交互作用我们在前面已经说过,就不具体说了。在SCI论文中可以起到画龙点睛,并能进一步挖掘数据之间的亚组关系,进行数据挖掘也非常实用,交互项的可视化能把交互数据之间的关系明白的展示出来,在实际论文中绝对是...
  • 交互设计师到底是干嘛的

    千次阅读 2017-09-15 22:53:28
    面向对交互比较陌生的团队进行分享,少不得再介绍下那些让人云里雾里的术语。这次,咱们为这些术语一个关系图:   从下至上是各种术语的演变史。中间代表“的事情”,左边代表这件事情的“人”,右边代表这...
  • 人机交互专题报告

    万次阅读 2015-12-14 16:15:34
    分类: 寻找牛股 人机交互专题报告 2013年9月7日 来源:齐鲁证券 http://blog.sina.com.cn/s/blog_a816de580101eoaj.html   投资要点  人机交互变革将是继个人计算
  • 表情识别(二)--基于CNN分类

    万次阅读 多人点赞 2018-04-25 11:18:23
    说白了,就是个分类任务,但是纯粹的CNN分类,只是对传统方式的提升,本质思路没有改变,效果也不是很明显。 转自:https://blog.csdn.net/walilk/article/details/58709611 前言  [机器学习] 实验笔记系列是以...
  • 一直在用visio做交互原型和画pageflow,朋友推荐用Axure RP 4,试用了一下果然不错,特别在网上找到教程转帖给需要朋友。(作者:Hawking原创) yixieshi 先提供Axure RP pro 4.6版本的下载 http://www.jojo
  • web交互设计模型

    千次阅读 2011-05-16 10:51:00
    《信息架构中的常见模型》是整个“web交互设计方法”中的一部分: <br />本期的内容目的是分享和总结信息架构中一部分基本的交互模型。信息架构需要考虑内容和功能的建构,首先需要考虑怎样组织内容和功能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,771
精华内容 61,508
热门标签
关键字:

交互分类表怎么做