精华内容
下载资源
问答
  • These models are used in predictive data analytics applications including price prediction, risk assessment, predicting customer behavior, and document classification. This introductory textbook ...
  • 解决System.Data.SQLite兼容32位和64位问题,包含vc++运行时环境 将当前说明文档的目录下的x64、x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用)。 如果是WEB网站,则复制到Bin...
  • Spring Data实战

    千次下载 热门讨论 2014-11-13 10:57:51
    《Spring Data实战》介绍了Spring Data、Repository、Querydsl的基础理念,然后阐述了借助Spring Data如何简化NoSQL和大数据的访问,并且涵盖了使用Spring Roo和Spring Data REST导出功能如何实现应用的快速开发,除...
  • 各版本Mysql.Data.dll官方整理下载

    热门讨论 2016-03-09 11:23:46
    各版本Mysql.Data.dll官方整理,从版本1.0到版本6.9.8,包含各版本帮助文档和Samples,方便开发。
  • System.Data.SQLite(32、64通用版本)

    千次下载 热门讨论 2015-10-26 13:47:30
    System.Data.SQLite(32、64通用版本) 该资源转载自:http://download.csdn.net/detail/yhbcpg/7924311
  • TensorFlow MNIST数据集下载脚本input_data.py

    千次下载 热门讨论 2016-05-28 15:08:57
    TensorFlow的官方文档里面,关于MNIST这个例子下载数据用的文件。 原始文件url打不开,提供一个从其他渠道找到的资源供大家使用~
  • GetData2.20[破解汉化版]数据提取软件+GetData教程

    千次下载 热门讨论 2014-07-14 15:37:26
    最好用的数据提取软件,永久破解免费版,新增各种实用功能。另附专业教程,清晰易懂,作图必备!
  • [大数据] Doing Data Science (英文版)

    千次下载 热门讨论 2013-11-10 08:30:34
    Now that people are aware that data can make the difference in an election or a business model, data science as an occupation is gaining ground. But how can you get started working in a wide-ranging, ...
  • Explore concepts such as programming, data mining, data analysis, data visualization, and machine learning using Python Get up to speed on machine learning algorithms with the help of easy-to-follow, ...
  • 万能U盘驱动 出现要安装datatraveler 2.0的驱动

    千次下载 热门讨论 2014-04-15 09:23:04
    插入U盘时,出现要安装datatraveler 2.0,主要是主机的USB接口是1.1,而你的USB是2.0,现在基本上USB都为2.0的,根据提示进行安装,安装时搜索将本资源解压后的目录即可使用USB,或者设置更新驱动,然后进行搜索
  • System.Data.SQLite.dll

    千次下载 热门讨论 2013-05-30 06:22:56
    All the "bundle" packages contain the "System.Data.SQLite.dll" mixed-mode assembly. http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
  • Data.Science.from.Scratch.First.Principles.with.Python

    千次下载 热门讨论 2015-07-07 10:58:10
    Data science libraries, frameworks, modules, and toolkits are great for doing data science, but they’re also a good way to dive into the discipline without actually understanding data science....
  • Spring Data Commons主要梳理

    千次阅读 2018-12-10 14:05:25
    这篇文章是在看Spring Data Commons文档的时候梳理的内容,都是与Spring Data相关的,里面可能会涉及到Spring Data JPA的内容,但更多的是Commons的内容,Spring Data JPA只是一个具体的实现而已。 1. Spring Data ...

    这篇文章是在看Spring Data Commons文档的时候梳理的内容,都是与Spring Data相关的,里面可能会涉及到Spring Data JPA的内容,但更多的是Commons的内容,Spring Data JPA只是一个具体的实现而已。

    1. Spring Data 模块关系

    Spring Data家族有多个模块:

    • Spring Data JPA
    • Spring Data Mongo

    但所有的模块都基于Spring Data Commoms模块进行扩展。例如Spring Data JPA是针对JPA做扩展的一个子模块;Spring Data Mongo是针对MongoDB的子模块,但是共同的接口都是Spring Data。
    可以说Spring Data Commons是其所有子模块的抽象,定义了一系列的操作标准及接口。

    2. 独立使用Spring Data

    Spring Data提供了RepositoryFactory,可以独立于Spring容器之外使用:

    RepositoryFactorySupport factory =// Instantiate factory here
    UserRepository repository = factory.getRepository(UserRepository.class);
    

    3. Repository - dao - 存储仓库

    Spring Data中,都是基于存储仓库Repository对实体类对象进行CRUD操作的。
    其中,最核心的是Repository接口,在org.springframework.data.repository包中定义。
    Repository接口需要指定操作的实体类的类型实体类ID的类型。在该接口中,是没有任何方法的,只是用于标记让Spring Data知道。
    通常我们会使用CurdRepository这个接口,当然,这个接口也是不包含JPA特性的,我们需要使用JPA特性的话,一般用的是JpaRepository接口。
    下面给出Spring Data JPA中,JpaRepository的继承结构:
    1.jpg

    4. 使用指定Spring Data模块

    上面一开始说了Spring Data有很多个不同的子模块,每个子模块对应一种数据存储方式或数据源,统称Spring Data *吧。
    要让Spring Data在运行的时候知道我们使用哪个模块,就要进行指定,指定模块的方法有两种:

    • 存储库使用Spring Data模块特定的接口指定类型
    • 实体类使用Spring Data模块模块特定的注解指定类型

    如果都不指定,在单模块的情形下是不存在问题的,但是如果项目中引入了不同的Spring Data模块,那么Spring Data在实际运行中就无法确定到底需要使用哪个模块。

    5. 查询方法的拆分

    Spring Data以方法中的结构为findBy...deleteBy...,其结构都是动词加上ByBy是整个语句拆分的关键点。通常By后面跟着的是查询的参数列表,通过AndOr来连接。
    By后面的参数中,首先将整个内容作为一个属性,如果找不到,然后再参数中以大写字母为分割,直到找到对应的参数为止。

    6. 分页查询、排序查询、限制查询、流式结果查询

    6.1 排序查询

    Spring Data接受使用Sort类型参数来进行排序查询的工作,Sort主要有两个参数构成:

    • 排序方向:ASC(升序)、DESC(降序)
    • 排序字段

    6.2 分页查询参数

    PageableSpring Data提供出来进行分页查询参数输入的接口,里面主要定义多个与页面设定的方法:
    6.2.jpg

    实现有很多,最常用的是PageRequest
    6.2-2.jpg

    PageRequest废弃了原本的new方式来构建分页参数,建议使用类中提供的of(...)静态方法来创建相关的分页参数实体。
    of(...)分页查询中允许带上排序字段以及排序方向两个参数,在源码中,这两个共同构建成了Sort实体。这是很多业务中需要使用上的,首先需要讲内容进行排序,然后再分页列出。
    分页查询中,next()previous()返回的分别是下一页上一页的分页参数实体,

    6.3 分页查询结果(返回值)

    除了支持常用的集合ListSet等查询结果集作为分页查询结果,Spring Data还有以下几种结果:

    • Page<T>
    • Slice<T>
    • List<T>
    • Set<T>

    6.4 limit查询

    Mysql中,我们需要获得前N个结果,使用limit关键字。
    Spring Data中可以使用:

    • top
    • first

    来进行限定最终的结果数,在topfirst关键字后面可以加上数字表示最大结果大小,默认值为1

    • User findFirstByUsername(String username)
    • List<Article> findFirst10Bytitle(String title)

    当然,这个是支持使用PageableSort的。

    6.5 流式查询结果

    Spring Data支持使用Stram<T>流式API使用。

    @Query("select u from User u")
    Stream<User> findAllByCustomQueryAndStream();
    
    Stream<User> readAllByFirstnameNotNull();
    
    @Query("select u from User u")
    Stream<User> streamAllPaged(Pageable pageable);
    

    一般在try-with-resources中使用:

    try (Stream<User> stream = repository.findAllByCustomQueryAndStream()) {
      stream.forEach();
    }
    

    7. 自定义实现dao存储库

    7.1 自定义存储库片段

    都知道当使用Spring Data之后,大部分的CRUD操作我们都不需要去实现。但是当某些情况下,例如有些查询方法需要不同的行为或者无法通过Spring查询实现时,我们确实是要自己手动实现查询方法的。这种做法叫Repository fragments,存储库片段。

    步骤如下:

    1. 做出一个自己的接口:
    interface CustomizedUserRepository {
      void someCustomMethod(User user);
    }
    
    1. 实现接口,就是很普通的接口实现
    class CustomizedUserRepositoryImpl implements CustomizedUserRepository {
    
      public void someCustomMethod(User user) {
        // Your custom implementation
      }
    }
    

    注:

    1. 上面的实现中,一定要以Impl为结尾
    2. 接口的实现可以作为一个普通的Bean存在
    1. *Repository存储库扩展(继承)这个接口:
    interface UserRepository extends CrudRepository<User, Long>, CustomizedUserRepository {
    
      // Declare query methods here
    }
    

    注:
    当有两个片段提供相同的方法和签名,那么将按照继承顺序覆盖。
    但是别忘了,每个片段的实现

    上面这种做法可以组合Spring Data提供的CURD以及自定义实现的接口。相对自由,但是也相对复杂。

    注:
    而且对于领域设计的角度来说,能不把业务放到dao层就千万不要这么做!!

    7.2 使用命名空间来配置自定义存储库片段Bean

    XMLJava Config中的配置base-packageSpring Data的基础架构会在启动的时候到配置的路径下去扫描对应的存储库包,找到实现并配置为Bean
    因此,在上面说了实现片段需要后缀为Impl
    如果不是,可以通过repository-impl-postfix来配置对应的后缀,如:

    <repositories base-package="com.acme.repository" repository-impl-postfix="MyPostfix" />
    

    如果是使用Java Config:

    @EnableJpaRepositories(basePackages = "cn.marer", repositoryImplementationPostfix = "DAO")
    public class ....
    

    后缀是可以配置多个的,不同的后缀就扫描不同的结果。

    7.3 自定义BaseRepository - 基类

    在Spring Data出现之前我们会使用BaseDao来实现一些基本的数据库的操作,现在也可以这样做:

    class MyRepositoryImpl<T, ID extends Serializable>
      extends SimpleJpaRepository<T, ID> {
    
      private final EntityManager entityManager;
    
      MyRepositoryImpl(JpaEntityInformation entityInformation,
                              EntityManager entityManager) {
        super(entityInformation, entityManager);
    
        // Keep the EntityManager around to used from the newly introduced methods.
        this.entityManager = entityManager;
      }
    
      @Transactional
      public <S extends T> S save(S entity) {
        // implementation goes here
      }
    }
    

    注:

    1. 该类需要具有特定于商店的存储库工厂实现所使用的超类的构造函数。
    2. 如果存储库基类具有多个构造函数,则覆盖使用EntityInformation加号存储特定基础结构对象(例如,EntityManager模板类)的构造函数。

    然后还需要在Java Config中指定存储库基类:

    @Configuration
    @EnableJpaRepositories(repositoryBaseClass = MyRepositoryImpl.class)
    class ApplicationConfiguration {}
    

    这个就类似于为基类配置一个Bean。

    8. 发布事件

    直接官方机翻:
    由存储库管理的实体是聚合根。在域驱动设计应用程序中,这些聚合根通常会发布域事件。Spring Data提供了一个注释@DomainEvents,可以在聚合根的方法上使用,以使该发布尽可能简单,如以下示例所示:

    class AnAggregateRoot {
    
        @DomainEvents 
        Collection<Object> domainEvents() {
            // … return events you want to get published here
        }
    
        @AfterDomainEventPublication 
        void callbackMethod() {
           // … potentially clean up domain events list
        }
    }
    

    使用的方法@DomainEvents可以返回单个事件实例或事件集合。它不能使用任何参数。
    在所有事件发布后,我们有一个注释的方法@AfterDomainEventPublication。它可用于潜在地清除要发布的事件列表(以及其他用途)。

    9. Spring Data对Spring MVC支持

    9.1 打开Spring data对web的支持

    Spring Data提供了对web的友好支持,特别是下面将说到的领域类型(可以先看作实体类)转换的支持以及分页、排序的支持,要打开支持,有两种方式:

    • Java Config
    • XML

    还是比较推荐使用Java Config的方式,毕竟Spring Boot大多数都是注解形式嘛:

    @EnableSpringDataWebSupport
    piublic class WebConfiguration {
        ...
    }
    

    XML开启:

    <bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />
    

    按照官方文档,如果打开了这个支持,Spring会自动配置了下面三个Bean:

    • DomainClassConverter - 允许在不用通过存储库手动查找的情况下,直接在SpringMVC的控制器方法的签名(参数)中直接使用领域对象

    • PageableHandlerMethodArgumentResolver - 允许通过请求参数Pageable对象注入到controller方法参数 Pageable

    • SortHandlerMethodArgumentResolver - 允许通过请求参数Sort对象注入到controller方法参数 Sort

    9.2 DomainClassConverter - 领域类型转换器支持

    DomainClassConverter可以在不用通过存储库手动查找的情况下,直接在SpringMVC的控制器方法的签名(参数)中直接使用领域对象。
    需要按照上面的两种方式其中一个打开对web的支持。

    现在假定有User这个领域对象和UserRepository这个存储库,那么可以直接使用:

    @RestController
    public class UserController {
        @PostMapping("/user/info/{id}")
        public User getUserInfo(@PathVariable("id") User user) {
            logger.info("Get user info By Spring data web support");
            return user;
        }
    }
    

    上面方法中,并没有通过UserRepository存储库对象来获取相对应的用户数据。
    SpringMVC将提交上来的参数{id}通过@PathVariable获得ID,然后调用findById(...)查找出对应的实体并注入到方法参数中。所以可以直接通过返回User参数,算是偷懒方式。

    注意:

    1. 领域类型对应的存储库最起码是要实现CurdRepository才可以实现这个功能,
    2. 如果找不到数据,会返回500 Internal Server Error,需要对数据做校验或者做异常处理。

    9.3 HandlerMethodArgumentResolvers - 分页、排序的支持

    在上面说了,需要让Spring Data支持分页或排序功能,就需要在存储库Repository接口方法中传入PageableSort对象,Pageable分页的对象里面也包含了Sort排序。Spring Data会自动解析并对分页、排序进行limitorder by查询。
    而Spring Data也对web提供了分页、排序的支持,让我们可以在访问http提交请求参数的时候直接将pageablesort参数注入到controller的方法参数。
    主要是配置了@EnableSpringDataWebSupport后,Spring Data会生成PageableHandlerMethodArgumentResolverSortHandlerMethodArgumentResolver两个Bean实例。在我们的Controller的方法中加入参数即可:

    @RestController
    public class UserController {
        @GetMapping("/user/info/all/page")
        public List<User> getAllUserPage(Pageable pageable){
            logger.info(try to find user with pageable.);
            return userRepository.findAll(pageable).getContent();
        }
    }
    

    在上面的例子中,要做的是:分页显示用户。使用了Pageable作为例子,因为我们知道Pageable里面包含了Sort,因此Sort的例子在这里就不再叙述了。
    上面的例子里面,提交的参数为:

    • page - 第几页,默认为0
    • size - 页面数据数量,默认为20
    • sort - 排序方向,默认为升序ASC

    假设:查询第一页的用户并根据用户名降序排序,页面大小为15。则请求API如下:

    /user/info/all/page?page=0&size=15&sort=username,DESC

    注意:
    上面这个例子是GET请求方法的,如果是POST请求方法,请把请求参数放到请求体里面

    更多关于Spring Data对Web支持请移步到:
    https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/#core.web


    此文同时在简书发布:https://www.jianshu.com/p/cb5a3ab2727e
    此文同时在CSDN发布:https://blog.csdn.net/nthack5730/article/details/84939027
    转载要加原文链接!谢谢支持!


    展开全文
  • Raw data

    千次阅读 2020-07-04 13:12:35
    一、什么是Raw data 二、处理Raw data 三、Raw data的用途 四、哪种图像质量设置更好,RAW还是RAW& jpeg ? 五、处理和润色的区别是什么? 一、什么是Raw data 数码相机通常对图像传感器的输出信号进行数字...

    目录

     

    一、什么是Raw data

    二、处理Raw data

    三、Raw data的用途

    四、哪种图像质量设置更好,RAW还是RAW& jpeg ?

    五、处理和润色的区别是什么?


    一、什么是Raw data

    数码相机通常对图像传感器的输出信号进行数字处理,并创建JPEG图像。同时RAW是一种处理参数可以由摄影者自由调整的数据格式。

    *索尼相机拍摄的Raw data以扩展名“ARW”保存。

    二、处理Raw data

    在相机的图像传感器上,每个像素只有一种颜色的数据,即红色(R),绿色(G)或蓝色(B),并且RAW数据以这种状态保存。 为了使RAW数据可见,必须补偿此颜色信息,以使每个像素都具有三种原色。仅在执行此色彩补偿后,才能将RAW数据称为“图像”。

    当您拍摄JPEG照片时,此补偿在相机中执行,而在RAW情况下,则需要由计算机执行。 这不仅包括对红色,绿色和蓝色三种原色的补偿,还包括对亮度和颜色的调整,使主体看起来对人眼自然。使RAW数据可见并包括将其另存为JPEG之类的文件称为“处理”或“显影”,就像卤化银照相中的胶片显影一样。
    如上所述,由于未处理RAW数据,因此在完成处理之前无法打印。

    三、Raw data的用途

    “ RAW数据始终可以为您提供高质量的照片”。 这种理解并不总是正确的。 有时,取决于处理方式,最终结果可能会比相机中自动处理的JPEG照片差。使用数码相机的自动功能时,无论何时何地拍摄或使用哪种光源,大多数时候您都将获得具有自然亮度和色彩的照片。 但是,有时您会收到不想要的结果,或者您可能有意获得看起来不自然的照片。

    当您对相机中处理的JPEG图像的亮度或颜色设置不满意时,或者想要有意更改它们时,如果调整JPEG图像,则图像质量可能会下降。 这是因为与RAW数据相比,JPEG图像的数据(色调再现特性)要少得多,对其进行极端的调整将导致亮度和色彩的平滑渐变失去(色调再现特性的劣化)。 另一方面,RAW数据可让您在调整图像时将图像质量降到最低。

    如果不使用RAW,摄影师在拍摄多张照片时必须调整几种设置以获得最佳照片。 但是,如果您以RAW格式拍摄照片,稍后可以在家里使用计算机执行相同的步骤。 请注意,这并不意味着这些调整是无止境的。 因此,最好了解调整RAW图像以最大程度降低图像质量的可能性。

    因此,Raw data的最大好处是可以在以后的计算机上进行处理和调整,否则会在拍照的同时进行。

    四、哪种图像质量设置更好,RAW还是RAW& jpeg ?

    建议使用RAW和JPEG。 我们还建议使用更大容量的存储卡。
    RAW数据对于使用不同于JPEG的设置进行处理非常有用,JPEG是由相机自动调整的。 因此,如果您可以从JPEG图像中收到理想的结果,则不必使用RAW格式。 但是无法知道您对即将拍摄的照片结果是否满意。

    因此,我们建议您使用RAW和JPEG设置拍摄照片。 如果您对JPEG照片的结果感到满意,则无需调整它们。 如果需要调整,请选择相应的RAW文件并进行处理。

    五、处理和润色的区别是什么?

    处理意味着补偿RAW数据的三种原色,包括亮度或颜色的调整。 对整个图像执行该处理。另一方面,对处理后的图像进行润饰。 它不仅涉及整个图像的亮度或色彩调整,而且还涉及部分细节补偿,包括删除不必要的物品或添加虚构物品。 由于对处理后的数据较少的图像进行润色,因此过度调整会导致图像质量下降。
    有时将调整RAW数据的亮度或颜色称为“润色”,但是,在此站点中,我们不包括对RAW数据的调整。

     

     

     

     

    展开全文
  • 文章目录R语言数据处理——基础篇 data.frame基本操作data.frame的创建数据访问、条件筛选与删除数据访问数据筛选删除常见问题read_csv()与read_csv2()的区别 R语言数据处理——基础篇 data.frame基本操作 打算用两...

    R语言数据处理——基础篇 data.frame基本操作

    打算用两篇博客来记录下平时使用R语言进行数据处理、绘图遇见的一些问题。第一篇首先介绍下使用data.frame处理数据的常用操作,第二篇总结下使用ggplot2绘图时常用的一些操作。每篇博客在基础介绍完后总结下自己遇到过的问题,不定时补充。

    data.frame的创建

    可以从文件和构造函数创建data.frame。

    • 可以使用以下几个函数从csv、excel文件创建data.frame。
    函数名包含库
    read.csv-
    read.csv2-
    read_excelreadxl
    read_xlsreadxl
    read_xlsxreadxl
    read.csv(file, header = TRUE, sep = ",", quote = "\"", 
    	dec = ".", fill = TRUE, comment.char = "", ...)
    
    read.csv2(file, header = TRUE, sep = ";", quote = "\"", 
        dec = ",", fill = TRUE, comment.char = "", ...)  
    

    主要参数包括
    file:文件路径。注意使用相对路径时,是相对工作目录,工作目录绝对路径使用getwd()查看,以及使用setwd()设置。
    header:是否将文件第一行当作行名,默认为TRUE。选FALSE时依然会读取第一行,只不过会自动生成默认行名,使用rowname()<-更改即可。
    sep:csv文件的分隔符,默认为",",常见的分隔符包括","、" “、”;"。
    quote:字符的表示方式,默认用" “包围引号。
    dec:小数点的表示方式,默认为”.";
    fill:当各列变量数不一样时是否填补,默认为TRUE。注意补充的类型与读取文件后,程序判定的列变量类型有关,如果列变量是数字会用NA,如果是字符则会用"",不会用NULL填补也不能用is.null()检查。
    comment.char:指定读取文件中的注释字符,注释字符及其后不会被读取。

    library(readxl)
    
    read_excel(path, sheet = NULL, range = NULL, col_names = TRUE, 
        col_types = NULL, na = "", trim_ws = TRUE, skip = 0, 
        n_max = Inf, guess_max = min(1000, n_max), progress = readxl_progress(), 
        .name_repair = "unique") 
    
    read_xls(path, sheet = NULL, range = NULL, col_names = TRUE, 
        col_types = NULL, na = "", trim_ws = TRUE, skip = 0, 
        n_max = Inf, guess_max = min(1000, n_max), progress = readxl_progress(), 
        .name_repair = "unique") 
    
    read_xlsx(path, sheet = NULL, range = NULL, col_names = TRUE, 
        col_types = NULL, na = "", trim_ws = TRUE, skip = 0, 
        n_max = Inf, guess_max = min(1000, n_max), progress = readxl_progress(), 
        .name_repair = "unique") 
    

    这里给个自己R读取excel所有工作表的写法,

    file = 'data.xlsx'
    sheets <- excel_sheets(file)
    data <- data.frame()
    i <- 1
    for (time in sheets) {
      data_once <- read_xlsx(file, 
                             sheet=time,
                             col_names=F,
                             # range = ,根据数据需要和效率确定读取范围
                             # 参数值见cell-specification: Specify cells for reading
                             )
      data.once$x <- seq(1, length(rownames(data_once))
      data = rbind(data, data.once)
      
      print(i)
      i = i + 1
    }
    
    • 常用的data.frame构造与辅助函数
      可以使用几个相同长度的向量构造data.frame。
    time <- 1:3
    value1 <- c(1, 2, 2)
    value2 <- c(2, 0, 2)
    
    data <- data.frame(time, value1, value2)
    

    创建的data.frame data为

    	 time	value1	value2
    1		1		 1		 2
    2		2		 2		 0
    3		3		 2		 2
    

    当需要创建具有一定规则的向量时,除了使用循环还可以使用以下几个辅助函数:
    使用:创建连续数字的序列,

    vector.1 <- 1:5
    # 1 2 3 4 5
    

    当然也可以使用小数,但是创建的序列步长为1。

    vector.2 <- 0.1 2.2
    # 0.1 1.1 2.1
    

    更改步长可以用seq(from, to, step)

    vector.3 <- seq(0.1, 2.2, 0.5)
    # 0.1 0.6 1.1 1.6 2.1
    

    有时候可能需要创建按规则重复的向量,使用rep(vector, repeat_times)

    vector.4 <- rep(1:3, 2)
    # 1 2 3 1 2 3
    

    从辅助函数得到的临时变量创建data.frame时就可以指定列名,不用创建后再更改

    data.frame("serial" = 1:4, "value" = rep(c(1, 0), 2))
    #   serial value
    # 1      1     1
    # 2      2     0
    # 3      3     1
    # 4      4     0
    

    数据访问、条件筛选与删除

    以前述data为例。

    > data
    	 time	value1	value2
    1		1		 1		 2
    2		2		 2		 0
    3		3		 2		 2
    

    数据访问

    访问行、列、指定行列数据都可以从索引或行名、列名访问

    # 从索引访问第2行
    data[2,]
    #   time value1 value2
    # 2    2      2      0
    
    # 从列名访问列
    data$value1
    # 1 2 2
    
    # 从行名访问行
    data["3", ]
    #   time value1 value2
    # 3    3      2      2
    
    # 访问指定的其他行列
    # 只能通过索引操作,不能从行名、列名操作,行名、列名都是字符类型,不支持-操作符,如data[-"2",]、data[,-"value1"]
    data[-2,]
    #   time value1 value2
    # 1    1      1      2
    # 3    3      2      2
    

    获取行名、列名

    rownames(data)
    # "1" "2" "3"
    colnames(data)
    # "time"   "value1" "value2"
    
    # 通过赋值可以对行名、列名进行更改
    

    数据筛选

    常用的筛选包括:

    • 逻辑运算符<>!===
    • 多个条件,|&。注意别写成||&&
    • 包含在指定向量的子向量%in%

    data.2为例。

    data.2 <- data.frame("time" = rep(1:3, 2),
    	"value" = c(data$value1, data$value2),
    	"type" = gl(2, 3, labels = c("value1", "value2")))
    
    > data.2
      time value   type
    1    1     1 value1
    2    2     2 value1
    3    3     2 value1
    4    1     2 value2
    5    2     0 value2
    6    3     2 value2
    

    筛选value = 0的数据。需要注意筛选操作获得的是基于行或列的一系列布尔值,别忘了","。

    data.2[data.2$value == 0, ] # 注意别忘了","
    #   time value   type
    # 5    2     0 value2
    

    筛选value值在向量[0, 1]中的数据

    data.2[data.2$value %in% c(0, 1), ]
    #   time value   type
    # 1    1     1 value1
    # 5    2     0 value2
    

    筛选time < 3且time > 1的数据

    data.2[data.2$time > 1 & data.2$time < 3, ]
    #   time value   type
    # 2    2     2 value1
    # 5    2     0 value2
    

    删除

    基于上述访问、筛选操作后重新赋值即可实现删除操作。

    • 根据索引删除选定行、列
      删除第2行
    data.remove_row_2 <- data.2
    data.remove_row_2  <- data.remove_row_2[-2,]
    
    > data.3
      time value   type
    1    1     1 value1
    3    3     2 value1
    4    1     2 value2
    5    2     0 value2
    6    3     2 value2
    
    • 按条件筛选
    data.remove_type1 <- data.2[data.2$type != "value1",]
    
    > data.remove_row
      time value   type
    4    1     2 value2
    5    2     0 value2
    6    3     2 value2
    
    • 筛选操作后默认生成的行名可能从1开始或不连续,重新给行名赋值就行
    data.rename_row <- data.remove_type1
    rownames(data.rename_row) <- seq(nrow(data.rename_row))
    
    > data.rename_row 
      time value   type
    1    1     2 value2
    2    2     0 value2
    3    3     2 value2
    

    使用gather()进行data.frame数据格式转换

    前面用到的data、data.2具有不同的形式,前者可能更易读,但是大多数数据处理包和绘图包使用第二种形式。这时可以用tidyr包中的gather()进行数据格式的转换。

    > data
    	 time	value1	value2
    1		1		 1		 2
    2		2		 2		 0
    3		3		 2		 2
    
    > data.2
      time value   type
    1    1     1 value1
    2    2     2 value1
    3    3     2 value1
    4    1     2 value2
    5    2     0 value2
    6    3     2 value2
    

    函数参数如下,
    gather(data, key = "key", value = "value", ..., na.rm = FALSE, convert = FALSE, factor_key = FALSE)
    从data到data.2如下操作即可

    library(tidyr)
    gather(data, value, type, -time)
    #   time   type value
    # 1    1 value1     1
    # 2    2 value1     2
    # 3    3 value1     2
    # 4    1 value2     2
    # 5    2 value2     0
    # 6    3 value2     2
    

    简要说下可能的实现方式。

    1. 从data到data.2需要对value1、value2两列进行一个转置,再把不进入转置操作的time列对应复制到转置后的数据即可。
    2. 所以首先选择需要变形的data.frame,接着区分需要转置的列和不需要转置的列,不需要转置的用"-"操作放到其他参数后就行。
    3. gather()函数会将原数据转置区的列名一行视为主键列key,其余行、列的数据依次对应主键变成value列,我们只需要给新的key、value列命名即可。

    给个自己的数据当例子。

    depthsensor4336291120
    110.97849830.95595060.97633690.96595610.9796494
    210.98978780.98114740.99641730.98947870.9758862
    120.92869280.93184750.95162430.93613770.9450460
    220.93761160.95341880.95788160.94560950.9516801
    130.95251890.96171890.96257060.97339910.9672283
    230.96819600.98693300.98583270.97170860.9831383

    每个深度有3个传感器,一共有两个深度,测量间隔30 s共测量了120 s。
    选择非转置列,重命名新key、value列即可。

    library(tidyr)
    data.example <- read.csv("text.csv")
    gather(data.example, time, value, -depth, -sensor)
    #    depth    sensor time     value
    # 1      1         1    4 0.9784983
    # 2      2         1    4 0.9897878
    # 3      1         2    4 0.9286928
    # 4      2         2    4 0.9376116
    # 5      1         3    4 0.9525189
    # 6      2         3    4 0.9681960
    

    常见问题

    列、行名包括"X"、“V”

    读取数据时如果原文件列名、行名为数字,读取后data.frame可能会在数字前加上前缀"X"、“V”。

    • 规则的数据直接利用辅助函数更改列名、行名、指定列。
    data.file <- read.csv("data_file.csv")
    #   v1 v2 V3
    # 1  1  2  3
    # 2  1  2  3
    # 3  1  2  3
    
    colnames(data.file) <- c(1:length(colnames(data.file))
    
    • 数据不规则,例如为测试数据值时,进行字符串处理即可,取字符第二位到最后一位。
    data.file2 <- read.csv("data_file2.csv")
    #    time X0 X10 X15 X17 X18
    # 1 value  1   2   3   4   5
    
    colnames(data.file2) <- c(colnames(data.file2)[1],
    	sapply(sapply(colnames(data.file2)[-1],substr,2,10), as.numeric))
    #    time 0 10 15 17 18
    # 1 value 1  2  3  4  5
    

    内部sapply对指定范围取子字符串,从第2位到第10位(最大位即可,想写函数复用使用max(nchar(colnames(a)))得到最长字符数),外部sapply转为数值类型。


    P.S.
    使用Python pandas时经常弄混两个的函数,考虑写在一起比较还是用一样的模板分开写,欢迎建议。
    有问题指出、补充欢迎评论区交流。

    展开全文
  • DataGrip初体验

    万次阅读 2021-02-18 15:46:08
    文章目录DataGrip什么是DataGripDataGrip的优点1. 多平台2. 支持多种数据库3. 方便安装1. 下载链接2.激活3. 使用 DataGrip 什么是DataGrip DataGrip 是JetBrains公司开发的数据库管理客户端工具(操作数据库的IDE,...

    DataGrip

    一. 什么是DataGrip

    DataGrip 是JetBrains公司开发的数据库管理客户端工具(操作数据库的IDE,类似产品有navicat,dbeaver,workbench)。

    二. DataGrip的优点

    1. 多平台

    1. Windows
    2. OS X
    3. Linux上使用

    2. 支持多种数据库

    1. SQL Server
    2. Oracle
    3. PostgreSQL
    4. MySQL
    5. DB2
    6. Sybase
    7. SQLite
    8. Derby
    9. HyperSQL
    10. H2

    3. 方便

    连接到数据库服务器执行sql、创建表、创建索引以及导出数据很方便(大量快捷键)

    总结:多平台和支持多种数据库其他竞品也支持,所以优点主要体现在第三点,大量熟悉的快捷键,使用方便。

    三. 安装

    1. 下载链接

    DataGrip下载链接
    DataGrip windows版本直达

    2. 激活

    DataGrip和Intellij IDEA都是JetBrains公司的产品,激活方式是一样的(用过idea的都知道)。

    推荐:购买正版(支持正版从我做起!)

    还有一个重要的原因是花了钱可以帮助你更好的熟悉,使用,掌握该工具(不信你试试)

    3. 配置

    1. File-DataSource
      在这里插入图片描述

    2. +号添加连接数据配置,此处以mysql为例
      在这里插入图片描述
      第一次配置的时候,第三个红框需要下载相对应的mysql驱动,下载失败多尝试几次即可。

    3. 配置serverTimezone(此处我配置的上海)
      在这里插入图片描述

    4. 测试
      在这里插入图片描述

    5. 选择schemas(mysql的DataBase)
      在这里插入图片描述

    6. 结构如图所示
      在这里插入图片描述

    四. 使用

    1. 打开console控制台(Ctrl+shift+F10)
      在这里插入图片描述
      查询测试:
      在这里插入图片描述
      执行sql以及commit快捷键:Ctrl+Enter
    2. 更改多条sql语句的选择执行
      在这里插入图片描述
      通过setting可以设置执行的sql语句是哪条,默认为执行询问。

    效果:
    在这里插入图片描述
    可更改为执行光标所在行的sql语句
    在这里插入图片描述

    1. 创建表
      在这里插入图片描述

    2. 操作表

      • 增加修改
        在这里插入图片描述
        点加减号可新增删除数据行,需要注意的是,所有update操作都需要点db按钮commit(或者快捷键alt+enter)

      • 外键关联alt+F7
        在这里插入图片描述
        视图中选择相对应的表格 alt+F7可跳转到外键关联表

      • 选中表单元格 ctrl+shift+← 或者 ctrl+shift+→ 可缩短和拉长当前格

      • ctrl+alt+n 设置当前单元格为null

    3. console中操纵sql

      • 格式化sql(ctrl+alt+L,和idea一样)

      • 注释(ctrl+/ 或 ctrl+shift+/)

      • 多光标模式(alt+shift+鼠标左键)

      • 大小写自动转换 ctrl+shift+u (sql最好大写)

      • ctrl+关键字 可链接到相对应的表
        在这里插入图片描述

      • 显示关键字详情 ctrl+q,选中关键字 ctrl+q 可显示右侧信息
        在这里插入图片描述

    4. 搜索Ctrl+N
      在这里插入图片描述
      shift+shift 全局搜索
      在这里插入图片描述

    5. 导出
      在这里插入图片描述
      还可以选择多种格式,右侧显示视图
      在这里插入图片描述
      重点可以关注一下两点:

    • 导出sql:
      在这里插入图片描述
    • 导出json(这个就帅了,写需求文档就很棒)
      在这里插入图片描述
    1. 导入
      在这里插入图片描述
      formats 选择格式,默认选Tab-separated按行分割,或者comma(逗号)、pipe(管道)切割,通过Data Preview预览效果。

    然后就可以导入了,速度还挺快。

    怎么样?内容丰富功能齐全,是不是很心动?马上玩起来呀。
    展开全文
  • JetBrains DataGrip安装和使用的详细教程

    万次阅读 多人点赞 2021-03-23 18:09:04
    本文介绍另一个十分好用且强大的工具:DataGrip。 DataGrip 是 JetBrains 公司推出的管理数据库的产品。对于 JetBrains 公司,开发者肯定都不陌生,IDEA 和 ReSharper 都是这个公司的产品,用户体验非常不错。 ...
  • tensorflow下载mnist数据到当前路径下的MNIST_data目录 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 网络异常,...
  • Vue教程(组件-data和methods)

    万次阅读 2019-07-24 15:02:40
      在上篇文章的基础上我们继续来介绍下Vue组件中的data和methods属性,这两个属性和我们介绍的Vue实例中data和methods属性很类似,使用方式也是一样的 Vue的data和methods属性   先准备一个基础页面,在其中创建...
  • 就是需要通过axios请求数据之后,将数据赋予到data中的tableData,而table组件会根据tableData双向绑定自动渲染。 但是当我赋值的时候TypeError: Cannot set property 'tableData' of undefined。究竟怎么回事呢。 ...
  • STM32--Code、RO-data、RW-data和ZI-data

    千次阅读 2019-01-08 09:19:38
     RO-data: Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。C语言中const关键字定义的变量就是典型的RO-data。  RW-data: Read Write data,可读写数据...
  • MDAC(Microsoft Data Access Components) MDAC2.5 MDAC2.6 MDAC2.7 MDAC2.8
  • 微信小程序data-xx 的使用

    千次阅读 2019-06-14 16:40:54
    data-xx 的作用是在事件中可以获取这些自定义的节点数据,用于事件的逻辑处理 比如 写一个list列表 想知道点击的list列表的那一个item ,比如获取点击的图片,等等 使用data-xx 需要注意的 xx 是自己取的名字, 后面...
  • vue中datadata()的区别

    千次阅读 多人点赞 2020-07-20 22:13:04
    Vue实例中data属性: new Vue({ el: '#app', data: { message: 'message' } }) 组件化的项目中使用: export default{ data(){ return { message: 'message' } } } 注意: 在大型项目中data会造成数据...
  • DataFactory_测试数据生成工具

    千次下载 热门讨论 2012-08-17 14:24:06
    这个是我从网上找到的工具和使用说明,打包在一起放上来,有需要的可以下载使用。可以支持多种数据库,数据库中的表名不能使用中文的。批量添加测试数据。
  • Legend data should be same with series name or data name, 排查过程: 1、在网上有的说是因为legend中的date和series中data里name不一致导致的,我经过打印出两者数据,经对比是一致的,排除该因素...
  • matlab读取.data文件

    千次阅读 2020-12-21 22:06:23
    文件是letter_recognition.data 具体参数可以参考官方文档:readtable letter_recognition = readtable('letter-recognition.data','Filetype','text','ReadVariableNames',false); 读出的格式:
  • vue中data数据之间如何赋值

    万次阅读 2019-09-12 13:39:07
    vue中data数据之间如何赋值前言实现方式 前言 最近我妹突然问我vue的data之间需要进行赋值,这是什么奇葩需求,干嘛不直接自己定义好就好了啊,既然有这种场景,那么我们就需要去解决这种场景。 实现方式 <...
  • data中定义了一个数据msg, vue实例上访问这个数据有两种方式,this.$data.msg 和 this.msg,请问,为vue如何实现this.msg能直接访问到data中的msg变量???data又为什么是个函数? 分析: clone 下 vue 的项目...
  • vue重置data或者获取data初始值

    千次阅读 2019-12-03 20:50:19
    在某些情况我们可能要重置data上面的某些属性,比如在表单提交后需要清空form this.$data // 组件当前data对象 this.$options.data() // 组件初始化状态下的data对象 Object.assign(this.$data, this.$options.data...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,853,223
精华内容 3,141,289
关键字:

data