一些R或python好东西分享(更新中……)

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  <</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+2+3–4+5+6+78+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) #转置


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值