一些R或python好东西分享(更新中……)
2016-08-26 18:34
190 查看
R/python分享
“每个人在学习之前总是难免会贪别人的便利,伸手获得帮助,而不是先思考;这种学习方式是不可取的”。当自己成为别人询问的对象时,我才慢慢的意识到这个问题的严重性,一方面对于自己而言这种行为容易滋生依赖性,从大大降低自己学习的能力,另一方面对别人而言也是不尊重的,因为某种程度你把别人当成一个工具来用,并没有促进相互思考;
好啦上面是牢骚,总之,建议大学学习前多吧google使用起来,好了下面这些是我学习以来比较好的资料,分享给大家~~
开始前做点小推广magicdata丨数据竞赛交流 :QQ群:114676111(重点:进群验证说明:缺失值处理方法)
群主旨:数据科学竞赛学习交流,禁止超常灌水! 不欢迎水军
本群创建于2010/6/16: 本群主用R与python作为研究,希望先学python的可转兄弟群【python-实战队 429104064】
我们数据分析/挖掘领域打造自己最牛B的水平 不欢迎水军
既然主旨是学习交流,大家应该毫无保留的进行思想碰撞;可以是特定模型的讨论,可以细节的讨论,比如决策树、神经网络,比如缺失值处理,比如大规模数据本地及服务器解决方案;学无止境,不休不止
定制R 启动环境 (链接URL)
虽然这篇文章主要讲了自定义R启动环境,但其实隐含着其他问题的解决方案。比如以下情况
Rccp 包/REmap包不能安装?提示什么C:不是内部或外部命令啥的
R的co-nsole上写好了脚本复制出来都是“ +”号,很烦,怎么解决
R版本升级了,旧版本里面的包不能用了怎么办
定制启动环境可以让你设置R的选项、指定工作目录、加载常用的包、加载用户自己写的函数、设置CRAN下载网址以及其它操作;首先说上面一段的三个问题的第一个问题,Rccp、REmap不能安装,可能原因:你的路径中存在空格,空格~ ~例如program
files,什么都不说,兼容性问题怎么解决 方案:
自定义本地库
R中执行:.libPaths(),查看路径 第一步执行结果一般为"C:/Programfiles/R-3.3.0/library",
找到路径下面etc文件夹里面有个有个叫 Rprofile.site的文件,将里面的属性进行修改
.libPaths(“C:/my_R_library”)为添加自定义本地库路径
options(prompt=“>”)这个可以把开始console的界面“>”定义成你喜欢的符号,比如,改成’Kiss me’
options(continue=“ +”) 修改换行符,如加号改成options(continue=" “)空格
今天累了先写到这咯,开始学习了 ~
——————–更新线——–20160526—————————————————
今天的主角是python快速学习:
大概用了一周半的时间,我已经会写模块,类,递归,含迭代的递归,DFS搜索 为什么这么快?:
我的方法是,找到学习大纲快速扫描两边,粗略的看两遍有个印象 找练习或者项目做,习题不会做: 快速学习(i 1)i—把问题带到工具中去搜,OK介绍一个目录
<<《think python 2e》 这个绝对是入门最快的大纲~Python我就看了一周半写了很多代码,包括爬虫,包括灵活使用递归啥的 OK上链接 http://codingpy.com/books/thinkpython2/07-iteration.html
那么光看是不会进步的,学的也慢,试着找项目做,或者找题目做咯 OK题目上: http://blog.sina.com.cn/s/blog_40c3ce860101dc84.html 试着给大家解读几,后续会加入博客中 如:找出给定范围内的所有质数:下面是代码答案~~
答案:
def pri_check(i):
m = 0
j = 2
while j <</span> i :
if i % j == 0 :
m = 1
return m
else :
j=j+1
return m
def printall_pri(i,ma_x):
while i < ma_x :
k = pri_check(i)
if k==0:
print(i)
i=i+1
执行 printall_pri(1,1000)
今天累了先写到这咯,开始学习了 ~
——————–更新线——–20160527—————————————————
写程序在1,2,…,9(保持这个顺序)之间可任意放 或-或都不放使其结果等于100,输出所有可能的放法。例如:
这题可能比较难搞—主要两个步骤
生成表达式:1-9嘛,中间有8个空格,这个奏是概率论里面乘法原理了,其实也是贝叶斯分母部分啦 8个空格,插入符号(“+ ”,“-”,“”)中一个符号,最后那个符号是空格,就是不插的意思:就 是说,8个步骤完成一个表达式,每个步骤有三种选择,OK,答案就是3**8种结果
第二部,那就是那结果算出来咯,透露下,可以用堆栈→中缀表达式转前或者后缀表达式然后算出来, 嘿嘿
OK先解答第一步(某大神帮助~)
string_exp= '123456789'
op = ( ' + ', '
- ', ' ')
star = '1'
result = []
def calc(cur, i):
for j in op:
tmp = cur + j + string_exp[i]
if i == len(string_exp) -1:
result.append(tmp)
else:
calc(tmp, i 1)
calc('1', 1)
—白话解释中—
说一个错误的遍历便于理解 首先calc函数执行了for 表达式 所以三个符号都要作用于list 但是有个IF截住了for继续跑 所以第一次变成了 1 + 2 + 3 + 4当到4的时候i加了1变成了5,if起不了作用了,外层的for开始起作用 “1 + 2 + 3 + 4”这个有三个选择 “ + ”,“-”,“ ” 所以接下来打印了
1 + 2 + 3 + 4 + 5
1 + 2 + 3 + 4 - 5
1 + 2 + 3 + 4 5
然而每次递归等于把for重新执行了一遍,所以上面的解释是错的 calc 开始执行 for起作用 三个符号等待分配 1 (or - or *)—先存着 if 开始判断,OK位置不对 递归 i 从新调用calc,因为调用了for 所以 1?2 后面同样用三个选择 为什么用? 因为虽然打印程序跑的过程看似是号,实际上因为if作为内部,级别优先所以先跑了,然后继续了 第二部,但是实际上for的作用是还会执行迭代的,这样每一步三个选择这样的过程就OK了
好吧。。。3点了,我困了。。。。下次继续
——————–更新线——–20160527—————————————————
R爬虫和Rjson(数据结构 )注意事项
经常遇到的一个问题,抓取网页数据或者读取JSON的时候,前面步骤都走的OK,但是发现存储数据最后结构太复杂了!!!!list中有list。。。。,怎么办?这里面存在两个问题:
一者是对流程熟悉,数据抓取OR读取的时候缺乏足够事先测试,导致后续数据处理难度加大
二者则是对数据结构不熟悉,尽管前面的步骤做的不好,但是并非每有方法解决,数据存储结构虽然复杂,多层嵌套,但是其结构还是规则的,只不过是怎么转换的问题
今天刚看到一个JSON数据处理问题,这边拿来做例子解答:
library(RCurl)
library(rjson)
UrlBike <- "http://web.juhe.cn:8080/bike/state/sz?state=时代广场&key=2f328421171e3a3d2692587fb223b53f"
JsonBike <- paste(readLines(UrlBike , encoding = 'UTF-8' ), collapse = "")
BikeInfo<- fromJSON(JsonBike)
这段代码跑出来后,数据结构如下图所示:PS:数据使用前多用STR 看看数据结构,一者可以看看数据大致的一个profile,二者可以避免盲目下一个步骤,最后BUG重重。
这个同学从聚合数据的api接口接出来数据后发现里面有‘1’,‘2’,‘3’这样的数据,就是最后一层list名字为1,2,3;“现在这个1,2,3不能用循环里的定义的i去替换”,其实这是大家普遍对数据结构及变量取名规则不够理解所致;PS,他使用的是print()打印出BikeInfo,所以是看不到我上面这么规整的结果,所以再次强调,处理数据前,先用STR看看数据结构;
上面这个例子,要获得最底层的数据首先是要截取到result的第一个元素,这个也是倒二层list,也即 BikeInfo$result[[1]] ,这一层又包含了三个list也是上面所说的'1','2','3',
说点废话:OK回到上面那个问题,为什么用所谓的循环跑个类似的1,2,3的不到结果?因为变量名是‘1’,‘2’,‘3’,变量取名规则中单独数字是不允许的,如果存在这种现象只有用两个引号规避掉了,so,that's it;
回到正题,其实这个看起来就知道想干嘛了,一目了然,就是从新吧这些键值对(类似python中的字典,这里R的list每个变量刚好一个值),如 address:"翠园路....",怎么弄?简单,BikeInfo$result[[1]]已经获取了所有的倒二层了,只要BikeInfo$result[[1]]$'1',BikeInfo$result[[1]]'2',BikeInfo$result[[1]]'3'就可以获取最后的结果,接下来呢?接下来就是转成矩阵然后cbind结束。。。
OK整理下步骤
获取倒二层list KK(数据存储主list,result的第一个元素)
读取list KK中的list,也就是最底层的list,把底层list转成矩阵Mi
通过cbind把所有的矩阵合并,Ok最后的结果就是你要的矩阵了(要变成data.frame,轻轻一转就OK)
下面这段代码针对当前例子,看代码
gg1 = as.matrix( BikeInfo $ result [[ 1 ]]$ '1' , byrow = FALSE)
gg2 = as.matrix( BikeInfo $result [[ 1 ]]$ '2' ,byrow = FALSE)
gg3 = as.matrix( BikeInfo $result [[ 1 ]]$ '3' ,byrow = FALSE)
gg = cbind(gg1 ,gg2 ,gg3)
final = t(gg) #转置
当然最后JSON数据可能并不止这么多,因此,我可能用下面这个方法更具有普遍性
mymatrix_list = lapply(BikeInfo$result[[1]],FUN=function(x)
as.matrix( x,byrow=FALSE))
mymatrix = do.call('cbind',mymatrix_list)
final = t(mymatrix)#转置
相关文章推荐
- 【分享】PHP-MySQL-Bash-Perl-Python等一些经典书籍下载
- Python的一些用法分享
- 分享vim python缩进等一些配置
- 好东西大家分享: JAVA学习的一些重点
- python 學習的一些心得分享(基礎)
- 给大家分享一些python教程,python核心编程等各类python书籍+实战资料
- Python的一些用法分享
- Python开发常用的一些开源Package分享
- python的类与文件、异常的一些习题作答分享
- 分享python数据统计的一些小技巧
- Python的一些用法分享
- Python中非常实用的一些功能和函数分享
- [Python]同是新手的我,分享一些经验
- 分享一些面试遇到的python题目
- Python的一些用法分享
- 在CSDN上看到的一些好东西,分享一…
- [Python]分享一些用来简化与SQL Server交互的函数
- 好东西大家分享: JAVA学习的一些重点
- 看到了,分享下一些中文版的python资料