您的位置:首页 > 编程语言 > Python开发

一些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+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)#转置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python R json 数据处理