r编程数据分析(数据分析用python还是r语言)

本文目录
- 数据分析用python还是r语言
- 数据分析师应具备哪些能力
- R语言基本数据分析
- 数据分析工具R和RStudio入门使用方法
- R-无序的定类数据分析:列联表、热力图、和弦图、桑基图和统计检验
- 网络数据的统计分析-R语言实战
- 使用R语言对SSR数据做主成分分析(PCA)的一个简单小例子
数据分析用python还是r语言
Python与R语言的共同点:
Python和R在数据分析和数据挖掘方面都有比较专业和全面的模块,很多常用的功能,比如矩阵运算、向量运算等都有比较高级的用法。
Python和R两门语言有许多平台适应性,Linux、Windows都可以用,并且代码可移植性强。
Python和R比较贴近MATLAB以及minitab等常用的数学工具。
Python和R语言的区别:
数据结构方面,由于从科学计算的角度出发,R中的数据结构非常简单,主要包含向量、多维数组、列表、数据框;而Python则包含更丰富的数据结构来实现数据更精准的访问和内存控制,多维数组、元组、集合、字典等等。
Python与R对比速度更快,Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转化为小数据才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。
Python是一套比较平衡的语言,各方面都可以,无论是对其他语言的调用,和数据源的连接、读取,对系统的操作,还是正则表达式和文字处理,Python都有着非常明显的优势,而R在统计方面比较突出。
Python的pandas借鉴了R的dataframes,R中的rvest则参考了Python的beautiful
soup,两种语言在一定程度上存在互补性;通常,我们认为Python比R在计算机编程、网络爬虫上更有优势;而R在统计分析上是一种更高校的独立数据分析工具,所以说Python和R各具备不同的优势,很难抉择。
不过相对于R来说,Python更加简单、易学、语法清晰,适合零基础入门学习,而且掌握Python之后不仅可以从事数据分析岗位工作,还可以从事人工智能、web开发、游戏开发、运维等工作。
数据分析师应具备哪些能力
数据分析师应具备哪些能力如下:
要熟练使用 Excel、至少熟悉并精通一种数据挖掘工具和语言、撰写报告的能力、要打好扎实的 SQL 基础。
1、要熟练使用 Excel
Excel 可以进行各种数据的处理、统计分析和辅助决策操作,作为常用的数据处理和展现工具,数据分析师除了要熟练将数据用 Excel 中的图表展现出来,还需要掌握为生成的图表做一系 列的格式设置的方法。
2、至少熟悉并精通一种数据挖掘工具和语言
以R语言为例,R编程语言在数据分析与机器学习领域已经成为一款重要的工具。R 作为脚本语言凭借其良好的互动性和丰富的扩展包资源可以方便地解决大部分数据处理、变换、统计分析、可视化的问题,并可以重现所有的细节。
3、撰写报告的能力
在撰写报告时,深入地思考,深入分析,逻辑严谨,结论有说服力,能提前预测数据趋 势,能从问题中引申出解决方案,提出有指导意义的分析建议,这些都是一名优秀的分析师所体现的特质。
4、要打好扎实的 SQL 基础
SQL 基础之所以重要,是因为数据分析师分析的数据大多都是从数据库中提取而来的。有良好的 SQL 功底并能熟悉使用,不仅能提取到需要的数据,还能大大提高工作效率。
注意:
1、与传统的数据分析师相比,互联网时代的数据分析师面临的不是数据匮乏,而是数据过剩。因此,互联网时代的数据分析师必须学会借助技术手段进行高效的数据处理。更为重要的是,互联网时代的数据分析师要不断在数据研究的方法论方面进行创新和突破。
2、就行业而言,数据分析师的价值与此类似。就新闻出版行业而言,无论在任何时代,媒体运营者能否准确、详细和及时地了解受众状况和变化趋势,都是媒体成败的关键。
R语言基本数据分析
R语言基本数据分析
本文基于R语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap采样和Anova方差分析的实现及应用。
不多说,直接上代码,代码中有注释。
1. 基本作图(盒图,qq图)
#basic plot
boxplot(x)
qqplot(x,y)
2. 线性拟合
#linear regression
n = 10
x1 = rnorm(n)#variable 1
x2 = rnorm(n)#variable 2
y = rnorm(n)*3
mod = lm(y~x1+x2)
model.matrix(mod) #erect the matrix of mod
plot(mod) #plot residual and fitted of the solution, Q-Q plot and cook distance
summary(mod) #get the statistic information of the model
hatvalues(mod) #very important, for abnormal sample detection
3. 逻辑回归
#logistic regression
x 《- c(0, 1, 2, 3, 4, 5)
y 《- c(0, 9, 21, 47, 60, 63) # the number of successes
n 《- 70 #the number of trails
z 《- n - y #the number of failures
b 《- cbind(y, z) # column bind
fitx 《- glm(b~x,family = binomial) # a particular type of generalized linear model
print(fitx)
plot(x,y,xlim=c(0,5),ylim=c(0,65)) #plot the points (x,y)
beta0 《- fitx$coef
beta1 《- fitx$coef
fn 《- function(x) n*exp(beta0+beta1*x)/(1+exp(beta0+beta1*x))
par(new=T)
curve(fn,0,5,ylim=c(0,60)) # plot the logistic regression curve
3. Bootstrap采样
# bootstrap
# Application: 随机采样,获取最大eigenvalue占所有eigenvalue和之比,并画图显示distribution
dat = matrix(rnorm(100*5),100,5)
no.samples = 200 #sample 200 times
# theta = matrix(rep(0,no.samples*5),no.samples,5)
theta =rep(0,no.samples*5);
for (i in 1:no.samples)
{
j = sample(1:100,100,replace = TRUE)#get 100 samples each time
datrnd = dat; #select one row each time
lambda = princomp(datrnd)$sdev^2; #get eigenvalues
# theta = lambda;
theta/sum(lambda); #plot the ratio of the biggest eigenvalue
}
# hist(theta) #plot the histogram of the first(biggest) eigenvalue
hist(theta); #plot the percentage distribution of the biggest eigenvalue
sd(theta)#standard deviation of theta
#上面注释掉的语句,可以全部去掉注释并将其下一条语句注释掉,完成画最大eigenvalue分布的功能
4. ANOVA方差分析
#Application:判断一个自变量是否有影响 (假设我们喂3种维他命给3头猪,想看喂维他命有没有用)
#
y = rnorm(9); #weight gain by pig(Yij, i is the treatment, j is the pig_id), 一般由用户自行输入
#y = matrix(c(1,10,1,2,10,2,1,9,1),9,1)
Treatment 《- factor(c(1,2,3,1,2,3,1,2,3)) #each {1,2,3} is a group
mod = lm(y~Treatment) #linear regression
print(anova(mod))
#解释:Df(degree of freedom)
#Sum Sq: deviance (within groups, and residuals) 总偏差和
# Mean Sq: variance (within groups, and residuals) 平均方差和
# compare the contribution given by Treatment and Residual
#F value: Mean Sq(Treatment)/Mean Sq(Residuals)
#Pr(》F): p-value. 根据p-value决定是否接受Hypothesis H0:多个样本总体均数相等(检验水准为0.05)
qqnorm(mod$residual) #plot the residual approximated by mod
#如果qqnorm of residual像一条直线,说明residual符合正态分布,也就是说Treatment带来的contribution很小,也就是说Treatment无法带来收益(多喂维他命少喂维他命没区别)
如下面两图分别是
(左)用 y = matrix(c(1,10,1,2,10,2,1,9,1),9,1)和
(右)y = rnorm(9);
的结果。可见如果给定猪吃维他命2后体重特别突出的数据结果后,qq图种residual不在是一条直线,换句话说residual不再符合正态分布,i.e., 维他命对猪的体重有影响。
数据分析工具R和RStudio入门使用方法
下载安装:R语言和它的UI界面非常安装比较简单,这里就不重复描述了,只需要到R的官网上,对应自己电脑的操作系统下载对应的版本即可。R提供window、linux和MAC OS X版本,对应下载即可,如笔者的是普通的window 32位。百度R官网,左上角的download,选择合适的镜像。如果找不到下载安装,那就不适合继续学习R语言了。
安装好之后,我们打开R界面,可以看到,R的界面非常简洁,只有一个菜单栏,和一个默认新建的R Console 控制台。
R Console 控制台的使用:我们可以在R Console 控制台内输入脚本进行运算、绘图和分析、如我们输入运算:1+2,按回车键。可以看到系统在下一行内弹出了一个3,有点类似于cmd的操作。
我们也可以对脚本,打开文件--新建--new script,可以在弹出的R器--R Editor中进行录入脚本的操作,完毕可以进行保存和读入等一系列操作
从上面的界面和操作可以看出,单单使用R自带的gui界面,难以进行方便快捷的操作,因此我们需要使用到R的辅助UI软件RStudio。同样地我们安装好并打开它。我们看到RStudio界面比R自身内容丰富很多,整个界面切成多个模块进行同步操作显示,脚本区、控制台区、文件区非常清晰易用。
同样的,我们操作1+2、1+3的运算,可以在脚本区录入1+2,回车下一行继续录入1+3,这时我们看到区有两行代码,证明这个区域与运行区是分离的,可以方便我们自由地编写修改脚本。
如果我们需要运行刚才的两行脚本,我们可以选中它,按Ctrl+回车即可进行运行,选中1行则执行一行,选中全部则执行全部。这里操作运算了3次,对应不同的运算结果显示在了区下方的控制台Console 区域。同样地,我们可以对这类脚本进行保存、打开重、运行等一系列操作
R-无序的定类数据分析:列联表、热力图、和弦图、桑基图和统计检验
今天我们将通过一个例子来说明如何分析两个定类变量。
文章背景:我们想研究CFPS2010和CFPS2012青少年对自身的职业期望。
如表1,我们将原始的职业期望编码整合成9类(职业编码的大类)和其他。由于我们想分析同一个人在跨轮次调查中职业期望的稳定性情况,故将分析对象定义为在CFPS2010和CFPS2012中都回答了自己对自己职业期望的受访者。如表2所示,进行重编码后的数据是宽数据,样本量是1920,数据集名字为expect。我们在进行后续分析时,要将其转换为绘图所需的其他形式。
:star:分析方式1——列联表、频数与频率
在表3中,我们展示了2010与2012年青少年职业期望的交叉统计情况。同时该表内,也附上了频数(落在各类别中的数据个数)、⽐例(某⼀类别数据占全部数据的⽐值)、百分⽐(将对⽐的基数作为100⽽计算的⽐值,包括百分比、行百分比和列百分比)。
:star:分析方式2——统计图表
分析前色彩讲解:预设渐变色,我们这里介绍2个色彩包。
1)专门生产系列颜色的RColorBrewer包,详见图1中的系列颜色。
library(RColorBrewer)
display.brewer.all()
2)色盲友好的配色方案viridis包,详见图2中的系列颜色。
library(viridis)
?viridis()#可以看到更多对这组包色彩的说明
接下来我们来画图吧~【注:图3-图6中的类目数字的含义:1)国家机关、党群组织、企业、事业单位负责人;2)医生;3)教师;4)专业技术人员(刨除教师和医生);5)办事人员和有关人员;6)商业、服务业人员;7)农、林、牧、渔、水利业生产人员;8)生产、运输设备操作人员及有关人员;9)军人;10)其他。】
:grinning_face:绘图1:相邻矩阵的热力图【绘图工具:ggplot2或专业的ComplexHeatmap包】
相邻矩阵是指代表N个节点之间关系的N*N矩阵,矩阵内的位置(i,j)表示第i和j个节点之间的关系。对本文的有向关系网络来说,相邻矩阵不具有对称性。相邻矩阵的的对角线表示节点与自己的关系情况。
相邻矩阵可以用热力图来表示,将节点之间连接的权重用颜色来表达。
Method 1:用ggplot2绘制
library(ggplot2)
library(reshape2)
expect_Heat《-as.data.frame(round(prop.table(table(expect$code_new10,expect$code_new12)),5)*100)
colnames(expect_Heat)《-c("from","to","value")
#expect_Heat(表4)就是我们生成的用ggplot2来画热力图的数据集。
ggplot(expect_Heat,aes(x=to,y=from,fill=value,label=value))+
geom_tile(color="black")+
scale_fill_gradientn(colors=brewer.pal(9,"YlGnBu"))+
xlab(’CFPS2012’)+
ylab(’CFPS2010’)+
coord_equal()+
theme(axis.text.x=element_text(angle=90,hjust=1,colour=’black’),
axis.text.y=element_text(angle=0,hjust=1,colour=’black’))
#####安装ComplexHeatmap前需先调入devtools包,然后我们再通过install_github函数安装ComplexHeatmap包
library(devtools)
install_github("jokergoo/ComplexHeatmap")
library(ComplexHeatmap)
myColors=brewer.pal(9,"YlGnBu")
expect_Heat_matrix《-as.matrix(round(prop.table(table(expect$code_new10,expect$code_new12)),5)*100)
#expect_Heat_matrix(图4)就是我们生成的用ComplexHeatmap包绘制热力图所需要的矩阵。
Heatmap(expect_Heat_matrix,myColors)
:grinning_face:绘图2:和弦图【绘图工具:circlize包的chordDiagram函数】
和弦图(chord Diagram)是一种显示矩阵中数据之间相互关系的数据可视化方法,主要用来展示多个对象之间的关系。
和弦图主要由节点和弦构成,节点数据沿圆周径向排列,连接圆上任意两点的带权重(有宽度)的弧线称之为弦,弦(两点之间的连线)就代表着两者之间的关联关系。不同节点和弦之间用颜色将数据加以分类,能够直观得对数据进行比较和区分,十分适合用来表示复杂数据之间的关联关系。
图6表现了2010至2012年青少年职业期望的演变特征,节点数为10表示要分析十种职业期望,数量通过弧线的颜色和宽度使其相互间的关系表达清晰:不同颜色的连线表示不同职业期望之间的关联程度,权重(弧线宽度)可发现不同期望之间选择上的明显变化。
library(circlize)
library(viridis)
expect_chord《-expect_heat
chordDiagram(expect_chord,col=viridis::turbo(10))
:grinning_face:绘图3:桑基图【绘图工具:ggalluvial包】
桑基图有利于展现分类数据之间的相关性,以流的形式呈现同一类别的元素数量。在图7中,边表示职业期望之间的流动情况,流量表示流动数据的具体数值,节点表示不同的职业期望分类。
通过图7,我们可以总结一下桑基图的特点:
1)起始总流量=结束总流量,即能量守恒。不能在中间过程中创造出流量,也不能有流量总量上的耗损。故,假如出现耗损或新增,可以设一个新的类别,如“其他”,存储这些不属于分析对象的类目。
2)分析流量的流动过程,不同线条代表不同的流量分流情况,边的宽度与流量成比例,边越宽,流量数值越大,
#install.packages(’ggalluvial’)
library(ggalluvial)
#去掉pid列,对expect数据集进行格式转换,转换后生成的用来画桑基图的数据集如表5,其中person列在绘图时代表流量,year列区分了流动中的状态,expectancy代表节点。
sapply(names(expect),function(x) length(unique(expect)))
expect_sanky《-to_lodes_form(co_2,axes=1:ncol(expect),id="person")
colnames(expect_sanky) 《- c("person","year","expectancy")
expect_sanky《-mutate(expect_sanky,year=ifelse(year=="code_new10","2010","2012"))
ggplot(expect_sanky,
aes(x = year, stratum = expectancy ,alluvium=person,
fill = expectancy, label = expectancy)) +
geom_flow() +
geom_stratum(alpha = .5) +
geom_text(stat = "stratum", size = 3) +
theme(legend.position = "none") +
ggtitle("job expectancy at two points in time")+
theme(plot.title = element_text(hjust = 0.5))+
theme(panel.grid.major=element_line(colour=NA),
panel.background = element_rect(fill = "transparent",colour = NA),
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid.minor = element_blank())
注释:这三种图都可以进行美化,我在绘制部分图形时,并没有调参数,具体的内容修饰见参考文件。
:star:分析方式3——统计检验
:smiling_face_with_smiling_eyes:方法一:卡方独立性检验:研究两组分类变量的关系
library(gmodels)
CrossTable(expect$code_new10, expect$code_new12,expected = T,format = "SAS",fisher = T,prop.c = T,prop.t = F,prop.chisq = T)
也可以用stats包中的统计检验分别计算。
1)Pearson 卡方独立性检验
chisq.test(expect$code_new10, expect$code_new12, correct = TRUE,
p = rep(1/length(x), length(x)), rescale.p = FALSE,
simulate.p.value = FALSE, B = 2000)
有多于20%的期望频数小于5,最小的期望频数T=0.025。依据卡方检验的使用条件,我们谨慎起见,选择读取Fisher’s Exact Test。
2)Fisher精确检验
fisher.test(co_2$code_new10,co_2$code_new12, workspace = 5000, hybrid = FALSE,
control = list(), or = 1, alternative = "two.sided",simulate.p.value=TRUE,
conf.int = TRUE, conf.level = 0.95)
由P值《0.01,拒绝原假设,认为2010年和2012年青少年的职业期望是独立的。
:smiling_face_with_smiling_eyes:方法二:一致性检验
Kappa 系数用于一致性 检验 ,也可以用于衡量分类精度, kappa 系数的计算是基于混淆矩阵的。Kappa检验是用于检验两个变量的测量结果是否一致,强调一致性。从研究目的上来说,一致性、差异性和独立性是不同的概念。
kappa系数进行解读:一般认为kappa》0.8,则有很好的一致性,kappa《0.4,则一致性较差;此外还应通过显著性检验,也就是p值《0.05。
library(irr)
kappa2(expect)
kappa2(expect, "squared") # predefined set of squared weights
根据图10,无论是原数据,还是考虑平方后的数据,我们均可以得到结论:在0.01的显著性水平下,2010年和2012年青少年职业期望的一致性较差。
#kappam.fleiss():在2010、2012的基础上,在添加新的列——2014、2016等,该函数可以检验多个变量的测量结果是否一致。Fleiss’ kappa系数:取值范围是【-1,1】,其系数越大,一致性越强,一般经验认为低于0.7是不可接受的尚需要改进,0.7可接受,0.9优秀。
:smiling_face_with_smiling_eyes:方法三:配对分类数据的差异性检验
分析配对分类数据的差异性。此类数据最常见于实验研究,⽤不同的⽅法或不同的时间点检测同⼀批⼈,看两个⽅法的效果是否有差异。此时可使⽤配对卡⽅检验。注意,行名和列名具有相同的分类,并且计数表示成对响应。本质上,那些前后反应相同的个体并不影响对反应变化的评估。我们主要研究“不一致”的计数。Kappa检验会利用列联表的全部数据,而配对卡方检验只利用“不一致“数据。
当数据维度是2*2时,用配对分类数据的McNemar 检验;当数据维度超过2*2时,用McNemar–Bowker检验。
注:1)McNemar–Bowker检验的一个缺点:如果矩阵中的某些位置有0,它可能会失败;
2)如果“不一致”分类的计数很低,McNemar 检验可能不可靠。
mcnemar.test(expect$code_new10,expect$code_new12)
根据图11,McNemar–Bowker检验失败了。
if(!require(rcompanion)){install.packages("rcompanion")}
还可以利用Rcompanion包的nominalSymmetryTest函数对数据进行对称性检验,对本数据也是失效的。
:star:分析方式3——统计模型
待更新。
参考文件
1、《R语言数据可视化之美:专业图表绘制指南》(增强版),张杰,中国工信出版集团&电子工业出版社。该书的电子版见微信读书。
2、 circlize官方教程。网址: R 中的循环可视化 (jokergoo.github.io) 。
3、ComplexHeatmap官方教程。网址: Heatmap Complete Reference (jokergoo.github.io)
4、定类数据分析与定序数据分析。 二、定类与定序变量分析 - 百度文库 (baidu.com)
5、定类数据与卡方检验。网址: 定类数据如何分析?卡方检验有什么使用场景? - 百度文库 (baidu.com)
6、 R Handbook: Tests for Paired Nominal Data (rcompanion.org)
网络数据的统计分析-R语言实战
资料:《Statistical Analysis of Network Data with R》
语言R常见的网络分析包:
网络分析研究大部分是描述性的工作。
网络的可视化 即是一门艺术,也是一门科学。
三元闭包体现了社会网络的“传递性”(transitivity),枚举所有节点三元组中构成三角形的比值来表征。
网络的可视化和数值特征化是网络分析的首要步骤之一。
网络可视化视图将数据的多个重要反面整合在一个图表中。
该节点在多大程度上会与同类型或者不同类型的其他节点进行匹配,可以通过一种相关性统计量(所谓的同配系数)进行量化。
将复杂系统中感兴趣的问题与合适的网络概括性度量匹配起来,是网络特征化方法起作用的关键所在。
网络中的频繁子图模式
网络聚类系数的分布,用来检验社会网路的聚集性上
sand安装包
网络数据统计分析 statistical analysis of network data
在CRAN上
G=(V,E)
节点 :vertices 或者 nodes
边:edges 或者 links
节点数量:图的阶数 order
边的数量:图的规模 size
同构图 isomorphic
无向 undirected
有向 directed graph 或者 digraph
边:有向边 directed edges 或 弧 arcs
双向 mutual
小的图形用 formulate来创建
把mg转化为wg2
Zachary 空手道俱乐部网络 (karate club network)
数据集合实际上只存在两个社团,分别以教练为中心和以主管为中心。
Lazega律师网络可视化
srt() 不能用使用 upgrade_graph()d代替
DrL算法,针对大型网络可视化设计的布局算法。
节点的节点,即社区节点(主题节点)
即一个中心节点,一其直接相连的邻居,以及这些节点至今的边。
度值不同的节点以何种方式彼此连接
图的密度
全局聚类系数
局部聚类系数
互惠性 reciprocity
二元组普查
使用R语言对SSR数据做主成分分析(PCA)的一个简单小例子
示例数据来自于R语言包 poppr ,csv文件存储,数据格式如下
使用到的是R语言的 poppr 包中的 read.genalex() 函数
poppr 第一次使用需要先安装
读入数据
读入数据直接是 genclone object,使用函数 genclone2genind() 将其转换成genind object,接下来使用 ade4 包中的 dudi.pca() 函数做主成分分析
主成分的结果存储在li中
还是认为的分个组,然后做散点图
明天的推文再继续这部分内容吧!

更多文章:
库里对阵国王个人正负值高达+20(库里一战连创4纪录,他的实力有多强)
2025年5月29日 19:45
linux如何添加永久静态路由(CentOS服务器如何添加永久静态路由)
2026年5月15日 16:45
mongodb客户端(mogodb怎么用robomongo导出数据)
2026年6月29日 13:30
java程序设计全套ppt课件完整版(跪求java 程序设计)
2025年5月29日 11:45
站长推荐自动跳转网址(为什么浏览器打开网站会自动跳转到其他网站)
2025年12月15日 14:15
thrill的用法及短语(人教版英语九年级10单元重点单词短语句子)
2026年1月25日 02:00
length函数c++(c++ string length怎么用)
2025年9月6日 20:00
insert动词和名词读音区别(英语insert blank line above current怎么翻译)
2026年4月17日 14:45
线程安全函数和可重入函数的关系是(傅里叶级数和傅里叶变换有什么关系)
2026年6月9日 18:15
jquery级联下拉菜单(Jquery 实现异步级联下拉列表,然后提交刷新后保存选中的值)
2026年7月19日 07:15
javascript入门经典书籍(新手学前端开发应该看哪些书)
2025年9月5日 23:00













