(数据科学学习手札01)Python与R基本数据结构之异同
Python
1.列表(list)
list1 = [i for i in range(10)]
list1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
特点:可遍历,可索引,可切片
列表的遍历:
方式1:
for i in range(len(list1)):
print(list1[i])
0
1
2
3
4
5
6
7
8
9
方式2:
list1 = [i+1 for i in range(10)]
for i,j in enumerate(list1):
print(i,j)
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
*这里的enumerate()方法用于返回序列对应元素的下标及值
列表的索引:
print(list[0])
0
列表的切片:
list1[2:6]
[2, 3, 4, 5]
2.字典(dictionary)
dic1 = {'a':1,'b':2,'c':3}
dic1
{'a': 1, 'b': 2, 'c': 3}
特点:只可通过字典特有方法遍历,可通过'键-值‘的方式进行索引,键名不可重复,值可以重复
字典的遍历:
方式1:
for key in dic1.keys():
print(key)
a
b
c
方式2:
for value in dic1.values():
print(value)
1
2
3
方式3:
for key,value in dic1.items():
print(key + str(value))
a1
b2
c3
字典的索引:
dic1['a']
1
3.元组(tuple)
tp1 = (1,2,3,'a','b')
tp1
(1, 2, 3, 'a', 'b')
特点:一经创建,则不可修改,因此可以用元组来存放一些重要的常数,可索引,可首尾连接不同的元组
4.集合(set)
list = [1,2,2,3,4,5,5,6,6,7,8,9]
set(list)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
特点:可通过集合来进行去重
R
1.向量(vector)
> v1 <- c(1,2,3,'a','b')
> v1
[1] "" "" "" "a" "b"
特点:可自由修改,切片,拼接,索引,遍历
向量的拼接技巧:
> v1 <- c(1,2,3,4)
> v2 <- c(5,6)
> c(v1,v2)
[1] 1 2 3 4 5 6
2.矩阵(matrix)
> v1 <- 1:10
> v1
[1] 1 2 3 4 5 6 7 8 9 10
> mat1 <- matrix(v1,nrow=2,ncol=5)
> mat1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
特点:matrix只能存在为规则的矩形结构,不能像vector一样自由的做不规则切片和增减元素
matrix()的byrow参数
> mat1 <- matrix(v1,nrow=2,ncol=5,byrow=TRUE)
> mat1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
byrow表示向量按行填充进而转为矩阵,默认byrow=FALSE
3.数组(array)
> v1 <- 1:50
> array1 <- array(v1,dim=c(5,5,2))
> array1
, , 1 [,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25 , , 2 [,1] [,2] [,3] [,4] [,5]
[1,] 26 31 36 41 46
[2,] 27 32 37 42 47
[3,] 28 33 38 43 48
[4,] 29 34 39 44 49
[5,] 30 35 40 45 50
特点:与矩阵相似,但可以有大于2的维度
4.数据框(dataframe)
> v1 <- 1:4
> v2 <- 2:5
> v3 <- c('a','b','c','d')
> d1 <- data.frame(v1, v2, v3)
> d1
v1 v2 v3
1 1 2 a
2 2 3 b
3 3 4 c
4 4 5 d
特点:可以在不同字段下储存长度相等的不同数据类型的元素;不可按照下标索引值
数据框的列名索引:
> d1$v1
[1] 1 2 3 4
数据框的下标索引:
> d1[2,2]
[1] 3
PS:与Python pandas中的数据框进行对比
Pandas:
import pandas as pd v1 = [i for i in range(10)]
v2 = [i+1 for i in range(10)]
d1 = pd.DataFrame({'v1':v1,
'v2':v2})
d1
v1 v2
0 0 1
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
6 6 7
7 7 8
8 8 9
9 9 10
pandas可以直接将矩阵(由列表嵌套成的矩阵,非numpy 中的matrix)转化为数据框
mat1 = [[1,2,3],[4,5,6]]
index = ['a','b']
colnames = ['x','y','z']
d1 = pd.DataFrame(data=mat1,index=index,columns=colnames)
d1
Out[11]:
x y z
a 1 2 3
b 4 5 6
pandas 数据框的索引
按字段名索引:
d1['v1']
Out[4]:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
Name: v1, dtype: int64
按下标索引:
d1.iloc[1]
Out[6]:
v1 1
v2 2
Name: 1, dtype: int64
*pandas中数据框的相关操作风格接近R
让我们回到R
5.列表(list)
> ele1 <- 1:20
> ele2 <- c('j','a','c','k')
> ele3 <- matrix(1:20, nrow=4,ncol=5)
> title <- 'List in R'
> list1 <- list(title=title, num=ele1, char=ele2, mat=ele3)
> list1
$title
[1] "List in R" $num
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $char
[1] "j" "a" "c" "k" $mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
*与Python中的list不同,R中的列表可以依次存入数据类型与结构相异的独立对象,并可以通过下标索引及'$'索引获取对象
(数据科学学习手札01)Python与R基本数据结构之异同的更多相关文章
- (数据科学学习手札58)在R中处理有缺失值数据的高级方法
一.简介 在实际工作中,遇到数据中带有缺失值是非常常见的现象,简单粗暴的做法如直接删除包含缺失值的记录.删除缺失值比例过大的变量.用0填充缺失值等,但这些做法会很大程度上影响原始数据的分布或者浪费来之 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- (数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg
*从本篇开始所有文章的数据和代码都已上传至我的github仓库:https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 pandas提供了很多方 ...
随机推荐
- 建立virtualenv环境
建立virtualenv环境 virtualenv --no-site-packages yourenv 其中,yourenv是给环境起的名称 --no-site-packages表示安装的pytho ...
- C/C++中构造函数和析构函数能否被继承
http://bbs.csdn.net/topics/390160673 标准方面做了要求的.Even though destructors are not inherited 构造函数和析构函数是不 ...
- 【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(用LCT维护SAM的parent树)
点此看题面 大致题意: 给你一个\(01\)串,每次询问前缀编号在一段区间内的两个前缀的最长公共后缀的长度. 离线存储询问 考虑将询问离线,按右端点大小用邻接表存下来(直接排序当然也可以啦). 这样的 ...
- 未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Service Broker
ALTER DATABASE DATABASE_Name SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE DATABASE_Name SE ...
- Java字符串常量池是什么?为什么要有这种常量池?
简单介绍 Java中的字符串常量池(String Pool)是存储在Java堆内存中的字符串池.我们知道String是java中比较特殊的类,我们可以使用new运算符创建String对象,也可以用双引 ...
- 【洛谷P2296】[NOIP2014]寻找道路
寻找道路 题目链接 这道题非常的水,按照题意, 先反向建边,从终点搜索,标记出可以到达终点的点 然后枚举一遍,判断出符合条件1的点 再从起点搜索一遍就可以了 #include<iostream& ...
- Android学习笔记_29_样式和主题
一.简单样式定义和使用: android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合.如:需要定义字体的颜色和大小. 在Android中 ...
- FreeImage.lib库的配置和简单使用 转
转载地址 http://www.codeweblog.com/win8-1%E4%B8%8Bfreeimage-lib%E5%BA%93%E7%9A%84%E9%85%8D%E7%BD%AE%E5%9 ...
- centos7下javac:未找到命令的问题
在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java 会提示未找到指令,但用java -verison测试环境变量 ...
- 促销规则 promotion rule
参考:http://www.cnblogs.com/winstonyan/archive/2012/10/29/b2c_research_promotion_engine_and_rule_1.htm ...