体重: {c} kg\\", # 格式化提示框内容,显示身高和体重\\n ),\\n visualmap_opts=opts.VisualMapOpts(\\n min_=50,\\n max_=150,\\n dimension=1, # 按体重的值进行颜色映射\\n range_color=[\\"#d94e5d\\", \\"#eac736\\", \\"#50a3ba\\"], # 配置颜色范围\\n ),\\n)\\n\\n# 渲染生成图表\\nscatter.render()
代码解析
Scatter()
创建一个散点图对象,后续的配置和数据添加都将在此对象上进行。height
:我们用 random.randint(150, 200)
随机生成 50 个介于 150cm 到 200cm 之间的身高数据。weight
:体重是根据身高生成的。假设体重大致与身高成正比,h * 0.5
是体重与身高的比例,随机加上一个范围在 10 到 20 之间的偏差,使得数据看起来更自然。add_xaxis()
:将 height
数据作为 X 轴的值传入。add_yaxis()
:将 weight
数据作为 Y 轴的值传入,并设置点的大小为 8,颜色为 #ff7f50
(一种橙色)。title_opts
:设置图表的标题为“身高与体重的关系”。xaxis_opts
和 yaxis_opts
:分别设置 X 轴和 Y 轴的名称,并调整名称的位置。tooltip_opts
:配置鼠标悬浮时的提示框,显示身高和体重的具体数值。visualmap_opts
:根据体重值设置颜色映射,从红色到蓝色,体重越大,颜色越接近蓝色。render()
方法将图表渲染到一个 HTML 文件中,这样我们可以在浏览器中查看该图表。展示效果
生成的散点图会展示 50 个身高与体重数据点,其中:
通过 Pyecharts,我们可以快速绘制出身高与体重之间的关系散点图。该图表不仅直观地展示了数据点之间的相关性,还通过颜色映射、交互提示等增强了可读性和易用性。使用 Pyecharts 的散点图,不仅可以用于类似的线性数据分析,还可以扩展到多维度数据的可视化分析中。
当我们掌握了各种图表的基本使用方法后,接下来一个非常重要的任务就是将这些图表有效地集成到网页中,展示数据的可视化效果。Pyecharts 提供了非常方便的功能,让我们能够将图表生成 HTML 文件,并嵌入到网页中进行展示。通过将图表集成到网页,用户不仅能够与数据进行互动,还能够获得更加直观、动态的展示效果。
在接下来的内容中,我们将详细介绍如何将多个图表(如柱状图、折线图、散点图等)融合到一个网页中,并通过 HTML 和 JavaScript 来增强页面的交互性和用户体验。通过这种方式,你可以将不同类型的图表展示在同一页面上,利用 Pyecharts 提供的丰富配置选项,轻松实现数据可视化的多样性和灵活性。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page\\nfrom pyecharts import options as opts\\nimport random\\n\\n# 创建柱状图\\nbar = Bar()\\nbar.add_xaxis([\\"A\\", \\"B\\", \\"C\\", \\"D\\", \\"E\\"])\\nbar.add_yaxis(\\"类别1\\", [random.randint(10, 100) for _ in range(5)], color=\\"#d94e5d\\")\\nbar.add_yaxis(\\"类别2\\", [random.randint(10, 100) for _ in range(5)], color=\\"#50a3ba\\")\\nbar.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"柱状图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"类别\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"值\\"),\\n)\\n\\n# 创建折线图\\nline = Line()\\nline.add_xaxis([\\"Jan\\", \\"Feb\\", \\"Mar\\", \\"Apr\\", \\"May\\"])\\nline.add_yaxis(\\"销售额\\", [random.randint(100, 500) for _ in range(5)], color=\\"#ff7f50\\")\\nline.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"折线图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"月份\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"销售额\\"),\\n)\\n\\n# 创建饼图\\npie = Pie()\\npie.add(\\"产品占比\\", [(\\"产品A\\", 40), (\\"产品B\\", 30), (\\"产品C\\", 20), (\\"产品D\\", 10)])\\npie.set_global_opts(title_opts=opts.TitleOpts(title=\\"饼图示例\\"))\\n\\n# 创建散点图\\nscatter = Scatter()\\nx_data = [random.randint(1, 100) for _ in range(30)]\\ny_data = [random.randint(1, 100) for _ in range(30)]\\nscatter.add_xaxis(x_data)\\nscatter.add_yaxis(\\"散点数据\\", y_data, symbol_size=8, color=\\"#ff7f50\\")\\nscatter.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"散点图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"X轴\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"Y轴\\"),\\n)\\n\\n# 使用 Page 将多个图表放在一个页面中\\npage = Page()\\npage.add(bar, line, pie, scatter)\\n\\n# 渲染页面到 HTML 文件\\npage.render(\\"combined_chart.html\\")\\n\\nprint(\\"所有图表已合并到 combined_chart.html 文件中。\\")
通过执行这段代码,最终会生成一个名为 combined_chart.html
的文件。打开该文件后,你将看到一个网页,包含四个图表(柱状图、折线图、饼图、散点图),它们将呈现在同一个页面中,用户可以浏览并查看不同图表的数据。通过 Pyecharts 提供的 Page
类,我们可以方便地将多个图表集成到一个 HTML 页面中进行展示,提升数据展示的效果和用户体验。
在很多场景下,我们需要根据各个图表的具体情况来进行拖拽式的展示,在这里,pyecharts 同样提供了一个拖拽式的功能。Save Config 按钮就是用来保存拖拽后的样式的。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page\\nfrom pyecharts import options as opts\\nimport random\\n\\n# 创建柱状图\\nbar = Bar(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"400px\\"))\\nbar.add_xaxis([\\"A\\", \\"B\\", \\"C\\", \\"D\\", \\"E\\"])\\nbar.add_yaxis(\\"类别1\\", [random.randint(10, 100) for _ in range(5)], color=\\"#d94e5d\\")\\nbar.add_yaxis(\\"类别2\\", [random.randint(10, 100) for _ in range(5)], color=\\"#50a3ba\\")\\nbar.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"柱状图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"类别\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"值\\"),\\n)\\n\\n# 创建折线图\\nline = Line(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"400px\\"))\\nline.add_xaxis([\\"Jan\\", \\"Feb\\", \\"Mar\\", \\"Apr\\", \\"May\\"])\\nline.add_yaxis(\\"销售额\\", [random.randint(100, 500) for _ in range(5)], color=\\"#ff7f50\\")\\nline.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"折线图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"月份\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"销售额\\"),\\n)\\n\\n# 创建饼图\\npie = Pie(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"400px\\"))\\npie.add(\\"产品占比\\", [(\\"产品A\\", 40), (\\"产品B\\", 30), (\\"产品C\\", 20), (\\"产品D\\", 10)])\\npie.set_global_opts(title_opts=opts.TitleOpts(title=\\"饼图示例\\"))\\n\\n# 创建散点图\\nscatter = Scatter(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"400px\\"))\\nx_data = [random.randint(1, 100) for _ in range(30)]\\ny_data = [random.randint(1, 100) for _ in range(30)]\\nscatter.add_xaxis(x_data)\\nscatter.add_yaxis(\\"散点数据\\", y_data, symbol_size=8, color=\\"#ff7f50\\")\\nscatter.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"散点图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"X轴\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"Y轴\\"),\\n)\\n\\n# 使用 Page 将多个图表放在一个页面中,调整为左右布局\\npage = Page(layout=Page.DraggablePageLayout, page_title=\\"综合数据展示\\")\\npage.add(bar, line, pie, scatter)\\n\\n# 渲染页面到 HTML 文件\\npage.render(\\"combined_chart.html\\")\\n\\nprint(\\"所有图表已合并到 combined_chart.html 文件中。\\")
这样会形成一个可以拖拽式的网页,拖拽完成之后点击左上角的 Save Config 按钮,可以得到一个 chart_config.json 文件。然后写一个新的脚本,运行下面的代码,即可将原有的 html 文件(\'combined_chart.html\')和 chart_config.json 文件一起生成新的 html 文件(\'combined_chart_resize.html\')并且符合拖拽后的样式。
from pyecharts.charts import Page\\n# 在生成的config上,重新生成chart\\npage = Page()\\npage.save_resize_html(\'combined_chart.html\', cfg_file=\'chart_config.json\', dest=\'combined_chart_resize.html\')
通过 Page
的 DraggablePageLayout
布局,图表会以拖拽的方式自动排列。你可以通过手动调整页面上的每个图表位置。width=\\"50%\\"
表示每个图表将占据页面宽度的一半,因此两个图表将并排显示。height=\\"400px\\"
设置每个图表的高度为 400px,可以根据需要调整这个值。
在数据可视化的场景中,需要给这个页面增加一个标题,在这里,可以使用一个空的饼图来实现,也就是只需要展示标题而不需要展示饼图的数据。
from pyecharts.charts import Bar, Line, Pie, Scatter, Page\\nfrom pyecharts import options as opts\\nimport random\\n\\n# 创建饼图,只显示标题\\nbig_title = (\\n Pie(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"50px\\"))\\n .set_global_opts(\\n title_opts=opts.TitleOpts(\\n title=\\"数据可视化大屏\\",\\n title_textstyle_opts=opts.TextStyleOpts(\\n font_size=40, # 调整字体大小\\n font_weight=\\"bold\\", # 可选:字体加粗\\n color=\\"#000000\\" # 可选:字体颜色\\n ),\\n )\\n )\\n)\\n\\n# 创建柱状图\\nbar = Bar(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"300px\\"))\\nbar.add_xaxis([\\"A\\", \\"B\\", \\"C\\", \\"D\\", \\"E\\"])\\nbar.add_yaxis(\\"类别1\\", [random.randint(10, 100) for _ in range(5)], color=\\"#d94e5d\\")\\nbar.add_yaxis(\\"类别2\\", [random.randint(10, 100) for _ in range(5)], color=\\"#50a3ba\\")\\nbar.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"柱状图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"类别\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"值\\"),\\n)\\n\\n# 创建折线图\\nline = Line(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"300px\\"))\\nline.add_xaxis([\\"Jan\\", \\"Feb\\", \\"Mar\\", \\"Apr\\", \\"May\\"])\\nline.add_yaxis(\\"销售额\\", [random.randint(100, 500) for _ in range(5)], color=\\"#ff7f50\\")\\nline.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"折线图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"月份\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"销售额\\"),\\n)\\n\\n# 创建饼图\\npie = Pie(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"300px\\"))\\npie.add(\\"产品占比\\", [(\\"产品A\\", 40), (\\"产品B\\", 30), (\\"产品C\\", 20), (\\"产品D\\", 10)])\\npie.set_global_opts(title_opts=opts.TitleOpts(title=\\"饼图示例\\"))\\n\\n# 创建散点图\\nscatter = Scatter(init_opts=opts.InitOpts(width=\\"50%\\", height=\\"300px\\"))\\nx_data = [random.randint(1, 100) for _ in range(30)]\\ny_data = [random.randint(1, 100) for _ in range(30)]\\nscatter.add_xaxis(x_data)\\nscatter.add_yaxis(\\"散点数据\\", y_data, symbol_size=8, color=\\"#ff7f50\\")\\nscatter.set_global_opts(\\n title_opts=opts.TitleOpts(title=\\"散点图示例\\"),\\n xaxis_opts=opts.AxisOpts(name=\\"X轴\\"),\\n yaxis_opts=opts.AxisOpts(name=\\"Y轴\\"),\\n)\\n\\n# 使用 Page 将多个图表放在一个页面中,调整为左右布局\\npage = Page(layout=Page.DraggablePageLayout, page_title=\\"综合数据展示\\")\\npage.add(big_title, bar, line, pie, scatter)\\n\\n# 渲染页面到 HTML 文件\\npage.render(\\"combined_chart.html\\")\\n\\nprint(\\"所有图表已合并到 combined_chart.html 文件中。\\")
通过这样的方式,可以呈现出标题的样式,然后再使用拖拽式的方法,来实现最终的数据可视化看板呈现。下图就是一个完成的数据可视化看板样式。
在这篇文章中,我们深入探讨了 Pyecharts —— 一款简单易用、功能强大的 Python 数据可视化库。通过直观的图表和丰富的自定义选项,Pyecharts 不仅能够帮助我们快速生成各类图表,还能够通过精细的配置满足不同场景的需求。从基础的柱状图、折线图到复杂的地理坐标系图、3D 曲面图,Pyecharts 都能轻松驾驭,展示数据的独特魅力。作为 Python 生态中的重要可视化工具,Pyecharts 的灵活性与易用性使得它在数据分析、报表生成、科研展示等领域得到了广泛的应用。而通过与前端技术结合,它还可以将图表嵌入到网页中,让数据的可视化更具交互性和视觉冲击力。
无论是数据分析师、科学家,还是开发者、产品经理,掌握 Pyecharts 都能让你在数据可视化的道路上走得更远。随着数据量的不断增长,如何用图表讲述一个清晰、有说服力的故事已经成为我们不断追求的目标。而 Pyecharts,正是一个帮助我们实现这一目标的得力助手。希望望这篇文章能够为你打开数据可视化的新世界。如果你还没有开始使用 Pyecharts,今天就可以动手试试。通过不断尝试和探索,你会发现更多有趣的图表效果,进而提升你对数据的理解和呈现能力。
数据可视化不仅仅是让数字“好看”,更是让数据“讲故事”。在这个信息爆炸的时代,掌握数据的可视化语言,正是与世界对话的钥匙。感谢阅读,也希望你在 Pyecharts 的世界里,能够享受创作的乐趣,发现更多无限的可能性。
","description":"好看的数据可视化的图片是怎么样做的? 数学人生的回答\\n\\n数学人生:用 pyecharts 让数据可视化更生动\\nPyecharts 背景介绍\\n\\n在当今大数据时代,数据可视化已经成为信息表达的重要方式。无论是商业分析、科研探索,还是 Web 应用展示,直观的图表总能让数据讲述更生动的故事。而在 Python 生态中,Pyecharts 是一个强大且易用的数据可视化库,它基于 ECharts,提供了丰富的可视化组件,支持折线图、柱状图、饼图、地图等多种图表类型,且能够方便地集成到 Web 端和 Jupyter Notebook 中。\\n\\n对于想要用 Python…","guid":"https://www.zhihu.com/question/26620885/answer/125700643246","author":"数学人生","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-16T09:41:01.070Z","media":[{"url":"https://picx.zhimg.com/v2-fd58680e7d2cc3e1b25eca90df40645a.jpg","type":"photo","width":1016,"height":1120,"blurhash":"LHS5zX^P~W-:~1NatT%1EKs.xbNa"},{"url":"https://pica.zhimg.com/v2-ca1b949f86df9ce9173f21d6643ba10a.jpg","type":"photo","width":1686,"height":956,"blurhash":"LZO|;1EJf7%M~WWAazt7?H%3oeWB"},{"url":"https://picx.zhimg.com/v2-053d91e1640a5c4bf2e477d6bcbfe033.jpg","type":"photo","width":1750,"height":932,"blurhash":"LvP7FUE3M|Rn~ot5Rkt6xt%Kxsof"},{"url":"https://picx.zhimg.com/v2-ffc96fafa42dd0a4c7437450f9bc1bb8.jpg","type":"photo","width":1754,"height":938,"blurhash":"LjRfg{obnN-o?wW=X9kDsmt6kDWX"},{"url":"https://pic1.zhimg.com/v2-733e0c384a9ce87a0168ab43893bd1e6.jpg","type":"photo","width":1760,"height":948,"blurhash":"LBS?DV_3Rj~q?bRjRjt7IUM{Rjt7"},{"url":"https://pic1.zhimg.com/v2-258130ce07b46dd97b39ee56cd41f387.jpg","type":"photo","width":1758,"height":952,"blurhash":"LBS$r%_3of~q?bM{WBt7IUM{ayt7"},{"url":"https://pic1.zhimg.com/v2-fc3c67e3d14095a2c8ed22d3a398e6b8.jpg","type":"photo","width":1510,"height":934,"blurhash":"LvSr$3%%RixAt8WAWBfkXTV?V?o$"},{"url":"https://picx.zhimg.com/v2-13c48aa6a42919467f1bbee9fb99ebc0.jpg","type":"photo","width":1534,"height":932,"blurhash":"LvSr$3yGRixAt8V@WBj[XUV?V?kY"},{"url":"https://picx.zhimg.com/v2-cd28f6caa6e3a56147cc684f63e0e042.jpg","type":"photo","width":1736,"height":1036,"blurhash":"LAS?DU-.D$^+_4S6kExvIAROROjE"},{"url":"https://pic1.zhimg.com/v2-b4edd6de2d466814bed7d3cfbe7c3855.jpg","type":"photo","width":1824,"height":1080,"blurhash":"LAS?DU-.D$?b_4R.W?tRIURPRPjE"},{"url":"https://picx.zhimg.com/v2-025f2d0631962a5cd324162c3ac135f2.jpg","type":"photo","width":1338,"height":1482,"blurhash":"LERysg^+kW%3D%xFWVRP_MWBM{kW"},{"url":"https://picx.zhimg.com/v2-63e5f49c3a2446687d9c1aaa136f0936.jpg","type":"photo","width":1322,"height":1480,"blurhash":"LQR:HE-.~qp1IAs*?bNNwOjaSvW:"},{"url":"https://picx.zhimg.com/v2-2d94e288c46a3ab2f46b6634f01cce72.jpg","type":"photo","width":1540,"height":1494,"blurhash":"LFRp2r?a-;%MIBj?x[Rj_MbIMyWo"},{"url":"https://picx.zhimg.com/v2-3c9c7add43929753a2966ecea1071a01.jpg","type":"photo","width":2984,"height":1498,"blurhash":"LVQch$%L~qby-qWFE0sjo|kBr_WE"},{"url":"https://picx.zhimg.com/v2-8213d7d9222e2e7e910060759a6eacc1.jpg","type":"photo","width":1544,"height":1484,"blurhash":"LAR:E8yCXR~WIBD%R*n%%zIUIASz"},{"url":"https://picx.zhimg.com/v2-b6fbd1174db7355a77754d89aa959f85.jpg","type":"photo","width":2990,"height":1410,"blurhash":"LHRMYs?b_N?c?co#4-xU.Rxaixbc"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何使用R语言绘制双因子模型","url":"https://zhuanlan.zhihu.com/p/30587615873","content":"01 前言大家好,本篇推文是双因子模型系列推文的第二篇,上一篇推文我们对基本概念及文章介绍做了一个简单的论述,详情可见 《双因子模型(bi-factor model)的简介及文章介绍》 。本篇推文我们将会介绍如何使用R语言绘制双因子模型。在介绍之前,我们将会先介绍如何使用R语言绘制普通的验证性因子分析模型图,这样对比才更方便看出来差异。 [图片] 02 使用R语言绘制普通的 验证性因子分析实际上,在之前的推文中,我们已经介绍过如何使用…","description":"01 前言大家好,本篇推文是双因子模型系列推文的第二篇,上一篇推文我们对基本概念及文章介绍做了一个简单的论述,详情可见 《双因子模型(bi-factor model)的简介及文章介绍》 。本篇推文我们将会介绍如何使用R语言绘制双因子模型。在介绍之前,我们将会先介绍如何使用R语言绘制普通的验证性因子分析模型图,这样对比才更方便看出来差异。 [图片] 02 使用R语言绘制普通的 验证性因子分析实际上,在之前的推文中,我们已经介绍过如何使用…","guid":"https://zhuanlan.zhihu.com/p/30587615873","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-16T07:12:22.484Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"置换检验(Permutation tests)的原理和R语言实现","url":"https://zhuanlan.zhihu.com/p/30585929254","content":"Vol.1 方法介绍 了解什么是置换检验,以及我们为什么要使用置换检验这是我们学会使用置换检验的前提。在我们最常见的统计中,似乎不太涉及到置换检验(其实置换检验也很常见,杠精勿喷),大家常用的统计方法,例如T检验,方差分析等,这些都属于参数检验的范畴(参数检验:假设数据符合特定分布(如正态分布),适用于比例或均值比较)。而置换检验是一种非参数检验方法(非参数检验:不要求数据符合特定分布,适用于中位数或秩…","description":"Vol.1 方法介绍 了解什么是置换检验,以及我们为什么要使用置换检验这是我们学会使用置换检验的前提。在我们最常见的统计中,似乎不太涉及到置换检验(其实置换检验也很常见,杠精勿喷),大家常用的统计方法,例如T检验,方差分析等,这些都属于参数检验的范畴(参数检验:假设数据符合特定分布(如正态分布),适用于比例或均值比较)。而置换检验是一种非参数检验方法(非参数检验:不要求数据符合特定分布,适用于中位数或秩…","guid":"https://zhuanlan.zhihu.com/p/30585929254","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-16T07:00:18.036Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"5分钟连接Rstuidio与Github","url":"https://zhuanlan.zhihu.com/p/1884504732904686275","content":"本文前提与目的前提:拥有github账号,已经下载好R,Rstudio与R包devtools目的:学会用Rstudio从Github克隆项目,将本地项目上传到github远程仓库参考:Let’s Git started | Happy Git and GitHub for the useR 注意:非R语言代码的命令在Rstudio的terminal输入即可,如图: [图片] 连接Rstuido与Github尽管我在几年前便已经学习了如何把Rstuido与GitHub连接,把本地project推送到远程仓库,但推送过程总是出现些不明不白的bug,参考 Let’s Git star…","description":"本文前提与目的前提:拥有github账号,已经下载好R,Rstudio与R包devtools目的:学会用Rstudio从Github克隆项目,将本地项目上传到github远程仓库参考:Let’s Git started | Happy Git and GitHub for the useR 注意:非R语言代码的命令在Rstudio的terminal输入即可,如图: [图片] 连接Rstuido与Github尽管我在几年前便已经学习了如何把Rstuido与GitHub连接,把本地project推送到远程仓库,但推送过程总是出现些不明不白的bug,参考…","guid":"https://zhuanlan.zhihu.com/p/1884504732904686275","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T23:27:52.254Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何有效的学习garch模型?-泛函-seven的回答:如果是刚开始学金融风险管理,可以从 GARCH(1,1) 入手,理解其基本概念和应用,逐步深入研究更复杂的波动率模型(...","url":"https://www.zhihu.com/question/299135951/answer/125303099802","content":"如何有效的学习garch模型?如果是刚开始学金融风险管理,可以从 GARCH(1,1) 入手,理解其基本概念和应用,逐步深入研究更复杂的波动率模型(如 EGARCH、TGARCH)。
GARCH 模型是金融计量经济学中的重要工具,因此需要先掌握相关基础知识:
时间序列分析基础:掌握 AR、MA、ARMA 模型。
条件异方差(ARCH/GARCH)概念:理解金融数据的波动性聚集特征及 GARCH 的建模思路。
推荐教材/资料:
《时间序列分析》——James D. Hamilton(偏理论)
《金融计量经济学》——李子奈(国内经典)
《Analysis of Financial Time Series》——Ruey S. Tsay(适合实践)
GARCH(1,1) 模型的核心公式:
其中:
从 ARCH(1) 开始理解,再扩展到 GARCH,并理解其稳定性、参数约束(如 α1+β1<1保证方差平稳)。
理论学习后,建议使用 Python 或 R 进行实操,以加深理解。
arch
或 statsmodels
库rugarch
包import numpy as np\\nimport pandas as pd\\nfrom arch import arch_model\\n\\n# 生成模拟时间序列数据\\nnp.random.seed(42)\\nreturns = np.random.normal(0, 1, 1000) # 假设资产收益率\\n\\n# 建立 GARCH(1,1) 模型\\nmodel = arch_model(returns, vol=\'Garch\', p=1, q=1)\\nres = model.fit(disp=\'off\')\\n\\n# 输出拟合结果\\nprint(res.summary())\\n
可以尝试用实际金融数据,如股票或外汇市场数据,进行 GARCH 建模。
在实际金融市场中,GARCH 模型常用于:
资产定价:衡量市场波动率,优化投资组合
风险管理:VaR(风险价值)计算
金融衍生品定价:期权波动率预测
可以阅读以下论文或报告:
Engle (1982):提出 ARCH 模型
Bollerslev (1986):GARCH 模型基础论文
RiskMetrics(J.P. Morgan):金融机构如何应用 GARCH
深入扩展
GARCH 的变体:如 EGARCH(指数 GARCH)、TGARCH(阈值 GARCH)、GJR-GARCH(捕捉不对称效应)","description":"如何有效的学习garch模型? 泛函-seven的回答\\n\\n\\n如果是刚开始学金融风险管理,可以从 GARCH(1,1) 入手,理解其基本概念和应用,逐步深入研究更复杂的波动率模型(如 EGARCH、TGARCH)。\\n\\nGARCH 模型是金融计量经济学中的重要工具,因此需要先掌握相关基础知识:\\n\\n时间序列分析基础:掌握 AR、MA、ARMA 模型。\\n\\n条件异方差(ARCH/GARCH)概念:理解金融数据的波动性聚集特征及 GARCH 的建模思路。\\n\\n推荐教材/资料:\\n\\n《时间序列分析》——James D. Hamilton(偏理论)\\n\\n《金融计量经济学》——李子奈(国内经典)\\n\\n《Analys…","guid":"https://www.zhihu.com/question/299135951/answer/125303099802","author":"泛函-seven","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T22:44:33.730Z","media":[{"url":"https://www.zhihu.com/equation?tex=%5Csigma_t%5E2+%3D+%5Calpha_0+%2B+%5Calpha_1+%5Cepsilon_%7Bt-1%7D%5E2+%2B+%5Cbeta_1+%5Csigma_%7Bt-1%7D%5E2","type":"photo"},{"url":"https://www.zhihu.com/equation?tex=%5Csigma_t%5E2","type":"photo"},{"url":"https://www.zhihu.com/equation?tex=%5Cepsilon_%7Bt-1%7D%5E2","type":"photo"},{"url":"https://www.zhihu.com/equation?tex=%5Calpha_0","type":"photo"},{"url":"https://www.zhihu.com/equation?tex=%5Calpha_1","type":"photo"},{"url":"https://www.zhihu.com/equation?tex=%5Cbeta_1","type":"photo"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想请问一下,安装‘org.Hs.eg.db’时出现以下情况是为什么,该怎么解决?","url":"https://zhuanlan.zhihu.com/p/30524883883","content":"安装源码包‘org.Hs.eg.db’ 试开URL’https://bioconductor.org/packages/3.20/data/annotation/src/contrib/org.Hs.eg.db_3.20.0.tar.gz \' Content type \'application/x-gzip\' length 98233708 bytes (93.7 MB) downloaded 75.0 MB Error in download.file(url, destfile, method, mode = \\"wb\\", ...) : download from \'https://bioconductor.org/packages/3.20/data/annotation/src/contrib/org.Hs.eg.db_3.20.0.tar.gz \' failed 此外: 警告信息: 1: In download.file(url, destfile, method, mode = \\"wb\\", ...) : downloaded length 78642700 != reported length 98233708 2: In downl…","description":"安装源码包‘org.Hs.eg.db’ 试开URL’https://bioconductor.org/packages/3.20/data/annotation/src/contrib/org.Hs.eg.db_3.20.0.tar.gz \' Content type \'application/x-gzip\' length 98233708 bytes (93.7 MB) downloaded 75.0 MB Error in download.file(url, destfile, method, mode = \\"wb…","guid":"https://zhuanlan.zhihu.com/p/30524883883","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T17:05:56.870Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在自学R语言,如何制定合理的计划?以及怎么学习能更好地掌握?-三千万的回答:建议关注openscience(公众号,b站有去年的录播),胡老师这两年把他在南师大教r...","url":"https://www.zhihu.com/question/13048891343/answer/124954769496","content":"在自学R语言,如何制定合理的计划?以及怎么学习能更好地掌握?
多变量 GARCH:如 DCC-GARCH(动态条件相关 GARCH),用于分析资产间相关性
建议关注openscience(公众号,b站有去年的录播),胡老师这两年把他在南师大教r语言的课程分享到线上(b站录播)并且直播(加入课程群,每周发链接,完全免费,伟大的开源精神)。
另外,我觉得看直播和看课真是两码子事,跟直播一周一节,一学期过去突然就会了(当然后续自己多动手应用才是“学会”的关键)。看课……反正我是看不下去sry…
","description":"在自学R语言,如何制定合理的计划?以及怎么学习能更好地掌握? 三千万的回答\\n\\n\\n建议关注openscience(公众号,b站有去年的录播),胡老师这两年把他在南师大教r语言的课程分享到线上(b站录播)并且直播(加入课程群,每周发链接,完全免费,伟大的开源精神)。\\n\\n另外,我觉得看直播和看课真是两码子事,跟直播一周一节,一学期过去突然就会了(当然后续自己多动手应用才是“学会”的关键)。看课……反正我是看不下去sry…","guid":"https://www.zhihu.com/question/13048891343/answer/124954769496","author":"三千万","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T07:59:53.391Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言提示“系统计算上是奇异的,倒条件数=1.14255e-25”该怎么解决?-278973的回答:我终于解决了!主要原因是因为变量太多了插补不了,可以进行以下操作减少变...","url":"https://www.zhihu.com/question/506515262/answer/124947569995","content":"R语言提示“系统计算上是奇异的,倒条件数=1.14255e-25”该怎么解决?我终于解决了!主要原因是因为变量太多了插补不了,可以进行以下操作减少变量:
1.检查数据的共线性,进行PCA降维(其他方法也可以),检查的代码,结果越接近1或-1说明相关性越高:cor_matrix <- cor(df, use = \\"complete.obs\\")
print(cor_matrix)
2.直接删除大概率不重要的变量
我删掉了10个变量以后数据是一共1500行*37列,顺利插补
","description":"R语言提示“系统计算上是奇异的,倒条件数=1.14255e-25”该怎么解决? 278973的回答\\n\\n\\n我终于解决了!主要原因是因为变量太多了插补不了,可以进行以下操作减少变量:\\n\\n1.检查数据的共线性,进行PCA降维(其他方法也可以),检查的代码,结果越接近1或-1说明相关性越高:cor_matrix <- cor(df, use = \\"complete.obs\\")\\nprint(cor_matrix)\\n\\n2.直接删除大概率不重要的变量\\n\\n我删掉了10个变量以后数据是一共1500行*37列,顺利插补","guid":"https://www.zhihu.com/question/506515262/answer/124947569995","author":"278973","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T07:48:25.914Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言 | 配色版翻转","url":"https://zhuanlan.zhihu.com/p/30400549398","content":"paletteer包做为配色包的相关说明: R语言 | 配色包 paletteer包 - 知乎 主要函数: v + geom_contour_filled(aes(fill = after_stat(level_low)))+ scale_fill_paletteer_c(\\"ggthemes::Red-Blue-White Diverging\\", direction = -1) 加载数据library(ggplot2) library(paletteer) library(tidyverse) data(faithfuld) head(faithfuld) [图片] 2. 基本等高线绘制v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) v + geom_c…","description":"paletteer包做为配色包的相关说明: R语言 | 配色包 paletteer包 - 知乎 主要函数: v + geom_contour_filled(aes(fill = after_stat(level_low)))+ scale_fill_paletteer_c(\\"ggthemes::Red-Blue-White Diverging\\", direction = -1) 加载数据library(ggplot2) library(paletteer) library(tidyverse) data(faithfuld) head(faithfuld…","guid":"https://zhuanlan.zhihu.com/p/30400549398","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-15T03:25:55.654Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何学习 R 绘图?-被炸熟的虾的回答:首先,你可以从基础语法学起,像ggplot2,它主张模块间协调分工,有数据、映射、几何对象等部件。先学会用ggplot()创建图...","url":"https://www.zhihu.com/question/23566221/answer/124728280520","content":"如何学习 R 绘图?首先,你可以从基础语法学起,像ggplot2,它主张模块间协调分工,有数据、映射、几何对象等部件。先学会用ggplot()创建图形对象,再通过geomxxx()等添加图层,比如geompoint()画散点图。
使用iris数据绘制散点图,Petal.Length列的数据会被映射到图层的x轴,Petal.Width列会被映射到y轴。设置散点颜色为红色,半透明,尺寸为“2”,然后再绘制一条拟合直线,不显示置信区间。
ggplot(data = iris, mapping = aes(x = Petal.Length,y = Petal.Width)) +\\n geom_point(size = 2,alpha = 0.5,col =\\"red\\") +\\n geom_smooth(method = \\"lm\\",se = F)
接着,参考一些绘图模板和示例。比如https://www.r-graph-gallery.com/
包含基础和进阶绘图,还有测试数据,能让你边看边实践。
另外,多留意一些绘图小Tips和文献图片复现练习:
图片复现
作为临床医生或医学研究者,我们经常面临这样的场景:需要预测某位2型糖尿病患者在未来5年内是否会发生心血管事件。单纯依靠经验判断往往不够精确,而传统的单一模型又难以捕捉复杂的非线性关系。
集成学习(Ensemble Learning)恰如其分地解决了这一难题。它通过组合多个基础模型(如决策树)的预测结果,显著提高了预测准确性。就像医学上的\\"多学科会诊\\",集成学习汇集了\\"多个专家\\"的意见,形成更可靠的判断。
本教程,我们将使用R语言实现一个简单的集成学习模型,预测糖尿病患者的心血管风险。
# 加载必要的包\\nlibrary(randomForest) # 随机森林算法\\nlibrary(caret) # 用于模型训练和评估\\nlibrary(pROC) # 用于ROC曲线绘制\\nlibrary(ggplot2) # 数据可视化\\n\\n# 加载并查看Pima印第安人糖尿病数据集\\ndata(PimaIndiansDiabetes, package = \\"mlbench\\")\\nhead(PimaIndiansDiabetes)\\n\\n# 数据预处理\\n# 将数据分为训练集和测试集\\nset.seed(123) # 设置随机种子,确保结果可重复\\ntrainIndex <- createDataPartition(PimaIndiansDiabetes$diabetes, p = 0.7, list = FALSE)\\ntrainData <- PimaIndiansDiabetes[trainIndex, ]\\ntestData <- PimaIndiansDiabetes[-trainIndex, ]\\n\\n# 训练随机森林模型\\nrf_model <- randomForest(diabetes ~ ., \\n data = trainData, \\n ntree = 500, # 森林中的树数量\\n importance = TRUE) # 计算变量重要性\\n\\n# 打印模型摘要\\nprint(rf_model)
运行上述代码,我们可以看到随机森林模型的基本信息,包括错误率、混淆矩阵等。这是集成学习的第一步,我们已经成功训练了一个包含500棵决策树的\\"森林\\"。
在医学研究中,不要盲目追求模型的整体准确率!对于罕见疾病预测,模型可能会表现出很高的准确率,但实际上可能只是简单地将所有样本预测为多数类。请务必关注敏感性、特异性和AUC等更全面的评价指标。
在医学研究中,我们常常需要处理高维数据,如基因表达谱或多模态影像特征。这些数据容易导致单一模型过拟合,即模型在训练数据上表现极佳,但在新数据上预测能力差。
Bagging(Bootstrap Aggregating)和随机森林是解决这一问题的有效方法。Bagging通过对训练数据进行有放回抽样,训练多个基础模型;而随机森林在此基础上,还在每个节点随机选择特征子集,进一步增加了模型的多样性。
下面,我们看下如何实现这两种方法,并比较它们的性能:
# Bagging实现\\nlibrary(ipred) # 用于bagging\\n\\n# 训练Bagging模型\\nbagging_model <- bagging(diabetes ~ ., \\n data = trainData, \\n nbagg = 100, # 基础模型数量\\n coob = TRUE) # 使用袋外样本估计错误\\n\\n# 随机森林模型(已在上一章训练)\\n\\n# 在测试集上评估两个模型\\nbagging_pred <- predict(bagging_model, testData)\\nrf_pred <- predict(rf_model, testData)\\n\\n# 计算准确率\\nbagging_accuracy <- sum(bagging_pred == testData$diabetes) / nrow(testData)\\nrf_accuracy <- sum(rf_pred == testData$diabetes) / nrow(testData)\\n\\n# 计算AUC\\nbagging_prob <- predict(bagging_model, testData, type = \\"prob\\")\\nrf_prob <- predict(rf_model, testData, type = \\"prob\\")\\n\\nbagging_roc <- roc(testData$diabetes, as.numeric(bagging_prob[,2]))\\nrf_roc <- roc(testData$diabetes, as.numeric(rf_prob[,2]))\\n\\n# 绘制ROC曲线比较\\nplot(bagging_roc, col = \\"blue\\", main = \\"ROC曲线比较\\")\\nlines(rf_roc, col = \\"red\\")\\nlegend(\\"bottomright\\", legend = c(paste(\\"Bagging, AUC =\\", round(auc(bagging_roc), 3)),\\n paste(\\"Random Forest, AUC =\\", round(auc(rf_roc), 3))),\\n col = c(\\"blue\\", \\"red\\"), lwd = 2)
运行上述代码,我们可以看到Bagging和随机森林在测试集上的ROC曲线比较。通常,随机森林会表现得更好,因为它引入了更多的随机性,减少了基础模型间的相关性。运行代码输出图片如下:
医学数据中的类别不平衡问题可能导致集成模型偏向多数类。解决方法包括:1) 使用 sampsize 参数平衡各类别样本数;2) 使用 classwt 参数为少数类赋予更高权重;3) 结合过采样/欠采样技术如SMOTE。不要忽视这个问题,否则模型在临床应用中可能会错过高风险患者!
在临床预测中,我们经常遇到这样的情况:某些患者的预后特别难以预测,常规模型总是对他们做出错误判断。Boosting算法正是为解决这类问题而生的。
与Bagging并行训练多个模型不同,Boosting采用序列训练方式,每个新模型都专注于纠正前面模型的错误。这就像医学专家会议上,后发言的专家会特别关注前面专家未能解决的疑难病例。
下面,我们将实现两种主流的Boosting算法:AdaBoost和梯度提升机(GBM):
# 加载必要的包\\nlibrary(adabag) # AdaBoost\\nlibrary(gbm) # 梯度提升机\\n\\n# 训练AdaBoost模型\\nadaboost_model <- boosting(diabetes ~ ., \\n data = trainData,\\n mfinal = 100) # 迭代次数\\n\\n# 训练GBM模型\\ngbm_model <- gbm(as.numeric(diabetes) - 1 ~ ., # GBM需要0/1响应变量\\n data = trainData,\\n distribution = \\"bernoulli\\", # 二分类问题\\n n.trees = 100, # 树的数量\\n interaction.depth = 3, # 树的深度\\n shrinkage = 0.1, # 学习率\\n cv.folds = 5) # 交叉验证折数\\n\\n# 确定最佳迭代次数\\nbest_iter <- gbm.perf(gbm_model, method = \\"cv\\")\\nprint(paste(\\"最佳迭代次数:\\", best_iter))\\n\\nggplot(data.frame(iterations, train_error), aes(x = iterations, y = train_error)) +\\n geom_line() +\\n geom_vline(xintercept = best_iter, linetype = \\"dashed\\", color = \\"red\\") +\\n labs(title = \\"GBM学习曲线\\",\\n x = \\"迭代次数\\",\\n y = \\"训练误差\\") +\\n theme_minimal()
运行上述代码,我们可以看到GBM的学习曲线,以及通过交叉验证确定的最佳迭代次数。这有助于我们理解模型的学习过程,并防止过拟合。代码输出如下图:
Boosting算法对异常值非常敏感!在医学数据中,异常值可能代表测量错误,也可能代表真实但罕见的临床情况。在应用Boosting前,务必进行异常值检测和处理,否则模型可能会过度关注这些异常情况,导致泛化能力下降。可以考虑使用稳健的预处理方法,如中位数填充或Winsorization。
在复杂的临床预测任务中,不同的机器学习算法往往各有所长。例如,随机森林可能擅长处理非线性关系,而逻辑回归则提供了良好的可解释性。堆叠集成(Stacking)允许我们结合多种算法的优势,构建更强大的预测模型。
堆叠集成的核心思想是:使用多个基础模型(称为第一层模型)进行预测,然后训练一个元模型(称为第二层模型)来组合这些预测结果。这就像医院里的多学科联合会诊,最终由主任医师整合各专科意见,做出最终诊断。
下面,我们将实现一个堆叠集成模型,结合随机森林、GBM和逻辑回归:
# 加载必要的包\\nlibrary(caretEnsemble) # 用于堆叠集成\\n\\n# 定义交叉验证方案\\nctrl <- trainControl(method = \\"cv\\", \\n number = 5,\\n savePredictions = \\"final\\",\\n classProbs = TRUE)\\n\\n# 定义基础模型列表\\nmodel_list <- caretList(\\n diabetes ~ .,\\n data = trainData,\\n trControl = ctrl,\\n methodList = c(\\"rf\\", \\"gbm\\", \\"glm\\") # 随机森林、GBM和逻辑回归\\n)\\n\\n# 查看各基础模型的性能\\nresults <- resamples(model_list)\\nsummary(results)\\n\\n# 训练堆叠集成模型(使用逻辑回归作为元模型)\\nstack_model <- caretStack(\\n model_list,\\n method = \\"glm\\",\\n metric = \\"Accuracy\\",\\n trControl = ctrl\\n)\\nperformance_df <- data.frame(Model = model_names, Accuracy = accuracies)\\nggplot(performance_df, aes(x = reorder(Model, Accuracy), y = Accuracy)) +\\n geom_bar(stat = \\"identity\\", fill = \\"steelblue\\") +\\n geom_text(aes(label = round(Accuracy, 3)), vjust = -0.3) +\\n labs(title = \\"各模型准确率比较\\",\\n x = \\"模型\\",\\n y = \\"准确率\\") +\\n theme_minimal() +\\n coord_flip()
运行上述代码,我们可以看到堆叠集成模型通常能够获得比单个基础模型更好的性能。这是因为它结合了不同模型的优势,减少了单个模型的局限性。
堆叠集成虽然强大,但计算成本高且模型复杂度增加!在医学研究中,如果简单模型(如单个随机森林)已经达到满意性能,或者样本量较小,堆叠集成可能带来的收益有限,甚至可能因过拟合而降低泛化能力。始终遵循奥卡姆剃刀原则:在同等条件下,选择最简单的模型。
在将集成学习模型应用于实际临床决策之前,我们需要全面评估模型性能,并确保模型能够为临床实践带来实际价值。这不仅包括统计学上的准确性,还包括临床上的实用性和可解释性。
在本章中,我们将探讨如何评估集成模型的临床价值,并将其整合到医疗决策支持系统中。
# 加载必要的包\\nlibrary(ROCR) # 用于模型评估\\nlibrary(rpart) # 用于决策树可视化\\nlibrary(rpart.plot) # 用于决策树可视化\\n\\n# 计算更全面的评估指标\\n# 使用之前训练的随机森林模型作为示例\\nrf_probs <- predict(rf_model, testData, type = \\"prob\\")[,2]\\npred <- prediction(rf_probs, testData$diabetes)\\n\\n# ROC曲线和AUC\\nperf_roc <- performance(pred, \\"tpr\\", \\"fpr\\")\\nauc <- performance(pred, \\"auc\\")@y.values[[1]]\\n\\n# 精确率-召回率曲线\\nperf_pr <- performance(pred, \\"prec\\", \\"rec\\")\\n\\n# 计算不同阈值下的性能指标\\n\\nfor (i in 1:length(thresholds)) {\\n threshold <- thresholds[i]\\n rf_class <- ifelse(rf_probs > threshold, \\"pos\\", \\"neg\\")\\n \\n # 计算混淆矩阵\\n cm <- table(Predicted = rf_class, Actual = testData$diabetes)\\n \\n # 计算各项指标\\n TP <- cm[\\"pos\\", \\"pos\\"]\\n TN <- cm[\\"neg\\", \\"neg\\"]\\n FP <- cm[\\"pos\\", \\"neg\\"]\\n FN <- cm[\\"neg\\", \\"pos\\"]\\n \\n metrics$Sensitivity[i] <- TP / (TP + FN)\\n metrics$Specificity[i] <- TN / (TN + FP)\\n metrics$PPV[i] <- TP / (TP + FP) # 阳性预测值\\n metrics$NPV[i] <- TN / (TN + FN) # 阴性预测值\\n metrics$F1_Score[i] <- 2 * TP / (2 * TP + FP + FN)\\n}\\n\\n# 可视化不同阈值下的性能指标\\nmetrics_long <- reshape2::melt(metrics, id.vars = \\"Threshold\\")\\n\\nggplot(metrics_long, aes(x = Threshold, y = value, color = variable)) +\\n geom_line() +\\n geom_point() +\\n labs(title = \\"不同阈值下的模型性能指标\\",\\n x = \\"预测概率阈值\\",\\n y = \\"指标值\\",\\n color = \\"性能指标\\") +\\n theme_minimal()\\n\\n# 提取并可视化单棵决策树,以增强可解释性\\n# 这对于向临床医生解释模型非常有用\\nsimple_tree <- rpart(diabetes ~ ., data = trainData, cp = 0.02)\\nrpart.plot(simple_tree, extra = 101, box.palette = \\"RdBu\\", shadow.col = \\"gray\\")\\n\\n# 计算特征重要性并可视化\\nrf_importance <- importance(rf_model)\\nrf_importance <- data.frame(\\n Feature = rownames(rf_importance),\\n Importance = rf_importance[, \\"MeanDecreaseGini\\"]\\n)\\n\\nggplot(rf_importance, aes(x = reorder(Feature, Importance), y = Importance)) +\\n geom_bar(stat = \\"identity\\", fill = \\"steelblue\\") +\\n labs(title = \\"随机森林特征重要性\\",\\n x = \\"特征\\",\\n y = \\"重要性得分 (MeanDecreaseGini)\\") +\\n theme_minimal() +\\n coord_flip()
运行上述代码,我们可以看到模型在不同阈值下的性能变化,以及特征重要性排序。这些信息对于临床应用至关重要,因为它们帮助医生理解模型的预测依据,并选择适合特定临床场景的决策阈值。
不要仅依赖统计指标评估模型的临床价值!一个AUC很高的模型可能在实际临床应用中毫无用处,如果它无法提供比现有临床评分系统更多的信息,或者其预测结果无法指导具体的临床干预。始终将模型评估与临床决策背景相结合,考虑模型是否能真正改变医疗决策和患者预后。
在本文中,我们探索了集成学习在临床预测中的应用,从基础的Bagging和随机森林,到高级的Boosting和堆叠集成。我们看到,通过组合多个基础模型,集成学习能够显著提高预测准确性,为临床决策提供更可靠的支持。
集成学习的优势在于:
未来的发展方向包括:
如果在实践中遇到问题,欢迎在评论区留言或私信咨询。我们将在后续文章中探讨更多医学统计和机器学习的高级主题。敬请期待!
本文使用 文章同步助手 同步","description":"基本分类器为c4.5决策树的adaboost算法的r语言实现? Codewar的回答\\n\\nR语言实战:集成学习决策树算法在临床预测中的应用与技巧\\n1. 临床预测的困境与集成学习的曙光\\n\\n作为临床医生或医学研究者,我们经常面临这样的场景:需要预测某位2型糖尿病患者在未来5年内是否会发生心血管事件。单纯依靠经验判断往往不够精确,而传统的单一模型又难以捕捉复杂的非线性关系。\\n\\n集成学习(Ensemble Learning)恰如其分地解决了这一难题。它通过组合多个基础模型(如决策树)的预测结果,显著提高了预测准确性。就像医学上的\\"多学科会诊\\",集成学习汇集了\\"多个专家\\"的意见…","guid":"https://www.zhihu.com/question/55833367/answer/124487043902","author":"Codewar","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-14T13:11:07.478Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【水文模型】R+VIC模型融合实践技术应用及未来气候变化模型预测","url":"https://zhuanlan.zhihu.com/p/30250852302","content":"VIC(Variable Infiltration Capacity)模型,即可变下渗容量模型,是由华盛顿大学、加州大学伯克利分校以及普林斯顿大学的研究者共同研制的大尺度分布式水文模型1。以下是其相关介绍1: 发展历程:最初由 Wood 等人提出思想,Stamm 等人构建了最初的 VIC 模型,把土壤分为两层,称为 VIC - 2L 模型。后来 Liang 等人针对 VIC - 2L 模型的缺点,将上层分出一个顶薄层,改进为 VIC - 3L 模型,目前应用的 VIC 模型通常是指 VIC -…","description":"VIC(Variable Infiltration Capacity)模型,即可变下渗容量模型,是由华盛顿大学、加州大学伯克利分校以及普林斯顿大学的研究者共同研制的大尺度分布式水文模型1。以下是其相关介绍1: 发展历程:最初由 Wood 等人提出思想,Stamm 等人构建了最初的 VIC 模型,把土壤分为两层,称为 VIC - 2L 模型。后来 Liang 等人针对 VIC - 2L 模型的缺点,将上层分出一个顶薄层,改进为 VIC - 3L 模型,目前应用的 VIC 模型通常是指 VIC -…","guid":"https://zhuanlan.zhihu.com/p/30250852302","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-14T08:26:26.379Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 高级数据管理","url":"https://zhuanlan.zhihu.com/p/30227463202","content":"写在前面在R语言中,高级数据管理可利用R的各种功能和包来高效地处理、分析和操作数据集。这包括数据清洗、数值运算、转换、汇总和合并等一系列复杂的数据操作。这里我们简单的演示几种例子。 5.1 函数5.1.1 数学函数 5.1.1.1 数学函数列表 [图片] 5.1.1.2 举例x <- sqrt(c(16,25,9)) x ## [1] 4 5 35.1.2 统计函数 5.1.2.1 函数列表 [图片] 5.1.2.2 数据的标准化这个功能在作图的时候常用,尤其是热图, 1)默认情况下就是对矩阵或数据框进行…","description":"写在前面在R语言中,高级数据管理可利用R的各种功能和包来高效地处理、分析和操作数据集。这包括数据清洗、数值运算、转换、汇总和合并等一系列复杂的数据操作。这里我们简单的演示几种例子。 5.1 函数5.1.1 数学函数 5.1.1.1 数学函数列表 [图片] 5.1.1.2 举例x <- sqrt(c(16,25,9)) x ## [1] 4 5 35.1.2 统计函数 5.1.2.1 函数列表 [图片] 5.1.2.2 数据的标准化这个功能在作图的时候常用,尤其是热图, 1)默认情况下就是对矩阵或数据框进行…","guid":"https://zhuanlan.zhihu.com/p/30227463202","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-14T06:58:40.349Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言利用ggplot2和ggrepel包绘制火山图无法显示显著基因是什么原因呢?-被炸熟的虾的回答:默认的参数配置下,标签很难显示完全!!DEG$Symbol <- rownames(DEG...","url":"https://www.zhihu.com/question/502651525/answer/124035341430","content":"R语言利用ggplot2和ggrepel包绘制火山图无法显示显著基因是什么原因呢?
默认的参数配置下,标签很难显示完全!!
DEG$Symbol <- rownames(DEG)\\n#分别筛选上下调中显著性top5,作为本次测试需要添加的目标标签:\\nUp <- filter(DEG, Group == \'Up\') %>% distinct(Symbol, .keep_all = T) %>% top_n(5, -log10(padj))\\nDown <- filter(DEG, Group == \'Down\') %>% distinct(Symbol, .keep_all = T) %>% top_n(5, -log10(padj))\\nhead(Up);head(Down)\\n\\nlibrary(ggrepel)\\n##geom_text_repel()\\np2 <- volcano + \\n geom_point(data = Up,aes(x = log2FoldChange, y = -log10(padj)),\\n color = \'#EB4232\', size = 7.5, alpha = 0.2) +#强调显示一下需要标注的散点,增加更大尺寸散点套在外围\\n geom_text_repel(data = Up,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 23456,color = \'black\',show.legend = FALSE, \\n min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf\\n segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线\\n force = 2,#重叠标签间的排斥力\\n force_pull = 2,#标签和数据点间的吸引力\\n size = 8,\\n box.padding = unit(2, \\"lines\\"),\\n point.padding = unit(1, \\"lines\\"),#点到线的距离\\n max.overlaps = Inf)#排斥重叠过多标签,设置为Inf则可以保持始终显示所有标签\\np2\\n##geom_label_repel():带边框样式,默认参数配置\\np3 <- volcano + \\n geom_point(data = Down,aes(x = log2FoldChange, y = -log10(padj)),\\n color = \'#2DB2EB\', size = 7.5, alpha = 0.2) +\\n geom_label_repel(data = Down,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 23456,color = \'black\',show.legend = FALSE, \\n min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf\\n segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线\\n force = 2,#重叠标签间的排斥力\\n force_pull = 2,#标签和数据点间的吸引力\\n size = 8,\\n box.padding = unit(2, \\"lines\\"),\\n point.padding = unit(2, \\"lines\\"),\\n max.overlaps = Inf)#排斥重叠过多标签,设置为Inf则可以保持始终显示所有标签\\np3\\n##geom_text_repel()取消指引线段\\np4 <- volcano + \\n geom_point(data = Down,aes(x = log2FoldChange, y = -log10(padj)),\\n color = \'#2DB2EB\', size = 7.5, alpha = 0.2) +\\n geom_text_repel(data = Down,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 23456,color = \'black\',show.legend = FALSE, \\n min.segment.length = Inf, #改为Inf去掉指引线段\\n force = 2,#重叠标签间的排斥力\\n force_pull = 2,#标签和数据点间的吸引力\\n size = 8,\\n box.padding = unit(2, \\"lines\\"),\\n point.padding = unit(1, \\"lines\\"),\\n max.overlaps = Inf)#排斥重叠过多标签,设置为Inf则可以保持始终显示所有标签\\np4
当需要展示的目标标签过多时,不管是否添加指引线,不论指引线或长或短,整体都显得比较杂乱。这时候就可以尝试将标签垂直整齐排列。
##标签x轴起始位置调整\\nnudge_x_up = 8 - Up$log2FoldChange \\nnudge_x_down = -8 - Down$log2FoldChange\\np5 <- volcano + \\n geom_point(data = Up,aes(x = log2FoldChange, y = -log10(padj)),\\n color = \'#EB4232\', size = 7.5, alpha = 0.2) +#强调显示一下需要标注的散点,增加更大尺寸散点套在外围\\n geom_text_repel(data = Up,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 23456,color = \'black\',show.legend = FALSE, \\n min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf\\n segment.linetype = 3, #线段类型,1为实线,2-6为不同类型虚线\\n segment.color = \'black\', #线段颜色\\n segment.alpha = 0.5, #线段不透明度\\n nudge_x = nudge_x_up, #标签x轴起始位置调整\\n direction = \\"y\\", #按y轴调整标签位置方向,若想水平对齐则为x\\n hjust = 0, #对齐标签:0右对齐,1左对齐,0.5居中\\n force = 2,#重叠标签间的排斥力\\n force_pull = 2,#标签和数据点间的吸引力\\n size = 8,\\n box.padding = unit(0.1, \\"lines\\"),\\n point.padding = unit(0.1, \\"lines\\"),\\n max.overlaps = Inf)#排斥重叠过多标签,设置为Inf则可以保持始终显示所有标签\\n##添加左边标签,标签改为左对齐\\np5 <- p5 +\\n geom_point(data = Down,aes(x = log2FoldChange, y = -log10(padj)),\\n color = \'#2DB2EB\', size = 7.5, alpha = 0.2) +#强调显示一下需要标注的散点,增加更大尺寸散点套在外围\\n geom_text_repel(data = Down,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 23456,color = \'black\',show.legend = FALSE, \\n min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf\\n segment.linetype = 3, #线段类型,1为实线,2-6为不同类型虚线\\n segment.color = \'black\', #线段颜色\\n segment.alpha = 0.5, #线段不透明度\\n nudge_x = nudge_x_down, #标签x轴起始位置调整\\n direction = \\"y\\", #按y轴调整标签位置方向,若想水平对齐则为x\\n hjust = 1, #对齐标签:0右对齐,1左对齐,0.5居中\\n force = 2,#重叠标签间的排斥力\\n force_pull = 2,#标签和数据点间的吸引力\\n size = 8,\\n box.padding = unit(0.1, \\"lines\\"),\\n point.padding = unit(0.1, \\"lines\\"),\\n max.overlaps = Inf)#排斥重叠过多标签,设置为Inf则可以保持始终显示所有标签\\np5 + theme(legend.position = \\"right\\")
top5 <- filter(DEG, Group != \\"Stable\\") %>% distinct(Symbol, .keep_all = T) %>% top_n(5, -log10(padj))\\np6 <- volcano + \\n geom_text_repel(data = top5,aes(x = log2FoldChange, y = -log10(pvalue), label = Symbol),\\n seed = 2345,color = \'black\',show.legend = FALSE, \\n min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf\\n arrow = arrow(length = unit(0.02, \\"npc\\"),type = \\"open\\", ends = \\"last\\"),\\n force = 10,force_pull = 1,\\n size = 8,\\n box.padding = 2,point.padding = 1,\\n max.overlaps = Inf)\\np6
DEG$NC <- apply(DEG[,4:6],1,mean)\\nDEG$KD <- apply(DEG[,1:3],1,mean)\\nhead(DEG[,c(1:6,13:15)],3)\\n # KD1 KD2 KD3 NC1 NC2 NC3 Group NC KD\\n#Aqp1 48.87951 46.50304 48.20914 298.41613 257.07158 302.50138 Down 285.99636 47.86390\\n#Cyp51 262.83073 230.07115 272.40256 45.34275 38.78843 48.41369 Up 44.18162 255.10148\\n#Clca3b 32.96104 42.19735 34.45684 246.81534 240.63157 299.64143 Down 262.36278 36.53841\\ntable(DEG$Group)\\n# Up Stable Down \\n# 348 14476 228\\nlibrary(ggplot2)\\np <- ggplot(data = DEG,aes(x = log2(NC+1),y = log2(KD+1))) +\\n geom_point(aes(color = Group),alpha = 0.75,size = 3) +\\n scale_color_manual(name = \'\',values = c(\'Up\'=\'#DA1212\',\'Stable\'=\'grey\',\'Down\'=\'#2DB2EB\'),\\n label = c(\'Up\'=\'Up (348)\',\'Stable\'=\'NoSig (14476)\',\'Down\'=\'Down (228)\')) +\\n geom_abline(slope = 1,intercept = 1,lty = \'dashed\',size = 0.8) +\\n geom_abline(slope = 1,intercept = -1,lty = \'dashed\',size = 0.8) +\\n ggtitle(\'KD vs NC\') +\\n labs(x = \'Mean of Normalized Abundance (log2 NC)\', \\n y = \'Mean of Normalized Abundance (log2 KD)\', color = \'\') +\\n mytheme\\np\\n##添加斜线 添加 |log2FC|>1 的阈值线\\np1 <- p + geom_abline(intercept = 1, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5) +\\n geom_abline(intercept = -1, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5) +\\n geom_abline(intercept = 0, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5)\\np1
按p值大小赋颜色的渐变色散点图
p2 <- ggplot(data = DEG,aes(x = log2(NC +1 ),y = log2(KD + 1))) +\\n geom_point(aes(color = pvalue),size = 3) + #按 p 值大小指定基因点的颜色\\n scale_color_gradientn(colors = c(\'#B90400\', \'#FF9700\', \'#FFE000\', \'#DBF750\', \'#C8F963\', \'#12FFAF\', \\n \'#4DACDF\', \'#0755DF\', \'#022AA7\', \'#00239F\'),#渐变色颜色指定\\n breaks = seq(0,1,0.25), limits = c(0,1)) + \\n scale_x_continuous(expand = c(0.01,0), breaks = seq(0,16,4), limits = c(0,16), \\n labels = c(expression(2^{0}), expression(2^{4}), expression(2^{8}), \\n expression(2^{12}),expression(2^{16}))) +\\n scale_y_continuous(expand = c(0.01,0), breaks = seq(0,16,4), limits = c(0,16), \\n labels = c(expression(2^{0}), expression(2^{4}), expression(2^{8}), \\n expression(2^{12}),expression(2^{16}))) +\\n ggtitle(\'KD vs NC\') +\\n labs(x = \'Mean of Normalized Abundance (NC)\', \\n y = \'Mean of Normalized Abundance (KD)\', \\n color = \'P value\') + \\n geom_abline(intercept = 1, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5) + \\n geom_abline(intercept = -1, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5) +\\n geom_abline(intercept = 0, slope = 1, col = \'black\', linetype = \'dashed\', size = 0.5) + \\n mytheme
添加标记基因:
library(ggrepel)\\nlibrary(tidyverse)\\nGene <- DEG %>% arrange(desc(log2FoldChange)) %>%\\n filter(log2(NC+1) > 5 & log2(KD+1) <10) %>% head(5)\\nGene$Symbol = rownames(Gene)\\n# plot\\np1 + geom_text_repel(data = Gene,aes(x = log2(NC+1),y = log2(KD+1),label = Symbol))\\np1 <- p1 + geom_label_repel(data = Gene,aes(x = log2(NC+1),y = log2(KD+1),label = Symbol),\\n box.padding = unit(1, \\"lines\\"),\\n point.padding = unit(0.1, \\"lines\\"),\\n segment.color = \\"black\\", size = 8,\\n show.legend = FALSE, max.overlaps = 10000)\\np2 <- p2 + geom_label_repel(data = Gene,aes(x = log2(NC+1),y = log2(KD+1),label = Symbol),\\n box.padding = unit(1, \\"lines\\"),\\n point.padding = unit(0.1, \\"lines\\"),\\n segment.color = \\"black\\", size = 8,\\n show.legend = FALSE, max.overlaps = 10000)
现在地球上程序员使用最多的编程语言是哪一门?
近日,IEEE Spectrum 发布的 2023 年度编程语言榜单为我们揭晓了答案——Python。该榜单是从多个维度进行统计分析得出的,包括 Google、StackOverfolw、GitHub、IEEE Xplore Digital等。
根据榜单显示,Python 连续八年名列前茅,是当之无愧的地表最受欢迎编程语言。Python 如此强悍,是因为它语法设计简洁明了,代码可读性强,非科班的初学者也可以快速上手。
加上 Python 拥有庞大的第三方功能库,并且具备与其他主流编程语言集成的能力,因此 Python 的功能也十分强大。无怪乎坊间传闻,Python 程序员的头发是最茂盛的。
文末领取相关Python资料
这可能是很多非 IT 职场人士面临的困惑,想把 python 用到工作中,却不知如何下手?python 在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音。
自动化办公无非是 excel、ppt、word、邮件、文件处理、数据分析处理、爬虫这些,这次我就来理一理 python 自动化办公的那些知识点。
1、自动化基础知识
首先,想要玩好Python办公自动化,基础知识要扎实,下面分别从原理讲起,到代码示例,辅以大量图表,对自动化办公中的常用操作进行介绍。
2、Word/Excel单独案例
在了解上面的常用操作后,就可以基于这些操作实现办公自动化,Word和Excel作为工作中最常用的软件,实现自动化可以节省很多时间。下面给出了一些Python操作Excel或Word的真实案例
3、Word+Excel综合案例
上面给的是Python单独操作Excel或者Word的案例,而Word与Excel联合使用的场景更多,下面就是一些综合案例,希望能对大家有所启发!
4、PPT/PDF案例
除了Word与Excel,PPT和PDF也是日常办公中经常接触的文件格式,下面给出了一些基于PPT与PDF的自动化案例
5、邮件自动化案例
操作邮件也是办公场景中常见的需求,下面是一些Python管理邮箱的部分案例,从基础讲解到实战都有
6、其他自动化案例
最后,除了Office三件套和PDF、邮箱之外,还有一些办公中常用的操作可以通过使用os和glob等模块实现,以下是一些有趣实用的案例
在这里为了让大家更好的学习了解python办公自动化上面的项目,我把上面的学习项目打包整理成了视频源码教程,以此来让你更好更有效的学习python!领取方式在文末!
看完了 python 那么多的“神奇”妙用,你还不赶紧用于办公吗?当下社会对办公效率的要求日益加深,合理的学会一门编程语言进行高效的办公是突出个人能力的途径之一。python 作为当下最流行的语言之一,拥有许许多多强大的第三库支持,在办公领域方面应用得当将会祝你在职场中斩荆披棘、突破自我。
如何领取相关资料:
原来那个孩子是你呀,ggplot是ggplot2包里的一个函数,所以根本不存在这个吧
","description":"ggplot安装问题? 知乎用户的回答\\n\\n\\n原来那个孩子是你呀,ggplot是ggplot2包里的一个函数,所以根本不存在这个吧","guid":"https://www.zhihu.com/question/14694142148/answer/1883670407632124000","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T16:07:02.239Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"TwoSampleMR包在线提取数据时报错?-知乎用户的回答:具体是哪个暴露","url":"https://www.zhihu.com/question/14793559773/answer/1883670076772815000","content":"TwoSampleMR包在线提取数据时报错?具体是哪个暴露
","description":"TwoSampleMR包在线提取数据时报错? 知乎用户的回答\\n\\n\\n具体是哪个暴露","guid":"https://www.zhihu.com/question/14793559773/answer/1883670076772815000","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T16:05:43.591Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基因器官表达分布热图-R语言","url":"https://zhuanlan.zhihu.com/p/30067344474","content":"1.数据下载 BioGPS - your Gene Portal System [图片] 直接在输入框,输入需要的基因,点击“Search\\", [图片] 选择合适的基因条目,比如种属为人,Probeset如果是多个基因可以选择相同的探针,然后下载相关数据 [图片] 这里只能一个基因一个基因的下载,最后可以合并到一个表格 保存为CSV格式,以R语言绘制热图 rm(list= ls()) gc() stringAsFactor = FALSE getwd() setwd(\'D:/R/prostate cancer\') library(dplyr) library(tidyr) install.packages(\\"ti…","description":"1.数据下载 BioGPS - your Gene Portal System [图片] 直接在输入框,输入需要的基因,点击“Search\\", [图片] 选择合适的基因条目,比如种属为人,Probeset如果是多个基因可以选择相同的探针,然后下载相关数据 [图片] 这里只能一个基因一个基因的下载,最后可以合并到一个表格 保存为CSV格式,以R语言绘制热图 rm(list= ls()) gc() stringAsFactor = FALSE getwd() setwd(\'D:/R/prostate cancer\') library(dplyr…","guid":"https://zhuanlan.zhihu.com/p/30067344474","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T13:28:07.669Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"收藏丨科研绘图常用软件汇总","url":"https://zhuanlan.zhihu.com/p/30075070625","content":"以下是科研绘图常用软件的分类整理,涵盖不同领域和技术需求,结合顶刊绘图实践总结而成: 一、通用型科研绘图工具 软件名称特点适用场景Adobe Illustrator矢量图形编辑,支持精确排版与多图层管理,适合期刊图表后期优化。多图排版、模式图绘制CorelDRAW矢量设计与排版功能强大,兼容多种文件格式。海报设计、复杂示意图Inkscape开源矢量绘图工具,支持 SVG 格式,适合基础图形绘制。流程图、简单示意图二、AI 驱动绘图工具软件…","description":"以下是科研绘图常用软件的分类整理,涵盖不同领域和技术需求,结合顶刊绘图实践总结而成: 一、通用型科研绘图工具 软件名称特点适用场景Adobe Illustrator矢量图形编辑,支持精确排版与多图层管理,适合期刊图表后期优化。多图排版、模式图绘制CorelDRAW矢量设计与排版功能强大,兼容多种文件格式。海报设计、复杂示意图Inkscape开源矢量绘图工具,支持 SVG 格式,适合基础图形绘制。流程图、简单示意图二、AI 驱动绘图工具软件…","guid":"https://zhuanlan.zhihu.com/p/30075070625","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T13:20:03.095Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何快速学会R语言?-isKage的回答:本章介绍 R 语言的函数定义方法,以及进行统计模拟、数据清洗的方法。 function 关键字自定义函数;r* p* d* q* 分别进行各...","url":"https://www.zhihu.com/question/346865819/answer/123540261588","content":"如何快速学会R语言?本章介绍 R 语言的函数定义方法,以及进行统计模拟、数据清洗的方法。function
关键字自定义函数;r*
p*
d*
q*
分别进行各种分布的模拟;sample
函数进行简单随机抽样;数据清洗包括了缺失数据处理、按行排序、选取/删除部分数据、添加变量/特征和合并数据集操作。
定义函数的一般形式:
myfunction <- function(a, b, c) {\\n statement\\n return(object)\\n}
myfunction
:自定义的函数名称function()
:关键字,告诉 R 语言这是自定义的函数a, b, c
:为函数的参数,表明函数需要传入的参数statement
:函数体,编写函数的操作return(object)
:函数的返回值myfunction(x1, x2, x3)
myfunction(a = x1, b = x2, c = x3)
my.data.ana
x
my.data.ana <- function(x) {\\n y <- list(mean = mean(x), max = max(x), min = min(x))\\n return(y)\\n}\\n\\nx <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)\\ny <- my.data.ana(x)\\ny\\n\\n# $mean\\n# [1] 5.5\\n\\n# $max\\n# [1] 10\\n\\n# $min\\n# [1] 1
r*
:*
分布的随机数函数
d*
:*
分布的密度函数
p*
:*
分布的分布函数
q*
:*
分布的分位数函数
例如:
rnorm()
dnorm()
pnorm()
qnorm()
rgamma()
dgamma()
pgamma()
qgamma()
rpois()
dpois()
ppois()
qpois()
格式
# 传入分位数点,得到密度函数值\\ndnorm(x, mean = 0, sd = 1, log = FALSE)\\n\\n# 传入分位数点,得到分布函数值/即概率\\npnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)\\n\\n# 传入概率值,得到对应的分位数点值\\nqnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)\\n\\n# 返回 n 个随机数\\nrnorm(n, mean = 0, sd = 1)
参数
参数 | 含义 |
---|---|
x q | 分位数向量 |
p | 概率值向量 |
n | rnorm(n) 返回随机数的个数 |
mean | 均值向量 |
sd | 标准差向量 |
log log.p | 是否取对数,为 TRUE ,则传入 log(p) |
lower.tail | 为 TRUE ,则概率表达式为 $P(X \\\\leq x)$ 否则,$P(X > x)$ |
格式
# 计算概率密度函数 (PMF) 值\\ndpois(x, lambda, log = FALSE)\\n\\n# 计算累积分布函数 (CDF) 值\\nppois(q, lambda, lower.tail = TRUE, log.p = FALSE)\\n\\n# 计算分位数(逆 CDF)\\nqpois(p, lambda, lower.tail = TRUE, log.p = FALSE)\\n\\n# 生成随机数\\nrpois(n, lambda)
参数
参数 | 说明 |
---|---|
x q | 非负整数分位数点。若输入非整数,dpois 返回 0;ppois 自动取 floor(q) 计算。 |
p | 概率值向量,范围必须在 [0, 1] 之间。 |
n | 生成的随机数数量。 |
lambda | 非负向量。若为负数,返回 NaN。 |
log log.p | 逻辑值。若为 TRUE,概率以自然对数形式输入/输出。 |
lower.tail | 逻辑值。若为 TRUE(默认),计算 P(X ≤ x) 或 P(X ≤ q);否则计算 P(X > x) 或 P(X > q)。 |
关键细节
dpois(x, lambda)
仅在 x
为整数时返回非零值,否则返回 0。ppois(q, lambda)
会对非整数 q
向下取整(等效计算 P(X ≤ floor(q))
)。qpois(p, lambda)
返回最小整数 k
,使得 P(X ≤ k) ≥ p
。lower.tail = FALSE
时,寻找最小 k
使得 P(X > k) ≤ p
(即右尾分位数)。# 分别计算 λ=2 时 x=1,λ=3 时 x=2,λ=4 时 x=3 的概率\\ndpois(x = c(1,2,3), lambda = c(2,3,4))
格式
# 计算概率密度函数 (PMF) 值\\ndbinom(x, size, prob, log = FALSE)\\n\\n# 计算累积分布函数 (CDF) 值\\npbinom(q, size, prob, lower.tail = TRUE, log.p = FALSE)\\n\\n# 计算分位数(逆 CDF)\\nqbinom(p, size, prob, lower.tail = TRUE, log.p = FALSE)\\n\\n# 生成随机数\\nrbinom(n, size, prob)
参数
参数 | 说明 |
---|---|
x q | 整数分位数点。若输入非整数,dbinom 返回 0;pbinom 自动取 floor(q) 计算。 |
p | 概率值向量,范围必须在 [0, 1] 之间。 |
n | 生成的随机数数量。若输入向量(如 n = c(2,3)),实际生成 sum(n) 个随机数。 |
size | 试验次数(非负整数),若为小数会自动截断为整数。 |
prob | 单次试验成功概率,范围 [0, 1]。若输入负数或 >1 返回 NaN。 |
log log.p | 逻辑值。若为 TRUE,概率以自然对数形式输入/输出(例如 log(0.05))。 |
lower.tail | 逻辑值。若为 TRUE(默认),计算 P(X ≤ x) 或 P(X ≤ q);否则计算 P(X > x) 或 P(X > q)。 |
格式
sample(x, size, replace = FALSE, prob = NULL)
参数
参数 | 说明 |
---|---|
x | 抽样来源。可以是向量或单个整数:若为向量,直接从中抽样;若为整数 n ,等价于从 1:n 抽样 |
size | 抽样数量。必须为非负整数,且当 replace=FALSE 时,size ≤ length(x) |
replace | 是否放回抽样。默认 FALSE(无放回);TRUE 时为有放回抽样 |
prob | 权重向量。指定每个元素的抽样概率(自动归一化),需与 x 等长。默认等概率抽样 |
关键细节
x
为整数时的特殊行为 sample(5, 3) # 等价于从 1:5 中无放回抽3个数(如 2,4,1)\\nsample(c(5), 3) # 从单元素向量 5 中有放回抽3次(需设置 replace=TRUE)
prob
的和不为1,会自动归一化处理sample(c(\\"A\\",\\"B\\"), size=5, replace=TRUE, prob=c(3,1)) # \\"A\\"出现概率为 3/(3+1)=75%
size
在无放回时一定要比 x
的长度小sample(1:10, size=15, replace=TRUE) # 允许(有放回)\\nsample(1:10, size=15, replace=FALSE) # 报错
在电脑上生成随机数字时,生成的数字并不是真正的随机数,它们叫做伪随机数 (pseudo random number)。当从任意分布模拟随机数字时,设置随机数字生成器种子 (seed) 是非常重要的。设置随机种子使得实验结果可复现。
# n 指定一个整数\\nset.seed(n)
set.seed(1)\\nrnorm(3) # [1] 0.6328626 0.4042683 -0.1061245\\nrnorm(4) # [1] 1.5952808 0.3295078 -0.8204684 0.4874291\\n\\nset.seed(1)\\nrnorm(3) # [1] 0.6328626 0.4042683 -0.1061245\\nrnorm(4) # [1] 1.5952808 0.3295078 -0.8204684 0.4874291
结构化数据:表格形式的数据。每一行代表一个样本/观测,每一列对应一个变量/特征。
创建示例数据表
manager <- c(1, 2, 3, 4, 5)\\ndate0 <- c(\\"10/24/08\\", \\"10/28/08\\", \\"10/1/08\\", \\"10/12/08\\", \\"5/1/09\\")\\nnationality <- rep(c(\\"US\\", \\"UK\\"), c(2, 3))\\ngender <- c(\\"M\\", \\"F\\", \\"F\\", \\"M\\", \\"F\\")\\nage <- c(32, 45, 25, 39, 99)\\nq1 <- c(5, 3, 3, 3, 2)\\nq2 <- c(4, 5, 5, 3, 2)\\nq3 <- c(5, 2, 5, 4, 1)\\nq4 <- c(5, 5, 5, NA, 2)\\nq5 <- c(5, 5, 2, NA, 1)\\n\\nleadership <- data.frame(manager, date0, nationality, gender, age, q1, q2, q3, q4, q5)\\nleadership\\n# manager date0 nationality gender age q1 q2 q3 q4 q5\\n# 1 1 10/24/08 US M 32 5 4 5 5 5\\n# 2 2 10/28/08 US F 45 3 5 2 5 5\\n# 3 3 10/1/08 UK F 25 3 5 5 5 2\\n# 4 4 10/12/08 UK M 39 3 3 4 NA NA\\n# 5 5 5/1/09 UK F 99 2 2 1 2 1
is.na()
逐个元素比较是否为空 NA
is.na(leadership)
直接删除 na.omit
非替换操作,删除空值的行
newdata <- na.omit(leadership)\\nnewdata\\n# manager date0 nationality gender age q1 q2 q3 q4 q5\\n# 1 1 10/24/08 US M 32 5 4 5 5 5\\n# 2 2 10/28/08 US F 45 3 5 2 5 5\\n# 3 3 10/1/08 UK F 25 3 5 5 5 2\\n# 5 5 5/1/09 UK F 99 2 2 1 2 1
或者采用均值填充 mean(leadership$age)
# 用中位数代替 q1 列的缺失值\\nleadership$q1[is.na(leadership$q1)] <- median(leadership$q1, na.rm = TRUE)\\n\\n# 用均值代替 q2 列的缺失值\\nleadership$q2[is.na(leadership$q2)] <- mean(leadership$q2, na.rm = TRUE)
其中 na.rm = TRUE
表示在计算均值/中位数等统计量时忽略空值。
操作 | 函数/方法 | 说明 |
---|---|---|
对向量排序 | sort() | 返回排序后的值 |
获取排序索引 | order() | 返回排序后的索引值,用于按行排序 |
按列升序排序 | data[order(data$column), ] | 按指定列升序排列数据框 |
降序排序 | order(x, decreasing = TRUE) | 按指定列降序排列数据框 |
处理缺失值 | na.last = TRUE/FALSE | 控制缺失值在排序中的位置(默认放在最后) |
例如:按照 age
升序排序
newdata <- leadership[order(leadership$age), ]
好的,用户需要整理关于R语言中选取和删除部分数据的笔记,特别是使用下标运算、列名以及subset()函数的方法。他们已经提供了一些之前的笔记结构,我需要保持一致的风格和格式。
首先,我需要回忆R语言中数据框的基本操作。下标运算[ , ]的使用是关键,参数可以是正数、负数、逻辑值或空。用户还提到数据框有行名和列名,可以按列名选取列。另外,subset()函数也是一个重要的方法。
接下来,我需要确定如何组织内容。之前的笔记有参数详解、关键细节、示例和注意事项,我应该沿用这个结构。需要解释不同的下标类型如何影响选取或删除数据,比如正数选择特定行或列,负数排除,逻辑值过滤,空表示全选。还要说明如何使用列名来选取列,以及subset()函数的参数和使用场景。
需要注意常见的陷阱,比如混合使用正负下标可能导致错误,逻辑值的回收机制可能引发意外结果,subset()函数在处理变量时的环境问题。还要提到drop参数的影响,避免数据框降维为向量。
然后,准备示例代码。例如,用正数选取行和列,用负数删除,用逻辑表达式过滤行,按列名选取,以及subset()的使用。同时提供输出结果,帮助理解。
最后,总结不同方法的适用场景,帮助用户根据需求选择合适的方式。确保内容清晰,结构合理,语言简洁,符合用户之前的笔记风格。
格式
数据框[行下标, 列下标] # 行和列下标可为正数、负数、逻辑值或空(保留所有行/列)
参数
下标类型 | 说明 |
---|---|
正数 | 选取指定位置的行/列(如 1:3 选取前3行或前3列) |
负数 | 排除指定位置的行/列(如 -c(2,4) 删除第2和第4行/列) |
逻辑值 | 按 TRUE/FALSE 筛选行/列(如 数据框$列名 > 5 筛选满足条件的行) |
空值 | 保留所有行或列(如 数据框[, 2:4] 保留所有行,选取第2到4列) |
列名 | 通过列名字符串筛选(如 数据框[, c(\\"列名1\\", \\"列名2\\")]) |
示例
# 选取前3行和前2列\\ndf[1:3, 1:2]\\n\\n# 删除第2行和第3列\\ndf[-2, -3]\\n\\n# 选取所有行,仅保留第2列\\ndf[, 2] # 结果可能降维为向量\\ndf[, 2, drop=FALSE] # 保持数据框结构
# 筛选年龄 >30 的行\\ndf[df$age > 30, ]\\n\\n# 筛选性别为女性且国籍为US的行\\ndf[df$gender == \\"F\\" & df$country == \\"US\\", ]
# 选取指定列\\ndf[, c(\\"age\\", \\"gender\\")]\\n\\n# 排除指定列\\ndf[, !(colnames(df) %in% c(\\"date\\", \\"q5\\"))]
格式
subset(数据框, subset=行筛选条件, select=列筛选条件)
参数
参数 | 说明 |
---|---|
subset | 逻辑表达式,筛选符合条件的行(如 age > 30) |
select | 指定要保留的列,支持列名或列位置(如 c(\\"age\\", \\"gender\\") 或 2:4) |
示例
subset(df, subset = age > 30 & gender == \\"M\\", select = c(\\"age\\", \\"gender\\"))
subset()
的select
参数支持负列名,表示删除/不取对应的列
subset(数据框, select = -c(列名1, 列名2, ...))
通过 $
符号直接创建新变量
# 计算 q1 到 q5 的总和 (qsum)\\nleadership$qsum <- leadership$q1 + leadership$q2 + leadership$q3 + leadership$q4 + leadership$q5\\n\\n# 计算 qsum 的平均值 (qmean)\\nleadership$qmean <- leadership$qsum / 5
leadership <- within(leadership, {\\n qsum <- q1 + q2 + q3 + q4 + q5 # 计算总和\\n qmean <- qsum / 5 # 计算平均值\\n}
cbind()
:按列合并
cbind(数据框1, 数据框2)
df1 <- data.frame(ID = 1:3, Name = c(\\"A\\", \\"B\\", \\"C\\"))\\ndf2 <- data.frame(Age = c(20, 25, 30), Score = c(85, 90, 88))\\ncombined_col <- cbind(df1, df2) # 合并后列数为 df1 列数 + df2 列数
若行数不同,会报错;列名重复时自动添加后缀(如Score
和Score.1
)
rbind()
:按行合并
rbind(数据框1, 数据框2)
df3 <- data.frame(ID = 4:5, Name = c(\\"D\\", \\"E\\"), Age = c(22, 28), Score = c(92, 80))\\ncombined_row <- rbind(combined_col, df3) # 合并后行数为原两数据框行数之和
若列名不一致,会报错
根据共同列(键)合并两个数据框。
R merge(数据框1, 数据框2, by = \\"列名\\", all = FALSE)
- 核心参数
参数 | 说明 |
---|---|
by | 指定合并的列名(如 by = \\"ID\\"),若未指定则自动匹配同名列。 |
all.x | 是否保留左表所有行(左外连接),默认 FALSE。 |
all.y | 是否保留右表所有行(右外连接),默认 FALSE。 |
all | all = TRUE 表示全外连接(保留所有行)。 |
左/右/外连接:按照某列合并时,可能会存在其他列个数不匹配。采用左外连接,则保留左表所有行,右表不足则复制,填入空值;采用右外连接,则保留右表所有行,左表不足则复制,填入空值;采用全连接,则保留左右表所有行,不足则复制,填入空值。
R orders <- data.frame(OrderID = c(101, 102, 103), CustomerID = c(1, 2, 4)) customers <- data.frame(CustomerID = 1:3, Name = c(\\"A\\", \\"B\\", \\"C\\"))
# 内连接(默认)取交集,[1,2,4] 和 [1, 2, 3] 只有 [1, 2] 相交\\ninner_join <- merge(orders, customers, by = \\"CustomerID\\")
内连接结果
# 左外连接,左表的 [1, 2, 4] 都保留,则多出来的无法匹配的留空\\nleft_join <- merge(orders, customers, by = \\"CustomerID\\", all.x = TRUE)
左外连接结果
过年期间去广东玩了十来天
根本没人叫我靓仔,都是叫我老板怎么怎么的
感觉被欺骗
","description":"广东人被人喊一声“靓仔”到底是什么感觉? 烟火的回答\\n\\n\\n过年期间去广东玩了十来天\\n\\n根本没人叫我靓仔,都是叫我老板怎么怎么的\\n\\n感觉被欺骗","guid":"https://www.zhihu.com/question/552687195/answer/123435130075","author":"烟火","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T07:23:06.975Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"从入门到精通:分层聚类的深度解析与应用(含R语言教程)","url":"https://zhuanlan.zhihu.com/p/29877265501","content":"分层聚类是一种将数据集逐步划分或合并为不同层次结构的方法。分层聚类可以帮助我们发现数据中的层级结构,通常以树状图(Dendrogram)的形式可视化,树状图展示了各个数据点或簇的聚合过程。 [图片] 分层聚类的基本概念:自底向上的方法(凝聚型,Agglomerative): 从每个数据点开始,每个数据点被视为一个单独的簇然后逐步合并最相似的簇,直到所有数据点都被合并到一个簇中凝聚型聚类是最常见的分层聚类方法自顶向下的方法(分裂型…","description":"分层聚类是一种将数据集逐步划分或合并为不同层次结构的方法。分层聚类可以帮助我们发现数据中的层级结构,通常以树状图(Dendrogram)的形式可视化,树状图展示了各个数据点或簇的聚合过程。 [图片] 分层聚类的基本概念:自底向上的方法(凝聚型,Agglomerative): 从每个数据点开始,每个数据点被视为一个单独的簇然后逐步合并最相似的簇,直到所有数据点都被合并到一个簇中凝聚型聚类是最常见的分层聚类方法自顶向下的方法(分裂型…","guid":"https://zhuanlan.zhihu.com/p/29877265501","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-13T01:26:05.038Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"我用r语言建立了随机森林模型,像这样出图应该怎么办呢?-医学统计数据分析的回答:什么是随机生存森林(RSF)模型?随机生存森林(Random Survival Forest,RSF)...","url":"https://www.zhihu.com/question/528937334/answer/123037665591","content":"我用r语言建立了随机森林模型,像这样出图应该怎么办呢?什么是随机生存森林(RSF)模型?
随机生存森林(Random Survival Forest,RSF)是一种结合随机森林算法与生存分析的非参数机器学习模型,专门用于处理右删失生存数据。其核心原理和特点如下:
核心原理
1.数据随机化
Bootstrap抽样:从原始数据中重复抽取多个子样本(Bootstrap样本),每个样本约包含63%的原始数据,剩余37%作为袋外数据(OOB)用于验证。
特征随机化:在每棵树的节点分裂时,随机选择部分特征变量作为候选分裂变量。
2.生存树构建
分裂准则:使用生存差异指标(如对数秩检验)最大化子节点间的生存时间差异。
生长约束:要求叶节点至少包含一定数量的事件(如死亡事件),避免过拟合。
3.集成预测
累积风险函数(CHF):每棵树独立计算个体的累积风险,最终通过集成所有树的CHF均值得到预测结果。
随机生存森林(Random Survival Forest,RSF)是一种结合随机森林算法与生存分析的非参数机器学习模型,专门用于处理右删失生存数据。其核心原理和特点如下:
核心原理
1.数据随机化
Bootstrap抽样:从原始数据中重复抽取多个子样本(Bootstrap样本),每个样本约包含63%的原始数据,剩余37%作为袋外数据(OOB)用于验证。
特征随机化:在每棵树的节点分裂时,随机选择部分特征变量作为候选分裂变量。
2.生存树构建
分裂准则:使用生存差异指标(如对数秩检验)最大化子节点间的生存时间差异。
生长约束:要求叶节点至少包含一定数量的事件(如死亡事件),避免过拟合。
3.集成预测
累积风险函数(CHF):每棵树独立计算个体的累积风险,最终通过集成所有树的CHF均值得到预测结果。
随机生存森林通过集成生存树和随机化策略,成为处理复杂生存数据的强有力工具,尤其在高维医学数据场景中展现显著优势。
随机生存森林(RSF)的局限性:
1.计算资源消耗大:树数量多或数据量大时训练时间长。
2.离群值敏感:极端值可能降低预测精度。
3.解释性受限:虽提供变量重要性,但无法直接输出风险效应方向(如HR)。
今天,我们仍以熟悉的示例数据集为例,简单演示一下R语言随机生存森林模型(RSF)的拟合及可视化实现:
#随机生存森林(RSF)模型
# 加载必要包
library(randomForestSRC)
library(survival)
library(survminer)
library(timeROC)
library(ggplot2)
library(ggpubr)
library(ggRandomForests)
library(rms)
library(Hmisc)
library(caret)
# 数据预处理
data$Group <- factor(data$结局) # 转换性别为因子
data <- na.omit(data) # 删除缺失值
# 划分训练集和测试集(保持事件比例)
set.seed(2025)
train_index <- createDataPartition(data$结局, p = 0.7, list = FALSE)
train_data <- data[train_index, ]
test_data <- data[-train_index, ]
# 构建随机生存森林模型
rsf_model <- rfsrc(
Surv(时间, 结局) ~ 指标1+指标2+指标3+
指标4+指标5+指标6,
data = train_data,
ntree = 500,
splitrule = \\"logrank\\",
importance = TRUE,
na.action = \\"na.impute\\"
)
# 模型摘要
print(rsf_model)
# 变量重要性可视化
plot(gg_vimp(rsf_model)) +
labs(title = \\"Variable Importance\\") +
theme_bw()
# 测试集预测
test_pred <- predict(rsf_model, newdata = test_data)
# 计算C-index
c_index <- concordance(Surv(时间, 结局) ~ test_pred$predicted, test_data)
cat(\\"Test set C-index:\\", round(c_index$concordance, 3), \\"\\\\n\\")
Test set C-index: 0.267
# 时间依赖性ROC曲线
roc_data <- timeROC(
T = test_data$时间,
delta = test_data$结局,
marker = test_pred$predicted,
cause = 1,
times = c(12, 24),
ROC = TRUE
)
# 绘制ROC曲线
plot(roc_data, time = 12, col = \\"#E69F00\\", title = FALSE)
plot(roc_data, time = 24, col = \\"#56B4E9\\", add = TRUE)
legend(\\"bottomright\\",
c(paste(\\"1-Year AUC =\\", round(roc_data$AUC[1], 2)),
paste(\\"2-Year AUC =\\", round(roc_data$AUC[2], 2))),
col = c(\\"#E69F00\\", \\"#56B4E9\\"), lwd = 2)
# 风险分层生存曲线(按预测风险中位数分组)
test_data$risk_group <- ifelse(test_pred$predicted > median(test_pred$predicted),
\\"High Risk\\", \\"Low Risk\\")
fit_test <- survfit(Surv(时间, 结局) ~ risk_group, data = test_data)
ggsurvplot(fit_test,
data = test_data,
pval = TRUE,
risk.table = TRUE,
palette = c(\\"#D95F02\\", \\"#1B9E77\\"),
title = \\"Test Set Survival Curves by Risk Group\\",
xlab = \\"Time (days)\\")
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,机器学习,生存分析,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
","description":"我用r语言建立了随机森林模型,像这样出图应该怎么办呢? 医学统计数据分析的回答\\n\\n\\n什么是随机生存森林(RSF)模型?\\n\\n随机生存森林(Random Survival Forest,RSF)是一种结合随机森林算法与生存分析的非参数机器学习模型,专门用于处理右删失生存数据。其核心原理和特点如下:\\n\\n核心原理\\n\\n1.数据随机化\\n\\nBootstrap抽样:从原始数据中重复抽取多个子样本(Bootstrap样本),每个样本约包含63%的原始数据,剩余37%作为袋外数据(OOB)用于验证。\\n\\n特征随机化:在每棵树的节点分裂时,随机选择部分特征变量作为候选分裂变量。\\n\\n2.生存树构建\\n\\n分裂准则…","guid":"https://www.zhihu.com/question/528937334/answer/123037665591","author":"医学统计数据分析","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T23:17:40.524Z","media":[{"url":"https://pic1.zhimg.com/v2-f663d6624a97f44715c49d93df63988f.jpg","type":"photo","width":719,"height":309,"blurhash":"LCRp8--;IU-;~qM{WBof?bM{WBWB"},{"url":"https://picx.zhimg.com/v2-ae5cc565cacfd7c8ad2020282ab8fbd6.jpg","type":"photo","width":714,"height":265,"blurhash":"L8Rp8-?bof~q~qD%%M%M%MD%xu%M"},{"url":"https://picx.zhimg.com/v2-34f7593632a286134740bbf00024db72.jpg","type":"photo","width":821,"height":553,"blurhash":"LBRMb$~qof~q?bWBofj[IUofayWB"},{"url":"https://picx.zhimg.com/v2-ea0b10d1cbd3b96ed04d08c1f49cac14.jpg","type":"photo","width":469,"height":300,"blurhash":"L15OQm~pD%og00%M%MIU-;D%M{%M"},{"url":"https://pica.zhimg.com/v2-4a98d993fefcc1b99e377ff4351a75e4.jpg","type":"photo","width":645,"height":656,"blurhash":"LARWMAGZM{~W2;IV=yxa56$P^kWB"},{"url":"https://pica.zhimg.com/v2-d18e0c36671a273da0799c52774430ab.jpg","type":"photo","width":645,"height":656,"blurhash":"LCS$ov_3Rj?b~qRjayofM{xut7WB"},{"url":"https://picx.zhimg.com/v2-8b59378cd7acd1929581807e1b6dd6eb.jpg","type":"photo","width":743,"height":656,"blurhash":"LASY~x^+xu~q~qM{oft79GM_xabH"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r软件制作热图?-南大小程聊科研的回答:在上一期 追本溯源(七):我们该怎么认识热图-3 中我们解读了文章中最常见的简单热图,那么,在这一期中我将对比较复杂...","url":"https://www.zhihu.com/question/273562005/answer/122958603363","content":"r软件制作热图?在上一期追本溯源(七):我们该怎么认识热图-3中我们解读了文章中最常见的简单热图,那么,在这一期中我将对比较复杂一些的热图进行解读[1]。
TEX-specific pathway based hierarchical clustering of pan-cancer samples taken from TCGA was used to produce five distinct TEX subgroups. The heatmap shows the normalized activity scores (ssGSEA) of four TEX-specific pathways and other molecular pathways implicated in TEX. Curves in the middle represent the distribution of activity scores in the five TEX subgroups, with dashed lines displaying the median.
上图已经是一个相当复杂的热图了,但是依然可以根据我们前面总结出的步骤进行解读。
第一步,确定行列及颜色所代表的意义:行在这个地方已经不仅仅代表基因了,而是还代表了通路的活性或者某种细胞的富集程度,列是样本,红色代表高表达/高活性,并且已经经过了Z-score标准化。此外,上图中还多了3个注释条,我们都可以在图例部分找到对应的注解。此外,在图的左侧也对基因或通路进行了注解,让我们能够理解为什么要放这些通路,以及它们之间有什么相关性。
第二步,我们可以看到有明显的聚类处理,并且根据聚类分成了5种类型。而在每种类型的内部,又根据样本之间的相似性进行了进一步的聚类。
第三步,可以明显地观察到数据具有从左到右逐渐降低的趋势,而在每一种种类的内部则相对均一。由此,可以推断出作者想要表达某些样本可以根据这些基因的表达分为不同的TEX亚型,且不同亚型具有其内在特征。
Overlay of the five TEX subgroups with existing TCGA molecular subgroups. Each row indicated the distribution of TEX subgroups within each molecular subtype. Red revealed a higher proportion, whereas blue revealed a lower proportion. TEX, T cell exhaustion; TCGA, The Cancer Genome Atlas; TCR, T cell receptor; CYT, cytolytic activity; TOX, thymocyte selection-associated high mobility group box; BCR, B cell receptor
这是文中另一个热图,但这个热图和前面的热图有本质上的不同。尽管如此,我们依然可以使用三板斧。
第一步,确定行列及颜色所代表的意义:行代表的是第一个热图中的不同TEX类型,但是列看起来有点复杂?这时候我们就需要借助图注去进行解读。图注显示“existing TCGA molecular subgroups”,那我们现在就知道了列代表的是不同的TCGA分型。值得注意的是,这次的注释条并不是表达量或者活性,而是比例。虽然也经过了标准化,但是比例在未经标准化之前总和为1,与前面的表达量等有本质上的不同。
第二步,我们可以看到对列有明显的聚类处理,而行没有进行聚类。这样,我们就可以快速的对应出每种TEX亚型与那些TCGA亚型更加相似。
第三步,可以明显地观察到数据具有块状分布,而这些分布和列的聚类时候明显的对应关系。由此,可以推断出作者想要表达,不同TEX亚型与现有的TCGA分子分型不同的相似性。
HRs representing the association between the enrichment scores (ssGSEA) of signature hallmark genes and OS in each TEX subgroup. Red showed higher risk, blue showed lower risk, whereas white showed no association with risk. 这篇文章里面有非常多的热图。这个热图又表达了不同的含义。但是同样的,我们使用三板斧进行分析。 第一步,确定行列及颜色所代表的意义:这一次是列代表不同的TEX亚型,而行代表的是不同通路的活性或者基因表达量。这次的图例有所不同,不再是连续的,而是分类的。从图注可以看出,这次的热图使用红色代表预后风险高,而蓝色代表预后风险低。
第二步,我们可以看到没有进行聚类。
第三步,可以明显地观察到数据具有块状分布,而这些分布和列的聚类时候明显的对应关系。由此,可以推断出作者想要表达,不同TEX亚型与与不同的通路相结合,可能对预后产生不同的影响。
最后,我想说,Open Your Mind!!!专注分享生信及科研入门干货,欢迎关注,一起解锁思维边界!
参考文献:
1、Zhang, Z., Chen, L., Chen, H., et al., 2022. Pan-cancer landscape of T-cell exhaustion heterogeneity within the tumor microenvironment revealed a progressive roadmap of hierarchical dysfunction associated with prognosis and therapeutic efficacy. eBioMedicine 83, 104207. https://doi.org/10.1016/j.ebiom.2022.104207
","description":"r软件制作热图? 南大小程聊科研的回答\\n\\n\\n在上一期追本溯源(七):我们该怎么认识热图-3中我们解读了文章中最常见的简单热图,那么,在这一期中我将对比较复杂一些的热图进行解读[1]。\\n\\n\\n\\n\\n\\n\\n\\nTEX-specific pathway based hierarchical clustering of pan-cancer samples taken from TCGA was used to produce five distinct TEX subgroups. The heatmap shows the normalized activity scores…","guid":"https://www.zhihu.com/question/273562005/answer/122958603363","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T15:02:10.921Z","media":[{"url":"https://picx.zhimg.com/v2-0abdd262b49af0d93ff9d9b68d5fb2ae.jpg","type":"photo","width":824,"height":758,"blurhash":"LSP6K~}%WUtmySOFbdofb;OYbcj="},{"url":"https://picx.zhimg.com/v2-55d0d05bf08770dcf18f9794d0b6675f.jpg","type":"photo","width":1080,"height":329,"blurhash":"LVPi-r?t%f.78ztPoyba?vV@RjNH"},{"url":"https://picx.zhimg.com/50/v2-fc07b863ffb19b01c29a0efb340bce85.jpg","type":"photo","width":350,"height":415,"blurhash":"LOPsbYUc-V?]#;MxofxuxGR5RQX9"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(八):我们该怎么认识热图-4","url":"https://zhuanlan.zhihu.com/p/29837559394","content":"在上一期 追本溯源(七):我们该怎么认识热图-3 中我们解读了文章中最常见的简单热图,那么,在这一期中我将对比较复杂一些的热图进行解读[1]。 [图片] TEX-specific pathway based hierarchical clustering of pan-cancer samples taken from TCGA was used to produce five distinct TEX subgroups. The heatmap shows the normalized activity scores (ssGSEA) of four TEX-specific pathways and other molecular pathways implica…","description":"在上一期 追本溯源(七):我们该怎么认识热图-3 中我们解读了文章中最常见的简单热图,那么,在这一期中我将对比较复杂一些的热图进行解读[1]。 [图片] TEX-specific pathway based hierarchical clustering of pan-cancer samples taken from TCGA was used to produce five distinct TEX subgroups. The heatmap shows the normalized activity scores (ssGSEA) of four…","guid":"https://zhuanlan.zhihu.com/p/29837559394","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T15:02:09.520Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Bootstrap抽样技术的简单介绍","url":"https://zhuanlan.zhihu.com/p/29809922832","content":"Vol.1 方法介绍bootstrap的 主要思想:Bootstrap方法是一种通过从原始数据集中进行有放回抽样并重复计算统计量来估计总体参数的分布,从而进行统计推断的非参数技术,它不依赖于对数据分布的任何假设。简单来说就是利用重复抽样的样本来进行总体推断。 [图片] 举个例子:假设你有一堆苹果,你想知道这些苹果的平均重量是多少。传统的方法可能假设这些苹果的重量遵循某种特定的分布,比如正态分布,然后根据这个假设来计算平均重量的置信…","description":"Vol.1 方法介绍bootstrap的 主要思想:Bootstrap方法是一种通过从原始数据集中进行有放回抽样并重复计算统计量来估计总体参数的分布,从而进行统计推断的非参数技术,它不依赖于对数据分布的任何假设。简单来说就是利用重复抽样的样本来进行总体推断。 [图片] 举个例子:假设你有一堆苹果,你想知道这些苹果的平均重量是多少。传统的方法可能假设这些苹果的重量遵循某种特定的分布,比如正态分布,然后根据这个假设来计算平均重量的置信…","guid":"https://zhuanlan.zhihu.com/p/29809922832","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T12:50:23.465Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"利用 GAMLSS 对心理测验进行基于回归的常模分析","url":"https://zhuanlan.zhihu.com/p/29807946434","content":"前言标准化的心理测试被广泛使用。它们在个体评估和心理研究中起着至关重要的作用。高质量标准化测试的一个核心特点是它们具有良好的常模分数。大多数心理测试都有常模参照分数,包括智力测试、发展测试、神经心理测试以及临床测试。在常模参照测试中,原始分数被转换为常模参照分数,这表达了个体的表现相对于测试的参照人群的表现。 常模参照心理测试的一个显著特点是,这些常模通常依赖于年龄(例如,智力测试)有时还依赖于…","description":"前言标准化的心理测试被广泛使用。它们在个体评估和心理研究中起着至关重要的作用。高质量标准化测试的一个核心特点是它们具有良好的常模分数。大多数心理测试都有常模参照分数,包括智力测试、发展测试、神经心理测试以及临床测试。在常模参照测试中,原始分数被转换为常模参照分数,这表达了个体的表现相对于测试的参照人群的表现。 常模参照心理测试的一个显著特点是,这些常模通常依赖于年龄(例如,智力测试)有时还依赖于…","guid":"https://zhuanlan.zhihu.com/p/29807946434","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T12:42:27.187Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言中长脚本及实战项目管理方式","url":"https://zhuanlan.zhihu.com/p/29518339448","content":"写在开头 小洁的课程真是常听常新!最近又在回顾小洁老师的数据挖掘课程,又学到了很多小知识! 之前基于24年5月份课程,学习整理的小知识已经剪辑好上传到B站和视频号 【R语言数据挖掘小知识点】 https://b23.tv/s5PLLVf [图片] 最新一期的课程也开始啦,需要系统学习的朋友可以了解一下—— 生信入门&数据挖掘线上直播课3月班 这期想要分享的是:R语言中长脚本及实战项目管理方式,会使用单细胞数据分析项目作为实例长脚本管理方式1. 使…","description":"写在开头 小洁的课程真是常听常新!最近又在回顾小洁老师的数据挖掘课程,又学到了很多小知识! 之前基于24年5月份课程,学习整理的小知识已经剪辑好上传到B站和视频号 【R语言数据挖掘小知识点】 https://b23.tv/s5PLLVf [图片] 最新一期的课程也开始啦,需要系统学习的朋友可以了解一下—— 生信入门&数据挖掘线上直播课3月班 这期想要分享的是:R语言中长脚本及实战项目管理方式,会使用单细胞数据分析项目作为实例长脚本管理方式1. 使…","guid":"https://zhuanlan.zhihu.com/p/29518339448","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T07:52:26.372Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"请问如何用r语言中的ggplot2画出多种渐变色的好看的图?-被炸熟的虾的回答:一、RColorBrewer包 RColorBrewer算是最经典的调色板R包之一,内置3类调色板。可以使...","url":"https://www.zhihu.com/question/305623922/answer/122595854085","content":"请问如何用r语言中的ggplot2画出多种渐变色的好看的图?RColorBrewer
算是最经典的调色板R包之一,内置3类调色板。可以使用brewer.pal.info
函数查看所有调色板信息。
1、连续型 sequential:单渐变色,一种颜色由浅到深。共18组,每组9个渐变色梯度。
display.brewer.all(type = \\"seq\\")
2、离散型 divergent:双渐变色,一种颜色到另外一种颜色的渐变,即两端的颜色较深。共9组,每组11个颜色。
display.brewer.all(type = \\"div\\")
3、定性型 qualitative:区分色,几种区分度很高的颜色组合,适合标记分类数据。共8组,每组颜色8到12个不等。
display.brewer.all(type = \\"qual\\")
也可以使用display.brewer.pal(所取颜色的个数,\\"调色板名称\\")
具体查看某一个调色板中的颜色。
使用brewer.pal
函数提取不同分组颜色编号:
brewer.pal(9, \\"Set1\\")\\n#[1] \\"#E41A1C\\" \\"#377EB8\\" \\"#4DAF4A\\" \\"#984EA3\\" \\"#FF7F00\\" \\"#FFFF33\\" \\"#A65628\\" \\"#F781BF\\" \\"#999999\\"\\nbrewer.pal(12, \'Paired\')[c(1, 3, 5)]\\n#[1] \\"#A6CEE3\\" \\"#B2DF8A\\" \\"#FB9A99\\"\\n\\ncolsBlues <- brewer.pal(9, \\"Blues\\")\\ncolsYlOrRd <- brewer.pal(9, \\"YlOrRd\\")\\ncolsSet1 <- brewer.pal(9, \\"Set1\\")\\ncolsSet2 <- brewer.pal(9, \\"Set2\\")\\ncolsSpectral <- brewer.pal(9, \\"Spectral\\")\\ncolsBrBG <- brewer.pal(9, \\"BrBG\\")
统一筛选提取差异较大的颜色:
library(RColorBrewer) \\nqual_col_pals <- brewer.pal.info[brewer.pal.info$category == \'qual\',]\\n#处理后有74种差异还比较明显的颜色\\ncol_vector <- unlist(mapply(brewer.pal,qual_col_pals$maxcolors, rownames(qual_col_pals))) \\npie(rep(1,length(col_vector)), col = col_vector)
ggsci
包的功能如其名字所示,提供了多个来自科学期刊、数据可视化库、科幻电影和电视剧中的经典调色板。这些调色板可以通过两种方法调用:
scale
函数可以使用scale_colour_palname()
/scale_fill_palname()
函数直接取代ggplot2
相应的配色函数,例如可以用scale_color_npg()
调用Nature杂志风格配色,scale_fill_nejm()
调用New England Journal of Medicine杂志风格配色。全部调色板见下文。
p1 <- ggplot(subset(diamonds, carat > 2.5 & depth > 50 & depth < 100),\\n aes(x = table, y = price, colour = cut)) +\\n geom_point(alpha = 0.7) +\\n geom_smooth(method = \\"loess\\", alpha = 0.05, size = 1, span = 1) +\\n scale_color_npg() + labs(title = \'scale_color_npg\') +\\n mytheme\\np2 <- ggplot(subset(diamonds, carat > 2.5 & depth > 50 & depth < 100),\\n aes(x = depth, fill = cut)) +\\n geom_histogram(colour = \\"black\\", binwidth = 1, position = \\"dodge\\") +\\n scale_fill_nejm() + labs(title = \'scale_fill_nejm\') +\\n mytheme
pal_palname
函数提取具体颜色编码例如提取Lancet杂志风格配色
#mypal <- pal_lancet(palette = c(\\"lanonc\\"), alpha = 1)\\nmypal <- pal_lancet(\\"lanonc\\", alpha = 0.7)(9) #alpha调整透明度\\nmypal\\n## [1] \\"#00468BB2\\" \\"#ED0000B2\\" \\"#42B540B2\\" \\"#0099B4B2\\" \\"#925E9FB2\\" \\"#FDAF91B2\\"\\n## [7] \\"#AD002AB2\\" \\"#ADB6B6B2\\" \\"#1B1919B2\\"\\nlibrary(\\"scales\\")\\nshow_col(mypal)\\n\\npal_npg(\\"nrc\\", alpha = 0.7)(9)\\npal_aaas(\\"default\\", alpha = 0.7)(10)\\npal_lancet(\\"lanonc\\", alpha = 0.7)(9)\\npal_nejm(\\"default\\", alpha = 0.7)(8)\\npal_jama(\\"default\\", alpha = 0.7)(7)\\npal_jco(\\"default\\", alpha = 0.7)(10)\\npal_ucscgb(\\"lanonc\\", alpha = 0.7)(26)\\n......\\n
全部颜色版:
很简便的代码,很适合获取大批量颜色
library(randomcoloR)\\n#随机生成60种颜色,其实里面有重复的\\nmypalette <- randomColor(count = 60) \\n#差异明显的60种\\nmypalette <- distinctColorPalette(60)
手工填充颜色梯度时很好用
start_color <- \\"red\\"\\nend_color <- \\"green\\"\\n# 创建离散渐变色调色板\\ndiscrete_palette <- colorRampPalette(c(start_color, end_color), \\n space = \\"Lab\\", interpolate = \\"linear\\")\\n# 生成渐变色向量\\nnum_colors <- 60 # 可以根据需要更改生成的颜色数量\\ncolors <- discrete_palette(num_colors)\\n# 输出结果\\nprint(colors)\\n # [1] \\"#FF0000\\" \\"#FD1B00\\" \\"#FC2900\\" \\"#FA3300\\" \\"#F93C00\\" \\"#F74400\\" \\"#F64A00\\"\\n # [8] \\"#F45100\\" \\"#F35600\\" \\"#F15C00\\" \\"#F06100\\" \\"#EE6600\\" \\"#EC6A00\\" \\"#EB6F00\\"\\n# [15] \\"#E97300\\" \\"#E77700\\" \\"#E57B00\\" \\"#E37F00\\" \\"#E18300\\" \\"#DF8700\\" \\"#DD8B00\\"\\n# [22] \\"#DB8E00\\" \\"#D99200\\" \\"#D79500\\" \\"#D59900\\" \\"#D39C00\\" \\"#D0A000\\" \\"#CEA300\\"\\n# [29] \\"#CBA600\\" \\"#C9A900\\" \\"#C6AC00\\" \\"#C4B000\\" \\"#C1B300\\" \\"#BEB600\\" \\"#BBB900\\"\\n# [36] \\"#B8BC00\\" \\"#B5BF00\\" \\"#B2C200\\" \\"#AFC500\\" \\"#ABC800\\" \\"#A8CA00\\" \\"#A4CD00\\"\\n# [43] \\"#A0D000\\" \\"#9CD300\\" \\"#98D600\\" \\"#93D900\\" \\"#8FDB00\\" \\"#8ADE00\\" \\"#85E100\\"\\n# [50] \\"#7FE400\\" \\"#7AE600\\" \\"#73E900\\" \\"#6DEC00\\" \\"#65EF00\\" \\"#5DF100\\" \\"#54F400\\"\\n# [57] \\"#49F700\\" \\"#3BF900\\" \\"#29FC00\\" \\"#00FF00\\"
paletteer
包可以算是R中各种常见配色版的一个大汇总,之前介绍的多个R包内置的各种调色板几乎全部都可以在paletteer
包中找到,足见功能之强大!!
官方网站:https://r-charts.com/color-palettes/
install.packages(\\"paletteer\\")\\n# devtools::install_github(\\"EmilHvitfeldt/paletteer\\")\\nlibrary(paletteer)
paletteer
包也将各种配色方案分成3类:CONTINUOUS、DISCRETE与DYNAMIC
共有319组,可以按照需要生成任意数量的、平滑过渡的颜色编码。
palettes_c_names\\n# # A tibble: 319 × 3\\n # package palette type \\n # <chr> <chr> <chr> \\n # 1 ggthemes Blue-Green Sequential sequential\\n # 2 ggthemes Blue Light sequential\\n # 3 ggthemes Orange Light sequential\\n # 4 ggthemes Blue sequential\\n # 5 ggthemes Orange sequential\\n # 6 ggthemes Green sequential\\n # 7 ggthemes Red sequential\\n # 8 ggthemes Purple sequential\\n # 9 ggthemes Brown sequential\\n# 10 ggthemes Gray sequential\\n# # ℹ 309 more rows\\n# # ℹ Use `print(n = ...)` to see more rows\\n
调用函数:paletteer_c()
,在括号里加入包的名称与颜色集即可,注意需要设置过渡颜色数量 n
paletteer_c(\\"ggthemes::Blue-Green Sequential\\", 30)\\n#<colors>\\n#FEFFD9FF #FCFED4FF #F9FDCEFF #F7FCC9FF #F4FBC3FF #F1FABFFF #EDF8BCFF #E9F7B9FF #E6F5B6FF #E2F4B4FF #DDF2B2FF #D8F1B2FF #D2EFB2FF #CCEDB1FF #C7EBB1FF #BFE8B2FF #B6E4B3FF #ACE0B4FF #A2DBB5FF #98D7B7FF #8FD4B8FF #86D0B9FF #7ECDBBFF #74C9BCFF #6BC6BEFF #63C3BFFF #5CC0C0FF #54BDC2FF #4BBAC3FF #41B7C4FF
共有2415组,不同颜色间的区分度较好。
palettes_d_names\\n# A tibble: 2,415 × 5\\n # package palette length type novelty\\n # <chr> <chr> <int> <chr> <lgl> \\n # 1 awtools a_palette 8 sequential TRUE \\n # 2 awtools ppalette 8 qualitative TRUE \\n # 3 awtools bpalette 16 qualitative TRUE \\n # 4 awtools gpalette 4 sequential TRUE \\n # 5 awtools mpalette 9 qualitative TRUE \\n # 6 awtools spalette 6 qualitative TRUE \\n # 7 basetheme brutal 10 qualitative TRUE \\n # 8 basetheme clean 10 qualitative TRUE \\n # 9 basetheme dark 10 qualitative TRUE \\n# 10 basetheme deepblue 10 qualitative TRUE \\n# # ℹ 2,405 more rows\\n# # ℹ Use `print(n = ...)` to see more rows
调用函数:paletteer_d()
,在括号里加入包的名称与颜色集即可。不添加颜色数量 n 默认输出组内全部颜色编码
paletteer_d(\\"colorBlindness::paletteMartin\\")\\n#<colors>\\n#000000FF #004949FF #009292FF #FF6DB6FF #FFB6DBFF #490092FF #006DDBFF #B66DFFFF #6DB6FFFF #B6DBFFFF #920000FF #924900FF #DB6D00FF #24FF24FF #FFFF6DFF \\npaletteer_d(\\"awtools::a_palette\\")\\n#<colors>\\n#2A363BFF #019875FF #99B898FF #FECEA8FF #FF847CFF #E84A5FFF #C0392BFF #96281BFF
palettes_dynamic_names\\n # package palette length type\\n# 1 cartography blue.pal 20 sequential\\n# 2 cartography orange.pal 20 sequential\\n# 3 cartography red.pal 20 sequential\\n# 4 cartography brown.pal 20 sequential\\n# 5 cartography green.pal 20 sequential\\n# 6 cartography purple.pal 20 sequential\\n# 7 cartography pink.pal 20 sequential\\n# 8 cartography wine.pal 20 sequential\\n# 9 cartography grey.pal 20 sequential\\n# 10 cartography turquoise.pal 20 sequential\\n# 11 cartography sand.pal 20 sequential\\n# 12 cartography taupe.pal 20 sequential\\n# 13 cartography kaki.pal 20 sequential\\n# 14 cartography harmo.pal 20 sequential\\n# 15 cartography pastel.pal 20 qualitative\\n# 16 cartography multi.pal 20 qualitative\\n# 17 ggthemes_ptol qualitative 12 qualitative\\n# 18 ggthemes_solarized yellow 8 qualitative\\n# 19 ggthemes_solarized orange 8 qualitative\\n# 20 ggthemes_solarized red 8 qualitative\\n# 21 ggthemes_solarized magenta 8 qualitative\\n# 22 ggthemes_solarized violet 8 qualitative\\n# 23 ggthemes_solarized blue 8 qualitative\\n# 24 ggthemes_solarized cyan 8 qualitative\\n# 25 ggthemes_solarized green 8 qualitative
这是一类很难单一概况的调色板,既有一种颜色由浅到深的调色板:
也有色差明显的调色板
调用函数:paletteer_dynamic()
,除了在括号里加入包的名称与颜色集,也必须设置输出颜色数量 n,否则报错
paletteer_dynamic(\\"cartography::blue.pal\\", 20)\\n# <colors>\\n#DCF0F8FF #D0E8F2FF #C4E0ECFF #B9D8E7FF #ADD0E1FF #A1C8DCFF #96C0D6FF #8AB8D0FF #7EB0CBFF #6EA6C3FF #5F9BBCFF #4F91B4FF #4086ADFF #307BA5FF #236F9AFF #1E6085FF #19506FFF #14405AFF #0F3045FF #0B2130FF \\npaletteer_dynamic(\\"ggthemes_solarized::yellow\\", 8)\\n# <colors>\\n#B58900FF #CB4B16FF #DC322FFF #D33682FF #6C71C4FF #268BD2FF #2AA198FF #859900FF
与ggsci
包类似,paletteer
包不仅可以使用paletteer_c()
,paletteer_d()
,paletteer_dynamic()
函数提取具体颜色编码;也可以使用比例尺(scales)函数直接取代ggplot2
原有scales函数。
scale_color_paletteer_d()\\nscale_fill_paletteer_d()\\nscale_color_paletteer_c()\\nscale_fill_paletteer_c()\\n\\nlibrary(ggplot2)\\nmytheme <- theme_bw() + \\n theme(axis.text.x = element_text(size = 20), \\n axis.text.y = element_text(size = 20), \\n axis.title.x = element_blank(), \\n axis.title.y = element_blank(), \\n axis.line = element_line(colour = \\"black\\",size = 1),\\n plot.title = element_text(hjust = 0.5,size = 20),\\n legend.position = \\"none\\")\\np1 <- ggplot(data = iris,aes(x = Species,y = Sepal.Length)) +\\n geom_violin(aes(fill = Species),alpha = 0.75) +\\n scale_fill_paletteer_d(\\"awtools::ppalette\\") +\\n #scale_fill_manual(values = as.character(paletteer_d(\\"awtools::ppalette\\")[1:8])) + \\n mytheme + ggtitle(\\"scale_fill_paletteer_d(\'awtools::ppalette\')\\") \\np2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Petal.Length)) +\\n geom_point(size = 3) +\\n scale_colour_paletteer_c(\\"grDevices::Temps\\") + \\n mytheme + ggtitle(\\"scale_colour_paletteer_c(\'grDevices::Temps\')\\") \\np3 <- ggplot(data = iris, aes(x = Species, y =Petal.Length, fill = Petal.Length)) +\\n geom_col() +\\n scale_fill_paletteer_c(\\"grDevices::Temps\\") +\\n mytheme + ggtitle(\\"scale_fill_paletteer_c(\'grDevices::Temps\')\\") \\np4 <- ggplot(diamonds, aes(x = depth, fill = cut, colour = cut)) +\\n geom_density(alpha = 0.75) +\\n xlim(55, 70) +\\n scale_fill_paletteer_d(\\"nord::aurora\\") + \\n scale_colour_paletteer_d(\\"nord::aurora\\") + \\n #scale_fill_manual(values = as.character(paletteer_d(\\"nord::aurora\\")[1:8])) + \\n mytheme + ggtitle(\\"scale_colour_paletteer_d(\'nord::aurora\')\\")
第 6 章 R Markdown 的操作技巧 | R Markdown 指南
这个是一个方法,先把结果在后面计算并存储,然后计算两次,第二次计算可以显示输出结果。
","description":"能把rmarkdown后面计算的结果汇总成表,显示在文件开头作为总分结构嘛? 闫阿瑟的回答\\n\\n\\n第 6 章 R Markdown 的操作技巧 | R Markdown 指南\\n\\n这个是一个方法,先把结果在后面计算并存储,然后计算两次,第二次计算可以显示输出结果。","guid":"https://www.zhihu.com/question/14758213416/answer/122561402459","author":"闫阿瑟","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-12T06:21:57.321Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"分享一个分组统计不同细胞占比的小技巧!","url":"https://zhuanlan.zhihu.com/p/1882946999101409180","content":"统计不同分组或者条件下不同细胞占比是分析单细胞经常要绘制的图,主要用于分析不同条件下细胞构成比例的变化。但是这种图经常缺少统计数据,肉眼看起来非常不方便,不便于比较。今天小编就给大家介绍一个小技巧,能够帮助我们在统计柱状图上加上细胞占比信息。 大家经常见到的应该是下面这种类型的图,这种图缺少一定的统计信息,对两组之间进行比较时不够直观,尤其当细胞类型很多时,基本上没法进行比较。 [图片] 下面小编就为大家介…","description":"统计不同分组或者条件下不同细胞占比是分析单细胞经常要绘制的图,主要用于分析不同条件下细胞构成比例的变化。但是这种图经常缺少统计数据,肉眼看起来非常不方便,不便于比较。今天小编就给大家介绍一个小技巧,能够帮助我们在统计柱状图上加上细胞占比信息。 大家经常见到的应该是下面这种类型的图,这种图缺少一定的统计信息,对两组之间进行比较时不够直观,尤其当细胞类型很多时,基本上没法进行比较。 [图片] 下面小编就为大家介…","guid":"https://zhuanlan.zhihu.com/p/1882946999101409180","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T16:17:01.306Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学 R 语言?-一见傻罗误终生的回答:不急 先仔细的把统计学学会 没有这个基础你学R就是空中楼阁","url":"https://www.zhihu.com/question/4139067549/answer/122114591882","content":"临床大一是不是应该自学 R 语言?不急
先仔细的把统计学学会
没有这个基础你学R就是空中楼阁
","description":"临床大一是不是应该自学 R 语言? 一见傻罗误终生的回答\\n\\n\\n不急\\n\\n先仔细的把统计学学会\\n\\n没有这个基础你学R就是空中楼阁","guid":"https://www.zhihu.com/question/4139067549/answer/122114591882","author":"一见傻罗误终生","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T14:45:50.867Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"多项式回归的原理与操作","url":"https://zhuanlan.zhihu.com/p/29539397093","content":"原理当我们拥有包含一个自变量和一个因变量的数据集时,通常使用简单线性回归来量化两者之间的关系。然而,简单线性回归假设自变量和因变量之间的关系是线性的。用数学符号表示为: Y = β0 + β1X + ε 其中,Y是因变量,X是自变量,β0是截距项,β1是系数,ε是随机误差。 但在实际中,自变量和因变量之间的关系可能是非线性的,因此使用线性回归会导致模型的拟合效果较差。解决自变量和因变量之间非线性关系的一种方法是使用…","description":"原理当我们拥有包含一个自变量和一个因变量的数据集时,通常使用简单线性回归来量化两者之间的关系。然而,简单线性回归假设自变量和因变量之间的关系是线性的。用数学符号表示为: Y = β0 + β1X + ε 其中,Y是因变量,X是自变量,β0是截距项,β1是系数,ε是随机误差。 但在实际中,自变量和因变量之间的关系可能是非线性的,因此使用线性回归会导致模型的拟合效果较差。解决自变量和因变量之间非线性关系的一种方法是使用…","guid":"https://zhuanlan.zhihu.com/p/29539397093","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T12:40:51.347Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"生存分析2 生存分析的操作过程与R实践","url":"https://zhuanlan.zhihu.com/p/29537396880","content":"上次分享中,我们主要介绍了生存分析的概念,以及各项内在定义,数据收集格式。本期内容主要为如何进行生存分析,以及分析相关的危险因素等。 Vol.1 生存分析的目的与方法 1、描述生存过程:绘制K-M曲线(kaplan-meier曲线),主要用于描述生存率、死亡速度、中位生存时间。它是一种无参数法(non-parametric)来从观察对象的生存时间,估计生存概率的方法。对于研究中的第n个时间点tn,生存概率可以计算为: [图片] 而其中,S(tn-1)…","description":"上次分享中,我们主要介绍了生存分析的概念,以及各项内在定义,数据收集格式。本期内容主要为如何进行生存分析,以及分析相关的危险因素等。 Vol.1 生存分析的目的与方法 1、描述生存过程:绘制K-M曲线(kaplan-meier曲线),主要用于描述生存率、死亡速度、中位生存时间。它是一种无参数法(non-parametric)来从观察对象的生存时间,估计生存概率的方法。对于研究中的第n个时间点tn,生存概率可以计算为: [图片] 而其中,S(tn-1)…","guid":"https://zhuanlan.zhihu.com/p/29537396880","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T12:31:12.213Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"针对绘图方面的需求,matlab、python和R哪个更加强大?-动手哥123的回答:讲解视频:B15 python绘图——点图sns.stripplot()_哔哩哔哩_bilibili 点图 点图(Stri...","url":"https://www.zhihu.com/question/28707877/answer/121875929562","content":"针对绘图方面的需求,matlab、python和R哪个更加强大?点图(Strip Plot)是一种分类数据可视化方式,会将每个数据点沿着一个轴方向排列。与散点图相比,点图特别适用于对离散数据的可视化展示。
data
: 要绘制的数据集,DataFramex
: x轴变量名称。y
: y轴变量名称。hue
: 用于分组的变量,可以按分类变量显示不同的颜色。jitter
: 是否在 x 轴上加入轻微的随机偏移,使得数据点不会完全重叠。设置为 True 可以让点图更易于观察。dodge
: 如果 hue 参数被使用,dodge=True 会将数据点根据 hue 分类分开,防止重叠。默认情况下,dodge=False,所有点会堆叠在一起。palette
: 设置颜色调色板。size
: 数据点的大小,默认为 5。tips: 餐饮小费数据集 - total_bill:账单金额 - tip:小费金额 - sex:性别(Male 或 Female) - smoker:是否吸烟(Yes 或 No) - day:星期几(Sun, Thu, Fri, Sat) - time:就餐时间(Lunch 或 Dinner) - size:就餐人数
import seaborn as sns\\nimport matplotlib.pyplot as plt\\n\\n# 加载示例数据\\ntips = sns.load_dataset(\'tips\')\\ntips
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
... | ... | ... | ... | ... | ... | ... | ... |
239 | 29.03 | 5.92 | Male | No | Sat | Dinner | 3 |
240 | 27.18 | 2.00 | Female | Yes | Sat | Dinner | 2 |
241 | 22.67 | 2.00 | Male | Yes | Sat | Dinner | 2 |
242 | 17.82 | 1.75 | Male | No | Sat | Dinner | 2 |
243 | 18.78 | 3.00 | Female | No | Thur | Dinner | 2 |
244 rows × 7 columns
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和日期之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\')\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill vs. Day\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和小费之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\', hue=\'sex\')\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill by Day and Sex\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和小费之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\', hue=\'sex\', jitter=True)\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill by Day and Sex\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和小费之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\', hue=\'sex\', jitter=True, dodge=True)\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill by Day and Sex\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
Qualitative Palettes:适合离散的类别数据,颜色彼此之间没有顺序或关联。
Sequential Palettes:适合连续数据的颜色映射,从浅色到深色表示数据的从小到大的变化。
Diverging Palettes:适合表示有中值的连续数据,颜色从两端扩展到中间。
Cyclic Palettes:适合具有周期性的数据,颜色从一个极端到另一个极端,然后回到第一个极端。
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和小费之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\', hue=\'sex\', jitter=True, dodge=True, palette=\'Set1\')\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill by Day and Sex\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
# 设置Seaborn的风格和颜色调色板\\nsns.set_style(\\"darkgrid\\")\\n\\n# 设置图片大小\\nplt.figure(figsize=(8, 6)) # 设置宽8英寸,高6英寸\\n\\n# 绘制点图,展示总账单金额和小费之间的关系\\nsns.stripplot(data=tips, x=\'day\', y=\'total_bill\', hue=\'sex\', jitter=True, dodge=True, palette=\'Set1\', size=5)\\n\\n# 设置图表标题和标签\\nplt.title(\'Total Bill by Day and Sex\', fontsize=16, fontweight=\'bold\')\\nplt.xlabel(\'Day of the Week\')\\nplt.ylabel(\'Total Bill ($)\')\\n\\n# 渲染、显示图表\\nplt.show()
小提琴图(Violin Plot),是一种集成了箱线图和核密度图特征的数据可视化图形,用于展示多组数据的分布情况和概率密度。
1.显示数据分布:小提琴图能够清晰地展示数据的分布情况,包括数据的中位数、四分位数、离群值等统计信息。通过小提琴形状的宽度和高度,可以直观地比较不同组或条件下数据的分布差异。
2.比较多组数据:将不同基因在不同组织中的表达水平用小提琴图展示,以便研究它们的表达模式是否有显著差异。
3.异常值检测:在小提琴图中,可以观察到小提琴外部的离散数据点,这些数据点往往表示数据中的异常值。可以通过观察离群点的出现情况来判断数据中是否存在异常值。
# 代码来源:https://www.r2omics.cn/\\n# 加载R包,没有安装请先安装 install.packages(\\"包名\\") \\nlibrary(tidyverse)\\n\\n# 读取箱线图数据文件\\ndf = read.delim(\\"https://www.r2omics.cn/res/demodata/boxplot.txt\\",# 将此处换成你自己电脑里的文件\\n header = T # 指定第一行是列名\\n)\\n\\n# 把数据转换成ggplot常用的类型(长数据)\\ndf = df %>%\\n pivot_longer(-1,names_to = \\"Sample\\",values_to = \\"Value\\")\\n\\n# 绘图\\np = ggplot(df,aes(x=Sample,y=Value,fill=Sample))+\\n # stat_boxplot(geom = \\"errorbar\\", # 添加误差线\\n # width=0.3)+\\n geom_violin(alpha = 1, # 透明度\\n trim = T, # 是否修剪尾巴,即将数据控制到真实的数据范围内\\n scale = \\"count\\", # 如果“area”(默认),所有小提琴都有相同的面积(在修剪尾巴之前)。如果是“count”,区域与观测的数量成比例。如果是“width”,所有的小提琴都有相同的最大宽度。\\n\\n )+\\n theme_bw()+ # 主题\\n theme(\\n axis.text.x = element_text(angle = 90,\\n vjust = 0.5\\n ) # x轴刻度改为倾斜90度,防止名称重叠\\n )\\np\\n
# 其实就是在小提琴的图层下再画一个箱线图\\np +\\n geom_boxplot(width=0.16,\\n fill=\\"white\\",\\n outlier.alpha = 0\\n )
library(ggsignif) # 用于添加显著性标签\\n\\np + geom_signif( # 添加显著性标签\\n comparisons=list(c(\\"Sample1\\",\\"Sample2\\"),c(\\"Sample3\\",\\"Sample4\\")), # 选择你想在哪组上添加标签\\n step_increase = 0.1,\\n test=\\"t.test\\", # \\"t 检验,比较两组(参数)\\" = \\"t.test\\",\\"Wilcoxon 符号秩检验,比较两组(非参数)\\" = \\"wilcox.test\\"\\n test.args = list(\\"var.equal\\" = T), # 等方差 \\n map_signif_level=F # 标签样式F为数字,T为*号\\n )\\n\\n\\n
让我用几个文献中的图作为例子来进行介绍。
上图是一个比较常见的热图表现形式[1]。让我们按照前面总结出的热图解读步骤来进行拆解:第一步,确定行列及颜色所代表的意义:行是基因,列是样本,红色代表高表达,并且已经经过了Z-score标准化。第二步,发现没有经过聚类处理(想一想为什么这里并不需要)。第三步,可以明显地观察到数据分为上下两部分,上半部分在shDDX6组表达量高,下半部分则相反。进一步的,我们可以发现右上红色上调的基因多与免疫相关,而右下角蓝色下调基因部分多与增殖相关。由此,可以推断出作者想要表达DDX6可以促进增殖,并且负向调控部分免疫相关基因。
让我们看看这张图[2]:
不同于第一张图,这个热图被分成了两部分,且两部分的数目相等。对于这种图形,一般在不同区域之间具有一定的对应关系:两部分任意两个坐标相同的色块代表同一来源的样本:比如来自同一名患者的RNA和蛋白,癌和癌旁等。
我们依然可以使用上面的步骤进行解读。首先,我们确定了行是基因,列是样本,表达量/翻译效率(TE)已经经过标准化。在文献中,常常进行行内标准化(也就是使不同样本的同一个基因/特征能够相互比较)。值得注意的是,这种情况下不能进行跨基因或者跨区域的比较。我们以最上方的SPRY4和OSM为例,在TE部分,这两个基因都显示在shFBL组中明显下调,且shFBL-2(哪里来的?)的OSM颜色更深,但是我们不能因此得出结论,说shFBL-2样本中,OSM的翻译效率低于SPRY4,因为这两个基因都是分别在基因内部比较得出的相对值,就像不能比较篮球和足球谁的世界第一更第一一样。此外,也不能得出SPRY4的翻译效率低于其mRNA表达量一样,这属于两种不同性质的量化,不能直接相互比较。但是,我们可以说,SPRY4在shFBL组中的翻译效率下降的程度大于mRNA下降的程度(相当于都折算成了百分比)。其次,我们发现没有经过聚类处理。接下来,我们可以观察到在TE部分,颜色具有明显的左红右蓝的分布模式,也就是说明所有图中提到的基因的翻译效率均下降,而在mRNA部分,更趋向于相对均匀的分布模式。由此,我们可以推断出作者想要表达,FBL可以正向调控部分增殖及免疫相关基因的翻译,但是不影响其mRNA水平。
那么,在今天的结束,让我考考大家,这个热图经过标准化了吗[3]?
最后,我想说,Open Your Mind!!!专注分享生信及科研入门干货,欢迎关注,一起解锁思维边界!
参考文献:
1、Di Stefano, B., Luo, E.-C., Haggerty, C., et al., 2019. The RNA Helicase DDX6 Controls Cellular Plasticity by Modulating P-Body Homeostasis. Cell Stem Cell 25, 622-638.e13. https://doi.org/10.1016/j.stem.2019.08.018
2、Jana, S., Brahma, S., Arora, S., et al., 2023. Transcriptional-translational conflict is a barrier to cellular transformation and cancer progression. Cancer Cell 41, 853-870.e13. https://doi.org/10.1016/j.ccell.2023.03.021
3、Yang, L., Zhang, Z., Jiang, P., et al., 2024. Phase separation-competent FBL promotes early pre-rRNA processing and translation in acute myeloid leukaemia. Nat. Cell Biol. https://doi.org/10.1038/s41556-024-01420-z
","description":"R语言做热图? 南大小程聊科研的回答\\n\\n\\n让我用几个文献中的图作为例子来进行介绍。\\n\\n\\n\\n\\n\\n\\n\\n上图是一个比较常见的热图表现形式[1]。让我们按照前面总结出的热图解读步骤来进行拆解:第一步,确定行列及颜色所代表的意义:行是基因,列是样本,红色代表高表达,并且已经经过了Z-score标准化。第二步,发现没有经过聚类处理(想一想为什么这里并不需要)。第三步,可以明显地观察到数据分为上下两部分,上半部分在shDDX6组表达量高,下半部分则相反。进一步的,我们可以发现右上红色上调的基因多与免疫相关,而右下角蓝色下调基因部分多与增殖相关。由此…","guid":"https://www.zhihu.com/question/278716075/answer/121607518156","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T03:46:16.810Z","media":[{"url":"https://picx.zhimg.com/v2-c99c911c7626b37afe6a83642ca6bc57.jpg","type":"photo","width":626,"height":859,"blurhash":"LKRCiBDjTK.S_MSwRjoyu4awrqxF"},{"url":"https://pica.zhimg.com/50/v2-47308940386b915143cec9fd9fcdf089.jpg","type":"photo","width":405,"height":332,"blurhash":"LNP$:,+Px[A1_MO9j^s*.QOBWZxB"},{"url":"https://picx.zhimg.com/50/v2-157751f21c7f865a9dd2ced2f6343628.jpg","type":"photo","width":399,"height":571,"blurhash":"LiN-P}0et.?d%1Wrj[jZtRWVofkC"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(七):我们该怎么认识热图-3","url":"https://zhuanlan.zhihu.com/p/29397594560","content":"让我用几个文献中的图作为例子来进行介绍。 [图片] 上图是一个比较常见的热图表现形式[1]。让我们按照前面总结出的热图解读步骤来进行拆解: 第一步,确定行列及颜色所代表的意义:行是基因,列是样本,红色代表高表达,并且已经经过了Z-score标准化。第二步,发现没有经过聚类处理(想一想为什么这里并不需要)。第三步,可以明显地观察到数据分为上下两部分,上半部分在shDDX6组表达量高,下半部分则相反。进一步的,我们可以发现右…","description":"让我用几个文献中的图作为例子来进行介绍。 [图片] 上图是一个比较常见的热图表现形式[1]。让我们按照前面总结出的热图解读步骤来进行拆解: 第一步,确定行列及颜色所代表的意义:行是基因,列是样本,红色代表高表达,并且已经经过了Z-score标准化。第二步,发现没有经过聚类处理(想一想为什么这里并不需要)。第三步,可以明显地观察到数据分为上下两部分,上半部分在shDDX6组表达量高,下半部分则相反。进一步的,我们可以发现右…","guid":"https://zhuanlan.zhihu.com/p/29397594560","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T03:46:15.000Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ggplot2为什么安装不了啊?-momo的回答:我也遇到了这个问题,然后把r和r studio都更新到最新就解决了","url":"https://www.zhihu.com/question/421428189/answer/121464213305","content":"ggplot2为什么安装不了啊?我也遇到了这个问题,然后把r和r studio都更新到最新就解决了
","description":"ggplot2为什么安装不了啊? momo的回答\\n\\n\\n我也遇到了这个问题,然后把r和r studio都更新到最新就解决了","guid":"https://www.zhihu.com/question/421428189/answer/121464213305","author":"momo","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-11T01:33:25.932Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"应用R语言ggplot2包画图,怎样移除坐标轴两端的刻度线,只保留中间的?-被炸熟的虾的回答:继续来填很久前挖的坑——R语言画图 | ggplot2标尺(scale)函数(一...","url":"https://www.zhihu.com/question/611340749/answer/121409777476","content":"应用R语言ggplot2包画图,怎样移除坐标轴两端的刻度线,只保留中间的?继续来填很久前挖的坑——
scale_x_*和scale_y_*函数用于控制坐标轴的范围、刻度、标签和数学变换。
library(ggplot2)\\nls(\\"package:ggplot2\\", pattern = \\"^scale_x_.+\\")\\n#[1] \\"scale_x_binned\\" \\"scale_x_continuous\\" \\"scale_x_date\\" \\n#[4] \\"scale_x_datetime\\" \\"scale_x_discrete\\" \\"scale_x_log10\\" \\n#[7] \\"scale_x_reverse\\" \\"scale_x_sqrt\\" \\"scale_x_time\\" \\nls(\\"package:ggplot2\\", pattern = \\"^scale_y_.+\\")\\n#[1] \\"scale_y_binned\\" \\"scale_y_continuous\\" \\"scale_y_date\\" \\n#[4] \\"scale_y_datetime\\" \\"scale_y_discrete\\" \\"scale_y_log10\\" \\n#[7] \\"scale_y_reverse\\" \\"scale_y_sqrt\\" \\"scale_y_time\\"
常见的函数可以分为:
以上所有scale_x_*
和scale_y_*
函都支持以下核心参数:
name
:设置坐标轴名称,默认使用变量名。limits
:设置坐标轴范围,例如c(0, 100)
或类别向量c(\\"compact\\", \\"suv\\", \\"pickup\\")
。breaks
:设置刻度位置,例如seq(0, 10, 2)
。labels
:设置刻度标签,例如c(\\"A\\", \\"B\\", \\"C\\")
或自定义函数格式化输出,例如scale
函数expand
:接受一个长度为2或4的数值向量,设置坐标轴扩展范围,默认扩展5%,设置expand = c(0, 0)
可以取消扩展,比较抽象单独记录笔记。trans
:设置数学变换,例如\\"log10\\"
,\\"sqrt\\"
。下面我们通过示例来理解:
绘制汽车排量vs.高速油耗散点图
library(ggplot2)\\np11 <- ggplot(mpg, aes(x = displ, y = hwy)) + \\n geom_point() +\\n scale_x_continuous(name = \\"Engine Displacement (L)\\", # 坐标轴名称\\n limits = c(1, 8), # 范围限制\\n breaks = seq(1, 8, 1), # 刻度位置\\n labels = paste0(seq(1, 8, 1), \\"L\\")) + # 刻度标签(单位)\\n scale_y_continuous(name = \\"Highway MPG\\",\\n limits = c(10, 50),\\n breaks = c(20, 30, 40)) +\\n theme_bw(base_size = 20)
很多时候,我们会使用expand
参数设置坐标轴两侧不再额外扩展,即limits的
最大值与最小值就是坐标界限:
p12 <- ggplot(mpg, aes(x = displ, y = hwy)) + \\n geom_point() +\\n scale_x_continuous(name = \\"Engine Displacement (L)\\", # 坐标轴名称\\n limits = c(1, 8), # 范围限制\\n breaks = seq(1, 8, 1), # 刻度位置\\n labels = paste0(seq(1, 8, 1), \\"L\\"), # 刻度标签(单位)\\n expand = c(0, 0)) + #坐标轴两边不留扩展范围\\n scale_y_continuous(name = \\"Highway MPG\\",\\n limits = c(10, 50),\\n breaks = c(20, 30, 40),\\n expand = c(0, 0)) +\\n theme_bw(base_size = 20)
绘制不同车型的油耗箱线图,我们先挑选3个展示:
p21 <- ggplot(mpg, aes(x = class, y = hwy)) + \\n geom_boxplot() +\\n scale_x_discrete(name = \\"Vehicle Class\\",\\n limits = c(\\"compact\\", \\"suv\\", \\"pickup\\")) +# 指定类别顺序\\n theme_minimal(base_size = 20)\\np22 <- ggplot(mpg, aes(x = class, y = hwy)) + \\n geom_boxplot() +\\n scale_x_discrete(name = \\"Vehicle Class\\",\\n limits = c(\\"compact\\", \\"suv\\", \\"pickup\\"), # 指定类别顺序\\n labels = c(\\"Compact Car\\", \\"SUV\\", \\"Pickup Truck\\")) + #重命名标签\\n scale_y_continuous(name = \\"Highway MPG\\",\\n breaks = seq(10, 40, 5)) +\\n theme_minimal(base_size = 20)
此时limits
参数用于指定类别顺序,而不是连续变量的数值范围。
此外,很多时候,我们也会使用factor()
将类别变量转换为有序因子变量,这样绘图将按照因子顺序展示,例如:
mpg2 <- mpg\\nunique(mpg2$class)\\n#[1] \\"compact\\" \\"midsize\\" \\"suv\\" \\"2seater\\" \\"minivan\\" \\n#[6] \\"pickup\\" \\"subcompact\\"\\nmpg2$class2 <- factor(mpg2$class,levels = unique(mpg2$class))\\np23 <- ggplot(mpg2, aes(x = class, y = hwy)) + \\n geom_boxplot(fill = \\"#4d97cd\\") +\\n theme_bw(base_size = 20)\\np24 <- ggplot(mpg2, aes(x = class2, y = hwy)) + \\n geom_boxplot(fill = \\"#4d97cd\\") +\\n theme_bw(base_size = 20)\\nlibrary(patchwork)\\np23 + p24
依旧绘制不同车型的油耗箱线图,但是将纵坐标进行变换:
p <- ggplot(mpg, aes(x = class, y = hwy)) + \\n geom_boxplot()\\n## 对数变换(基数为 10)\\np31 <- p +\\n scale_y_log10(name = \\"Engine Displacement (log10)\\",\\n breaks = c(20, 30, 40)) +\\n theme_minimal(base_size = 20)\\n## 平方根变换\\np32 <- p +\\n scale_y_sqrt(name = \\"Highway MPG (sqrt)\\",\\n breaks = c(10, 20, 30, 40)) +\\n theme_minimal(base_size = 20)
绘图时需要注意遵守基本数学规则,例如:
scale_x_log10()
要求数据必须为正数。scale_x_sqrt()
要求数据为非负数。此外,我们也可以使用trans
参数调用转换功能,例如scale_x_log10()
等价于scale_x_continuous(trans = \\"log10\\")
## 对数变换\\np33 <- p +\\n scale_y_continuous(name = \\"Engine Displacement (log10)\\",\\n trans = \\"log10\\") +\\n theme_minimal(base_size = 20)\\n## 平方根变换\\np34 <- p +\\n scale_y_continuous(name = \\"Highway MPG (sqrt)\\",\\n breaks = c(10, 20, 30),\\n trans = \\"sqrt\\") +\\n theme_minimal(base_size = 20)
这里需要注意必须确保日期列为Date
或POSIXct
类型,不可以是字符串!!!否则会报错!!!必要时进行强制类型转换——
library(lubridate)\\ndf$date <- as.Date(df$date_str, format = \\"%Y-%m-%d\\") # 转换为 Date 类型\\ndf$datetime <- ymd_hms(df$datetime_str) # 转换为 POSIXct 类型
关键参数:
date_labels
):使用标准日期格式符号,例如%Y
表示四位年份,%b
表示缩写月份。scale_x_date(date_labels = \\"%b-%Y\\")
date_breaks
):成刻度间隔(如\\"1 week\\"
,\\"2 months\\"
,\\"5 years\\"
)。date_breaks
设置主刻度间隔,date_minor_breaks
设置小刻度间隔,例如每月一个主刻度,每半个月一个小刻度:scale_x_date(date_breaks = \\"1 month\\", # 主刻度间隔\\n date_minor_breaks = \\"2 weeks\\") # 小刻度间隔
limits
):设置坐标轴范围,例如限制显示2023年的数据:scale_x_date(limits = as.Date(c(\\"2023-01-01\\", \\"2023-12-31\\")))
实例操作:
我们首先随机生成一个时间序列数据集:
library(lubridate)\\ndf <- data.frame(Time = seq.Date(as.Date(\\"2023-01-01\\"), \\n by = \\"month\\", length.out = 12),\\n Value = rnorm(12))\\ndf\\n# Time Value\\n#1 2023-01-01 -0.06779526\\n#2 2023-02-01 -0.38481469\\n#3 2023-03-01 -0.16664112\\n#4 2023-04-01 1.73663893\\n#5 2023-05-01 1.12563644\\n#6 2023-06-01 -0.92181660\\n#7 2023-07-01 0.29921968\\n#8 2023-08-01 -0.34631186\\n#9 2023-09-01 -0.07694888\\n#10 2023-10-01 -0.12403332\\n#11 2023-11-01 0.18747863\\n#12 2023-12-01 -0.19623247\\nclass(df$Time)\\n#[1] \\"Date\\"
自定义日期坐标轴显示格式:
p4 <- ggplot(df, aes(x = Time, y = Value)) +\\n geom_line() +\\n scale_x_date(name = \\"Date\\",\\n date_breaks = \\"1 month\\", # 每月一个刻度\\n date_labels = \\"%Y %b\\", # 标签格式为 \\"年份 月份\\"\\n limits = as.Date(c(\\"2023-03-01\\", \\"2023-10-01\\"))) + # 日期范围 \\n theme_minimal(base_size = 20)
scales
包优化标签很多时候,原始变量的格式与我们的预期有所差距,例如我们想显示百分比而不是小数,想添加单位而不是只显示数字,亦或是想调整显示的位数、格式等等。虽然结合breaks
与labels
也可以实现,但借助scales
包中的格式化函数可以简化书写,增加通用性。
我们结合以下几个示例加强理解:
comma()
library(ggplot2)\\nlibrary(scales)\\ndf <- data.frame(category = c(\\"A\\", \\"B\\", \\"C\\"),\\n value = c(1500, 25000, 300000))\\np51 <- ggplot(df, aes(x = category, y = value)) +\\n geom_col() +\\n scale_y_continuous(labels = scales::comma) +\\n theme_bw(base_size = 20)
percent()
scales::percent
将输入值乘以100并添加%符号,适合输入为0-1的小数的快速格式化。
scales::percent(x, accuracy = 1, suffix = \\"%\\")
accuracy
:精度(如0.01
表示保留两位小数)。suffix
:后缀符号(默认是%
)。scales::percent_format
需配置参数后使用,适合输入为百分比数值或需要自定义精度/符号的场景。
scales::percent_format(accuracy = 1, scale = 100, suffix = \\"%\\")
scale
:将输入值乘以该系数后添加%
。默认是100
(假设输入是0-1的小数)。如果输入数据已经是百分比值(如25
表示25%),需设置scale = 1
。accuracy
:精度(例如0.1
表示保留一位小数)。suffix
:后缀符号。案例测试:
df <- data.frame(category = c(\\"A\\", \\"B\\", \\"C\\"),\\n proportion = c(0.15, 0.25, 0.6))\\n## scales::percent 将输入值乘以 100 并添加 % 符号\\np521 <- ggplot(df, aes(x = category, y = proportion)) +\\n geom_col() +\\n scale_y_continuous(labels = scales::percent) +\\n theme_bw(base_size = 20)\\n\\ndf <- data.frame(category = c(\\"A\\", \\"B\\", \\"C\\"),\\n proportion = c(15, 25, 60))\\n## scales::percent_format数据已经是百分比值(如 15 表示 15%)\\np522 <- ggplot(df, aes(x = category, y = proportion)) +\\n geom_col() +\\n scale_y_continuous(labels = scales::percent_format(scale = 1)) +# 不放大数值,直接加 % \\n theme_bw(base_size = 20)
number_format()
精度0.01 + 添加单位
p531 <- ggplot(mpg, aes(x = displ, y = hwy)) +\\n geom_point() +\\n scale_y_continuous(labels = scales::number_format(accuracy = 0.01, \\n suffix = \\" MPG\\")) + \\n\\n theme_bw(base_size = 20)
千分位 + 货币符号开头:效果25000
→$25,000
df <- data.frame(category = c(\\"A\\", \\"B\\", \\"C\\"),\\n value = c(5000, 20000, 25000))\\np532 <- ggplot(df, aes(x = category, y = value)) +\\n geom_col() +\\n scale_y_continuous(labels = scales::number_format(accuracy = 1,prefix = \\"$\\",big.mark = \\",\\")) +\\n theme_bw(base_size = 20)
科学记数法:效果30000
→30k
# 将数值除以1000\\np533 <- ggplot(mpg, aes(x = displ, y = hwy)) +\\n geom_point() +\\n scale_y_continuous(labels = scales::number_format(scale = 1e-3)) +\\n theme_bw(base_size = 20)\\n# 将数值除以1000,添加\\"k\\"\\np534 <- ggplot(mpg, aes(x = displ, y = hwy)) +\\n geom_point() +\\n scale_y_continuous(labels = scales::number_format(scale = 1e-3, \\n suffix = \\"k\\")) + # 将数值除以1000,添加\\"k\\" \\n theme_bw(base_size = 20)
编写自定义函数:需要更复杂的格式,可直接编写自定义函数
custom_labels <- function(x) {\\n paste0(round(x, 2), \\" (Zhuanhuan: cty/1.11)\\")\\n}\\n\\np535 <- ggplot(mpg, aes(x = displ, y = cty/1.11)) +\\n geom_point() +\\n scale_y_continuous(limits = c(7.5,32.5)) +\\n theme_bw(base_size = 20)\\np536 <- ggplot(mpg, aes(x = displ, y = cty/1.1)) +\\n geom_point() +\\n scale_y_continuous(limits = c(7.5,32.5),labels = custom_labels) +\\n theme_bw(base_size = 20)
date_format()
library(lubridate)\\ndf <- data.frame(date = seq.Date(as.Date(\\"2023-01-01\\"), \\n by = \\"month\\", length.out = 6),\\n value = rnorm(6))\\np541 <- ggplot(df, aes(x = date, y = value)) +\\n geom_line() +\\n scale_x_date(labels = scales::date_format(\\"%b-%Y\\")) + # 格式化为\\"月份-年份\\"\\n theme_bw(base_size = 20)
scale_*_binned()
用于对连续变量进行分箱(binning),它可以将连续变量分割为离散的区间(bins),并在坐标轴上以分箱后的离散刻度显示。以下是详细说明和示例:
scale_*_binned(\\n name = waiver(), # 设置坐标轴名称\\n breaks = waiver(), # 手动指定分箱断点(例如 c(0, 10, 20, 30))\\n labels = waiver(), # 设置分箱标签\\n limits = NULL, # 设置坐标轴范围\\n n.breaks = NULL, # 分箱数量(优先级低于 breaks,例如 n.breaks = 5 生成 5 个分箱)\\n nice.breaks = TRUE, # 是否自动优化分箱断点\\n expand = waiver(), # 坐标轴扩展范围\\n trans = \\"identity\\", # 对数据预先进行变换(如对数变换 trans = \\"log10\\")\\n ...\\n)
我们绘制一个散点图,并对y轴进行分箱(生成5个分箱)
library(ggplot2)\\np61 <- ggplot(mpg, aes(x = displ, y = cty)) + \\n geom_point(size = 6,color = \\"#db6968\\",alpha = 0.6) +\\n theme_bw(base_size = 20)\\np62 <- ggplot(mpg, aes(x = displ, y = cty)) + \\n geom_point(size = 6,color = \\"#db6968\\",alpha = 0.6) +\\n scale_y_binned(n.breaks = 5) + \\n theme_bw(base_size = 20)\\np61 + p62
手动指定分箱断点
p63 <- p61 + scale_y_binned(breaks = c(10, 15, 20, 25, 30),\\n labels = c(\\"> 10\\", \\"
该自学,因为现在你还有时间
后面年级越高,时间越少
等到工作后管病人,更没时间研究统计、编程这些东西了
我跟医生网友 经常夜里10点以后还在交流他们的课题
还有医生朋友,根本没时间研究这些和写文章,但是评主任有需要
总之,越早开始接触这些,越好
年纪大了,学新东西也没那么快了
我的大学没有医学院,我自学医学和统计的时候已经30周岁了,还好到了这个岁数,我的脑子还是好用的
今年春节已经有了一区paper,当然是和医学博士合作的,嘿嘿
","description":"临床大一是不是应该自学 R 语言? 说话直接的刚子的回答\\n\\n\\n该自学,因为现在你还有时间\\n\\n后面年级越高,时间越少\\n\\n等到工作后管病人,更没时间研究统计、编程这些东西了\\n\\n我跟医生网友 经常夜里10点以后还在交流他们的课题\\n\\n还有医生朋友,根本没时间研究这些和写文章,但是评主任有需要\\n\\n总之,越早开始接触这些,越好\\n\\n年纪大了,学新东西也没那么快了\\n\\n我的大学没有医学院,我自学医学和统计的时候已经30周岁了,还好到了这个岁数,我的脑子还是好用的\\n\\n今年春节已经有了一区paper,当然是和医学博士合作的,嘿嘿","guid":"https://www.zhihu.com/question/4139067549/answer/121231713779","author":"说话直接的刚子","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-10T13:35:29.568Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言机器学习mlr3和mlr3verse之间是什么关系,想要学习应该从哪方面入手?-Codewar的回答:[图片] 导读 :在临床研究的海洋中,数据分析就像一把钥匙,能够打开...","url":"https://www.zhihu.com/question/653890812/answer/121221579250","content":"R语言机器学习mlr3和mlr3verse之间是什么关系,想要学习应该从哪方面入手?导读 :在临床研究的海洋中,数据分析就像一把钥匙,能够打开隐藏在数据背后的真相。本文将带你探索R语言中强大的机器学习框架mlr3,通过临床实例,一步步掌握这个神器,让你的研究如虎添翼!
在临床研究中,我们经常需要从复杂的患者数据中提取有价值的信息,预测疾病风险,或者评估治疗效果。传统的统计方法固然重要,但在大数据时代,机器学习方法正逐渐成为临床研究的标配工具。
mlr3是R语言中一个现代化的机器学习框架,它提供了一套统一、灵活且高效的接口,让我们能够轻松应用各种机器学习算法。与其前身mlr相比,mlr3采用了面向对象的设计,性能更优,扩展性更强,特别适合处理临床研究中常见的复杂数据结构。
让我们先安装并加载mlr3包及其扩展:
# 加载包\\nlibrary(mlr3)\\nlibrary(mlr3learners)\\nlibrary(mlr3viz)\\nlibrary(ggplot2)\\n\\n# 查看mlr3内置的任务\\nmlr_tasks$keys()\\n\\n# 查看内置的学习器\\nmlr_learners$keys()\\n
运行上述代码,你会看到mlr3提供的各种预定义任务和学习器:
任务(Tasks):定义了我们要解决的问题,如分类、回归等。
小贴士 :在临床研究中,选择合适的机器学习算法至关重要。mlr3的优势在于它提供了统一的接口,让你可以轻松尝试不同的算法,而不必为每种算法学习不同的语法。这就像在医院里,不同的检查设备操作界面如果统一,医生就能更专注于诊断而非操作细节。初学者常常被R语言中不同包的语法差异所困扰,而mlr3正是为解决这个问题而生。另外,安装包时可能会遇到依赖问题,建议使用 install.packages(\\"packagename\\", dependencies = TRUE) 确保所有依赖都被正确安装。如果你是在医院的网络环境中,可能需要设置代理才能顺利下载包。
在临床研究中,数据准备是至关重要的一步。无论是电子病历、实验室检查结果还是问卷调查,我们都需要将这些原始数据转化为机器学习算法可以理解的格式。
让我们以一个糖尿病预测的例子来说明如何在mlr3中准备数据:
# 加载糖尿病数据集\\ndata(\\"pima\\", package = \\"mlbench\\")\\nhead(pima)\\n\\n# 数据预处理\\n# 1. 处理缺失值\\npima_clean <- na.omit(pima)\\n\\n# 2. 查看数据分布\\nsummary(pima_clean)\\n\\n# 3. 创建mlr3任务\\ntask_diabetes <- TaskClassif$new(\\n id = \\"diabetes\\",\\n backend = pima_clean,\\n target = \\"diabetes\\",\\n positive = \\"pos\\"\\n)\\n\\n# 查看任务信息\\nprint(task_diabetes)\\n\\n# 查看特征\\ntask_diabetes$feature_names\\n\\n# 查看目标变量分布\\ntable(task_diabetes$truth())\\n
执行上述代码后,你会看到类似这样的输出:
在mlr3中, Task 对象是机器学习工作流的起点。对于分类问题(如预测患者是否患有糖尿病),我们使用 TaskClassif ;对于回归问题(如预测患者的血糖水平),则使用 TaskRegr 。
小贴士 :临床数据往往存在缺失值、异常值等问题,这些都会影响模型的性能。在创建任务前,一定要进行充分的数据清洗和探索。可以使用 summary() 、 hist() 等函数查看数据分布,使用 boxplot() 检测异常值。对于缺失值,除了简单的删除外,还可以考虑使用均值/中位数填充,或更复杂的插补方法。在处理不平衡的临床数据时(如罕见疾病的阳性样本很少),可以考虑使用mlr3的重采样功能或结合其他包进行上/下采样。记住,垃圾进垃圾出(GIGO)原则在机器学习中尤为重要——数据质量直接决定了模型质量!另外,在创建任务时,确保正确指定目标变量和正类别,这对于后续的模型评估至关重要。
在临床研究中,选择合适的机器学习算法对于获得可靠的预测结果至关重要。不同的算法有不同的假设和适用场景,了解它们的特点能帮助我们做出明智的选择。
mlr3提供了丰富的学习器(Learner),从简单的逻辑回归到复杂的随机森林、神经网络等,应有尽有。让我们尝试几种常用的算法来预测糖尿病:
# 创建不同的学习器\\nlearner_log_reg <- lrn(\\"classif.log_reg\\") # 逻辑回归\\nlearner_rpart <- lrn(\\"classif.rpart\\") # 决策树\\nlearner_rf <- lrn(\\"classif.ranger\\") # 随机森林\\n\\n# 查看学习器的参数\\nprint(learner_log_reg$param_set)\\nprint(learner_rpart$param_set)\\nprint(learner_rf$param_set)\\n\\n# 设置学习器参数\\nlearner_rf$param_set$values <- list(\\n num.trees = 500,\\n mtry = 3,\\n min.node.size = 5\\n)\\n\\n# 训练模型\\nlearner_log_reg$train(task_diabetes)\\nlearner_rpart$train(task_diabetes)\\nlearner_rf$train(task_diabetes)\\n\\n# 查看模型\\nprint(learner_log_reg$model)\\nprint(learner_rpart$model)\\n\\n# 可视化决策树\\nif (requireNamespace(\\"rpart.plot\\", quietly = TRUE)) {\\n library(rpart.plot)\\n rpart.plot(learner_rpart$model)\\n} \\n
执行后,你会看到不同模型的详细信息和决策树的可视化:
小贴士 :在临床研究中,模型的可解释性往往与预测性能同等重要。逻辑回归和决策树等模型提供了清晰的解释,让医生能够理解预测背后的原因;而随机森林、神经网络等\\"黑盒\\"模型虽然性能可能更好,但解释性较差。根据研究目的选择合适的模型:如果是为了理解风险因素,可能优先考虑可解释性强的模型;如果纯粹追求预测准确性,则可以选择更复杂的模型。
另外,不要忘记调整模型参数!默认参数很少是最优的,特别是对于复杂的临床数据。mlr3提供了方便的参数调优功能,我们将在后续章节中介绍。临床研究者常犯的错误是过度关注模型的训练性能而忽视泛化能力,记住:一个在训练集上表现完美但无法泛化的模型是没有实用价值的。
在临床研究中,准确评估模型性能至关重要。一个看似准确的模型可能在实际应用中表现不佳,特别是当面对新患者数据时。mlr3提供了丰富的工具来评估和比较不同模型的性能。
让我们使用交叉验证来评估之前创建的三个模型:
# 加载必要的包\\nlibrary(mlr3)\\nlibrary(mlr3learners)\\nlibrary(mlr3viz)\\nlibrary(mlr3measures)\\n\\n# 设置重采样策略:10折交叉验证\\ncv10 <- rsmp(\\"cv\\", folds = 10)\\n\\n# 对三个模型进行评估\\nresult_log_reg <- resample(task_diabetes, learner_log_reg, cv10)\\nresult_rpart <- resample(task_diabetes, learner_rpart, cv10)\\nresult_rf <- resample(task_diabetes, learner_rf, cv10)\\n\\n# 查看评估结果\\nprint(result_log_reg$score())\\nprint(result_rpart$score())\\nprint(result_rf$score())\\n\\n# 计算平均性能指标\\nmean(result_log_reg$score(msr(\\"classif.acc\\"))$classif.acc)\\nmean(result_rpart$score(msr(\\"classif.acc\\"))$classif.acc)\\nmean(result_rf$score(msr(\\"classif.acc\\"))$classif.acc)\\n\\n# 计算更多临床相关的指标\\nmeasures <- msrs(c(\\"classif.acc\\", \\"classif.sens\\", \\"classif.spec\\", \\"classif.auc\\"))\\n\\n# 比较三个模型在所有指标上的表现\\nresult_log_reg$score(measures)\\nresult_rpart$score(measures)\\nresult_rf$score(measures)\\n\\n# 可视化ROC曲线\\nif (requireNamespace(\\"precrec\\", quietly = TRUE)) {\\n library(precrec)\\n # 获取预测概率\\n prediction_rf <- learner_rf$predict(task_diabetes)\\n # 绘制ROC曲线\\n autoplot(prediction_rf, type = \\"roc\\")\\n}\\n
执行后,你会看到各个模型在不同评估指标上的表现和ROC曲线:
小贴士 :在临床研究中,仅仅关注准确率往往是不够的。根据具体的临床问题,我们可能更关心敏感性(不漏诊)或特异性(不误诊)。例如,对于筛查性质的测试,我们可能更看重敏感性;而对于确诊性质的测试,特异性则更为重要。AUC(ROC曲线下面积)是一个综合性能指标,但它也有局限性,特别是在处理不平衡数据时。
交叉验证是评估模型泛化能力的黄金标准,但在样本量小的临床研究中,可能需要考虑使用留一法交叉验证(LOOCV)或自助法(Bootstrap)。另外,对于时间序列数据(如患者的纵向随访数据),应该考虑使用时间序列交叉验证,避免\\"未来数据\\"泄露到训练集中。
记住,模型评估不仅仅是技术问题,更是与临床决策紧密相关的问题。一个在统计上\\"最优\\"的模型,如果不符合临床实际需求,也是没有实用价值的。与临床专家密切合作,确保评估指标与临床目标一致,是成功应用机器学习的关键。
在掌握了基本的模型训练和评估后,我们需要进一步优化模型性能,并将其应用到实际临床场景中。mlr3提供了强大的工具来进行自动化参数调优和模型部署。
让我们首先看看如何使用mlr3tuning包进行参数优化:
# 加载必要的包\\nlibrary(mlr3)\\nlibrary(mlr3learners)\\nlibrary(mlr3tuning)\\nlibrary(paradox)\\n\\n# 创建一个可调参数的随机森林学习器\\nlearner_rf_tuned <- lrn(\\"classif.ranger\\", predict_type = \\"prob\\")\\n\\n# 定义参数空间\\nparam_set <- ps(\\n num.trees = p_int(lower = 100, upper = 1000),\\n mtry = p_int(lower = 1, upper = 8),\\n min.node.size = p_int(lower = 1, upper = 10)\\n)\\n\\n# 定义调优实例\\ntuner <- tnr(\\"grid_search\\", resolution = 5)\\nterminator <- trm(\\"evals\\", n_evals = 25)\\n\\n# 创建调优实例\\ninstance <- TuningInstanceSingleCrit$new(\\n task = task_diabetes,\\n learner = learner_rf_tuned,\\n resampling = rsmp(\\"cv\\", folds = 5),\\n measure = msr(\\"classif.auc\\"),\\n search_space = param_set,\\n terminator = terminator\\n)\\n\\n# 执行调优\\ntuner$optimize(instance)\\n\\n# 查看最佳参数\\nprint(instance$result)\\n\\n# 使用最佳参数设置学习器\\nlearner_rf_tuned$param_set$values <- instance$result_learner_param_vals\\n\\n# 在整个数据集上训练最终模型\\nlearner_rf_tuned$train(task_diabetes)\\n\\n# 应用到新数据\\n# 假设我们有新的患者数据\\nnew_patients <- data.frame(\\n pregnant = c(1, 5, 0),\\n glucose = c(85, 166, 137),\\n pressure = c(66, 72, 40),\\n triceps = c(29, 19, 35),\\n insulin = c(0, 175, 168),\\n mass = c(26.6, 25.8, 43.1),\\n pedigree = c(0.351, 0.587, 2.288),\\n age = c(31, 51, 33)\\n)\\n\\n# 预测新患者的糖尿病风险\\nprediction <- learner_rf_tuned$predict_newdata(new_patients)\\nprint(prediction)\\n\\n# 提取预测概率\\nprobs <- prediction$prob\\nprint(probs)\\n\\n# 可视化特征重要性\\nif (requireNamespace(\\"ranger\\", quietly = TRUE) && requireNamespace(\\"ggplot2\\", quietly = TRUE)) {\\n importance <- as.data.frame(learner_rf_tuned$model$variable.importance)\\n importance$feature <- rownames(importance)\\n colnames(importance)[1] <- \\"importance\\"\\n \\n ggplot(importance, aes(x = reorder(feature, importance), y = importance)) +\\n geom_bar(stat = \\"identity\\", fill = \\"steelblue\\") +\\n coord_flip() +\\n labs(x = \\"特征\\", y = \\"重要性\\", title = \\"特征重要性排序\\") +\\n theme_minimal()\\n}\\n
执行上述代码后,你会看到参数调优的结果、最佳模型的预测结果以及特征重要性的可视化:
小贴士 :参数调优是提升模型性能的关键步骤,但也要警惕过拟合。在临床研究中,模型的稳定性和可解释性往往比极致的性能更重要。使用嵌套交叉验证(nested cross-validation)可以更准确地评估调优后模型的泛化能力。特征重要性分析不仅有助于提高模型性能,还能为临床研究提供有价值的见解,帮助医生理解哪些因素对疾病风险影响最大。
在实际应用中,我们还需要考虑模型的部署和维护。可以将训练好的模型保存为文件,以便在临床决策支持系统中使用:
# 保存模型\\nsaveRDS(learner_rf_tuned, file = \\"diabetes_prediction_model.rds\\")\\n\\n# 加载模型\\nloaded_model <- readRDS(\\"diabetes_prediction_model.rds\\")\\n\\n# 创建一个简单的预测函数\\npredict_diabetes_risk <- function(patient_data) {\\n prediction <- loaded_model$predict_newdata(patient_data)\\n risk_probs <- prediction$prob[, \\"pos\\"]\\n risk_levels <- cut(risk_probs, \\n breaks = c(0, 0.3, 0.7, 1), \\n labels = c(\\"低风险\\", \\"中等风险\\", \\"高风险\\"))\\n \\n result <- data.frame(\\n 风险概率 = risk_probs,\\n 风险等级 = risk_levels\\n )\\n \\n return(result)\\n}\\n\\n# 示例:评估三名患者的风险\\nrisk_assessment <- predict_diabetes_risk(new_patients)\\nprint(risk_assessment)\\n\\n# 可视化风险分布\\nif (requireNamespace(\\"ggplot2\\", quietly = TRUE)) {\\n ggplot(risk_assessment, aes(x = 1:nrow(risk_assessment), y = 风险概率, fill = 风险等级)) +\\n geom_bar(stat = \\"identity\\") +\\n scale_fill_manual(values = c(\\"低风险\\" = \\"green\\", \\"中等风险\\" = \\"yellow\\", \\"高风险\\" = \\"red\\")) +\\n labs(x = \\"患者ID\\", y = \\"糖尿病风险概率\\", title = \\"患者糖尿病风险评估\\") +\\n theme_minimal()\\n}\\n
小贴士 :将机器学习模型整合到临床工作流程中需要谨慎。模型应该作为辅助工具,而非替代医生的判断。在实际应用前,必须进行严格的临床验证,并考虑伦理和法规要求。建立一个定期更新模型的机制也很重要,因为随着新数据的积累和医学知识的发展,模型需要不断优化。
另外,不要忘记模型的可解释性。在临床环境中,医生和患者都需要理解预测背后的原因。可以使用SHAP值或部分依赖图等工具来解释个体预测结果:
# 安装和加载解释性工具\\nif (!requireNamespace(\\"iml\\", quietly = TRUE)) install.packages(\\"iml\\")\\nlibrary(iml)\\n\\n# 创建预测器对象\\npredictor <- Predictor$new(\\n model = learner_rf_tuned,\\n data = task_diabetes$data(),\\n y = \\"diabetes\\"\\n)\\n\\n# 计算特征重要性\\nimportance <- FeatureImp$new(predictor, loss = \\"ce\\")\\nplot(importance)\\n\\n# 为特定患者生成解释\\n# 选择第一个新患者\\npatient_1 <- new_patients[1, ]\\n\\n# 计算SHAP值\\nif (requireNamespace(\\"shapr\\", quietly = TRUE)) {\\n library(shapr)\\n explainer <- shapr(learner_rf_tuned$model, X = task_diabetes$data()[, task_diabetes$feature_names])\\n explanation <- explain(patient_1, explainer)\\n plot(explanation)\\n}\\n
通过这五章的学习,你已经掌握了使用mlr3进行临床数据分析的基本流程,从数据准备、模型选择、评估到优化和应用。mlr3的模块化设计和丰富的扩展生态系统使它成为临床研究中强大的工具。随着你的深入学习,还可以探索更多高级功能,如多标签分类、生存分析和深度学习集成等。
希望这个教程能帮助你在临床研究中更有效地应用机器学习技术,为患者带来更精准的诊断和治疗方案!
想了解更多?
如果你对mlr3在临床研究中的应用有任何疑问,或者需要针对特定临床场景的分析方案,欢迎留言咨询!我们拥有丰富的临床数据分析经验,可以为你提供个性化的指导和支持。
下期预告:《R语言临床数据可视化实战:从基础图表到交互式仪表盘》,敬请期待!
参考资料 :
表达 Septal parvalbumin(表达 parvalbumin 的隔区)的 (PV+) 和表达 calbindin(表达 calbindin 的隔区)的 (CB+) 投射分别抑制内嗅皮层(MEC)中的低阈值和快发放中间神经元。我们研究了这两种输入如何控制自由活动小鼠 MEC 中的神经元活动。刺激 PV+ 和 CB+ 终端会导致空间调谐的 MEC 神经元去抑制,但对时间编码和爆发式放电产生不同的影响。因此,激活 PV+ 投射会破坏 MEC 神经元的θ节律性放电,而刺激 CB+ 投射会增加网格细胞的爆发式放电,并以细胞类型特异性的方式增强相位前移。抑制隔区的 PV+ 或 CB+ 神经元会对情境、参照和工作记忆产生不同的影响。总之,我们的研究结果揭示了隔区 GABA 能投射与 MEC 中间神经元的特定连接如何转化为对 MEC 神经元编码的不同调节。
东莞富临医疗科技有限公司是 Intan 亚洲代理商,为亚洲客户供应 Intan 电生理产品与配套产品
一、介绍
内侧内嗅皮层(MEC)被认为通过利用空间和时间神经元编码方案来支持具有时间结构的记忆的形成。空间编码通过多种空间调谐细胞类型来实现,例如边界细胞、头部方向(HD)细胞和网格细胞。已知 MEC 和海马神经元的空间和时间放电特性是由位于皮质下的隔区协调的。例如,研究表明,该区域的药理学失活会破坏海马神经元在θ周期内的局部场电位(LFP)θ振荡和脉冲的时间组织。与θ振荡的破坏同时发生的是,隔区失活会扭曲 MEC 网格细胞的空间放电模式,但不会影响 MEC 中的边界细胞和 HD 细胞或海马中的位置细胞。
海马体和内嗅皮层(MEC)接收来自隔区 GABA 能神经元的输入,这些神经元被认为在θ节律的产生和同步中起着核心作用。这一假设的支持依据在于解剖学研究显示,隔区的 GABA 能神经元通过广泛的局部连接能够很好地同步隔区内的放电,并通过长程投射轴突将这种节律性传递到远端目标区域。此外,在海马体和内嗅皮层中,隔区的 GABA 能神经元仅对 GABA 能神经元起作用,因此可以合理地认为它们处于通过局部网络的去抑制来控制时间编码的理想位置。事实上,体内电生理记录表明,通过光遗传学手段抑制隔区的 GABA 能神经元会显著降低海马体和内侧边缘皮质(MEC)的θ振荡,而激活这些神经元则能精确控制海马体局部场电位(LFP)θ振荡的频率。尽管有大量证据表明隔区的 GABA 能神经元对海马体的θ节律性起着重要作用,但隔区 GABA 能神经元如何调节 MEC 网络的确切机制仍不清楚。
隔膜中的γ-氨基丁酸能神经元并非同质的神经元群体,根据神经化学标记表达以及在目标区域所抑制神经元的特性,必须假定它们具有不同的功能。因此,在内嗅皮层(MEC)的第二层,位于隔膜内侧的 PV+ 和 CB+ 神经元分别优先抑制快发放(假定为 PV+) )和低阈值发放(LTS;假定为生长抑素 [SOM]+) 中间神经元)。这两种中间神经元亚群在投射到主要细胞的细胞区室方面存在差异。我们假设这两种γ-氨基丁酸能投射会解除 MEC 神经元的抑制,但对局部 MEC 微回路的控制却有所不同。因此,我们着手在体内进行测试。
二、结果
01.刺激隔区 PV+ 和 CB+ 轴突会导致内嗅皮层中空间选择性神经元的去抑制
我们在 PVCre 和 CBCre 小鼠的隔区注射了 pAAV-double floxed-hChR2(H134R)-mCherry-WPRE-pA(AAV-DIO-ChR2-mCherry),并在背侧内侧内嗅皮层(MEC)中心位置进行了四极电极记录(图 S1 为注射部位和四极电极轨迹的显微照片,图 S2 为 MEC 和副下托的轴突投射),同时对 MEC 中的 PV+ 和 CB+ 轴突进行了光遗传学刺激(图 1A 和 1B)。我们以 20 Hz 的频率施加了 5 毫秒的蓝光脉冲(473 纳米),这使得激光脉冲在整个 LFP θ 周期中均匀分布(图 S3A 和 S3B),并分析了其对放电率的影响(图 1B 和 1C;在 4 只小鼠中记录了 PVCre 577 个神经元,在 6 只小鼠中记录了 CBCre 849 个神经元)。没有响应神经元的四极电极记录未纳入分析。在两种小鼠中,我们发现激光刺激后受到抑制的神经元分别为 (PVCre 7.8% 和 CBCre 3.4%,被激活的神经元分别为 (PVCre 25.1% 和 CBCre 26.7%,以及对激光刺激无反应的神经元分别为 (PVCre 67.1% 和 CBCre 70.9%(图 1C)。根据反应潜伏期的分布情况(图 1D - 1F),我们将激光脉冲起始后短潜伏期(6 毫秒)即被抑制的神经元归类为直接抑制型。在 PVCre 小鼠中,中位反应潜伏期为 3.5 毫秒,在 CBCre 小鼠中为 4.5 毫秒(当使用变化点分析计算潜伏期时,分别为 2.5 毫秒和 3.5 毫秒;见 STAR 方法)。刺激隔区的 PV+ 和 CB+ 轴突以假定的直接方式抑制了 MEC 中一部分快发放中间神经元。在 PVCre 小鼠中,直接抑制的快发放神经元数量(112 个快发放神经元中的 37 个,占 33.0%)多于 CBCre 小鼠(150 个快发放神经元中的 17 个,占 11.3%;p < 0.001,卡方检验)(图 1E)。在两组中,检测到的平均发放率低于 8 赫兹的直接抑制神经元比例都很小( (PVCre 组 465 个慢发放神经元中的 8 个,占 1.7%;CBCre 组 699 个中的 5 个,占 0.7%),这可能是由于在基线发放率低的神经元中难以检测到激光诱导的抑制。与激活隔区的 PV+ 和 CB+ 轴突会导致去抑制的假设一致,我们发现大多数被激活的神经元的反应潜伏期比直接抑制的神经元要长(图 1G 和 1H;PVCre 145 个神经元中有 96 个 R6 毫秒,占 66.2%;CBCre 218 个神经元中有 208 个 R6 毫秒,占 95.4%)。因此,两组中直接抑制神经元的中位反应潜伏期均快于被激活的神经元(两组的 p 值均 < 0.001,曼 - 惠特尼 U [MWU] 检验)。在被激活的神经元中,激活强度(刺激后时间直方图峰值处的脉冲数除以激活阈值)在两种基因型中相似(p = 0.54,MWU 检验)。接下来,我们研究了激光刺激激活了哪些功能细胞类型(图 1B 和 1I),发现 PV+ 和 CB+ 轴突激活了空间定向神经元和速度调节神经元,而对头方向细胞的影响则很少。
图 1.光照刺激隔区的 PV+ 和 CB+ 轴突会引发短潜伏期抑制和长潜伏期激活,即内嗅皮层(MEC)神经元的去抑制作用(A)将 AAV-DIO-ChR2-mCherry 注射到 PVCre(4 只小鼠,共 577 个神经元)和 CBCre(6 只小鼠,共 849 个神经元)小鼠的隔区,并将包含四极电极和光纤的微驱动器植入到内嗅皮层(MEC)。分析了在隔区轴突激光刺激下被抑制(Inh)或激活(Ac)的 MEC 神经元的反应潜伏期和放电特性。注射部位、四极电极轨迹和投射模式见图 S1 和 S2。(B)实验设置,用于在基线(Bl)条件下将记录到的神经元分类为定义的功能细胞类型,并在刺激(Stim)条件下确定激光诱导的反应。(C)两种基因型中,经光遗传学轴突激活后抑制、激活和无反应(Nr)的 MEC 神经元所占百分比。(D)代表性抑制性神经元的刺激后时间直方图。蓝色条形表示激光持续时间(5 毫秒)。(E 和 F)在 PVCre(蓝色)和 CBCre(红色)小鼠中,光遗传学轴突刺激后被抑制的(E)快发放(FS)神经元(平均发放频率 R8 赫兹)。(F)慢发放神经元(平均发放频率 R0.25 且 <8 赫兹)的反应潜伏期。假定的直接抑制神经元的反应潜伏期为 %6 毫秒(虚线)。(G)代表性激活神经元的刺激后时间直方图。(H)激光刺激时被激活的神经元的反应潜伏期。(I)对于每种功能神经元类型(从左至右:速度调制型快速发放神经元、其他快速发放神经元、网格细胞、边界细胞、头部方向细胞和未分类细胞),激活神经元的比例 [n(激活神经元)/(n(激活神经元)+ n(未激活神经元)] 如图所示。
02.刺激 PV+ 和 CB+ 轴突对 MEC 神经元的θ节律性放电产生不同的影响
解剖学和电生理学研究表明,与波谷和波峰同步的内侧内嗅皮层(MEC)神经元属于不同的神经元群体。因此,我们想知道刺激隔区 PV+ 和 CB+ 轴突是否会对这两种神经元群体产生不同的招募效果。在 PVCre 小鼠中,绝大多数被激活的神经元(92.2%)与波谷同步(图 2A)。相比之下,在 CBCre 小鼠中,轴突激活对波谷和波峰同步神经元的招募程度相似(分别为 59.3% 和 40.7%)(图 2B)。在两种基因型中,被激活的波谷和波峰同步神经元大多为未分类细胞(波谷同步:PVCre 小鼠 66.0%,CBCre 63.8%;峰值锁定:PVCre 77.8%,CBCre 67.6%),其次是网格细胞(11.1%-27.6%)和边界细胞(7.6%-14.1%)(图 S3C 和 S3D)。对隔区 PV+ 轴突进行光遗传学刺激,而非对 CB+ 轴突进行刺激,会降低 LFP θ 振荡的功率和频率(图 S3E-S3H),同时也会减少相位锁定的程度(平均结果向量长度 ½R;图 2C-2E)以及激活的、波谷锁定的 MEC 慢棘波(>0.25 和 <8 Hz)神经元的 θ 节律性放电(根据细胞的自相关图计算的 θ 比率;图 2F-2H)。对于激活的快棘波神经元(>8 Hz)也观察到了类似的效果(R,中位数,基线 [Bl],0.48,刺激 [Stim],0.42,p < 0.001;θ 比率,中位数,Bl,22.68,Stim,17.92,p < 0.05,Wilcoxon 符号秩检验)。观察到的效应不能用运行速度的变化来解释,因为在基线和刺激条件下,两种情况下的运行速度都相似。
图 2.光遗传学刺激隔区 PV+ 而非 CB+ 轴突会破坏 MEC 中的θ节律性(A)在基线(Bl)条件下,确定了被归类为对激光刺激无反应(Nr,4 PVCre 只小鼠中共 342 个神经元)或被激活(Ac,4 PVCre 只小鼠中共 115 个神经元)的单个神经元的首选尖峰相位(平均放电频率 R0.25 且<8 赫兹)。在 PVCre 小鼠中,谷相锁定的激活神经元的比例大于谷相锁定的无反应神经元的比例(p < 0.001,c2 检验)。(B)与(A)相同,但针对的是 CBCre 小鼠。对于无反应的神经元(在 6 只 CBCre 小鼠中,n = 518 个神经元)和被激活的神经元(在 6 只 CBCre 小鼠中,n = 176 个神经元),其处于低谷锁定状态的比例相似(p = 0.28,卡方检验)。(C)对于激活的槽锁定神经元,基线条件下锁定局部场电位(LFP)θ周期的程度(通过平均结果向量长度ðRÞ评估)与刺激(Stim)条件下的相应值进行了对比((PVCre,4 只小鼠的 106 个神经元;CBCre,6 只小鼠的 105 个神经元)。低于身份线(虚线)的值表明θ节律性降低。低于和高于身份线的值的百分比已标明。(D)在 PVCre 小鼠中,激光诱导下表现出θ相位锁定降低的激活神经元比例大于无反应神经元的比例(p < 0.05,c2 检验)。在 CBCre 小鼠中未观察到差异(p = 0.21)。(E)对两种基因型中激光诱导的θ相位锁定变化的量化,以 DR(刺激 - 基线)表示。在 PVCre 小鼠中,激活神经元的 DR 小于 0,而非响应神经元的 DR 则并非如此(分别为 p < 0.001 和 p = 0.082;Wilcoxon 符号秩检验)。在 CBCre 小鼠中,非响应神经元和激活神经元的 DR 均大于 0(p 值均 < 0.05)。(F)与(C)相同,但此处的θ比率是根据细胞自相关图计算得出的,即θ频段(6 - 12 赫兹)的功率与 2 - 4 赫兹平均功率的比值。(G)在 PVCre 小鼠中,激活神经元中显示θ波比率降低的比例大于无反应神经元(p < 0.05,威尔科克森符号秩检验)。而在 CBCre 小鼠中则无差异(p = 0.16)。(H)在 PVCre 小鼠中,激活神经元的 Dθ 比值小于 0(p < 0.01,Wilcoxon 符号秩检验)。在 PVCre 小鼠的无反应神经元以及 CBCre 小鼠的激活神经元和无反应神经元中,该比值与 0 无显著差异(所有 p 值均大于 0.078)。柱状图显示了(E)和(F)中的神经元比例以及(G)和(H)中的中位数和四分位距(IQR)。有关 LFP θ 分析,请参见图 S3。*p < 0.05,**p < 0.01,***p < 0.001。
基因型(两个 p 值均大于 0.23,威尔科克森符号秩检验)。值得注意的是,刺激隔区 PV+ 或 CB+ 轴突均未导致慢发放和快发放神经元或速度细胞的速度评分(即运行速度与瞬时放电率之间的关联)发生可检测的变化(所有 p 值均大于 0.14,威尔科克森符号秩检验)。
在 CBCre 小鼠中,轴突刺激增加了慢棘波激活神经元以及无反应神经元的调制深度(图 2C - 2E),但对快棘波神经元没有影响(p = 0.17,威尔科克森符号秩检验)。刺激隔区 CB+ 轴突时,θ 比率未发生变化(图 2F - 2H)。在 PVCre 和 CBCre 小鼠中,峰值锁定神经元均未观察到变化(所有 p 值 R 0.065,威尔科克森符号秩检验),即使仅考虑调制比 R R 0.2(p < 0.05,雷利检验)的θ 调制神经元进行分析,结果也未发生变化(所有 p 值 R 0.16,威尔科克森符号秩检验)。
03.刺激隔区 CB+ 而非 PV+ 轴突会导致波谷锁定的主要神经元的首选脉冲相位向前移动
接下来我们探究了刺激内嗅皮层(MEC)中隔区 PV+ 或 CB+ 轴突末梢是否会改变神经元的偏好θ相位。这些神经元要么锁定在局部 MEC θ 节律的波谷,要么锁定在波峰(图 3)。只有放电频率大于 0.25 赫兹且小于 8 赫兹的 θ 调制神经元才被纳入分析。在波谷锁定的神经元中(图 3A - 3D),刺激隔区 CB+ 轴突(而非 PV+ 轴突)会导致首选放电相位向前移动(“相位提前”),前提是该神经元被激光激活(中位圆相位移,6.22°)。这反映在显示相位提前的神经元比例以及平均圆相位差上(图 3C)。更详细的分析表明,在假定的去抑制期(激光开始后 20 毫秒,平均圆相位差,9.02°)的相位移比激光开始前 20 毫秒(平均圆相位差,4.97°)更大;(p < 0.001,威尔科克森符号秩检验)(图 S4A 和 S4B)。在基线条件下以及非响应神经元的基线和刺激记录中,相应的时间段内未观察到变化(图 S4A 和 S4B),即使仅考虑与激活神经元同时在同一线圈上记录到的非响应神经元也是如此(p = 0.42,威尔科克森符号秩检验)。我们还检查了激光诱导的相位提前是否特定于某种功能细胞类型(图 3D),发现 CBCre 小鼠的网格细胞和未分类细胞显示出显著的相位提前。在波谷锁定的边界细胞中也观察到了相位提前的趋势(n = 8 个神经元)。刺激 CB+ 轴突并未改变激活的快发放神经元的首选θ相位。激光激活的波谷锁定的 HD 细胞数量较少,无法对此细胞类型进行分析。与波谷锁定的神经元相反,波峰锁定的神经元在刺激 CB+ 轴突后,未显示出相位提前(图 3E 和 3F)。
图 3.刺激隔区 CB+ 而非 PV+ 轴突会导致波谷锁定神经元的脉冲相位向前移动(A)对基线(Bl)和刺激(Stim)阶段中平均放电频率为 0.25 和 <8 赫兹的波谷锁定、θ 调制神经元的首选尖峰相位进行了比较。(B)在基线阶段中激活(Ac)神经元的首选尖峰相位与刺激阶段中的对应值在 PVCre 和 CBCre 小鼠中进行了对比 (PVCre,n = 4 只小鼠的 106 个神经元;CBCre,n = 6 只小鼠的 105 个神经元)。低于身份线(虚线)的值表明光遗传学轴突激活导致首选尖峰相位的前移。数字表示低于和高于身份线的神经元比例。(C)首选尖峰相位的前移仅限于 CBCre 小鼠中激活的谷锁定神经元。在 CBCre 小鼠中,首选尖峰相位出现前移的激活神经元比例大于其他三个组(所有 p 值 < 0.001,卡方检验)。其他组之间没有差异(所有 p 值 > 0.64)(左)。在 CBCre-Ac 组中,平均圆周相位差小于 0(p < 0.001,威尔科克森符号秩检验),但在其他组中并非如此(所有 p 值 > 0.12)(右)。(D)针对不同类型的波谷锁定细胞(从左至右:网格细胞、边界细胞、未分类细胞、FS 速度细胞和其他 FS 细胞),计算了基线条件和刺激条件下的首选尖峰相位的循环差值。在 CBCre-Ac 组中,网格细胞和未分类细胞在刺激期间的尖峰相位出现了显著的前移(p 值均 < 0.01,威尔科克森符号秩检验;分别为 29 个和 67 个神经元),但在 FS 细胞中未检测到相位变化(p 值均 > 1.00;分别为 19 个和 6 个神经元)。边界细胞中观察到相位变化的趋势(p = 0.062,8 个神经元)。在 PVCre-Ac 组中,任何细胞类型的首选尖峰相位均未发生变化(所有 p 值 > 0.94)。(E)将基线期和刺激期峰值锁定神经元的首选尖峰相位进行了比较。(F)光遗传学轴突刺激并未改变峰值锁定神经元的首选放电相位(左图:显示前向相移的细胞比例,所有 p 值均大于 0.22,c 2 检验;右图:基线和刺激阶段之间的圆周相位差,所有 p 值均大于 0.70,威尔科克森符号秩检验;CBCre,n = 71 个神经元, PVCre,n = 9 个神经元)。柱状图显示比例或中位数和四分位距。对于多重比较,应用了 Holm-Bonferroni 校正程序。更多细节见图 S4。**p < 0.01,***p < 0.001。
04.在海马隔区轴突受到刺激时能够被激活的神经元中,相位超前现象最为显著
由于在 CBCre 小鼠的谷锁激活神经元中选择性地观察到了激光诱导的相位提前,我们想知道这一细胞群体是否特别容易表现出相位超前(PP)(图 4)。我们采用了两种方法来比较基线记录期间谷锁和峰锁神经元的 PP:(1)我们考虑位置场边界来计算 PP。具体而言,将通过给定场的所有经过合并,并使用圆-线性回归分析来检查场内所有脉冲的相对距离与θ相位之间的关系(图 4A 和 4B)。(2)我们通过考虑放电增加期(PEF)期间的经过来评估 PP,即脉冲串(图 4C 和 4D)(STAR 方法)。这种方法用于准确检测空间放电较少的神经元中的 PP。在 PVCre 小鼠中,激活的和无反应的谷锁神经元之间没有差异(图 4A - 4D)。而在 CBCre 小鼠中,两种方法均表明激活神经元的 PP 比无反应神经元更明显(图 4A - 4D)。在两种基因型中均未检测到峰值锁定神经元的差异(所有 p 值均大于 0.65,MWU 检验;数据未显示)。因此,我们着重研究了 CBCre 小鼠的谷值锁定神经元,以更详细地考察 PP。细胞类型特异性分析显示,激活的谷值锁定网格细胞和未分类细胞表现出比同种细胞类型中未响应的神经元更强的 PP(图 4E)。值得注意的是,在 PVCre 小鼠中未观察到差异(所有 p 值均大于 0.24;数据未显示)。由于只有少数细胞被激光激活,因此未对边界细胞和 HD 细胞进行分析。鉴于激活的未分类细胞与未响应的未分类细胞在信息评分方面存在显著差异(图 4F),我们考察了空间关系。
图 4.在 CBCre 小鼠中,活跃神经元的相位超前现象比无反应神经元更为显著。(A 和 B)基线(Bl)条件下记录的波谷锁定神经元的单个场(合并通过)中脉冲的相位前移。(A)展示了处于激活状态(Ac)的神经元在 PVCre(上)和 CBCre(下)小鼠中的轨迹(灰色)、场边界以及所有进入相位前移分析的尖峰位置(红色)(每个面板的左上角)。此外,还描绘了每个细胞的三个示例场的相位距离图。(B)对所有场的相位前移进行了定量分析 (PVCre: 激活(Ac),n = 213 个场,无反应(Nr),278 个场;CBCre: 激活(Ac),n = 220 个场,无反应(Nr),560 个场)。插图显示了中位数和四分位距。在两种基因型的谷锁定神经元中,激活和无反应神经元均检测到相位前移(中位斜率与 0 比较,所有 p 值 < 0.001,Wilcoxon 符号秩检验)。在 PVCre 小鼠(上)中,激活神经元和无反应神经元的斜率没有差异(p = 0.19,Mann-Whitney U 检验)。在 CBCre 小鼠(下)中,激活神经元的相位前移比无反应神经元更明显(p < 0.001)。(C 和 D)基线条件下,在放电频率升高期(PEF)记录的波谷锁定神经元的脉冲(合并)的相位前移。(C)图中展示了在 PVCre(上)和 CBCre(下)小鼠中,所有进入相位前移分析的尖峰位置(红色,左)以及相位距离图(右),所涉及的为两个被激活的神经元。(D)所有组均存在显著的相位超前现象(中位斜率与 0 比较,所有 p 值均 < 0.001,Wilcoxon 符号秩检验)。在 PVCre 小鼠中,激活神经元与无反应神经元的相位超前情况相似(p = 0.23,Mann-Whitney U 检验)。而在 CBCre 小鼠中,激活神经元的相位超前现象比无反应神经元更明显(p < 0.001)。峰值锁定神经元无差异(数据未显示)。(E-H)对 CBCre 小鼠网格细胞和未分类细胞的尖峰相位前移的分析。(E)激活的网格细胞(左)和未分类细胞(右)表现出比相应细胞类型的无反应神经元更显著的相位超前(两者 p 值均 < 0.01,威尔科克森符号秩检验)。(F)在未分类的细胞组中,激活神经元的空间信息得分高于无反应神经元(p < 0.001,曼 - 惠特尼 U 检验)。(G)在激活(上)和无反应(下)的神经元中,相位距离斜率与空间信息得分均显著相关(所有 p 值均 < 0.05,皮尔逊相关)。表现出强烈相位前移的高空间神经元的比例在激活神经元中高于无反应神经元(米色背景)。相反,空间调谐弱且相位前移少的神经元比例在无反应神经元中更高(蓝色背景)(所有 p 值均 < 0.001,卡方检验)。(H)示例神经元在路径和相位距离图上的尖峰,具有强(米色背景)和弱(蓝色背景)相位前移。条形图显示中位数和四分位距或比例。多重比较采用 Holm-Bonferroni 校正程序。*p < 0.05,**p < 0.01,***p < 0.001。
信息评分与位置偏好(PP)之间存在很强的相关性,这在两种细胞群中均得到证实(图 4G)。然而,被激活的未分类细胞中表现出强位置偏好的高空间选择性神经元的比例高于无反应的未分类细胞(分别为 26.5% 和 3.5%;图 4G 和 4H,米色背景)。相反,空间选择性低且位置偏好弱的神经元在无反应细胞中的比例高于被激活的细胞(分别为 83.5% 和 32.6%;图 4G 和 4H,蓝色背景)。
05.刺激隔区 CB+ 轴突会增加 PP 并以细胞类型特异性的方式改变 MEC 神经元放电的相位偏移
接下来,我们研究了激光诱导激活对 CBCre 小鼠不同细胞类型中 PP 的影响。在网格细胞中,无论是考虑合并的还是单次的 PEF 过程,激光诱导激活对相位距离斜率均无影响(图 5A 和 5B)。在激活的未分类神经元中,当合并分析时,基线和刺激条件之间没有差异(图 5C),但在单次分析中检测到激光诱导的相位距离斜率降低,从而导致 PP 增加(图 5D - 5F)。激光诱导的 PP 增加是由于具有正平均斜率的神经元数量减少所致(图 5D 和 5E)。当计算每个细胞中具有正斜率的 PEF 比例时,也检测到了类似的倾向(基线时,每个细胞 34.3% 的正斜率;刺激时,29.4%;p = 0.074,Wilcoxon 符号秩检验)。非响应神经元在激光刺激后 PP 减少(图 5F)。PP 的变化与神经元的空间信息得分无关(p = 0.64,皮尔逊相关;数据未显示)。最后,我们发现激光使网格细胞的相位偏移向更早的相位移动(图 5G),但在未分类细胞中则没有这种现象(图 5H)。刺激隔区 PV+ 轴突对网格细胞和未分类细胞的相位偏移没有影响(所有 p 值均大于 0.33;数据未显示)。
图 5. 对隔区 CB+ 轴突的刺激增强了内嗅皮层神经元的相位超前,并以细胞类型特异性的方式改变了其相位偏移态度(A-D)在 CBCre 小鼠中,对受θ节律调制的网格锁定细胞和未分类细胞在基线(Bl)和刺激(Stim)条件下放电增强期(PEF)的相位距离斜率进行比较(如图 3 所示)。仅纳入在两种条件下均有 PEF 的神经元进行分析(STAR 方法)(网格细胞 28/29 个;未分类细胞 53/67 个)。(A 和 B)在网格细胞中,从(A)合并通过或(B)单次通过获得的相位距离斜率在基线和刺激会话之间没有差异(p 值均大于 0.48,Wilcoxon 符号秩检验)。示例相位距离图和定量分析如图所示。(C)在未分类细胞中,合并通过的相位距离斜率在基线和刺激会话之间没有差异(p = 0.38,Wilcoxon 符号秩检验)。(D)当基于单次通过计算斜率时,检测到相位预进(PP)增加(p < 0.05,Wilcoxon 符号秩检验)。(E 和 F)基于单次通过对未分类细胞中相位预进的详细分析。(E)将基线阶段的相对斜率与刺激阶段相应激活神经元的值进行对比绘制。位于身份线(虚线)下方的值表明光遗传学轴突激活导致相位提前增加。数字表示位于身份线下方和上方的神经元比例。(F)在激活神经元中,激光诱导的相位提前增加的比例高于无反应神经元(p < 0.005,卡方检验)(左)。激活神经元表现出激光诱导的相位提前增加(p < 0.05,D 相对斜率与 0,威尔科克森符号秩检验)(右)。相反,无反应神经元在刺激阶段的相位提前量小于基线阶段(p < 0.05)(右)。激活神经元和无反应神经元之间的相位提前变化存在显著差异(p < 0.005,曼 - 惠特尼 U 检验)(右)。(G)在激活的网格细胞中,激光诱导的相位偏移前移的比例(左)以及相位偏移的幅度(右)均大于无反应的网格细胞(p 值均 < 0.005,卡方检验和曼 - 惠特尼 U 检验)。(H)在未分类的细胞中,激活神经元与无反应神经元之间没有差异(所有 p 值 R 0.58,曼 - 惠特尼 U 检验)。柱状图显示中位数和四分位距或比例。单次分析仅考虑斜率在 -1 和 1 之间的情况。*p < 0.05,**p < 0.01,#p < 0.05 与 0 相比。
06.在 MEC 中招募隔膜 CB+ 而非 PV+ 轴突会增加网格细胞的爆发式放电
最后,我们研究了隔区 CB+ 和 PV+ 轴突刺激对内侧内嗅皮层(MEC)网格细胞放电的影响。我们发现,尽管θ节律性放电略有减少(图 2),且激光刺激导致部分快发放电中间神经元的放电率发生变化(图 1E 和 1I),但刺激隔区 PV+ 轴突时网格结构未发生重大变化(图 6A 和 6C)。因此,网格得分(图 6C)以及其他参数,如单次实验中的稳定性、空间信息得分以及网格场内放电的百分比,在基线和刺激条件下均无显著差异(所有 p 值 R 0.26,Wilcoxon 符号秩检验)。刺激隔区 CB+ 轴突时也得到了类似的结果(图 6B 和 6D;所有 p 值 R 0.55,Wilcoxon 符号秩检验)。接下来,我们测试了通过隔区 CB+ 或隔区 PV+ 通路激光诱导的去抑制是否改变了网格细胞的爆发概率(图 6E 和 6F)。值得注意的是,在 PVCre 小鼠中,激光刺激并未改变网格细胞或其他由激光刺激激活的功能细胞类型的爆发放电(图 6E)。在小鼠中,情况则相反,激光刺激期间,活跃的网格细胞而非无反应的网格细胞表现出爆发式放电增加(图 6F)。每次爆发的脉冲数未发生改变(p = 0.065,威尔科克森符号秩检验)。最后,我们发现除网格细胞外,其他 MEC 细胞类型的爆发概率均未显著增加(图 6F)。
图 6. 刺激隔区 CB+ 轴突而非 PV+ 轴突会增加网格细胞的爆发式放电(A) PVCre小鼠在基线(Bl)和刺激(Stim)阶段记录到的代表性激活(Ac)网格细胞的彩色编码放电率图。图中放电率按最大峰值放电率缩放(蓝色,静默;红色,最大)。(B)与(A)相同,但针对的是 CBCre 小鼠。(C)对隔区 PV+ 轴突进行光遗传学激活并未改变网格得分(p = 0.63,威尔科克森符号秩检验)。在基线或刺激阶段网格得分大于 0.47 的细胞被纳入此分析(n = 26 个神经元)。(D)刺激隔区 CB+ 轴突并未改变激活的网格细胞的网格得分(p = 0.13,威尔科克森符号秩检验,n = 56 个神经元)。(E)在 PVCre 小鼠中,刺激隔区轴突并未改变激活的网格细胞、边界细胞和未分类细胞的爆发式放电(所有 p 值均大于 0.83,威尔科克森符号秩检验)。(F)刺激 CB+ 轴突增加了激活的网格细胞的爆发式放电(p < 0.005,威尔科克森符号秩检验),但对无反应的(Nr)网格细胞、边界细胞和未分类细胞的放电情况没有影响(所有 p 值均大于 0.10)。柱状图表示中位数和四分位距。对多重比较应用了霍尔姆 - 邦费罗尼校正程序。*p < 0.05,**p < 0.01。
07.隔区 PV+ 或 CB+ 神经元的化学遗传失活对工作记忆和参考记忆以及对与奖励相关的情境的位置偏好具有不同的影响
为了检验隔区 CB+ 和 PV+ 神经元的化学遗传失活是否会影响依赖于内嗅皮层 - 海马网络的行为,我们采用了 8 臂放射状迷宫任务,该任务要求小鼠从先前学习到的空间位置获取奖励(图 7A;注射部位见图 S5),以及条件性位置偏好(CPP)任务,以评估情境 - 奖励关联(图 7B)。在 8 臂放射状迷宫任务中,氯氮平-N-氧化物(CNO)处理期间,PV-hM4D(Gi) 组参考首次记忆错误显著增多,但工作记忆错误无显著增加。相比之下,CNO 给药后,CB-hM4D(Gi) 组工作记忆和参考首次记忆错误显著增多。CNO 对对照组小鼠的表现或任何组的参考重复记忆错误均无影响(图 7A)。在 CPP 任务中,小鼠被训练将一个中性情境与奖励(乙醇)联系起来,将另一个中性情境与生理盐水联系起来。训练完成后,给小鼠施用 CNO,并让它们自由进入两个情境。如预期的那样,对照组表现出对与乙醇相关的环境的偏好(图 7B)。隔区 PV-hM4D(Gi) 组未表现出偏好,而隔区 CB-hM4D(Gi) 组则表现出偏好(图 7B)。为了测试隔区 PV-hM4D(Gi) 小鼠的损伤是由于动机处理受损还是对局部环境变化的处理受损,对隔区 PV-hM4D(Gi) 小鼠进行了动机任务(渐进比操作反应任务;图 7C)和物体位置记忆任务(图 7D)的测试。在动机评估中,小鼠在渐进比时间表下接受测试,其中每个食物颗粒所需的杠杆按压次数都比前一个多。在对照组和隔区 PV-hM4D(Gi) 小鼠中,给予 CNO 均未改变断点(小鼠停止按压的点),这表明动机并未因隔区 PV+ 神经元的化学遗传失活而受到显著影响(图 7C)。在物体位置记忆任务中,对照组和隔区 PV-hM4D(Gi) 组对新移位的物体探索明显多于未移位的物体(图 7D),这表明它们能够完整地察觉到环境的局部变化。综合来看,这些结果表明,在抑制隔区 PV+ 细胞期间,位置偏好任务中的损伤并非由于动机损伤或无法识别局部环境差异所致。
图 7. 化学遗传学失活隔区 PV+ 或 CB+ 神经元对工作记忆和参考记忆以及对奖励相关环境的位置偏好具有不同的影响(A)小鼠在 8 臂辐射迷宫中接受训练,其中 8 个臂中有 4 个臂放置了奖励颗粒。在收集奖励的过程中,小鼠可能会犯三种错误:工作记忆错误(在同一次试验中再次访问已收集过奖励的臂);参考记忆首次错误(访问从未放置过奖励的臂);以及参考记忆重复错误(在同一次试验中再次访问参考记忆错误臂)。训练完成后(组平均值每试验少于 1 次参考记忆首次错误),小鼠在腹腔注射生理盐水(SAL)/氯氮平-N-氧化物(CNO)后接受测试。CNO 给药对野生型(WT)对照小鼠没有显著影响(上图,SAL 与 CNO,n = 8 只小鼠,所有 p 值均大于 0.99,重复测量方差分析)。CNO 给药后,PV-hM4D(Gi) 组(n = 11 只小鼠)参考记忆错误显著增加(中图,SAL 与 CNO,p < 0.005),但工作记忆错误没有显著增加。(A)在工作记忆或参考记忆重复错误方面,两组间无显著差异(底部图,生理盐水组与氯氮平诺特组,p R 0.86)。氯氮平诺特给药后,CB-hM4D(Gi) 组(n = 13 只小鼠)在工作记忆(生理盐水组与氯氮平诺特组,p < 0.01)和参考记忆首次错误(生理盐水组与氯氮平诺特组,p < 0.05)方面显著增加,但参考记忆重复错误无显著增加(生理盐水组与氯氮平诺特组,p > 0.99)。(B)在条件性位置偏好实验中,小鼠被训练将一种环境与奖励(乙醇)联系起来,将另一种环境与生理盐水联系起来。氯氮平诺特给药 30 分钟后,小鼠可自由进入两种环境。对照组(n = 25 只小鼠 [11 只 PVCre 小鼠,8 只 CBCre 小鼠,6 只野生型小鼠])和隔区 CB-hM4D(Gi) 组(n = 15 只小鼠)对与奖励相关的环境表现出位置偏好(对照组,p < 0.01;CB 组,p < 0.05,t 检验)。隔区 PV-hM4D(Gi) 组(n = 10 只小鼠)未表现出偏好(p = 0.87)。(C)小鼠接受按压杠杆获取颗粒奖励的训练,随后在渐进比程中进行测试,在该过程中,每次奖励所需的按压次数都比前一次多。通过所获奖励总数来衡量,动机在对照组(n = 6 只小鼠)和隔区 PV-hM4D(Gi) 组(n = 7 只小鼠)中均未发生改变(对照组,p = 0.96;PV 组,p = 0.12,t 检验)。(D) 在物体位置记忆测试中,给予 CNO 后,小鼠探索一个包含两个物体副本的开放场地(获取);1 小时后,它们探索相同的开放场地,其中一个物体副本位于新位置(保持)。对照组(n = 9 只小鼠)和隔区 PV-hM4D(Gi) 组(n = 7 只小鼠)均表现出对新位置物体的优先探索,表明物体位置记忆完好(p 值均 < 0.001,t 检验)。柱状图显示平均值 ± 标准误。多重比较采用邦费罗尼校正程序。代表性注射部位见图 S5。*p < 0.05,** p < 0.01,*** p < 0.001。ns,不显著。
三、讨论
01.PV+和CB+这两种神经元都会导致内嗅皮层(MEC)的去抑制现象
当研究人员首次发现隔区 - 海马投射的γ-氨基丁酸能神经元时,他们预测了一种假定的基于解剖学依据,他们提出了抑制功能失调的假说。他们提出这一假说是因为顺行标记的隔区谷氨酸脱羧酶表达的 (GAD+) 神经元与海马间神经元形成对称(即抑制性)突触。从功能角度来看,钙成像实验表明,投射到海马的隔区 GABA 轴突在动物运动和显著感觉刺激呈现期间会被激活。然而,这些神经元的募集是否会导致抑制功能失调,以及这如何影响下游目标的处理,一直不得而知。为了解决这个问题,我们通过实验性募集隔区 GABA 轴突,并研究其对行为小鼠 MEC 中不同功能细胞类型的电生理特性的影响。与激活 GABA 轴突会导致 MEC 神经元抑制功能失调的预测一致,我们确实发现 MEC 神经元在轴突刺激时会迅速降低放电率。这种快速抑制之后,另一群 MEC 神经元出现了较慢的激活,其中包括快速放电神经元以及空间调谐的慢速放电神经元。有趣的是,与网格细胞和边界细胞不同,HD 细胞很少对激光刺激作出反应,尤其是在 CBCre 小鼠中。这些发现与海马旁区失活会破坏网格细胞但不影响 HD 细胞放电的观察结果一致,并且表明 HD 细胞属于不受海马旁区 GABA 能通路控制的 MEC 神经网络。在快速抑制的神经元中,快速放电的中间神经元在两种基因型中都最为丰富,尽管在 PVCre 小鼠中的比例高于 CBCre 小鼠。由于检测抑制需要足够高的基线放电率,因此不能排除由于技术限制而遗漏了被抑制的慢速放电神经元。
此前已讨论过在体内去抑制背景下 GABA 能神经元的作用,但涉及的机制有所不同。例如,在杏仁核和皮质中的精妙研究已表明,特定局部 GABA 能中间神经元的激活可抑制其他中间神经元,从而导致锥体神经元的去抑制。值得注意的是,在这些研究中,最终导致去抑制的局部 GABA 能中间神经元的募集是由来自远端脑区的长程兴奋性输入驱动的。相比之下,本研究中描述的机制涉及 GABA 能投射神经元。
02.隔膜 PV+ 轴突募集影响空间定向的 MEC 神经元的θ节律性
自从这些神经元被发现以来,人们就推测隔区长程投射的 GABA 能神经元在其靶区的θ振荡产生中起着重要作用。事实上,对海马下托区域神经元活动的干扰,无论是通过抑制还是以超出θ波范围的频率进行刺激,都会扰乱θ波的产生。在本研究中,我们探究了海马下托的 PV+ 和/或 CB+ 神经元的募集是否会影响 MEC 神经元的θ节律性,如果影响,其潜在机制是什么。对海马下托两个投射的轴突进行直接刺激至关重要,因为这使我们能够对受海马下托起搏器控制的 MEC 神经回路的功能特性得出结论。值得注意的是,也是最为重要的是,我们发现海马下托 PV+ 神经元的轴突刺激通过去抑制作用激活了波谷锁定的,而非波峰锁定的主神经元以及快发放的中间神经元。基于先前的研究结果,我们推断波谷锁定神经元位于 MEC(内嗅皮层)的第二层,而峰值锁定神经元位于第三层。因此,我们的研究结果表明,内嗅皮层中谷底锁定的主神经元的θ节律性放电是通过隔区 PV+ / 内嗅皮层 PV+ 通路的节律性去抑制作用产生的。隔区 PV+ 神经元与内嗅皮层 PV+ 神经元之间以及内嗅皮层 PV+ 神经元与多种类型的主神经元之间存在突触连接的证据与这种假设相符。有趣的是,内嗅皮层 PV+ 神经元抑制所有类型的兴奋性细胞(即星形细胞、中间星形细胞、中间锥体细胞),但不抑制锥体细胞。因此,可以推测后者可能包含 HD 细胞,因为它们是唯一一种未因轴突激活而解除抑制的细胞类型。此外,我们发现隔区 CB+ 神经元的轴突刺激对内嗅皮层神经元的θ节律性放电没有影响。
03.Septal CB+ 轴突募集调节 MEC 中空间定向神经元的相位编码
海马体中隔区对于时间编码的关键作用已得到明确证实。因此,中隔区失活与海马体位置细胞的相位偏移(PP)和序列编码发生改变有关。然而,中隔区是否也对 MEC 中网格细胞的相位偏移有贡献则无法评估,因为该脑区失活会导致网格细胞放电的空间周期性降低。由于此处的操作(即光遗传学刺激)并未影响 MEC 神经元的空间编码特性,所以能够解决这一特定问题。与在直线跑道上奔跑的大鼠网格细胞的研究结果类似,我们发现,在开放场地中,小鼠的谷间锁定网格细胞比峰间锁定网格细胞表现出更多的相位偏移,其他 MEC 神经元(如未分类细胞)也是如此。我们进一步发现,在 CB+ 通路刺激下被激活的谷底锁定神经元特别容易表现出相位偏移。其中,网格细胞和未分类细胞在激光刺激下均表现出偏好放电相位的前移,而后者还表现出相位偏移的增强。
潜在机制可能涉及由 MEC 树突靶向的低阈值脊椎(LTS)假定的 SOM+中间神经元介导的去抑制作用。这种情形与实验数据和理论考量相符,根据这些数据和考量,θ 周期内放电的时间由树突中的兴奋水平决定。因此,这里采用的方法不仅使我们能够确定隔区在 MEC 时间编码中的功能,而且还确定了隔区 CB+ 投射是支持这一功能的细胞基础。
人们认为,相位偏移(PP)是将单个神经元的放电整合为序列的重要机制,从而支持对短时间内相继发生的事件的记忆。然而,由于技术限制,无法在不破坏其他细胞和网络特性的情况下对相位偏移进行操作,这阻碍了对该理论的实验验证。有趣的是,我们发现隔区的 CB+ 神经元能够调节相位偏移,并且对于八臂辐射迷宫中的完整工作记忆至关重要,该实验要求小鼠记住最近获得奖励的位置。因此,隔区的 CB+ 神经元可能起到关键作用。这将是有用的“工具”,有助于未来研究 PP 与序列记忆之间的潜在联系。
04.隔膜 CB+ 轴突募集影响网格细胞的爆发式放电
多项研究表明, SOM+中间神经元的一个普遍功能是抑制局部主要神经元的爆发式放电。因此,体内实验表明,通过光遗传学手段抑制海马体、杏仁核和躯体感觉皮层中的 SOM+ 神经元会增加附近主要神经元的爆发式放电。体外研究证实,通过树突靶向的 SOM+ 中间神经元的抑制作用,通过调节由兴奋性驱动产生的树突平台电位来控制爆发式放电。这些发现与先前在体外建立的连接模式相结合,即海马下托 CB+ 神经元抑制 MEC 中的 SOM+ 神经元,从而提出了这样一种假设:海马下托 CB+ 轴突的激活会增加 MEC 主要神经元的爆发式放电,前提是这些神经元未受到抑制。对于未受抑制的 MEC 网格细胞来说,情况确实如此,但对于其他功能细胞类型则并非如此。有趣的是,先前的一项研究表明,在群体水平上,网格细胞比 MEC 中的其他所有细胞类型更容易爆发式放电。人们很容易推测,具有“爆发性”的网格细胞拥有某种细胞机制,能够产生树突平台电位,而这种电位又受到隔区神经元输入的调节。
网格细胞中爆发式放电的具体功能尚不清楚,但有几项研究表明,爆发式脉冲比单个脉冲更能有效地触发突触后动作电位和长期可塑性。在海马体中,NMDA 受体依赖性可塑性已被证明能够支持动物在接触新环境和学习目标位置时,位置细胞放电模式的改变。越来越多的证据表明,内嗅皮层(MEC)中的网格细胞也会发生可塑性变化。这可以从学习目标位置或环境局部变化所诱导的放电模式改变中推断出来。因此,海马隔区的神经元被招募可能会增强网格细胞的爆发性,从而增强 MEC 网络的可塑性。
四、结论
总之,我们在此研究了源自隔区的两种抑制性输入,即 PV+ 和 CB+ 投射,对 MEC 神经元活动的影响。由于选择性轴突募集使我们能够研究其对 MEC 中特定细胞群的影响,因此我们能够剖析隔区 PV+ 和 CB+ 投射的不同调节功能。值得注意的是,两种投射的募集均使空间调谐神经元去抑制,但对θ节律性、PP 和爆发式放电的调节作用明显不同。隔区 PV+ 和 CB+ 神经元作用模式不同的最简单解释是它们在 MEC 中分别与快发放和低阈值发放的中间神经元存在特定的连接。最后,抑制了在空间记忆任务中,隔区 PV+ 或 CB+ 神经元表现出功能的分离。
五、实验对象及方法
实验在未经处理的雄性 PVCre、CBCre 以及野生型小鼠身上进行,这些小鼠均以 C57BL/6N 背景饲养。实验开始时,小鼠年龄为 8 至 16 周。小鼠保持 12 小时光照/黑暗的作息规律,实验在光照周期内进行。对于电生理实验,小鼠单笼饲养,限制食物摄入量,体重维持在自由进食体重的 85%以上。对于行为实验,小鼠在进行 8 臂放射状迷宫和操作性渐进比任务时,食物摄入量限制在自由进食体重的 85%至 90%。对于所有其他实验,实验期间,食物可自由获取。在饲养笼内,水始终可自由获取。所有实验均获得卡尔斯鲁厄州政府主席团的批准,符合欧洲关于实验动物护理和使用的指南。
对于光遗传学实验,pAAV 双 FLP 嵌合体-hChR2(H134R)-mCherry-WPRE-pA(AAV-DIO-ChR2-mCherry)由宾夕法尼亚大学载体核心获得。对于化学遗传学 DREADD 失活实验,pAAV-hSyn-DIO-hM4D(Gi)-mCherry(AAV-DIO-hM4D(Gi)-mCherry)和对照病毒 pAAV-hSyn-DIO-mCherry(AAV-DIO-mCherry)分别从(Addgene 病毒制剂 44362-AAV8 和 50459-AAV8)获得。
在手术过程中,将小鼠固定在立体定位仪上,并以异氟烷(1.0%-2.5%)进行麻醉。在中隔的正上方进行开颅手术,然后通过玻璃吸管在 AP:+1.00 毫米、ML:±0.0 毫米、DV:4.00 毫米处注入 400 纳升病毒。对于行为 DREADD 实验,在 300 秒后移除吸管,清洁头皮并用缝线缝合。在进行任何行为训练之前,小鼠有超过 3 周的时间来恢复并使病毒表达。
在进行电生理记录实验前,先将直径为 12 毫米的钨丝(H-Formvar 绝缘层,Butyral 倾斜涂层)缠绕成四极电极,然后组装一个包含四到七个可单独移动的四极电极的记录装置。另外,还在记录装置中安装了一根光纤(125-0.22_18mm_ZF1.25-FLT),使光纤与最近的四极电极之间的距离为 0.2 - 0.3 毫米。在内侧嗅皮质(MEC)上方进行第二次开颅手术,移除硬脑膜,将四极电极以 7 度角向后植入,位于内侧窦前方 0.3 毫米处,其 ML 和 DV 坐标分别为 3.1 和 0.8 毫米。光纤比四极电极的起始位置短 1 毫米,并在整个实验过程中保持固定。小鼠在开始行为训练前至少恢复了一周。
实验鼠被训练在一个黑色的长方形围栏(70 厘米×70 厘米,30 厘米高的围栏)内觅食。围栏的一面墙上贴有一张白色偏振提示卡(21 厘米×30 厘米)。记录围栏放置在一个 40 厘米高的底座上,位置固定,这样实验鼠可以自由看到房间一侧的微弱光源、架子和电脑,而房间的另一侧则用黑色的窗帘围了起来。
为了激励小鼠探索整个围场,食物颗粒(AIN-76A 杆状鼠粮片 5 毫克)以每分钟 1 至 3 颗的速度自动从安装在围场中心上方 165 厘米处的颗粒分配器中发放,该分配器由微控制器控制。在每次觅食活动之间,记录围场用清水清洗,小鼠在 25 厘米×25 厘米×30 厘米的黑色暂养箱中休息 10 分钟。小鼠每天接受两到三次 20 分钟的觅食训练,持续约两周,之后在其中一次觅食活动中开启激光以筛选出有反应的单元。每天结束时,四极电极以 50 至 100 微米的速度逐渐推进。
数据采集始于检测到对光刺激有明显反应的神经元之时。在每次记录日覆盖良好后,将四极电极向下移动 60 毫米。微驱动器连接到通道单位增益前置放大器头端,电生理信号被放大、滤波(3 1,000,带通滤波器 1 - 10000 赫兹)并以 20 千赫兹的频率进行数字化。记录在每天 20 分钟的基线期和 30 分钟的刺激期进行,其间间隔 10 分钟在休息箱中的记录。对于刺激期,选择 30 分钟的持续时间是为了更可靠地检测神经元的激光反应。在两种基因型中,在刺激期的前 10 分钟、中间 10 分钟和后 10 分钟段,主要放电特性(如平均放电率、爆发概率、平均结果向量长度 ðRÞ 和首选尖峰相位)相似(所有 p 值 R 0.43,Friedman 检验),并且当仅分析刺激期的前 20 分钟时,结果没有变化。在刺激阶段,将光纤连接到一根由 100 毫米多模光纤芯组成的跳线,通过一个二极管泵浦固态激光器以 473 纳米波长发射 5 毫秒的脉冲。为了防止激光诱导的刺激将自然θ频率移动到激光脉冲频率,我们在一项初步研究中确定,在远离自然θ范围的频率下进行刺激能够引起去抑制,同时保持内源性θ基本完整。因此,光脉冲以 45 至 55 毫秒的随机间隔施加,相当于频率为 20 赫兹。在基线阶段,施加脉冲但激光关闭。为了进行位置追踪,在头架上安装了三个不同颜色的发光二极管,其信号由安装在记录箱上方天花板上的摄像机以 25 赫兹的帧率记录。
测试装置由一个标准的 8 臂辐射迷宫组成,该迷宫有 8 个臂(长 28 厘米,宽 5 厘米),从一个直径为 18.5 厘米的中央平台向外延伸。每个臂的末端都有一个小碗用来盛放奖励颗粒。迷宫位于 40.5 厘米的高度。实验鼠从地面起立,置于光线昏暗且有明显远端提示的测试环境中。上方装有摄像头,记录所有活动。实验开始前,将实验鼠的食物摄入量限制在自由采食量的 85% - 90%。每只实验鼠的 4 个臂被指定为有奖励臂,其余 4 个臂为无奖励臂。不同实验鼠的有奖励臂各不相同,但始终遵循相同的模式(例如:有奖励臂:1、2、5、7)。实验鼠每天进行 4 次试验,每次试验间隔 60 分钟。试验开始时,在每个有奖励臂的末端碗中放置一个奖励颗粒(AIN-76A 杆状鼠粮片 5 毫克),然后将实验鼠置于中央平台上。试验在所有颗粒被吃光或 5 分钟后结束,之后用温和的洗涤剂清洁迷宫。臂进入行为分为 4 种类型:正确(进入仍有奖励的有奖励臂);工作记忆错误(在同一次试验中重新进入已取走奖励的臂);参考记忆首次错误(在同一次试验中首次进入从未有奖励的臂);参考重复错误(在同一次试验中重新输入参考记忆错误臂)。当所有奖励都被收集且平均参考记忆错误少于每试验 1 次时,认为小鼠已学会该任务,这需要 20 天。一旦达到这些标准,小鼠通过腹腔注射(i.p.)给予生理盐水(10 毫升/千克),次日腹腔注射 CNO(3 毫克/千克生理盐水,体积为 10 毫升/千克),在首次试验前 20 分钟进行。
测试装置由一个包含两个矩形隔间(20 厘米×20 厘米×27 厘米)的舱室组成,两个隔间在一条边上通过一条狭窄的走廊(9 厘米)相连。每个隔间有三面墙上有不同的图案(两种图案的明暗强度相当),整个装置置于光线昏暗的测试环境中,显著的提示物位于装置前方 1.5 米处。活动情况由连接到系统的顶部红外摄像机进行追踪。在第一次测试(预测试)中,将小鼠置于走廊中,让其在装置内自由探索 30 分钟。随后,以平衡的方式,为每只小鼠指定一个隔间为配对(有奖励)隔间,另一个为非配对(无奖励)隔间。然后计算预测试偏好得分(在配对隔间所花时间 - 在非配对隔间所花时间)。在这个无偏设计中,预测试阶段通常对任何一种环境都没有偏好。然而,具有预测试偏好(对任一侧偏好超过 25%)的小鼠被排除在实验之外(n = 2 只小鼠)。在后续的条件作用日,走廊入口被封锁,因此小鼠只能待在被放置的隔间内。给小鼠腹腔注射生理盐水(10 毫升/千克),然后立即将其置于未奖励隔间 7 分钟。3 小时后,给小鼠腹腔注射乙醇(2 克/千克,用生理盐水配制,体积为 10 毫升/千克),然后立即将其置于奖励隔间 7 分钟。重复此过程,直至小鼠接受了 5 次未奖励/奖励条件作用。在最后一天(“测试”),给小鼠腹腔注射 CNO(3 毫克/千克),然后将其放回笼子 30 分钟,之后再给小鼠腹腔注射生理盐水,并将其置于测试装置的走廊中,允许其自由探索 30 分钟。测试偏好得分的计算方式与预测试偏好得分相同。为了测试抑制隔区 PV+ 神经元是否会影响空间记忆或动机,用于 CPP 实验的一部分动物接受了空间记忆任务(物体位置记忆,n = 16 只小鼠)和动机测试(渐进比操作反应,n = 13 只小鼠)。
实验装置包括一个 45 厘米见方的塑料开放式场地和两个相同的物体(高 11 厘米,宽 8 厘米)。开放式场地置于光线较暗且有明显远端线索的环境中。通过顶部的红外摄像机进行视频录制,以便后续离线人工评分。在 4 天内,小鼠接受了 4 次适应性训练,每次将小鼠置于空的开放式场地中 15 分钟。第 5 天,给小鼠腹腔注射 CNO,然后将其放回笼中。30 分钟后,将小鼠置于放置有两个物体的开放式场地中,让其探索 15 分钟(“获取”阶段)。每个物体位于开放式场地对角线轴上距一个角落 15 厘米处。然后将小鼠放回置于测试室中的笼中。60 分钟后,将小鼠再次置于开放式场地中,其中一个物体仍在原位,而另一个物体则被移至距对角线另一端 15 厘米处(“保持”阶段)。15 分钟后将小鼠取出。以 0.5 倍回放速度手动记录每只小鼠对每个物体的探索时间,只要小鼠积极地探索某个物体,就将其算作探索行为。获取阶段的前 12 分钟和保持阶段的前 3 分钟用于分析。探索比率计算公式为:(探索新物体的时间 - 探索熟悉物体的时间)/(探索新物体的时间 + 探索熟悉物体的时间)× 100。
实验在鼠类操作箱(型号:ENV-307W-CT)中进行,每个操作箱置于单独的隔音隔光箱内。每个操作箱的一面墙上装有一盏强光灯(“环境灯”),相对的另一面墙上装有一个操纵杆和一个食物颗粒分配器。操纵杆上方有一盏弱光灯(“操纵杆灯”)。实验鼠的食物摄入量被限制在自由进食量的 85% - 90%。每次实验持续 60 分钟。在每次实验中,一个试验周期以环境灯亮起开始。当达到奖励发放的标准(如下所述)时,开始 10 秒的延时期,在此期间环境灯熄灭,操纵杆灯亮起,并发放一颗食物颗粒。在此期间记录操纵杆按压次数,但没有设定任何后果。延时期结束后,下一个试验周期开始。在第一个实验周期中,食物颗粒以每分钟 1 颗的随机频率发放。随后,实验鼠接受固定比率 1 的强化训练,即每次按压操纵杆(延时期除外)都会发放一颗食物颗粒。在连续 2 次每轮 60 次奖励的实验后,将小鼠移至平均每按压 5 次杠杆可获得一粒食物(范围 1 - 9 次,随机选取)的可变比率 5 强化方案中。在连续 4 次每轮获得奖励超过 60 次后,将小鼠移至递增比率强化方案中。在此方案中,每次奖励所需的按压次数都比前一次多,按压次数以半指数形式递增。小鼠在腹腔注射生理盐水 30 分钟后接受渐进比强化程序测试,次日则在腹腔注射氯氮平诺特(CNO)30 分钟后接受测试。
实验完成后,小鼠被用氯胺酮和赛拉嗪深度麻醉,并通过心脏灌注磷酸盐缓冲盐水(PBS)后,再灌注 4%多聚甲醛。取出大脑并将其置于 4%多聚甲醛中,在 4℃下保存 24 小时。对于电生理学研究,将大脑切成块状,以便包含隔区的区域能在冠状面上进一步处理,包含内嗅皮质(MEC)的区域能在矢状面上进一步处理。对于行为学研究,将大脑切成块状,以便包含隔区的区域能在冠状面上进一步处理,包含海马体和其他感兴趣区域的一侧大脑半球也能在冠状面上进一步处理,而包含海马体和内嗅皮质的另一侧大脑半球能在矢状面上进一步处理。使用振动切片机切取 50 微米厚的切片。为了分析注射部位的病毒表达情况,将包含隔区的区域用 DAPI 染色,并用封片剂封片后置于载玻片上。电生理实验中含内嗅皮层(MEC)的矢状切片用结晶紫染色,以显示四极电极尖端和光纤的位置。为观察行为实验中内嗅皮层和海马体内的 mCherry 轴突,对含内嗅皮层和海马体的矢状切片以及含海马体的冠状切片进行免疫组织化学处理。切片先用 PBS 洗涤,然后在 5% BSA 和 0.1% Triton X-100 中封闭 1 小时 30 分钟。随后,切片在多克隆兔抗双链红荧光蛋白(1:1000)的一抗中孵育。然后将切片用 PBS 彻底冲洗,并与二抗(Cy3 标记的驴抗兔(1:1000))一起孵育 2 小时。切片经 DAPI 染色后,用封片剂封固于载玻片上。使用滑片扫描仪拍摄病毒注射部位和四极电极轨迹的图像。使用共聚焦显微镜拍摄 MEC 中投射的共聚焦图像。
所有分析均使用用 C++、R 和 MATLAB 编写的自定义脚本完成。
离线对带通滤波信号(800 - 5000 赫兹)进行尖峰检测。使用 Klustakwik 软件基于主成分分析进行自动尖峰分类,随后通过图形界面程序进行手动优化。为评估聚类质量,计算了 0 至 25 毫秒的尖峰时间自相关中的绝对不应期比率(时间间隔:0.5 毫秒)。将 0 至 1.5 毫秒内的平均尖峰数除以 5 至 25 毫秒内任何时间间隔的最大尖峰数。不应期比率大于 0.15 的聚类被舍弃。在 PVCre 小鼠(中位数,0.016)和 CBCre 小鼠(中位数,0.015,p = 0.18,Mann-Whitney U 检验)之间,不应期比率的中位数相似。
通过将记录环境划分为 2 厘米×2 厘米的网格来构建放电率图。排除了小鼠移动速度低于 3 厘米/秒的时段。首先计算小鼠在每个网格中停留的时间,然后用标准差为 1.5 厘米的高斯核函数对所得的占用率图进行平滑处理。每个细胞的放电率图是通过将给定网格中的放电次数除以在该网格中停留的时间来计算得出的。
在 PVCre 和 CBCre 小鼠中,根据其对 5 毫秒激光脉冲(平均频率为 20 赫兹,持续 30 分钟)的放电率反应来识别 PV+ 和 CB+ 神经元。在激光脉冲开始前后的 1 毫秒时间间隔内计算每个神经元的平均放电率。在激光脉冲开始前的 20 毫秒用作基线,在此期间计算放电率的平均值和标准差。计算基线平均放电率减去/加上 4 倍标准差的阈值,以进一步将神经元分类为受抑制或被激活。在激光脉冲开始后的 15 毫秒内,至少有一个时间间隔达到此阈值。反应潜伏期定义为从激光脉冲开始到放电率最小(受抑制神经元)或最大(被激活神经元)的时间间隔。对于被激活的神经元,激活强度通过将激光脉冲开始后的最大放电率除以激活阈值来计算。
还采用第二种方法(即变化点分析)计算了快速抑制神经元的反应潜伏期。对于每个神经元,利用激光照射前后 25 毫秒内 1 毫秒时间间隔的放电率分布,在激光照射后 2 至 15 毫秒内确定置信区间大于 82%的变化点。
平均放电频率 R 0.25 且小于 8 赫兹、绝对不应期比率小于 0.15 的神经元被归类为网格细胞(网格得分大于 99th 洗牌分布的百分位数(0.47))、边界细胞(网格得分小于 0.47,边界得分大于 0.6)、头部方向细胞(网格得分小于 0.47,边界得分小于 0.6,头部方向得分大于 0.5)以及未分类细胞(所有其他神经元)。平均放电频率大于 8 赫兹的神经元被划分将细胞分为速度调制型(速度得分 > 99th 洗牌分布的百分位数(0.07))和其他快速放电细胞。网格、边界和头部方向得分以及洗牌分布的获取方法如下。
网格得分是根据放电率图的空间自相关矩阵计算得出的。空间自相关矩阵中的每个单元格代表给定空间滞后下放电率图中所有可能的单元格对之间的皮尔逊相关系数。矩阵中特定单元格的空间滞后由该单元格相对于矩阵中心的位置决定。对于可用的放电率对少于 20 对的空间滞后,不计算皮尔逊相关系数。自相关矩阵中的峰值定义为相关系数高于峰值检测阈值(可设为 0.1、0.2 或 0.3)且相邻超过 10 个单元格的区域。定义了空间自相关矩阵中包含最多六个峰值(但不包括中心峰值)的圆形区域。计算该圆形区域与旋转 30°、60°、90°、120°和 150°后的版本之间的皮尔逊相关系数。网格得分通过以下公式获得:
通过将位置数据至少移动 20 秒,然后重新计算网格得分,从而获得网格得分的显著性阈值。对每个神经元重复此过程 100 次,以获得替代分布。将零分布的第 99 百分位数用作特定细胞的显著性阈值(网格得分为 0.47)。
14.边界得分
边界得分是根据研究人员的方法改编而来,并通过以下公式计算得出:
在放电率图中,放电率高于图中最大放电率 20% 的箱格被标记为高放电率箱格。CM 是直接位于开放场地墙壁旁的高放电率箱格所占的比例。对于每个高放电率箱格,找到其到墙壁的最近距离。DM 是高放电率箱格的最近距离的平均值,按每个箱格的放电率加权。DM 也归一化为放电率图中可能的最大最近距离,因此 DM 的取值范围为 0 到 1。每个细胞的头部方向得分通过计算所有头部方向(每 10 度一个箱格)放电率分布的平均向量长度来量化。
15.头部方向得分
为了识别头部方向细胞,我们计算了极坐标图的平均结果向量长度,该极坐标图是通过将细胞放电与动物头部的角方向进行比较而生成的。使用一角度分辨率的角区间,将每个区间内的放电次数除以在该区间内停留的时间。利用这些值生成极坐标图,并从中计算出头部方向调制放电的平均角度和平均结果长度。
16.速度得分
速度得分是通过将神经元的瞬时放电率与小鼠的运行速度进行皮尔逊积矩相关分析得出的。瞬时放电率是通过在 1 毫秒的时间窗口内计算脉冲数量获得的。接下来,对脉冲计数数组与标准差为 5 毫秒的高斯核进行卷积运算。然后对所得向量在 5 毫秒的时间窗口内进行积分,并将值乘以 200(1000/5),以将概率转换为赫兹。通过打乱程序(n = 100)获得随机水平,在该程序中,在计算速度得分之前,速度向量至少要移动 20 秒。此分析仅限于快速放电的中间神经元。要被视为速度调制细胞,该神经元在基线条件下必须具有高于替代分布第 99 百分位数的速度得分。
17.LFP 梯度的θ频段频率和相对功率
对于每个四极管,通过 Chronux55中的 mtspecgramc函数计算 0 至 16 赫兹的时频谱图,分别采用 20 秒的窗口大小和 10 秒的时间步长。将局部场电位(LFP)的θ频段频率定义为时均谱图 6 至 12 赫兹频段内功率最大的频率。然后对时均谱图 S(f) 进行 1/f 校正,通过归一化实现。
对于每个细胞,以 500 赫兹的采样率对放电时间进行分箱处理。从所得向量中计算放电时间的自相关函数。通过函数 mtspectrumpb计算 0 - 125 赫兹频段内自相关函数的功率谱,填充因子等于样本大小的 2 的幂次方。然后将单细胞频率取为 6 - 12 赫兹频段内功率最大的频率。将 6 - 12 赫兹的功率除以 2 - 4 赫兹的平均功率,得到θ波比率。平均结果向量长度 R 和偏好θ相位
对每个可检测到单个神经元放电的四极记录电极的信号,应用了θ(6 - 12 赫兹)和δ(2 - 4 赫兹)范围的带通滤波器,并按照所述的方法,获取了θ/δ功率比大于 2 的时间段内每个尖峰的瞬时θ相位。通过从每个神经元在局部场电位(LFP)θ周期内的放电相位分布中获得的平均结果向量的长度 R 来衡量单个细胞放电受 LFP θ 节律调制的程度。神经元的偏好相位被定义为其动作电位相位的圆均值。
大多数相位预进分析均按照的方法进行,仅做了细微的修改。简而言之:
为了对 Bl 和 Stim 进行比较,从一张联合参考图中确定位置场边界。位置场被定义为对于给定的细胞,达到或超过峰值单元率 30% 的两个或多个连续单元。峰值单元率低于 2 赫兹的细胞未被分配位置场,所报告的位置场数量来自至少有一个位置场的细胞。使用 contourc函数绘制位置场边界以及峰值单元率 50% 的等高线。
候选通过区域被定义为一组在田地边界内且动物在 50%等高线内停留至少 200 毫秒的时间连续的位置坐标。如果候选通过区域的平均速度超过 3 厘米/秒,在其持续期间至少有 5 次脉冲发放,并且其脉冲之间的最大间隔不超过 1 秒,则将其纳入分析。只有具有田地且至少有一个通过区域符合这些标准的细胞才被纳入分析。
短程放电(PEF)被定义为来自单个神经元的连续脉冲群,其脉冲间期小于 333 毫秒(约 2 个θ周期)。只有持续时间超过 200 毫秒的短程放电才被纳入分析。随后,将短程放电起止时间内的连续位置坐标提取为“通过”。通过的选取标准与通过某一区域的选取标准相同。只有在 Bl 和 Stim 条件下至少有一个有效通过的细胞才被纳入分析。
对于每次通过,第 k 个位置坐标(xk,yk)处的距离计算为
其中点 (x0, y0) 对应于场地入口的坐标。d0 被定义为 0。在时间 tj˛[tk, tk + 1] 发生的第 j 个尖峰 Dj ˛[dk, dk + 1] 的距离是从这些值中线性插值得出的。
22.单次和多次循环线性回归
通过在点 fð D~j; BjÞg nj = 1 上执行圆-线性回归,其中 D~j = maxDjðjD jÞ 是第 j 个脉冲处的归一化通过距离(见上文),4j 是第 j 个脉冲处的θ相位。
采用相同的程序计算了在对所有穿过某一区域的 fð D~j; BjÞg j n= 1fr 进行合并后得到的相位距离斜率。通过使用 MATLAB 的 fminbnd 函数对 RðaÞ 进行一维数值最大化,从而得到了回归斜率。
23.突发概率
如研究人员所述,间隔小于 9 毫秒的脉冲群被定义为脉冲爆发。脉冲爆发概率的计算方法为
其中 NB 表示爆发次数,Ns 表示单个尖峰的数量。
24.量化与统计分析
所有统计检验均为双侧检验,显著性水平为 0.05。为比较各组间活跃神经元的比例,采用卡方检验。组间比较中位数的相等性采用曼 - 惠特尼 U 检验,组内比较及与随机值的比较采用威尔科克森符号秩检验。对于行为学研究,采用重复测量方差分析对辐射状迷宫数据进行分析,以比较错误类型和药物处理(生理盐水、氯氮平)。在所有其他行为学实验中,采用 t 检验比较生理盐水与氯氮平。多重比较采用霍姆 - 邦费罗尼校正。在合并通过 PP 分析中,排除了超过中位数 3 个缩放中位数绝对偏差(MAD)的异常值。
邮:li@fulinsujiao.com
公司地址:广东省东莞市樟木头镇塑金国际1号楼810
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot在之前的 26-30 期文章中介绍了折线图相关绘图,点击下方卡片跳转到对应文章:
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。
sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
看字面意思这个错误的核心在于SVM模型未能正确构建,可能的原因包括输入数据的问题(格式、内容、匹配),预处理步骤中的错误(如分位数归一化),或者包依赖的问题,建议按照以下逐步排查:
确保文件存在:确认LM22.txt和exp.txt位于R的工作目录或使用绝对路径。
results <- CIBERSORT(\\"完整路径/LM22.txt\\", \\"完整路径/exp.txt\\", perm=1000, QN=T)
LM22.txt应为基因(行)vs免疫细胞类型(列),exp.txt应为基因(行)vs样本(列)。确保无非数值字符、缺失值(如NA
),所有值为正数。
LM22矩阵通常是Gene Symbol为行名,看看你的exp是不是也是,并且两个文件的基因名有没有足够的交集
common_genes <- intersect(rownames(lm22), rownames(exp_data)) \\nlm22_matched <- lm22[common_genes, ] \\nexp_matched <- exp_data[common_genes, ]
暂时关闭归一化,观察是否仍报错。
最初学习的时候,这个算法并没有被写成R包,而是只有一个放着函数的脚本–CIBERSORT.R
。需要两个输入文件:一个是表达矩阵文件,一个是官网提供的LM22.txt,记录了22种免疫细胞的基因表达特征数据,包括7种T细胞类型、naive和记忆B细胞、浆细胞、NK细胞和骨髓亚群。下面这段话摘自CIBERSORT的方法介绍:《Profiling Tumor Infiltrating Immune Cells with CIBERSORT》PMID: 29344893.
Importantly, all expression data should be non-negative, devoid of missing values, and represented in non-log linear space. For Affymetrix microarrays, a custom chip definition file (CDF) is recommended (see Subheading 3.2.2) and should be normalized with MAS5 or RMA. Illumina Beadchip and single color Agilent arrays should be processed as described in the limma package. Standard RNA-Seq expression quantification metrics, such as frag- ments per kilobase per million (FPKM) and transcripts per kilobase million (TPM), are suitable for use with CIBERSORT.
非常清楚的给出了输入数据的要求:
GEO常规的表达矩阵都是这样得到的,直接下载使用即可。注意有的表达矩阵下载下来时已经取过log,需要逆转回去。有的经过了标准化或者有负值,需要重新处理原始数据。
老版CIBERSORT需要保存函数,导出文件本地运行。由于CIBERSORT.R
读取文件的代码比较粗暴,为了适应它,导出文件之前最好需要把行名变成一列,不然后面容易报错。
write.table(mymixed_expr, file=\\"./mixed_expr.txt\\", sep=\\"\\\\t\\", row.names=T, col.names=T, quote=F)\\n#exp2 = as.data.frame(tpms)\\n#exp2 = rownames_to_column(exp2)\\n#write.table(exp2,file = \\"mixed_expr.txt\\",row.names = F,quote = F,sep = \\"\\\\t\\")\\n\\n##### 运行CIBERSORT\\nsource(\\"CIBERSORT.R\\")\\nTME.results <- CIBERSORT(\\"./sig_matrix.txt\\",\\"./mixed_expr.txt\\" ,perm = 1000,QN = T)\\nTME.results[,1:4]
现在有CIBERSORT包后,支持读取内部变量,一切都变得简单起来。
library(\'devtools\')\\ndevtools::install_github(\\"Moonerss/CIBERSORT\\")
library(CIBERSORT)\\n#读取包自带的LM22文件(免疫细胞特征基因文件)\\nsig_matrix <- system.file(\\"extdata\\", \\"LM22.txt\\", package = \\"CIBERSORT\\")\\n#样本表达矩阵文件\\nmixture_file <- system.file(\\"extdata\\", \\"exampleForLUAD.txt\\", package = \\"CIBERSORT\\")\\n\\n\\ndata(LM22)\\nLM22[1:4,1:4]#547 22\\n# B cells naive B cells memory Plasma cells T cells CD8\\n#ABCB4 555.71345 10.74423 7.225819 4.31128\\n#ABCB9 15.60354 22.09479 653.392328 24.22372\\n#ACAP1 215.30595 321.62102 38.616872 1055.61338\\n#ACHE 15.11795 16.64885 22.123737 13.42829\\n\\n\\ndata(mixed_expr)\\nmixed_expr[1:4,1:4]#[1] 20501 5\\n# TCGA-05-4244-01 TCGA-05-4249-01 TCGA-05-4250-01 TCGA-05-4382-01\\n#A1BG 26.0302 120.1349 50.8597 145.9037\\n#A1CF 0.0000 0.3220 0.0000 0.0000\\n#A2BP1 1.7454 1.6098 0.0000 0.0000\\n#A2LD1 135.5022 89.0629 151.1332 112.0685
运行只需要一步:
results <- cibersort(sig_matrix = LM22, mixture_file = mixed_expr,perm = 1000,QN = F)
sig_matrix/mixture_file
:file path or matrix
perm
:Number of permutations
QN
:Perform quantile normalization or not (TRUE/FALSE)
返回了一个列名为细胞类型、行名为样本名的细胞浸润程度(占比)的矩阵(22种细胞之和的值为1),此外result中还会多出三列:
The infiltration of various tumor infiltrating lymphocytes identified by CIBERSORT in the high and low CXCL11 groups in the TCGA.
CXCL11 Correlates With Antitumor Immunity and an Improved Prognosis in Colon Cancer. Front Cell Dev Biol. 2021 Mar 11;9:646252. PMID: 33777950.
rm(list=ls())\\nload(\\"D:/data/TCGA/TCGAbiolinks-EXP/TCGA-COAD-GeneSymbol.Rdata\\")\\nGrouplist <- ifelse(as.numeric(substr(colnames(exp_TPM),14,15)) < 10,\'Tumor\',\'Normal\')\\nmixed_expr <- exp_TPM[,Grouplist == \\"Tumor\\"]\\nmixed_expr[1:4,1:4]#[1] 59427 483\\n\\n\\nlibrary(CIBERSORT)\\n#读取包自带的LM22文件(免疫细胞特征基因文件)\\n#sig_matrix <- system.file(\\"extdata\\", \\"LM22.txt\\", package = \\"CIBERSORT\\")\\ndata(LM22)\\nLM22[1:4,1:4]#547 22\\nresults <- cibersort(sig_matrix = LM22, mixture_file = mixed_expr,perm = 100,QN = F)
基于基因表达中位数分组:
Gene <- \\"CXCL11\\"\\nexprSet <- data.frame(SampleNames = colnames(mixed_expr),\\n Expression = log2(as.numeric(mixed_expr[Gene,]+1)),\\n SampleType = substr(sapply(strsplit(colnames(mixed_expr),\'-\'),\\"[\\",4),1,2))\\ntable(exprSet$SampleType)\\n#01 02 06 \\n#481 1 1 \\nexprSet <- exprSet[exprSet$SampleType %in% c(\\"01\\",\\"02\\"),]\\nexprSet$Group <- ifelse(exprSet$Expression > median(exprSet$Expression),\\"High\\",\\"Low\\")\\ntable(exprSet$Group)\\n#High Low \\n# 241 241
组间差异结果可视化:
#load(\\"./CIBERSORT.Rdata\\")\\nTME.results <- results\\nidentical(rownames(TME.results),exprSet$SampleNames)\\ntable(rownames(TME.results) %in% exprSet$SampleNames)\\ntable(exprSet$SampleNames %in% rownames(TME.results))\\nTME.results <- TME.results[exprSet$SampleNames,]\\nidentical(rownames(TME.results),exprSet$SampleNames)\\n\\nre <- as.data.frame(TME.results[,-(23:25)])\\nre$SampleNames <- rownames(re)\\nlibrary(reshape2)\\ndat <- melt(re, id = \'SampleNames\')\\n\\ndat$Group <- rep(exprSet$Group,22)\\ncolnames(dat)[2:3] <- c(\\"Cell_type\\",\\"Proportion\\")\\n\\n\\nlibrary(ggplot2)\\nlibrary(ggpubr)\\nlibrary(RColorBrewer)\\ntheme <- theme_bw() +\\n theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1,size=16), \\n axis.text.y = element_text(size = 20), \\n axis.title.x = element_blank(),\\n axis.title.y = element_text(size = 18), \\n axis.line = element_line(size = 1),\\n plot.title = element_blank(),\\n legend.text = element_text(size = 20),\\n legend.key = element_rect(fill = \'transparent\'), \\n legend.background = element_rect(fill = \'transparent\'), \\n legend.position = \\"top\\",\\n legend.title = element_blank())\\np <- ggplot(dat,aes(x = Cell_type,y = Proportion,fill = factor(Group))) +\\n geom_violin(position = position_dodge(width = 1), scale = \'width\') +\\n geom_boxplot(position = position_dodge(width = 1), outlier.shape=NA, \\n width = 0.25, alpha = 0.2, show.legend = FALSE) +\\n scale_fill_manual(values = alpha(brewer.pal(8,\\"Set1\\")[1:2],0.6)) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,0.8), breaks = seq(0,0.8,0.1),\\n labels = seq(0,0.8,0.1)) +\\n theme +\\n labs(y = \'Immune Cell Relative Proportion\',fill = NULL)\\n\\n###添加显著性检验 \\nData_summary <- as.data.frame(compare_means(Proportion~Group, dat, method = \\"wilcox.test\\", \\n paired = FALSE,group.by = \\"Cell_type\\")) \\n \\nstat.test <- Data_summary[,-c(2,9)]\\nstat.test$xmin <- c(1:22)-0.2 \\n\\n\\nstat.test$xmax <- c(1:22)+0.2 \\nstat.test$p.signif[stat.test$p.signif == \\"ns\\"] <- NA\\np2 <- p + geom_signif(xmin = stat.test$xmin,xmax = stat.test$xmax,\\n annotations = stat.test$p.signif,margin_top = 0.00,\\n y_position = 0.72,size = 0.5,textsize = 7.5,\\n tip_length = 0)#横线两侧折线长度\\np2
与Fig2D 趋势基本相同
作为一名数据分析师,你是否经常遇到这样的困扰:面对庞大的数据集,信息杂乱无章,分析目标不明确,甚至不知道从何下手?比如,当你拿到一份销售数据时,虽然包含了订单ID、产品名称、销售数量、订单日期等信息,但如何从中提炼出销售趋势、毛利润、地区差异等有价值的业务洞察呢?
接下来,我将通过一个实际案例,展示 DeepSeek 如何帮助分析师快速完成深度业务分析,将杂乱的数据转化为清晰的洞察。
假设你是一家零售企业的销售分析师,手中有大量的产品销售数据,数据结构如下。
\ufeff\ufeff面对这样的数据,你可能感到无从下手:
•如何快速发现销售趋势?
•哪些产品贡献了最多的利润?
•不同地区的销售表现有何差异?
•哪些商品的转化率更高?
这时,DeepSeek 可以成为你的得力助手。它不仅能帮你理清分析思路,还能直接生成可视化的分析框架,让你轻松完成从数据到洞察的转化。
首先我们用PromptIDE-提示词开发工具生成一个提示词
# 角色: \\nBI可视化设计专家\\n\\n## 背景: \\n用户提供了一个数据集,并希望在BI工具(如Power BI, Fine BI)中创建一个可视化看板,以便更好地理解和分析数据。用户希望通过可视化的方式,快速洞察数据中的关键趋势、模式和异常情况。\\n\\n## 注意:\\n1、用户体验至上,确保看板设计简洁明了,易于理解和操作。\\n2、聚焦关键指标,避免信息过载,确保每个视觉对象都有明确的分析目的。\\n3、通过美观的视觉效果和交互设计,提升用户的数据分析体验。\\n\\n## 技能:\\n1、熟练掌握BI工具(如Power BI, Fine BI)的可视化功能。\\n2、具备数据分析能力,能够从数据中提取关键信息并设计相应的视觉对象。\\n3、具备用户体验设计能力,能够设计出简洁、直观且富有吸引力的看板。\\n\\n## 目标:\\n1、设计一个包含多个页面的看板,每个页面聚焦不同的分析主题。\\n2、在每个页面中,合理布局视觉对象,确保信息传递清晰。\\n3、为每个视觉对象明确其分析内容,确保用户能够快速理解数据背后的含义。\\n4、提供交互功能,允许用户根据需求动态调整展示的数据。\\n\\n## 约束:\\n1、看板设计应符合用户的业务需求,确保分析结果具有实际应用价值。\\n2、看板设计应考虑数据的复杂性和多样性,避免遗漏重要信息。\\n3、看板设计应在保证信息完整性的前提下,尽量简化视觉元素,提升用户的操作效率。\\n\\n## 输出:\\n1、一个详细的看板设计文档,包含每个页面的布局和视觉对象的设计。\\n2、每个视觉对象的分析内容说明,确保用户能够快速理解其展示的信息。\\n3、交互功能的详细描述,包括如何操作和调整展示的数据。\\n\\n## 工作流:\\n1、分析用户提供的数据集,了解数据结构、字段含义和关键指标。\\n2、与用户沟通,明确其业务需求和分析目标,确定看板的主题和页面划分。\\n3、设计每个页面的布局,选择合适的视觉对象,确保信息传递清晰。\\n4、为每个视觉对象明确其分析内容,并结合数据特点进行优化设计。\\n5、设计交互功能,确保用户可以根据需求动态调整数据展示方式。\\n6、测试看板的功能和用户体验,收集反馈并进行优化。\\n\\n## 初始化\\n第一次对话请对我说,请上传你的测试数据
接下来将测试数据发给deepseek后我们看看他是如何回答的。
内容很详细,告诉我们分为了几个页面,页面上有哪些视觉对象,视觉对象分别分析了什么,视觉对象上的维度和指标是什么。接下来,你只需在 BI 工具(如 Power BI、Tableau、FineBI)中,按照 DeepSeek 的建议进行“拖拉拽”操作,即可快速生成可视化报表。
总之,在数据量庞大、信息杂乱的情况下,DeepSeek 能够帮助分析师快速理清思路,生成清晰的分析框架,并将复杂的分析过程简化为“拖拉拽”操作,整个过程简单高效,即使是数据分析新手也能轻松上手。
AI技术的迅猛发展正在深刻改变各行各业,对数据分析师来说即是机遇也是挑战,我们唯有拥抱变化,用AI提效,另一方面用业务与批判性思维创造不可替代的价值才能更好的破局。
","description":"如何在业余时学数据分析? 巨人肩膀社区的回答\\n\\n\\n作为一名数据分析师,你是否经常遇到这样的困扰:面对庞大的数据集,信息杂乱无章,分析目标不明确,甚至不知道从何下手?比如,当你拿到一份销售数据时,虽然包含了订单ID、产品名称、销售数量、订单日期等信息,但如何从中提炼出销售趋势、毛利润、地区差异等有价值的业务洞察呢?\\n\\n接下来,我将通过一个实际案例,展示 DeepSeek 如何帮助分析师快速完成深度业务分析,将杂乱的数据转化为清晰的洞察。\\n\\n假设你是一家零售企业的销售分析师,手中有大量的产品销售数据,数据结构如下。\\n\\n\ufeff\ufeff面对这样的数据,你可能感到无从下手:\\n\\n•如何快速发现销售趋…","guid":"https://www.zhihu.com/question/22119753/answer/120649923123","author":"巨人肩膀社区","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-10T01:30:00.213Z","media":[{"url":"https://pic1.zhimg.com/v2-f67390bf73927b2932d1c18106f8f5ce.jpg","type":"photo","width":1132,"height":751,"blurhash":"LCQTGxIVM{~qtmayfRj]9afRj[ay"},{"url":"https://pica.zhimg.com/v2-3f7329fdaef780612dcd089989f84bd8.jpg","type":"photo","width":1324,"height":3566,"blurhash":"LGRMl7%M~V~qR%ofM|RkDiofM|NF"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R+VIC模型融合实践技术应用及未来气候变化模型预测","url":"https://zhuanlan.zhihu.com/p/29081627540","content":"【内容简介】:目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是,由于适用的尺度主要的是中小流域,所以在预测气候变化对水文过程影响等方面都有所不足。VIC模型是一个大尺度的半分布式水文模型,其设计之初就是为了模拟大流域的水文过程;它能够计算陆地-大气的能量通量,考虑土壤性质和土地利用的影响,自带有简化的湖泊/湿地模块,也能够将植被状况,…","description":"【内容简介】:目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然,这些软件有各自的优点;但是,由于适用的尺度主要的是中小流域,所以在预测气候变化对水文过程影响等方面都有所不足。VIC模型是一个大尺度的半分布式水文模型,其设计之初就是为了模拟大流域的水文过程;它能够计算陆地-大气的能量通量,考虑土壤性质和土地利用的影响,自带有简化的湖泊/湿地模块,也能够将植被状况,…","guid":"https://zhuanlan.zhihu.com/p/29081627540","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-10T01:21:57.402Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言cibersort算法为啥运行不出?-安心的回答:lm22需要是一个文件路径 表达矩阵需要是数据库","url":"https://www.zhihu.com/question/14497175012/answer/120344535912","content":"R语言cibersort算法为啥运行不出?lm22需要是一个文件路径 表达矩阵需要是数据库
","description":"R语言cibersort算法为啥运行不出? 安心的回答\\n\\n\\nlm22需要是一个文件路径 表达矩阵需要是数据库","guid":"https://www.zhihu.com/question/14497175012/answer/120344535912","author":"安心","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-09T12:36:48.450Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"(自制)Lissajous-Figure","url":"https://zhuanlan.zhihu.com/p/29011082991","content":"R包library(readxl) library(tidyverse) library(numDeriv) # 微分 library(zoo) # 切线 library(ggh4x) # Hacks for \'ggplot2\' library(patchwork) # 拼图变量env <- \'C:/分离后数据所在文件夹/\' name_sample <- list.files(\\"rwr2数据所在文件夹\\", pattern = \\".rwr2\\") num_sample <- c(10,16,19,25,28,30) # 希望选中的文件序号前置函数# 设置正弦函数模型(根据CoxMerz规则分解的正弦函数) custom_formula <- function(A, B, …","description":"R包library(readxl) library(tidyverse) library(numDeriv) # 微分 library(zoo) # 切线 library(ggh4x) # Hacks for \'ggplot2\' library(patchwork) # 拼图变量env <- \'C:/分离后数据所在文件夹/\' name_sample <- list.files(\\"rwr2数据所在文件夹\\", pattern = \\".rwr2\\") num_sample <- c(10,16,19,25,28,30) # 希望选中的文件序号前置函数…","guid":"https://zhuanlan.zhihu.com/p/29011082991","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-09T11:42:52.701Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(五):我们该怎么认识热图-1","url":"https://zhuanlan.zhihu.com/p/28995338680","content":"不同于火山图,实际上我们每个人都对热图很熟悉。有的人可能会感到疑惑,我咋不记得我见过?是的,典型的文献中的热图在生活中我们不一定见过,但是另一种热图我们一定见到过: [图片] 没错,这种气温分布图和热图拥有一样的本质—— 用颜色来代表数字或有序的等级。让我们仔细看看这张热图:图例部分,显示出了颜色对应的温度。以0为分界点,以上为暖色,以下为冷色。将这个信息带入到图中,我们可以快速发现东南及西北地区明显具有较…","description":"不同于火山图,实际上我们每个人都对热图很熟悉。有的人可能会感到疑惑,我咋不记得我见过?是的,典型的文献中的热图在生活中我们不一定见过,但是另一种热图我们一定见到过: [图片] 没错,这种气温分布图和热图拥有一样的本质—— 用颜色来代表数字或有序的等级。让我们仔细看看这张热图:图例部分,显示出了颜色对应的温度。以0为分界点,以上为暖色,以下为冷色。将这个信息带入到图中,我们可以快速发现东南及西北地区明显具有较…","guid":"https://zhuanlan.zhihu.com/p/28995338680","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-09T09:22:38.443Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"[生信学习笔记·操作手册]使用R语言circlize包绘制InDel位点分布图","url":"https://zhuanlan.zhihu.com/p/28945878418","content":"学习文章链接:https://blog.csdn.net/weixin_45694863/article/details/129299114 本文所用数据均为随机生成的无意义数据。如需此练习数据,请发送邮件到zhaomingyu@nwafu.edu.cn联系获取目标:使用R语言circlize包仿制下图,绘制InDel位点分布图,并为其配色 [图片] 1.数据处理与准备1.将原始数据整理为两列,分别为染色体、InDel位点位置,列名分别命名为chr、pos,如下图 [图片] 2.编写R语言程序,命名为frequency.r并保存。 # 加载必要的包 library(readxl) library(dplyr) library(ti…","description":"学习文章链接:https://blog.csdn.net/weixin_45694863/article/details/129299114 本文所用数据均为随机生成的无意义数据。如需此练习数据,请发送邮件到zhaomingyu@nwafu.edu.cn联系获取目标:使用R语言circlize包仿制下图,绘制InDel位点分布图,并为其配色 [图片] 1.数据处理与准备1.将原始数据整理为两列,分别为染色体、InDel位点位置,列名分别命名为chr、pos,如下图 [图片] 2.编写R语言程序,命名为frequency.r并保存。 # 加载必要的包…","guid":"https://zhuanlan.zhihu.com/p/28945878418","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-09T03:46:27.148Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?-芝士熊猫奶盖的回答:不知道你们有没有发现r更多分布在医学统计领域,python更多分布...","url":"https://www.zhihu.com/question/637441452/answer/119950614650","content":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?不知道你们有没有发现r更多分布在医学统计领域,python更多分布在机器学习(或深度学习)领域。
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? 芝士熊猫奶盖的回答\\n\\n\\n不知道你们有没有发现r更多分布在医学统计领域,python更多分布在机器学习(或深度学习)领域。","guid":"https://www.zhihu.com/question/637441452/answer/119950614650","author":"芝士熊猫奶盖","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-09T02:18:19.968Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言直方图怎么画?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章...","url":"https://www.zhihu.com/question/414272435/answer/119914002690","content":"R语言直方图怎么画?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot在之前的 21-25 期文章中介绍了直方图相关绘图,点击下方卡片跳转到对应文章:
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。
sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
上一期追本溯源(三):解析火山图的深层本质-3的最后我特意强调了基因差异表达可以用来做火山图。那火山图能不能用于其他场合呢?做完差异基因分析之后,我们一般会做富集分析(GO、KEGG以及GSEA),有上调,有下调,还有P值,似乎和差异基因的表格具有很高的相似性。让我们看一下。 对前面的得到的DEG文件进行富集分析(细节以后再讲),我得到了几个通路富集表格。
十四、KEGG富集火山图
ggplot(eko_dt, aes(x=FoldEnrichment, y=-log10(pvalue), color = change)) + \\n geom_point(size = 4) +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"grey\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n geom_text_repel(aes(label = label), max.overlaps = Inf,\\n min.segment.length = 1, force = 5) +\\n theme_bw()
十五、GO富集火山图
ggplot(ego_dt, aes(x=FoldEnrichment, y=-log10(pvalue), color = change, shape = ONTOLOGY)) + \\n geom_point(size = 4) +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"grey\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n geom_text_repel(aes(label = label), max.overlaps = Inf, min.segment.length = 1, force = 5) +\\n theme_bw()
十六、GSEA富集火山图
ggplot(gsea_df, aes(x=NES, y=-log10(pvalue), color = change)) + \\n geom_point(size = 4) +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"grey\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n geom_text_repel(aes(label = label), max.overlaps = Inf,\\n min.segment.length = 1, force = 5) +\\n theme_bw()
再Open一下mind,相关性数据和差异基因表格也具有相似性,有Correlation值(正负相关)和P值。同样的,我们也能做一个火山图出来:
十七、相关性火山图
ggplot(cor_df, aes(x=cor, y=-log10(p), color = change)) + \\n geom_point(size = 4) +\\n scale_colour_manual(values = c(Negative = \\"blue\\",\\n `Not Sig` = \\"grey\\",\\n Positive = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_text_repel(aes(label = label), max.overlaps = Inf,\\n min.segment.length = 1, force = 5) +\\n theme_bw()
除了这些以外,像Cox回归的分析结果也符合这种结构,此处不多赘述。如果大家还能想到新的可以画火山图的分析结果,可以私信告诉我哦~ 最后,我想说,Open Your Mind!!!专注分享生信及科研入门干货,欢迎关注,一起解锁思维边界!
","description":"临床工作者想自学统计软件,应该选择SAS、Stata还是R语言? 南大小程聊科研的回答\\n\\n\\n上一期追本溯源(三):解析火山图的深层本质-3的最后我特意强调了基因差异表达可以用来做火山图。那火山图能不能用于其他场合呢?做完差异基因分析之后,我们一般会做富集分析(GO、KEGG以及GSEA),有上调,有下调,还有P值,似乎和差异基因的表格具有很高的相似性。让我们看一下。 对前面的得到的DEG文件进行富集分析(细节以后再讲),我得到了几个通路富集表格。\\n\\n十四、KEGG富集火山图\\n\\nggplot(eko_dt, aes(x=FoldEnrichment, y…","guid":"https://www.zhihu.com/question/62239133/answer/119444191623","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-08T07:10:08.282Z","media":[{"url":"https://pica.zhimg.com/v2-1c5732ebc7dbc1ffac9685776302c1ff.jpg","type":"photo","width":822,"height":574,"blurhash":"LGR:B2?w-.-;_3M{RjtQ_MVrIWWC"},{"url":"https://picx.zhimg.com/v2-3f83ec688a1a2d1d5b9fcb01b259f4f3.jpg","type":"photo","width":822,"height":574,"blurhash":"LQQ]j8gP?]?Fw#bIX8Rj?[%0MxNf"},{"url":"https://picx.zhimg.com/v2-adbf62c6d51389a84318b4504babdb43.jpg","type":"photo","width":822,"height":574,"blurhash":"L9SigQ_4bv_3~qM|R*kCx]W.jaR*"},{"url":"https://pic1.zhimg.com/v2-e33fbcf58cdc5463608ccdf43e915ca3.jpg","type":"photo","width":822,"height":574,"blurhash":"LFSiaA_N%g-U?HtRtRVsM{RPt7kW"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(四):解析火山图的深层本质-4","url":"https://zhuanlan.zhihu.com/p/28830652697","content":"上一期 追本溯源(三):解析火山图的深层本质-3 的最后我特意强调了基因差异表达可以用来做火山图。那火山图能不能用于其他场合呢?做完差异基因分析之后,我们一般会做富集分析(GO、KEGG以及GSEA),有上调,有下调,还有P值,似乎和差异基因的表格具有很高的相似性。让我们看一下。 对前面的得到的DEG文件进行富集分析(细节以后再讲),我得到了几个通路富集表格。 十四、KEGG富集火山图ggplot(eko_dt, aes(x=FoldEnrichment…","description":"上一期 追本溯源(三):解析火山图的深层本质-3 的最后我特意强调了基因差异表达可以用来做火山图。那火山图能不能用于其他场合呢?做完差异基因分析之后,我们一般会做富集分析(GO、KEGG以及GSEA),有上调,有下调,还有P值,似乎和差异基因的表格具有很高的相似性。让我们看一下。 对前面的得到的DEG文件进行富集分析(细节以后再讲),我得到了几个通路富集表格。 十四、KEGG富集火山图ggplot(eko_dt, aes(x=FoldEnrichment…","guid":"https://zhuanlan.zhihu.com/p/28830652697","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-08T07:10:07.684Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"真的有这么全面的R语言选取数据的方法总结吗?","url":"https://zhuanlan.zhihu.com/p/28767662480","content":"Vol.1 引言之前写了不少推文介绍统计方法及其相应的实现代码,但最近发现一些R语言的基础内容也有必要介绍一下,这期将介绍在R语言中选取数据的几种方法。 在一个大型的横截面数据中,可能前面会有被试的编号、社会人口学信息,后面是十几个量表甚至是几十个量表的内容,一般会先Excel中选取好相应的数据再导入数据文件到R中。但即使如此,依然会有一些数据被导入到R中。或者说,没有选取数据就直接导入数据到R中。 这个时候,选…","description":"Vol.1 引言之前写了不少推文介绍统计方法及其相应的实现代码,但最近发现一些R语言的基础内容也有必要介绍一下,这期将介绍在R语言中选取数据的几种方法。 在一个大型的横截面数据中,可能前面会有被试的编号、社会人口学信息,后面是十几个量表甚至是几十个量表的内容,一般会先Excel中选取好相应的数据再导入数据文件到R中。但即使如此,依然会有一些数据被导入到R中。或者说,没有选取数据就直接导入数据到R中。 这个时候,选…","guid":"https://zhuanlan.zhihu.com/p/28767662480","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-08T00:13:18.324Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"三水平元分析的介绍及R语言实现","url":"https://zhuanlan.zhihu.com/p/28767244751","content":"Vol.1 引言今天这期推文的主题是三水平元分析及其R实现。在正式介绍三水平元分析之前,我们需要提出几个较为关键的问题,那就是什么是三水平?为什么要使用三水平元分析?相较于传统的元分析,三水平元分析究竟有什么优势? 熟悉多层次线性模型的朋友应该都清楚很多数据是嵌套的性质,而我们在做回归时一个重要的假设就是样本彼此之间的独立性,而如果样本彼此之间并不是独立的,而是相互依赖的关系,那么简单的线性回归就不太适…","description":"Vol.1 引言今天这期推文的主题是三水平元分析及其R实现。在正式介绍三水平元分析之前,我们需要提出几个较为关键的问题,那就是什么是三水平?为什么要使用三水平元分析?相较于传统的元分析,三水平元分析究竟有什么优势? 熟悉多层次线性模型的朋友应该都清楚很多数据是嵌套的性质,而我们在做回归时一个重要的假设就是样本彼此之间的独立性,而如果样本彼此之间并不是独立的,而是相互依赖的关系,那么简单的线性回归就不太适…","guid":"https://zhuanlan.zhihu.com/p/28767244751","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-08T00:07:53.647Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用户分析有哪些经典的模型和方法,如何系统地学习用户分析?-明略科技的回答:在流量红利逐渐消退的背景下,电商行业的竞争已转向存量市场的激烈争夺,消费者趋...","url":"https://www.zhihu.com/question/27347443/answer/119009385327","content":"用户分析有哪些经典的模型和方法,如何系统地学习用户分析?在流量红利逐渐消退的背景下,电商行业的竞争已转向存量市场的激烈争夺,消费者趋于理性,品牌亦在寻求更稳健的增长路径。尽管通过流量竞争和低价策略能够短期内提升销量,但随之而来的频繁售后服务、吸引的“羊毛党”以及大量浅尝辄止的用户体验,无法为品牌带来现金流稳定性和长期利润增长。因此,扩大复购率和提高用户留存率,已成为品牌越来越关注的重点。
培养用户忠诚度是一个长期且复杂的过程。明略科技客户数据管理平台CDP+MA将从用户洞察-内容营销-策略复盘三大流程出发,助力品牌实现全域视角下的人群精准定位、个性化营销和策略优化,实现品牌全域可持续增长。
01 数据洞察层
多主体数据管理+标签价值评估体系
助力用户立体洞察+高效人群划分
多主体视角数据融合,助力挖掘消费者需求“立体面”
在当今多元化品牌的大型集团中,消费者的购买行为常常跨越多个业务领域。以母婴和宠物行业为例,我们可以看到消费者的购买决策往往涉及“双重身份”:一方面,作为“精致妈妈”,她们在精心挑选孩子的纸尿裤和棉柔巾时,也会同时关注自己的个人护理产品;另一方面,作为“铲屎官”,他们在为爱宠选购磨牙棒和罐头口粮的同时,也会考虑到家庭日常所需的粮油食品。
因此,大型企业迫切需要获得从多主体视角出发的用户消费行为数据,这使得对消费者数据模型的要求变得更加精细。通过深入洞察消费者多面、立体的消费行为,品牌能够更准确地把握消费者的真实消费状态,并在目标人群的精准定位中,根据需求进行有效的联合圈选。
针对这一业务需求,明略科技CDP+MA增强了多主体数据管理能力,助力品牌构建全面的会员基础信息体系。依托于一方数据,明略科技CDP+MA结合品牌的不同业务主题,实现了全面的数据整合,确保了权益、订单数据及行为数据在多个系统间的实时互联互通,从而助力企业在多主体视角下实现无缝的数据融合。
实时监控数据接入和融合状况,日常运营使用更安心
此外,在活动运营期间,数据常常出现爆发式的增长,当海量数据涌入后,品牌往往需要消耗一定的资源,检验接入数据是否安全可靠。因此,搭建一套完整的数据监控体系是数据运营中的重点。
明略科技提供面向业务的可配置化数据接入和灵活的One ID配置,以助力品牌搭建和完善基础设施。相关功能配置完成后,品牌能够建立完善的监控体系,可监控接入数据的完成度、质量、填充率,让数据运营人员使用更安心。
可视化,可补强,可评估,人群标签、画像更丰富
在优良的数据支撑基础上,如何将资源运转出更大效能,实现更精准的人群洞察?
在用户画像的构建中,明略科技CDP+MA平台建立了可视化的标签体系。这一体系包括业务规则类标签,描述人的不同属性、生命周期,以及算法类标签。明略科技CDP+MA可以从一方数据入手,进行梳理打标,并基于安全岛的合规、安全方式进行三方数据补强,以助力品牌洞察完整的客户画像,通过灵活的创建方式,构建起所需的人群。
在人群效果的评估中,此外,如何评估标签系统的有效性也是品牌关注的重点。明略科技CDP+MA拥有完整评估体系,支持用户设置多个业务目标,如购物、购买、收藏等,通过计算标签与目标之间的关系,为每个标签评估其价值。这套评估体系能够帮助品牌优化标签系统,避免在项目初期建立的标签系统在使用一段时间后出现的不实用、计算任务堆积、更新不高效以及资源浪费等问题。
借助多标签类型的支持,品牌能够更精准地定位目标用户,实现高效率的招募,并能够助力品牌周期性影响消费者、教育消费者,让品牌在适当的时机进行内容触达,以提升复购率和用户粘性。
02 内容流量层
智能内容生成+优化策略管理
个性化营销也能“省时省心”
在拥有了精准的标签体系进行高价值人群洞察后,品牌需要快速输出与之匹配的精准、个性化的内容来触达消费者,从而打出一套“快准狠”的组合拳。高价值人群往往已不满足于统一化的内容推送,更加个性化的消费体验才能深入的打动TA们的心。
“个性化”文案搭配专属权益,让品牌更会“宠粉”沟通
为了能够助力品牌快速响应内容生产需求并输出更加多样化、个性化的内容素材,明略科技利用生成式人工智能的优势构建了活动主题的智能体。因此,运营人员可根据品牌相关产品与知识库的信息,快速生成电商节品牌宣传活动的主题,并批量生产高质量的内容文案,甚至结合每位消费者的过往购买记录进行内容素材的个性化定制。
此外,明略科技CDP+MA能够实现素材的统一维护,避免运营人员在不同平台间忙碌于内容的上传、分发和审核。除了触达层面的内容差异,沟通层面也需要更多元素来打动消费者,因此需要与品牌权益部分联动。明略不仅在系统中集成了CRM权益中心,还与市场上的主流CRM厂商进行了对接。如果品牌已有CRM合作伙伴,明略科技可以提供标准API快速对接品牌权益系统,以满足不同需求,这样将个性化内容+权益结合,能大大增加吸引消费者的概率。
轻代码+预集成,算法0基础也能轻松匹配内容标签
在拥有标签和海量内容后,如何将它们匹配起来?除了依靠过往的业务经验,明略科技还提供了算法工具,面向业务人员,使工具更易用,效果更佳。算法工具中预设了多种预集成算法,包括概率预测、价值预测、聚类、推荐等,以支持业务增长。
品牌运营及相关业务人员并未接触过算法怎么办?
明略科技针对这一难点,开发了超参数调整算法运算结果的功能:有算法经验的用户可以自行调整,无经验的用户也可以使用预设参数直接应用,大大降低了业务人员的操作难度。所有算法输出结果将回流至客户数据平台(CDP),与准备好的内容和标签联合使用。通过算法方式,将优质人群与内容进行匹配,并结合不同品牌和相关部门的业务经验进行融合。
流程节点自动生成,复杂运营需求轻松解
完成人群、标签、内容的绑定后,业务人员也无需手动创建流程,明略科技CDP+MA提供了一套快速搭建体系来简化操作。
在营销自动化(MA)方面,除了市场上常见的渠道触达、条件判断、事件判断、生产标签、生产人群、延时等功能外,明略科技还增加了算法快速应用至流量分配的能力。在A/B测试中,为了均衡人群分布,如性别、会员等级等,明略引入了协变量能力,以科学的方式实现流量分配。此外,在算法层面,公司不仅提供算法分数查询,还增加了算法策略层,可以设置素材轮播、取最优逻辑、取最低逻辑等,结合营销旅程,实现滚动播放。
在活动爆发期,可能需要同时运行数十个策略,以唤醒沉睡用户,那么,如何筛选出最优节点和路径,避免过度打扰用户?明略科技CDP+MA提供智能调优节点,允许创建所有策略并设定目标。在活动初期,系统将自动衡量每个策略与目标的匹配度,快速识别出效果最佳的策略,并在活动的中后期加以应用。
立体式频次管理,有限触达机会也能抓牢放大
单日每个消费者的触达次数有限,对于运营人员来说,如何平衡日常营销与购物大促活动,以及不同部门不同营销活动的触达机会?简单的频次控制已经不足以满足目前业务需求。
明略CDP+MA采取了立体式评估和控制方法,设置哪些活动参与,哪些不参与,并确定参与活动的优先级顺序。同时,从横向层面切割每个活动内的控制,为不同触点设置发送上限,以确保在有限的沟通机会中,将机会分配给最关键活动。
03 效果复盘层:
实时查询+活动分析
主题化报表高效评估campaign效果
实时数据随心查,复杂报表生成更“丝滑”
明略科技观察到,在实际日常业务当中,不同部门会关注不同指标,如线上、线下或ROI。为快速响应多样数据需求,明略科技最新推出的全域看板,搭载大语言模型,可基于品牌全域营销数据,实现提问式分析功能,生成可视化图表及并提供洞察动件,让运营和分析人员能够站在全局“上帝”视角看不同平台渠道投放的综合表现,随时、随地、随心快速获取所需信息。
在活动的不同阶段,品牌会需要从多角度复盘数据。但运营人员的目标策略制定通常会依赖专业分析师的处理和洞察总结,而常见的通用大语言模型不能够完全了解品牌的知识背景和信息,因此输出的洞察效果总是很有限,品牌投放中的调整和跟进会出现一定延迟。
针对数据分析的效率需求,明略科技CDP+MA基于海量三方数据,以及丰富行业知识库,能够增强AI在品牌数据洞察中的深度和广度,进行更复杂的问题分析,为运营人员提供更全面和客观的见解,以此优化决策支持。
此外,复杂的数据交叉分析需求,明略科技CDP+MA提供BI系统,可根据业务需求定制主题化报表,全面展示数据。结合实时数据查询和智能的数据分析及BI系统,可以使品牌沉淀下来的数据资产更加透明,更好地赋能业务。
","description":"用户分析有哪些经典的模型和方法,如何系统地学习用户分析? 明略科技的回答\\n\\n在流量红利逐渐消退的背景下,电商行业的竞争已转向存量市场的激烈争夺,消费者趋于理性,品牌亦在寻求更稳健的增长路径。尽管通过流量竞争和低价策略能够短期内提升销量,但随之而来的频繁售后服务、吸引的“羊毛党”以及大量浅尝辄止的用户体验,无法为品牌带来现金流稳定性和长期利润增长。因此,扩大复购率和提高用户留存率,已成为品牌越来越关注的重点。\\n\\n培养用户忠诚度是一个长期且复杂的过程。明略科技客户数据管理平台CDP+MA将从用户洞察-内容营销-策略复盘三大流程出发,助力品牌实现全域视角下的人群精准定…","guid":"https://www.zhihu.com/question/27347443/answer/119009385327","author":"明略科技","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T14:22:07.545Z","media":[{"url":"https://pic1.zhimg.com/v2-c68448febaf4848720850a37b92b76ed.jpg","type":"photo","width":1080,"height":852,"blurhash":"LGSPId}[rX%g+xrDiwWB?HH@s.oL"},{"url":"https://picx.zhimg.com/v2-74476a6526e085f99bc4b2d35b1e3764.jpg","type":"photo","width":1080,"height":852,"blurhash":"LFRyjI^Q-V?vz?iIrsRk}]ZhiwM{"},{"url":"https://pic1.zhimg.com/v2-87bb5f262cbbb6a2901b890aa031257e.jpg","type":"photo","width":1080,"height":852,"blurhash":"LASPR%}u-A?v:nh}v~M|{yZNZ%Rj"},{"url":"https://picx.zhimg.com/v2-16cc5358408955820763335e96595352.jpg","type":"photo","width":1080,"height":852,"blurhash":"LIR:7]~D_3xu=zVFr?ay-CMdMxt7"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"统计上的“置换检验”有什么用?-新医谷的回答:在平平无奇的一天,若谷师弟发来消息...... [图片] 如果把统计方法比作一把帮我们解开数据背后秘密的钥匙,那么...","url":"https://www.zhihu.com/question/26629875/answer/118897101233","content":"统计上的“置换检验”有什么用?在平平无奇的一天,若谷师弟发来消息......
如果把统计方法比作一把帮我们解开数据背后秘密的钥匙,那么今天我们要认识的是一种既简单又充满趣味的统计“小魔法”——置换检验(permutation test),它不需要对数据做很多假设,特别适合上面若谷提到的不满足传统条件的数据,并且依然能帮助我们得出可靠的结论。
我们知道,很多传统的统计方法,比如t检验,要求数据符合某种特定的分布(如正态分布),然而我们自己的数据往往不那么“听话”——它们可能分布不均匀,可能偏态分布,甚至存在异常值。在这种情况下,置换检验就能闪亮登场了。
置换检验作为一种非参数检验的统计方法,它不需要这些严格的假设,可以说,置换检验就像是在没有“标准规则”的情况下,依然能帮我们判断一场比赛结果是否合理的一种方法,非常适合那些复杂而“不规矩”的数据。
参数检验和非参数检验的特点
1.参数检验
需要对数据的分布做出具体假设,通常假设数据来自某个特定的分布(如正态分布),适用于满足这些假设的数据。例子:t检验和方差分析。
2.非参数检验
不需要对数据的具体分布做假设,可以处理不符合正态分布或有明显偏态的数据,适用于数据不满足参数检验条件的情况,如偏态数据、小样本数据、秩次数据等。例子:Mann-Whitney U检验和Wilcoxon符号秩检验。
由此可见,非参数检验的最大优势在于它对数据分布没有严格要求,因此特别灵活,在广泛的数据类型和情况(特别是样本量小或分布未知)下都具有适用性,而置换检验相应就具有了这一优势,这也是我们有时需要选用这种方法的原因。
简单来说,置换检验就像是一场“重新洗牌”的游戏,看看洗牌后的结果是否还能解释我们最初观察到的现象。核心思想就是把原本有差异的数据随机打乱,然后看打乱后的数据是否还能保持原来的差异。如果能保持,那说明原来的差异只是巧合;如果不能保持,那说明原来的差异是真实存在的。
如果我们假设两组数据之间没有差异,那么我们可以通过不断“洗牌”,也就是随机打乱这些数据的标签,模拟在没有真实差异的情况下两组数据的表现会是什么样子,然后看随机的结果是否与原始结果相似,这样一来,我们就可以评估原始数据之间的差异是否显著。也就是说,如果两组数据之间真的没有差异,那么即使我们把这些数据的标签随机打乱,也不应该看到明显的差异。
举个例子
如果我们想比较A班和B班数学成绩的差异,就可以把A班和B班所有学生的数学成绩混合起来,每次随机分成两组,然后计算它们的均值差异,看看每次打乱后的差异是否与原始差异相似。
为了让大家更好地理解置换检验,我们来模拟一个医学相关的情景。
假设你是一名医生,你想知道一种新药是否真的比现有的治疗更有效。现有16名患者参与试验,你把患者随机分为两组,每组8人,一组接受新药治疗(实验组),另一组接受传统治疗(对照组)。
几周后,你测量了两组患者的疗效指标,准备用统计学方法比较两组的疗效是否存在显著差异。在对两组数据进行正态性检验后你发现它们不符合正态性,且每组的样本量也很小,没办法像往常那样使用t检验了。这时,你不妨借助置换检验帮你找到答案。
首先,你将所有患者的指标结果放在一起,不再考虑他们最初是接受哪种治疗,然后再随机将这些数据分成两组,重新计算两组的差异。
这样重复很多次,你就会得到多个统计量,而这些统计量从小到大排列后就可以得到一个“置换分布”,也就是说你通过大量置换来构造统计量的分布,用于判断两组数据是否存在显著差异。接下来,你将原始实验中得到的差异与“置换分布”中的差异进行比较。
如果原始差异非常大,远远超过了随机置换后大多数情况的差异,那么我们就有理由相信,这个差异并不是偶然,而是新药确实有效。
现在我们通过案例和具体的数据进行实践。
案例分析:新药实验的效果评估
假设我们现在想评估一种新药对血压的影响,招募了30名高血压患者,并将他们随机分为两组:一组接受新药治疗(实验组),另一组接受安慰剂(对照组)。几周后,我们测量了两组患者的血压降低情况,数据如下:
新药组血压降低值:12, 15, 9, 14, 11, 13, 16, 10, 15, 12, 14, 13, 11, 12, 15
安慰剂组血压降低值:7, 8, 5, 6, 9, 7, 6, 8, 5, 6, 9, 7, 8, 6, 5
(单位:mmHg)
步骤1:建立假设检验,确立检验水准
H0: 新药与安慰剂的降压效果无显著差异
H1: 新药与安慰剂的降压效果有显著差异
α=0.05
步骤2:计算原始样本的统计量
这里我们选择均值差作为统计量:
-实验组的平均血压降低值为 13.0 mmHg
-对照组的平均血压降低值为 6.6 mmHg
-原始均值差为 13.0 - 6.6 = 6.4 mmHg
步骤3:多次置换样本标签
接下来,我们将两组数据合并在一起,然后随机打乱这些数据的标签,重新分成两组(每组15个数据),并计算每次置换后的均值差。这一置换过程重复1000次,得到1000个新的统计量(均值差),这些统计量按顺序排列后构成“置换分布”。
步骤4:通过置换分布确定p值
最后,将原始统计量(6.4mmHg)与置换分布进行比较,根据它在这个分布中所处的位置来确定p值。如果原始统计量位于置换分布中的极端位置(此处为双尾检验,则为前2.5%或后2.5%),那么我们可以认为原假设不成立,也就是说,原始差异并非偶然,而是有统计学意义的。
步骤5:得出结论
拒绝H0,接受H1,新药与安慰剂降压效果之间的差异具有统计学意义。
在这个过程中,大家可能会产生一些问题,若谷也有很多疑问,说不定你们想到一块儿去了~
相对其他统计学方法来说,置换检验可能并没有那么常见,但它相对于传统的参数检验或者其他非参数检验仍然具有自身独特的优势。
优点
1.不依赖于分布假设:置换检验不要求数据满足正态分布或方差齐性的假设,在数据呈偏态分布的情况下仍能提供可靠的结果。
2.适用于小样本数据:置换检验通过大量置换模拟数据分布来有效解决小样本问题,提供更稳健的结论。(但当样本量非常大时,置换检验的计算负担会非常大,此时可能不如传统的检验方法高效可行。)
3.灵活性高:置换检验非常灵活,可用于两组、三组,甚至更多组之间的比较;可以用于多种类型统计量;能够处理复杂的实验设计和数据结构。
局限性
1.计算量大:由于置换检验存在多次随机置换和统计量的计算,在大样本或复杂的实验设计中,可能导致计算效率低下。
2.结果的随机性:置换检验依赖于随机过程,在小样本或置换次数较少的情况下,p值可能会表现出较大的不确定性。
3.依赖于置换次数:若置换次数不足,p 值的精度可能受到影响。通常需要大量的置换来确保结果的准确性,但这也意味着更高的计算成本。
由此可见,选择使用置换检验时,我们需要根据自身数据的特点、样本量大小以及计算资源的可用性来进行权衡。
参考文献
[1] Good, P.I. (2011). Permutation Tests. In Analyzing the Large Number of Variables in Biomedical and Satellite Imagery, P.I. Good (Ed.).
[2] Holt, C.A., Sullivan, S.P. Permutation tests for experimental data. Exp Econ 26, 775–812 (2023).
","description":"统计上的“置换检验”有什么用? 新医谷的回答\\n\\n\\n在平平无奇的一天,若谷师弟发来消息......\\n\\n(又是科研喽被统计绊倒的一天)\\n\\n如果把统计方法比作一把帮我们解开数据背后秘密的钥匙,那么今天我们要认识的是一种既简单又充满趣味的统计“小魔法”——置换检验(permutation test),它不需要对数据做很多假设,特别适合上面若谷提到的不满足传统条件的数据,并且依然能帮助我们得出可靠的结论。\\n\\n一、什么情况下可用置换检验?\\n\\n我们知道,很多传统的统计方法,比如t检验,要求数据符合某种特定的分布(如正态分布),然而我们自己的数据往往不那么“听话”——它们可能分布不均匀…","guid":"https://www.zhihu.com/question/26629875/answer/118897101233","author":"新医谷","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T11:17:39.751Z","media":[{"url":"https://picx.zhimg.com/v2-9bc219d07ed4cf2e71a0cf4007ba55d0.jpg","type":"photo","width":1125,"height":2436,"blurhash":"LKO|wmMx^-~q^UV[NXoM^-xvITD%"},{"url":"https://pica.zhimg.com/v2-6d4c2e598c00f1b8365906f4fc71893c.jpg","type":"photo","width":2042,"height":1028,"blurhash":"LDR{Vb-:s.~V.RNdnjxt={n%R+oI"},{"url":"https://picx.zhimg.com/v2-d59e022bba1bab097913f4effb93cdfe.jpg","type":"photo","width":2107,"height":928,"blurhash":"LKS5,=-:-.~U-.f7fkof~oofIVIV"},{"url":"https://pica.zhimg.com/v2-21ac4f7476b22e71c14003e41bf03898.jpg","type":"photo","width":1915,"height":1053,"blurhash":"LDR{ME-:xu?a_LX8enWBsqIVj?f8"},{"url":"https://picx.zhimg.com/v2-7cac62bb674b163f2c7a3396868135f2.jpg","type":"photo","width":1763,"height":996,"blurhash":"LMSr+I-hi]xt_4XAt8s:S$tSWZo#"},{"url":"https://picx.zhimg.com/v2-1d3a29f52ac18eb5a5286d06c45b05a2.jpg","type":"photo","width":1531,"height":1012,"blurhash":"LKSFna-2sk%L~pRjRPV?yFtnxvt6"},{"url":"https://picx.zhimg.com/v2-a061bd41f462d6a00956f1f1580b7a29.jpg","type":"photo","width":656,"height":214,"blurhash":"LFS6C_?wtT?b_1NNM}RP-;RnM|WB"},{"url":"https://pic1.zhimg.com/v2-7d031f6fac3e1b2af5895884e2844f6c.jpg","type":"photo","width":637,"height":185,"blurhash":"LDS$Y}=:R:_3~mMwofozs;xtoMWB"},{"url":"https://pica.zhimg.com/v2-500deb21cb81a07b8d4ebeae315ed8a0.jpg","type":"photo","width":640,"height":210,"blurhash":"LGR{lB-;o$?b~Uo#kXWY^+j]kDa~"},{"url":"https://picx.zhimg.com/v2-ec056da4b2942a2ac5df1ecc3bed3e9c.jpg","type":"photo","width":647,"height":210,"blurhash":"LGSFwp?wbL?b^*NMNIRj%3WFRlRj"},{"url":"https://picx.zhimg.com/v2-f85b5f39080f8d7789a7e89c34e06e99.jpg","type":"photo","width":643,"height":259,"blurhash":"LFR{oJ${j^?a~os7t8of~VV?R-of"},{"url":"https://pic1.zhimg.com/v2-54dae0a4db65d5def7febb415dd9efb9.jpg","type":"photo","width":650,"height":189,"blurhash":"LESPLR?wkY?u-oxr%LtRo#adodkB"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么在地面上时万有引力GMm/r²=mg+mv²/r,而在地表附近GMm/r²=mg=mv²/r?-不懂AI的後藤一里的回答:25年了啊,感慨一下之前的年少无知和莽撞,现在也成为研0...","url":"https://www.zhihu.com/question/337819003/answer/118845199570","content":"为什么在地面上时万有引力GMm/r²=mg+mv²/r,而在地表附近GMm/r²=mg=mv²/r?25年了啊,感慨一下之前的年少无知和莽撞,现在也成为研0了,大抵这就是成长吧
现实例子
我的工作属于技术支持。一切顺利的时候就有点清闲,老板也看得出来。
有段时间,相关部门有个“灵人”需要处理一大堆数据,然后依据结果输出一系列参数指标给我们部门使用。灵人找我们老板说,这么多数据我一个人处理不过来,你们找人帮着整理吧。老板让我来帮,我很不满,这么dirty的事甩给我! 老板说我再去乙方找了个人帮你一块儿做。老板很Nice,可我还是愤愤不平,也不知道谁给的底气。毕竟只是个打工的,硬着头皮,开始研究怎么做。
说来也巧,就在这段时间,厂里一位“能人”,在他老板的支持下,搞了个“数字训练营”系列培训,我这个“闲人”积极报名参加。第一次培训就被内容吸引了,KNime的应用。这不正适用于我被迫接手的这个的烂摊子嘛!
这下我可来神儿了,培训积极参与,测试环节答题踊跃,小奖品拿了好几份,老师对我青睐有加。培训后,对着一堆数据各种实践,理不清就找老师。老师更热情,经常接到我的问题,立马从他的办公楼飞奔过来,对着电脑指导我。
两次培训(每周一次)后没几天,在老师的支持下, Knime 很给力, 我用半天的时间,把上百个Excel文件的数据处理好了。据说之前处理这些数据需要几个人,快两周的时间,主要是手工处理起来太无聊了。
在我看来,Knime 就是一个可视化的编程工具,适合对大批结构相同或相似的Excel数据进行组合,计算,编辑,归类汇总。
","description":"有人对KNIME了解吗? 寻梦记的回答\\n\\n\\n现实例子\\n\\n我的工作属于技术支持。一切顺利的时候就有点清闲,老板也看得出来。\\n\\n有段时间,相关部门有个“灵人”需要处理一大堆数据,然后依据结果输出一系列参数指标给我们部门使用。灵人找我们老板说,这么多数据我一个人处理不过来,你们找人帮着整理吧。老板让我来帮,我很不满,这么dirty的事甩给我! 老板说我再去乙方找了个人帮你一块儿做。老板很Nice,可我还是愤愤不平,也不知道谁给的底气。毕竟只是个打工的,硬着头皮,开始研究怎么做。\\n\\n说来也巧,就在这段时间,厂里一位“能人”,在他老板的支持下,搞了个“数字训练营”系列培训,我这个…","guid":"https://www.zhihu.com/question/61793681/answer/118840761043","author":"寻梦记","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T09:47:49.936Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-想看海的回答:1.你已经挺过了你所经历的一切,你也会挺过这一关的。你会为了成为你想成为的人而坚持。不只是糟糕的某一天、...","url":"https://www.zhihu.com/question/580956751/answer/118720480485","content":"能否分享一些让你豁然开朗的句子?1.你已经挺过了你所经历的一切,你也会挺过这一关的。你会为了成为你想成为的人而坚持。不只是糟糕的某一天、某个星期、某个月、某一年,甚至十年。任何时候,你都拥有无限的可能性。在未来的某个时刻,当你回望现在,会心怀欣慰地发现,那个曾经迷茫的你又一次走了出来。
2.你可以多愁善感,可以异想天开,可以在那些与你无关的歌曲和电影中流泪。你可以做一只敲碎了一个角的茶杯,这意味着你有独特的故事。你可以喜欢自己喜欢的东西,不需要因为它很好或者很受欢迎。 正如伟大的作家安·拉莫特所说:「灯塔不会为了营救船只而在岸上到处乱跑,它们只是站在原地发光。」做自己就好。
3.向前的动力很好,但我们也需要停下的动力。比如,我刚刚坐下来吃了一个梨,虽然我不知道未来会发生什么,但我非常感激我还活着,能够坐在沙发上吃一个梨。 不断寻找生命的意义就像寻找烤面包片的意义,有时还不如直接把它吃掉。
4.你的计划可以从这里开始:保持好奇心。出门走走按时睡觉多喝水。深呼吸。快乐地吃饭。保持善良。接受不是每个人都喜欢你。感谢喜欢你的人。允许自己犯错。珍惜你已经拥有的东西。对阻碍你生活的事情说不,对帮助你生活的事情则欣然接受。
5.村上春树说:“我能承受任何痛苦,只要这种痛苦有意义。”对于外婆来说,每一秒都有每一秒的意义。无论未来怎样,这一刻一家人还可以在一起嬉笑,这样就已经很好,值得快乐和庆祝。不管明天怎样,我们不是还拥有今天?
6.无论面对什么困难,如果一个人的心态是饱满有力的,他都可以克服困难坚持下去。为什么有人粗茶淡饭也能快乐?为什么有人锦衣玉食依然痛苦?生、老、病、死、求不得、怨憎会、爱别离,生命本就是一场艰苦的冒险。外婆身上所散发的气质构建出一个无形的、强大的场域。进入这个场域的人可以获得镇定。
7.随着时间的推移,我开始懂得,生活是自己的,生命的意义大多时候只和自己有关。我不需要背负那么多不必要的负担。
8.保养不是花许多钱才能做到的,而是要认真对待自己,作息规律,好好吃饭,认真清洁,不糊弄自己,情绪不过夜,有事积极处理。
9.年轻人是没资格安贫乐道的,人在最有精力和条件时要尽力向前冲,多学本领、多赚钱、多积累。人这一生总会遇到坎,钱可以帮你过滤掉很多苦,有钱钱替你吃苦,没钱就要用身体、用命去扛。扛多了,就会忘记自己是珍贵的,轻视自己的人容易对自己不负责。
10.外婆曾经问我:“知道我为什么可以一辈子快乐吗?”我说:“那是因为你性格开朗。”她说:“最重要的原因是我有钱。女性能工作真是太好了,可以自己赚钱,不必靠男人。女人更要学本事养活自己,男人落魄了还能去卖苦力,女人的退路更少。”
11.技不如人就慢慢学,步伐跟不上节奏就慢慢来,山脚的人一步一步走也会走到山顶,虽慢,但早晚都会享受到山顶的美景。
12.各花各有各花香,各山各水各有灵,人各有道,道不同不相为谋,事情都是顺其自然的,强求不来太过于执着给人带来的只有无尽的忧愁。
13.人是为活着本身而活着的,而不是为了活着之外的任何事物所活着,生活是属于每个人自己的感受,不属于任何别人的看法。——余华《活着》
14.我始终认为道德是约束自己的,而不是要求别人的,每个人的选择方式和生活态度的选择肯定是不一样的,你可以选择纯爱可以有精神洁癖,也可以选择和你想法志同道合的朋友,但你不能站在道德的制高点上去唾弃和你想法不一样的人。
15.人有时候真是奇怪,选择了的会后悔,放弃了的会遗憾,但完美只能是一种理想,而不可能是一种存在。——山本文绪
1.当你不好意思拒绝别人的时候,想想别人怎么好意思为难你。
2.当你痛苦的时候,那一定是你的思维方式出了问题。
3.当你不考虑别人感受,他们就开始考虑你的感受了,因为他们怕你发疯。
4.当你最讨厌的人骂了你,那你一定是做对了什么。
5.身体健康是第一,比什么都重要,其它都是锦上添花。
6.一段关系里,谁不舒服谁改变,别试图改变他人。
7.至今为止,你已经从所有你认为扛不住的事情中活了过来。
8.与其内耗不如直接面对。
9.凡事发生必有利于我,事与愿违必是另有安排。
10.过去和未来都不可得,唯有当下。
11.你寻求谁的认同,就是在向谁赋权,而我选择把审判的权杖交给自己。
12.如果你害怕失败,就等于害怕成功。
13.人生的容错率超乎你的想象。
14.先问,被拒绝了再说。
15.不要总想着做正确的选择,要让选择变正确。
16.只要利益不冲突,对方的话可以不用反驳。
17.坏事还没发生之前就提前焦虑等于遇见了两次坏事。
18.大家都是在虚张声势,只不过是非常默契的互不揭穿罢了。
19.别因他人的错误惩罚自己,改变自己。
20.当遇到了人生路上的红绿灯,干脆就停下来休息会儿看看风景,你要相信,红久必绿。
21.人这一生终究只能靠自己,永远都不要把期望寄托到别人身上。
22.别把自己在别人眼里看的很重要,所有人都可以去否定你,但自己不能否定自己!
23.一个地方如果呆着太痛苦了马上离开,劳心劳神,不值得。
24.学会对亲情友情爱情祛魅,独善其身。
25.不要在不值得的人身上花时间。
图文整理源自网络,侵删~
感谢您在这么多回答中点开了我,且一直看到了最后,如果您也喜欢我的分享,记得点赞收藏哦!
❤我是慢一点也无妨的等等,爱阅读爱分享,欢迎关注,让我们一起在热爱的领域里共同成长闪闪发光!
","description":"能否分享一些让你豁然开朗的句子? 等等的回答\\n\\n\\n1.当你不好意思拒绝别人的时候,想想别人怎么好意思为难你。\\n\\n2.当你痛苦的时候,那一定是你的思维方式出了问题。\\n\\n3.当你不考虑别人感受,他们就开始考虑你的感受了,因为他们怕你发疯。\\n\\n4.当你最讨厌的人骂了你,那你一定是做对了什么。\\n\\n5.身体健康是第一,比什么都重要,其它都是锦上添花。\\n\\n6.一段关系里,谁不舒服谁改变,别试图改变他人。\\n\\n7.至今为止,你已经从所有你认为扛不住的事情中活了过来。\\n\\n8.与其内耗不如直接面对。\\n\\n9.凡事发生必有利于我,事与愿违必是另有安排。\\n\\n10.过去和未来都不可得,唯有当下。\\n\\n11.你寻求谁的认同…","guid":"https://www.zhihu.com/question/580956751/answer/118660868472","author":"等等","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T06:25:34.662Z","media":[{"url":"https://picx.zhimg.com/v2-e188dc8c23e7f91ec63fc9215b80539b.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LkNJwqxbsqxbG^kBR+S3ENjZk9j]"},{"url":"https://picx.zhimg.com/v2-445c9167ae540a7e62d1cc6ce8da6cc6.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LZOy04ofR6sm~Df$RQn+$lnSozf+"},{"url":"https://pic1.zhimg.com/v2-b95532f79e2caec2504621f2efe37a9e.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LbOfP#tQRRxG_Nf,NHkCozNdkEoy"},{"url":"https://pica.zhimg.com/v2-35957f70299d6cad01e2c416a06c0872.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LKN]X==|9rxaypxbM{W;}I-WozkB"},{"url":"https://picx.zhimg.com/v2-bce0381c63a43f813dd60162d8934fe5.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LZO3hAo}v}%1pyX9WBkAKPWFkWSe"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何快速学会R语言?-南大小程聊科研的回答:上一期 追本溯源(二):解析火山图的深层本质-2 对火山图的一些常见变体进行了解析。这一期来点更花哨的。 十、对...","url":"https://www.zhihu.com/question/346865819/answer/118542632742","content":"如何快速学会R语言?上一期追本溯源(二):解析火山图的深层本质-2对火山图的一些常见变体进行了解析。这一期来点更花哨的。
十、对基因进行标记
如果我想对某些基因(比如差异倍数最大,或者属于某条通路)进行标注,我该怎么做。这时候,就要用到另外一个R包:ggrepel。这个R包可以非常方便地添加标签,并且可以有效避免标签重叠。示例中我选择标注差异基因中上下调最多的各5个基因。
library(ggrepel)\\n\\ngenes <- DEG %>% filter(change != \\"STABLE\\") %>% group_by(sign(logFC)) %>% top_n(5, abs(logFC)) %$% ENSEMBL\\nDEG5 <- DEG %>% mutate(label = ifelse(ENSEMBL %in% genes, ENSEMBL, \\"\\"))\\n\\nggplot(DEG5, aes(x=logFC, y=-log10(P.Value),color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n geom_label_repel(aes(label = label),\\n size = 3,box.padding = unit(0.5, \\"lines\\"),\\n point.padding = unit(0.8, \\"lines\\"),\\n segment.color = \\"black\\",\\n show.legend = FALSE, max.overlaps = 10000)+\\n theme_bw()
十一、标注差异基因数量
在前面,我们已经对火山图进行了各种形式的变换,但是一直没有一个明确的数据展现出差异基因的数量,这里,我提供两种方法,对数量进行标注。
no.deg <- DEG$change %>% table %>% as.data.frame %>%\\n column_to_rownames(\\".\\") %>% t %>% as.data.frame\\n\\nggplot(DEG, aes(x=logFC, y=-log10(P.Value),color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\"),\\n labels = c(paste0(no.deg$DOWN, \\" DOWN\\"),\\n paste0(no.deg$STABLE, \\" STABLE\\"),\\n paste0(no.deg$UP, \\" UP\\"))) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n theme_bw()
或者,我们可以在图中放一个表格,这里我们需要gridExtra这个包。
library(gridExtra)\\n\\nno.deg <- DEG$change %>% table %>% as.data.frame %>%\\n column_to_rownames(\\".\\") %>% t %>% as.data.frame\\n\\nggplot(DEG, aes(x=logFC, y=-log10(P.Value),color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n annotation_custom(grob = tableGrob(no.deg, rows = NULL),\\n xmin = 0.4*max(DEG$logFC),\\n ymin = 0.8*(max(-log10(DEG$P.Value))))+\\n theme_bw()
十二、双曲线火山图
一般来讲,logFC和P值都在阈值附近的点不会在我们下游验证的考虑范围之内。如果一个基因的|logFC|比较大,我们可能会接受阈值附近的P值;反之,如果一个基因的的|logFC|比较小,我们对P值的要求就会更严格。那有没有办法让我们筛选出这样的基因呢?答案是可以,我们可以使用反比例函数构建双曲线,得到满足上述条件的差异基因。
DEG5 <- DEG %>% mutate(thresh = ifelse(logFC > 0,\\n 1/(logFC-0.5)+(-log10(0.05)),\\n 1/(-logFC-0.5)+(-log10(0.05))),\\n change = case_when(-log10(P.Value) > thresh & logFC > 0.5 ~ \\"UP\\",\\n -log10(P.Value) > thresh & logFC < -0.5 ~ \\"DOWN\\",\\n TRUE ~ \\"STABLE\\"))\\ndf.curv <- data.frame(x = seq(min(abs(DEG5$logFC)), max(abs(DEG5$logFC)), by = 0.0001)) %>% \\n mutate(y = 1/x + (-log10(0.05)),\\n x = x + 0.5) %>% \\n filter(y < ceiling(max(-log10(DEG5$P.Value))))\\n\\n\\nggplot(DEG5, aes(x=logFC, y=-log10(P.Value))) + \\n geom_point(aes(color=change)) + \\n geom_line(data = df.curv, aes(x = x, y = y), lty = 2) +\\n geom_line(data = df.curv, aes(x = -x, y = y), lty = 2) +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n theme_bw()
十三、基因组坐标火山图
基因的ENSEMBL数据其实还隐藏着更深层的信息:每个基因都有独特的基因组坐标。类似于曼哈顿图(这是什么?),我们也可以将差异基因映射到基因组上。这里,我使用ggplot2来做一个简单的示例。
gtf <- import(\\"hg38.gtf\\") %>% \\n as.data.frame() %>% \\n filter(type == \\"gene\\") %>% \\n mutate(gene_id = str_split(gene_id, \\"\\\\\\\\.\\", simplify = TRUE)[,1]) %>% \\n dplyr::select(gene_id, seqnames) %>% \\n set_colnames(c(\\"ENSEMBL\\", \\"Chromosome\\"))\\n\\nDEG6 <- left_join(DEG, gtf) %>% filter(!is.na(Chromosome))\\n\\nggplot(data = DEG6, aes(x = Chromosome, y = logFC, color = change), position = \\"jitter\\") +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n theme_bw()
这只是一种简单的实现方式,还可以使用其他的基因位置可视化工具(如circlize包等),对这种火山图进行进一步的美化。
到了这里,对基因差异表达分析结果的各种火山图呈现方式基本已经进行了讲解,大家可以灵活对这些火山图进行组合(比如双曲线+基因标注+差异基因数量)。这里买一个关子,为什么我要把上面几个字加粗呢,请看下期:追本溯源(四):解析火山图的深层本质-4。
最后,我想说,Open Your Mind!!!专注分享生信及科研入门干货,欢迎关注,一起解锁思维边界!
","description":"如何快速学会R语言? 南大小程聊科研的回答\\n\\n\\n上一期追本溯源(二):解析火山图的深层本质-2对火山图的一些常见变体进行了解析。这一期来点更花哨的。\\n\\n十、对基因进行标记\\n\\n如果我想对某些基因(比如差异倍数最大,或者属于某条通路)进行标注,我该怎么做。这时候,就要用到另外一个R包:ggrepel。这个R包可以非常方便地添加标签,并且可以有效避免标签重叠。示例中我选择标注差异基因中上下调最多的各5个基因。\\n\\nlibrary(ggrepel)\\n\\ngenes <- DEG %>% filter(change != \\"STABLE\\") %>% group_by(sign…","guid":"https://www.zhihu.com/question/346865819/answer/118542632742","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T03:50:45.376Z","media":[{"url":"https://picx.zhimg.com/v2-31c40145415fd17c22d7718466666da2.jpg","type":"photo","width":822,"height":574,"blurhash":"LURC-[x]?u-p~qV[D%R*x]n$RjWY"},{"url":"https://pic1.zhimg.com/v2-68691fab1893d287c8d027fb3cf09e1d.jpg","type":"photo","width":822,"height":574,"blurhash":"LURfh4%M_M-:~qoLD%WWxuoeM{WY"},{"url":"https://picx.zhimg.com/v2-aec3c8aca2373ed1663f97c9760ad4f4.jpg","type":"photo","width":822,"height":574,"blurhash":"LRRV|T-;_M?G~qt79FWYtQt7MxW="},{"url":"https://picx.zhimg.com/v2-fe15d5a6c7e10b4bd651143c087bdba8.jpg","type":"photo","width":822,"height":574,"blurhash":"LURfkB%M_3-;~qoLD%WBxuofM{ay"},{"url":"https://pica.zhimg.com/v2-c7e04dfb37b1e758900566abefff9e49.jpg","type":"photo","width":822,"height":574,"blurhash":"LnQ9[,j[ogt7s:WBj[ay~qtQWBt7"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(三):解析火山图的深层本质-3","url":"https://zhuanlan.zhihu.com/p/28590191522","content":"上一期 追本溯源(二):解析火山图的深层本质-2 对火山图的一些常见变体进行了解析。这一期来点更花哨的。 十、对基因进行标记 如果我想对某些基因(比如差异倍数最大,或者属于某条通路)进行标注,我该怎么做。这时候,就要用到另外一个R包:ggrepel。这个R包可以非常方便地添加标签,并且可以有效避免标签重叠。示例中我选择标注差异基因中上下调最多的各5个基因。 library(ggrepel) genes <- DEG %>% filter(change != \\"STAB…","description":"上一期 追本溯源(二):解析火山图的深层本质-2 对火山图的一些常见变体进行了解析。这一期来点更花哨的。 十、对基因进行标记 如果我想对某些基因(比如差异倍数最大,或者属于某条通路)进行标注,我该怎么做。这时候,就要用到另外一个R包:ggrepel。这个R包可以非常方便地添加标签,并且可以有效避免标签重叠。示例中我选择标注差异基因中上下调最多的各5个基因。 library(ggrepel) genes <- DEG %>% filter(change != \\"STAB…","guid":"https://zhuanlan.zhihu.com/p/28590191522","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-07T03:50:44.968Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"新人学习R语言有什么视频课可以推荐一下吗?-王勇的回答:英文很多,可以在coursera 上看,Hopkins 大学的视频,base R 基础非常扎实。tidy verse 视频要去油管...","url":"https://www.zhihu.com/question/13962324808/answer/118316508718","content":"新人学习R语言有什么视频课可以推荐一下吗?英文很多,可以在coursera 上看,Hopkins 大学的视频,base R 基础非常扎实。tidy verse 视频要去油管看。
中文什么资源比较适合推荐不太清楚。B站可以查查看
","description":"新人学习R语言有什么视频课可以推荐一下吗? 王勇的回答\\n\\n\\n英文很多,可以在coursera 上看,Hopkins 大学的视频,base R 基础非常扎实。tidy verse 视频要去油管看。\\n\\n中文什么资源比较适合推荐不太清楚。B站可以查查看","guid":"https://www.zhihu.com/question/13962324808/answer/118316508718","author":"王勇","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T23:52:31.498Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R-基础模型-","url":"https://zhuanlan.zhihu.com/p/28508981875","content":"generalized additive model (GAM) Post-hoc Adjustment for Zero-Thresholded Linear Models Auto XGBoost, Auto LighGBM, Auto CatBoost, Auto GradientBoosting Auto XGBoost, Auto LighGBM, Auto CatBoost, Auto GradientBoosting Multistart nonlinear least squares fitting Multistart nonlinear least squares fitting with {gslnls}","description":"generalized additive model (GAM) Post-hoc Adjustment for Zero-Thresholded Linear Models Auto XGBoost, Auto LighGBM, Auto CatBoost, Auto GradientBoosting Auto XGBoost, Auto LighGBM, Auto CatBoost, Auto GradientBoosting Multistart nonlinear least squares fitting Multistart…","guid":"https://zhuanlan.zhihu.com/p/28508981875","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T16:42:15.789Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R Image processing","url":"https://zhuanlan.zhihu.com/p/28507499750","content":"In this blog post, we’ll use the {imager} package but you could definitely do something similar using the {magick} package instead. Creating typewriter-styled images in R","description":"In this blog post, we’ll use the {imager} package but you could definitely do something similar using the {magick} package instead. Creating typewriter-styled images in R","guid":"https://zhuanlan.zhihu.com/p/28507499750","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T16:23:09.048Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R - Community Detection - Smith-Pittman Algorithm","url":"https://zhuanlan.zhihu.com/p/28504851813","content":"Smith-Pittman Algorithm: Enhancing Community Detection in Networks","description":"Smith-Pittman Algorithm: Enhancing Community Detection in Networks","guid":"https://zhuanlan.zhihu.com/p/28504851813","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T16:12:37.126Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R-编程 - 基础操作-","url":"https://zhuanlan.zhihu.com/p/28504448587","content":"波浪号 Tilde Operator (~) How to Use the Tilde Operator (~) in R: A Comprehensive Guide 字符串 Checking if a String Contains Multiple Substrings in R Mastering grepl with Multiple Patterns in Base R Mastering String Concatenation in R: A Comprehensive Guide 矩阵 Mastering Matrix Concatenation in R: A Guide to rbind() and cbind()","description":"波浪号 Tilde Operator (~) How to Use the Tilde Operator (~) in R: A Comprehensive Guide 字符串 Checking if a String Contains Multiple Substrings in R Mastering grepl with Multiple Patterns in Base R Mastering String Concatenation in R: A Comprehensive Guide 矩阵 Mastering Matrix…","guid":"https://zhuanlan.zhihu.com/p/28504448587","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T16:09:52.149Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R-时间序列-基础设施(通用)类package","url":"https://zhuanlan.zhihu.com/p/28501342263","content":"era: Year-Based Time ScalesProvides a consistent representation of year-based time scales as a numeric vector with an associated \'era\'. There are built-in era definitions for many year numbering systems used in contemporary and historic calendars (e.g. Common Era, Islamic \'Hijri\' years); year-based time scales used in archaeology, astronomy, geology, and other palaeosciences (e.g. Before Present…","description":"era: Year-Based Time ScalesProvides a consistent representation of year-based time scales as a numeric vector with an associated \'era\'. There are built-in era definitions for many year numbering systems used in contemporary and historic calendars (e.g. Common Era, Islamic \'Hijri\'…","guid":"https://zhuanlan.zhihu.com/p/28501342263","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T15:48:48.580Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言如何绘图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍...","url":"https://www.zhihu.com/question/378295512/answer/118040876664","content":"R语言如何绘图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x = price, group = cut, fill = cut)) +\\n geom_density(adjust=1.5, position=\\"fill\\") +\\n labs(x=\\"Value\\", y=\\"Density\\") +\\n guides(fill=guide_legend(\\"Type\\")) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(), legend.position = \\"top\\",\\n legend.key.size = unit(24,\\"pt\\")) +\\n scale_fill_manual(values = rev(colors))\\np
最后我们保存绘制的图形:
ggsave(\\"save/density-stack.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。
sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
会有的,等关闭软件重新打开,或者关机重启
","description":"Rstudio会有卡住不会出图的情况吗? lqw刘的回答\\n\\n\\n会有的,等关闭软件重新打开,或者关机重启","guid":"https://www.zhihu.com/question/8799790527/answer/117684758607","author":"lqw刘","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T03:50:32.901Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何应用R语言进行数据分析?-南大小程聊科研的回答:在上一期 追本溯源(一):解析火山图的深层本质-1 中,我们解构了基本的火山图,并得到了几条推论。下面,...","url":"https://www.zhihu.com/question/648130588/answer/117645145431","content":"如何应用R语言进行数据分析?在上一期追本溯源(一):解析火山图的深层本质-1中,我们解构了基本的火山图,并得到了几条推论。下面,我将使用这几条推论,对一些“花哨”和不常见的火山图进行解读。
四、渐变火山图
上一篇中,我提到了一个推论:火山图的散点可以拥有多个维度。让我们思考一下点可以拥有多少维度呢?
那么,绘制渐变火山图成为了一个轻而易举的事情:只要将任意一种连续变量映射给颜色/大小/透明度,我们就可以获得渐变火山图
ggplot(DEG, aes(x=logFC, y=-log10(P.Value),color=-log10(P.Value))) + \\n geom_point() +\\n scale_colour_continuous(type = \\"viridis\\") +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n theme_bw()
其他映射方式我就不一一列举了,原理相同。
五、MA plot
让我们再次回到差异分析的结果。在经典火山图中,我们只使用了logFC和P.Value,即使是在渐变火山图中,我们也重复地将P值映射给了颜色,这其实是对数据的极大浪费。
让我们想想,还有什么数据可以利用。似乎一级数据AveExpr一直没有用过(t/B统计量一般不用,因为解释起来比较麻烦),那我们把它映射给横轴怎么样?
ggplot(DEG, aes(x=AveExpr, y=logFC,color=change)) + \\n geom_point() +\\n scale_colour_manual(values = c(DOWN = \\"blue\\",STABLE = \\"black\\",UP = \\"red\\")) +\\n theme_bw()
如图所示,我们就得到了MA plot(也有人称为横轴火山图,当然竖起来也是可以的)。
六、瀑布图
让我们再想一想,差异分析结果里面还包含哪些隐藏数据。logFC有高有低,是不是就是隐含着排序信息这个二级数据?让我们试一试。
DEG2 <- DEG %>% arrange(desc(logFC)) %>% \\n mutate(rank = 1:nrow(.))\\n\\nggplot(DEG2, aes(x=rank, y=logFC,color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n theme_bw()
或者仅仅展示差异基因也可以
DEG3 <- DEG %>% filter(change != \\"STABLE\\") %>%\\n arrange(desc(logFC)) %>% \\n mutate(rank = 1:nrow(.))\\n\\nggplot(data = DEG3,\\n aes(x=rank, y=logFC,color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n theme_bw()
七、倾斜火山图
让我们给思维放开更多的限制。如果我们把视线投向差异分析结果之外呢?我们是用什么进行差异分析的?表达量。表达量有哪些?Counts、FPKM、TPM(、CPM等)。那我们可不可以,以进行差异分析的两组的平均表达量作为横轴和纵轴,然后映射其他的数据呢?
exp1 <- rowMeans(log2(exprSet[,1:4]+1)) %>% \\n as.data.frame() %>% \\n set_colnames(\\"group_A\\") %>% \\n rownames_to_column(\\"ENSEMBL\\")\\nexp2 <- rowMeans(log2(exprSet[,5:8]+1)) %>% \\n as.data.frame() %>% \\n set_colnames(\\"group_B\\") %>% \\n rownames_to_column(\\"ENSEMBL\\")\\n\\nDEG4 <- list(DEG, exp1, exp2) %>% purrr::reduce(inner_join)\\n\\nggplot(data = DEG4,\\n aes(x=group_A, y=group_B,color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n theme_bw()
似乎也很容易嘛。
八、彩色背景火山图
那我们可不可以将背景直接染上颜色呢?
ggplot(DEG, aes(x=logFC, y=-log10(P.Value)))+\\n geom_rect(aes(xmin = 0.5, xmax = Inf, ymin = -log10(0.05), ymax = Inf), fill = \\"#F08080\\") +\\n geom_rect(aes(xmin = -Inf, xmax = -0.5, ymin = -log10(0.05), ymax = Inf), fill = \\"#87CEFA\\") +\\n geom_point()+\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n theme_bw()
九、极坐标火山图
甚至,我们可以将坐标轴进行极坐标化(虽然这样画出来的图不太容易读)。
ggplot(DEG, aes(x=logFC, y=-log10(P.Value),color=change)) + \\n geom_point() + \\n scale_colour_manual(values = c(DOWN = \\"blue\\",\\n STABLE = \\"black\\",\\n UP = \\"red\\")) +\\n geom_hline(yintercept = -log10(0.05), lty = 2) +\\n geom_vline(xintercept = c(-0.5, 0.5), lty = 2) +\\n coord_polar(theta = \'x\') +\\n theme_bw()
到了这里,我们已经对绝大多数比较常见的火山图(有的也不太常见)进行了解析。在下一篇中,我将对如何标记基因或者差异基因数量,以及一些更加高阶的火山图进行解析。
最后,我想说,Open Your Mind!!!专注分享生信及科研入门干货,欢迎关注,解锁思维边界!
","description":"如何应用R语言进行数据分析? 南大小程聊科研的回答\\n\\n\\n在上一期追本溯源(一):解析火山图的深层本质-1中,我们解构了基本的火山图,并得到了几条推论。下面,我将使用这几条推论,对一些“花哨”和不常见的火山图进行解读。\\n\\n四、渐变火山图\\n\\n上一篇中,我提到了一个推论:火山图的散点可以拥有多个维度。让我们思考一下点可以拥有多少维度呢?\\n\\n颜色(离散/渐变)\\n形状(形状)\\n大小(离散/渐变)\\n透明度(离散/渐变)\\n\\n\\n那么,绘制渐变火山图成为了一个轻而易举的事情:只要将任意一种连续变量映射给颜色/大小/透明度,我们就可以获得渐变火山图\\n\\nggplot(DEG, aes(x…","guid":"https://www.zhihu.com/question/648130588/answer/117645145431","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T03:14:05.185Z","media":[{"url":"https://picx.zhimg.com/v2-50d5583c1ef594e5fbb5a707ad1163a2.jpg","type":"photo","width":872,"height":574,"blurhash":"LURp8.-;_2xv~qWVD*ofxaj[NGj["},{"url":"https://pic1.zhimg.com/v2-bc6e24386e5cc87337420b51281bed62.jpg","type":"photo","width":822,"height":574,"blurhash":"LVRV|UIUV[%MxuV@ayf6~q.7ofof"},{"url":"https://picx.zhimg.com/v2-8bdc7e97ed0c36e532feec24f49c376e.jpg","type":"photo","width":822,"height":574,"blurhash":"L8S$ov~qM{~q~qRjWBay-;ofayfQ"},{"url":"https://picx.zhimg.com/v2-9ed2a947aa527a52ae656e0d5c4cbda5.jpg","type":"photo","width":822,"height":574,"blurhash":"LCS$ov_3t6^+~qWBRjt7o{ozkDWB"},{"url":"https://picx.zhimg.com/v2-e9fb484945ad84a81f2b71e9aab5644f.jpg","type":"photo","width":822,"height":574,"blurhash":"LER:HGRQRk?b?b%M-;t6_3~qxuM{"},{"url":"https://picx.zhimg.com/v2-2a1304048f6c26248b5637bd4c5b5a21.jpg","type":"photo","width":822,"height":574,"blurhash":"LsNTC38JtT$3i#KkIViw%gwIaxfk"},{"url":"https://pic1.zhimg.com/v2-95604bc2d2cf26d51d3b1dff3f12e32b.jpg","type":"photo","width":822,"height":574,"blurhash":"LDSY{p_3?v.8~XWARjfS?vof8{xZ"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(二):解析火山图的深层本质-2","url":"https://zhuanlan.zhihu.com/p/28313379132","content":"在上一期 追本溯源(一):解析火山图的深层本质-1 中,我们解构了基本的火山图,并得到了几条推论。下面,我将使用这几条推论,对一些“花哨”和不常见的火山图进行解读。 四、渐变火山图 上一篇中,我提到了一个推论:火山图的散点可以拥有多个维度。让我们思考一下点可以拥有多少维度呢? 颜色(离散/渐变)形状(形状)大小(离散/渐变)透明度(离散/渐变) 那么,绘制渐变火山图成为了一个轻而易举的事情:只要将任意一种…","description":"在上一期 追本溯源(一):解析火山图的深层本质-1 中,我们解构了基本的火山图,并得到了几条推论。下面,我将使用这几条推论,对一些“花哨”和不常见的火山图进行解读。 四、渐变火山图 上一篇中,我提到了一个推论:火山图的散点可以拥有多个维度。让我们思考一下点可以拥有多少维度呢? 颜色(离散/渐变)形状(形状)大小(离散/渐变)透明度(离散/渐变) 那么,绘制渐变火山图成为了一个轻而易举的事情:只要将任意一种…","guid":"https://zhuanlan.zhihu.com/p/28313379132","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T03:14:04.133Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言使用forest plot作图,但是图形显示不完整怎么处理?-华科小徐的回答:朋友让我用R语言的XML库写一个采集图片的爬虫程序。首先,我需要确认XML库是否适合这...","url":"https://www.zhihu.com/question/556768304/answer/117638825001","content":"R语言使用forest plot作图,但是图形显示不完整怎么处理?朋友让我用R语言的XML库写一个采集图片的爬虫程序。首先,我需要确认XML库是否适合这个任务。XML库主要用于解析XML和HTML内容,但R里面还有其他库如rvest可能更方便。不过朋友特别提到了XML库,所以必须用它。
可能朋友的需求是简单的图片下载,但可能需要更多的细节处理,比如过滤图片格式,限制下载数量等。代码示例中需要包含这些考虑,或者至少提到可能的改进点。
以下是使用R语言XML库编写的图片爬虫程序示例。该程序能够从指定网页抓取图片链接并下载保存到本地:
# 加载必要的库\\nlibrary(XML)\\nlibrary(RCurl) # 用于处理URL和下载文件\\n\\n# 创建图片保存目录\\ndir.create(\\"downloaded_images\\", showWarnings = FALSE)\\n\\n# 定义图片爬取函数\\ncrawl_images <- function(url) {\\n # 设置浏览器头信息(防止反爬)\\n user_agent <- \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3\\"\\n \\n # 获取网页内容\\n webpage <- getURL(url, useragent = user_agent)\\n doc <- htmlParse(webpage, asText = TRUE)\\n \\n # 使用XPath提取所有图片链接\\n img_nodes <- xpathSApply(doc, \\"//img/@src\\")\\n \\n # 转换为字符向量\\n img_urls <- as.character(img_nodes)\\n \\n # 处理相对路径\\n absolute_urls <- sapply(img_urls, function(x) {\\n ifelse(grepl(\\"^https?://\\", x), x, paste0(url, x))\\n })\\n \\n # 去重\\n unique_urls <- unique(absolute_urls)\\n \\n # 下载图片\\n for(i in seq_along(unique_urls)) {\\n tryCatch({\\n # 生成文件名\\n filename <- paste0(\\"downloaded_images/\\", basename(unique_urls[i]))\\n \\n # 下载文件\\n download.file(unique_urls[i], \\n destfile = filename,\\n mode = \\"wb\\",\\n quiet = TRUE)\\n \\n # 打印进度\\n cat(sprintf(\\"正在下载:%s [%d/%d]\\\\n\\", \\n basename(unique_urls[i]), i, length(unique_urls)))\\n }, error = function(e) {\\n cat(sprintf(\\"下载失败:%s\\\\n\\", unique_urls[i]))\\n })\\n \\n # 添加延迟(防止请求过于频繁)\\n Sys.sleep(0.5)\\n }\\n}\\n\\n# 使用示例(请替换为实际需要抓取的URL)\\ntarget_url <- \\"https://picsum.photos/\\" # 测试用图片网站\\ncrawl_images(target_url)\\n\\ncat(\\"图片下载完成!请查看 downloaded_images 目录\\\\n\\")
代码说明:
XML
:用于解析HTML文档RCurl
:用于处理HTTP请求和URL操作robots.txt
协议Sys.sleep
参数)扩展改进建议:
请将示例中的target_url
替换为实际需要抓取的网站地址(注意遵守网站使用条款)。建议首次测试使用示例中的https://picsum.photos/
(一个允许测试的图片网站)。
具体问题具体分析,要看你个人具体情况来判断。
渠道的话,如果日语还不错可以自己尝试从一些日本本土软件找工作试试,日语不好的那就只能通过国内的中介匹配工作。一般非技术性的工作都有中介费用,技术性的工作一般都是没有中介费用的。
非技术性的工作,日语N2/N3大部分人都是做贩卖、温泉酒店,目前是国内人选赴日或者是在日的留学生就职最多的两大行业,这样的人在日本基本上赚不了大钱但是维持个人的生活还是可以的。
技术性的就是IT派遣和机械类的岗位了,这样的人去了日本之后生活水平应该是相对比较舒适的,赚的也是比普通在日本打工做底层工作的要多的多。有的公司如果你的技术很好甚至不会日语也可以拿到工作机会。
实际没有什么技能性的,日语也没有特别好的情况下想进日本会社是有难度的,即使进入了日本会社,都是要从基层做起,刚开始工资都不会高的,需要靠“年头”慢慢熬上去。但是日本会社的正社员一般都很稳定,一个萝卜一个坑,晋升的话确实比较困难,很多人都是到了四五十岁才能熬到晋升的机会,但是好在比较稳定,如果物欲不高在日本生活也是比较滋润的。
有赴日意向的小伙伴都可以上Ujob上看看日本的招聘需求有哪些~
Ujob专注日本好工作,一站式解决在日华人求职问题,“随薪”开启日本职场进阶之旅!
契合华人使用习惯真实、便捷、高效,在日本找工作更简单!
海量职位 名企展示海量工作岗位实时更新,社员、时给、兼职多种岗位形式全覆盖
汇聚日本高薪名企,精准锁定求职需求名-键投递 精准推荐智能投递心仪岗位,
简历与职位双向匹配实时发起线上聊天,有效减少沟通成本、资源整合、人才服务、全面整合优质的IT企业及IT案件资源,为3万+IT企业及技术者提供人才服务。
","description":"日语学到什么程度可以去日本呢? Ujob-U酱的回答\\n\\n\\n具体问题具体分析,要看你个人具体情况来判断。\\n\\n渠道的话,如果日语还不错可以自己尝试从一些日本本土软件找工作试试,日语不好的那就只能通过国内的中介匹配工作。一般非技术性的工作都有中介费用,技术性的工作一般都是没有中介费用的。\\n\\n非技术性的工作,日语N2/N3大部分人都是做贩卖、温泉酒店,目前是国内人选赴日或者是在日的留学生就职最多的两大行业,这样的人在日本基本上赚不了大钱但是维持个人的生活还是可以的。\\n\\n技术性的就是IT派遣和机械类的岗位了,这样的人去了日本之后生活水平应该是相对比较舒适的…","guid":"https://www.zhihu.com/question/555048169/answer/117576070912","author":"Ujob-U酱","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T02:11:51.337Z","media":[{"url":"https://pic1.zhimg.com/v2-2d3864b76d587227110c044e6987b887.jpg","type":"photo","width":1170,"height":2532,"blurhash":"LTNdgnkpNz%LD4jFNKay.9a$r=WB"},{"url":"https://picx.zhimg.com/v2-f2590acf1c57460e43b2f2cce7f45e99.jpg","type":"photo","width":1170,"height":2532,"blurhash":"LCS6Pli{X8~q~qo2M{kCD%M{xut7"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-lemon的回答:有统计学就不可能","url":"https://www.zhihu.com/question/620095226/answer/117544244754","content":"Python 在将 R 绞杀至死吗 ?有统计学就不可能
","description":"Python 在将 R 绞杀至死吗 ? lemon的回答\\n\\n\\n有统计学就不可能","guid":"https://www.zhihu.com/question/620095226/answer/117544244754","author":"lemon","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-06T01:40:34.822Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-权谋人性的回答:不要随随便便去得罪任何人,也不要怕得罪任何人。 你有钱,我没钱,你看不起我,在你眼里我是一条G,我对你...","url":"https://www.zhihu.com/question/580956751/answer/117389388849","content":"能否分享一些让你豁然开朗的句子?不要随随便便去得罪任何人,也不要怕得罪任何人。
你有钱,我没钱,你看不起我,在你眼里我是一条G,我对你没用。对于我来说,你照样是条G,对我也没用。我不会卑躬屈膝,我很清楚,哪怕你对我有用,你要帮我,首先是我也能帮到你。
人性都是恐惧且左右摇摆的,哪怕自己一无所有,面对一个有钱的人,你只要坚定不移的说你做这个决定是错的,他晚上也会睡不着,只要你不动摇,他就会被你动摇。这可能不符合逻辑,但符合人性。
只要能与真理同在,又何需被人理解。
无论你变成什么样子,都是有人喜欢,有人讨厌。为啥要让人人都喜欢呢?干嘛呢,有毛病吗?做自己,你只需要让爱你的更爱你,至于不爱的,滚犊子。
毁掉一个人最好的方式就是捧S,当面夸你棒的人,不一定是真的为你好。因为骄傲而犯下的错误,很可能会让你陷入万劫不复
人一辈子最大的自由是思想的自由与行动的自由。没钱时好好学习赚钱,其它的事不要碰。因为有钱才能有时间玩思想,才有行动的自由。
一旦把木有关系的东西捆绑在一起,我们的思维就会一团混乱。有些人喜欢这样弄,当你思维混乱时,趁机操控你,收割你。
你可以去对别人好,但你一定要看对方懂不懂给你回报。木有回报的付出,永远都是最廉价的。
压垮一个人的往往不是事情本身,而是情绪。要学会及时觉察自个的情绪,分清情绪的来源,把关注点放在解决问题上。
人性其实都喜欢争对错,就是要证明自己是对的。如果我不能证明我是对的,那么我就要证明你是错的。哪怕事实证明你是对的,我是错的,我也会为自己的错误找借口。因此跟任何人沟通,只要不是特别重要的事,宁可输,也不要争着赢。
其实人一出生就会玩虚虚实实的权某手段,只不过被那些天天宣传有道理而木有用的东西给洗脑了,还有很多没道理,没用的。忘记了,你本来就具备的基因。
过度的内耗,会让人呈现出一种低能量的状态。不仅会降低咱们的行动力,还会影响咱们生活的满意度,甚至会滋生出对自我存在的否定认知。
能用脑壳解决的问题,就不要用体力解决。能用别人时间来做的事,就不要自个儿做。
死磕一件事是一种态度,而不是方法。目标不能变,但是达成目标的方法应该要时刻调整。
一招鲜吃遍天,已经不适用这个时代了。
老板对你讲的道理都是对他有利的,如果你遇到一个喜欢给你谈道理,或者谈理想的老板,你表面应承者,内心要独立思考。思考他说得这些与他的行为是否匹配,老板的每句话,都对自己有利的。
Prism十分钟的事,R搞一个小时。
","description":"有大佬知道这种图怎么用R画吗? 初心的回答\\n\\n\\nPrism十分钟的事,R搞一个小时。","guid":"https://www.zhihu.com/question/639214009/answer/117053678688","author":"初心","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T08:35:17.928Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Tidyverse数据转换:forcats包","url":"https://zhuanlan.zhihu.com/p/28139720299","content":"1. 因子 [图片] 2. 查看因子 [图片] 3. 因子合并 [图片] 4. 改变因子水平的顺序 [图片] [图片] 5. 改变因子水平 [图片] 6. 增减因子水平 [图片]","description":"1. 因子 [图片] 2. 查看因子 [图片] 3. 因子合并 [图片] 4. 改变因子水平的顺序 [图片] [图片] 5. 改变因子水平 [图片] 6. 增减因子水平 [图片]","guid":"https://zhuanlan.zhihu.com/p/28139720299","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T08:07:40.283Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Tidyverse数据转换:stringr包","url":"https://zhuanlan.zhihu.com/p/27681084414","content":"1. 字符串匹配 [图片] str_count:计算匹配次数str_count(string, pattern = \\"\\") fruit <- c(\\"apple\\", \\"banana\\", \\"pear\\", \\"pineapple\\") str_count(fruit, \\"a\\") #> [1] 1 3 1 1 str_count(fruit, \\"p\\") #> [1] 2 0 1 3 str_count(fruit, \\"e\\") #> [1] 1 0 1 2 str_count(fruit, c(\\"a\\", \\"b\\", \\"p\\", \\"p\\")) #> [1] 1 1 1 3 str_count(c(\\"a.\\", \\"...\\", \\".a.a\\"), \\".\\") #> [1] 2 3 4 str_count(c(\\"a.\\", \\"...\\", \\".a.a\\"), fixed(\\".\\")) #> [1] 1 3 2str…","description":"1. 字符串匹配 [图片] str_count:计算匹配次数str_count(string, pattern = \\"\\") fruit <- c(\\"apple\\", \\"banana\\", \\"pear\\", \\"pineapple\\") str_count(fruit, \\"a\\") #> [1] 1 3 1 1 str_count(fruit, \\"p\\") #> [1] 2 0 1 3 str_count(fruit, \\"e\\") #> [1] 1 0 1 2 str_count(fruit, c(\\"a\\", \\"b\\", \\"p\\", \\"p\\")) #> [1] 1 1 1 3…","guid":"https://zhuanlan.zhihu.com/p/27681084414","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T07:44:46.381Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在业余时学数据分析?-Yamaz的回答:在说如何分析之前,我们先聊聊分析师为什么要问一个好问题。 分析师常会遇上这些情况,有时候需求太过具体甚至到字段且...","url":"https://www.zhihu.com/question/22119753/answer/116977435890","content":"如何在业余时学数据分析?在说如何分析之前,我们先聊聊分析师为什么要问一个好问题。
分析师常会遇上这些情况,有时候需求太过具体甚至到字段且不需要给出分析结论和建议,纯纯沦为提数工具人,又或者需求抽象得像天问一样,不能聚焦要解决的目标是什么,给出的数据仅停留在数据表面,没有深入发现本质问题。这些常常都会让分析师有一些挫败感,无法同业务有更紧密的合作,自身也得不到成长。因此提出一个或一系列好问题,是分析的至关重要的第一步,真正提出好问题才能引导其被真正解决。
通常分析师面对的需求分为这两种情况:①需求明确的收敛问题,②需求不明确的开放问题。
先来聊聊第一类:需求明确的收敛问题。
该类问题会分为两种:
以上两种需求目标简单,分析师仅需沟通明确分析的业务背景和字段等,理解业务逻辑,进行指标拆解,分层次论证和判断。
上文讲到这类问题通常较为简单,业务也会进行数据对比和分析,因此分析师在处理时应充分同业务沟通,重点梳理好业务流程和框架,理清目标指标和过程指标,找到合理的对比项,清晰表达自身观点。就这类问题分析师通常要和业务沟通哪些内容呢?
我们再看第二类:需求不明确开放问题
该类问题会分为两种:
以上两种问题显然没有明确指向性答案,需要分析师抽丝剥茧寻找问题本质,制定判断标准和评估方法。
因此在这类需求沟通时,需要遵循一些逻辑把目标问题进行拆分:
关注公众号,了解更多分析干货:
","description":"如何在业余时学数据分析? Yamaz的回答\\n\\n\\n在说如何分析之前,我们先聊聊分析师为什么要问一个好问题。\\n\\n分析师常会遇上这些情况,有时候需求太过具体甚至到字段且不需要给出分析结论和建议,纯纯沦为提数工具人,又或者需求抽象得像天问一样,不能聚焦要解决的目标是什么,给出的数据仅停留在数据表面,没有深入发现本质问题。这些常常都会让分析师有一些挫败感,无法同业务有更紧密的合作,自身也得不到成长。因此提出一个或一系列好问题,是分析的至关重要的第一步,真正提出好问题才能引导其被真正解决。\\n\\n通常分析师面对的需求分为这两种情况:①需求明确的收敛问题…","guid":"https://www.zhihu.com/question/22119753/answer/116977435890","author":"Yamaz","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T07:17:15.791Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"追本溯源(一):解析火山图的深层本质-1","url":"https://zhuanlan.zhihu.com/p/28078316855","content":"从今天开始,我将更新《追本溯源》系列,对一些常见的生信图表进行深度解读。 在医学及生物相关的论文插图中,火山图堪称\\"劳模\\"。这种以X轴表示差异倍数、Y轴展示统计学显著性的二维散点图,由于形似火山,因此被大家亲切的称为“火山图(Volcano Plot)” [图片] 用火山喷发般的点阵分布可以轻易地将基因的差异表达信息展现出来。但可能很少有人意识到,这个被P值阈值线和差异倍数线分割的经典框架,本质上只是散点图家族中的一种特殊…","description":"从今天开始,我将更新《追本溯源》系列,对一些常见的生信图表进行深度解读。 在医学及生物相关的论文插图中,火山图堪称\\"劳模\\"。这种以X轴表示差异倍数、Y轴展示统计学显著性的二维散点图,由于形似火山,因此被大家亲切的称为“火山图(Volcano Plot)” [图片] 用火山喷发般的点阵分布可以轻易地将基因的差异表达信息展现出来。但可能很少有人意识到,这个被P值阈值线和差异倍数线分割的经典框架,本质上只是散点图家族中的一种特殊…","guid":"https://zhuanlan.zhihu.com/p/28078316855","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T03:58:52.997Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"正则表达式中常用元字符及使用实例","url":"https://zhuanlan.zhihu.com/p/28062636481","content":"写在开头hhh每年都有个阶段会要想重新跟课学习数据挖掘,从快毕业 开始就在学,学到今年!那就再学一下吧! 学习资料 :生新技能树数据挖掘课程——生信入门&数据挖掘线上直播课3月班 参考书籍 ——《R语言数据可视化与统计基础》 [图片] 学习流程:忙完工作之后会先看数据挖掘课程的内容,会整理相关的笔记,回家之后会根据《R语言数据挖掘可视化与统计基础》来巩固 [图片] 今天学了字符串的处理和基本统计分析的内容,主要想整理一下正则表达式…","description":"写在开头hhh每年都有个阶段会要想重新跟课学习数据挖掘,从快毕业 开始就在学,学到今年!那就再学一下吧! 学习资料 :生新技能树数据挖掘课程——生信入门&数据挖掘线上直播课3月班 参考书籍 ——《R语言数据可视化与统计基础》 [图片] 学习流程:忙完工作之后会先看数据挖掘课程的内容,会整理相关的笔记,回家之后会根据《R语言数据挖掘可视化与统计基础》来巩固 [图片] 今天学了字符串的处理和基本统计分析的内容,主要想整理一下正则表达式…","guid":"https://zhuanlan.zhihu.com/p/28062636481","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T03:06:48.213Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-知乎用户abEPKS的回答:《病隙碎笔(纪念版)》 史铁生 1个笔记 * 第一章 * 古园寂静,你甚至能感到神明在傲慢地看着你,以风...","url":"https://www.zhihu.com/question/580956751/answer/116731694009","content":"能否分享一些让你豁然开朗的句子?《病隙碎笔(纪念版)》
史铁生
1个笔记
* 第一章 *
古园寂静,你甚至能感到神明在傲慢地看着你,以风的穿流,以云的变幻,以野草和老树的轻响,以天高地远和时间的均匀与漫长……你只有接受这傲慢的逼迫,曾经和现在都要接受,从那悠久的空寂中听出回答。
","description":"能否分享一些让你豁然开朗的句子? 知乎用户abEPKS的回答\\n\\n\\n《病隙碎笔(纪念版)》\\n\\n史铁生\\n\\n1个笔记\\n\\n\\n\\n\\n* 第一章 *\\n\\n\\n\\n\\n\\n\\n\\n古园寂静,你甚至能感到神明在傲慢地看着你,以风的穿流,以云的变幻,以野草和老树的轻响,以天高地远和时间的均匀与漫长……你只有接受这傲慢的逼迫,曾经和现在都要接受,从那悠久的空寂中听出回答。","guid":"https://www.zhihu.com/question/580956751/answer/116731694009","author":"知乎用户abEPKS","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T02:51:16.435Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言执行多样性分析及可视化","url":"https://zhuanlan.zhihu.com/p/28046435895","content":"宝子们 运营不易,细猪卖力 感谢大家对本公众号的认可与支持 ✨ 原文链接:R语言执行多样性分析及可视化 欢迎关注“细猪技术”微信公众号,更早获取最新资讯多样性分析是微生物群落分析流程的常规步骤,16S扩增子测序技术帮助研究者快速解析生物群落物种多样性特征,经序列质控、按阈值聚类获取OTUs(97%)或ASVs(100%),并基于特征序列及特征丰度进行后续物种注释及多样性分析。多样性概念来源于生态学,包括Alpha多样性、Beta…","description":"宝子们 运营不易,细猪卖力 感谢大家对本公众号的认可与支持 ✨ 原文链接:R语言执行多样性分析及可视化 欢迎关注“细猪技术”微信公众号,更早获取最新资讯多样性分析是微生物群落分析流程的常规步骤,16S扩增子测序技术帮助研究者快速解析生物群落物种多样性特征,经序列质控、按阈值聚类获取OTUs(97%)或ASVs(100%),并基于特征序列及特征丰度进行后续物种注释及多样性分析。多样性概念来源于生态学,包括Alpha多样性、Beta…","guid":"https://zhuanlan.zhihu.com/p/28046435895","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T02:27:03.523Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R绘制UpSet图","url":"https://zhuanlan.zhihu.com/p/28046330228","content":"原文链接:R绘制UpSet图 欢迎关注“细猪技术”微信公众号,更早获取最新资讯韦恩图(Venn)可以用于解决集合相关问题,但常规韦恩图仅支持展示分组不大于5的多维数据。哈佛大学Alexander Lex & Nils Gehlenborg于2014年在Nature Methods期刊上发表的Points of view: Sets and intersections( https://www.nature.com/articles/nmeth.3033 )提出UpSet Plot,允许对3~30组的集合数据进行可视化,更加直观清晰地观察数据间的交互情况。UpSet官方提供多种示例…","description":"原文链接:R绘制UpSet图 欢迎关注“细猪技术”微信公众号,更早获取最新资讯韦恩图(Venn)可以用于解决集合相关问题,但常规韦恩图仅支持展示分组不大于5的多维数据。哈佛大学Alexander Lex & Nils Gehlenborg于2014年在Nature Methods期刊上发表的Points of view: Sets and intersections( https://www.nature.com/articles/nmeth.3033 )提出UpSet Plot,允许对3~30组的集合数据进行可视化,更加直观清晰地观察数据间的交互情况…","guid":"https://zhuanlan.zhihu.com/p/28046330228","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T02:22:29.243Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Error in `[.data.frame`(data, t_pre) : 选择了未定义的列?-xingfeng237的回答:您好请问解决了吗?我今天做的时候也遇到了同样的问题,想和您交流一下","url":"https://www.zhihu.com/question/634791679/answer/116664468273","content":"Error in `[.data.frame`(data, t_pre) : 选择了未定义的列?您好请问解决了吗?我今天做的时候也遇到了同样的问题,想和您交流一下
","description":"Error in `[.data.frame`(data, t_pre) : 选择了未定义的列? xingfeng237的回答\\n\\n\\n您好请问解决了吗?我今天做的时候也遇到了同样的问题,想和您交流一下","guid":"https://www.zhihu.com/question/634791679/answer/116664468273","author":"xingfeng237","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-05T01:50:55.572Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-红尘破晓的回答:1. 我们无法与岁月争锋,也无法留住时间的脚步,唯一能做的就是用自己喜欢的方式,过好生命中的每一天。 2. ...","url":"https://www.zhihu.com/question/580956751/answer/116446892210","content":"能否分享一些让你豁然开朗的句子?1.
我们无法与岁月争锋,也无法留住时间的脚步,唯一能做的就是用自己喜欢的方式,过好生命中的每一天。
2.
步入人生的后半程,要学会善待自己,既不轻易动怒,也无需刻意取悦他人,更不要用别人的过错惩罚自己。
3.
让我们淡然微笑,温柔去爱,稳健前行,看淡人生的得失,珍惜眼前的所有,不负这匆匆流逝的时光。
4.
人生路上,最重要的是学会与自己和解。两分看透、三分释然,五分爱自己。
你说你是限量版,我告诉你,我可是绝版!
有人说我好,有人说我坏,我只能告诉你,好坏我都会,就看你配不配。
你长发及腰只为嫁人,我长发及腰是要变女神。
没有优点,一身坏毛病,但也轮不到你来指指点点。
生活中最好的事,是每天都能遇见更好的自己。
做个快乐的自己,才是对这世界最好的回馈。
与其担心未来,不如专注眼前的每一刻。
喜欢现在的生活,有趣有盼,努力上进。
爱自己最好的方式,就是让自己优秀起来。
你聪明会有人说你心机重,你努力会有人说你运气好,你天生乐观有人会说你虚情假意,人一生遇见太多人,只要内心澄明,就永远不用讨好一个不懂你的人。
","description":"能否分享一些让你豁然开朗的句子? 潇润的回答\\n\\n\\n你说你是限量版,我告诉你,我可是绝版!\\n\\n有人说我好,有人说我坏,我只能告诉你,好坏我都会,就看你配不配。\\n\\n你长发及腰只为嫁人,我长发及腰是要变女神。\\n\\n没有优点,一身坏毛病,但也轮不到你来指指点点。\\n\\n生活中最好的事,是每天都能遇见更好的自己。\\n\\n做个快乐的自己,才是对这世界最好的回馈。\\n\\n与其担心未来,不如专注眼前的每一刻。\\n\\n喜欢现在的生活,有趣有盼,努力上进。\\n\\n爱自己最好的方式,就是让自己优秀起来。\\n\\n你聪明会有人说你心机重,你努力会有人说你运气好,你天生乐观有人会说你虚情假意,人一生遇见太多人,只要内心澄明…","guid":"https://www.zhihu.com/question/580956751/answer/116260270091","author":"潇润","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-04T10:55:31.513Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"build your own BPNN from scratch in R","url":"https://zhuanlan.zhihu.com/p/27815307462","content":"How to build your own Neural Network from scratch in R Building A Neural Net from Scratch Using R - Part 1 Building A Neural Net from Scratch Using R - Part 2","description":"How to build your own Neural Network from scratch in R Building A Neural Net from Scratch Using R - Part 1 Building A Neural Net from Scratch Using R - Part 2","guid":"https://zhuanlan.zhihu.com/p/27815307462","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-04T03:27:23.647Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何零基础自学R语言?-南大小程聊科研的回答:上一篇中我拆解了向量、矩阵和数组: 化虚为实——用日常逻辑拆解R语言核心概念(三) 。今天,我将继续拆解R语言...","url":"https://www.zhihu.com/question/279781791/answer/115855685486","content":"如何零基础自学R语言?上一篇中我拆解了向量、矩阵和数组:化虚为实——用日常逻辑拆解R语言核心概念(三)。今天,我将继续拆解R语言的其余基本数据结构。话不多说,直接开始。
四、花名册:数据框的表格属性
数据框的本质是等长向量的集合,这种设计和现实中的表格数据完全一致:每一列可能都包含有不同的信息,但是同一列内部的信息属于同一个类型。试想个花名册:第一列字符型存储姓名,第二列数值型记录年龄,第三列逻辑型标记团员身份——这种混合数据类型的存储能力,是普通矩阵无法实现的。通过df$成绩可以快速提取特定列,而df[df$班级==\\"三班\\", ]则能筛选出特定子集。需要注意的是,数据框的每一列实质都是独立向量,强行插入图像等非向量数据时,虽然语法允许,但会破坏其结构一致性,导致后续建模或矩阵运算时出现意外错误。就像在纸质花名册上贴拍立得相片,整个本子会变得难以平整翻阅(影响运算效率)。
五、工具箱:列表的包容性
列表就像电工的多功能工具箱一样:第一层放着螺丝刀(向量),第二层塞着万用表(矩阵),侧袋还能藏一卷绝缘胶带(函数)。你可以用tools[[2]]直接掏出万用表,而不必担心其他工具散落——这种独立封装的特质,让列表在R中有大量的应用范围。更妙的是,某个工具箱里还能再套一个小铁盒(嵌套列表),打开五层后可能找到一枚生锈的螺母(原子类型数据)。然而,这种无限包容性的代价就是每次找工具都得记住精确位置(层级索引)。
六、红绿灯:因子的秩序性
路口的红绿灯和因子非常相似:只允许红/黄/绿三种状态(levels),试图添加\\"蓝灯\\"会被自动归为无效(NA)。交警可以把红灯编码为1、黄灯2、绿灯3(as.numeric(factor)),其本质和因子底层存储机制一致。这种强制分类的特性,让table(factor_data)统计频次时,即使某个颜色整月未亮起(零计数),依然会出现在统计表中——就像交通报告必须列出所有信号灯状态,不论是否实际触发。
结语
理解这些比喻的关键,在于抓住数据结构的特点。当你再遇到Error in [: incorrect number of dimensions报错时,不妨想想:是不是把本该放进中药柜第三层的陈皮,错放到了围棋盘的边角?数据结构的本质,就是为数据找到最合适的\\"容器\\"。
那么,今天在拆解了数据框、列表和因子之后,R语言的基本数据结构已经拆解完毕,我的《化虚为实》系列也将告一段落。但是这个系列并没有完结,后续会对for循环、向量化操作和并行操作进行解读,或者如果大家还有什么想要我解读的也可以私信告诉我。下期预告:
《追本溯源(一):解析火山图的深层本质-1》。
致读者:本篇文章为个人理解,用词不一定精准,但是对于理解肯定有所裨益。所以对文章内容有疑问,欢迎各位大佬评论区留言批评指正,同志们加油!!如果觉得有用的话,可以点赞转发哦。
最后,宣传自己一句,全网同名,分享生信及科研入门干货,欢迎大家关注!!!
","description":"如何零基础自学R语言? 南大小程聊科研的回答\\n\\n\\n上一篇中我拆解了向量、矩阵和数组:化虚为实——用日常逻辑拆解R语言核心概念(三)。今天,我将继续拆解R语言的其余基本数据结构。话不多说,直接开始。\\n\\n四、花名册:数据框的表格属性\\n\\n数据框的本质是等长向量的集合,这种设计和现实中的表格数据完全一致:每一列可能都包含有不同的信息,但是同一列内部的信息属于同一个类型。试想个花名册:第一列字符型存储姓名,第二列数值型记录年龄,第三列逻辑型标记团员身份——这种混合数据类型的存储能力,是普通矩阵无法实现的。通过df$成绩可以快速提取特定列,而df[df$班级==\\"三班\\",…","guid":"https://www.zhihu.com/question/279781791/answer/115855685486","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-04T03:10:01.580Z","media":[{"url":"https://picx.zhimg.com/50/v2-4404b0e1c6ba89708c799ef85b121f85.jpg","type":"photo","width":355,"height":237,"blurhash":"LCQTS@_N%M-;xubb%MWBM|of%Mfk"},{"url":"https://picx.zhimg.com/50/v2-4610d441b0eb5c2b60132883c3e42c0d.jpg","type":"photo","width":278,"height":185,"blurhash":"LoM%[%D%~q-;xu%g%gRj?b%MM{kC"},{"url":"https://picx.zhimg.com/50/v2-ddf94c808d5f1889a07046ff291fe431.jpg","type":"photo","width":319,"height":188,"blurhash":"LqIN:Z%Nt7xusoRjM{Ri_Nt6V@ni"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"化虚为实——用日常逻辑拆解R语言核心概念(四)","url":"https://zhuanlan.zhihu.com/p/27812959409","content":"上一篇中我拆解了向量、矩阵和数组: 化虚为实——用日常逻辑拆解R语言核心概念(三) 。今天,我将继续拆解R语言的其余基本数据结构。话不多说,直接开始。 四、花名册:数据框的表格属性 数据框的本质是等长向量的集合,这种设计和现实中的表格数据完全一致:每一列可能都包含有不同的信息,但是同一列内部的信息属于同一个类型。试想个花名册:第一列字符型存储姓名,第二列数值型记录年龄,第三列逻辑型标记团员身份——这种…","description":"上一篇中我拆解了向量、矩阵和数组: 化虚为实——用日常逻辑拆解R语言核心概念(三) 。今天,我将继续拆解R语言的其余基本数据结构。话不多说,直接开始。 四、花名册:数据框的表格属性 数据框的本质是等长向量的集合,这种设计和现实中的表格数据完全一致:每一列可能都包含有不同的信息,但是同一列内部的信息属于同一个类型。试想个花名册:第一列字符型存储姓名,第二列数值型记录年龄,第三列逻辑型标记团员身份——这种…","guid":"https://zhuanlan.zhihu.com/p/27812959409","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-04T03:10:00.928Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"秒变数据达人!轻松利用R制作统计描述表格(含R语言实战演练)","url":"https://zhuanlan.zhihu.com/p/27773548891","content":"在R中制作统计描述表格,我们一般会用summary()、describe()(来自psych包)或dplyr包中的summary()和mutate()等函数来实现。下面小编给大家展示几种常见方法来生成统计描述表格: 1.summary()函数summary()函数是R的基础函数之一,可以快速的帮助我们生成数据集的基本统计描述 # 示例数据集 data(iris) # 使用 summary() 查看统计描述 summary(iris) 输出包括:最小值1st四分位数(Q1)中位数(Q2)均值3rd四分位数(Q3)最大值 …","description":"在R中制作统计描述表格,我们一般会用summary()、describe()(来自psych包)或dplyr包中的summary()和mutate()等函数来实现。下面小编给大家展示几种常见方法来生成统计描述表格: 1.summary()函数summary()函数是R的基础函数之一,可以快速的帮助我们生成数据集的基本统计描述 # 示例数据集 data(iris) # 使用 summary() 查看统计描述 summary(iris) 输出包括:最小值1st四分位数(Q1)中位数(Q2)均值3rd四分位数(Q3)最大值…","guid":"https://zhuanlan.zhihu.com/p/27773548891","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-04T01:26:28.918Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ggplot2 中如何添加中文字体?-被炸熟的虾的回答:上一节记录了自动翻译 ggplot2图片坐标轴的方法:科研工具箱 | ggplot2无缝衔接的翻译包-fanyi包 [图片] 但在R...","url":"https://www.zhihu.com/question/31566815/answer/115684803709","content":"ggplot2 中如何添加中文字体?上一节记录了自动翻译ggplot2
图片坐标轴的方法:科研工具箱 | ggplot2无缝衔接的翻译包-fanyi包
但在R语言中导出包含中文的图片时,需要确保正确设置中文字体支持,否则中文可能会显示为乱码或方块。
今天记录一种解决方法——showtext
包。showtext包允许用户在R语言中轻松导入外部字体,包括那些不是操作系统自带的字体。可以帮助开发者在各种图形设备(如PDF、PNG等)中渲染文字,支持矢量和位图字体,提高了图表在不同平台和介质上的兼容性和可读性。
#install.packages(\\"showtext\\")\\nlibrary(showtext)
查看系统中已安装的字体:
font_families()\\n#[1] \\"sans\\" \\"serif\\" \\"mono\\" \\"wqy-microhei\\"\\nwindowsFonts() \\n#$serif\\n#[1] \\"TT Times New Roman\\"\\n#$sans\\n#[1] \\"TT Arial\\"\\n#$mono\\n#[1] \\"TT Courier New\\"
serif
代表Times New Roman字体,sans
代表Arial字体,mono
代表Courier New字体。这三种字体在基础绘图系统和ggplot2
系统中均可使用,例如:
library(ggplot2)\\np1 <- ggplot(data = mtcars, aes(x = wt, y = mpg)) +\\n geom_point(size = 6,alpha = 0.5) +\\n geom_text(aes(3,15), size = 12, color = \\"#93cc82\\",\\n label = \\"Times New Roman\\",\\n family = \\"serif\\") +\\n geom_text(aes(3.5,22.5), size = 12, color = \\"#4d97cd\\",\\n label = \\"Arial\\",\\n family = \\"sans\\") + \\n geom_text(aes(4,30), size = 12, color = \\"#ea9c9d\\",\\n label = \\"Courier New\\",\\n family = \\"mono\\") + \\n labs(title = \\"English Title Example\\") +\\n theme_bw(base_size = 22)
这些字体都不是我们所需要的,我么检查一下电脑安装了哪些字体:
head(font_files())\\n# path file family face version ps_name\\n#1 C:/Windows/Fonts AGENCYB.TTF Agency FB Bold Version 1.01 AgencyFB-Bold\\n#2 C:/Windows/Fonts AGENCYR.TTF Agency FB Regular Version 1.01 AgencyFB-Reg\\n#3 C:/Windows/Fonts ALGER.TTF Algerian Regular Version 1.57 Algerian\\n#4 C:/Windows/Fonts ANTQUAB.TTF Book Antiqua Bold Version 2.35 BookAntiqua-Bold\\n#5 C:/Windows/Fonts ANTQUABI.TTF Book Antiqua Bold Italic Version 2.35 BookAntiqua-BoldItalic\\n#6 C:/Windows/Fonts ANTQUAI.TTF Book Antiqua Italic Version 2.35 BookAntiqua-Italic
family
和font
的含义与绘图系统中的同名参数类似,而file
为该字体在电脑中对应的文件名称。对于Windows系统而言,字体安装的路径一般为C:/Windows/Fonts
:
可以看出,有些字体不同字型对应的文件名称是一样的,而有些则不一样。该数据框中没有中文字符,因为中文字体文件也是以英文形式命名的。如在C:/Windows/Fonts
中找到“宋体 常规”,右键单击属性,如下图所示,其文件名称为simsun.ttc
:
这时我们可以借助windowsFont()
和windowsFonts()
两个函数导入需要的字体。windowsFont()
函数用于创建一个字体映射对象,windowsFonts()
函数用于创建多个字体映射对象,并将它们存储在一个列表中。这个列表可以用于在绘图时指定字体。
windowsFonts(KT = windowsFont(\\"楷体\\"),\\n ST = windowsFont(\\"宋体\\"),\\n HT = windowsFont(\\"黑体\\"))\\n\\nwindowsFonts()\\n#$serif\\n#[1] \\"TT Times New Roman\\"\\n#$sans\\n#[1] \\"TT Arial\\"\\n#$mono\\n#[1] \\"TT Courier New\\"\\n#$KT\\n#[1] \\"楷体\\"\\n#$ST\\n#[1] \\"宋体\\"\\n#$HT\\n#[1] \\"黑体\\"\\np2 <- ggplot(data = mtcars, aes(x = wt, y = mpg)) +\\n geom_point(size = 6,alpha = 0.5) +\\n geom_text(aes(2.5,15), size = 25, color = \\"#93cc82\\",\\n label = \\"楷体\\",\\n family = \\"KT\\", \\n fontface = \\"bold\\") + #加粗\\n geom_text(aes(3.5,22.5), size = 25, color = \\"#4d97cd\\",\\n label = \\"宋体\\",\\n family = \\"ST\\", \\n fontface = \\"italic\\") + #斜体\\n geom_text(aes(4.5,30), size = 25, color = \\"#ea9c9d\\",\\n label = \\"黑体\\",\\n family = \\"HT\\", \\n fontface = \\"bold.italic\\") + #加粗且斜体\\n labs(title = \\"中文标题示例\\") +\\n theme_bw(base_size = 18)
如果系统中没有需要的字体,你将与以下函数打交道:
font_install
函数用于将指定的字体安装到showtextdb
包的字体目录中:font_install(source_han_serif())
很多时候都无法直接下载。每次升级或重新安装showtextdb包时,这些字体可能会被移除。
font_add
用于添加本地字体文件:font_add(\\"myfont\\", \\"path/to/your/font.ttf\\")\\n\\nfont_add(\\"simhei\\", \\"SimHei.ttf\\") # 指定字体文件路径\\n# 或直接使用系统字体名称(如Windows)\\nfont_add(\\"simhei\\", regular = \\"simhei.ttf\\") # 根据系统调整名称
font_add_google
函数用于从Google Fonts(https://fonts.google.com/)下载字体:font_add_google(\\"Playfair Display\\", ## name of Google font\\n \\"Playfair\\") ## name that will be used in R\\nfont_add_google(\\"Bangers\\", \\"Bangers\\")
这里我只是想解决中文输出就不详细记录这一部分了
需要注意的是,我们在使用showtext 字体前,需要提前声明使用showtext
工具包功能的绘图语句范围,涉及的函数主要有showtext_auto()
、showtext_begin()
、showtext_end():
showtext_auto()
函数用于自动启用或禁用showtext
包的功能。当启用后,所有后续的图形设备都会自动使用showtext
来渲染文本。showtext_begin()
函数通常在绘图代码之前调用,仅对当前图形设备启用showtext
的文本渲染功能。showtext_end()
函数用于关闭当前图形设备中的showtext
文本渲染功能。通常在绘图代码之后调用。# 加载showtext包\\nlibrary(showtext)\\n# 全局启用showtext\\nshowtext_auto(enable = TRUE)\\n# 绘图\\nplot(1, main = \\"全局启用showtext\\")\\n\\n# 局部启用showtext\\nshowtext_begin()\\nplot(1, main = \\"局部启用showtext\\")\\nshowtext_end()
因此如果想要输出前文的示例结果可以:
library(ggplot2)\\nlibrary(showtext)\\nwindowsFonts(KT = windowsFont(\\"楷体\\"),\\n ST = windowsFont(\\"宋体\\"),\\n HT = windowsFont(\\"黑体\\"))\\np2 <- ggplot(data = mtcars, aes(x = wt, y = mpg)) +\\n geom_point(size = 6,alpha = 0.5) +\\n geom_text(aes(2.5,15), size = 25, color = \\"#93cc82\\",\\n label = \\"楷体\\",\\n family = \\"KT\\") +\\n geom_text(aes(3.5,22.5), size = 25, color = \\"#4d97cd\\",\\n label = \\"宋体\\",\\n family = \\"ST\\") +\\n geom_text(aes(4.5,30), size = 25, color = \\"#ea9c9d\\",\\n label = \\"黑体\\",\\n family = \\"HT\\") +\\n labs(title = \\"中文标题示例\\") +\\n theme_bw(base_size = 20)\\n\\nshowtext_auto()\\npdf(\\"p2.pdf\\",width = 6,height = 6)\\np1\\np2\\ndev.off()
注意:showtext渲染中文通过将文本转换为有颜色填充的多边形轮廓,就是字成了图,不是原来的字了。因此后续PDF修图可能有点麻烦。
1、猪猪的乌托邦:R Plot添加中文及其他字体【showtext】
2、北野茶缸子:83-R可视化16-用showtext让R绘图认得中文及花里胡哨的字体
3、R语言学堂:showtext | R语言绘图字体设置——针对Windows系统
windows下需要用r.exe
实现启动R
如果你觉得不够优雅,可以考虑安装
GitHub - lukesampson/pshazz: Give your powershell some pizazz.这样你就可以优雅地直接用`r`来进行访问了
","description":"R语言包4.4.3? 任哲的回答\\n\\n\\nwindows下需要用r.exe 实现启动R\\n\\n如果你觉得不够优雅,可以考虑安装\\n\\nGitHub - lukesampson/pshazz: Give your powershell some pizazz.\\n\\n这样你就可以优雅地直接用`r`来进行访问了","guid":"https://www.zhihu.com/question/13931518167/answer/115248310817","author":"任哲","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T08:35:25.557Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Tidyverse数据清理:Tidyr包","url":"https://zhuanlan.zhihu.com/p/27433187747","content":"1. 整洁数据的定义 [图片] 2. Tidyr包中的函数2.1 数据集转置 [图片] pivot_longer()pivot_longer(data,cols,...,cols_vary = \\"fastest\\", names_to = \\"name\\",names_prefix = NULL,names_sep = NULL,names_pattern = NULL, names_ptypes = NULL,names_transform = NULL,names_repair = \\"check_unique\\", values_to = \\"value\\",values_drop_na = FALSE,values_ptypes = NULL,values_transform = NULL) # 示例数据 data <- tibble(id = 1,a_x = 1,a_y …","description":"1. 整洁数据的定义 [图片] 2. Tidyr包中的函数2.1 数据集转置 [图片] pivot_longer()pivot_longer(data,cols,...,cols_vary = \\"fastest\\", names_to = \\"name\\",names_prefix = NULL,names_sep = NULL,names_pattern = NULL, names_ptypes = NULL,names_transform = NULL,names_repair = \\"check_unique\\", values_to = \\"value…","guid":"https://zhuanlan.zhihu.com/p/27433187747","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T07:29:54.931Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么你在使用R语言?-南大小程聊科研的回答:上一篇中我拆解了Project和Environment: 化虚为实——用日常逻辑拆解R语言核心概念(二) 。今天,我将继续拆解R...","url":"https://www.zhihu.com/question/350488840/answer/115163328953","content":"为什么你在使用R语言?上一篇中我拆解了Project和Environment:化虚为实——用日常逻辑拆解R语言核心概念(二)。今天,我将继续拆解R语言的基本数据结构。
R语言具有以下6种基本的数据结构:向量、矩阵、数组、数据框、列表和因子。对于初学者来说,有时候确实很难去分辨这些结构,并且也记不住每种数据结构自有的特点。那么,我将用生活中的物品加深对于它们的理解。
一、药盒:向量的纯粹性
为了不忘记每天要吃什么药,我们可能会提前把药片数好放进药盒中。值得注意的是,我们不能把棉签或者创可贴硬塞进去,它们应该放在棉签筒或者创可贴的盒子里。我们可以根据今天是第几天准确的取出要吃的药物。此外,如果,药盒上面写着星期几的话,我们也可以根据星期准确的取出对应的药片。当然,每天的药物放在哪里是严格对应的,我们不能因为星期三的格子是空的而把星期四的药吃掉。
向量也是同一个道理。一个向量内部只能储存同一种数据类型。当我们要取出向量中的第三个元素时,使用Vector[3]就可以精准地取出这个元素。正如我前文中提到的,药盒中可能有一个空格子,向量中也有可能存在缺失值(NA)。NA依然会占据一个位置,不会因为缺失而导致后面的元素向前递补填充。我们也可以为向量的每个元素命名,提取元素时,不仅可以使用元素位置,也可以使用元素的名称,就像根据星期几的标签来取出药片一样。
二、棋盘:矩阵的单纯性
作为中国传统四艺之一,我们或多或少都会对围棋有一些印象。
不好意思放错图了,是下面这个:
围棋盘上的361个交叉点,每个位置只能放置黑子、白子(同类型数据)或者空着(缺失值)。但是我们不能在天元处放一块饼干。就像matrix(1:6, nrow=2)中混入字符时,所有数字都会被强制转换成字符串。
这种严格的二维结构,让matrix[2, ]提取第二行棋子时,得到的依然是规整的队列(保持维度)。但如果我们硬要拆掉第三列,就像把棋盘锯开,拿走一部分,把剩下部分重新拼在一起一样,剩下的部分仍然会维持矩形。和向量类似,我们可以使用二维坐标P16明确右上的星位到底是黑子还是白字,当然,也有可能那里什么都没放(缺失值)。
三、中药柜:数组的多维性
前面已经讲了向量和矩阵,分别属于一维和二维,那么数组其实可以看作矩阵在多维上的扩展。就和中药柜一样,每个小抽屉用\\"行-列-层\\"三维坐标定位。例如array[3,5,2]就对应第三排第五列第二层的当归。当药剂师抓取array[1, , ]时,就像抽出整个第一排所有药材,而dim(array)可以让我们知道药柜到底有几排几列几层。
什么?你说数组只能局限在3维吗?当然不是,我们可以打造第二个药柜,第三个药柜,这时我们就需要再额外指定药材在第几个药柜,这就相当于把数组扩展到了四维。同样的原理,几个药柜可以放进一个库房,几个库房可以放进一个医院,几个医院可以放进一个区域,几个区域可以。。。无限套娃。。。。。。但是,只要我们能准确的说出药材的坐标,我们仍然可以精准的取到药材。
到此为止,我已经拆解完了向量、矩阵和数组。本来想着一次性把R的基本数据结构讲完,结果因为篇幅有限,我将在下一篇中对数据框、列表和因子进行解读。
致读者:本篇文章为个人理解,用词不一定精准,但是对于理解肯定有所裨益。所以对文章内容有疑问,欢迎各位大佬评论区留言批评指正,同志们加油!!如果觉得有用的话,可以点赞转发哦。
最后,宣传自己一句,全网同名,分享生信及科研入门干货,欢迎大家关注!!!
","description":"为什么你在使用R语言? 南大小程聊科研的回答\\n\\n\\n上一篇中我拆解了Project和Environment:化虚为实——用日常逻辑拆解R语言核心概念(二)。今天,我将继续拆解R语言的基本数据结构。\\n\\nR语言具有以下6种基本的数据结构:向量、矩阵、数组、数据框、列表和因子。对于初学者来说,有时候确实很难去分辨这些结构,并且也记不住每种数据结构自有的特点。那么,我将用生活中的物品加深对于它们的理解。\\n\\n一、药盒:向量的纯粹性\\n\\n为了不忘记每天要吃什么药,我们可能会提前把药片数好放进药盒中。值得注意的是,我们不能把棉签或者创可贴硬塞进去…","guid":"https://www.zhihu.com/question/350488840/answer/115163328953","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T07:08:15.658Z","media":[{"url":"https://pic1.zhimg.com/v2-bc4f3d48f02b6e5edfa8da9f5b7476b1.jpg","type":"photo","width":750,"height":750,"blurhash":"LVFiY|W-4oW=Rpt7W,M_4Uaixon#"},{"url":"https://pic1.zhimg.com/50/v2-8a59573cb398c5d39ed97ebe2fcea173.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/50/v2-b40ec90dacae041ed8ba1395e0f5b013.jpg","type":"photo","width":285,"height":180,"blurhash":"LoQI^zt6Wbxa%MtPobayt:WCbcog"},{"url":"https://pica.zhimg.com/v2-64454d1351f4625fe7db9cf2a3995ce4.jpg","type":"photo","width":612,"height":446,"blurhash":"LXGH-mxuM|%M~pxuRkxu.8tRRkxu"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"化虚为实——用日常逻辑拆解R语言核心概念(三)","url":"https://zhuanlan.zhihu.com/p/27619989540","content":"上一篇中我拆解了Project和Environment: 化虚为实——用日常逻辑拆解R语言核心概念(二) 。今天,我将继续拆解R语言的基本数据结构。 R语言具有以下6种基本的数据结构:向量、矩阵、数组、数据框、列表和因子。对于初学者来说,有时候确实很难去分辨这些结构,并且也记不住每种数据结构自有的特点。那么,我将用生活中的物品加深对于它们的理解。 一、药盒:向量的纯粹性 为了不忘记每天要吃什么药,我们可能会提前把药片数好放…","description":"上一篇中我拆解了Project和Environment: 化虚为实——用日常逻辑拆解R语言核心概念(二) 。今天,我将继续拆解R语言的基本数据结构。 R语言具有以下6种基本的数据结构:向量、矩阵、数组、数据框、列表和因子。对于初学者来说,有时候确实很难去分辨这些结构,并且也记不住每种数据结构自有的特点。那么,我将用生活中的物品加深对于它们的理解。 一、药盒:向量的纯粹性 为了不忘记每天要吃什么药,我们可能会提前把药片数好放…","guid":"https://zhuanlan.zhihu.com/p/27619989540","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T07:08:14.343Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"使用ggtree绘制系统发育树","url":"https://zhuanlan.zhihu.com/p/27578493171","content":"一、基本概念:nwk格式文件nwk格式是一种存储系统发育树的格式,更具体的信息可以参考 https://evolution.genetics.washington.edu/phylip/newicktree.html 。在这一类型的文件中,系统发育树的节点和分支由圆括号的层次关系所表示。一颗系统发育树的表达式以分号结尾,用圆括号和逗号标记节点和分支。节点名称可以为空,也可以是一串可打印字符,但是不能包含空格、逗号、分号、圆括号和方括号。 一种拓展的表示方法是在节点名称后加分支长度,二者以冒号隔开。例如 (B:6.0,(A…","description":"一、基本概念:nwk格式文件nwk格式是一种存储系统发育树的格式,更具体的信息可以参考 https://evolution.genetics.washington.edu/phylip/newicktree.html 。在这一类型的文件中,系统发育树的节点和分支由圆括号的层次关系所表示。一颗系统发育树的表达式以分号结尾,用圆括号和逗号标记节点和分支。节点名称可以为空,也可以是一串可打印字符,但是不能包含空格、逗号、分号、圆括号和方括号。 一种拓展的表示方法是在节点名称后加分支长度,二者以冒号隔开。例如 (B:6.0,(A…","guid":"https://zhuanlan.zhihu.com/p/27578493171","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T04:22:02.866Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R-mlr3新书节选】神经网络案例:预测二手车价格","url":"https://zhuanlan.zhihu.com/p/27189077233","content":"节选自我的 R 语言新书 《R机器学习:基于mlr3verse》第16章 (浅层)神经网络(初稿) mlr3verse 实现:归一化管道+浅层神经网络+目标变换+调参。加载包: library(tidyverse) library(mlr3verse)2 神经网络案例:预测二手车价格二手车价格预测,数据包含1435个观测,8个变量,其中 Price为目标变量,其余为特征,包括Age(按月车龄)、KM(行驶里程)、Weight(车重)、HP(马力)、CC(发动机尺寸)、MetColor(是否金属色)…","description":"节选自我的 R 语言新书 《R机器学习:基于mlr3verse》第16章 (浅层)神经网络(初稿) mlr3verse 实现:归一化管道+浅层神经网络+目标变换+调参。加载包: library(tidyverse) library(mlr3verse)2 神经网络案例:预测二手车价格二手车价格预测,数据包含1435个观测,8个变量,其中 Price为目标变量,其余为特征,包括Age(按月车龄)、KM(行驶里程)、Weight(车重)、HP(马力)、CC(发动机尺寸)、MetColor(是否金属色)…","guid":"https://zhuanlan.zhihu.com/p/27189077233","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T02:26:05.090Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求教:R语言跑随机森林模型,出现数据不匹配错误如何处理","url":"https://zhuanlan.zhihu.com/p/27526092605","content":"[图片] 上面已经有训练集了,想在测试集上进行验证","description":"[图片] 上面已经有训练集了,想在测试集上进行验证","guid":"https://zhuanlan.zhihu.com/p/27526092605","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T01:38:50.515Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"S3 in R","url":"https://zhuanlan.zhihu.com/p/27517447048","content":"Contructor for R object in S3: # Constructor for a \\"student\\" which is a specific type of \\"person\\" student <- function(name, age, major) { obj <- list(name = name, age = age, major = major) # Inherit from both \\"student\\" and \\"person\\" class(obj) <- c(\\"student\\", \\"person\\") obj } # Define a print method for \\"person\\" print.person <- function(x, ...) { cat(\\"Person:\\", x$name, \\"is\\", x$age, \\"years old. \\") …","description":"Contructor for R object in S3: # Constructor for a \\"student\\" which is a specific type of \\"person\\" student <- function(name, age, major) { obj <- list(name = name, age = age, major = major) # Inherit from both \\"student\\" and \\"person\\" class(obj) <- c(\\"student\\", \\"person\\") obj…","guid":"https://zhuanlan.zhihu.com/p/27517447048","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-03T01:08:51.775Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 语言能否实时运行绘图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系...","url":"https://www.zhihu.com/question/27520506/answer/114812399368","content":"R 语言能否实时运行绘图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)\\nlibrary(ggridges)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:5]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x = price, y = cut, fill = cut)) +\\n geom_density_ridges() +\\n labs(x=\\"Value\\", y=\\"Density\\") +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(), legend.position = \\"none\\") +\\n scale_fill_manual(values = rev(colors))\\np
最后我们保存绘制的图形:
ggsave(\\"save/density-ridgeline.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。
sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
单纯只是顾不上吧。且不说license的问题,没记错的话R在Windows下至今还要依赖MinGW,想换个编译器或标准库都做不到,属于“能跑就谢天谢地了”,哪顾得上其他……并不能像Python那样支持那么多平台……
或者你如果确定自己弄清楚了所有相关的问题(这东西是二进制发布还是源码发布,你要怎么打包,MKL的license是否允许),你可以去提个PR。
","description":"为什么windows的R安装包不用mkl编译? 圭临的回答\\n\\n\\n单纯只是顾不上吧。且不说license的问题,没记错的话R在Windows下至今还要依赖MinGW,想换个编译器或标准库都做不到,属于“能跑就谢天谢地了”,哪顾得上其他……并不能像Python那样支持那么多平台……\\n\\n或者你如果确定自己弄清楚了所有相关的问题(这东西是二进制发布还是源码发布,你要怎么打包,MKL的license是否允许),你可以去提个PR。","guid":"https://www.zhihu.com/question/13638562853/answer/114586641693","author":"圭临","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-02T15:35:40.282Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Rstudio 点击 source 之后显示代码但是不运行出结果,为什么?-为了好找而改名的回答:1","url":"https://www.zhihu.com/question/596495599/answer/114237323673","content":"Rstudio 点击 source 之后显示代码但是不运行出结果,为什么?1
","description":"Rstudio 点击 source 之后显示代码但是不运行出结果,为什么? 为了好找而改名的回答\\n\\n\\n1","guid":"https://www.zhihu.com/question/596495599/answer/114237323673","author":"为了好找而改名","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-02T04:41:52.363Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言ggtree给环形进化树指定分枝添加背景色","url":"https://zhuanlan.zhihu.com/p/27392662358","content":"之前给分枝添加背景色是直接使用 geom_highligh() 函数 比如 tree <- rtree(60) p <- ggtree(tree) p + geom_hilight(node=62) + geom_hilight(node=88, fill=\\"red\\") [图片] 我这里的ggtree的版本是 packageDescription(\\"ggtree\\") Version: 3.13.0.001 我在新电脑上用用命令 BiocManager::install(\\"ggtree\\") 不知道为啥安装的是3.6.2版本的ggtree,这个是为啥还没有搞明白 如果是这个版本的ggtree,用geom_hilight()添加背景,只会在指…","description":"之前给分枝添加背景色是直接使用 geom_highligh() 函数 比如 tree <- rtree(60) p <- ggtree(tree) p + geom_hilight(node=62) + geom_hilight(node=88, fill=\\"red\\") [图片] 我这里的ggtree的版本是 packageDescription(\\"ggtree\\") Version: 3.13.0.001 我在新电脑上用用命令 BiocManager::install(\\"ggtree\\") 不知道为啥安装的是3.6.2版本的ggtree…","guid":"https://zhuanlan.zhihu.com/p/27392662358","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-02T04:25:37.855Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"化虚为实——用日常逻辑拆解R语言核心概念(二)","url":"https://zhuanlan.zhihu.com/p/27377304085","content":"上一篇中我拆解了R、R studio和R包: 化虚为实——用日常逻辑拆解R语言核心概念(一 )。今天,我将对Project和Environment进行拆解。 刚接触R语言的新手,常常会陷入这样一种境地:脚本到处都是,变量一团乱麻。这就像出差的时候随便把东西塞进行李箱,到了酒店发现东西没带全。其实,只需要两个工具就能让一切井然有序—— Project(项目)是行李箱,而Environment(环境)是房间。 一、行李箱:把混乱装进行李箱隔层 如果我们…","description":"上一篇中我拆解了R、R studio和R包: 化虚为实——用日常逻辑拆解R语言核心概念(一 )。今天,我将对Project和Environment进行拆解。 刚接触R语言的新手,常常会陷入这样一种境地:脚本到处都是,变量一团乱麻。这就像出差的时候随便把东西塞进行李箱,到了酒店发现东西没带全。其实,只需要两个工具就能让一切井然有序—— Project(项目)是行李箱,而Environment(环境)是房间。 一、行李箱:把混乱装进行李箱隔层 如果我们…","guid":"https://zhuanlan.zhihu.com/p/27377304085","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-02T02:47:22.235Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"中文文本挖掘R语言和Python哪个好?-被炸熟的虾的回答:最近需要给中文文章准备一些材料,通路热图逐条翻译太痛苦了,赶快学习一下Y叔的科研神器- fanyi包。fany...","url":"https://www.zhihu.com/question/42932011/answer/114073150112","content":"中文文本挖掘R语言和Python哪个好?最近需要给中文文章准备一些材料,通路热图逐条翻译太痛苦了,赶快学习一下Y叔的科研神器-fanyi
包。fanyi
包通过整合百度、必应、有道、火山引擎、彩云、腾讯和ChatGLM等在线翻译服务,能够自动将结果翻译成需要的语言。
Reducing language barriers, promoting information absorption, and communication using fanyi. Chin Med J (Engl). 2024 Aug 20. PMID: 39039634.
install.packages(\\"fanyi\\")\\n## install.packages(\\"yulab.utils\\")\\nyulab.utils::install_zip_gh(\\"YuLab-SMU/fanyi\\")
你首先要注册并开通这些服务,拿到密匙这些信息,包里支持的每一个翻译器在GitHub上的README里都给出了指引:https://github.com/YuLab-SMU/fanyi。以百度翻译为例:
appid
and key
(密钥)appid
and key
with source = \\"baidu\\"
using set_translate_option()
baidu_translate()
注册完毕后就可以使用set_translate_source()函数来设置默认调用的翻译器,ID与密钥可以在个人页面找到。
library(fanyi)\\n## 设置百度翻译器\\nset_translate_option(appid = \'XXXXXXXX\', key = \'XXXXXXXX\', source = \'baidu\')
text <- \'我都不知道做人该怎么办,总之报纸写啥就信啥,电视演啥我就看啥。\'\\ntranslate(text, from = \'zh\', to = \'en\')\\n#[1] \\"I don\'t even know what to do as a person. Anyway, I believe whatever is written in the newspaper and watch whatever is shown on TV.\\"
每个翻译服务都也有对应的函数,如:百度的就是baidu_translate()
,必应的就是bing_translate()
,有道就是youdao_translate()
。因为是百度翻译,所以我们使用:
baidu_translate(\\"你好\\", from = \'zh\', to = \'en\')\\n#\\"hello\\"
其他语言翻译:
translate(text, from = \'zh\', to = \'th\')\\n#[1] \\"ผมไม่รู้ว่าการเป็นมนุษย์ควรทําอย่างไร สรุปแล้วหนังสือพิมพ์เขียนอะไรก็เชื่ออย่างนั้น ทีวีเล่นอะไรก็อ่านอย่างนั้น\\"\\n\\ntranslate(text, from = \'zh\', to = \'jp\')\\n#[1] \\"私は人間としてどうすればいいのか分からないが、とにかく新聞は何を書いても何を信じても、テレビは何を演じても私は何を見てもいい。\\"\\n\\ntranslate(text, from = \'zh\', to = \'fra\')\\n#[1] \\"Je ne sais pas quoi faire en tant que personne, je crois ce que les journaux écrivent, je regarde ce que la télévision fait.\\"
只需要一步就可以将功能ggplot
图的注释信息翻译为中文:
translate_ggplot(plot, axis = \\"xy\\", from = \\"en\\", to = \\"zh\\")
plot
:要进行翻译的 ggplot 对象。axis
:选择要翻译的坐标轴标签,可以是 \\"x\\"(x轴)、\\"y\\"(y轴)或 \\"xy\\"(x轴和y轴,默认值)。from
:源语言,即要翻译的语言,默认值为 \\"en\\"(英语)。to
:目标语言,即要翻译成的语言,默认值为 \\"zh\\"(中文)。library(DOSE)\\nlibrary(enrichplot)\\ndata(geneList)\\nde <- names(geneList)[1:200]\\nx <- enrichDO(de)\\np <- dotplot(x)\\np2 <- translate_ggplot(p, axis = \'y\')\\np3 <- translate_ggplot(p, axis = \'y\', to = \'kor\')\\np4 <- translate_ggplot(p, axis = \'y\', to = \'ara\')\\naplot::plot_list(English = p, Chinese = p2, \\n Korean = p3, Arabic = p4, ncol = 2)
直接抓取NCBI基因信息,批量翻译——
symbol <- c(\\"CCR7\\", \\"CD3E\\")\\ngene <- clusterProfiler::bitr(symbol, \\n fromType = \'SYMBOL\', \\n toType = \'ENTREZID\', \\n OrgDb = \'org.Hs.eg.db\')\\ngene\\n\\n## SYMBOL ENTREZID\\n## 1 CCR7 1236\\n## 2 CD3E 916
使用gene_summary
函数从 NCBI Gene 数据库中查询基因信息,包括基因名称、描述和摘要。
res <- gene_summary(gene$ENTREZID)\\nnames(res)\\n## [1] \\"uid\\" \\"name\\" \\"description\\" \\"summary\\"\\n\\nd <- data.frame(desc = res$description,\\n desc2 = translate(res$description))\\nd\\n# desc desc2\\n#1 C-C motif chemokine receptor 7 C-C基序趋化因子受体7\\n#2 CD3 epsilon subunit of T-cell receptor complex T细胞受体复合物CD3ε亚基\\n\\nres$summary[1]
translate(res$summary)
不要去同情任何人,包括你自己。
你看到只是别人的苦难,就觉得他好可怜,企图想去帮助人家,为什么?因为你不知不觉就觉得自己比别人高等,想要以高高在上的姿态去怜悯别人。
但也许你所同情的人在其他方面肯定有你所没有的闪光点。
看事情看人,都不要只看到表面或者只看到其中一个方面就妄下定论,疯狂自作主张。
只是这种简单的case看起来加速很多,d爆了。实际上mkl也只适合这些简单的矩阵乘法之类的类gpu并行计算任务。一旦额外在外层再并行个foreach之类的速度直接炸了。
","description":"为什么windows的R安装包不用mkl编译? 已注销56734534的回答\\n\\n\\n只是这种简单的case看起来加速很多,d爆了。实际上mkl也只适合这些简单的矩阵乘法之类的类gpu并行计算任务。一旦额外在外层再并行个foreach之类的速度直接炸了。","guid":"https://www.zhihu.com/question/13638562853/answer/113782022039","author":"已注销56734534","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T12:38:15.083Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Base R:基础语法","url":"https://zhuanlan.zhihu.com/p/27267891062","content":"1. 变量1.1 变量命名语言的有效的变量名称由字母,数字以及点号 .或下划线_组成,变量名称以字母或点开头,但是注意:如果以点开头,则点随后不能跟数字,如.var2 是合法的变量名,.2var 则是不正确的变量名。1.2 变量赋值R语言中,左箭头 <- ,右箭头->,和等号=均可用于变量赋值。# 左箭头赋值 a <- 3 #右箭头赋值 2 -> b # 等于号赋值 c = 1 #赋值符号联用 d <- \\"string\\" -> e2. 注释R 语言只支持单行注释,注释符号为井号 #…","description":"1. 变量1.1 变量命名语言的有效的变量名称由字母,数字以及点号 .或下划线_组成,变量名称以字母或点开头,但是注意:如果以点开头,则点随后不能跟数字,如.var2 是合法的变量名,.2var 则是不正确的变量名。1.2 变量赋值R语言中,左箭头 <- ,右箭头->,和等号=均可用于变量赋值。# 左箭头赋值 a <- 3 #右箭头赋值 2 -> b # 等于号赋值 c = 1 #赋值符号联用 d <- \\"string\\" -> e2. 注释R 语言只支持单行注释,注释符号为井号 #…","guid":"https://zhuanlan.zhihu.com/p/27267891062","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T11:18:06.313Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言箱线图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的...","url":"https://www.zhihu.com/question/44891604/answer/113702562701","content":"R语言箱线图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot在之前的 16-20 期文章中介绍了箱线图相关绘图,点击下方卡片跳转到对应文章:
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
你有没有发现啊,现在上班的人越来越“丧”了。以前的职场人是卷生卷死,都想着升职加薪当 boss,但现在越来越多的人开始摆烂了。
以前公司下班铃一响,大家都争分夺秒地想跑出办公室,生怕加班被老板看见。而现在呢?下班前 10 分钟就有人开始收拾东西,甚至有的领导为了彰显自己的威严,还会在下班时间点开会,大家只能无奈地坐在工位上硬撑着。
但真正让职场人开始摆烂的原因并不是因为怕累怕苦,而是觉得再努力也没有用。毕竟现在的社会环境就是如此,能力强的不一定会赢,但能力差的一定混不下去。
就像之前网上很火的一句话:以前我们只是和同事内卷,现在却是要和保安抢饭碗。这句话虽然有点夸张,但却说出了很多打工人的心声。
前段时间有个新闻,说是一个写字楼里的保安,他每天都会到各个公司的工位上去休息一会,因为他发现很多公司的人都不在工位上办公,反而是在家里办公。而他们作为保安,更是只要按时打卡,然后在小区里巡逻就可以了,根本不用担心会被开除或者裁员。
反观那些在工位上奋斗的年轻人,不仅要担心业绩完不成会被辞退,还要担心随时到来的裁员风暴。再加上这几年的经济下行,很多人不仅没有涨工资,甚至还一直在降薪,这也就导致了很多打工人开始摆烂了。
其实摆烂并不是什么贬义词,它更多的是一种自我调节的方式,是对现实的一种妥协。与其像无头苍蝇一样到处撞南墙,还不如先让自己喘口气,等调整好了状态再去面对生活中的种种困难。
当然,也不是让大家一直摆烂下去,该拼搏的时候还是要全力以赴的,你觉得呢?
","description":"为什么现在上班的人都开始摆烂了? 巴布论职场的回答\\n\\n\\n你有没有发现啊,现在上班的人越来越“丧”了。以前的职场人是卷生卷死,都想着升职加薪当 boss,但现在越来越多的人开始摆烂了。\\n\\n\\n\\n\\n\\n\\n\\n以前公司下班铃一响,大家都争分夺秒地想跑出办公室,生怕加班被老板看见。而现在呢?下班前 10 分钟就有人开始收拾东西,甚至有的领导为了彰显自己的威严,还会在下班时间点开会,大家只能无奈地坐在工位上硬撑着。\\n\\n但真正让职场人开始摆烂的原因并不是因为怕累怕苦,而是觉得再努力也没有用。毕竟现在的社会环境就是如此,能力强的不一定会赢,但能力差的一定混不下去。\\n\\n就像之前网上很火的一句话…","guid":"https://www.zhihu.com/question/613862113/answer/113642297607","author":"巴布论职场","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T08:54:08.335Z","media":[{"url":"https://pic1.zhimg.com/v2-95dd57551f20addc53e5a7106aa7c3be.jpg","type":"photo","width":1080,"height":1440,"blurhash":"LSGcfeIoD*M{%%M{xut74Tx[n#t7"},{"url":"https://picx.zhimg.com/v2-991a7f02cccdd3e9bc0692fa7c4779dd.jpg","type":"photo","width":1080,"height":1440,"blurhash":"LfK-L78_D+Rk_M9Zaex[S$t7s:t7"},{"url":"https://pic1.zhimg.com/v2-ecc3adb518438cad49c0ce7d2cc75bee.jpg","type":"photo","width":1080,"height":1440,"blurhash":"LoHfI}kDkCxu_4M|ofs:?bozfQWC"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么windows的R安装包不用mkl编译?-liguocat的回答:怕不是只支持Intel","url":"https://www.zhihu.com/question/13638562853/answer/113577295122","content":"为什么windows的R安装包不用mkl编译?怕不是只支持Intel
","description":"为什么windows的R安装包不用mkl编译? liguocat的回答\\n\\n\\n怕不是只支持Intel","guid":"https://www.zhihu.com/question/13638562853/answer/113577295122","author":"liguocat","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T07:18:27.835Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在 Ubuntu 20.04 中安装指定版本 R / RStudio","url":"https://zhuanlan.zhihu.com/p/27257384076","content":"安装必要环境sudo apt install -y \\\\ libcurl4-openssl-dev \\\\ libssl-dev \\\\ libxml2-dev \\\\ libfontconfig1-dev \\\\ libharfbuzz-dev \\\\ libfribidi-dev \\\\ libfreetype6-dev \\\\ libpng-dev \\\\ libtiff5-dev \\\\ libjpeg-dev \\\\ libpq-dev下载和安装 R安装最新版 Rref_link_1 [ The Comprehensive R Archive Network ]安装指定版本 Rref_link_2 [ Install R - Posit Docs ]ref_link_3 [ R 在 Linux 等操作系统上的特定版本安装-腾讯云开发者社…","description":"安装必要环境sudo apt install -y \\\\ libcurl4-openssl-dev \\\\ libssl-dev \\\\ libxml2-dev \\\\ libfontconfig1-dev \\\\ libharfbuzz-dev \\\\ libfribidi-dev \\\\ libfreetype6-dev \\\\ libpng-dev \\\\ libtiff5-dev \\\\ libjpeg-dev \\\\ libpq-dev下载和安装 R安装最新版 Rref_link_1 [ The Comprehensive R Archive Network ]安装指定版本 Rref…","guid":"https://zhuanlan.zhihu.com/p/27257384076","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T07:07:17.868Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"人工智能详解","url":"https://zhuanlan.zhihu.com/p/27240220517","content":"人工智能详解人工智能详解 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片]","description":"人工智能详解人工智能详解 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片]","guid":"https://zhuanlan.zhihu.com/p/27240220517","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T06:15:25.238Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"化虚为实——用日常逻辑拆解R语言核心概念(一)","url":"https://zhuanlan.zhihu.com/p/27212261396","content":"上一期我用英语类比了R的几个特点,没有看过的朋友可以移步上一期: 解构R语言底层逻辑:用语言学思维进行降维打击 - 知乎 接下来我要换一种方法,用日常生活中常见的事物来拆解R语言的核心概念。 一、R和R studio 在数据科学领域,R语言与RStudio的关系常被误解为简单的“编程语言与编辑器”。但在我看来,他们之间的关系更像是笔芯和一个可以容纳多个笔芯的笔壳的关系。 [图片] 由于R属于编程语言且免费、开源,在灵活性和社区等方面…","description":"上一期我用英语类比了R的几个特点,没有看过的朋友可以移步上一期: 解构R语言底层逻辑:用语言学思维进行降维打击 - 知乎 接下来我要换一种方法,用日常生活中常见的事物来拆解R语言的核心概念。 一、R和R studio 在数据科学领域,R语言与RStudio的关系常被误解为简单的“编程语言与编辑器”。但在我看来,他们之间的关系更像是笔芯和一个可以容纳多个笔芯的笔壳的关系。 [图片] 由于R属于编程语言且免费、开源,在灵活性和社区等方面…","guid":"https://zhuanlan.zhihu.com/p/27212261396","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T02:17:34.471Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"使用R语言绘制一张夜光地图","url":"https://zhuanlan.zhihu.com/p/27198486363","content":"基本数据准备在夜光绘图中,一般至少有两个图层:矢量图层和栅格图层。 矢量图层,由点、线、多边形等简单几何图形组成,通常用于绘制边界(行政边界、国界、道路等)。栅格图层,由许多很小的单元格组成,通常用于在边界中“填充”颜色。矢量数据的常见格式是 .geojson,栅格数据的常见格式是 .tif。在R语言中,处理矢量和栅格数据的常用包分别是 sf 和 terra 。矢量和栅格数据可以通过天地图、NASA等来源获得,最常用的夜光栅…","description":"基本数据准备在夜光绘图中,一般至少有两个图层:矢量图层和栅格图层。 矢量图层,由点、线、多边形等简单几何图形组成,通常用于绘制边界(行政边界、国界、道路等)。栅格图层,由许多很小的单元格组成,通常用于在边界中“填充”颜色。矢量数据的常见格式是 .geojson,栅格数据的常见格式是 .tif。在R语言中,处理矢量和栅格数据的常用包分别是 sf 和 terra 。矢量和栅格数据可以通过天地图、NASA等来源获得,最常用的夜光栅…","guid":"https://zhuanlan.zhihu.com/p/27198486363","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-03-01T00:33:19.803Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学 R 语言?-Docter.Sun的回答:学点基础就能上手了,不用学太深懂点参数就行,其他的话有前人写的模板代码,有chatgpt可以帮忙调代码,很...","url":"https://www.zhihu.com/question/4139067549/answer/113075907112","content":"临床大一是不是应该自学 R 语言?学点基础就能上手了,不用学太深懂点参数就行,其他的话有前人写的模板代码,有chatgpt可以帮忙调代码,很方便。
","description":"临床大一是不是应该自学 R 语言? Docter.Sun的回答\\n\\n\\n学点基础就能上手了,不用学太深懂点参数就行,其他的话有前人写的模板代码,有chatgpt可以帮忙调代码,很方便。","guid":"https://www.zhihu.com/question/4139067549/answer/113075907112","author":"Docter.Sun","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T14:08:23.556Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ComplexHeatmap包画热图时关于数据中的NA值的探索","url":"https://zhuanlan.zhihu.com/p/27151120023","content":"先说结论: ComplexHeatmap包可以通过 cluster_rows = T 和 luster_columns = T 开启对数据的聚类,但前提是至少有一行或一列 是完全不含NA值的。验证:构造测试数据:(做了三个极端一点的测试数据,方便理解) data1 <- tibble( gene1 = round(runif(10, min = 0, max = 1),3), gene2 = NA, gene3 = NA, gene4 = NA, gene5 = NA, gene6 = NA ) data1[1, ] <- as.list(round(runif(6, min = 0, max = 1), 3)) data2 <- data1 da…","description":"先说结论: ComplexHeatmap包可以通过 cluster_rows = T 和 luster_columns = T 开启对数据的聚类,但前提是至少有一行或一列 是完全不含NA值的。验证:构造测试数据:(做了三个极端一点的测试数据,方便理解) data1 <- tibble( gene1 = round(runif(10, min = 0, max = 1),3), gene2 = NA, gene3 = NA, gene4 = NA, gene5 = NA, gene6 = NA ) data1[1, ] <- as.list(round…","guid":"https://zhuanlan.zhihu.com/p/27151120023","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T14:03:17.982Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"结构方程模型(SEM)","url":"https://zhuanlan.zhihu.com/p/27126336110","content":"结构方程模型(Structural Equation Modeling,简称 SEM)是一种融合了因素分析和路径分析的多元统计技术,常用于社会科学、心理学、管理学等领域的研究,以下是关于它的详细介绍: 基本概念:结构方程模型是一种验证性的统计分析方法,它可以用来检验一个或多个自变量与一个或多个因变量之间的关系,同时允许自变量和因变量存在测量误差。它通过构建一个因果关系模型,将观测变量和潜变量联系起来,从而更全面地揭示变量之间的…","description":"结构方程模型(Structural Equation Modeling,简称 SEM)是一种融合了因素分析和路径分析的多元统计技术,常用于社会科学、心理学、管理学等领域的研究,以下是关于它的详细介绍: 基本概念:结构方程模型是一种验证性的统计分析方法,它可以用来检验一个或多个自变量与一个或多个因变量之间的关系,同时允许自变量和因变量存在测量误差。它通过构建一个因果关系模型,将观测变量和潜变量联系起来,从而更全面地揭示变量之间的…","guid":"https://zhuanlan.zhihu.com/p/27126336110","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T11:06:58.655Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"该如何学习 R 语言?-isKage的回答:本文详细介绍了 R 语言常见的对象类型,包括向量、矩阵、数据框等。同时介绍了如何读取数据和输出数据,包括 read.table 函...","url":"https://www.zhihu.com/question/21654166/answer/112844628895","content":"该如何学习 R 语言?本文详细介绍了 R 语言常见的对象类型,包括向量、矩阵、数据框等。同时介绍了如何读取数据和输出数据,包括 read.table 函数等。
最简单的数据结构就是由一串相同类型的元素等构成的向量 vector
1
的向量c()
函数x <- c(0.3, 0.6)\\nx <- c(TRUE, FALSE)\\nx <- c(T, F) # T is TRUE, F is FALSE\\nx <- c(\\"M\\", \\"F\\")\\nx <- 1:4
【注意】R 语言只有TRUE
和T
以及FALSE
和F
rep()
函数格式
rep(x, times = 1, length.out = NA, each = 1)\\n# x 表示数据元素\\n# times 表示重复次数,可以是向量\\n# length.out 表示总长度,运行截断\\n# each 每个元素重复次数,不能为向量
先执行each
复制单个元素,后执行times
复制整个向量
rep(1:4, 2) # times = 2\\nrep(1:4, each = 2)\\nrep(1:4, c(1, 2, 3, 4)) # times = (1, 2, 3, 4)\\nrep(1:4, times = 2, len = 10)\\nrep(1:4, times = 2, each = 2)\\nrep(\\"hello\\", times = 3)
【注意】each = x
等价于times = c(x, x, ...)
seq()
函数格式
seq(from = 0, to = 1, by = ((to - from) / (length.out - 1)), length.out = NULL, ...)\\n# from 起始数字\\n# to 终止数字\\n# by 步长,默认均匀分布\\n# len 长度
例如:
seq(0, 1, length.out = 11)\\nseq(1, 9, by = 2)\\nseq(17)
R 语言的矩阵是
matrix()
函数格式
matrix(NA, nrow = 1, ncol = 1, byrow = FALSE)\\n# NA 第一个参数为传入的数据\\n# nrow 行数\\n# ncol 列数\\n# byrow 是否按照行排列
例如:
matrix(1:6, nrow = 2, ncol = 3)\\nmatrix(1:6, nrow = 2, ncol = 3, byrow = TRUE)
cbind()
rbind()
函数将向量按行/列组合成矩阵
x <- c(1, 2, 3)\\ny <- c(4, 5, 6)\\ncbind(x, y)\\nrbind(x, y)
Matrix
中只能是同一种类型的元素,一般是数值型Data Frame
不同列可以是不同数据类型age <- c(1, 3, 5, 2, 11, 9, 3, 9, 12, 3)\\nweight <- c(4.4, 5.3, 7.2, 5.2, 8.5, 7.3, 6.0, 10.4, 10.2, 6.1)\\ngender <- c(\\"F\\", \\"F\\", \\"F\\", \\"F\\", \\"F\\", \\"M\\", \\"M\\", \\"M\\", \\"M\\", \\"M\\")\\n\\ndf <- data.frame(age, weight, gender)\\ndim(df)\\nnrow(df)\\nncol(df)
dim
nrow
ncol
函数也可用于矩阵matrix
类型
List
是一个广义的 “向量” x <- list(member = 3, names = c(\\"Tom\\", \\"Jerry\\", \\"Lily\\"))\\nx
names(x) # x 列表元素的别名\\nx$member # 取 x 列表的 member\\nlength(x) # 取列表长
使用 $
取列表的某一位置的数据
因子是一种特殊的向量:映射到整数编码,并记录所有可能的类别(称为水平,levels)。
使用 factor()
函数创建因子:
# 示例:性别数据\\ngender <- c(\\"男\\", \\"女\\", \\"男\\", \\"女\\", \\"男\\")\\ngender_factor <- factor(gender)\\ngender_factor\\n\\nlevels(gender_factor) <- c(\\"male\\", \\"female\\")\\n\\ngender_factor
把 R 对象从一种类型强制转化成另一个类型
x <- 1:6\\nas.logical(x)\\nas.character(x)
NA
x <- c(\\"a\\", \\"b\\", \\"c\\")\\nas.logical(x)\\nas.numeric(x)
NA
:缺失数据 not availableNaN
:无意义的数 not a number格式:使用函数判断
# 每个元素分别判断\\nis.na()\\nis.nan()
例如:
x <- c(4, -1, NA)\\nis.na(x)\\nis.nan(x)\\n\\nsqrt(x)
特殊的数字计算 Inf
无穷的计算
Inf + (-Inf) # NaN
例如 .txt
.csv
.dat
文件
例如 .xls
.xlsx
(Excel) 、 .sas7bdat
(SAS)、 .sav
(SPSS)、.dta
(Stata)、.RData
(R) 和 .dat
文件
先进行转化再读取,或用专门的程序包
读取文本数据常见的函数
read.table()\\nread.csv()
例如:
read.table(\\"example.txt\\")\\nread.csv(\\"example.csv\\")
read.table()
函数参数
read.table(file, header = FALSE, sep = \\"\\", quote = \\"\\\\\\"\'\\",\\n dec = \\".\\", numerals = c(\\"allow.loss\\", \\"warn.loss\\", \\"no.loss\\"),\\n row.names, col.names, as.is = !stringsAsFactors, tryLogical = TRUE,\\n na.strings = \\"NA\\", colClasses = NA, nrows = -1,\\n skip = 0, check.names = TRUE, fill = !blank.lines.skip,\\n strip.white = FALSE, blank.lines.skip = TRUE,\\n comment.char = \\"#\\",\\n allowEscapes = FALSE, flush = FALSE,\\n stringsAsFactors = FALSE,\\n fileEncoding = \\"\\", encoding = \\"unknown\\", text, skipNul = FALSE)\\n- file: 文件名路径, 字符串形式\\n- header: 表示文件第一行是否含有列名\\n- sep: 分隔符, 字符串, 表示各列按照 sep 指定的符号分隔\\n- nrows: 表示读取数据部分的最大行数\\n- skip: 表示跳过一定的行数后开始读取\\n- comment.char: 注释标记, 此符号右边的所有内容都会被忽略\\n- row.names: 将某一列设置为行名\\n- col.names: 将某一行设置为列名
例如:读取下面的 grade.txt
文件
--------------------------------------------\\n%%% grade of class A, year 2020\\nName ID Grade GPA Gender\\n\\"Xiao Ming\\" 133001 100 4 F\\n\\"Xiao Hong\\" 133023 90 3.7 M\\n\\"Xiao Wan\\" 133099 85 3.2 M\\n\\"Song Hui\\" 133020 80 3.5 M\\n\\"Song Yi\\" 133019 100 4 M\\n\\"Donald Trump\\" 133012 88 3.7 M\\n\\"Clinton Hilary\\" 133014 90 3.7 F%%% retake\\n\\"Obama BH\\" 133010 \\"\\" \\"\\" M%%% Fail\\n------------------------------------------\\nt <- read.table(\\n file = \\"./grade.txt\\", # 文件路径\\n header = TRUE, # 第一行为列名\\n sep = \\" \\", # 按照空格分割\\n comment.char = \\"%\\", # % 为注释\\n skip = 1, # 跳过一行\\n nrows = 8, # 跳过一行后读 8 行\\n row.names = 2 # 第 2 列设为行名\\n)\\n> t\\n Name Grade GPA Gender\\n133001 Xiao Ming 100 4.0 F\\n133023 Xiao Hong 90 3.7 M\\n133099 Xiao Wan 85 3.2 M\\n133020 Song Hui 80 3.5 M\\n133019 Song Yi 100 4.0 M\\n133012 Donald Trump 88 3.7 M\\n133014 Clinton Hilary 90 3.7 F\\n133010 Obama BH NA NA M
其他读取函数类似,只是参数默认值不同,可以相互替代
read.csv(file, header = TRUE, sep = \\",\\", ...)\\nread.delim(file, header = TRUE, sep = \\"\\\\t\\", ...)
对于一些常规的文本文件,可直接使用默认参数。例如:
.txt
数据文件\\"A\\", 1, 10.1\\n\\"B\\", 2, 20.5\\n\\"C\\", 4, 1031.1
.csv
文件a,b,c\\n1,2,3\\n4,5,6\\n7,8,9
可以直接使用
read.table(\\"example.txt\\")\\nread.csv(\\"example.csv\\")
scan()
函数scan()
函数更灵活,可以读进不规则的数值文档,得到一个向量或者列表
what
参数指定变量类型,得到一个列表
例如:针对下面的 .txt
文件
M 65 168\\nM 70 172\\nF 54 156\\nF 58 163\\n# 指定第一列字符,第二、三列为数值\\nscan(\\"example.txt\\", what = list(\\"\\", numeric(), numeric()))\\n\\n# 指定每一列的名称\\nscan(\\"example.txt\\", what = list(\\"gender\\" = \\"\\", \\"weight\\" = numeric(), \\"height\\" = numeric()))
scan()
函数还可以读取不规则长度的数值文档,得到一个向量
例如:对于数值文档 example2.txt
1\\n2 3 4\\n5 6 7 8 9\\n> scan(\\"example2.txt\\")\\n\\nRead 9 items\\n[1] 1 2 3 4 5 6 7 8 9
read.fwf()
函数读取文件中一些固定宽度数据,例如可以指定每一列的宽度为几,函数便会按照提前设置的宽度读取数据
# M65168\\n# M70172\\n# F54156\\n# F58163\\n\\nt <- read.fwf(\\n file = \\"example3.txt\\",\\n widths = c(1, 2, 3),\\n col.names = c(\\"gender\\", \\"weight\\", \\"height\\"),\\n) # 指定每一列宽度分别为 1, 2, 3\\n\\n> t\\n gender weight height\\n1 M 65 168\\n2 M 70 172\\n3 F 54 156\\n4 F 58 163
csv
文件读取read.delim(\\"clipboard\\")
从剪切板
中读取常用程序包 readxl
install.packages(\\"readxl\\")\\nlibrary(\\"readxl\\")\\nt <- read_excel(\\"example.xlsx\\")
url()
和 readLines()
函数con <- url(\\"https://www.baidu.com/\\")\\nx <- readLines(con)\\nhead(x)
write.table()
函数参数
write.table(x, file = \\"\\", append = FALSE, quote = TRUE, sep = \\" \\",\\n eol = \\"\\\\n\\", na = \\"NA\\", dec = \\".\\", row.names = TRUE,\\n col.names = TRUE, qmethod = c(\\"escape\\", \\"double\\"),\\n fileEncoding = \\"\\")\\n\\"\\"\\"将 x 写入文件 file 中\\"\\"\\"\\n# sep: 各列分割符号\\n# quote = TRUE: 字符和因子列就会被 \\"\\" 所包裹\\n# eol: 尾行分隔符\\n# na: 缺失值字符串
例如:
# 创建数据框 d\\nd <- data.frame(obs = c(1, 2, 3), treat = c(\\"A\\", \\"B\\", \\"A\\"), weight = c(2.3, NA, 9))\\n\\n# 保存为简单文本 txt\\nwrite.table(d, file = \\"./lec02/foo.txt\\", row.names = FALSE)\\n# 保存为 , 分割文本\\nwrite.csv(d, file = \\"./lec02/foo.csv\\", row.names = FALSE)\\n# 保存为 .RData 格式文件\\nsave(d, file = \\"./lec02/foo.RData\\")
做数据分析和人工智能运算前常常需要大量的数据准备工作,也就是把各种数据源以及各种规格的数据整理成统一的格式。因为情况非常复杂多样,很难有某种可视化工具来完成此项工作,常常需要编程才能实现。
业界有很多免费的脚本语言都适合进行数据准备工作,其中 Python Pandas 具有多种数据源接口和丰富的计算函数,受到众多用户的喜爱;esProc SPL 作为一门较新的数据计算语言,在语法灵活性和计算能力方面也很有特色,下面对两者进行多方面的比较。本文重点比较数据的解析、清洗、计算、输出等日常任务,不涉及人工智能等后续应用或高性能计算等特殊场景。
编程范式
Python 是通用开发语言,支持多范式编程,包括完整的面向对象和面向函数,但因为大量 Python 用户不是专业的应用程序员,很少用到这两种现代复杂的编程范式,最常用的反而是古老简单的面向过程编程范式。
SPL 专用于结构化数据计算,也支持常见的三种范式。SPL 对面向对象的概念进行了大幅简化,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容。SPL 对函数式编程也进行了简化,其 Lambda 表达式甚至比 SQL 更加简单易用,适合非专业应用程序员。
语言整体性
Pandas 不是 Python 的原生类库,而是基于 numpy 开发的第三方类库(numpy 本身也是第三方类库), 没有参与 Python 的统一设计,也无法获得 Python 的底层支持,导致语言的整体性不佳,基础数据类型尤其是结构化数据对象(DataFrame)的专业性不强,影响编码效率和计算效率。
SPL 是原生类库,可以自底向上设计统一的语法、函数、参数、接口,以及基础数据类型尤其是结构化数据对象(序表),语言的整体性更好。
运行模式
Python 是用 C 开发的解释型语言,SPL 是用 Java 开发的解释型语言,两者都可以自动推断数据类型,并据此提供了灵活方便的语法。解释型语言的性能一般不如编译型,但 SPL 内置大量时间复杂度更低的基础运算,结构化计算的性能经常能超过编译型语言。Pandas 由于语言整体性较差,其性能不如 Python 原生类库。
IDE
Python 和 SPL 都有图形化的 IDE,包括完整的调试功能,便利的结构化数据对象观察功能,直观的代码块 / 作用域缩进功能。Python 采用空格 /tab 缩进,SPL 采用类 Excel 的表格式缩进。
学习难度
Pandas 资料丰富,入门的学习难度较低。但如果要深入开发,就必须学习完整的面向对象编程和函数式编程,难度陡然提高。
SPL 刻意简化了对象的概念和函数式编程的接口,无论入门学习还是深入开发,难度都不高。但涉及到高性能计算时需要学习较多特有的算法,难度也会提高。
代码量
Pandas 库函数丰富,实现简单的数据准备任务时只需单独使用自己库函数,代码量较低。但如果想实现较复杂的数据准备任务,就要大量使用 Python 原生类库和第三方类库,由于 Pandas 的语言整体性不佳,难度会陡然增加,代码量也水涨船高。
SPL 库函数丰富,语言整体性好,无论简单任务还是复杂任务,代码量都不多。
数据源种类
Pandas 支持多种数据源,包括:
文本数据文件,包括 TAB 分隔的 txt、逗号分隔的 csv,也可自定义其它分隔符。
固定宽度文件fwf,
各类关系型数据库,
Excel,
Json,
XML,
Restful、WebService,
html 抓取,
sas,
spss,
stata,
列存格式Parquet,
列存格式ORC,
Google BigQuery,
科学数据HDF,
数据框feather,
剪贴板里的结构化数据,
私有格式pickle。
SPL支持的数据源也很多,包括:
文本数据文件,包括 TAB 分隔的 txt、逗号分隔的 csv,也可自定义其它分隔符,
固定宽度文件fwf,
各类关系型数据库,
Excel,
Json,
XML,
Restful、WebService,
html 抓取,
HBase,
HDFS,
Hive,
Spark,
Elasticsearch,
MongoDB,
Kafka,
R2dbc,
FTP,
Cassandra,
DynamoDB,
influxDB,
Redis,
SAP,
剪贴板里的结构化数据,
私有格式btx、ctx。
读写数据库
用SQL查询数据库,用csv文件更新数据库。Pandas:
conn = create_engine(\'mysql+pymysql://root:password@localhost:3306/testdb\')\\ndf_read = pd.read_sql_query(\'select * from product\', conn)\\ndata = pd.read_csv(\\"d:/Orders.csv\\")\\ndata.to_sql(\'testdf\', conn, index=False)\\nconn.dispose()
简单读写数据库时,Pandas 代码足够优雅。
SPL:
A | |
1 | =connect(\\"com.mysql.jdbc.Driver\\",\\"jdbc:mysql://localhost:3306/testdb?user=root&password=password\\") |
2 | =A1.query(\\"select * from product\\") |
3 | =T(\\"d:/Orders.csv\\") |
4 | =A1.update(A3, testdf; ORDERID) |
5 | =A1.close() |
SPL代码也很简单,整体逻辑与Pandas类似。区别在于,SPL可以把数据源信息写在配置文件里,代码里只要简单引用数据源名,具体来说,A1可以写成:connect(\\"myDB\\")
读写文本文件
规则文本:读取csv文件,简单计算后写入新csv。Pandas:
data = pd.read_csv(\\"d:/Orders.csv\\")\\ndata[\'OrderDate\']=pd.to_datetime(data[\'OrderDate\'])\\nresult=data.groupby(data[\'OrderDate\'].dt.year).agg({\'Amount\':[len,np.sum]})\\nresult.to_csv(\\"d:/resultP.csv\\")
Pandas 代码很简洁,但仍有不足之处,一是不能自动解析日期时间类型;二是计算代码里大中小括号都有,既有表达式又有字符串,有明显的可优化之处,语言整体性不佳。
SPL 实现相同的功能:
A | |
1 | =T(\\"d:/Orders.csv\\") |
2 | =A1.groups(year(OrderDate);count(1),sum(Amount)) |
3 | =file(\\"d:/resulS.csv\\").export@t(A2) |
SPL代码也很简洁,且可自动解析日期时间类型,可以只用一种括号,可以只用表达式,语言整体性极佳。
不规则的文本:每三行对应一条记录,其中第二行含三个字段(集合的成员也是集合),将该文件整理成规范的结构化数据对象。Pandas:
data = pd.read_csv(\\"d:/threeLines.txt\\",header=None)\\npos_seq=[i//3 for i in range(len(data))]\\ndef runSplit(x):\\n f123=x.iloc[1,0].split(\\"\\\\t\\")\\n f=[x.iloc[0,0],f123[0],f123[1],f123[2],x.iloc[2,0]]\\n return pd.DataFrame([f], columns=[\'OrderID\',\'Client\',\'SellerId\',\'Amount\',\'OrderDate\'])\\ndf=data.groupby(pos_seq).apply(runSplit)\\ndf.reset_index(drop=True, inplace=True)#drop the Second Index
上述解析过程大体分三步:先将文本读为单字段的 DataFrame;再进行有序分组,即每三行分一组;最后循环每一组,将组内数据拼成单记录的 DataFrame,循环结束时合并各条记录,形成新的 DataFrame。
遇到不规则的文本时,Pandas 代码明显变复杂了,体现在以下几处。制造形如 [0,0,0,1,1,1,2,2,2…] 的分组依据时,需要用较复杂的 for 循环语句,先定义循环计数 i,再用 i 整除并取商。用 apply 循环各组数据时,需要定义一个处理组内数据的函数,这个函数超出了一句,因此不能用 Lambda 表达式来简化定义过程(连 Java 等编译型语言都没有这种限制)。取 DataFrame data 的成员时,只能用函数 iloc(或 loc),而取 list f123 的成员时,可以直接用下标,两者都是集合,但用法大相径庭,只因为 DataFrame 不是原生类库,语言整体性较差,无法像原生类库那样享受简洁的语法规则。DataFrame 本身有索引,apply 拼合多个 DataFrame 时,会加上第二层索引,需要手工去掉一层。
SPL:
A | |
1 | =file(\\"D:\\\\\\\\split.csv\\").import@si() |
2 | =A1.group((#-1)\\\\3) |
3 | =A2.new(~(1):OrderID, (line=~(2).split(\\"\\\\t\\"))(1):Client,line(2):SellerId,line(3):Amount,~(3):OrderDate ) |
SPL的解析逻辑和Pandas一样,但代码简单多了。制造分组依据时,不用复杂的for循环语句,而是用更简单的group(…)循环函数,且无需定义循环计数,#就是默认的循环计数(~是默认的循环变量)。用new循环各组数据时,也要定义一个处理函数,但SPL支持强大且简洁的Lambda表达式,可以把多句代码直接写在new里,不必像Python那样手工定义完整的函数结构。从SPL的任何集合类型(包括序表)取成员时,都可以直接用下标,语法简洁一致。new函数最后也要拼合多条记录,但不会生成无用的新索引。SPL代码更简洁,底层原因是原生类库的语言整体性更强。
多层数据
简单查询:Json文件的上层为销售员,下层为订单,查询出符合条件的所有订单。Pandas:
JsonStr=open(\'D:/data.json\',\'r\').read()\\nJsonObj=json.loads(JsonStr)\\ndf=pd.json_normalize(JsonObj,[\'Orders\'])\\ndf[\'OrderDate\']=pd.to_datetime(df[\'OrderDate\']) \\nresult=df.query(\'Amount>1000 and Amount<2000 and contains(\\"business\\")\')
Pandas 代码比较简单。要注意的是,dict、list 等 Python 基本数据支持泛型,且与 Json 的 object、array 类型天然对应,适合表示多层 Json(但不适合表达二维数据)。相反,DataFrame 适合表达二维数据,但同一列的数据类型不可变,不是真正的泛型,无法表达一般的多层 Json。DataFrame 不擅长表达多层 Json,需要用 json_normalize 函数将多层 Json 转为二维 DataFrame,才能进行后续计算,这说明 Pandas 的语言整体性不够好。
SPL:
A | |
1 | =file(\\"d:/EO.json\\").read() |
2 | =json(A1) |
3 | =A2.conj(Orders) |
4 | =A3.select(Amount>1000 && Amount<=2000 && like@c(Client,\\\\\\"*business*\\\\\\")) |
序表不仅支持二维数据,也支持多层数据。序表支持真正的泛型,与Json的object、array类型天然对应,适合表示多层数据。多层数据是二维数据的一般形式,序表同样擅长表达二维数据,不需要额外的标准化动作,直接就能计算。
访问层次节点:对Json分组汇总,分组字段既有上层字段,也有下层字段。Pandas:
JsonStr=open(\'D:/data.json\',\'r\').read()\\nJsonObj=json.loads(JsonStr)\\ndf=json_normalize(JsonObj,record_path=[\'Orders\'],meta=[\'Name\',\'Gender\',\'Dept\'])\\nresult=df.groupby([\'Dept\',\'Client\']).agg({\'Amount\':[\'count\',\'sum\']}).reset_index()\\nresult.columns = [\'Dept\',\'Clt\',\'cnt\',\'sum\']
Pandas DataFrame 无法表达多层 Json,也就不支持按树形的层次关系直观地访问数据,只能用 normalize 把多层数据转为二维数据,再访问扁平的二维数据。
SPL:
A | |
1 | =json(file(\\"d:/data.json\\").read()) |
2 | =A1.groups(Dept,Orders.Client:Clt; count(Orders.OrderID):cnt, sum(Orders.Amount):sum) |
SPL序表可以表达多层Json,支持多层数据的计算,比Pandas简洁优雅。多层数据计算的特征之一,是提供方便的语法用来表达树形的层级关系,比如上面代码中的点号\\"Orders.Client\\",可以自由引用任意节点的数据。当层级较多结构复杂时,这种引用方式可以明显提升表达效率。
同理可知,Pandas和SPL虽然都可以计算XML,但DataFrame不支持多层XML,必须转为二维结构,表达能力不强;SPL序表可以表达并计算多层XML,代码更加优雅。
与Json的normalize函数不同,Pandas没有为XML提供方便的标准化函数,官方推荐用XML计算语言把多层XML计算为二维XML,常用的XML计算语言有XSLT和XPath。为了计算XML,还得学习第三方语言,学习成本过高,这里就不举例了。
SPL整体性极佳,可以用与Json类似的代码解析XML,与Json相同的代码计算XML,学习成本很低。比如对多层XML进行分组汇总:
A | |
1 | =file(\\"d:\\\\\\\\xml\\\\\\\\emp_orders.xml\\").read() |
2 | =xml(A1,\\"xml/row\\") |
3 | =A2.groups(Dept,Orders.Client:Clt; count(Orders.OrderID):cnt, sum(Orders.Amount):sum) |
除了文件,Pandas和SPL也可以解析来自RESTful/WebService的多层数据,区别在于Pandas的语言整体性不佳,没有提供内置的RESTful/WebService接口,必须引入第三方类库。其中一种写法:
import requests\\nresp=requests.get(url=\\"http://127.0.0.1:6868/api/emp_orders\\")\\nJsonOBJ=resp.json()
SPL 整体性较好,原生支持多层数据和 RESTful/WebService:
=json(httpfile(\\"http://127.0.0.1:6868/api/emp_orders\\").read())
生成
Pandas的结构化数据对象是DataFrame,不仅可以由数据源生成,也可以直接构造,下面是常见的构造方法:
#用List构造,2个字段4条记录,行号(索引)是默认的0-3,列名是默认的0-1\\ndf=pd.DataFrame([[1,\'apple\'],[2,\'orange\'],[3,\'banana\'],[4,\'watermelon\']])\\n#用Array构造\\npd.DataFrame(numpy.array([[1,\'apple\'],[2,\'orange\'],[3,\'banana\'],[4,\'watermelon\']]))\\n#用Dict构造,列名是指定的one、two\\npd.DataFrame({\'one\':[1,2,3,4],\'two\':[\'apple\',\'orange\',\'banana\',\'watermelon\']})
DataFrame 由多个 Series(列或字段对象)组成,下级是原子数据类型或对象(指针)。Pandas 没有真正的记录对象,这在某些场景下会带来方便,但也提高了理解难度,编码时缺乏直观感。使用 Pandas 时,经常用到 Python 的原生类库和第三类库 numpy 里的数据对象,包括 Set(数学集合)、List(可重复集合)、Tuple(不可变的可重复集合)、Dict(键值对集合)、Array(数组)等,这些数据对象都是集合,容易与 Series 和 DataFrame 发生混淆,互相转化困难,对初学者造成了不少困扰。除了外部类库的集合,Series 与自家的集合也容易发生混淆,比如分组后的集合 DataFrameGroupBy。这些都说明 Pandas 的语言整体性不强,缺乏来自底层的支持。
SPL 的结构化数据对象是序表,同样可以构造生成:
//先构造出结构,再用序列填入数据,行号是0-3,列名是指定的one、two\\nT=create(one,two).record([1,\\"apple\\",2,\\"orange\\",3,\\"banana\\",4,\\"watermelon\\"])\\n//先准备序列形式的数据(含列名),再构造生成\\n[\\"one\\",\\"two\\",1,\\"apple\\",2,\\"orange\\",3,\\"banana\\",4,\\"watermelon\\"].record(2)\\n//用序表T0的结构作为新序表的结构,再填入数据\\nT0.create(one,two).record([1,\\"apple\\",2,\\"orange\\",3,\\"banana\\",4,\\"watermelon\\"])
序表由多个 Record(记录对象)组成,下级是原子数据类型或对象(指针)。序表有真正的记录对象,大多数场景下易于理解,编码直观。Record 与单记录序表虽然本质不同,但业务意义相似,容易混淆,为了减少混淆,SPL 经过精心设计,使两者的外部用法保持一致,通常不必特意区分。SPL 只有两种集合,序列(类似 List)和序表,前者是后者的基础,后者是有结构的前者,序表分组后的集合是序列,两者关系清楚泾渭分明转化容易,学习和编码的成本都很低。可以看出来,SPL 可以从底层提供语法支持,整体性较好。
访问数据
Pandas DataFrame自带行号(从0开始)、字段号(列号)、字段名(列名),可以直接通过下标或字段名方便地访问记录:
#取行号列表,index相当于行号字段名\\nlist(df.index)\\n#取第1条记录\\ndf.iloc[1]\\n#区间取第1-3条记录(左闭右开)\\ndf.iloc[1:4]\\n#步进(偶数位置)\\ndf.iloc[1::2]\\n#倒数第2条(从1开始)\\ndf.iloc[-2]\\n#用记录序号和字段序号取值\\ndf1.iloc[1,0]\\n#用记录序号和字段名取值\\ndf.loc[1,\'two\']
SPL 序表自带行号(从 1 开始)、字段号、字段名,可以通过下标和字段名方便地访问记录,这方面 SPL 和 Pandas 区别不大,用法都很方便:
//取行号列表,#是行号的字段名\\nT.(#)\\n//取第2条记录(可简写为T(2))\\nT.m(2)\\n//区间取第2-4条记录(左闭右闭)\\nT.m(2:4)\\n//步进(偶数位置)\\nT.step(2,2)\\n//倒数第二条(从1开始)\\nT.m(-2)\\n//用记录序号和字段序号取值\\nT.m(2).#1\\n//用记录序号和字段名取值\\nT.m(2).two
行号(下标)的本质是高性能地址索引,除了行号,Pandas 和 SPL 还提供了其他种类的索引,以及对应的查询函数,包括唯一值的哈希索引,有序值的二分查找索引。性能不是本文重点,且两者功能类似,这里就不多说了。
维护数据
修改指定位置的记录。Pandas:
df.loc[4,[\'NAME\',\'SALARY\']]=[\'aaa\',1000]
Pandas 没有直接提供修改函数,而是用 Series 对象取出记录的部分字段,再用 List 去修改。Series 这里表示的是记录,但通常表示列,List 通常表示记录,但也可以表示列,这些规则初学者容易混淆。
SPL:
T.modify(5,\\"aaa\\":NAME,1000:SALARY)
SPL 直接提供了修改函数,符合初学者的常识。当然,SPL 也可以取出记录再修改,两种方法各自适合不同的场景。
在指定位置插入新记录。Pandas:
record=pd.DataFrame([[100,\\"wang\\",\\"lao\\",\\"Femal\\",\\"CA\\", pd.to_datetime(\\"1999-01-01\\"), pd.to_datetime(\\"2009-03-04\\"),\\"HR\\",3000]],columns=df.columns)\\ndf = pd.concat([df.loc[:2], record,df.loc[3:]],ignore_index=True)
Pandas 没有真正的记录对象,也没有直接提供插入记录的方法,间接实现起来较麻烦,先构造一条单记录的 DataFrame,再将原 DataFrame 按指定位置拆成前后两个 DataFrame,最后把三个 DataFrame 拼起来。很多易忽略的细节也要处理好,否则无法获得理想结果,比如构造记录时要保证字段名与原 DataFrame 相同,拼接新 DataFrame 时不能保留原来的行号。
SPL:
T.insert(3,100,\\"wang\\",\\"lao\\",\\"Femal\\",\\"CA\\",date(\\"1999-1-1\\"),date(\\"2009-3-4\\"),\\"HR\\",3000)
SPL 对记录比较重视,直接提供了插入记录的方法,代码简洁易于理解。
添加计算列。Pandas:
today = datetime.datetime.today().year\\ndf[\\"Age\\"] = today-pd.to_datetime(df[\\"BIRTHDAY\\"]).dt.year\\ndf[\\"Fullname\\"]=df[\\"NAME\\"]+ \\" \\" +df[\\"SURNAME\\"]
Pandas 没有提供添加计算列的函数,虽然实现起来问题不大,但添加多个列就要处理多次,还是比较麻烦。Pandas 的时间函数也不够丰富,计算年龄比较麻烦。
SPL:
T.derive(age(BIRTHDAY):Age, NAME+\\"\\"+SURNAME:Fullname)
SPL 提供了添加计算列的函数,一次可以添加多个列,且时间函数更加丰富。
计算函数
Pandas内置丰富的库函数,支持多种结构化数据计算,包括:遍历循环apply\\\\map\\\\transform\\\\itertuples\\\\iterrows\\\\iteritems、过滤Filter\\\\query\\\\where\\\\mask、排序sort_values、唯一值unique、分组groupby、聚合agg(max\\\\min\\\\mean\\\\count\\\\median\\\\ std\\\\var\\\\cor)、关联join\\\\merge、合并append\\\\concat、转置transpose、移动窗口rolling、shift整体移行。
Pandas没有专门的函数进行记录集合的交、并、差等运算,只能间接实现,代码比较繁琐。Pandas会为类似的计算提供多个函数,比如过滤,这些函数的主体功能互相覆盖,只是参数约定\\\\输出类型\\\\历史版本不同,学习时要注意区分。
SPL的计算函数也很丰富,包括:遍历循环.()、过滤select、排序sort、唯一值id、分组group、聚合max\\\\min\\\\avg\\\\count\\\\median\\\\top\\\\icount\\\\iterate、关联join、合并conj、转置pivot。
SPL对记录集合的集合运算支持较好,针对来源于同一集合的子集,可使用高性能集合运算函数,包括交集isect、并集union、差集diff,对应的中缀运算符是^、&、\\\\。对于来源不同的集合,可用merge函数搭配选项进行集合运算,包括交集@i、并集@u、差集@d。
除了集合运算,SPL还有以下独有的运算函数:分组汇总groups、外键切换switch、有序关联joinx、有序归并merge、迭代循环iterate、枚举分组enum、对齐分组align、计算序号pselect\\\\psort\\\\ptop\\\\pmax\\\\pmin。Pandas没有直接提供这些函数,需要硬编码实现。
有大量功能类似的函数时,Pandas 要用不同的名字或者参数进行区分,使用不太方便。而 SPL 提供了非常独特的函数选项,使功能相似的函数可以共用一个函数名,只用函数选项区分差别。比如,select 函数的基本功能是过滤,如果只过滤出符合条件的第 1 条记录,可使用选项 @1:
T.select@1(Amount>1000)
对有序数据用二分法进行快速过滤,使用 @b:
T.select@b(Amount>1000)
函数选项还可以组合搭配,比如:
Orders.select@1b(Amount>1000)
结构化运算函数的参数有些很复杂,Pandas 需要用选项或参数名来区分复杂的参数,这样易于记忆和理解,但代码难免冗长,也使语法结构不统一。比如左关联:
pd.merge(Orders, Employees, left_on=\'SellerId\', right_on=\'EId\', how=\'left\', suffixes=[\'_o\',\'_e\'])
SPL 使用层次参数简化了复杂参数的表达,即通过分号、逗号、冒号自高而低将参数分为三层,不过这样会增加一些记忆难度。同样左关联:
join@1(Orders:o,SellerId ; Employees:e,EId)
层次参数的表达能力也很强,比如 join 函数里的分号用于区分顶层参数序表,如果进行多表关联,只要继续加分号就可以。Pandas 参数的表达能力就差多了,merge 函数里表示 DataFrame 的选项只有 left 和 right,因此只能进行两表关联。
Pandas 和 SPL 都提供了足够丰富的计算函数,进行单个函数的基础计算时,区别不算大。但实际工作中的数据准备通常有一定复杂度,需要灵活运用多个函数,且配合原生的语法才能实现,这种情况下,两者的区别就比较明显了。
同期比
先按年、月分组,统计每个月的销售额,再计算每个月比去年同月份的销售额的增长率。Pandas:
sales[\'y\']=sales[\'ORDERDATE\'].dt.year\\nsales[\'m\']=sales[\'ORDERDATE\'].dt.month\\nsales_g = sales[[\'y\',\'m\',\'AMOUNT\']].groupby(by=[\'y\',\'m\'],as_index=False)\\namount_df = sales_g.sum().sort_values([\'m\',\'y\'])\\nyoy = np.zeros(amount_df.values.shape[0])\\nyoy=(amount_df[\'AMOUNT\']-amount_df[\'AMOUNT\'].shift(1))/amount_df[\'AMOUNT\'].shift(1)\\nyoy[amount_df[\'m\'].shift(1)!=amount_df[\'m\']]=np.nan\\namount_df[\'yoy\']=yoy
分组汇总时,Pandas 很难像 SQL 那样边计算边分组,通常要先追加计算列再分组,这导致代码变复杂。计算同期比时,Pandas 用 shift 函数进行整体移行,从而间接达到访问“上一条记录”的目的,再加上要处理零和空值等问题,整体代码就更长了。
SPL:
A | |
2 | =sales.groups(year(ORDERDATE):y,month(ORDERDATE):m;sum(AMOUNT):x) |
3 | =A2.sort(m) |
4 | =A3.derive(if(m==m[-1],x/x[-1] -1,null):yoy) |
分组汇总时,SPL 可以像 SQL 那样边计算边分组,灵活的语法带来简练的代码。计算同期比时,SPL 直接用 [-1] 表示“上一条记录”,且可自动处理数组越界和被零除等问题,整体代码较短。
除了用 [x] 表示相对位置,SPL 还可以用 [x:y] 表示相对区间,比如股票的 3 日移动平均值:
T.derive(Amount[-2:0].avg():ma)
Pandas 也可以表示相对区间,但由于语言整体性不佳,无法从语法层面直接支持,所以提供了一个新函数 rolling。同样计算股票的 3 日移动平均值:
df[\'ma\']=df[\'Close\'].rolling(3, min_periods=1).mean()
贷款分期
根据多项贷款的基本信息(金额、期数、利息),计算每项贷款每一期的还款明细(当期还款额、当期利息、当期本金、剩余本金)。Pandas:
loan_data = ......#省略loan_data的取数过程\\nloan_data[\'mrate\'] = loan_data[\'Rate\']/(100*12)\\nloan_data[\'mpayment\'] = loan_data[\'LoanAmt\']*loan_data[\'mrate\']*np.power(1+loan_data[\'mrate\'],loan_data[\'Term\']) \\\\ /(np.power(1+loan_data[\'mrate\'],loan_data[\'Term\'])-1)\\nloan_term_list = []\\nfor i in range(len(loan_data)):\\n loanid = np.tile(loan_data.loc[i][\'LoanID\'],loan_data.loc[i][\'Term\'])\\n loanamt = np.tile(loan_data.loc[i][\'LoanAmt\'],loan_data.loc[i][\'Term\'])\\n term = np.tile(loan_data.loc[i][\'Term\'],loan_data.loc[i][\'Term\'])\\n rate = np.tile(loan_data.loc[i][\'Rate\'],loan_data.loc[i][\'Term\'])\\n payment = np.tile(np.array(loan_data.loc[i][\'mpayment\']),loan_data.loc[i][\'Term\'])\\n interest = np.zeros(len(loanamt))\\n principal = np.zeros(len(loanamt))\\n principalbalance = np.zeros(len(loanamt))\\n loan_amt = loanamt[0]\\n for j in range(len(loanamt)):\\n interest[j] = loan_amt*loan_data.loc[i][\'mrate\']\\n principal[j] = payment[j] - interest[j]\\n principalbalance[j] = loan_amt - principal[j]\\n loan_amt = principalbalance[j]\\n loan_data_df = pd.DataFrame(np.transpose(np.array([loanid,loanamt,term,rate,payment,interest,principal,principalbalance])),columns = [\'loanid\',\'loanamt\',\'term\',\'rate\',\'payment\',\'interest\',\'principal\',\'principalbalance\'])\\nloan_term_list.append(loan_data_df)\\nloan_term_pay = pd.concat(loan_term_list,ignore_index=True)
上面代码用两层循环作为主体结构,先循环每项贷款,再循环生成该项贷款的每一期,然后将各期明细转置为 DataFrame,并追加到事先准备好的 list 里,继续循环下一项贷款,循环结束后将 list 里的多个小 DataFrame 合并为一个大 DataFrame。业务逻辑是比较清晰的,就是按公式计算各项数据项,但因为两层循环的结构比较复杂,数据类型的转换比较麻烦,导致代码显得冗长。
SPL:
A | |
1 | // 省略 loan_data 的取数过程 |
2 | =loan_data.derive(Rate/100/12:mRate,LoanAmt*mRate*power((1+mRate),Term)/(power((1+mRate),Term)-1):mPayment) |
3 | =A2.news((t=LoanAmt,Term);LoanID, LoanAmt, mPayment:payment, Term, Rate, t* mRate:interest, payment-interest:principal, t=t-principal:principlebalance) |
业务逻辑上 SPL 和 Pandas 几乎一样,但因为语言整体性强,两层循环可以用一个 news 函数实现,也不需要麻烦的类型转换,因此代码大幅简化。
按工龄分组
按员工工龄将员工分组,并统计每组的员工人数,有些组之间有重复。Pandas:
#省略员工信息emp的取数过程\\ndef eval_g(dd:dict,ss:str):\\nreturn eval(ss,dd)\\nemployed_list=[\'Within five years\',\'Five to ten years\',\'More than ten years\',\'Over fifteen years\']\\nemployed_str_list=[\\"(s<5)\\",\\"(s>=5) & (s<10)\\",\\"(s>=10)\\",\\"(s>=15)\\"]\\ntoday=datetime.datetime.today()\\nemp[\'HIREDATE\']=pd.to_datetime(emp[\'HIREDATE\'])\\nemployed=((today-emp[\'HIREDATE\'])/np.timedelta64(1,\'Y\')).apply(math.floor)\\nemp[\'EMPLOYED\']=employed\\ndd={\'s\':emp[\'EMPLOYED\']}\\ngroup_cond = []\\nfor n in range(len(employed_str_list)):\\n emp_g = emp.groupby(eval_g(dd,employed_str_list[n]))\\nemp_g_index=[index for index in emp_g.size().index]\\nif True not in emp_g_index:\\n sum_emp=0\\nelse:\\n group=emp_g.get_group(True)\\n sum_emp=len(group)\\ngroup_cond.append([employed_list[n],sum_emp])\\ngroup_df=pd.DataFrame(group_cond,columns=[\'EMPLOYED\',\'NUM\'])
Pandas 擅长等值分组,也可实现简单的区间枚举分组,遇到本题这种可重复的枚举分组只能硬编码实现,大概过程:循环分组条件,转为等值分组解决问题,处理分组子集,最后合并结果。此外,Pandas 没有计算工龄的函数,也要手工实现。
SPL:
A | B | |
1 | / 省略员工信息 emp 的取数过程 | |
2 | [?<5,?>=5 && ?<10,?>=10,?>=15] | / 条件 |
3 | [Within five years,Five to ten years, More than ten years, Over fifteen years] | / 组名 |
4 | =emp.derive(age(HIREDATE):EMPLOYED) | / 计算工龄 |
5 | =A4.enum@r(A2, EMPLOYED).new(A3(#):EMPLOYED,~.len():NUM) | / 枚举分组 |
函数 enum 用于枚举分组,选项 @r 处理重复分组的情况,再配合 SPL 高效的表达能力,整体代码比 Pandas 简短得多。
通过上面的几个例子可以看出来,Pandas 适合简单的数据准备场景,遇到复杂些的结构化数据计算,代码就很难写了。SPL 语言整体性好,无论简单场景还是复杂计算,代码量都不多。
大数据量计算
如果文件或库表的数据量较大(指超出内存,而不是 Big Data),最终都要用循环分段的办法来处理,即:每次读取并计算少量数据,再保留本次计算的中间计算结果,循环结束后合并多个中间计算结果(比如过滤),或对合并结果做二次计算(比如分组汇总)。即使是基本的结构化数据计算,数据量大时也很麻烦,如果涉及关联、归并、并集或综合性计算,代码将更加复杂。
聚合
Pandas:
chunk_data = pd.read_csv(\\"orders.txt\\",sep=\\"\\\\t\\",chunksize=100000)\\ntotal=0\\nfor chunk in chunk_data:\\n total+=chunk[\'amount\'].sum()
对于聚合这种简单的大文件计算,Pandas 代码还算简单。打开大文本时,Pandas 提供了一个选项 chunksize,用来指定每次读取的记录数,之后就可以用循环分段的办法处理大文本,每次读入一段并聚合,再将计算结果累加起来。
SPL:
=file(\\"orders.txt\\").cursor@tc().total(sum(\'amount\'))
SPL 同样采用循环分段的办法处理大文本,但 SPL 封装了代码细节,提供了方便的游标机制,允许用类似处理小数据量的语法,直观地处理较大的数据量,所以代码里看不到循环累加的过程。
过滤
Pandas:
chunk_data = pd.read_csv(\\"d:/orders.txt\\",sep=\\"\\\\t\\",chunksize=100000)\\nchunk_list = []\\nfor chunk in chunk_data:\\n chunk_list.append(chunk[chunk.state==\\"New York\\"])\\nres = pd.concat(chunk_list)
Pandas 没有提供游标,只能硬编码进行循环分段,每次将部分数据读入内存进行过滤,过滤的结果也存储于内存中。
上面的方法只适合结果集小于内存的场景,如果结果集大于大内存,就要把每次过滤的结果写入文件中,代码变化较大:
chunk_data = pd.read_csv(\\"d:/orders.txt\\",sep=\\"\\\\t\\",chunksize=100000)\\nisNew=True\\nfor chunk in chunk_data:\\n need_data = chunk[chunk.state==\'New York\']\\n if isNew == True:\\n need_data.to_csv(\\"orders_filter.txt\\",index=None)\\n isNew =False\\n else:\\n need_data.to_csv(\\"orders_filter.txt\\",index=None,mode=\'a\',header=None)
首次创建文件和后续追加记录不同,代码细节要小心处理,代码难度显著增加。
SPL:
A | |
1 | =file(d:/orders.txt).cursor@tc() |
2 | =A1.select(state==\\"New York\\") |
3 | =A2.fetch() |
游标机制隐藏了底层细节,解题难度显著降低,代码量显著缩小。不难看出,SPL 语言的整体性较好,因此能够从底层提供游标机制。
结果集大于内存时,只要简单地把 A3 改为:
=file(\\"orders_filter.txt\\").export@tc(A2)
得益于游标机制,SPL 不必手工区分首次创建文件和后续追加,代码简短得多。
排序
pandas:
def parse_type(s):\\n if s.isdigit():\\n return int(s)\\n try:\\n res = float(s)\\n return res\\n except:\\n return s\\ndef pos_by(by,head,sep):\\n by_num = 0\\n for col in head.split(sep):\\n if col.strip()==by:\\n break\\n else:\\n by_num+=1\\n return by_num\\ndef merge_sort(directory,ofile,by,ascending=True,sep=\\",\\"):\\n with open(ofile,\'w\') as outfile:\\n file_list = os.listdir(directory)\\n file_chunk = [open(directory+\\"/\\"+file,\'r\') for file in file_list]\\n k_row = [file_chunk[i].readline()for i in range(len(file_chunk))]\\n by = pos_by(by,k_row[0],sep)\\n outfile.write(k_row[0])\\n k_row = [file_chunk[i].readline()for i in range(len(file_chunk))]\\n k_by = [parse_type(k_row[i].split(sep)[by].strip())for i in range(len(file_chunk))]\\n with open(ofile,\'a\') as outfile:\\n while True:\\n for i in range(len(k_by)):\\n if i >= len(k_by):\\n break\\n sorted_k_by = sorted(k_by) if ascending else sorted(k_by,reverse=True)\\n if k_by[i] == sorted_k_by[0]:\\n outfile.write(k_row[i])\\n k_row[i] = file_chunk[i].readline()\\nif not k_row[i]:\\n file_chunk[i].close()\\n del(file_chunk[i])\\n del(k_row[i])\\n del(k_by[i])\\n else:\\n k_by[i] = parse_type(k_row[i].split(sep)[by].strip())\\n if len(k_by)==0:\\nbreak\\ndef external_sort(file_path,by,ofile,tmp_dir,ascending=True,chunksize=50000,sep=\',\',usecols=None,index_col=None):\\n os.makedirs(tmp_dir,exist_ok=True)\\n try:\\n data_chunk = pd.read_csv(file_path,sep=sep,usecols=usecols,index_col=index_col,chunksize=chunksize)\\n for chunk in data_chunk:\\n chunk = chunk.sort_values(by,ascending=ascending)\\n chunk.to_csv(tmp_dir+\\"/\\"+\\"chunk\\"+str(int(time.time()*10**7))+str(uuid.uuid4())+\\".csv\\",index=None,sep=sep)\\n merge_sort(tmp_dir,ofile=ofile,by=by,ascending=ascending,sep=sep)\\n except Exception:\\n print(traceback.format_exc())\\n finally:\\n shutil.rmtree(tmp_dir, ignore_errors=True)\\ninfile = \\"D:/orders.txt\\"\\nofile = \\"D:/extra_sort_res_py.txt\\"\\ntmp = \\"D:/tmp\\"\\nexternal_sort(infile,\'amount\',ofile,tmp,ascending=True,chunksize=1000000,sep=\'\\\\t\')
将大文件分成多段,每段分别排序,分别写入 N 个临时文件;再打开 N 个临时文件,并维持一个 N 个成员的数组,指向每个临时文件的当前读取位置,初始位置是第一条记录;之后比较该数组对应的 N 条记录,将最小记录 i 写入结果文件,并下移 i 对应的临时文件的当前读取位置;继续比较 N 条记录,直至排序结束。这是大文件排序时常用的归并算法,实现过程比较复杂,Pandas 缺乏方便的游标机制,只能硬编码实现,代码冗长且不易解读。
SPL:
A | |
1 | =file(\\"D:/orders.txt\\").cursor@tc() |
2 | =A1.sortx(amount) |
3 | =file(\\"D:/extra_sort_res_py.txt\\").export@tc(A2) |
上面同样采用归并法实现大文件排序,由于 SPL 支持游标机制,复杂的细节被隐藏起来,只要写出简短的代码就能实现。
大数据量计算还有很多种,比如分组汇总、关联、交集等,很多都比排序复杂,比如分组汇总的第一步通常就是大排序,追求效率就要用更复杂的哈希分堆。Pandas 的语言整体性差,不支持游标,只能硬编码实现这些计算,难度非常大,至于综合性的大数据量计算,基本就不用考虑 Pandas 了。SPL 语言整体性较好,有方便的游标机制,代码都不难写,比如大结果集的分组汇总:
A | |
1 | =file(file_path).cursor@tc() |
2 | =A1.groupx(key;sum(coli):total) |
3 | =file(out_file).export@tc(A2) |
综合性的,计算每种商品销售额最大的3笔订单:
A | |
1 | =file(file_path).cursor@tc() |
2 | =A1.groups(product;top(3; -amt):three) |
3 | =A2.conj(three) |
Pandas 提供了丰富的库函数,但因为没有参与 Python 的统一设计,无法获得 Python 的底层支持,导致语言的整体性不佳,只擅长简单的数据准备工作,不适合一般的场景。esProc SPL 的语言整体性较好,结构化数据类型更加专业,可以用简洁直观的代码实现一般的数据准备工作,包括解析不规则的数据源,表达多层数据,进行复杂的结构化数据计算,完成大数据量计算。
SPL已开源免费,欢迎前往乾学院了解更多!
","description":"Python/Pandas如何处理百亿行,数十列的数据? Judy的回答\\n\\n\\n做数据分析和人工智能运算前常常需要大量的数据准备工作,也就是把各种数据源以及各种规格的数据整理成统一的格式。因为情况非常复杂多样,很难有某种可视化工具来完成此项工作,常常需要编程才能实现。\\n\\n业界有很多免费的脚本语言都适合进行数据准备工作,其中 Python Pandas 具有多种数据源接口和丰富的计算函数,受到众多用户的喜爱;esProc SPL 作为一门较新的数据计算语言,在语法灵活性和计算能力方面也很有特色,下面对两者进行多方面的比较。本文重点比较数据的解析、清洗、计算…","guid":"https://www.zhihu.com/question/50477642/answer/112720708383","author":"Judy","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T06:15:58.449Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?-乐一下蒜了的回答:一、SciPy概述SciPy是一个基于Python的开源科学计算库,主要用于数学、科学和...","url":"https://www.zhihu.com/question/20388507/answer/112718118651","content":"R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?SciPy是一个基于Python的开源科学计算库,主要用于数学、科学和工程领域。它是NumPy的扩展库,提供了更高级的功能。SciPy构建在NumPy基础之上,利用NumPy的数组对象进行高效计算。它包含许多子模块,用于优化、插值、积分、线性代数、信号处理、统计等任务。
(1)scipy.optimize,提供优化算法,例如最小化函数或求解方程;
(2)scipy.integrate,提供数值积分方法;
(3)scipy.linalg,提供线性代数操作的增强功能;
(4)scipy.stats,提供统计分布和统计测试工具;
(5)scipy.signal,提供信号处理工具;
(6)scipy.interpolate,提供插值方法。
(1)使用scipy.optimize求解最小值
from scipy.optimize import minimize\\n\\n# 定义目标函数\\ndef objective_function(x):\\n return x[0]**2 + x[1]**2 # 最小化 x1^2 + x2^2\\n\\n# 初始猜测值\\ninitial_guess = [1, 1]\\n\\n# 调用优化器\\nresult = minimize(objective_function, initial_guess)\\n\\nprint(\\"最优解:\\", result.x)
最优解为 [-1.07505143e-08, -1.07505143e-08],这可以近似理解为 [0, 0]。-1.07505143e-08 是科学计数法的一种表示形式,等价于 -1.07505143 × 10^(-8),即 -0.0000000107505143。
(2)使用scipy.integrate进行数值积分
from scipy.integrate import quad\\n\\n# 定义被积函数\\ndef integrand(x):\\n return x**2\\n\\n# 计算从 0 到 1 的积分\\nresult, error = quad(integrand, 0, 1)\\n\\nprint(\\"积分结果:\\", result)
输出结果:
[root@localhost ~]# python3 test.py\\n积分结果: 0.33333333333333337
(3)使用scipy.linalg解线性方程组
import numpy as np\\nfrom scipy.linalg import solve\\n\\n# 系数矩阵 A 和右侧向量 b\\nA = np.array([[3, 2], [1, -4]])\\nb = np.array([1, 2])\\n\\n# 求解 Ax = b\\nx = solve(A, b)\\n\\nprint(\\"解向量 x:\\", x)
输出结果:
[root@localhost ~]# python3 test.py\\n解向量 x: [ 0.57142857 -0.35714286]
(4)使用scipy.stats进行统计分析
rom scipy.stats import norm\\n\\n# 创建正态分布对象\\ndistribution = norm(loc=0, scale=1) # 均值为0,标准差为1\\n\\n# 计算概率密度函数 (PDF)\\npdf_value = distribution.pdf(0)\\n\\n# 计算累计分布函数 (CDF)\\ncdf_value = distribution.cdf(0)\\n\\nprint(\\"PDF 值:\\", pdf_value)\\nprint(\\"CDF 值:\\", cdf_value)
输出结果:
[root@localhost ~]# python3 test.py\\nPDF 值: 0.3989422804014327\\nCDF 值: 0.5
(5)使用scipy.interpolate进行插值
from scipy.interpolate import interp1d\\nimport numpy as np\\n\\n# 已知数据点\\nx = np.array([0, 1, 2, 3])\\ny = np.array([0, 1, 4, 9])\\n\\n# 创建插值函数\\nf = interp1d(x, y, kind=\'quadratic\')\\n\\n# 插值新点\\nnew_x = 1.5\\nnew_y = f(new_x)\\n\\nprint(\\"插值结果:\\", new_y)
运行结果:
[root@localhost ~]# python3 test.py\\n插值结果: 2.25
1、SciPy和NumPy的区别是什么?
NumPy主要提供基础的数组对象和操作,而SciPy提供更高层次的科学计算功能(如优化、积分、统计等),并依赖于NumPy。
2、如何使用 SciPy 进行曲线拟合?
使用scipy.optimize.curve_fit函数可以对数据进行非线性拟合。曲线拟合是通过已知数据点找到一个数学函数,使得该函数尽可能接近这些数据点的过程。SciPy 提供了 scipy.optimize.curve_fit 方法来实现非线性最小二乘拟合。
3、SciPy 的 quad 和 trapz 方法有什么区别?
quad 是基于自适应数值积分的方法,适用于连续函数;trapz 是基于梯形法则的数值积分方法,适用于离散数据。
","description":"R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好? 乐一下蒜了的回答\\n\\n一、SciPy概述\\n\\nSciPy是一个基于Python的开源科学计算库,主要用于数学、科学和工程领域。它是NumPy的扩展库,提供了更高级的功能。SciPy构建在NumPy基础之上,利用NumPy的数组对象进行高效计算。它包含许多子模块,用于优化、插值、积分、线性代数、信号处理、统计等任务。\\n\\n二、常用的SciPy子模块\\n\\n(1)scipy.optimize,提供优化算法,例如最小化函数或求解方程;\\n\\n(2)scipy.integrate,提供数值积分方法;\\n\\n(3…","guid":"https://www.zhihu.com/question/20388507/answer/112718118651","author":"乐一下蒜了","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T06:12:47.898Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ArcGIS Pro与R语言:生态系统服务权衡分析的新方法","url":"https://zhuanlan.zhihu.com/p/27031212856","content":"第一章、生态系统服务第二章、平台基础一、ArcGIS Pro介绍二、R环境配置与基础操作第三章、数据获取与预处理第四章、生态系统服务估算第五章、生态系统服务权衡与协同第六章、空间统计分析第七章、论文撰写与图表复现 ——————————————————————————————————————————前言随着生态系统服务评估和生态安全格局构建需求的增加,多技术融合方法成为研究热点。ArcGIS Pro作为新一代GIS平台,…","description":"第一章、生态系统服务第二章、平台基础一、ArcGIS Pro介绍二、R环境配置与基础操作第三章、数据获取与预处理第四章、生态系统服务估算第五章、生态系统服务权衡与协同第六章、空间统计分析第七章、论文撰写与图表复现 ——————————————————————————————————————————前言随着生态系统服务评估和生态安全格局构建需求的增加,多技术融合方法成为研究热点。ArcGIS Pro作为新一代GIS平台,…","guid":"https://zhuanlan.zhihu.com/p/27031212856","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T05:49:02.752Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Rstudio会有卡住不会出图的情况吗?-熠熠星晨的回答:我也是近期突然出现的这个问题,之前没有。其实也没啥,重启RStudio就解决了,只不过治标不治本","url":"https://www.zhihu.com/question/8799790527/answer/112654308543","content":"Rstudio会有卡住不会出图的情况吗?我也是近期突然出现的这个问题,之前没有。其实也没啥,重启RStudio就解决了,只不过治标不治本
","description":"Rstudio会有卡住不会出图的情况吗? 熠熠星晨的回答\\n\\n\\n我也是近期突然出现的这个问题,之前没有。其实也没啥,重启RStudio就解决了,只不过治标不治本","guid":"https://www.zhihu.com/question/8799790527/answer/112654308543","author":"熠熠星晨","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-28T04:50:35.268Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何零基础自学R语言?-Nomo的回答:在生信中,r语言是常使用的一种工具,不仅可以使用各种包进行数据处理还可以画图。分享一些入门级的r语言常用的指令。 1.R和...","url":"https://www.zhihu.com/question/279781791/answer/112540349004","content":"如何零基础自学R语言?在生信中,r语言是常使用的一种工具,不仅可以使用各种包进行数据处理还可以画图。分享一些入门级的r语言常用的指令。
一般我们都使用RStudio进行编译,因为界面更方便,且可以直观看到处理过程的参数和结果。
具体的安装可以参考这个回答
R及RStudio下载安装教程(超详细)_rstudio安装教程-CSDN博客
安装好进入界面可以看到四个区域,其中A为代码区,B为参数区,C为控制台,D为结果图显示区,也是文件路径显示区。
R包是我们最重要的工具,我一般使用较多的是ggplot用来画图。
一般包的安装指令,比如我想安装car这个包,那直接代码区输入即可。
install.packages(\\"car\\")
但有些包使用这个会报错无法安装,我会使用BiocManager。比如安装limma
if(!require(\\"BiocManager\\",quietly=T))\\n install.packages(\\"BiocManager\\")\\nBiocManager::install(\\"limma\\")
安装好之后就可以加载
library(limma)
如果对包有疑问可以加载指南
help(package=\\"ggplot2\\")\\n#获取帮助\\n?help
如果有其他的可以
#更新包\\nupdate.packages()#不放参数会更新所有包,指定就填参数\\n#移除\\nremove.packages()\\n#新加载一个包如果有同名函数会直接覆盖之前的同名函数\\n#如想单独加载一个之前的函数\\ncar::vif()
首先对工作目录的设置
#获取当前工作目录,用来读取数据用的\\ngetwd()\\n#设置工作目录,斜杆\\nsetwd(\\"D:/r transcript/练习\\")\\n
读取各种文件
####csv\\nread.csv(file.choose())\\nread.csv(\\"D:\\\\\\\\homework\\\\\\\\birth_weight.csv\\")\\n####txt\\nread.table(...,header=T)
其他常用
#查看当前工作环境文件名\\ndir()\\n#查看当前环境变量\\nls()\\n#移除对象\\nrm(iris)\\n#移除所有对象\\nrm(list=ls())\\n
4.常用的数据处理
#判断函数名(参数名=参数值)\\nis.numeric(23)\\nis.logical(12)\\nis.character(12)\\n# 查看variable类型(variable)\\nmode(23) \\nclass(23)\\nstr(23)\\n#把括号里的转换为函数类型\\nas.numeric(\\"123\\")\\nas.numeric(T)\\nas.character(123)\\nas.logical(2)\\n#特殊值\\n#缺失 NA\\nis.na()#判断缺失\\n#NULL 空值#正无穷 Inf\\n#NaN 不是一个数,\\n#当我们将两个不同的数据类型进行算术运算时,其结果就会出现NaN
R 语言对临床没啥用,考试、临床工作、看病不靠这个,临床干活有个好身体,不太差的脑子就可以。关键有一个靠得住的亲戚,那未来就不会太差。
但是学 R /Python/Linux 对临床医生做科研有用。对于临床医学生而言,整个 5 年的本科学习,并不是学习一整套完整成体系的科研思维,这是临床医学专业未来做科研的弊端。相比于其他很多专业,医学生本科学习的东西对于硕博深造,是没有太大的帮助。很多临床专业学生都是硕博阶段半路出家做科研。
再往深看一下,对科研有用,那就对你未来深造有用,对晋升有用。虽然说是破除唯论文,但其实是要求更高了,要代表作,要高分论文。所以,不管是先学 R 还是接触分子生物,都是先让你有科学思维。
","description":"临床大一是不是应该自学 R 语言? 生信小鹏的回答\\n\\n\\nR 语言对临床没啥用,考试、临床工作、看病不靠这个,临床干活有个好身体,不太差的脑子就可以。关键有一个靠得住的亲戚,那未来就不会太差。\\n\\n但是学 R /Python/Linux 对临床医生做科研有用。对于临床医学生而言,整个 5 年的本科学习,并不是学习一整套完整成体系的科研思维,这是临床医学专业未来做科研的弊端。相比于其他很多专业,医学生本科学习的东西对于硕博深造,是没有太大的帮助。很多临床专业学生都是硕博阶段半路出家做科研。\\n\\n再往深看一下,对科研有用,那就对你未来深造有用,对晋升有用。虽然说是破除唯论文…","guid":"https://www.zhihu.com/question/4139067549/answer/112293735005","author":"生信小鹏","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T16:55:03.156Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何检验多元正态分布 (Multivariate Normally Distributed)","url":"https://zhuanlan.zhihu.com/p/26852847195","content":"Vol.1 基本概念多元正态分布 (Multivariate Normally Distributed) 指的是多维随机变量的联合分布为正态分布。具体来说,当一个随机向量中的每个分量都是正态分布的,并且任意线性组合也是正态分布的,这个随机向量就被称为多元正态分布。 多元正态分布是许多统计分析方法的前提条件,然而在实际数据分析中,研究者往往会默认多元数据的正态性成立,并据此建立测量模型。然而,有些数据可能无法满足正态分布的假设,尤其是在处理…","description":"Vol.1 基本概念多元正态分布 (Multivariate Normally Distributed) 指的是多维随机变量的联合分布为正态分布。具体来说,当一个随机向量中的每个分量都是正态分布的,并且任意线性组合也是正态分布的,这个随机向量就被称为多元正态分布。 多元正态分布是许多统计分析方法的前提条件,然而在实际数据分析中,研究者往往会默认多元数据的正态性成立,并据此建立测量模型。然而,有些数据可能无法满足正态分布的假设,尤其是在处理…","guid":"https://zhuanlan.zhihu.com/p/26852847195","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T09:54:51.600Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"数据的代表性问题——如何计算加权系数","url":"https://zhuanlan.zhihu.com/p/26851478703","content":"Vol.1 引言在针对某类群体的调查研究中,我们经常会面临抽样的代表性问题。例如,调查得到的样本在性别、年龄、教育程度上与总体显著不同。这些抽样误差通常反映了系统偏差,这可能对准确性和研究人员使用数据进行推断的能力构成威胁,特别是当误差与感兴趣的变量相关时。 因此,为了解决数据的代表性问题,一种常用的方法是构建“事后分层权重”。通过分配给每个样本一个加权系数,从而纠正抽样误差,使样本与总体相匹配。即增…","description":"Vol.1 引言在针对某类群体的调查研究中,我们经常会面临抽样的代表性问题。例如,调查得到的样本在性别、年龄、教育程度上与总体显著不同。这些抽样误差通常反映了系统偏差,这可能对准确性和研究人员使用数据进行推断的能力构成威胁,特别是当误差与感兴趣的变量相关时。 因此,为了解决数据的代表性问题,一种常用的方法是构建“事后分层权重”。通过分配给每个样本一个加权系数,从而纠正抽样误差,使样本与总体相匹配。即增…","guid":"https://zhuanlan.zhihu.com/p/26851478703","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T09:51:01.180Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"桥接网络分析如何进行稳定性检验?","url":"https://zhuanlan.zhihu.com/p/26849494046","content":"Vol.1 引言关于桥接网络分析,公众号之前已经写了两篇推文,分别是 如何绘制桥接网络分析图以及 如何比较不同性别网络的桥梁强度,而本次推文主题的来源依然是读者提问: [图片] 在网络分析流程中,一般来说,首先是网络估计,其次是网络可视化与中心性估计,接着是网络稳定性和准确性估计,最后是网络比较。在之前的两篇推文中,分别介绍了桥接网络估计、网络可视化以及网络比较的内容,缺少了桥接网络稳定性和准确性估计的部分,所以本…","description":"Vol.1 引言关于桥接网络分析,公众号之前已经写了两篇推文,分别是 如何绘制桥接网络分析图以及 如何比较不同性别网络的桥梁强度,而本次推文主题的来源依然是读者提问: [图片] 在网络分析流程中,一般来说,首先是网络估计,其次是网络可视化与中心性估计,接着是网络稳定性和准确性估计,最后是网络比较。在之前的两篇推文中,分别介绍了桥接网络估计、网络可视化以及网络比较的内容,缺少了桥接网络稳定性和准确性估计的部分,所以本…","guid":"https://zhuanlan.zhihu.com/p/26849494046","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T09:43:44.601Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"广义线性模型(generalized linear model)理论与实操流程","url":"https://zhuanlan.zhihu.com/p/26844703829","content":"Vol.1 引言本文介绍了广义线性(GLM)模型的理论与实操,以及区分传统线性模型与广义线性模型,最后拓展了与之混淆的通用语言(GLM)模型。 Vol.2 广义线性模型的概念广义线性模型(Generalized Linear Model, GLM)是一种灵活的统计模型框架,它扩展了传统线性回归模型,以适应各种不同的数据分布和类型。GLM由Nelder和Wedderburn在1970年代提出,广泛应用于各种领域,包括生物统计学、经济学、社会科学等。 Vol.3 广义线性模型…","description":"Vol.1 引言本文介绍了广义线性(GLM)模型的理论与实操,以及区分传统线性模型与广义线性模型,最后拓展了与之混淆的通用语言(GLM)模型。 Vol.2 广义线性模型的概念广义线性模型(Generalized Linear Model, GLM)是一种灵活的统计模型框架,它扩展了传统线性回归模型,以适应各种不同的数据分布和类型。GLM由Nelder和Wedderburn在1970年代提出,广泛应用于各种领域,包括生物统计学、经济学、社会科学等。 Vol.3 广义线性模型…","guid":"https://zhuanlan.zhihu.com/p/26844703829","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T09:32:43.454Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"CFA在Mplus和R中的操作方法与结果解读","url":"https://zhuanlan.zhihu.com/p/26840217933","content":"Vol.1 引言上一次推文我们介绍了一下因子分析,也知道目前因子分析包括探索性因子分析(Exploratory Factor Analysis, EFA) 和验证性因子分析( Confirmatory Factor Analysis, CFA) 。利用因子分析来确定因子的维数称之为EFA。当研究人员根据某些理论或者其他的先验知识对因子的可能的个数或者因子结构作出假设,然后利用因子分析来检验这个假设,此时就是CFA。 Vol.2 EFA和CFA的联系与区别 联系 两种因子分析都是以普通因子分析…","description":"Vol.1 引言上一次推文我们介绍了一下因子分析,也知道目前因子分析包括探索性因子分析(Exploratory Factor Analysis, EFA) 和验证性因子分析( Confirmatory Factor Analysis, CFA) 。利用因子分析来确定因子的维数称之为EFA。当研究人员根据某些理论或者其他的先验知识对因子的可能的个数或者因子结构作出假设,然后利用因子分析来检验这个假设,此时就是CFA。 Vol.2 EFA和CFA的联系与区别 联系 两种因子分析都是以普通因子分析…","guid":"https://zhuanlan.zhihu.com/p/26840217933","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T09:20:39.336Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"该如何学习 R 语言?-南大小程聊科研的回答:以我多年自学以及辅导身边同学、同事的经验来看,许多人不是学不会R语言,而是刚开始就对“编程”这两个字带有一种...","url":"https://www.zhihu.com/question/21654166/answer/111909589374","content":"该如何学习 R 语言?以我多年自学以及辅导身边同学、同事的经验来看,许多人不是学不会R语言,而是刚开始就对“编程”这两个字带有一种潜意识里面的恐惧感,然后想着编程肯定需要数学基础,自己没学过等等负面情绪。实际上,对于R语言来讲,和我们以前学过的英语没有任何区别,用语言学的方法去带入,就可以非常快速的对R语言产生理解。
下面,我将利用语言学思维,对R语言的底层逻辑进行降维打击。
在刚开始学英语的时候,第一个学会的就是\\"主系表\\"结构:主语+系动词+表语。直接把这个公式套进R语言,你会惊讶地发现:
来看这个经典句式:
R\\n\\nmy_data <- data.frame(\\n name = c(\\"小明\\", \\"小红\\"),\\n score = c(90, 95)\\n)\\n
翻译成英语就是:\\"My data is a dataframe containing...\\"。
如果说对象是句子的主语,那么绝大多数函数就是不同形式的谓语动词:
1.谓语型函数(进行操作)
R\\n\\nsummarize(my_data) # 执行动作(对my data进行总结)\\n
就像\\"Summarize my data\\",这里的Summarize必须有宾语才能完整
2.定语型函数(描述属性)
R\\n\\nlength(my_data) \\n
相当于\\"The length of my data is...\\"
还有一种特殊的形式
3.名词型函数动词化(依然是进行操作)
R\\n\\ndata.frame(name = ..., age = ...)\\n
不能理解为\\"The data frame of ... is ...\\"
而是\\"make ... a data frame\\",使。。。成为一个数据框
遇到报错时:
R\\n\\nError: unexpected symbol in \\"my_data %>% filter\\"\\n
这像极了英语老师划红线:\\"此处缺少冠词!\\"
而warning:
R\\n\\nWarning message:\\nIn mean(\\"text\\") : argument is not numeric or logical\\n
就是温和提醒:\\"\'计算平均值\'这个动词,不能计算文字的平均值\\"
R语言深得英语精髓:
这种\\"对象本位\\"思想,让R代码天生具有自我描述能力。就像优秀的英文写作,好的R代码自己会说话。
致读者:本篇文章为个人理解,并非语言学专业,用词不一定精准,但是对于理解肯定有所裨益。所以对文章内容有疑问,欢迎各位大佬评论区留言批评指正,同志们加油!!
最后,宣传自己一句,全网同名分享生信及科研入门干货,欢迎大家关注
","description":"该如何学习 R 语言? 南大小程聊科研的回答\\n\\n\\n以我多年自学以及辅导身边同学、同事的经验来看,许多人不是学不会R语言,而是刚开始就对“编程”这两个字带有一种潜意识里面的恐惧感,然后想着编程肯定需要数学基础,自己没学过等等负面情绪。实际上,对于R语言来讲,和我们以前学过的英语没有任何区别,用语言学的方法去带入,就可以非常快速的对R语言产生理解。\\n\\n下面,我将利用语言学思维,对R语言的底层逻辑进行降维打击。\\n\\n一、R语言赋值语句就是主系表结构\\n\\n在刚开始学英语的时候,第一个学会的就是\\"主系表\\"结构:主语+系动词+表语。直接把这个公式套进R语言,你会惊讶地发现:\\n\\n主语 = 对象…","guid":"https://www.zhihu.com/question/21654166/answer/111909589374","author":"南大小程聊科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T07:59:23.044Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"知道2020年一整年的天气污染物数据,怎么把时间由日期(/天)转变为季度,再进行可视化分析?-Paper数据分析的回答:环境保护日益成为全球共识的今天,对空气质...","url":"https://www.zhihu.com/question/634078286/answer/111898471283","content":"知道2020年一整年的天气污染物数据,怎么把时间由日期(/天)转变为季度,再进行可视化分析?环境保护日益成为全球共识的今天,对空气质量的精准监测与深入分析,是守护蓝天、推动绿色发展的重要基石。
整理了1000多个环境监测站点的逐时空气质量数据。不同于以往的日、周、月汇总数据,我们的面板数据实现了逐小时记录,这意味着您可以直观地看到每一天、每一小时的空气质量波动情况。无论是城市喧嚣中的清晨,还是静谧乡村的夜晚,每一分每一秒的空气质量变化都尽在掌握。
数据名称:中国空气与气象-逐小时污染物数据
数据年份:2014-2024年
数据格式:CSV
指标:监测点编码、监测点名称、城市、经度、纬度、对照点、主要污染物指标(PM2.5、PM10、SO2、NO2、O3、 CO)
部分数据截图
量化策略常用的回测平台及其优劣势分析如下,现在市面上的佣金可以到万0.634,大家可以了解一下:
增强策略”是基于客户对指定持仓标的的主动管理,投资者无需编程,解放双手,仅需授权持仓给增强策略”系统,增强策略”系统会自动交易,利用AI模型,基于交易算法指令,抓取日内波动价差,力争在不改变日终持仓的情况下,降低持仓成本、增厚收益。高成交高波动环境下策略效果相对更好。
简单来说就是提前预留底仓,系统自动在日内进行高抛低吸或低吸高抛,通过日积月累的日内价差波动来赚取超额收益。
目前,许多证券公司为了提升客户体验,愿意为大客户(100万的客户)提供快速交易通道。这类通道的交易速度快,成交概率高,尤其受到短线操作者的青睐。
原理是为大客户更换专用交易席位,这些席位的用户较少,线路经过特别优化,速度较快,具有一定的优势。因此,在选择证券公司时,询问客户经理是否提供快速交易通道是很重要的。
凭借从业经验,我了解各证券公司费率与优势。如今互联网虽发达但仍有信息不对等。为助大家了解市场费率优势、节省交易成本,我分享所知费率情况,希望对大家有帮助,若有更优惠的请告知我以便分享。
目前只有少数证券公司能够提供低至万0.854的费率,起始费用为0.01,对于交易量较大的客户还可以享受更低至万0.64的优惠。两融交易的费率也可以达到3.8%-4.5%的水平,总的来说这是相对较低的。
下图展示了目前国内140多家证券公司的费率统计图,大家可以从中了解当前的市场费率情况。如果你知道有更优惠费率的证券公司,请一定要告诉我,我会分享出来,帮助大家了解最新的市场情况。
很多人开户时的默认费率可能是万2.5甚至更高,但现在实际上可以做到万0.85。下图是两者的对比图,可以直观地看到成本差异。大家可以根据自己实际情况来选择,希望这对大家有所帮助。
转户是股票账户持仓迁移,节省成本。流程简便,大部分券商需线下至原券商办理(部分券商支持网转)。步骤如下:
1、前一日清空资金,保留股票与基金,避免新股申购,并获取新券商席位号,预约转户时间。
2、转户当天不要委托交易、新股申购、银证转账,持身份证于交易时段至原券商办理,记得截图持仓成本,方便新券商修改持仓成本。
3、完成后,联系新券商客户经理开户,约1个交易日后,就可以看到持仓了。
选择券商时应注意以下几点:
1、客户经理的专业性:专业的客户经理能迅速解决问题,改善交易体验。
2、软件的易用性:确保交易软件流畅运行,并支持如同花顺、通达信等第三方软件。
3、快速交易通道:提供快速交易通道能提高成交概率,尤其适合打板交易。
4、量化交易支持:考虑是否支持条件单、网格交易、增强策略(日内全自动高抛低吸)、QMT量化软件。
5、Level2行情:赠送Level2行情有助于看清市场成交细节,辅助分析。
6、新客理财产品:新客专享理财可建立初期信任,券商有100万新客理财,给客户福利。
7、市场分析报告:优质的客户经理会在开盘前提供市场分析和资讯汇总,助力决策。\\"
","description":"量化策略一般用什么平台回测?分别有什么优劣势? 慧眼识牛的回答\\n\\n\\n量化策略常用的回测平台及其优劣势分析如下,现在市面上的佣金可以到万0.634,大家可以了解一下:\\n\\n一、迅投QMT\\n优势:\\n提供一站式交易、行情、算法、风控系统服务。\\n支持7X24小时仿真交易、远程策略调试和策略分享。\\n底层由C++实现,支持多核CPU并行计算,回测速度极快。\\n支持Python和VBA等多种编程语言,适合有一定编程基础的投资者。\\n劣势:\\n技术门槛相对较高,需要投资者有一定的编程经验。\\n在本地电脑运行,用户的电脑必须保持开机状态,策略才能持续运行。\\n二、恒生PTrade\\n优势:\\n提供策略编写、回测…","guid":"https://www.zhihu.com/question/29494131/answer/111894653913","author":"慧眼识牛","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T07:43:00.678Z","media":[{"url":"https://pic1.zhimg.com/v2-404170928472f2fe03b3db7d8afe61c1.jpg","type":"photo","width":709,"height":366,"blurhash":"LCNiK=|^S#,sF{JRxabbHsa#aenj"},{"url":"https://pica.zhimg.com/v2-04ec6bf5b2a4c47aa621dac2c3ca6987.jpg","type":"photo","width":1120,"height":1532,"blurhash":"LRLhrut9J6xvXVofockA~Ps.NIoK"},{"url":"https://pic1.zhimg.com/v2-e3c127d30bb593e107da7d1574ab0256.jpg","type":"photo","width":527,"height":208,"blurhash":"L9Q;i?-4tP]-7%idrtS4hzXmWWn%"},{"url":"https://picx.zhimg.com/v2-48e4e07ef4976f738e2e2f475d924860.jpg","type":"photo","width":526,"height":178,"blurhash":"LBOpe=~U?Z_0?HxXjYjr=SxWoJt5"},{"url":"https://pic1.zhimg.com/v2-6864d0bb1ae7b79465558b4942f61d28.jpg","type":"photo","width":1440,"height":1868,"blurhash":"LHRo{ZIpIp?^%MDOTdXm8wIoM{o#"},{"url":"https://picx.zhimg.com/v2-8c103a828be3a05591dd7a9f4736cad2.jpg","type":"photo","width":576,"height":275,"blurhash":"LFOyRl?G^j%1N3a}NIR+0hRlIpjc"},{"url":"https://pica.zhimg.com/v2-4f689aa6564a159110fb6c221e20879e.jpg","type":"photo","width":749,"height":199,"blurhash":"LPN^YlWAWAt7%jWBaet7tARjWBof"},{"url":"https://pic1.zhimg.com/v2-8c103a828be3a05591dd7a9f4736cad2.jpg","type":"photo","width":576,"height":275,"blurhash":"LFOyRl?G^j%1N3a}NIR+0hRlIpjc"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 基本统计分析","url":"https://zhuanlan.zhihu.com/p/26786196094","content":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。完整R语言教程和测试数据可见: R语言基础学习手册 7.1 描述性统计分析总体反应 连续型变量的中心趋势、变化性和分布形状的分析方法。7.1.1 基本方法1) summary()函数:提供数值型变量的max,min,mean,四分位数;…","description":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。完整R语言教程和测试数据可见: R语言基础学习手册 7.1 描述性统计分析总体反应 连续型变量的中心趋势、变化性和分布形状的分析方法。7.1.1 基本方法1) summary()函数:提供数值型变量的max,min,mean,四分位数;…","guid":"https://zhuanlan.zhihu.com/p/26786196094","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T06:59:07.917Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-伴君读的回答:所谓爱情,不在于多么光鲜亮丽地示爱,毕竟所爱之人不是全世界,只要让所爱的人知道就好。 [图片] [图片] 爱情...","url":"https://www.zhihu.com/question/580956751/answer/111841917938","content":"能否分享一些让你豁然开朗的句子?所谓爱情,不在于多么光鲜亮丽地示爱,毕竟所爱之人不是全世界,只要让所爱的人知道就好。
爱情也不只是漂浮于生活之上,那种爱情如风如云,稍纵即逝,真正的爱情应该还生活以原貌,柴米油盐酱醋茶终是深情。 杨绛
","description":"能否分享一些让你豁然开朗的句子? 伴君读的回答\\n\\n\\n所谓爱情,不在于多么光鲜亮丽地示爱,毕竟所爱之人不是全世界,只要让所爱的人知道就好。\\n\\n\\n\\n\\n爱情也不只是漂浮于生活之上,那种爱情如风如云,稍纵即逝,真正的爱情应该还生活以原貌,柴米油盐酱醋茶终是深情。 杨绛","guid":"https://www.zhihu.com/question/580956751/answer/111841917938","author":"伴君读","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T06:48:07.995Z","media":[{"url":"https://picx.zhimg.com/v2-14d3c40e0651f0034182e96be6b1bb6d.jpg","type":"photo","width":1228,"height":2287,"blurhash":"LZDJkDbu0OxZXMV[o2j=0ii|?DS4"},{"url":"https://picx.zhimg.com/v2-c06821a0f43496e4828033d7e6d4fb0f.jpg","type":"photo","width":1216,"height":2302,"blurhash":"LRDKSO?cVxjc_L%NnnogMwWBo#kA"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"跟着 Cell 学做图| 柱状图+误差线+显著性标记","url":"https://zhuanlan.zhihu.com/p/26697995180","content":"[图片] 本期图片 [图片] Doi:https://doi.org/10.1016/j.cell.2024.12.016 复现结果 [图片] 代码主体部分由R1、Grok3、o3-mini-high生成。3 个大模型在显著性检验的添加上都使用了 stat_compare_means(),且都错了。感兴趣的读者可以自行尝试。使用代码时请按需修改,切勿全部套用。 示例数据和代码领取木舟笔记永久VIP企划 权益:木舟笔记所有推文示例数据及代码(在VIP群里实时更新)。 [图片] 木舟笔记科研交流群。 跟着 Cell 学做图| 柱状图+误差线+显著性标记 绘图跟着 Cell …","description":"[图片] 本期图片 [图片] Doi:https://doi.org/10.1016/j.cell.2024.12.016 复现结果 [图片] 代码主体部分由R1、Grok3、o3-mini-high生成。3 个大模型在显著性检验的添加上都使用了 stat_compare_means(),且都错了。感兴趣的读者可以自行尝试。使用代码时请按需修改,切勿全部套用。 示例数据和代码领取木舟笔记永久VIP企划 权益:木舟笔记所有推文示例数据及代码(在VIP群里实时更新)。 [图片] 木舟笔记科研交流群。 跟着 Cell 学做图| 柱状图+误差线+显著性标记…","guid":"https://zhuanlan.zhihu.com/p/26697995180","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T02:39:20.394Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-笨ben的回答:[图片] 裂缝里的光 深秋清晨的冷雨里,我机械性地撑伞走向地铁站。连续三个月被驳回的方案、父亲突然住院的消息...","url":"https://www.zhihu.com/question/580956751/answer/111567565585","content":"能否分享一些让你豁然开朗的句子?裂缝里的光
深秋清晨的冷雨里,我机械性地撑伞走向地铁站。连续三个月被驳回的方案、父亲突然住院的消息、以及昨夜房东的催租短信,像浸透雨水的棉絮堵在胸口。柏油路面的积水倒映着灰蒙蒙的天空,行道树残叶打着旋贴上我的裤脚。
转角处的社区图书馆亮着暖黄灯光。鬼使神差地,我推开了那扇挂着\\"晨间读书会\\"木牌的玻璃门。水珠顺着伞骨滴落在地砖上,发出轻微的啪嗒声。空气里漂浮着现磨咖啡豆的香气,混合着旧书特有的干燥味道。
靠窗的胡桃木书架前,泛着毛边的《不安之书》突然滑落。弯腰捡拾时,夹在书页间的银杏叶书签飘落,焦褐叶脉间有行蓝墨水小字:\\"生命裂开的缝隙,都是光照进来的形状\\"。我的手指突然颤抖起来,咖啡杯在托盘上发出清脆的磕碰声。
落地窗外,阴云裂开细窄的金边。晨光像融化的蜂蜜淌过书页,某个孩子清脆的笑声穿透雨幕。当我发现自己在用指尖反复摩挲那句手写体时,雨伞早已遗忘在门边的藤编筐里,而玻璃上的雾气正勾勒出枝桠状的光痕。
当你老了,回顾一生,就会发觉:
什么时候出国读书,什么时候决定做第一份职业。何时选定了对象恋爱,什么时候结婚。
其实都是命运的巨变。
只是当时站在三岔路口,眼见风云千樯。
你作出抉择的那一日,在日记上,相当沉闷和平凡。
当时还以为是生命中普通的一天。
——陶杰《杀鹌鹑的少女》
","description":"能否分享一些让你豁然开朗的句子? just.的回答\\n\\n\\n当你老了,回顾一生,就会发觉:\\n\\n什么时候出国读书,什么时候决定做第一份职业。何时选定了对象恋爱,什么时候结婚。\\n\\n其实都是命运的巨变。\\n\\n只是当时站在三岔路口,眼见风云千樯。\\n\\n你作出抉择的那一日,在日记上,相当沉闷和平凡。\\n\\n当时还以为是生命中普通的一天。\\n\\n——陶杰《杀鹌鹑的少女》","guid":"https://www.zhihu.com/question/580956751/answer/111472873539","author":"just.","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-27T00:15:25.423Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-尘梦的回答:1. 既然是梦想,不妨叫它完美些罢,何必连梦想也那么拘谨那么谦虚呢。 2. 我常觉得这中间有着宿命的味道:仿佛这...","url":"https://www.zhihu.com/question/580956751/answer/111340642937","content":"能否分享一些让你豁然开朗的句子?1. 既然是梦想,不妨叫它完美些罢,何必连梦想也那么拘谨那么谦虚呢。
2. 我常觉得这中间有着宿命的味道:仿佛这古园就是为了等我,而历尽沧桑在那儿等待了四百多年。
3. 人真正的名字叫作:欲望。
4. 我什么也没忘,只是有些事适合收藏。不能说,不能想,却又不能忘。
5. 人有时候只想独自静静地呆一会,悲伤也成享受。
6. 死是一件无须乎着急去做的事,是一件无论怎样耽搁也不会错过了的事,一个必然会降临的节日。
7. 人不是苟死苟活的物类,不是以过程的漫长为自豪,而是以过程的精彩、尊贵和独具爱愿为骄傲的。
8. 人与上帝间有着永恒的距离,这很要紧。否则信仰之神一旦变成尘世的权杖,希望的解释权一旦落到哪位强徒手中,就怕要惹祸了。
9. 人可能舍弃一切,却无法舍弃被理解的渴望。
10. 人有一种坏习惯,记得住倒霉,记不住走运,这实在有失厚道。
11. 不能走远路却有辽阔的心。
12. 人所不能者,即是限制,即是残疾。
13. 残缺就是孤独,寻求弥补就是要摆脱孤独。当一个孤独寻找另一个孤独时,便有了爱的欲望。
14. 时间限制了我们,习惯限制了我们,谣言般的舆论让我们陷于实际,让我们在白昼的魔法中闭目塞听不敢妄为。
15. 人与人之间,最可痛心的事莫过于在你认为应当获得理解的时候,却遭受了不理解。
16. 人活着,就总要活出一些超越肉身的东西,否则就白活了。
17. 人真正的名字叫作:欲望。
18. 人活着,就总要活出一些超越肉身的东西,否则就白活了。
19. 人活着,就总要活出一些超越肉身的东西,否则就白活了。
20. 人活着,就总要活出一些超越肉身的东西,否则就白活了。
1.乾坤未定,你我皆是黑马。
2.同是寒窗苦读,怎愿甘拜下风。
3.没有意义的情绪,就戴上耳机。
4.如果运气不好,那就试试勇气。
5.兴趣是最好的老师,其次是耻辱。
6.道不同不相为谋,人贵在有自知之明。
7.不想被别人否定,自己就要更加努力。
8.你未来的样子藏在你现在的努力里。
9.人类怎么发现新的世界,是因为走错了路。
10.有足够的实力,原则和底线才会被尊重。
11.人生是自己的,所以要亲自做最好的自己
12.生活明朗,万物可爱。人间值得,未来可期
13.鹤立鸡群,倍受排挤,你可以选择离开鸡群。
14.没人嘲笑你的梦想,他们只是嘲笑你的实力。
15.吾辈皆身处沟渠之中,然其必有仰望星空者也。
♡这句话值得一个赞不!
16.使唐僧成为唐僧的不是经书,是那条取经的路
17.种一棵树,最好的时间是十年前,其次是现在。
18.生活会辜负努力的人,但不会辜负一直努力的人。
19.我希望你耳不闻人之非,目不视人之短,口不言人之过。
20.当你越来越优秀的时候,就会遇到越来越好的人。
21.能走出雨季的,从来不是伞,而是不惧蹚湿的自己。
22.在这个世界上只有伤心的理由,没有沉沦的借口。
23.我跑啊跑啊,就是为了追上那个曾经被赋予众望的自己。
24.先干起来,逢山开路,遇水搭桥,有什么问题解决什么问题。
25.在满地都是六便士的大街上,希望你能看到天上的月亮。
26.身无饥寒,父母无愧于我;人无长进,我以何待父母。
27.第一个青春是上帝给的;第二个的青春是靠自我发奋的。
28.懒,是一个很好的理由,说得好像你努力就能有多优秀一样。
29.别动不动就把问题交给时间来证明,时间才懒得理你这个烂摊子。
30.愚者认命,庸者拼命,智者改命,记住你要做智者,你可以改变自己命运。
♡如果文案有触动到你的话,可以双击屏幕点个赞再去看后面的哦
31.风可以吹起一张白纸,却无法吹走一只蝴蝶,因为生命的力量在于不顺从。
32.昨日种种,皆成今我,切莫思量,更莫哀:从今往后,怎么收获,怎么栽。
33.一定要加倍努力变得优秀,等到哪天遇到对的人才不会显得狼狈不堪,毫无准备。
34.不合适就是穷,没感觉就是丑,一见钟情就是好看,深思熟虑就是有钱,这就是现实。
35.人与人之间,哪来的什么般配,唯有成长与成长之间,才能一直般配,万物,皆以成长来般配。
36.你要克服的是你的虚荣心,是你的炫耀欲,你要对付的是你时刻想要出风头的小聪明。
37.把圈子变小,把语言变干净,把成绩往上提,把故事往心里收一收,现在想要的以后你都会有。
38.你以为你感动了全世界,其实你只是温暖了自己,没有过不去的事情,只有过不去的心情。
39.凡事总有过去的时候,回头看劫后余生的自己,原来万物皆有裂痕,那是光照进来的地方。
40.我始终相信这日益凉薄的尘世依旧长存着几多坚韧的温情,折不断浇不灭 冻不裂烧不化,也祝你有好运气。
41.苦难既然把我推到了悬崖的边缘,那么就让我坐下来,顺便看看悬崖下的流岚雾霭,唱支歌给你听。
42.能够说出的委屈便不算委屈,能够抢走的爱人便不算爱人,爱别人不如爱自己,至少自己会对自己不离不弃。
43.你与别人花费一样的时间,因为别人用心,而你吊儿郎当,所以到了最后检验成果的时候,别人成功,而你除了赔了时间之后,一无所得。
44.人生会计较的事多了去了,如果要计划哪一辈子才计较得完呀,还不如把心放宽,宽的像大海一样宽,而且一天比一天更宽,宽到就像大海懒得跟小鱼计较。
45.当你厌恶你身边的人,你表达厌恶最好的方式不是和他们争吵,而是自己勤快点儿,加把劲离开他们,那样,他们就永远从你的生活中消失,和死了差不多。
46.头等舱可以优先登机 银行VIP可以不用排队 演唱会最贵的票位置也最好 世界从不平等,你有多努力,就有多特殊。请记住我的名字,和我带给你的故事。
47.我们总要走一条路,无论它是曲折的还是笔直的,无论它有多少路口和拐弯,你害怕也好,孤独也罢,都要迈开双脚,一步步的走下去。每一步,都迎向长大。
48.你努力了,成绩没有多大改观,这并不能证明你没用,而是代表你在赎罪,毕竟你总得为过去的懒散付出代价;这时候你应该更加努力,欠的账总会还完的,日子总会阳光明媚的。
49.我希望你读很多书,走很远的路;我希望你爱很多人,也被很多人爱;我希望你走过人山人海,也遍览山河湖海;我希望你看纸质书,送手写的祝福;我要你独立坚强温暖明亮,我要你在这寡淡的世上,深情的活。
50.现在能陪你走的人越来越少了,你也要学会自己独自出发,你可以努力让自己变成谁的光,变为谁冬天里的暖阳,夏天里的冰镇西瓜汁,深秋时的大衣,春暖花开时的好心情,但是别再让人成为你停下脚步的理由,也别再为谁走回头路。
♡感谢你在千千万万个回答中点开了我的,如果觉得这些句子不错可以点赞收藏吖~
(图片和文案均来自网络,侵删~)
♡你好呀,我是kiki,专注于提升自己/致力于分享优质文案/学习方法/写作,坚持日更,愿我们温柔且上进,自律且清醒,一起向上生长,向下扎根,过自己想过的100种生活,期待你的点赞+关注吖
","description":"能否分享一些让你豁然开朗的句子? KiKi同学的回答\\n\\n\\n1.乾坤未定,你我皆是黑马。\\n\\n2.同是寒窗苦读,怎愿甘拜下风。\\n\\n3.没有意义的情绪,就戴上耳机。\\n\\n4.如果运气不好,那就试试勇气。\\n\\n5.兴趣是最好的老师,其次是耻辱。\\n\\n6.道不同不相为谋,人贵在有自知之明。\\n\\n7.不想被别人否定,自己就要更加努力。\\n\\n8.你未来的样子藏在你现在的努力里。\\n\\n9.人类怎么发现新的世界,是因为走错了路。\\n\\n10.有足够的实力,原则和底线才会被尊重。\\n\\n11.人生是自己的,所以要亲自做最好的自己\\n\\n12.生活明朗,万物可爱。人间值得,未来可期\\n\\n13.鹤立鸡群,倍受排挤,你可以选择离开鸡群。\\n\\n14.没人嘲笑你的梦想…","guid":"https://www.zhihu.com/question/580956751/answer/111254269977","author":"KiKi同学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T13:34:18.861Z","media":[{"url":"https://picx.zhimg.com/v2-bcb61bbe1bdcf07dba9945c85b7b49e3.jpg","type":"photo","width":700,"height":706,"blurhash":"LLJa$QEMcY~p9b?vtl-;t+-p_34."},{"url":"https://pic1.zhimg.com/v2-f45c73d50f85b8f272fd7fba2547f2a3.jpg","type":"photo","width":700,"height":700,"blurhash":"LLLg*E_3K9-=01tS.99FKjD%={Ri"},{"url":"https://picx.zhimg.com/v2-df43cd75f0ab3c613bee513d918bd043.jpg","type":"photo","width":700,"height":681,"blurhash":"LWJt-s~qXURjIpD%-;xtR*o0xafk"},{"url":"https://picx.zhimg.com/v2-833440ad82e7bba4040aae830319534b.jpg","type":"photo","width":690,"height":695,"blurhash":"LOJkJ?ES5YIUDgR3?HIoA0IW~V-."},{"url":"https://picx.zhimg.com/v2-c2a9b4b26ce6c43a2fb1f9ee6e4aff19.jpg","type":"photo","width":700,"height":699,"blurhash":"LhJHp-V@0KR*9ZxuRPRjbvkCxuRj"},{"url":"https://picx.zhimg.com/v2-dc7dd79bc3ec93da12d433154d6beca9.jpg","type":"photo","width":700,"height":700,"blurhash":"LMI}ks?u0fIAHqS4K6%1D*RPkWoz"},{"url":"https://pic1.zhimg.com/v2-7dd0a358c36723e77921ea72285d80c4.jpg","type":"photo","width":700,"height":700,"blurhash":"LdJto2?HE1%M01IUofM{S#bbRjoL"},{"url":"https://pic1.zhimg.com/v2-6218b77c3ff4c6acd87030ccb674ce9a.jpg","type":"photo","width":690,"height":690,"blurhash":"LpMj:hRi~q-=nioz%MjENGay%2WC"},{"url":"https://picx.zhimg.com/v2-0c649ecf94e4652d6d247b4c4093f74b.jpg","type":"photo","width":700,"height":700,"blurhash":"LWM%s8tR_N-pR*-;?bj[X9j?%MM{"},{"url":"https://picx.zhimg.com/v2-2a4a60d00f03101ee9bd85c4f5d11d68.jpg","type":"photo","width":700,"height":700,"blurhash":"LsKw%,~qx]bI%MtR%Mt6tRoL%2IU"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-艰苦奋斗的回答:1、不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。 2、人...","url":"https://www.zhihu.com/question/580956751/answer/111215813270","content":"能否分享一些让你豁然开朗的句子?1、不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。
2、人生哪有什么两全之策,短短百年不过是教人取舍罢了。手持烟火以谋生,且平且忘且随风,且行且看且从容。
3、宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。
4、岁月本长,而忙者自促;天地本宽,而鄙者自隘;风花雪月本闲,而扰攘者自冗。
5、这世间有太多的猝不及防,有些东西根本不配占有你情绪,人生就是一场体验,请你尽兴。
6、在所谓的人世间摸爬滚打至今,我唯一愿意视为真理的,就只有这一句话:一切都会过去的。
7、当我开始真正爱自己,我不再牺牲自己的自由时间,不再去勾画什么宏伟的明天,今天我只做有趣和快乐的事,做自己热爱、让心欢喜的事,用我的方式,以我的旋律。
","description":"能否分享一些让你豁然开朗的句子? 艰苦奋斗的回答\\n\\n\\n1、不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。\\n\\n2、人生哪有什么两全之策,短短百年不过是教人取舍罢了。手持烟火以谋生,且平且忘且随风,且行且看且从容。\\n\\n3、宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。\\n\\n4、岁月本长,而忙者自促;天地本宽,而鄙者自隘;风花雪月本闲,而扰攘者自冗。\\n\\n5、这世间有太多的猝不及防,有些东西根本不配占有你情绪,人生就是一场体验,请你尽兴。\\n\\n6、在所谓的人世间摸爬滚打至今,我唯一愿意视为真理的,就只有这一句话:一切都会过去的。\\n\\n7…","guid":"https://www.zhihu.com/question/580956751/answer/111215813270","author":"艰苦奋斗","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T12:38:50.561Z","media":[{"url":"https://picx.zhimg.com/v2-88a830bc422c17052b7cd0ad9edd9042.jpg","type":"photo","width":750,"height":400,"blurhash":"LaJG~BEM00xuX9xZWVt7n3bc%Mod"},{"url":"https://picx.zhimg.com/v2-c08169503d606d7b9298c8ee65397147.jpg","type":"photo","width":750,"height":400,"blurhash":"LoG*81S1NGNGNZt7R%ay0xs:xas:"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"多层中介分析","url":"https://zhuanlan.zhihu.com/p/26603604126","content":"Vol.1 引言 1.1 什么是多层中介分析?多层中介分析(Multilevel Mediation Analysis)是一种统计方法,用于研究嵌套数据结构中变量之间的中介效应。嵌套数据结构指的是数据中的个体(如学生)嵌套在更大的群体(如班级或学校)中,群体再嵌套在更大的单位(如地区或国家)中。这种方法不仅可以考察个体层面的中介效应,还可以探讨群体层面的中介效应,从而揭示更加复杂和全面的关系。 1.2 为什么使用多层中介分析?在现实世界中…","description":"Vol.1 引言 1.1 什么是多层中介分析?多层中介分析(Multilevel Mediation Analysis)是一种统计方法,用于研究嵌套数据结构中变量之间的中介效应。嵌套数据结构指的是数据中的个体(如学生)嵌套在更大的群体(如班级或学校)中,群体再嵌套在更大的单位(如地区或国家)中。这种方法不仅可以考察个体层面的中介效应,还可以探讨群体层面的中介效应,从而揭示更加复杂和全面的关系。 1.2 为什么使用多层中介分析?在现实世界中…","guid":"https://zhuanlan.zhihu.com/p/26603604126","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T11:05:31.473Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 基因ID的转换(ENSEMBL-ENTREZ-SYMBOL)","url":"https://zhuanlan.zhihu.com/p/26555116133","content":"clusterProfiler包 library(clusterProfiler) s2ens = bitr(symbol_id, fromType=\\"SYMBOL\\", toType=\\"ENSEMBL\\", OrgDb=\\"org.Hs.eg.db\\") genelist = s2ens[,2]2. org.Hs.eg.db library(org.Hs.eg.db) k = keys(org.Hs.eg.db,keytype = \\"ENSEMBL\\") list = select(org.Hs.eg.db,keys=k,columns = c(\\"ENTREZID\\",\\"SYMBOL\\"), keytype=\\"ENSEMBL\\") #提取对应的所有Gene ID(ENTREZID),以及Symbol (40102,3) > head(list) ENSEMBL ENTREZID…","description":"clusterProfiler包 library(clusterProfiler) s2ens = bitr(symbol_id, fromType=\\"SYMBOL\\", toType=\\"ENSEMBL\\", OrgDb=\\"org.Hs.eg.db\\") genelist = s2ens[,2]2. org.Hs.eg.db library(org.Hs.eg.db) k = keys(org.Hs.eg.db,keytype = \\"ENSEMBL\\") list = select(org.Hs.eg.db,keys=k,columns = c…","guid":"https://zhuanlan.zhihu.com/p/26555116133","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T08:22:56.531Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"inferCNV的报错","url":"https://zhuanlan.zhihu.com/p/26528517692","content":"[图片] 在运行inferCNV时,到了第十五步,出现以下报错: [图片] 处理方法很简单,如下: [图片] 在跑infercnv::run之前加入:options(scipen=100),然后就解决了。","description":"[图片] 在运行inferCNV时,到了第十五步,出现以下报错: [图片] 处理方法很简单,如下: [图片] 在跑infercnv::run之前加入:options(scipen=100),然后就解决了。","guid":"https://zhuanlan.zhihu.com/p/26528517692","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T08:10:53.854Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"sparkr中对分组数据使用自定义的函数?-数据小栗子的回答:一、引言在大数据处理中,Apache Spark 作为一款强大的数据处理框架,提供了丰富的内置函数。然而,在...","url":"https://www.zhihu.com/question/51713595/answer/110979790968","content":"sparkr中对分组数据使用自定义的函数?在大数据处理中,Apache Spark 作为一款强大的数据处理框架,提供了丰富的内置函数。然而,在实际开发中,这些内置函数往往无法满足所有的业务需求。为了弥补这一不足,Spark 允许用户通过自定义函数来扩展其功能。本文将从引言、背景、概念、原理、源码分析、具体实践、总结展望等方面全面介绍 Spark 自定义函数,帮助读者深入理解并掌握这一重要技术。
tips: 后续还会不断更新,辛苦喜欢的朋友点赞关注,一起学习一起进步!
sqrt
、concat
、window
等,由Catalyst优化器深度优化3.1.1 核心原理
UDF 的本质是将用户定义的函数逻辑嵌入 Catalyst 优化器的表达式树中。
执行流程:
FunctionRegistry
。ScalarSubquery
或 UserDefinedExpression
。Invoke
表达式,通过反射调用用户函数。3.1.2 源码解析
SparkSession.udf.register
ScalaUDF
封装用户函数逻辑和输入表达式。CatalystTypeConverters
)导致额外开销。3.1.3 优化缺陷
WholeStageCodegen
优化,生成独立的 Java 类:// 生成的代码示例(简化)\\npublic Object eval(InternalRow input) {\\n Object arg1 = input.getInt(0);\\n return udf12345.evaluate(arg1); // 反射调用\\n}
3.2.1 核心原理
UDAF 通过分布式聚合实现,分为 Partial(局部聚合)、Merge(合并中间结果)、Final(全局计算)三个阶段。
3.2.2 源码解析
UserDefinedAggregateFunction
(旧API)或 Aggregator
(新Dataset API)// 源码路径:org.apache.spark.sql.expressions.Aggregator\\ntrait Aggregator[-IN, BUF, OUT] extends Serializable {\\n def zero: BUF // 初始化缓冲区\\n def reduce(b: BUF, a: IN): BUF // 局部聚合\\n def merge(b1: BUF, b2: BUF): BUF // 合并缓冲区\\n def finish(b: BUF): OUT // 生成最终结果\\n}
// 源码路径:org.apache.spark.sql.catalyst.encoders.Aggregator\\nval aggExpr = TypedAggregateExpression(\\n aggregator.asInstanceOf[Aggregator[Any, Any, Any]], \\n inputDeserializer, \\n inputEncoder)
// 源码路径:org.apache.spark.sql.execution.aggregate.HashAggregateExec\\ncase class HashAggregateExec(...) extends UnaryExecNode {\\n override def doExecute(): RDD[InternalRow] = {\\n // 生成Map端和Reduce端聚合任务\\n }\\n}
3.2.3 执行流程
graph LR \\nA[输入数据] --\x3e B[Partial聚合: reduce(b, a)] \\nB --\x3e C[Shuffle分区] \\nC --\x3e D[Merge聚合: merge(b1, b2)] \\nD --\x3e E[Final计算: finish(b)]
3.2.4 性能优化点
LongArray
)替代对象,减少 GC 压力。combine
阶段减少 Shuffle 数据量。3.3.1 核心原理
UDTF 通过 LATERAL VIEW
语法展开数据,本质是 将单行输入转换为多行输出。
3.3.2 源码解析
// 源码路径:org.apache.spark.sql.expressions.UserDefinedTableFunction\\nabstract class UserDefinedTableFunction extends Serializable {\\n def inputSchema: StructType\\n def generate(input: Row): TraversableOnce[Row]\\n}
// 源码路径:org.apache.spark.sql.catalyst.plans.logical.Generate\\ncase class Generate(\\n generator: Generator, // UDTF实例\\n unrequiredChildIndex: Seq[Int],\\n outer: Boolean,\\n ...) extends UnaryNode
// 源码路径:org.apache.spark.sql.execution.GenerateExec\\ncase class GenerateExec(\\n generator: Generator,\\n requiredChildOutput: Seq[Attribute],\\n outer: Boolean,\\n ...) extends UnaryExecNode {\\n \\n override def doExecute(): RDD[InternalRow] = {\\n inputRDD.flatMap { row =>\\n generator.generate(row).map(_.toSeq)\\n }\\n }\\n}
3.3.3 性能陷阱
repartition
控制输出分区mapPartitions
替代逐行处理函数类型 | 优化重点 | 典型耗时(1亿数据) |
---|---|---|
UDF | 避免闭包捕获,使用原生类型 | 120s → 45s |
UDAF | 缓冲区内存管理,预聚合 | 200s → 80s |
UDTF | 控制输出数据分布,避免OOM | 300s → 150s |
优化工具:
案例1:手机号脱敏(Python UDF → Scala UDF优化)
场景:对10亿条用户手机号进行脱敏(如 13812345678
→ 138****5678
)。
初始方案(Python UDF):
# 注册Python UDF\\ndef mask_phone(phone: str) -> str:\\n return phone[:3] + \\"****\\" + phone[-4:]\\nspark.udf.register(\\"mask_phone\\", mask_phone)\\n\\n# 执行\\ndf.select(mask_phone(col(\\"phone\\")).show()
问题:
优化方案(Scala UDF + 字符串操作优化):
// 注册Scala UDF\\nval maskPhoneUDF = udf { (phone: String) =>\\n if (phone != null && phone.length == 11) \\n s\\"${phone.substring(0,3)}****${phone.substring(7)}\\"\\n else phone\\n}\\n\\n// 使用\\ndf.select(maskPhoneUDF(col(\\"phone\\")).show()
优化效果:
案例2:经纬度距离计算(避免闭包捕获)
场景:计算用户位置与固定坐标(如 (30.26, 120.19)
)的距离。
错误写法(捕获外部变量):
val targetLat = 30.26\\nval targetLng = 120.19\\n\\n// UDF捕获外部变量targetLat/targetLng,触发闭包序列化\\nval distanceUDF = udf { (lat: Double, lng: Double) =>\\n Math.sqrt(Math.pow(lat - targetLat, 2) + Math.pow(lng - targetLng, 2))\\n}
问题:
targetLat
和targetLng
,广播机制失效。Serialization stack trace
警告。优化方案(硬编码或广播变量):
// 方案1:硬编码到UDF内部\\nval distanceUDF = udf { (lat: Double, lng: Double) =>\\n val targetLat = 30.26 // 直接内联\\n val targetLng = 120.19\\n Math.sqrt(Math.pow(lat - targetLat, 2) + Math.pow(lng - targetLng, 2))\\n}\\n\\n// 方案2:广播变量(适用于动态目标)\\nval targetBC = spark.sparkContext.broadcast((30.26, 120.19))\\nval distanceUDF = udf { (lat: Double, lng: Double) =>\\n val (targetLat, targetLng) = targetBC.value\\n Math.sqrt(Math.pow(lat - targetLat, 2) + Math.pow(lng - targetLng, 2))\\n}
优化效果:
案例3:会话窗口统计(优化缓冲区设计)
场景:计算用户会话时长(相邻事件间隔<30分钟为一个会话)。
初始方案(基于集合的缓冲区):
class SessionUdaf extends UserDefinedAggregationFunction {\\n def inputSchema = new StructType().add(\\"timestamp\\", LongType)\\n def bufferSchema = new StructType().add(\\"events\\", ArrayType(LongType)) // 存储所有时间戳\\n def dataType = DoubleType\\n\\n def update(buffer: MutableAggregationBuffer, input: Row): Unit = {\\n buffer.update(0, buffer.getAs[Seq[Long]](0) :+ input.getAs[Long](0))\\n }\\n\\n def merge(buffer1: MutableAggregationBuffer, buffer2: Row): Unit = { \\n buffer1.update(0, buffer1.getAs[Seq[Long]](0) ++ buffer2.getAs[Seq[Long]](0))\\n }\\n\\n def evaluate(buffer: Row): Double = {\\n val sorted = buffer.getAs[Seq[Long]](0).sorted\\n // 计算会话逻辑(略)\\n }\\n}
问题:
优化方案(流式处理 + 仅保留必要状态):
case class SessionBuffer(lastTime: Long, currentSession: Long)\\n\\nclass OptimizedSessionUdaf extends Aggregator[Long, SessionBuffer, Double] {\\n def zero: SessionBuffer = SessionBuffer(-1, 0L)\\n\\n def reduce(b: SessionBuffer, a: Long): SessionBuffer = {\\n if (b.lastTime == -1) SessionBuffer(a, 0)\\n else {\\n val diff = a - b.lastTime\\n val newSession = if (diff > 30 * 60 * 1000) b.currentSession + 1 else b.currentSession\\n SessionBuffer(a, newSession)\\n }\\n }\\n\\n def merge(b1: SessionBuffer, b2: SessionBuffer): SessionBuffer = {\\n // 合并逻辑(略)\\n }\\n\\n def finish(b: SessionBuffer): Double = b.currentSession.toDouble\\n}
优化效果:
案例4:JSON数组展开(控制数据膨胀)
场景:解析用户行为JSON数组(单行可能包含1000+子元素)。
错误写法(直接展开):
class ExplodeJsonUdft extends UDTF {\\n def process(json: String): Unit = {\\n val items = parseJsonArray(json) // 解析得到List[String]\\n items.foreach(item => forward(item))\\n }\\n}\\n\\n// 使用\\nspark.sql(\\"SELECT EXPLODE_JSON(logs) FROM user_behavior\\")
问题:
优化方案(分块处理 + 控制输出速率):
class OptimizedExplodeJsonUdft extends UDTF {\\n private val batchSize = 100 // 每批处理100条\\n\\n def process(json: String): Unit = {\\n val items = parseJsonArray(json).grouped(batchSize)\\n items.foreach { batch =>\\n forward(batch.mkString(\\",\\")) // 输出批次数据\\n }\\n }\\n}\\n\\n// 后续步骤\\nspark.sql(\\"\\"\\"\\n SELECT item \\n FROM (\\n SELECT EXPLODE_JSON(logs) AS batch \\n FROM user_behavior\\n ) LATERAL VIEW EXPLODE(split(batch, \',\')) t AS item\\n\\"\\"\\")
优化效果:
陷阱1:UDF中的隐式类型转换
问题现象:
udf((s: String) => s.toInt / 1000) // 若s非数字则抛NPE
解决方案:
udf((s: String) => Try(s.toInt / 1000).getOrElse(0))
陷阱2:UDAF缓冲区设计不当
问题现象:
java.util.ArrayList
作为缓冲区,导致 序列化失败。ArrayType
、MapType
)。Encoder
自定义序列化。陷阱3:UDTF数据倾斜
问题现象:
WHERE size(json_array) < 100
。df.withColumn(\\"bucket\\", pmod(hash(col(\\"user_id\\")), 100))\\n .repartition(100, col(\\"bucket\\"))
陷阱4:Python UDF性能黑洞
场景:Python UDF处理100GB数据耗时长达3小时。
优化方案:
from pyspark.sql.functions import pandas_udf\\n\\n@pandas_udf(\\"double\\")\\ndef pandas_udf_example(s: pd.Series) -> pd.Series:\\n return s * 0.8 + 32 # 向量化操作
优化方向 | 具体手段 | 预期收益 |
---|---|---|
减少数据移动 | 使用Broadcast Join搭配UDF | 减少Shuffle 50%+ |
内存管理 | UDAF缓冲区改用原生数组(非集合类) | 降低GC时间30% |
计算本地化 | 预处理数据,减少UDF调用次数 | 缩短CPU时间40% |
资源控制 | 限制UDTF输出行数(如LIMIT子句) | 避免OOM |
当你可以用内置函数实现时,永远不要用UDF;","description":"sparkr中对分组数据使用自定义的函数? 数据小栗子的回答\\n\\n一、引言\\n\\n在大数据处理中,Apache Spark 作为一款强大的数据处理框架,提供了丰富的内置函数。然而,在实际开发中,这些内置函数往往无法满足所有的业务需求。为了弥补这一不足,Spark 允许用户通过自定义函数来扩展其功能。本文将从引言、背景、概念、原理、源码分析、具体实践、总结展望等方面全面介绍 Spark 自定义函数,帮助读者深入理解并掌握这一重要技术。\\n\\ntips: 后续还会不断更新,辛苦喜欢的朋友点赞关注,一起学习一起进步!\\n\\n二、背景\\n2.1 Spark SQL函数体系\\n内置函数:sqrt…","guid":"https://www.zhihu.com/question/51713595/answer/110979790968","author":"数据小栗子","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T07:47:44.347Z","media":[{"url":"https://picx.zhimg.com/v2-1113857a6ffe0bd0259b783bd16f0c4d.jpg","type":"photo","width":978,"height":382,"blurhash":"L9RfkB~qIU~q~qayM{t7%MRjRjof"},{"url":"https://pic1.zhimg.com/v2-3708c6f20ef2f70ee90e76ace353ceb3.jpg","type":"photo","width":1174,"height":290,"blurhash":"L268N*xv%M%NxvogRjWB4moMWBIU"},{"url":"https://pic1.zhimg.com/v2-4e43be475eb4d6cf66dce843952bb245.jpg","type":"photo","width":1182,"height":534,"blurhash":"L15Y1%WX9EIU%O%NM_Rj4T%Nt7of"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-without sighing的回答:很难,因为很多好用的包都是R写的,而且没人移植","url":"https://www.zhihu.com/question/620095226/answer/110552861599","content":"Python 在将 R 绞杀至死吗 ?
当你必须用UDF时,把它当作性能热点的候选;
当你优化UDF时,记住数据本地性比算法优化更重要。
很难,因为很多好用的包都是R写的,而且没人移植
","description":"Python 在将 R 绞杀至死吗 ? without sighing的回答\\n\\n\\n很难,因为很多好用的包都是R写的,而且没人移植","guid":"https://www.zhihu.com/question/620095226/answer/110552861599","author":"without sighing","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-26T00:29:05.667Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在业余时学数据分析?-超级萝卜的回答:「本答案适用于几乎所有职场老实人。如果能读进去,那你未来大概率活得很爽。」 [图片] 小实花三天做出完美的促销分...","url":"https://www.zhihu.com/question/22119753/answer/110470468634","content":"如何在业余时学数据分析?「本答案适用于几乎所有职场老实人。如果能读进去,那你未来大概率活得很爽。」
小实花三天做出完美的促销分析报告:数据清洗无死角、模型预测精度98%。
部门会议上,他兴奋地讲解:\\"根据模型,周五促销转化率最高!\\"
市场总监皱眉:\\"周五物流压力大,客服也难调配...\\"
小实坚持:\\"数据不会说谎!\\"
强行推动后:
仓库爆单导致发货延迟
差评率飙升30%
市场部集体加班善后
1. 只盯着电脑屏幕上的数字
2. 觉得\\"专业\\"就是百分百按数据办事
3. 把不同意见当阻力而非线索
4. 用模型准确率自我感动
5. 解决问题=消灭数据异常值
为什么小实坚持周五促销?
因为模型显示周五转化率最高
为什么忽视物流问题?
觉得那不是数据分析师该管的
为什么不提前沟通?
认为专业报告自带说服力
为什么被反对时更固执?
把质疑当成对专业的否定
根源问题:把职场当成数学考试,觉得解对题就该得满分
致命误区:
职场不是数学考卷,没有标准答案
数据是工具,人才是决策者
准确率≠可行性(98%的模型可能带来200%的麻烦)
现实规则:
跨部门协作中,情绪价值占30%决策权重
忽略业务落地的数据方案=纸上谈兵
1. 提前摸底:做分析前先问运营\\"最近仓库有啥头疼事?\\"
2. 包装结论:\\"模型显示周五最优,但考虑到大促经验,建议周四启动预热分流\\"
3. 留后路:准备B方案——\\"如果周五执行,需要增加2名临时分拣员\\"
4. 给面子:把市场总监的顾虑写进报告风险提示栏
系统思维:数据是拼图,不是整幅画
预期管理:先解决人的顾虑,再解决数字问题
风险对冲:用方案弹性换取执行空间
关系存钱:每次协作都在积累信任资产
1. 每天观察1次非数据信号:开会时谁皱眉?谁欲言又止?
2. 给报告加个人性化维度:在结论页增加\\"执行暖心提示\\"栏
3. 每周主动聊1个非技术人员:请客服喝奶茶,了解投诉背后的真问题
老实人(小实):
\\"根据264万条数据验证,周五绝对是最优解,其他方案都是不专业的\\"
(结果:方案被否,人际关系受损)
聪明人:
\\"数据显示周五有潜力,但需要各位战友支持——如果市场部能调整排班,物流部增加临时仓储,我们可以把风险控制在5%以内\\"
(结果:获得资源倾斜,推动跨部门协作)
差异本质:
小实:数据VS人性(对立)
聪明人:数据×人性(共生)
1. 职场不是实验室,干净的数据往往沾着别人的汗水
2. 越是正确的结论,越需要裹上人情味的糖衣
3. 会看Excel的是新手,会看人脸色的才是高手
4. 你的价值不在于多会挖数据,而在于多会填平数据和现实的鸿沟
5. 记住:每次汇报都是在推销自己,而人永远为情绪买单
读完是不是特别受启发~ 点个赞和我击掌~
还有更牛逼的,关注我慢慢看 @超级萝卜
对了,我还给你准备了《老实人逆袭手册》,给你的职场坎坷路保驾护航(●ˇ∀ˇ●)
","description":"如何在业余时学数据分析? 超级萝卜的回答\\n\\n\\n「本答案适用于几乎所有职场老实人。如果能读进去,那你未来大概率活得很爽。」\\n\\n小实花三天做出完美的促销分析报告:数据清洗无死角、模型预测精度98%。\\n\\n部门会议上,他兴奋地讲解:\\"根据模型,周五促销转化率最高!\\"\\n\\n市场总监皱眉:\\"周五物流压力大,客服也难调配...\\"\\n\\n小实坚持:\\"数据不会说谎!\\"\\n\\n强行推动后:\\n\\n仓库爆单导致发货延迟\\n\\n差评率飙升30%\\n\\n市场部集体加班善后\\n\\n\\n\\n\\n小实的行为模式 \\n\\n1. 只盯着电脑屏幕上的数字\\n\\n2. 觉得\\"专业\\"就是百分百按数据办事\\n\\n3. 把不同意见当阻力而非线索\\n\\n4…","guid":"https://www.zhihu.com/question/22119753/answer/110470468634","author":"超级萝卜","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T18:00:36.183Z","media":[{"url":"https://pic1.zhimg.com/v2-9d5f15acc093a3feeadfb6f5ceebb003.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-9e36310299f6aff1e1ff9bd29f009dbf.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-c851a6701cb8a48acccb6289a5d90d44.jpg","type":"photo","width":720,"height":480,"blurhash":"L9Lq-CWZr=T1~T8^_NRiKR_3M_.9"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-第五只猫的回答:你不需要让所有人理解你,只需要让那些‘愿意理解你的人’找到你。 —— 世界很大,但你的能量有限,找到同...","url":"https://www.zhihu.com/question/580956751/answer/110390619178","content":"能否分享一些让你豁然开朗的句子?你不需要让所有人理解你,只需要让那些‘愿意理解你的人’找到你。
—— 世界很大,但你的能量有限,找到同频的5%,远胜于讨好95%的噪音。
","description":"能否分享一些让你豁然开朗的句子? 第五只猫的回答\\n\\n\\n你不需要让所有人理解你,只需要让那些‘愿意理解你的人’找到你。\\n\\n—— 世界很大,但你的能量有限,找到同频的5%,远胜于讨好95%的噪音。","guid":"https://www.zhihu.com/question/580956751/answer/110390619178","author":"第五只猫","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T15:07:28.438Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何比较不同性别网络的桥梁强度?","url":"https://zhuanlan.zhihu.com/p/26354557897","content":"Vol.1 引言本期推文的灵感来自读者在后台的留言: 请问如何比较不同性别的桥接强度呢? [图片] 由于提问所指向的对象并不清晰,不知道是想要比较网络的全局强度还是各个节点间的强度,所以我分两个方面进行了回答。 不过我当时只是说了思路,并没有进行实际代码演示,在写推文时发现第一个思路无法实现,我将详细介绍这两个思路对应的代码,并说明无法实现的原因。 Vol.2 R实现本次代码的演示数据与 如何绘制桥接网络分析? 相同,无法提…","description":"Vol.1 引言本期推文的灵感来自读者在后台的留言: 请问如何比较不同性别的桥接强度呢? [图片] 由于提问所指向的对象并不清晰,不知道是想要比较网络的全局强度还是各个节点间的强度,所以我分两个方面进行了回答。 不过我当时只是说了思路,并没有进行实际代码演示,在写推文时发现第一个思路无法实现,我将详细介绍这两个思路对应的代码,并说明无法实现的原因。 Vol.2 R实现本次代码的演示数据与 如何绘制桥接网络分析? 相同,无法提…","guid":"https://zhuanlan.zhihu.com/p/26354557897","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T12:41:16.457Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【机器学习系列】神经网络算法初谈","url":"https://zhuanlan.zhihu.com/p/26353799047","content":"Vol.1 引言在前几期教程中,我们详解了随机森林算法。但通过对生信文章的学习,其实不难发现预测模型构建与机器学习算法种类繁多,很多构建模型的文章都会构建多个模型,来进行模型比较,最终择优处理数据。所以本次推文我们将继续机器学习的内容,为大家带来神经网络算法的相关知识。 神经网络(Neural network, NN)是一种模仿生物神经网络(动物的中枢神经系统)的结构和功能的数学模型,从而构建函数和近似估计。神经网络主…","description":"Vol.1 引言在前几期教程中,我们详解了随机森林算法。但通过对生信文章的学习,其实不难发现预测模型构建与机器学习算法种类繁多,很多构建模型的文章都会构建多个模型,来进行模型比较,最终择优处理数据。所以本次推文我们将继续机器学习的内容,为大家带来神经网络算法的相关知识。 神经网络(Neural network, NN)是一种模仿生物神经网络(动物的中枢神经系统)的结构和功能的数学模型,从而构建函数和近似估计。神经网络主…","guid":"https://zhuanlan.zhihu.com/p/26353799047","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T12:36:38.408Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于ggseg3d进行大脑统计的3D交互可视化","url":"https://zhuanlan.zhihu.com/p/26351807565","content":"Vol.1 前言 在之前的一期推送中,我们已经介绍了如何使用R包ggseg绘制脑图,使用ggseg所绘制的脑图是一种2维的多边形。将大脑表征为2D多边形是快速、高效、灵活的绘图的一个很好的解决方案。然而,大脑本质上是3D的,在一个扁平的图像中识别一个区域的位置是一项挑战。这个问题在代表皮层下特征的脑图谱中更加严重,因为它们不能像皮层特征那样被扁平为二维。因此,研究者还提供了ggseg3d包,用于绘制3D脑图谱。ggseg3d的功能是…","description":"Vol.1 前言 在之前的一期推送中,我们已经介绍了如何使用R包ggseg绘制脑图,使用ggseg所绘制的脑图是一种2维的多边形。将大脑表征为2D多边形是快速、高效、灵活的绘图的一个很好的解决方案。然而,大脑本质上是3D的,在一个扁平的图像中识别一个区域的位置是一项挑战。这个问题在代表皮层下特征的脑图谱中更加严重,因为它们不能像皮层特征那样被扁平为二维。因此,研究者还提供了ggseg3d包,用于绘制3D脑图谱。ggseg3d的功能是…","guid":"https://zhuanlan.zhihu.com/p/26351807565","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T12:28:08.252Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"探索性图论分析的应用案例","url":"https://zhuanlan.zhihu.com/p/26350573900","content":"Vol.1 前言 累积精神障碍共病 (Cumulative mental disorder comorbidity) 是指个体在一生中经历多种精神障碍的情况,这种现象在一般人群中十分普遍,与生活质量和全局功能的降低密切相关。儿童时期的精神障碍共病同样普遍,有三分之一的精神障碍儿童被诊断为多种类型的精神障碍。这种共病现象的广泛存在挑战了当前的精神障碍分类学,反映了精神障碍诊断之间模糊的界限、精神障碍的临床多样性,以及正常与异常之间的任意 (人为) …","description":"Vol.1 前言 累积精神障碍共病 (Cumulative mental disorder comorbidity) 是指个体在一生中经历多种精神障碍的情况,这种现象在一般人群中十分普遍,与生活质量和全局功能的降低密切相关。儿童时期的精神障碍共病同样普遍,有三分之一的精神障碍儿童被诊断为多种类型的精神障碍。这种共病现象的广泛存在挑战了当前的精神障碍分类学,反映了精神障碍诊断之间模糊的界限、精神障碍的临床多样性,以及正常与异常之间的任意 (人为)…","guid":"https://zhuanlan.zhihu.com/p/26350573900","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T12:22:19.015Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R软件FactoMineR包里的PCA中的ind.sup和quanti.sup命令语是什么意思?-富临医疗的回答:外侧下丘脑(LH)与大脑的多个神经调节系统,如背侧剑突核(DR),都与唤...","url":"https://www.zhihu.com/question/55325586/answer/110151768846","content":"R软件FactoMineR包里的PCA中的ind.sup和quanti.sup命令语是什么意思?外侧下丘脑(LH)与大脑的多个神经调节系统,如背侧剑突核(DR),都与唤醒有关,但这些系统之间的相互作用才刚刚开始探索。通过病毒追踪、电路图绘制、识别神经元的电生理记录和小鼠组合光遗传学等综合方法,我们发现 LH 中的 GABA 能神经元会选择性地抑制 DR 中的 GABA 能神经元,从而导致 DR 中相当一部分神经元的发射增加,最终促进唤醒。这些 DRGABA 神经元具有唤醒活性,可投射到包括 LH 在内的多个参与唤醒控制的脑区,它们的特异性激活可有效影响局部网络活动,从而导致从睡眠中唤醒。我们的研究结果表明了 LH 和 DR 之间的相互抑制性投射是如何促进觉醒的,并表明长程连接和局部回路动态之间的密切互动对觉醒的控制是复杂的。
包括外侧下丘脑和剑突5-羟色胺能系统在内的多个大脑系统都参与了睡眠/觉醒周期的调节,但这些系统之间的相互作用却一直难以捉摸。在这里,我们展示了由这些脑区之间的长程抑制性投射介导的相互抑制可以促进觉醒。这项工作的主要意义在于揭示了一个参与自主神经调节的脑区与另一个控制高级大脑功能(包括奖赏、耐心、情绪和感觉编码)的脑区之间的相互作用。
一、简介
由于脑干、基底前脑和外侧下丘脑(LH)神经调节系统的影响,整个大脑的神经元活动在不同的睡眠-觉醒状态下会受到强烈的调节。在这种情况下,LH既是一个解剖中心,也是一个睡眠-觉醒中心。已知各种 LH 神经元群可以调节睡眠-觉醒状态、能量摄入和奖赏。视网膜下/视网膜素(Hcrt/Ox)和LH(LHVgat)表达神经元控制觉醒。光遗传激活 LHVgat 神经元可通过直接调节丘脑网状结构和脑干回路中的小脑定位区(LC)诱导快速唤醒;同时抑制下丘脑前部的睡眠促进回路。相反,MCH神经元的激活会促进快速眼动睡眠,在较小程度上也会促进非快速眼动睡眠。然而,LHVgat 神经元是否以及如何调节其他脑干神经调节回路的活动仍不清楚。
利用组合光遗传学和已识别神经元的电生理记录,我们发现 LHGABA 神经元选择性地抑制 DRGABA 神经元,导致部分 DR 神经元失去抑制,最终导致唤醒。我们发现,与 NREM 和 REM 睡眠相比,DRGABA 神经元在清醒时高度活跃。选择性激活其向 LH 区的投射会导致清醒,这凸显了下丘脑-脑干长程相互回路在控制大脑状态和唤醒中的重要性。
二、研究材料与方法
所有实验程序均根据欧洲共同体理事会 1986 年(86/609/EEC)和 2003 年(2003/65/CE)动物研究指令进行,并获得了塞格德大学和伯尔尼大学伦理委员会的批准。本研究使用了 80 只成年(年龄大于 2 个月)雄性小鼠。
为了在体内光遗传激活 LHVGAT 向 DR 的投射,一组 Vgat-IRES-Cre 小鼠接受了 AAV1-CAGGS-FLEX-CHR2-td tomato-SV40 或 AAV2-EF1a-DIO-hChR2(H134R)-eYFP 病毒,而第二组则接受了 AAV2-EF1a-DIO-eYFP 病毒(对照组,所有病毒载体均由北卡罗来纳大学教堂山分校的载体中心包装,滴度介于 3 × 1012 和 5 × 1012 gc/ml 之间)。为了对 DR 神经元亚群进行交叉光遗传激活,Vgat-IRES-Crex Pet1-Flpe双转基因小鼠接受 AAVdj-EF1a-Foff/Con-hChR2(H134R)-eYFP (Pet1-OFF/Vgat-ON)、AAVdj-EF1a-Fon/Con-hChR2(H134R)-eYFP (Pet1-ON/Vgat-ON)或 AAVdj-EF1a-eYFP (eYFP 对照组);将每种病毒 150-600 nl 双侧注入 LH 或 DR(AP:-4. 45, ML: +1.2, DV: -2.9 to -3.1, at a 30° angle)。病毒悬浮液用微量输液泵通过 28 G 不锈钢套管(Plastic One)以每分钟 0.1 µl 的速度注入。
2.1 手术过程
使用 1%-1.5%(v/v)异氟烷麻醉小鼠,将其放置在立体定向架(900 型,David Kopf Instruments)上的加热垫(Supertech)上。在睡眠研究中,8 到 10 周大的雄性 Vgat-IRES-Cre 小鼠被长期植入一根光纤(200 μm,0.39 NA 核心多模光纤,FT200EMT,TECS Clad,Thorlabs,插入氧化锆套管,1. DR上方(AP -4.45,ML 1.2,DV -2.9,与前囟呈 20° 内外侧角)用 C&B-Metabond(Parkell)固定在颅骨上。) 在硬膜外插入四个不锈钢螺旋电极(两个插入两个额叶皮层,两个插入顶叶皮层)记录脑电信号,并在两块颈部肌肉上缝合导线环记录肌电图。脑电图/肌电图电极和光纤用牙科水泥(Patterson Dental)固定在头骨上。手术后,小鼠接受了适当的术后护理:镇痛药利马定(15 毫克/千克)、消炎药地塞米松(2 毫克/千克)、抗生素庆大霉素(5 毫克/千克),并让其恢复 2 周。
2.2 体外电生理学
对小鼠进行深度麻醉,并用冰冷的切削液灌注心脏,切削液中含有以下成分(单位:毫米):93 NMDG、2.5 KCl、1.2 NaH2PO4、30 NaHCO3、20 HEPES、25 葡萄糖、5 N-乙酰-L-半胱氨酸、5 Na-抗坏血酸、3 Na-丙酮酸、10 MgSO4 和 0.5 CaCl2。同样的溶液用于在 4°C 下切割含有 DR 的冠状脑干切片,并用于切片的初始储存(32°C-34°C,12 分钟),然后将切片储存在含有以下成分(以毫米为单位)的溶液中:30 NaCl、2.5 KCl、1.2 NaH2PO4、1.3 NaHCO3、20 HEPES、25 葡萄糖、5 N-乙酰-L-半胱氨酸、5 Na-抗坏血酸、3 Na-丙酮酸、3 CaCl2 和 1.5 MgSO4。记录时,将切片浸没在灌注有持续充氧(95% O2,5% CO2)的加温(34°C)ACSF 的腔室中,ACSF 含有以下成分(单位:毫米):130 NaCl、3.5 KCl2 和 1.5 MgSO4:130 NaCl、3.5 KCl、1 KH2PO4、24 NaHCO3、1.5 MgSO4、3 CaCl2 和 10 葡萄糖。使用标准 DIC 光学镜片观察 DR 神经元,并使用 EPC9 放大器(Heka Elektronik)在全细胞电流钳模式下进行记录。贴片移液管(尖端电阻,4-5 mΩ)中注入了含有以下成分(单位:毫米)的内部溶液:126 K-葡萄糖酸盐、4 KCl、4 ATP-Mg、0.3 GTP-Na2、10 HEPES、10 磷酸肌酸和 8 生物胞素,pH 值为 7.25;渗透压为 275 mOsm。液体连接电位(-13 mV)已离线校正。对接入电阻和串联电阻进行持续监测,如果神经元的数据与初始值相比变化>20%,则舍弃这些数据。GAD-GFP 小鼠的 DRGABA 神经元体节在外延荧光照射下被锁定。通过显微镜物镜使用蓝色 LED 光源(0.5-0.8 mW/mm2,Thorlabs)进行光刺激。
2.3 体内电生理学和并细胞标记
为了记录 DR 神经元的活动,使用 1%-1.5%(v/v)异氟烷(Forane)麻醉小鼠,将其放置在立体定向架(900 型,David Kopf Instruments)上的加热垫(Supertech)上。在 DR 上做一个小的开颅手术(直径 1 毫米)(AP:-4.75 毫米,ML:0.2 毫米,DV:距前囟-3.1 毫米),保持硬脑膜完整。在玻璃电极(电阻:10-25 mOhm)中注入含有 1.5% 生物胞素(Sigma Millipore)的生理盐水。电极呈 15° 内外侧角放下,以避开矢状窦。使用 Multiclamp 700B 放大器以电流钳模式(滤波频率在 100 Hz 和 3 kHz 之间)监测 DR 神经元的活动。在某些记录结束时,按照之前的描述,使用持续时间为 500 毫秒、占空比为 50%、持续时间为 2-10 分钟的 0.5-4 毫安阳极电流脉冲,向神经元注入生物胞素(Sigma Millipore)。为了记录 DR 中的 GABA 能神经元,以侧翼为目标,因为大多数神经元都具有 GABA 能。这些神经元具有较小(直径≤15 µm)的卵圆形体节,平均基线发射率大于 5 Hz。
2.4 数据采集
实验开始前,先让动物习惯使用带保护管(Thorlabs)的 3 米长光纤跳线,该跳线用氧化锆套管(Precision Fiber Products)和 EEG/EMG 电缆与长期植入的光纤连接 1 周。随后,在不进行任何光遗传学操作的情况下进行 24 小时基线多导睡眠图记录。脑电图和肌电图信号由 AM Systems 3500 放大器以 512 Hz 的频率采样,并由 National Instruments USB X DAQ 设备进行数字化处理。脑电图和肌电图数据由 SleepScore 软件(View Point)记录。所有实验均在上午 10:00 至下午 2:00(Zeitgeber 时间 3-7)之间进行。
在对自由活动的动物进行单元记录时,小鼠至少要对光贴片线和电极板头台(RHD2132,Intan Technologies)适应 4 天。随后,在不进行光遗传学操作的情况下进行 24 小时基线多导睡眠图记录,以确保动物恢复正常的睡眠-觉醒周期。使用开源采集软件(Open Ephys)通过数字化头台(RHD2132)和多通道 DAQ 板以 20 kHz 的频率采集四极管信号。通过对 DR 施加短蓝光脉冲(10 次 5 毫秒脉冲,每 30 秒一次)进行光标记。光反应细胞根据其在蓝光照射后 3 毫秒内的尖峰活动进行识别。
东莞富临医疗科技有限公司是 Intan 亚洲代理商,为亚洲客户供应 Intan 电生理产品与配套产品
2.5 脑电图和肌电图记录
如前所述,根据脑电图/肌电图信号特征对睡眠-觉醒阶段进行人工评分。简而言之,当低振幅的非同步脑电图活动伴有高强度的肌肉活动和肌电图中的相性爆发时,即为清醒状态。NREM睡眠是指δ频段(0.5-4赫兹)出现同步、高振幅振荡和低肌电图音调。如果脑电图显示明显的θ振荡,且除短促抽动外几乎完全没有肌电图音,则可判定为快速眼动睡眠。24 小时基线记录以 5 秒为一纪元进行评分,而特定状态的光遗传刺激记录以 1 秒为一纪元进行评分。
2.6 多导睡眠图记录期间的光遗传激活
在体内光遗传刺激实验中,通过 FC/PC 连接器将贴片线连接到 473 nm DPSS 激光器上。激光输出设置为从光纤顶端输出 10 mW 的功率。使用 Master-9 脉冲发生器以 5 或 20 Hz 的频率向 LHVGAT 光纤或 DR Pet1-OFF/Vgat-ON 神经元和光纤施加 5 ms 脉冲串。根据在线 EEG 和 EMG 信号参数的目测结果进行特定状态的光激活。对于 NREM 和 REM 睡眠特异性光遗传激活,当动物处于 NREM 或 REM 睡眠至少 10 秒时,通过贴片线和光纤施加脉冲串。光遗传刺激在整个NREM或REM睡眠过程中持续进行,直到小鼠过渡到另一种状态。之后,让动物在不受干扰的情况下在 NREM 睡眠、REM 睡眠和清醒之间循环 2-3 个周期,然后再对下一次 NREM 或 REM 睡眠进行光刺激。每只动物在每种频率(5 赫兹和 20 赫兹)下共接受了 9 次 NREM 和 REM 睡眠光遗传刺激。
2.7 睡眠研究后的免疫组化
实验结束后,给小鼠腹腔注射戊巴比妥(250 毫克/千克)进行深度麻醉,然后用 5 毫升冷生理盐水(0.9% NaCl)和 20 毫升 4% 甲醛对小鼠进行经心肌灌注。随后,取出大脑并在 4°C 的甲醛中保存过夜,以进行后固定。第二天,在冷冻前将大脑转移到含 30% 蔗糖的 PBS 中。用低温恒温器将大脑切成 30 µm 的切片,并收集在含 0.1% Triton A-100(Sigma Millipore)的 PBS 和 PBST 中。盖玻片用 Fluoromount(F4680,Sigma Millipore)固定在载玻片上。使用共聚焦显微镜拍摄显微照片。为了便于显示,在 Adobe Photoshop CC 中对图像亮度和对比度进行了适度调整。
2.8 统计分析
使用 Spike2 (Cambridge Electronic Design)、OriginPro 8.5 (MicroCal)、IgorPro (WaveMetrics)、MATLAB (The MathWorks) 和 Prism (GraphPad) 软件进行数据分析。用 Shapiro-Wilk 检验和 Kolmogorov-Smirnov 检验对数据进行了正态性检验,并相应地使用参数或非参数方法进行分析。我们使用三方方差分析来检验特定状态光遗传激活实验中频率(5 Hz 与 20 Hz,组内比较)和光蛋白(eYFP 对照组与 ChR2 表达小鼠,组间比较)对从 NREM 或 REM 睡眠过渡到另一种状态的潜伏期的影响。光刺激诱发的 PSP 是在光刺激后 ± 50 毫秒的时间窗内使用 2 × SD 的阈值在 Vm 记录中检测到的。细胞外记录中的动作电位在 Spike2 中使用直接水平阈值进行检测。对每个神经元的每次光刺激试验计算出击发率直方图。对照期定义为光刺激前 0.5 秒。所有数据均以平均值 ± SEM 表示。
将刺激前 10 秒的平均尖峰率减去光遗传激活时的平均尖峰率,即可评估单个单元在光刺激时的点燃率变化。为了检测是否存在明显的调节,从每个单个单元的活动时间序列中随机抽取 9999 个刺激发生点,并计算这些随机发生点的点燃率变化。如果实际点燃率差异大于随机计算值的 95% 或小于 5%,则说明该神经元的点燃在光刺激期间受到了显著调节。在超过 50% 的光刺激过程中,抑制或失抑制神经元的发射率分别出现显著下降或上升。在<50%的光刺激过程中,神经元的发射率被明显调节的神经元被报告为无反应神经元。
三、研究结果
3.1 LHGABA 投射到 DR 促进觉醒
LHVGAT(囊泡GABA和甘氨酸转运体)神经元亚群可促进NREM睡眠唤醒。在这里,我们测试了 LHVGAT 投射到 DR 在控制睡眠-觉醒行为中的作用。为了向 LHVGAT 神经元递送蛋白,VGAT-Cre 小鼠被立体定向注射了 AAV2-EF1a-DIO-eYFP (对照组)或 AAV2-EF1a-DIO-hChR2(H134R)-eYFP (ChR2-EYFP)到 LH,进行体内光遗传激活实验(见材料与方法;图 1A、B)。然后给小鼠植入 EEG/EMG 电极,用于记录和量化睡眠-觉醒状态,同时在 DR 上部植入一根光导纤维(见 “材料与方法”;图 1C、D)。在稳定的 NREM 或 REM 睡眠至少 10 秒后,手动触发 DR 中 LHVGAT 纤维的特定状态光遗传激活。在对照组(eYFP)和 ChR2 表达动物中,以 5 或 20 Hz(5 毫秒脉冲)的频率向 DR 发射蓝光(473 纳米)(见 Herrera et al. 有趣的是,在 NREM 睡眠期间,光遗传激活 LHVGAT 投射到 DR 会导致在 < 7 秒内以 5 和 20 Hz 的频率快速唤醒(图 1F;p < 0.0001,三方方差分析),而光激活这些纤维未能显著改变 REM 睡眠持续时间(图 1G)。这些结果将之前 LHVGAT 诱导唤醒的机制扩展到了脑干的 DR 神经元。
图 1.刺激 DR 中的 LHGABA 纤维可促进觉醒。A, 实验设计示意图:在 Vgat-cre 小鼠的 LH 中注射 AAV-EF1a-DIO-ChR2-eYFP 或 AAV-EF1a-DIO-eYFP。表达 4 周后,在 DR 中对 LHGABA 纤维进行光刺激,同时进行多导睡眠图记录,以进行睡眠阶段评分。B,ChR2-eYFP 在 LH 中的表达实例。荧光图像叠加在立体定向图上(AP:4.45)。C,DR 中用于光刺激的光纤位置。合并荧光图像显示表达 ChR2-eYFP 的 LHGABA 纤维(绿色)和 TPH 免疫组化(红色),以指示 DR 内 TPH 合成血清素能神经元的位置。D,11 只小鼠所有植入光纤的位置。绿线表示 Vgat::ChR2 表达小鼠(n = 6)。灰线表示 eYFP 对照组(n = 5)。Aq,导水管。E、顶部,睡眠阶段特定光刺激的实验时间表示意图。下图,具有代表性的 EEG/EMG 迹线说明对光遗传刺激的行为反应。注意光刺激时快速的脑电图去同步化和肌电图激活,表明从 NREM 到清醒的过渡。F、光刺激 DR 中的 LHGABA 轴突引起的 NREM 到觉醒转换的潜伏期。G,光刺激 DR 中的 LHGABA 轴突引起的 REM 到觉醒转换的潜伏期。*p < 0.05.
3.2 DRGABA 神经元接受来自 LHGABA 神经元的单突触输入
我们之前发现 LHGABA 神经元向包括 DR 在内的多个脑干核团发出长程投射。为了确定介导这种快速唤醒反应的下游回路,我们使用 ChR2- 辅助回路图绘制了 LHGABA 传出,以从功能上描述这种 LH-DR 回路(图 2A)。我们使用一种针对轴突体外光刺激而优化的病毒构建体(AAV1-CAG-ChR2-venus-WPRE-SV40)用 ChR2 感染了 LH 神经元(无论其神经化学特性如何)。我们发现,在 7 个 DR 细胞(14%)中记录到光刺激 DR 中表达 ChR2 的 LH 终末引起的 IPSPs(-7.9 ± 1.03 mV 峰值振幅,10.91 ± 2.41 ms 衰减时间)(图 2D,E),而在 10 个 DR 细胞(20%)中记录到 EPSPs(7.58 ± 0.9 mV 峰值振幅,11.07 ± 2.46 ms 衰减时间)(图 2E)。其余细胞(n = 34,66%)未记录到可检测到的 PSP。通过事后免疫组化(n = 5)或记录 GAD-GFP 小鼠中的 DRGABA 神经元(n = 3,见 “材料和方法”),所有在 LH 轴突光刺激后表现出 IPSP 的 DR 神经元都被证实是 GABA 能神经元(图 2B、E),其中一个确定的 DRGABA 神经元收到了 EPSP(图 2E)。SR95531(即加巴嗪,5 个细胞中的 5 个,100%)可以消除 IPSPs,但 NBQX(5 个细胞中的 0 个,0%;图 2D)不能消除 IPSPs,这表明这些是牵涉 GABAa 受体的单突触通路。在 TTX 和 4-AP 的存在下,对 LH 轴突末梢进行光刺激时记录到的类似 IPSP 进一步证实了这一结果(平均 IPSP 振幅:对照组:6.5 ± 0.6 mV,TTX/4-AP:6.8 ± 0.7 mV,n = 6 个神经元;图 2F、G)。当神经元保持在接近动作电位起始阈值的膜电位时,由于 IPSPs 的存在,对 LH 轴突的光刺激也会导致明显的发射抑制(12.66 ± 6.65 Hz vs 0 Hz,MI -1.0,n = 3 个神经元)(图 2D)。当 IPSPs 被加巴嗪阻断时,发射抑制完全消失(n = 3 of 3;图 2D)。这些结果表明,LH 到 DR 的单突触投射是有功能的,既可以是抑制性的,也可以是兴奋性的,而且 DRGABA 神经元优先受到 LHGABA 纤维的抑制。
图 2. LH 投射以 DR 神经元为突触目标。A,实验设计示意图:在 WT 小鼠的 LH 中注射 AAV-ChR2-Venus 会导致 DR 投射轴突中突出的 ChR2 表达。感染四周后,在 DR 中对 LH 神经元的局部轴突进行光刺激,同时对已识别的 DR 神经元进行全细胞膜片钳记录。B、对 LH 轴突光刺激有反应的 DRGABA 神经元的荧光图像(链霉亲和素和 GABA 免疫染色,合并)。C、B 中神经元对超极化和去极化电流阶跃的膜电位反应显示出快速的动作电位输出和适度的频率适应。D,LH 轴突的光刺激导致单突触 IPSPs,这种 IPSPs 对 iGluR 阻滞(NBQX)有抵抗力,但被 SR95531(即加巴嗪 [GBZ])阻滞。E,记录的所有神经元(n = 51)的 PSP 振幅分布。绿色圆圈代表已识别的 DRGABA 神经元。F,生理鉴定的 DRGABA 神经元的膜电位反应。G,对 LH 轴突的光刺激导致 F 中所示神经元出现 IPSPs,这种 IPSPs 在使用 TTX 和 4-AP 后持续存在。
3.3 LHGABA向DR的投射可迅速抑制DRGABA神经元的活动
为了检测 LHGABA 向 DR 神经元投射的功能性连接,我们记录了在 LH 感染了 AAV1-CAGGS-FLEX-CHR2-tdTOM-SV40 的麻醉 VGAT-cre 小鼠 DR 中形态学确定的神经元的胞外单元活动,同时光刺激 DR 中表达 ChR2 的 LHGABA 轴突(5 个 10 ms、20 Hz、5 mW 的光脉冲;图 3A)。
图 3.LHGABA 输入控制 DR 神经元活动。A、实验设计示意图:在 VGAT 小鼠的 LH 中注射 AAV-Flex-ChR2-td 番茄会导致 DR 投射轴突中 ChR2 的显著表达。感染四周后,在 DR 中对 LHGABA 神经元的局部轴突进行光刺激,同时进行单细胞并列重编码/标记。B,DRGABA 神经元的自发活动及其对 LHGABA 轴突局部光刺激的反应示例。顶部,光刺激开始时对齐的单次试验原始数据(蓝色横条,5 mW,10 ms 脉冲,50 Hz)。中图:栅格图,其中每个抽动为单个单位尖峰,每行代表一次试验。红线表示光刺激开始。下图,上图所示单元的刺激时间直方图(PSTH)。右图:荧光图片显示 B 中记录的神经元使用并细胞填充技术填充了神经生物素。C,麻醉状态下所有记录神经元的调制指数。D,麻醉状态下记录的所有神经元的 PSTH 总平均值。E、清醒动物所有记录神经元的调制指数(inh,抑制;exc,兴奋)。F,清醒动物记录的所有神经元的 PSTH 总平均值。
在比较 DR 神经元在 LHGABA 轴突光刺激下的活动时,我们发现神经元活动(基线点火:7.72 ± 6.43 Hz)受到快速抑制(峰值抑制:42.37 ± 5.94%;图 3B):7.72 ± 6.43 Hz,光刺激后的基线发射率为 5.37 ± 6.77 Hz:5.37 ± 6.77 Hz,n = 25,p < 0.001,Wilcoxon 符号秩检验;图 3C、D)。我们确定了用并胞标记技术记录和填充的 8 个神经元的形态。这些神经元根据其高基线发射率(≥6 Hz)的形态和在 DR 中的位置被归类为假定的 DRGABA 神经元。这些结果表明,LHGABA 神经元对假定的 DRGABA 神经元具有抑制作用。
接下来,我们在记录 DR 中多个单个单元活动的同时,探讨了在清醒、头束缚的动物中刺激 DR 中 LHGABA 纤维的效果(见 “材料与方法”)。在有和没有 LHGABA 轴突光刺激(5 次闪光,每次 10 毫秒,频率 20 赫兹,功率 5 毫瓦)的情况下记录的 DR 神经元活动的比较进一步证实了对 DR 神经元亚群的抑制作用(12 个神经元中的 2 个,17%),而其余神经元的活动有所增加(12 个神经元中的 10 个,83%)。DR 神经元的整体活动缓慢(∼200 毫秒)但持续(∼1 秒)增加(基线点燃:基线发射:7.67 ± 6.87 Hz,光刺激后基线发射:10.98 ± 8.920 Hz:10.98 ± 8.920 Hz,n = 12,p < 0.001,Wilcoxon 符号秩检验;图 3E、F)。
3.4 已识别的 DRGABA 神经元的活动与脑状态有关
为了靶向 DR 中的 DRGABA 神经元,我们使用了交叉病毒方法。简而言之,INTRSECT系统(内含子重组酶位点实现组合靶向)由正交的Cre和Flp识别位点(分别为lox和FRT位点)组成,它们被插入到腺相关病毒构建体(AAVdj)中ChR2-eYFP开放阅读框(ORF)的合成内含子中。lox和FRT识别位点之间的ORF片段的起始方向决定了是否需要Flp和/或Cre重组酶的存在才能产生功能性视蛋白(ChR2-eYFP或eYFP;图4A,B)。
图 4. 光遗传鉴定的 DRGABA 神经元的活动在整个睡眠-觉醒周期中受到调控。A、交叉病毒策略示意图:ChR2-Con/off-eYFP 靶向 Pet1Flpe-VgatCre 双转基因小鼠的 DR 神经元。B, INTRSECT 系统示意图 :在 ChR2 ORF 的内含子序列中引入 FRT(灰色三角形)和 lox 位点(浅蓝色三角形),以便对这些 ORF 进行定向控制。在 Con/Foff-ChR2 构建体中,Cre 重组酶的存在产生了功能性 ChR2。然而,Flp 重组酶的存在会使外显子反转,从而产生失活状态的 ChR2。在 Con/Fon-ChR2 构建中,需要 Cre 和 Flp 重组酶同时存在才能产生功能性 ChR2。C,ChR2 的表达仅限于 DRGABA(表达 Vgat-mCherry)神经元。D、实验设计示意图:同时记录行为小鼠的 DR Pet1-OFF/Vgat-ON 神经元和脑电图。E,在不同睡眠/觉醒状态下记录 DR Pet1-OFF/Vgat-ON 神经元的实例。顶部,原始电压痕量记录显示光刺激(蓝色刻度线)时有明显的动作电位发射。下图,上图所示神经元的催眠图和尖峰刻度。W,清醒状态;R,快速动眼期;N,快速动眼期。F、光遗传鉴定的 DR Pet1-OFF/Vgat-ON 神经元的平均尖峰波形(n = 9 个神经元,来自 n = 4 只小鼠)。DR Pet1-OFF/Vgat-ON 神经元是通过其对 453 nm 激光产生的蓝光脉冲(每 30 秒发出 10 个 5 ms 的脉冲)的立即发射来识别的。G、H,一个 DR Pet1-OFF/Vgat-ON 神经元在 NREM 到觉醒转换(G)和 REM 到觉醒转换(H)期间的光栅图,图中有神经元的尖峰刻度(上图)和神经元在所有转换期间的 PSTH(下图)。I、9 个 DR Pet1-OFF/Vgat-ON 神经元在清醒、NREM 和 REM 睡眠期间的唤醒率。J、不同睡眠状态转换期间 DR Pet1-OFF/Vgat-ON 神经元的 PSTH(平均值 ± SEM)。
为了研究 DRGABA 神经元的活动是否在不同睡眠-觉醒状态下受到调制,我们对假定的 DR Pet1-OFF/Vgat-ON 神经元进行了光标签单元记录,同时对自由活动的 Pet1Flpe-VgatCre 小鼠进行了脑电图和肌电图记录。Pet1-OFF/VGAT-ON 神经元的活动在不同的睡眠-觉醒状态下受到调节(图 4G-I;NREM vs wake/REM:P < 0.05,Friedman 非参数检验)。事实上,与过渡发生前的 5 秒钟相比(即肌张力仍然较低时;图 4G,H,J;NREM-to-wake:p < 0.01;REM-to-wake:p < 0.05,配对 t 检验),它们在觉醒时的发射活动明显增加。反过来,当小鼠开始进入 NREM 睡眠时,其发射活动降低(唤醒到 NREM:p < 0.01,配对 t 检验),而另一方面,从 NREM 睡眠过渡到 REM 睡眠时,发射活动没有显著变化(图 4J)。
3.5 DRGABA神经元的唤醒促进效应
接下来,我们研究了 DR 中的 Pet1-OFF/VGAT-ON 神经元是否与唤醒控制有因果关系。为此,我们在 NREM 睡眠期间光遗传激活了 DR Pet1-OFF/Vgat-ON 神经元(见 “材料与方法”;图 5C)。与我们的相关数据一致,我们发现与对照组相比,当以 20 Hz 频率发出光脉冲时,光刺激 DR Pet1-OFF/VGAT-ON 神经元可诱导从 NREM 睡眠中快速唤醒(p < 0. 0001, three-way ANOVA; Pet1-OFF/VGAT-ON vs Control: p < 0.0001, Dunnett\'s multiple comparison\'s post hoc test)。在NREM睡眠期间,光遗传激活Pet1-OFF/VGAT-ON神经元后,REM睡眠开始的概率下降(图5E),这表明光遗传激活对REM睡眠开始有影响。然而,在快速眼动睡眠期间,5 赫兹和 20 赫兹的刺激频率都会导致 Pet1-OFF/Vgat-ON 小鼠立即从快速眼动睡眠中唤醒(图 5D;p < 0.0001,三方方差分析;Pet1-OFF/VGAT-ON vs 对照组:p < 0.0001,5 赫兹和 20 赫兹,邓尼特多重比较事后检验)。不出所料,与对照组(n = 6 只动物;图 5D,E)相比,光遗传激活 Pet1-ON/VGAT-ON 神经元(n = 6 只动物)不会改变睡眠觉醒行为。
图 5.刺激 DRGABA 神经元可促进觉醒。A、实验策略示意图:在 Pet1Flpe-VGATCre 双转基因小鼠的 DR 中注射携带 eYFP(对照组)或 ChR2 编码序列的各种交叉病毒构建体。感染 4 周后对 DR 进行光刺激。B,所有使用动物的光纤导管位置。左图,灰色线条表示对照组。中间,绿线表示 Pet1-OFF/VGAT-ON。右图,蓝线表示 Pet1-ON/VGAT-ON。C、DR 的光刺激引起的 NREM 到觉醒转变的潜伏期。D、DR 光刺激引起的 REM 到觉醒转换的潜伏期。E、三种病毒构建体在 5 赫兹与 20 赫兹光刺激下的状态转换概率。*p < 0.05.
四、讨论
在这项研究中,我们发现激活 DR 中的 LHGABA 轴突会通过局部释放 GABA 来促进觉醒,这种 GABA 会迅速抑制已识别的 DRGABA 神经元的活动,但会间接激活 DR 中的其他非 GABA 能神经元。此外,我们还发现 DRGABA 神经元的活动具有状态依赖性,而 DRGABA 神经元的激活会解除对大多数 LH 神经元的抑制,从而促进觉醒。光遗传激活 LHGABA-DRGABA 回路的这种促进觉醒的作用会在 NREM 睡眠期间选择性地促进快速觉醒,这与它们在不同睡眠-觉醒状态下的活动特征是一致的。这些发现确定了一个 LHGABA-DRGABA 反馈环路,它对于快速改变大脑整体状态和促进觉醒至关重要。
通过病毒追踪和体外 ChR2 辅助回路映射,我们发现 LHGABA 神经元的一个亚群与 DR 神经元建立了单突触连接。对该图谱的功能分析显示,LHGABA 神经元对 DRGABA 神经元发挥 GABAA 介导的抑制作用,导致快速的 NREM 睡眠到觉醒转换。鉴于 LH 抑制性神经元中存在众多亚群,DR 投射的 LHGABA 神经元亚群的确切神经化学特性仍有待确定。
光遗传激活 DR 中的 LHGABA 轴突诱发局部 GABA 释放,从而抑制 DRGABA 神经元的活动,促进觉醒。这是通过 GABAA 受体介导的 DRGABA 神经元直接突触抑制发生的,并导致 DRGABA 神经元在体内的发射受到显著抑制。与这些体内记录相一致的是,我们发现已识别的 DRGABA 细胞的活动在 NREM 睡眠到觉醒的转换过程中受到了强烈的调节,而 LHGABA-DR 回路的光遗传激活在 NREM 睡眠期间会有选择性地促进快速觉醒,但在 REM 睡眠期间则不会。这一结果与之前报告光遗传激活内侧隔、LC、丘脑网状核和视前腹外侧区LHGABA纤维时的睡眠/觉醒转换的研究结果一致。我们的研究结果表明,LHGABA 神经元直接抑制 DRGABA 神经元,这可能会导致各种 DR 神经元失去抑制。揭示这种抑制作用的确切靶点还有待进一步研究,而且鉴于饶舌核的神经化学和生理多样性极高,这种抑制作用的确切靶点也很难预测。5-HT 神经元活动的阶段性增加会迅速而显著地影响大脑皮层的活动,从而可能导致大脑状态的改变。然而,最近的研究表明,DR5-HT神经元的选择性强直激活可促进睡眠,而爆发性刺激则可诱导觉醒。从目前的研究结果来看,DR 神经元的阶段性活动变化及其在皮层水平的后果可能至少部分源于睡眠到觉醒转换过程中 LHGABA 神经元的激活。
对 DRGABA 神经元的刺激也会促进觉醒,这可能是通过抑制或激活 LH 中促进睡眠或觉醒的局部神经元实现的。我们可以推测,DRGABA突触释放的GABA可以抑制促进睡眠神经元的活动,包括促进快速眼动睡眠的MCH神经元、REM 活跃的 LHVGAT 神经元以及来自腹侧切带的 REM 活跃的 Lh6x GABA 神经元。相反,它可以抑制局部抑制回路,从而激活促进唤醒的视网膜下/神经元或唤醒活性LHVGAT神经元。这种双重调节活动是否以及如何在睡眠-觉醒周期中发挥作用,还有待进一步研究。
总之,一个参与能量平衡和唤醒的脑区可以影响 DR 的活动,而 DR 是一个参与控制高级大脑功能(包括奖赏、耐心、情绪和感觉编码)的区域,这表明代谢状态和大脑状态之间存在潜在的相互作用途径。
邮:li@fulinsujiao.com
公司地址:广东省东莞市樟木头镇塑金国际1号楼810
你的电脑只有16GB内存,却要处理50亿行×60列的数据?同事用Pandas合并CSV时频繁崩溃,SQL Server卡成PPT?这篇指南将用真实案例告诉你,如何在普通PC上驾驭海量数据!
(某电商公司用Pandas合并30亿订单数据时,连续3天内存溢出崩溃)
# 读取时优化数据类型(实测内存减少87%)\\ndtypes = {\\n \'user_id\': \'int32\', # 默认int64→int32\\n \'price\': \'float32\', # 默认float64→float32\\n \'category\': \'category\', # 字符串→分类类型\\n \'date\': \'datetime64[ns]\'\\n}\\ndf = pd.read_csv(\'data.csv\', dtype=dtypes, usecols=[\'必要的列\']) # 只加载需要的列\\n
# 使用PyArrow+Parquet替代CSV(速度提升10倍)\\nchunksize = 1_000_000 # 每个分块100万行\\nfor chunk in pd.read_csv(\'big_data.csv\', chunksize=chunksize):\\n chunk = optimize_dtypes(chunk) # 优化数据类型\\n chunk.to_parquet(\'output.parquet\', engine=\'pyarrow\', compression=\'snappy\')\\n
import dask.dataframe as dd\\n\\n# 创建Dask DataFrame(自动分块处理)\\nddf = dd.read_csv(\'data/*.csv\', dtype=dtypes) \\n# 执行分布式计算(内存占用始终<2GB)\\nresult = ddf.groupby(\'user_id\')[\'price\'].mean().compute() \\n
# PySpark代码示例(需要Hadoop集群)\\nfrom pyspark.sql import SparkSession\\nspark = SparkSession.builder.appName(\\"BigData\\").getOrCreate()\\ndf = spark.read.parquet(\\"hdfs://path/to/parquet\\")\\ndf.createOrReplaceTempView(\\"data\\")\\nspark.sql(\\"SELECT COUNT(*) FROM data WHERE date>2023\\").show()\\n
方案 | 50亿行加载时间 | 内存峰值 | groupby耗时 |
---|---|---|---|
Pandas全量加载 | 崩溃 | 崩溃 | 崩溃 |
Dask+Parquet | 3分钟 | 5GB | 8分钟 |
Spark集群(4节点) | 1分钟 | 2GB/节点 | 2分钟 |
Vaex(单机优化版) | 2分钟 | 1.2GB | 5分钟 |
dask.dataframe.concat
pd.to_datetime(unit=\'s\')
替代字符串存储时间snappy
,HDF5用blosc
处理百亿行数据,核心思路是:用分块打破内存墙,用列存突破IO瓶颈,用分布式碾压计算量。即使只有16GB内存的笔记本,用Dask也能流畅处理50亿行数据(实测某用户用MacBook Air完成10亿行数据分析)。
“不是数据太大,而是方法不对” —— 一位用Vaex处理300亿行天文数据的工程师","description":"Python/Pandas如何处理百亿行,数十列的数据? 程序员小叶的回答\\n\\n\\nPython处理百亿行数据实战指南:用这些技巧告别内存爆炸!\\n\\n你的电脑只有16GB内存,却要处理50亿行×60列的数据?同事用Pandas合并CSV时频繁崩溃,SQL Server卡成PPT?这篇指南将用真实案例告诉你,如何在普通PC上驾驭海量数据!\\n\\n一、为什么传统方法会崩溃?\\nPandas硬伤:默认全量加载数据,50亿行×60列≈300GB内存需求(实际16GB电脑瞬间爆炸)\\nCSV致命缺陷:文本解析效率低下,100GB文件读取耗时超1小时\\nSQL Server尴尬:单机部署时复杂查询速度呈…","guid":"https://www.zhihu.com/question/50477642/answer/110003245460","author":"程序员小叶","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T07:03:48.137Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"桂语映月值得买么,优缺点,有没有坑?-蓝色忧郁的回答:舒适的话当然买新房,有学区需求那就向阳路二手,看个人需求啦","url":"https://www.zhihu.com/question/630279967/answer/109927487052","content":"桂语映月值得买么,优缺点,有没有坑?
舒适的话当然买新房,有学区需求那就向阳路二手,看个人需求啦
","description":"桂语映月值得买么,优缺点,有没有坑? 蓝色忧郁的回答\\n\\n\\n舒适的话当然买新房,有学区需求那就向阳路二手,看个人需求啦","guid":"https://www.zhihu.com/question/630279967/answer/109927487052","author":"蓝色忧郁","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-25T05:36:24.164Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"《Advanced R》学习笔记 | Chapter9 Functionals","url":"https://zhuanlan.zhihu.com/p/26120151302","content":"本篇推文是学堂君学习第9章“Functionals”的笔记,原文链接是 https://adv-r.hadley.nz/functionals.html ,可在文末“阅读原文”处直达。本章主要讨论了如何使用 泛函数避免代码中出现循环语句,介绍了一系列的函数,这些函数主要来自purrr包。在学堂的历史推文里,曾介绍过这个工具包:purrr | 使用map族函数进行向量化运算 。本篇目录如下: 9.1 Introduction(引言)9.2 My first functional(我写的第一个泛函数): map9.2.1 Producing atomic v…","description":"本篇推文是学堂君学习第9章“Functionals”的笔记,原文链接是 https://adv-r.hadley.nz/functionals.html ,可在文末“阅读原文”处直达。本章主要讨论了如何使用 泛函数避免代码中出现循环语句,介绍了一系列的函数,这些函数主要来自purrr包。在学堂的历史推文里,曾介绍过这个工具包:purrr | 使用map族函数进行向量化运算 。本篇目录如下: 9.1 Introduction(引言)9.2 My first functional(我写的第一个泛函数): map9.2.1 Producing atomic v…","guid":"https://zhuanlan.zhihu.com/p/26120151302","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T15:21:11.860Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"村庄规划 | 国土空间用地用海地类统计函数","url":"https://zhuanlan.zhihu.com/p/26119989291","content":"在村庄规划里,需要在文本中展示现状和规划的用地用海地类情况。因为规划中一些图斑的规划地类需要反复调整,所以地类统计表也要反复更新。本篇推文编写的函数,能够根据原始矢量文件自动生成地类统计表。 1 相关内容介绍最新的国土空间用地用海地类表来自2023年11月自然资源部印发的《国土空间调查、规划、用途管制用地用海分类指南》,链接如下: https://www.gov.cn/zhengce/zhengceku/202311/content_6917279.htm 用地用海地类需要根据“三调”及年度变更调查成果的地类进…","description":"在村庄规划里,需要在文本中展示现状和规划的用地用海地类情况。因为规划中一些图斑的规划地类需要反复调整,所以地类统计表也要反复更新。本篇推文编写的函数,能够根据原始矢量文件自动生成地类统计表。 1 相关内容介绍最新的国土空间用地用海地类表来自2023年11月自然资源部印发的《国土空间调查、规划、用途管制用地用海分类指南》,链接如下: https://www.gov.cn/zhengce/zhengceku/202311/content_6917279.htm 用地用海地类需要根据“三调”及年度变更调查成果的地类进…","guid":"https://zhuanlan.zhihu.com/p/26119989291","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T15:20:18.044Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言单细胞分析步骤封装成函数5--monocle2使用seurat的差异基因","url":"https://zhuanlan.zhihu.com/p/26097517611","content":"前面一篇封装的monocle2重头开始运行的函数,因为monocle2中的differentialGeneTest函数运行速度非常慢,并且我们一般进行后续的差异基因分析时,使用的也是seurat的差异基因,因此做拟时序时,使用seurat查找的差异基因,既合理,又节省时间。修改后的函数: monocle2_seurat <- function(sc,celltype,cpu,group,out){ # 获取 count 数据 data <- as(as.matrix(GetAssayData(object = sc, assay = \\"RNA\\", layer = \\"counts\\")), \\"…","description":"前面一篇封装的monocle2重头开始运行的函数,因为monocle2中的differentialGeneTest函数运行速度非常慢,并且我们一般进行后续的差异基因分析时,使用的也是seurat的差异基因,因此做拟时序时,使用seurat查找的差异基因,既合理,又节省时间。修改后的函数: monocle2_seurat <- function(sc,celltype,cpu,group,out){ # 获取 count 数据 data <- as(as.matrix(GetAssayData(object = sc, assay = \\"RNA…","guid":"https://zhuanlan.zhihu.com/p/26097517611","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T13:19:43.073Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言学习-day1","url":"https://zhuanlan.zhihu.com/p/26087918256","content":"总结:select()、filter()、arrage()、group_by()、head()、tail()、slice()函数,以及一些组合用法。 配合网站使用: 第 13 章 dplyr进阶 | 数据科学中的 R 语言 (bookdown.org) 软件环境:Rstudio (先装R,安装教程很多) 代码如下: library(tidyverse) library(palmerpenguins) penguins<- penguins %>% drop_na() #选择“bill_”开始的列 penguins %>% select(starts_with(\\"bill_\\")) penguins %>% select(bill_depth_mm,b…","description":"总结:select()、filter()、arrage()、group_by()、head()、tail()、slice()函数,以及一些组合用法。 配合网站使用: 第 13 章 dplyr进阶 | 数据科学中的 R 语言 (bookdown.org) 软件环境:Rstudio (先装R,安装教程很多) 代码如下: library(tidyverse) library(palmerpenguins) penguins<- penguins %>% drop_na() #选择“bill_”开始的列 penguins %>% select(starts…","guid":"https://zhuanlan.zhihu.com/p/26087918256","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T12:36:24.372Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【科研必备】基于多技术融合下生态系统服务权衡与协同动态分析及论文写作方法(ArcGIS Pro、R、INVEST模型等)","url":"https://zhuanlan.zhihu.com/p/26078219872","content":"生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、支持、文化服务,但自然条件和人类需求使得生态系统服务之间形成了此消彼长的权衡关系或相互增益的协同关系。由于经济的快速发展和城镇化、工业化的持续推进,区域发展与生态环境之间产生了一定…","description":"生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、支持、文化服务,但自然条件和人类需求使得生态系统服务之间形成了此消彼长的权衡关系或相互增益的协同关系。由于经济的快速发展和城镇化、工业化的持续推进,区域发展与生态环境之间产生了一定…","guid":"https://zhuanlan.zhihu.com/p/26078219872","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T11:44:02.444Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言 删除数据中的缺失值(NA)","url":"https://zhuanlan.zhihu.com/p/26053132152","content":"drop_na() 和 na.omit() 都是用于删除数据中的缺失值(NA)的行,尽管它们的功能类似,但它们之间有一些关键的区别。下面是它们的总结:1. drop_na()(来自 tidyr 包)来源:tidyr 包。功能:删除数据框中包含 NA 的行,具有更灵活的使用方式,特别是配合 dplyr 管道操作。适用场景: 在 tidyr 和 dplyr 数据处理流程中,尤其是在管道操作 (%>%) 中,drop_na() 是一个常见的选择。可以指定列来删除特定列中的 NA,或者删除任何包…","description":"drop_na() 和 na.omit() 都是用于删除数据中的缺失值(NA)的行,尽管它们的功能类似,但它们之间有一些关键的区别。下面是它们的总结:1. drop_na()(来自 tidyr 包)来源:tidyr 包。功能:删除数据框中包含 NA 的行,具有更灵活的使用方式,特别是配合 dplyr 管道操作。适用场景: 在 tidyr 和 dplyr 数据处理流程中,尤其是在管道操作 (%>%) 中,drop_na() 是一个常见的选择。可以指定列来删除特定列中的 NA,或者删除任何包…","guid":"https://zhuanlan.zhihu.com/p/26053132152","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-24T09:44:19.247Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学 R 语言?-哥廷根数学学派的回答:1. Python 的优势Python 是一种通用编程语言,在临床医学中的应用越来越广泛,尤其是在数据科学、机器...","url":"https://www.zhihu.com/question/4139067549/answer/109230163736","content":"临床大一是不是应该自学 R 语言?Python 是一种通用编程语言,在临床医学中的应用越来越广泛,尤其是在数据科学、机器学习和人工智能领域。
R 是一种专门为统计分析和数据可视化设计的语言,在临床医学中广泛应用于统计分析、生物信息学和流行病学研究。
特性 | Python | R |
---|---|---|
语言类型 | 通用编程语言 | 统计编程语言 |
学习曲线 | 相对平缓,适合初学者 | 统计背景较强,适合有统计学基础的人员 |
数据处理 | Pandas、NumPy 高效处理大数据 | dplyr、tidyverse 适合结构化数据 |
统计分析 | 需要依赖第三方库(如 Scipy、Statsmodels) | 内置丰富的统计函数和包 |
机器学习 | Scikit-learn、TensorFlow、PyTorch 支持 | caret、mlr 等库支持,但不如 Python 强大 |
可视化 | Matplotlib、Seaborn、Plotly | ggplot2、lattice |
生物医学支持 | 需要依赖第三方库 | Bioconductor 提供丰富的生物医学工具 |
社区与资源 | 社区庞大,学习资源丰富 | 统计和生物医学领域社区活跃 |
不用犹豫,都学一些
Python 是一种通用编程语言,在临床医学中的应用越来越广泛,尤其是在数据科学、机器学习和人工智能领域。
R 是一种专门为统计分析和数据可视化设计的语言,在临床医学中广泛应用于统计分析、生物信息学和流行病学研究。
特性 | Python | R |
---|---|---|
语言类型 | 通用编程语言 | 统计编程语言 |
学习曲线 | 相对平缓,适合初学者 | 统计背景较强,适合有统计学基础的人员 |
数据处理 | Pandas、NumPy 高效处理大数据 | dplyr、tidyverse 适合结构化数据 |
统计分析 | 需要依赖第三方库(如 Scipy、Statsmodels) | 内置丰富的统计函数和包 |
机器学习 | Scikit-learn、TensorFlow、PyTorch 支持 | caret、mlr 等库支持,但不如 Python 强大 |
可视化 | Matplotlib、Seaborn、Plotly | ggplot2、lattice |
生物医学支持 | 需要依赖第三方库 | Bioconductor 提供丰富的生物医学工具 |
社区与资源 | 社区庞大,学习资源丰富 | 统计和生物医学领域社区活跃 |
不用犹豫,都学一些
Python 是一种通用编程语言,在临床医学中的应用越来越广泛,尤其是在数据科学、机器学习和人工智能领域。
R 是一种专门为统计分析和数据可视化设计的语言,在临床医学中广泛应用于统计分析、生物信息学和流行病学研究。
特性 | Python | R |
---|---|---|
语言类型 | 通用编程语言 | 统计编程语言 |
学习曲线 | 相对平缓,适合初学者 | 统计背景较强,适合有统计学基础的人员 |
数据处理 | Pandas、NumPy 高效处理大数据 | dplyr、tidyverse 适合结构化数据 |
统计分析 | 需要依赖第三方库(如 Scipy、Statsmodels) | 内置丰富的统计函数和包 |
机器学习 | Scikit-learn、TensorFlow、PyTorch 支持 | caret、mlr 等库支持,但不如 Python 强大 |
可视化 | Matplotlib、Seaborn、Plotly | ggplot2、lattice |
生物医学支持 | 需要依赖第三方库 | Bioconductor 提供丰富的生物医学工具 |
社区与资源 | 社区庞大,学习资源丰富 | 统计和生物医学领域社区活跃 |
问题解决了吗哥?我也遇到这个问题不知道怎么办
","description":"R语言cnetplot函数设置circular=TRUE之后,生成的网络图不是环状的,怎么办? ZHANG的回答\\n\\n\\n问题解决了吗哥?我也遇到这个问题不知道怎么办","guid":"https://www.zhihu.com/question/8734256000/answer/108587585906","author":"ZHANG","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-23T14:45:10.222Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"密集追踪数据分析系列(二)","url":"https://zhuanlan.zhihu.com/p/25828180657","content":"Vol.1 前言 在上一期中,我们介绍了密集追踪数据分析系列中的多水平模型和动态结构方程模型(Dynamic Structural Equation Model, DSEM),它们的特点是个体水平的变量对个体内水平的变量进行解释。而在这一期中,我们将继续介绍组迭代多模型估计(Group Iterative Multiple Model Estimation, GIMME,也被成为GIMME网络),它则是由个体内水平推导至个体间水平。 [图片] 多水平模型和动态结构方程模型也被成为自上而下的方法。例如上一期中…","description":"Vol.1 前言 在上一期中,我们介绍了密集追踪数据分析系列中的多水平模型和动态结构方程模型(Dynamic Structural Equation Model, DSEM),它们的特点是个体水平的变量对个体内水平的变量进行解释。而在这一期中,我们将继续介绍组迭代多模型估计(Group Iterative Multiple Model Estimation, GIMME,也被成为GIMME网络),它则是由个体内水平推导至个体间水平。 [图片] 多水平模型和动态结构方程模型也被成为自上而下的方法。例如上一期中…","guid":"https://zhuanlan.zhihu.com/p/25828180657","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-23T13:12:58.737Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-如是我闻的回答:脑子不开窍的人,一辈子都是韭菜。 脑子开窍了,才明白,有些韭菜的宿命是注定的。 人穷,不是穷在口袋,而...","url":"https://www.zhihu.com/question/580956751/answer/108409468411","content":"能否分享一些让你豁然开朗的句子?脑子不开窍的人,一辈子都是韭菜。
脑子开窍了,才明白,有些韭菜的宿命是注定的。
人穷,不是穷在口袋,而是穷在脑袋。不开窍的人,无论去到哪里,都是被人欺骗的结果。
慢慢地,我只愿意帮助有成绩的人了。
能赚钱,有成绩的人,大多过来都礼貌。
他们身上有富人的高素质。只要我稍微提点,他们就会非常感恩。这些人是付出者,永远想着能为别人提供些什么资源。
相反,那些赚不到钱的穷人,过来就是索取,自以为是。好像天下人都欠了他什么似的。好心指导他一下,他还要给你讲,其实他都懂!几十岁的人了,连基本的为人处事都不懂,无缘了
","description":"能否分享一些让你豁然开朗的句子? 如是我闻的回答\\n\\n\\n脑子不开窍的人,一辈子都是韭菜。\\n\\n脑子开窍了,才明白,有些韭菜的宿命是注定的。\\n\\n人穷,不是穷在口袋,而是穷在脑袋。不开窍的人,无论去到哪里,都是被人欺骗的结果。\\n\\n慢慢地,我只愿意帮助有成绩的人了。\\n\\n能赚钱,有成绩的人,大多过来都礼貌。\\n\\n他们身上有富人的高素质。只要我稍微提点,他们就会非常感恩。这些人是付出者,永远想着能为别人提供些什么资源。\\n\\n相反,那些赚不到钱的穷人,过来就是索取,自以为是。好像天下人都欠了他什么似的。好心指导他一下,他还要给你讲,其实他都懂!几十岁的人了,连基本的为人处事都不懂,无缘了","guid":"https://www.zhihu.com/question/580956751/answer/108409468411","author":"如是我闻","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-23T10:08:34.428Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么现在上班的人都开始摆烂了?-好运连连的回答:哪吒2中申公豹的和弟弟的交流及自己的独白以及哪吒那句我命由我不由天的经典段落引起了很多人的共鸣,现在很...","url":"https://www.zhihu.com/question/613862113/answer/108313141381","content":"为什么现在上班的人都开始摆烂了?哪吒2中申公豹的和弟弟的交流及自己的独白以及哪吒那句我命由我不由天的经典段落引起了很多人的共鸣,现在很多视频也有模仿哪吒那帅气的动作,一起了很大的反响其实我觉得这更是大多数人现在心中所想的现照与代言,现在管理者与大工作出现了思想上的断层,他们总想用70-80后的管理方法管理90-00的人,总按他们的思维去思考现在的上班族,举个例子:管理者认为周末一起聚餐时搞团建,增强凝聚力,可他们不想想,我们不想这样的团聚,大家每天在一起,我更喜欢周末宅在家里享受自由,你这样的聚会只能增加员工的抗拒与抵触,就是挑战新时代的年轻人本心 ,看了哪吒2让我又想读一下这本书了!
1、“生活本就与众不同,何必追求和别人一样”
2、“在来得及的时候,做来得及的事”
3、“解不开的心结,就把它系成蝴蝶结吧”
4、“像一朵云,不一定温柔,但一定自由”
5.“找不到答案的时候,就顺其自然”
6、“幸福的秘密是自由,自由的秘密是勇敢”
7、“遗憾的事情太多了,没关系,尽力就好”
8、“只有敢于面对现实,才能真正获得自由”
9、“在细碎的美好中,感觉生活的温度,要开心,要快乐”
10、“自由不是随心所欲,而是选择的权利”
11、“放松点,不用和每个人都要好,也不用被每个人都喜欢”
12、“遇到好的人 就好好谈恋爱 遇不到就去看世界”
13、“如果生活很苦的话,那就做个甜甜的梦”
14、“如果没有常青树 那就做自己的自由树”
15、“山有顶峰,湖有彼岸,在人生漫漫长途中,万物皆有回转”
16、“遇到好的人 就好好谈恋爱 遇不到就去看世界”
17、“健康的活着,平静的过着,开心的笑着,适当的忙着,就很好”
18、“在忙,在开心,在找更好的自己”
19、“干啥都可以佛系,唯独搞钱要尽心尽力!”
20、“只要我喜欢,每一秒都是豆蔻年华”
21、“生活就是这样有点忙,有点烦有点苦,也有点甜”
22、“花朵无需比较,绽放就是最美的状态”
23、“与朋友分享快乐,快乐会翻倍;与朋友分担痛苦,痛苦会减半”
24、“平凡的小孩也可以做五彩斑斓的梦”
\ufeff\ufeff\ufeff勇敢说再见 才能被奖励新的开始
清醒知趣 明得失 知进退
\ufeff\ufeff\ufeff不过是大梦一场梦 不过是孤影照惊鸿
\ufeff\ufeff\ufeff于人于物 不必如此执着
\ufeff\ufeff\ufeff错把停泊当靠岸 我划着断桨又出发了
\ufeff\ufeff\ufeff人总会在某瞬间放下心中所有执念
\ufeff\ufeff算了 你有你的生活睡了
\ufeff\ufeff\ufeff都是阶段性陪伴 别惦记 别不开心
\ufeff\ufeff别随便找个参照物 就堕落的心安理得
\ufeff\ufeff\ufeff\ufeff你终会遇到和你同频共振的人
\ufeff\ufeff\ufeff\ufeff当过去变为奢望 活着便已知足
\ufeff\ufeff\ufeff\ufeff心不悦就看淡 路不通就转弯
\ufeff\ufeff\ufeff好晚了 你看太阳都下山了
\ufeff\ufeff\ufeff\ufeff做自己吧总会有人因为是你而爱你
\ufeff\ufeff\ufeff\ufeff我的热情已经对你耗尽了
\ufeff\ufeff\ufeff说不定随心所欲的生活更顺风顺水呢
\ufeff\ufeff\ufeff\ufeff万幸得以相识 遗憾止于相识
\ufeff\ufeff\ufeff我已经很努力了
\ufeff\ufeff\ufeff\ufeff花落春去不争艳
\ufeff\ufeff\ufeff\ufeff明智的放弃胜过盲目的执着
\ufeff\ufeff\ufeff\ufeff敲不开的门 再敲就不礼貌了
\ufeff\ufeff\ufeff遇见过去 成长释怀…
\ufeff\ufeff\ufeff\ufeff给时间一点时间
\ufeff\ufeff\ufeff销声匿迹 在我热爱的世界里
\ufeff\ufeff\ufeff\ufeff将心比心 再难见我绿树常青
\ufeff\ufeff\ufeff\ufeff于是我双手摊开 允许一切流走
\ufeff\ufeff\ufeff\ufeff祝你是你 生活无所谓意义
\ufeff\ufeff\ufeff\ufeff你的消息我等太久了 我困了
\ufeff\ufeff\ufeff\ufeff看过花开 无意花败
“远方很远 步履不停”
1、\ufeff\ufeff\ufeff人和人之间有过一些时刻就够了
2、“心宽便会百事从欢”
\ufeff\ufeff3、“与其庸人自扰 不如看淡点好”
4、\ufeff\ufeff“后来我时常沉默 心也越来越平静”
5、\ufeff\ufeff“想多了 都是问题 想开了 都是答案”
6、\ufeff\ufeff“当你越来越好的时候 就会看淡很多事”
7、\ufeff\ufeff“与万事言和 与独处相安”
8、\ufeff\ufeff“不因小事挂齿 人总是在往前走”
\ufeff\ufeff9、“其实早睡两小时 不会错过什么重要消息”
10、\ufeff\ufeff\ufeff“事来心应 事去心止”
11、“自行自省自醒”
12、\ufeff\ufeff\ufeff“生活会推着你往前走 没有到不了的明天”
13、\ufeff\ufeff\ufeff“会有始料不及的运气 会有突如其来的惊喜”
14、“每个人的心里都有一团火 路过的人只看到烟”
15、\ufeff\ufeff\ufeff“句号不是结局 是新的开始 是向过去的告辞”
16、\ufeff\ufeff\ufeff“生活会苦一阵子 但不会苦一辈子”
17、\ufeff\ufeff\ufeff“凡事不必太在意 缘深多聚聚 缘浅随它去”
18、\ufeff\ufeff\ufeff“最好的生活 也许就是 忙有所值闲有所趣”
19、“看淡一切是一种轻松 想开是一种快乐”
20、“我依旧待人真诚但不再寄予厚望”
21、“烂掉的果子自己会从树上掉下来 你就站着因果无需亲自动手”
22、“每一份通透都是都是我拿真诚换来的”
23、\ufeff\ufeff\ufeff“温柔的本质是理性 理性是极致的冷漠”
24、\ufeff\ufeff\ufeff“抓不住的东西太多了 还好我无所谓”
25、“任何人在任何时候突然分道扬镳都很正常”
26、\ufeff\ufeff\ufeff“人要靠自己 特别是女孩”
27、\ufeff\ufeff\ufeff“做有序的自己 等待万物更新”
28、“希望以后的生活是不需要理由的快乐”
29、\ufeff\ufeff\ufeff“不管对谁 做人做事一定要留三分”
30、\ufeff\ufeff\ufeff“让喜欢的事成为生活 不问东西顺心而走”
","description":"能否分享一些让你豁然开朗的句子? 文案馆的回答\\n\\n\\n1、“生活本就与众不同,何必追求和别人一样”\\n\\n2、“在来得及的时候,做来得及的事”\\n\\n3、“解不开的心结,就把它系成蝴蝶结吧”\\n\\n4、“像一朵云,不一定温柔,但一定自由”\\n\\n5.“找不到答案的时候,就顺其自然”\\n\\n6、“幸福的秘密是自由,自由的秘密是勇敢”\\n\\n7、“遗憾的事情太多了,没关系,尽力就好”\\n\\n8、“只有敢于面对现实,才能真正获得自由”\\n\\n9、“在细碎的美好中,感觉生活的温度,要开心,要快乐”\\n\\n10、“自由不是随心所欲,而是选择的权利”\\n\\n11、“放松点,不用和每个人都要好,也不用被每个人都喜欢”\\n\\n12、“遇到好的人 就好好谈恋爱…","guid":"https://www.zhihu.com/question/580956751/answer/108248107617","author":"文案馆","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-23T05:58:09.574Z","media":[{"url":"https://pic1.zhimg.com/v2-6cf5826a137c664ddd26295aa3ffed05.jpg","type":"photo","width":1080,"height":1058,"blurhash":"LYKcY4.lkoMwQmIoR+s;B5Q-WBx]"},{"url":"https://picx.zhimg.com/v2-184309d999e67e4ad92c383617c1c051.jpg","type":"photo","width":1080,"height":1062,"blurhash":"LdL3u,xtRkt6wI%2oyjZ0LRjkWWV"},{"url":"https://pica.zhimg.com/v2-1d601a646b4377051a2fed6c33758ef9.jpg","type":"photo","width":1080,"height":1066,"blurhash":"LPCZ#EnkDgShK-kDrVxbtTs:avW="},{"url":"https://picx.zhimg.com/v2-404c82907c6e8e7d7613328d1ee0f9e7.jpg","type":"photo","width":944,"height":946,"blurhash":"LCECn8D%t8~pE1D%t6IUW=Rit79G"},{"url":"https://pica.zhimg.com/v2-6b57de42998321319c1d20edf4ec15f2.jpg","type":"photo","width":944,"height":916,"blurhash":"L7Eo*yR54TI-s~V{oh%e^+WAt7kD"},{"url":"https://picx.zhimg.com/v2-eac0cd1faaba64f8b61ac6c7c9bf3573.jpg","type":"photo","width":1054,"height":1054,"blurhash":"LFOprl%$Rj.8~WNGRPf+PBVsadaK"},{"url":"https://pic1.zhimg.com/v2-5cdd9b93f6710cd47c22ca6f9d1a8a90.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LVLE==?^H?%3_3t8NbRPIWa$s+V?"},{"url":"https://picx.zhimg.com/v2-2fe4de5e821c06ea6a079454886b0aae.jpg","type":"photo","width":1024,"height":1024,"blurhash":"LfFjNUgjMytRyZx]ngt8%3s8RifR"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"单细胞分析(16)—— RNA Velocity 分析流程 | RNA速率实操的干货内容","url":"https://zhuanlan.zhihu.com/p/25728201783","content":"RNA Velocity 分析流程 什么是 RNA Velocity?RNA velocity 是一种通过单细胞 RNA 测序(scRNA-seq)数据推测细胞未来状态的分析方法。它基于细胞中 spliced(剪切后)和 unspliced(未剪切)mRNA的比例,来计算基因表达变化的速率,并预测细胞的发育轨迹。这一方法最早由 La Manno et al., 2018在 Nature 发表: *La Manno, G., Soldatov, R., Zeisel, A. et al. RNA velocity of single cells.*Nature560, 494–498 (2018).DOI…","description":"RNA Velocity 分析流程 什么是 RNA Velocity?RNA velocity 是一种通过单细胞 RNA 测序(scRNA-seq)数据推测细胞未来状态的分析方法。它基于细胞中 spliced(剪切后)和 unspliced(未剪切)mRNA的比例,来计算基因表达变化的速率,并预测细胞的发育轨迹。这一方法最早由 La Manno et al., 2018在 Nature 发表: *La Manno, G., Soldatov, R., Zeisel, A. et al. RNA velocity of single cells…","guid":"https://zhuanlan.zhihu.com/p/25728201783","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-23T02:45:37.240Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"学习笔记:Stats: Data Analysis & Visualization with R","url":"https://zhuanlan.zhihu.com/p/25700147528","content":"1. Research Methods & Importance of Statistics(1) Four Steps of Research ProcessDefine research questionDesign study & collect dataAnalyze dataInterpret & report results(2) Two Epistemic GapsTheoretical gap (knowledge to be discovered)Methodological gap (techniques to bridge theory & data)(3) Data & Variable TypesNominal (categories)Ordinal (ordered categories)Interval (numeric, no true zero)Ratio…","description":"1. Research Methods & Importance of Statistics(1) Four Steps of Research ProcessDefine research questionDesign study & collect dataAnalyze dataInterpret & report results(2) Two Epistemic GapsTheoretical gap (knowledge to be discovered)Methodological gap (techniques to bridge…","guid":"https://zhuanlan.zhihu.com/p/25700147528","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-22T19:00:53.533Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-野草的回答:我们生来本一无所有,为什么要害怕失去呢? 这段话平复了我的焦虑 钱没了可以再挣,工作没了可以再找,朋友没了...","url":"https://www.zhihu.com/question/580956751/answer/107764599920","content":"能否分享一些让你豁然开朗的句子?这段话平复了我的焦虑
钱没了可以再挣,工作没了可以再找,朋友没了可以再交,爱情没了可以再找,你生来就一无所有,何惧从头再来。水到绝境是瀑布,人到绝境是重生,半山腰总是很急的,你得努力去山顶看看,人生这道题,怎么选都有遗憾
真正的强者,是夜深人静的时候,把心掏出来自己缝缝补补, 睡一觉起来又是
信心百倍, 活着就该逢山开路, 遇水架桥, 睡前原谅一切,醒来便是重生。
两手空空,才能无限拥有。
我才21岁,怎么会想着结婚的事,我要挣好多好多的钱,然后去旅行,去西藏去长白山去玉龙雪山,去好多好多地方,去看山看海,去感受各个地方的风士人情,别烂在讨去和梦里。
人生辽阔,不应该只活在爱恨里,睡他妈不着。想到自己曾经是个很好玩的人,确实变无趣了,心里没波动了。饭要和投缘的吃, 日子要跟懂你的人过,这青春太好,好到我无论怎么过都觉得浪费,回头一看都要后悔。
每一年,我都以为这是最好的年纪了。但当我又长一年,我才知道原来好还可以更好,年龄只不过是一个数字,而不是阻碍。
真的越长大越自由,越长大越勇敢,今天永远比昨天更漂亮,今年永远比去年更通透。
只有当你不再害怕失去,生活无限精彩。
办公做做ppt,文档还是足够,如果是剪辑视频还是不够用的。
","description":"macbookair m1 8+256够用吗? 阿彦菌的回答\\n\\n\\n办公做做ppt,文档还是足够,如果是剪辑视频还是不够用的。","guid":"https://www.zhihu.com/question/659839610/answer/107021269644","author":"阿彦菌","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T12:42:14.190Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于R语言中mice包的多重插补","url":"https://zhuanlan.zhihu.com/p/25438544922","content":"Vol.1 前言 在数据分析和研究中,缺失数据是一个非常常见的现象。它可能由于多种原因引起,包括受访者拒绝回答某些问题、数据记录错误、设备故障或者样本损失等。处理缺失数据是数据分析中的重要问题,因为它可能会对结果产生影响,甚至导致偏差或错误的结论。如果缺失数据的数量相对于数据集的规模较少,那么忽略具有缺失特征的少数样本可能是避免分析偏差的最佳策略。但是,忽略可用的数据点可能会剥夺数据的一定量信息。研究…","description":"Vol.1 前言 在数据分析和研究中,缺失数据是一个非常常见的现象。它可能由于多种原因引起,包括受访者拒绝回答某些问题、数据记录错误、设备故障或者样本损失等。处理缺失数据是数据分析中的重要问题,因为它可能会对结果产生影响,甚至导致偏差或错误的结论。如果缺失数据的数量相对于数据集的规模较少,那么忽略具有缺失特征的少数样本可能是避免分析偏差的最佳策略。但是,忽略可用的数据点可能会剥夺数据的一定量信息。研究…","guid":"https://zhuanlan.zhihu.com/p/25438544922","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T12:19:33.494Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"统计软件 R 语言学习笔记 (1) R 语言基本介绍","url":"https://zhuanlan.zhihu.com/p/25386640969","content":"本文介绍如何下载 R 语言和软件 RStudio 以及 R 语言的基本语法、R 的程序包、R 的对象。具体介绍了如何下载包、管理包、加载包和删除包,以及对象的命名和删除方法,和对象的属性和类别。 1 下载安装 R官网地址 https://cran.r-project.org/ 不可含有中文路径2 安装 RStudio官网地址 https://posit.co/downloads/ [图片] 3 基本语法3.1 常见符号> :命令或运算提示符+ :续行符多条语句之间用 ; 或者回车符分隔多个语句可以用 {} 组合以 # 开始为注释…","description":"本文介绍如何下载 R 语言和软件 RStudio 以及 R 语言的基本语法、R 的程序包、R 的对象。具体介绍了如何下载包、管理包、加载包和删除包,以及对象的命名和删除方法,和对象的属性和类别。 1 下载安装 R官网地址 https://cran.r-project.org/ 不可含有中文路径2 安装 RStudio官网地址 https://posit.co/downloads/ [图片] 3 基本语法3.1 常见符号> :命令或运算提示符+ :续行符多条语句之间用 ; 或者回车符分隔多个语句可以用 {} 组合以 # 开始为注释…","guid":"https://zhuanlan.zhihu.com/p/25386640969","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T08:49:56.965Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【科研必备】基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建及典型案例应用(LCA模型的构建与分析等)","url":"https://zhuanlan.zhihu.com/p/25378602961","content":"生命周期分析(Life Cycle Analysis, LCA) 是一种评估产品、过程或服务在整个生命周期内对环境影响的系统性方法。它从原材料获取、生产、使用到废弃处理的各个阶段,全面量化资源消耗和环境影响,为可持续决策提供科学依据。1. LCA 的核心目标量化环境影响:评估产品生命周期内的资源消耗和排放。识别改进机会:找出环境影响最大的阶段,优化设计和管理。支持决策:为政策制定、产品设计和市场策略提供数据支持。2. LCA 的四个…","description":"生命周期分析(Life Cycle Analysis, LCA) 是一种评估产品、过程或服务在整个生命周期内对环境影响的系统性方法。它从原材料获取、生产、使用到废弃处理的各个阶段,全面量化资源消耗和环境影响,为可持续决策提供科学依据。1. LCA 的核心目标量化环境影响:评估产品生命周期内的资源消耗和排放。识别改进机会:找出环境影响最大的阶段,优化设计和管理。支持决策:为政策制定、产品设计和市场策略提供数据支持。2. LCA 的四个…","guid":"https://zhuanlan.zhihu.com/p/25378602961","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T08:41:33.673Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"两天入门R语言,周末开讲","url":"https://zhuanlan.zhihu.com/p/25341068162","content":"R语言入门课 生信基地 希望能够给大家提供系统性、形成性、规范性的生信教学。前面几次活动中同学们表示希望能够有线下集中学习以及针对性的指导、答疑。所以,此次我们将于2025年02月22日~23日(周六周日)推出\\"生信R语言入门课\\"(线上线下均可参与),共分为\\"R介绍\\"、\\"R语言数据对象\\"、\\"基本数据管理\\"、\\"图形初级(ggplot2)\\"四个模块。当然,我们也不做生信快餐,本次活动有回放,后续我们会持续拉群在群里进行课程内容的答疑(也方便…","description":"R语言入门课 生信基地 希望能够给大家提供系统性、形成性、规范性的生信教学。前面几次活动中同学们表示希望能够有线下集中学习以及针对性的指导、答疑。所以,此次我们将于2025年02月22日~23日(周六周日)推出\\"生信R语言入门课\\"(线上线下均可参与),共分为\\"R介绍\\"、\\"R语言数据对象\\"、\\"基本数据管理\\"、\\"图形初级(ggplot2)\\"四个模块。当然,我们也不做生信快餐,本次活动有回放,后续我们会持续拉群在群里进行课程内容的答疑(也方便…","guid":"https://zhuanlan.zhihu.com/p/25341068162","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T06:51:45.281Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"零基础入门转录组下游分析——加权基因共表达网络分析(WGCNA)","url":"https://zhuanlan.zhihu.com/p/25272693492","content":"目录部分跳转链接: 零基础入门生信数据分析——导读 注:可根据自己的需求从总体目录中跳转到所需的分析点 本文将手把手教你做 转录组下游分析——零基础入门转录组下游分析——加权基因共表达网络分析(WGCNA) 目录如下:1. WGCNA基础知识2. WGCNA(Rstudio)——代码实操2. 1 数据处理2. 2 构建样本聚类树2. 3 计算软阈值2. 4 一步法构建WGCNA网络2. 5 绘制基因动态剪切树2. 6 计算模块与性状相关性(重要)2. 7 绘制模块与…","description":"目录部分跳转链接: 零基础入门生信数据分析——导读 注:可根据自己的需求从总体目录中跳转到所需的分析点 本文将手把手教你做 转录组下游分析——零基础入门转录组下游分析——加权基因共表达网络分析(WGCNA) 目录如下:1. WGCNA基础知识2. WGCNA(Rstudio)——代码实操2. 1 数据处理2. 2 构建样本聚类树2. 3 计算软阈值2. 4 一步法构建WGCNA网络2. 5 绘制基因动态剪切树2. 6 计算模块与性状相关性(重要)2. 7 绘制模块与…","guid":"https://zhuanlan.zhihu.com/p/25272693492","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T03:53:47.481Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"单细胞分析(15)—— Seurat → Scanpy:Seurat 数据转换为 Scanpy | 无缝衔接","url":"https://zhuanlan.zhihu.com/p/25262647576","content":"Seurat 转换为 Scanpy 的流程 [图片] 为什么要将 Seurat 数据转换为 Scanpy?在单细胞 RNA-seq (scRNA-seq) 数据分析中,Seurat(R 语言)和 Scanpy(Python)是最常用的两个工具。尽管 Seurat 在 R 端提供了强大的数据处理和可视化功能,但 Scanpy 结合了 scVelo、CellRank、SCVI 等 Python 生态工具,适用于更高级的数据分析,如:✅ RNA velocity 分析(scVelo)—— 推测细胞命运轨迹 ✅ 批次校正和大规模数据处理(scanpy.pp…","description":"Seurat 转换为 Scanpy 的流程 [图片] 为什么要将 Seurat 数据转换为 Scanpy?在单细胞 RNA-seq (scRNA-seq) 数据分析中,Seurat(R 语言)和 Scanpy(Python)是最常用的两个工具。尽管 Seurat 在 R 端提供了强大的数据处理和可视化功能,但 Scanpy 结合了 scVelo、CellRank、SCVI 等 Python 生态工具,适用于更高级的数据分析,如:✅ RNA velocity 分析(scVelo)—— 推测细胞命运轨迹 ✅ 批次校正和大规模数据处理(scanpy.pp…","guid":"https://zhuanlan.zhihu.com/p/25262647576","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-21T02:28:44.576Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"生信绘图只能用R语言吗?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列...","url":"https://www.zhihu.com/question/316596345/answer/106388475363","content":"生信绘图只能用R语言吗?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=price, group=cut, fill=cut)) +\\n geom_density(adjust=1.5, alpha=0.8) +\\n labs(x=\\"Value\\", y=\\"Density\\") +\\n guides(fill=guide_legend(\\"Type\\")) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(), legend.position = \\"top\\",\\n legend.key.size = unit(24,\\"pt\\")) +\\n scale_fill_manual(values = rev(c(\\"#5470c6\\",\\"#91cc75\\",\\"#fac858\\",\\"#ee6666\\")))\\np
最后我们保存绘制的图形:
ggsave(\\"save/density-group.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。
sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
韦恩分析(Venn Analysis)常用于可视化不同数据集之间的交集和并集。维恩图(Venn diagram),也叫文氏图、温氏图、韦恩图、范氏图,用于显示元素集合重叠区域的关系型图表,通过图形与图形之间的层叠关系,来反应数据集之间的相交关系。在 R 语言中,进行韦恩分析(Venn图绘制)可以通过多个不同的包来实现,常用的包括 VennDiagram、venn 和 ggVenn 等。本文案使用ggVenn软件包进行分析。
####Venn分析####
#上调基因的交集
####机器学习重要性排序的Venn分析####
setwd(\\"…\\")
remove(list = ls())#清除环境变量
#install.packages(\\"ggvenn \\")#如没有,需下载安装包
library(ggvenn)#加载所需要的安装包
venn_list<-read.csv(\\"上调基因.csv\\")#输入数据
数据样式
venn_list<-venn_list[,1:3]#选择进行venn分析的列
venn_list1<-as.list(venn_list)#将数据框格式数据转换成列表格式数据
pdf(file = \\"Venn图_上调.pdf\\", height = 8, width = 12)#绘制空白画布
ggvenn(
data = venn_list1, # 数据列表
columns = NULL, # 对选中的列名绘图,最多选择4个,NULL为默认全选
show_elements = F, # 当为TRUE时,显示具体的交集情况,而不是交集个数
label_sep = \\"\\\\n\\", # 当show_elements = T时生效
show_percentage = T, # 显示每一组的百分比
digits = 1, # 百分比的小数点位数
fill_color = c(\\"#0072B5\\", \\"#BC3C28\\",\\"#008B8B\\",\\"#FFE1FF\\",\\"#CD3278\\",\\"#CD853F\\"), # 填充颜色
fill_alpha = 0.5, # 填充透明度
stroke_color = \\"black\\", # 边缘颜色
stroke_alpha = 0.5, # 边缘透明度
stroke_size = 0.5, # 边缘粗细
stroke_linetype = \\"solid\\",# 边缘线条 # 实线:solid 虚线:twodash longdash 点:dotdash dotted dashed 无:blank
set_name_color = \\"black\\", # 组名颜色
set_name_size = 6, # 组名大小
text_color = \\"black\\", # 交集个数颜色
text_size = 5 # 交集个数文字大小
)
dev.off()#关闭画布
#获得交集基因
genes_set1<-venn_list$TCGA_N_T#将第一列命名成genes_set1
genes_set2<-venn_list$GEO_CON_PTC#将第二列命名成genes_set2
genes_set3<-venn_list$GEO_PTC_ATC#将第三列命名成genes_set3
# 获取交集基因
intersection_genes <- Reduce(intersect, list(genes_set1, genes_set2, genes_set3))
write.csv(intersection_genes, \\"上调基因交集.csv\\")
Venn分析到这就完成啦,最终我们既获得了Venn图,又得到了具体的交集基因。
所有数据我都存放在百度网盘了,欢迎大家访问,
通过网盘分享的文件:数据.zip
链接: https://pan.baidu.com/s/11e0IEa2fI5L31MBqEcPA0w 提取码: shan
--来自百度网盘超级会员v5的分享
","description":"有用R语言绘图的,哪个包你最常用? 善木科研的回答\\n\\n韦恩分析\\n\\n韦恩分析(Venn Analysis)常用于可视化不同数据集之间的交集和并集。维恩图(Venn diagram),也叫文氏图、温氏图、韦恩图、范氏图,用于显示元素集合重叠区域的关系型图表,通过图形与图形之间的层叠关系,来反应数据集之间的相交关系。在 R 语言中,进行韦恩分析(Venn图绘制)可以通过多个不同的包来实现,常用的包括 VennDiagram、venn 和 ggVenn 等。本文案使用ggVenn软件包进行分析。\\n\\n\\n\\n\\n效果图\\n\\n\\n\\n\\n\\n\\n\\n代码展示\\n\\n\\n\\n\\n####Venn分析####\\n\\n#上调基因的交集\\n\\n####机器学习重要…","guid":"https://www.zhihu.com/question/495598810/answer/105719041513","author":"善木科研","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T03:52:04.581Z","media":[{"url":"https://picx.zhimg.com/v2-384d40e754dfac51ed649edc100372d5.jpg","type":"photo","width":519,"height":511,"blurhash":"LkN^#jKj~W-TZ%OFOXnN^*slIoW="},{"url":"https://picx.zhimg.com/50/v2-ba095fca9d84c4de9a5096e2b7727cf8.jpg","type":"photo","width":239,"height":293,"blurhash":"L7Qcr3kQofIU~qWBRjj[WBRjayof"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R调用内置颜色","url":"https://zhuanlan.zhihu.com/p/24997663249","content":"原文链接:R调用内置颜色 欢迎关注“细猪技术”微信公众号,更早获取最新资讯许多科研文章配图不仅内容丰富、形式新奇,而且连配色也都非常之惊艳。本文粗略地探索一下R语言调用内置颜色的方法。推荐R配色查询网站( https://www.biomooc.com/color/colorsInR.html ),允许便捷地查询十六进制色值的各种R内置颜色。在网页中右击鼠标选择“检查”按钮,右侧弹出“检查侧栏”,在“Elements”选项卡滑动翻阅,当鼠标停留在“style = \\"background: #EE5C42\\"”…","description":"原文链接:R调用内置颜色 欢迎关注“细猪技术”微信公众号,更早获取最新资讯许多科研文章配图不仅内容丰富、形式新奇,而且连配色也都非常之惊艳。本文粗略地探索一下R语言调用内置颜色的方法。推荐R配色查询网站( https://www.biomooc.com/color/colorsInR.html ),允许便捷地查询十六进制色值的各种R内置颜色。在网页中右击鼠标选择“检查”按钮,右侧弹出“检查侧栏”,在“Elements”选项卡滑动翻阅,当鼠标停留在“style = \\"background: #EE5C42\\"”…","guid":"https://zhuanlan.zhihu.com/p/24997663249","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T03:16:38.451Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R绘制热图(Heatmap)","url":"https://zhuanlan.zhihu.com/p/24999505509","content":"原文链接:R绘制热图(Heatmap) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯热图(Heatmap)是一种将规则化矩阵数据转换成颜色色调的常规可视化方法,用于描述高维数据结构及其相互关系,或在不同条件或时间轴下的变化规律。热图使用色块色调及大小来直观高效地映射大量数据,也能帮助用户快速挖掘数据中的规律和趋势。热图的基础是一个二维数据矩阵,行和列分别代表不同的变量或类别,矩阵中的每个元素对应着相应行和列变量…","description":"原文链接:R绘制热图(Heatmap) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯热图(Heatmap)是一种将规则化矩阵数据转换成颜色色调的常规可视化方法,用于描述高维数据结构及其相互关系,或在不同条件或时间轴下的变化规律。热图使用色块色调及大小来直观高效地映射大量数据,也能帮助用户快速挖掘数据中的规律和趋势。热图的基础是一个二维数据矩阵,行和列分别代表不同的变量或类别,矩阵中的每个元素对应着相应行和列变量…","guid":"https://zhuanlan.zhihu.com/p/24999505509","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T03:09:33.950Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R绘制韦恩图(Venn)","url":"https://zhuanlan.zhihu.com/p/24997840150","content":"原文链接:R绘制韦恩图(Venn) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯韦恩图(Venn diagram)也称维恩图和文氏图,是集合及其间关系的一种直观的图形化表示工具,通常用于表达逻辑和概率问题。利用圆表示集合的做法始于18世纪的欧拉,由英国逻辑学家和哲学家约翰·韦恩(John Venn)于1880年对欧拉的方法进行改进和发明了韦恩图,剑桥大学彩色玻璃窗上有对此发明的纪念标志。韦恩图往往用一个圆形或封闭曲线围成的平面区…","description":"原文链接:R绘制韦恩图(Venn) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯韦恩图(Venn diagram)也称维恩图和文氏图,是集合及其间关系的一种直观的图形化表示工具,通常用于表达逻辑和概率问题。利用圆表示集合的做法始于18世纪的欧拉,由英国逻辑学家和哲学家约翰·韦恩(John Venn)于1880年对欧拉的方法进行改进和发明了韦恩图,剑桥大学彩色玻璃窗上有对此发明的纪念标志。韦恩图往往用一个圆形或封闭曲线围成的平面区…","guid":"https://zhuanlan.zhihu.com/p/24997840150","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T03:04:43.038Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于ggseg Package进行大脑统计的可视化","url":"https://zhuanlan.zhihu.com/p/24973648713","content":"Vol.1 引言人们越来越强调以更直观的方式可视化神经成像的结果,而表示这些结果的常见统计图,如柱状图,缺乏神经成像数据中固有的空间维度。因此,大脑统计的可视化需要包含其空间位置信息。 目前在R中使用较多的两个脑统计的可视化R包是ggseg和ggseg3d,它们集成了脑的空间信息。 ggseg和ggseg3d包分别将已有的大脑模板可视化为2D多边形和3D图形。这两个包都与其他成熟的R包集成,这允许很大的灵活性。此外,附带的ggsegExtra…","description":"Vol.1 引言人们越来越强调以更直观的方式可视化神经成像的结果,而表示这些结果的常见统计图,如柱状图,缺乏神经成像数据中固有的空间维度。因此,大脑统计的可视化需要包含其空间位置信息。 目前在R中使用较多的两个脑统计的可视化R包是ggseg和ggseg3d,它们集成了脑的空间信息。 ggseg和ggseg3d包分别将已有的大脑模板可视化为2D多边形和3D图形。这两个包都与其他成熟的R包集成,这允许很大的灵活性。此外,附带的ggsegExtra…","guid":"https://zhuanlan.zhihu.com/p/24973648713","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T02:01:45.676Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何对两个网络进行网络比较(NCT)","url":"https://zhuanlan.zhihu.com/p/24963538318","content":"Vol.1 引言我们团队关于网络分析的推文已经写了很多了,以至于我这几天才发现我们并没有写过如何对两个网络进行网络比较的推文。而网络比较作为比较两个网络各个方面是否存在差异的重要方法,经常被用在网络分析文章的最后一个部分。 所以,今天我将给大家系统地介绍一下怎么对两个网络进行网络比较。 首先,我们明确一下,网络比较是做什么的? 网络比较通过 置换检验(一个比较复杂的概念,不做解释,想了解的话可以看提供的参…","description":"Vol.1 引言我们团队关于网络分析的推文已经写了很多了,以至于我这几天才发现我们并没有写过如何对两个网络进行网络比较的推文。而网络比较作为比较两个网络各个方面是否存在差异的重要方法,经常被用在网络分析文章的最后一个部分。 所以,今天我将给大家系统地介绍一下怎么对两个网络进行网络比较。 首先,我们明确一下,网络比较是做什么的? 网络比较通过 置换检验(一个比较复杂的概念,不做解释,想了解的话可以看提供的参…","guid":"https://zhuanlan.zhihu.com/p/24963538318","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-20T01:35:32.822Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 语言和 Python 学哪个?-微信用户的回答:90米土壤厚度数据(2010-2018) 来源:中国高分辨率国家土壤信息格网基本属性数据集(国家地球系统科学数据中心) 制...","url":"https://www.zhihu.com/question/265157713/answer/105483803305","content":"R 语言和 Python 学哪个?90米土壤厚度数据(2010-2018)
来源:中国高分辨率国家土壤信息格网基本属性数据集(国家地球系统科学数据中心)
制作单位:中国科学院南京土壤研究所
深度:0-5、5-15、15-30、30-60、60-100、100-200cm
格式:Tiff
空间分辨率:90米
\ufeff90米土壤厚度数据(2010-2018) 来源:中国高分辨率国家土壤信息格网基本属性数据集(国家地球系统科学数据中心) 制作单位:中国科学院南京土壤研究所 深度:0-5、5-15、15-30、30-60、60-100、100-200cm 格式:Tiff 空间分辨率:90米
1
1
为了使用Python(通过GDAL库)或R语言编写脚本来批量处理Tiff文件,并执行如计算平均土壤厚度、生成统计报告等数据分析任务,下面将分别提供Python和R的具体示例代码。
首先,确保安装了gdal
。可以通过pip安装Python GDAL包:
pip install gdal
以下是一个Python脚本的示例,用于读取多个Tiff文件,计算每个文件中的平均土壤厚度,并输出统计报告:
import os\\nfrom osgeo import gdal\\nimport numpy as np\\n\\ndef calculate_stats(file_path):\\n \\"\\"\\"计算单个Tiff文件的统计信息\\"\\"\\"\\n dataset = gdal.Open(file_path)\\n band = dataset.GetRasterBand(1)\\n data = band.ReadAsArray()\\n\\n # 假设无效值为-9999\\n valid_data = data[data != -9999]\\n\\n if len(valid_data) > 0:\\n mean_thickness = np.mean(valid_data)\\n std_dev = np.std(valid_data)\\n max_thickness = np.max(valid_data)\\n min_thickness = np.min(valid_data)\\n else:\\n mean_thickness, std_dev, max_thickness, min_thickness = [np.nan] * 4\\n\\n return mean_thickness, std_dev, max_thickness, min_thickness\\n\\ndef process_directory(directory_path):\\n \\"\\"\\"遍历目录下的所有Tiff文件并计算统计信息\\"\\"\\"\\n stats = []\\n for filename in os.listdir(directory_path):\\n if filename.endswith(\\".tif\\"):\\n file_path = os.path.join(directory_path, filename)\\n mean, std_dev, max_val, min_val = calculate_stats(file_path)\\n stats.append((filename, mean, std_dev, max_val, min_val))\\n\\n # 输出统计报告\\n print(f\\"{\'File\':<20} {\'Mean Thickness\':<15} {\'Std Dev\':<10} {\'Max Thickness\':<15} {\'Min Thickness\':<15}\\")\\n for stat in stats:\\n print(f\\"{stat[0]:<20} {stat[1]:<15.2f} {stat[2]:<10.2f} {stat[3]:<15.2f} {stat[4]:<15.2f}\\")\\n\\n# 示例调用\\ndirectory_path = \'path/to/tiff/files\'\\nprocess_directory(directory_path)
在R中,可以使用raster
包来处理栅格数据。首先,确保安装了必要的包:
install.packages(\\"raster\\")
以下是R语言的一个示例脚本,用于读取多个Tiff文件,计算每个文件中的平均土壤厚度,并输出统计报告:
library(raster)\\n\\ncalculate_stats <- function(file_path) {\\n # 读取栅格文件\\n raster_layer <- raster(file_path)\\n\\n # 获取数值\\n values <- getValues(raster_layer)\\n\\n # 假设无效值为-9999\\n valid_values <- values[!is.na(values) & values != -9999]\\n\\n if (length(valid_values) > 0) {\\n mean_thickness <- mean(valid_values)\\n std_dev <- sd(valid_values)\\n max_thickness <- max(valid_values)\\n min_thickness <- min(valid_values)\\n } else {\\n mean_thickness <- NA\\n std_dev <- NA\\n max_thickness <- NA\\n min_thickness <- NA\\n }\\n\\n return(data.frame(mean_thickness, std_dev, max_thickness, min_thickness))\\n}\\n\\nprocess_directory <- function(directory_path) {\\n files <- list.files(path = directory_path, pattern = \\"*.tif$\\", full.names = TRUE)\\n stats_list <- lapply(files, calculate_stats)\\n\\n # 将结果合并到一个数据框中\\n stats_df <- do.call(rbind, stats_list)\\n rownames(stats_df) <- basename(files)\\n\\n print(cbind(Filename = rownames(stats_df), round(stats_df, 2)))\\n}\\n\\n# 示例调用\\ndirectory_path <- \\"path/to/tiff/files\\"\\nprocess_directory(directory_path)
两个脚本都实现了基本的功能:遍历指定目录下的所有Tiff文件,计算每张图像的平均土壤厚度、标准差、最大值和最小值,并打印出统计报告。你可以根据需要进一步扩展这些脚本,例如添加更多的统计指标,或者将结果保存到文件中。对于更复杂的数据分析需求,还可以考虑结合其他工具和方法,比如Pandas(对于Python)或dplyr(对于R),以便进行更深入的数据处理和可视化。
","description":"R 语言和 Python 学哪个? 微信用户的回答\\n\\n\\n90米土壤厚度数据(2010-2018)\\n\\n来源:中国高分辨率国家土壤信息格网基本属性数据集(国家地球系统科学数据中心)\\n\\n制作单位:中国科学院南京土壤研究所\\n\\n深度:0-5、5-15、15-30、30-60、60-100、100-200cm\\n\\n格式:Tiff\\n\\n空间分辨率:90米\\n\\n\ufeff90米土壤厚度数据(2010-2018) 来源:中国高分辨率国家土壤信息格网基本属性数据集(国家地球系统科学数据中心) 制作单位:中国科学院南京土壤研究所 深度:0-5、5-15、15-30、30-60、60-100、100-200cm 格式…","guid":"https://www.zhihu.com/question/265157713/answer/105483803305","author":"微信用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-19T23:49:21.959Z","media":[{"url":"https://pic1.zhimg.com/v2-7d208841b41a142a6b8d2e5178354eee.jpg","type":"photo","width":920,"height":709,"blurhash":"LPPZx:tm%Lxo}oXJNLnDi-WSsk$*"},{"url":"https://picx.zhimg.com/v2-7f97daf2c69a217b542d333ead9cc29f.jpg","type":"photo","width":908,"height":456,"blurhash":"LLQcS8y8yBZe;rO6EuryTdo5Rpkp"},{"url":"https://pic1.zhimg.com/v2-b82b09a321dea947716f0444022ec372.jpg","type":"photo","width":915,"height":453,"blurhash":"LaOD^0%6NW?a~K$_oNIu-is*bIod"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想买本r语言入门书, R语言实战好还是R语言入门与实践更适合新手?-医学统计数据分析的回答:概念与核心指标CIC曲线、DCA曲线、校准曲线、ROC曲线和PR曲线的概念...","url":"https://www.zhihu.com/question/474083588/answer/105474674610","content":"想买本r语言入门书, R语言实战好还是R语言入门与实践更适合新手?概念与核心指标
CIC曲线、DCA曲线、校准曲线、ROC曲线和PR曲线的概念、区别及其在医学统计中的应用。
CIC曲线:
评估诊断测试或预测模型的实际临床影响,展示不同阈值下正确/错误分类人数
横轴:阈值概率
纵轴:高风险人群数量(红色轴)、真阳性数量(蓝色轴)
DCA曲线:
通过净获益(Net Benefit)衡量模型在不同阈值下的临床决策价值
横轴:阈值概率
纵轴:净获益(=TP/n - FP/n×(pt/(1-pt)))
校准曲线:
检验模型预测概率与实际发生概率的一致性
横轴:预测概率分箱
纵轴:实际发生概率(理想情况为45度直线)
ROC曲线:
评估模型区分能力,通过TPR与FPR关系反映诊断准确性
横轴:FPR(假阳性率)
纵轴:TPR(真阳性率)
PR曲线:
关注正类预测性能,适合不平衡数据评估
横轴:召回率(Recall)
纵轴:精确率(Precision)
医学统计应用场景
1. CIC曲线
临床应用:癌症筛查方案选择:对比不同模型在高风险人群中的真阳性检出效率
资源配置优化:预测ICU床位需求时,评估不同风险阈值对应的患者数量
示例:在乳腺癌筛查中,当设定风险阈值为20%时,CIC显示:高风险人群占比15%(约150人/千例)
其中真阳性占比30%(45例实际患病)
2. DCA曲线
临床应用:治疗决策支持:比较化疗方案在不同风险阈值下的净临床获益
模型优选:在多个预测模型中,选择净获益最高的用于临床实践
示例:前列腺癌预测模型中,当阈值概率在10%-30%区间时,DCA显示:净获益从0.15提升至0.25
显著优于\\"全部治疗\\"或\\"不治疗\\"策略
3. 校准曲线
临床应用:模型验证:评估心梗风险评分(如GRACE评分)的预测准确性
概率校准:对机器学习模型(如XGBoost)的输出进行Platt缩放修正
示例:某卒中预测模型在0-20%低风险区间预测值偏高(实际发生率10% vs 预测15%),需重新校准
4. ROC曲线
临床应用:生物标志物评价:比较PSA与PCA3对前列腺癌的诊断效能(AUC对比)
影像组学模型:评估CT特征对肺结节良恶性鉴别的敏感度/特异度组合
示例:新冠预测模型中,ROC曲线显示:最佳阈值为0.32(Youden指数最大)
此时敏感度85%,特异度76%
5. PR曲线
临床应用:罕见病检测:评估新生儿遗传病筛查模型的精确率-召回率平衡
药物副作用预警:在ADR发生率<1%的数据中,识别高召回率模型
示例:胰腺癌早期筛查数据(患病率2%)中:模型A:精确率40%,召回率80%
模型B:精确率60%,召回率50%
根据临床需求选择侧重召回或精确的模型
那么我们如何分别用Python和R语言进行CIC曲线、DCA曲线、校准曲线、ROC曲线、PR曲线等模型评价曲线的绘制呢?我们仍以熟悉的示例数据为例,进行简单操作示例。
我们先用Python初步拟合logistic回归并对测试集进行预测:
#加载程序包(openpyxl和pandas等)
#使用pandas读取示例数据xlsx文件
import openpyxl
import pandas as pd
import matplotlib.pyplot as plt
datalr = pd.read_excel(r\'C:\\\\Users
\\\\L\\\\Desktop\\\\示例数据.xlsx\')
# 查看前几行数据
print(datalr.head())
#尝试进行logistic回归
#安装包
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 分离特征和目标变量
X = datalr[[\'指标1\', \'指标2\', \'指标3\',\'指标4\',\'指标5\',\'指标6\']]
y = datalr[\'结局\']
# 划分训练集和测试集
X_train, X_test, y_train, y_test =
train_test_split(X, y, test_size=0.3,
random_state=42)
# 创建并训练Logistic回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
#返回Logistic回归模型内各个参数(截距和偏回归系数)
print(\\"Logistic模型的截距和偏回归系数及参数为:\\")
print(model.intercept_,model.coef_)
# 对测试集数据进行预测
y_pred = model.predict(X_test)
prob = model.predict_proba(X_test)[:, 1]
resulta=accuracy_score(y_test, y_pred)
# 评估模型准确度
accuracy = accuracy_score(y_test, y_pred)
print(f\'模型准确度: {accuracy}\')
#使用statsmodels库拟合logistic回归并获取OR值
import statsmodels.api as sm
modellr = sm.Logit(y_train, X_train)
# 进行模型拟合
result = modellr.fit()
# 打印结果摘要,其中包括OR值
print(result.summary())
#加载绘制DCA曲线、CIC曲线、校准曲线(calibration curve)、ROC曲线、PR曲线等的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.calibration import calibration_curve
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import resample
#绘制DCA曲线
# DCA曲线计算函数
def calculate_dca(y_true, prob, thresholds):
net_benefits = []
for pt in thresholds:
tp = np.sum((y_pred >= pt) & (y_true == 1))
fp = np.sum((y_pred >= pt) & (y_true == 0))
nb = (tp/len(y_true)) - (fp/len(y_true))*(pt/(1-pt))
net_benefits.append(nb)
return np.array(net_benefits)
# DCA曲线绘制
thresholds = np.linspace(0.01, 0.99, 100)
nb_model = calculate_dca(y_test, y_pred, thresholds)
nb_all = np.linspace(0, 1, 100) * 0 # 全阴性基线
nb_treat_all = (y_test.mean() - (1 - y_test.mean())*(thresholds/(1-thresholds))) # 全阳性
plt.plot(thresholds, nb_model, label=\'Prediction Model\')
plt.plot(thresholds, nb_all, \'k--\', label=\'Treat None\')
plt.plot(thresholds, nb_treat_all, \'k:\', label=\'Treat All\')
plt.xlabel(\'Threshold Probability\')
plt.ylabel(\'Net Benefit\')
plt.legend()
plt.show()
#clinical_impact绘制CIC曲线
# 临床影响曲线(CIC曲线)
def clinical_impact(y_test, y_pred, thresholds,n_bootstraps=100):
high_risk = []
true_pos = []
for pt in thresholds:
high_risk.append(np.sum(y_pred >= pt))
true_pos.append(np.sum((y_pred >= pt) & (y_test == 1)))
return high_risk, true_pos
high_risk, true_pos = clinical_impact(y_test, prob, thresholds)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(thresholds, high_risk, \'r-\', label=\'High Risk\')
ax2.plot(thresholds, true_pos, \'b-\', label=\'True Positive\')
ax1.set_xlabel(\'Threshold Probability\')
ax1.set_ylabel(\'High Risk Cases\', color=\'r\')
ax2.set_ylabel(\'True Positives\', color=\'b\')
plt.show()
#cic_composite绘制CIC曲线
from sklearn.utils import resample
import seaborn as sns
def cic_composite(y_test, y_pred, thresholds):
df = pd.DataFrame({
\'Threshold\': thresholds,
\'HighRisk\': [np.sum(y_pred >= pt) for pt in thresholds],
\'TP\': [np.sum((y_pred >= pt) & (y_test == 1)) for pt in thresholds]
})
# 双轴可视化
fig, ax1 = plt.subplots()
sns.lineplot(data=df, x=\'Threshold\', y=\'HighRisk\', ax=ax1, color=\'r\')
ax2 = ax1.twinx()
sns.lineplot(data=df, x=\'Threshold\', y=\'TP\', ax=ax2, color=\'b\')
fig.show()
# ==使用sklearn内置函数计算校准曲线参数 ==
sklearn_mean_pred, sklearn_mean_true =
calibration_curve(y_test, prob, n_bins=10, strategy=\'quantile\')
# ===== 手动分桶实现 =====
def manual_calibration_curve(y_true, prob, n_bins=10,
strategy=\'quantile\'):
df = pd.DataFrame({\'true\': y_true, \'pred\': prob})
if strategy == \'quantile\':
df[\'bin\'] = pd.qcut(df[\'pred\'], q=n_bins, duplicates=\'drop\')
elif strategy == \'uniform\':
df[\'bin\'] = pd.cut(df[\'pred\'], bins=n_bins)
bin_stats = df.groupby(\'bin\').agg(
mean_pred=(\'pred\', \'mean\'),
mean_true=(\'true\', \'mean\'),
count=(\'true\', \'count\')
).reset_index()
return bin_stats[\'mean_pred\'], bin_stats[\'mean_true\']
# ===== 校准曲线可视化 =====
plt.figure(figsize=(12, 8))
# 绘制理想对角线
plt.plot([0, 1], [0, 1], \'k--\', label=\'Perfect calibration\')
# 绘制手动计算结果
manual_pred, manual_true =
manual_calibration_curve(y_test, prob)
plt.plot(manual_pred, manual_true,
\'s-\', label=\'Manual Binning\')
# 绘制sklearn结果
plt.plot(sklearn_mean_pred, sklearn_mean_true,
\'o-\', label=\'sklearn API\')
# 图表装饰
plt.xlabel(\'Predicted probability\', fontsize=12)
plt.ylabel(\'True probability\', fontsize=12)
plt.title(\'Calibration Curve Comparison (n_bins=10)\', fontsize=14)
plt.legend(loc=\'upper left\')
plt.grid(alpha=0.3)
plt.show()
#ROC曲线及PR曲线绘制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc,
precision_recall_curve
# ROC曲线
fpr, tpr, _ = roc_curve(y_test, prob)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, label=f\'ROC (AUC={roc_auc:.2f})\')
plt.plot([0,1],[0,1],\'k--\')
plt.xlabel(\'False Positive Rate\')
plt.ylabel(\'True Positive Rate\')
plt.legend()
plt.show()
# PR曲线
precision, recall, _ = precision_recall_curve(y_test, prob)
pr_auc = auc(recall, precision)
plt.plot(recall, precision,
label=f\'PR (AUC={pr_auc:.2f})\')
plt.xlabel(\'Recall\')
plt.ylabel(\'Precision\')
plt.legend()
plt.show()
#混淆矩阵评估模型
#导入第三方模块
from sklearn import metrics
# 混淆矩阵
print(\\"混淆矩阵四格表输出如下:\\")
print(metrics.confusion_matrix(y_test, y_pred, labels = [0, 1]))
Accuracy = metrics._scorer.accuracy_score(y_test, y_pred)
Sensitivity = metrics._scorer.recall_score(y_test, y_pred)
Specificity = metrics._scorer.recall_score(y_test, y_pred, pos_label=0)
print(\\"logistic回归模型混淆矩阵评价结果如下:\\")
print(\'模型准确率为%.2f%%\' %(Accuracy*100))
print(\'正例覆盖率为%.2f%%\' %(Sensitivity*100))
print(\'负例覆盖率为%.2f%%\' %(Specificity*100))
# 使用Seaborn的heatmap绘制混淆矩阵
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import seaborn as sns
sns.heatmap(metrics.confusion_matrix(y_test, y_pred), annot=True, fmt=\'d\')
plt.title(\'Confusion Matrix\')
plt.xlabel(\'Predicted label\')
plt.ylabel(\'True label\')
plt.show()
R语言的操作
我们先整理环境、加载包并读取数据:rm(list=ls()) #移除所有变量数据
install.packages(\\"glmnet\\") #安装包
library() #加载包
#1.数据及包准备
#读取Excel数据
#加载数据包并读取数据
library(glmnet) #加载包
library(Matrix) #加载包
library(ggplot2) #绘图用包
library(caret) #分层抽样拆分数据库
library(lattice) #绘图可视化包
library(pROC) #ROC曲线用包
library(Hmisc) #列线图用包
library(rms) #列线图用包
library(rmda) #列线图用包
library(dplyr) #加载包
library(readxl) #加载包
data <- read_excel(\\"C:/Users/L/Desktop/示例数据.xlsx\\")
#.全数据基础分析
#str函数在查看数据结构
str(data)
summary(data)
#全变量概览
# 分组比较
library(gtsummary)
data %>% tbl_summary(by=结局) %>%
add_p(pvalue_fun=label_style_pvalue(digits=2))
#2.列线图模型、logostoc回归的校准曲线绘制
#列线图
dd<-datadist(data)
options(datadist=\\"dd\\")
data$Group<-as.factor(data$结局)
f_lrm<-lrm(Group~指标1+指标2+指标3+指标4+指标5+指标6,
data=data,x=TRUE,y=TRUE)
f_lrm
summary(f_lrm)
par(mgp=c(1.6,0.6,0),mar=c(5,5,3,1))
nomogram <- nomogram(f_lrm,fun=function(x)1/(1+exp(-x)),
fun.at=c(0.01,0.05,0.2,0.5,0.8,0.95,1),
funlabel =\\"Prob of 结局\\",
http://conf.int = F,
abbrev = F )
plot(nomogram)
#绘制校准曲线
summary(f_lrm)
cal1<-calibrate(f_lrm,method=\\"boot\\",B=1000)
plot(cal1)
# 在图表的底部插入文本
mtext(\\"C=0.996 LR.chi2=337.49 d.f.=5 Pr(> chi2) <0.0001\\", side=1, line=3)
# 3. Logistic回归及ROC曲线、DCA曲线、CIC曲线绘制
logit.model <- glm(Group~指标1+指标2+指标3+指标4+指标5+指标6,
data=data, family=binomial(link=\\"logit\\"))
logit.result <- as.data.frame(summary(logit.model)$coefficients[, c(1, 4)])
logit.result <- cbind(logit.result, confint(logit.model))
colnames(logit.result) <- c(\\"Coef\\", \\"p\\", \\"CI_lower\\", \\"CI_upper\\")
logit.result
#ROC曲线
library(pROC)
logit.pred.prob <- predict(logit.model, newdata=data, type=\\"response\\")
par(las=1, cex.axis=.8)
logit.roc <- roc(
y ~ pred,
data=data.frame(y=data$Group, pred=logit.pred.prob),
plot=T, ci=T, main=\\"ROC Curve of Logistic Regression\\",
print.auc=T, print.auc.cex=.8,
print.thres=T, print.thres.cex=.8,
auc.polygon=T, max.auc.polygon=T, grid=T)
#DCA曲线、CIC曲线绘制
# 生成预测概率
data$pred_prob <- predict(logit.model,
type = \\"response\\")
data$Group <- as.numeric(data$结局)
# 决策曲线分析(含临床影响曲线)
dca_result <- decision_curve(
Group ~ pred_prob,
data = data,
policy = \\"opt-in\\", # 临床干预策略
thresholds = seq(0, 1, by = 0.05), # 阈值范围设置
bootstraps = 1000 # Bootstrap重抽样次数
)
#绘制DCA曲线
plot_decision_curve(dca_result,
curve.names = \\"Model:结局~\\",
col = c(\\"red\\"),
confidence.intervals=F )#不显示置信区间
# 决策曲线分析(含临床影响曲线)
dca_result <- decision_curve(
Group ~ pred_prob,
data = data,
policy = \\"opt-in\\", # 临床干预策略
thresholds = seq(0, 0.3, by = 0.05), # 阈值范围设置
bootstraps = 1000 # Bootstrap重抽样次数
)
# 绘制临床影响曲线
plot_clinical_impact(dca_result,
population.size = 322,
cost.benefit.axis = TRUE,
n.cost.benefits = 8,
col = c(\\"red\\", \\"blue\\"))
在最后,我们再一起回顾一下这五种评价曲线的概念和核心指标
R做统计分析发文章够用,想往人工智能方面靠就得py了。如果你还是本科,就先学R,研究生结合课题组的情况。
","description":"临床医学该学python 还是R? ying是后鼻yin的回答\\n\\n\\nR做统计分析发文章够用,想往人工智能方面靠就得py了。如果你还是本科,就先学R,研究生结合课题组的情况。","guid":"https://www.zhihu.com/question/9225232333/answer/104808264998","author":"ying是后鼻yin","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-19T03:58:55.101Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"零基础入门转录组下游分析——limma差异分析","url":"https://zhuanlan.zhihu.com/p/24575576921","content":"\ufeff 目录部分跳转链接: 零基础入门生信数据分析——导读 注:可根据自己的需求从总体目录中跳转到所需的分析点 本文将手把手教你做 转录组下游分析——零基础入门转录组下游分析——limma差异分析目录如下:1. 转录组分析基础知识2. limma差异分析(Rstudio)3. 结语本项目以GSE103552数据集(芯片数据)展示limma差异分析过程 实验分组:疾病组(21例),对照组(16例) R版本:4.2.2 R包:tidyverse,limma1. 转录组分析基础知…","description":"目录部分跳转链接: 零基础入门生信数据分析——导读 注:可根据自己的需求从总体目录中跳转到所需的分析点 本文将手把手教你做 转录组下游分析——零基础入门转录组下游分析——limma差异分析目录如下:1. 转录组分析基础知识2. limma差异分析(Rstudio)3. 结语本项目以GSE103552数据集(芯片数据)展示limma差异分析过程 实验分组:疾病组(21例),对照组(16例) R版本:4.2.2 R包:tidyverse,limma1. 转录组分析基础知…","guid":"https://zhuanlan.zhihu.com/p/24575576921","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-19T03:36:39.356Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r语言升级之后无法下载数据包","url":"https://zhuanlan.zhihu.com/p/24728125341","content":"方法1 # install command if (!requireNamespace(\\"BiocManager\\", quietly = TRUE)) install.packages(\\"BiocManager\\") # check command BiocManager::version() BiocManager::install(\\"ComplexHeatmap\\", force=TRUE)方法2 install.packages(\\"remotes\\") library(remotes) install_github(\\"MRCIEU/TwoSampleMR\\")","description":"方法1 # install command if (!requireNamespace(\\"BiocManager\\", quietly = TRUE)) install.packages(\\"BiocManager\\") # check command BiocManager::version() BiocManager::install(\\"ComplexHeatmap\\", force=TRUE)方法2 install.packages(\\"remotes\\") library(remotes) install_github(\\"MRCIEU/TwoSampleMR…","guid":"https://zhuanlan.zhihu.com/p/24728125341","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-19T02:52:09.366Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"生信视频","url":"https://zhuanlan.zhihu.com/p/24694707687","content":"2月19 r包安装命令 bioconductor Bioconductor : : install() cran install.packages github [图片] 加载 library() 包会过时和更新,版本不同","description":"2月19 r包安装命令 bioconductor Bioconductor : : install() cran install.packages github [图片] 加载 library() 包会过时和更新,版本不同","guid":"https://zhuanlan.zhihu.com/p/24694707687","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-19T02:26:09.414Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R大数据】duckdb/duckplyr、arrow包:轻松处理大数据","url":"https://zhuanlan.zhihu.com/p/24671904444","content":"上一篇文章,讲了 R 中整洁操作 DuckDB 数据库的基本方法(有更新,增加了数据库转存): [文章: 【R数据库】duckdb/duckplyr包:整洁操作数据库] 操作硬盘级的大数据(本篇用 37.4 G的纽约出租车数据来演示),也是同样的方法,只需要将数据表写入数据库,改成从数据文件(Parquet 或 CSV)注册到数据库。加载包: library(tidyverse) library(tictoc) # 计时用5 R 处理大数据5.1 准备大数据2012-2021年纽约出租车数据(37.4 G)…","description":"上一篇文章,讲了 R 中整洁操作 DuckDB 数据库的基本方法(有更新,增加了数据库转存): [文章: 【R数据库】duckdb/duckplyr包:整洁操作数据库] 操作硬盘级的大数据(本篇用 37.4 G的纽约出租车数据来演示),也是同样的方法,只需要将数据表写入数据库,改成从数据文件(Parquet 或 CSV)注册到数据库。加载包: library(tidyverse) library(tictoc) # 计时用5 R 处理大数据5.1 准备大数据2012-2021年纽约出租车数据(37.4 G)…","guid":"https://zhuanlan.zhihu.com/p/24671904444","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T22:45:51.056Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"因子分析之探索性因素分析之 EFA在R中的操作方法与结果解读","url":"https://zhuanlan.zhihu.com/p/24635168676","content":"Vol.1 R实操 首先安装并载入psych包Install.packages(“psych”) library(“psych”) 导入数据本实例中的scores.txt文件提供了100个考生在8项测验中的观测分数 scores<-read.table(\\"https://raw.githubusercontent.com/sunbeomk/PSYC490/main/scores.txt\\") head(scores)#查看数据 [图片] 确定数据是否适合做EFA在进行因子分析之前,需要进行KMO和Barlet球形检验。KMO较小说明不适合做因素分析,关于对KMO值的解释标准:>0.9,非常好;0.…","description":"Vol.1 R实操 首先安装并载入psych包Install.packages(“psych”) library(“psych”) 导入数据本实例中的scores.txt文件提供了100个考生在8项测验中的观测分数 scores<-read.table(\\"https://raw.githubusercontent.com/sunbeomk/PSYC490/main/scores.txt\\") head(scores)#查看数据 [图片] 确定数据是否适合做EFA在进行因子分析之前,需要进行KMO和Barlet球形检验。KMO较小说明不适合做因素分析…","guid":"https://zhuanlan.zhihu.com/p/24635168676","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T13:33:46.543Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-星星的愿望铺子的回答:认知突围 1. \\"我们终此一生,就是要摆脱他人的期待,找到真正的自己\\" ——《无声告白》 2. \\"所有大人...","url":"https://www.zhihu.com/question/580956751/answer/104351250162","content":"能否分享一些让你豁然开朗的句子?认知突围
1. \\"我们终此一生,就是要摆脱他人的期待,找到真正的自己\\" ——《无声告白》
2. \\"所有大人都曾是小孩,虽然只有少数人记得\\" ——《小王子》第7章
3. \\"自由不是随心所欲,而是自我主宰\\" ——康德《实践理性批判》
成长悖论
1. \\"你担心的大多不会发生,真正降临的永远是你没设防的事物\\" ——《黑天鹅》
2. \\"所谓深渊,下去也是前程万里\\" ——木心《素履之往》
3. \\"人不是活几年几月几天,而是活几个瞬间\\" ——帕斯捷尔纳克
思维重构
1. \\"在争论中获胜的唯一方式,就是避免争论\\" ——《人性的弱点》第2章
2. \\"每个白昼都要落进黑夜,像极了咸口的蛋糕\\" ——聂鲁达《二十首情诗》
3. \\"当你说\'我拥有黑暗\',那黑暗已开始消散\\" ——荣格《红书》
真正的豁然开朗,取决于自己的心。书读得多了,经历得多了,也就心宽了。所以,这一生很短,读喜欢的书,做喜欢的事,爱所爱的人,去想去的地方。与其一直在观望,不如趁现在。
","description":"能否分享一些让你豁然开朗的句子? 星星的愿望铺子的回答\\n\\n\\n认知突围\\n\\n1. \\"我们终此一生,就是要摆脱他人的期待,找到真正的自己\\" ——《无声告白》\\n\\n2. \\"所有大人都曾是小孩,虽然只有少数人记得\\" ——《小王子》第7章\\n\\n3. \\"自由不是随心所欲,而是自我主宰\\" ——康德《实践理性批判》\\n\\n成长悖论\\n\\n1. \\"你担心的大多不会发生,真正降临的永远是你没设防的事物\\" ——《黑天鹅》\\n\\n2. \\"所谓深渊,下去也是前程万里\\" ——木心《素履之往》\\n\\n3. \\"人不是活几年几月几天,而是活几个瞬间\\" ——帕斯捷尔纳克\\n\\n思维重构\\n\\n1. \\"在争论中获胜的唯一方式…","guid":"https://www.zhihu.com/question/580956751/answer/104351250162","author":"星星的愿望铺子","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T13:18:27.840Z","media":[{"url":"https://pic1.zhimg.com/v2-87abac32b797c35d5d63a4129368f98a.jpg","type":"photo","width":4344,"height":5792,"blurhash":"LbEp7z?GayRj?wRjoytRtlM{og%M"},{"url":"https://pic1.zhimg.com/v2-10d00e2688ac75e58b057980389531f3.jpg","type":"photo","width":1272,"height":1274,"blurhash":"LtNvl9%2W;t7%Mt7fiWB?^ofWBj["},{"url":"https://picx.zhimg.com/v2-f61c86006da01ea66d8c5d85266d6e08.jpg","type":"photo","width":1272,"height":968,"blurhash":"LxK-tUxuoft7~WWCfkofoyWCaxay"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基因富集中的超几何分布","url":"https://zhuanlan.zhihu.com/p/24615213234","content":"超几何分布是一种离散概率分布,常用于不放回抽样的情况。 在基因富集分析中,可以用来判断某个模块中的基因集中,特定标记(marker)基因的富集是否是随机产生的,还是具有统计学意义。 假设我们有一个总体,总体中有N个元素(对应所有基因的总数),其中有K个元素具有某种特征(对应所有的marker基因)。现在我们从总体中抽取n个元素(对应模块中的基因数),那么这n个元素中恰好有k个具有该特征的概率可以用超几何分布来描述…","description":"超几何分布是一种离散概率分布,常用于不放回抽样的情况。 在基因富集分析中,可以用来判断某个模块中的基因集中,特定标记(marker)基因的富集是否是随机产生的,还是具有统计学意义。 假设我们有一个总体,总体中有N个元素(对应所有基因的总数),其中有K个元素具有某种特征(对应所有的marker基因)。现在我们从总体中抽取n个元素(对应模块中的基因数),那么这n个元素中恰好有k个具有该特征的概率可以用超几何分布来描述…","guid":"https://zhuanlan.zhihu.com/p/24615213234","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T12:17:03.661Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?-minuxVirtual的回答:R的计算实现不够优化,没有考虑具体工程难度,粗暴的直接将数据...","url":"https://www.zhihu.com/question/637441452/answer/103821971227","content":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?R的计算实现不够优化,没有考虑具体工程难度,粗暴的直接将数据load进内存再处理,循环多了就容易卡死。毕竟是统计专家开发的软件,功能和出来的结果确实拉爆py.就是容易炸内存。
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? minuxVirtual的回答\\n\\n\\nR的计算实现不够优化,没有考虑具体工程难度,粗暴的直接将数据load进内存再处理,循环多了就容易卡死。毕竟是统计专家开发的软件,功能和出来的结果确实拉爆py.就是容易炸内存。","guid":"https://www.zhihu.com/question/637441452/answer/103821971227","author":"minuxVirtual","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T02:49:16.093Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有哪些适合菜鸟学习的R语言数据挖掘的demo?最好带源码。谢谢各位?-生信学习者的回答:[图片] R语言机器学习算法实战系列(一)XGBoost算法+SHAP值(eXtreme Gr...","url":"https://www.zhihu.com/question/57702923/answer/103722928776","content":"有哪些适合菜鸟学习的R语言数据挖掘的demo?最好带源码。谢谢各位?数据不平衡(Class Imbalance)是指在分类问题中,不同类别的样本数量存在显著差异的现象。例如,在一个二分类问题中,正类样本数量远多于负类样本,或者反之。这种不平衡现象在许多实际应用场景中非常常见,如医疗诊断(疾病患者与健康人群的比例)、金融欺诈检测(欺诈交易与正常交易的比例)等。
本文旨在通过R语言实现处理机器学习过程中的数据分组不平衡的问题,总共包含:
一、只有不回避痛苦和迷茫的人,才有资格去谈乐观与坚定。命运不会厚待谁,悲喜也不会单为你准备。
二、知道为什么自古红颜多薄命嘛?那是因为没有人在意丑的人活多久。
三、人一辈子,走走瞧瞧,吃吃喝喝,不生病,就是福气。如果能遇到自己爱的,也爱自己的人,再发点小财,就是天大的福气。
四、温柔要有,但不是妥协,我们要在安静中,不慌不忙的坚强。
五、到一个温暖的城市,开一家温暖的小店,等待着遇到一些温暖的人。这应该是很多人的梦想吧!
六、生命是一种缘,你刻意追求的东西,也许终生得不到,而你不曾期待的灿烂,反而会在你的淡泊从容中不期而至。
我们投必得润色后的论文都会给作者一份润色证明,根据润色服务内容的不同出具不同的润色证明,详细列明专家做了哪些种类的修改,比如下面我们的这份论文润色证明示例中就写明了本论文经过了语法、拼写、标点、句法、一致性、表达连续性、措辞、呈现连贯性、逻辑等方面的润色,确保没有问题。
大家在拿到了润色证明后,可以在cover letter里这样描述:“Following the editor\'s suggestions, my paper has been edited and polished by relevant experts. The polishing certificate has also been uploaded to the system along with the revised manuscript.”,然后把润色证明准备为一个单独的文档(一般是PDF),以附件的形式上传到投稿系统中。
审稿人在审稿意见中要求润色是很常见的一件事,我们是非英语母语的外国人,使用英语写论文必然会存在语法错误和表述不准确的地方,语言问题虽不影响科研成果的意义但却会干扰审稿人理解,这对我们来说是很吃亏的。
大家在平时的科研中把重心都放在了科研成果的打磨上,经常忽视论文写作的重要性,有了好的成果但是论文写作上让成果的重要性打了折那真的是太可惜了。
所以编辑或者审稿人在看到语言存在问题的论文会让作者进行润色,我们投必得经常遇到这类情况的老师。
为了让老师们更顺利的投稿,我们汇聚了众多英语母语且经验丰富的专业润色专家,他们不仅精通各类学术领域,还擅长将您的论文语言润色得更精准、流畅且富有学术性,满足国际顶级期刊的语言要求。润色完成后,会为您提供权威的润色证明,这份证明极具说服力,能有力地向审稿人展示论文润色的专业程度与可靠性。
我们的 “投稿无忧” 服务提供投稿全流程指导,从期刊选择到格式调整,再到投稿过程中的各种疑难解答,我们都将为您保驾护航。让您不再为投稿过程中的繁琐事务而烦恼,专注于科研内容本身。选择投必得 “投稿无忧” 服务,就等于为您的论文发表之路铺上了坚实的基石,助您轻松跨越审稿意见要求润色这一关卡,迈向科研成果发表的新征程。
投必得坚信每一份投入都将带来相应的回报。我们的专长在于为科研人员提供专业的SCI论文润色服务,帮助他们的研究成果以最佳状态呈现。经过我们润色后的论文发表在Nature Biotechnology上,这证明了我们润色服务的专业性和对SCI期刊要求的深刻理解。
投必得提供八大服务类型,包括润色编辑、学术翻译、查重去重、预审评估、中文服务、个性化修改、发表支持和科研绘图等,为您的论文发表保驾护航。
投必得也是Nature Biotechnology作者认可选择的论文润色编辑机构~如果您有论文需要润色,那就快快来找我们投必得(https://www.topeditsci.com/)吧~
投必得论文编译:投必得论文编辑润色业务介绍","description":"已经润色好之后,如何回复审稿意见? 投必得论文编译的回答\\n\\n\\n我们投必得润色后的论文都会给作者一份润色证明,根据润色服务内容的不同出具不同的润色证明,详细列明专家做了哪些种类的修改,比如下面我们的这份论文润色证明示例中就写明了本论文经过了语法、拼写、标点、句法、一致性、表达连续性、措辞、呈现连贯性、逻辑等方面的润色,确保没有问题。\\n\\n大家在拿到了润色证明后,可以在cover letter里这样描述:“Following the editor\'s suggestions, my paper has been edited and polished by…","guid":"https://www.zhihu.com/question/584516398/answer/103707562116","author":"投必得论文编译","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-18T01:00:08.794Z","media":[{"url":"https://pica.zhimg.com/v2-5dd2d3e8a228f3b8a315f064c51c3263.jpg","type":"photo","width":687,"height":898,"blurhash":"LBQ]=^_30M?vIua#s.j[beofM_WB"},{"url":"https://picx.zhimg.com/v2-7c79b36b5f4608a53f9f1e3fb239b6ef.jpg","type":"photo","width":708,"height":546,"blurhash":"LQQv%iM{oft8~UaeRjocgPt7WBWW"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R数据库】duckdb/duckplyr包:整洁操作数据库","url":"https://zhuanlan.zhihu.com/p/23128590178","content":"1 数据库简介 数据库,可以认为是一系列表格(或数据框)的集合,其优势在于能够处理极其庞大的数据量:远超内存容量的硬盘级别。数据库管理系统(DBMS),使我们能够与每种数据库进行交互。 数据库(DBMS)按类型划分: (1) 关系型数据库(SQL),表格结构Microsoft SQL ServerOraclePostgreSQLMySQL / MariaDBExasol / ClickHouseDuckDB (2) 非关系型数据库(NoSQL数据库),键值存储、文档存储、图数据库等MongoDBRedisAmazon…","description":"1 数据库简介 数据库,可以认为是一系列表格(或数据框)的集合,其优势在于能够处理极其庞大的数据量:远超内存容量的硬盘级别。数据库管理系统(DBMS),使我们能够与每种数据库进行交互。 数据库(DBMS)按类型划分: (1) 关系型数据库(SQL),表格结构Microsoft SQL ServerOraclePostgreSQLMySQL / MariaDBExasol / ClickHouseDuckDB (2) 非关系型数据库(NoSQL数据库),键值存储、文档存储、图数据库等MongoDBRedisAmazon…","guid":"https://zhuanlan.zhihu.com/p/23128590178","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T21:43:11.057Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"探索性图论分析与因子分析结合的思路","url":"https://zhuanlan.zhihu.com/p/24363264782","content":"Vol.1 前言 今天我们分享一篇结合探索性图论分析和因子分析方法来确定分裂型人格特质维度的文章,以此来学习一种新的思路,从而在众多网络分析文章中脱颖而出。 [图片] Vol.2 背景介绍 分裂型人格特质是一种潜在的人格结构,它为理解精神分裂症的病因机制和发生发展提供了一个统一的框架。 尽管前人研究都证实了分裂型人格特质是精神分裂症的潜在病因机制,但其基本结构 (维度) 仍存在争议。前人研究通常认为分裂型人格特质包含2-5个维…","description":"Vol.1 前言 今天我们分享一篇结合探索性图论分析和因子分析方法来确定分裂型人格特质维度的文章,以此来学习一种新的思路,从而在众多网络分析文章中脱颖而出。 [图片] Vol.2 背景介绍 分裂型人格特质是一种潜在的人格结构,它为理解精神分裂症的病因机制和发生发展提供了一个统一的框架。 尽管前人研究都证实了分裂型人格特质是精神分裂症的潜在病因机制,但其基本结构 (维度) 仍存在争议。前人研究通常认为分裂型人格特质包含2-5个维…","guid":"https://zhuanlan.zhihu.com/p/24363264782","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T14:09:35.679Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"高维数据处理之稀疏典型相关分析","url":"https://zhuanlan.zhihu.com/p/24361919694","content":"Vol.1 前言 典型相关分析(Canonical correlation analysis;CCA)是一种统计工具,用于识别两个多维变量之间的关系,这种方法可以评估两列多维变量之间的复杂关系,以一种更综合的方式,而不是检查大量的单变量相关性。尽管 CCA 很受欢迎,但它在解释高维数据中两个变量集之间的相关性时可能会遇到挑战。值得注意的是,如果变量X或变量Y的维度数目大于或等于样本量n,常规的CCA就不再适合,由于不能得到样本协方差矩阵的逆。基于…","description":"Vol.1 前言 典型相关分析(Canonical correlation analysis;CCA)是一种统计工具,用于识别两个多维变量之间的关系,这种方法可以评估两列多维变量之间的复杂关系,以一种更综合的方式,而不是检查大量的单变量相关性。尽管 CCA 很受欢迎,但它在解释高维数据中两个变量集之间的相关性时可能会遇到挑战。值得注意的是,如果变量X或变量Y的维度数目大于或等于样本量n,常规的CCA就不再适合,由于不能得到样本协方差矩阵的逆。基于…","guid":"https://zhuanlan.zhihu.com/p/24361919694","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T14:04:09.380Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【跟着顶刊学统计】Lasso回归的用法","url":"https://zhuanlan.zhihu.com/p/24360598476","content":"Vol.1 前言 机器学习的建模方法大家在前面的章节中也有所耳闻。而如何从海量的变量中寻找到最适宜的变量也是需要在研究中展现的重要部分。除了大家常用的单因素分析和多因素分析外,机器学习也可以提供一系列筛选变量的方法,其中Lasso回归就可以为大家提供一系列参考信息。在一区期刊:Gen Hosp Psychiatry(Q1 IF=7.0) 在2024年发表的一篇文章中,就应用到了Lasso回归进行变量筛选。本篇文章讨论的重点是构建“急诊科就诊后因…","description":"Vol.1 前言 机器学习的建模方法大家在前面的章节中也有所耳闻。而如何从海量的变量中寻找到最适宜的变量也是需要在研究中展现的重要部分。除了大家常用的单因素分析和多因素分析外,机器学习也可以提供一系列筛选变量的方法,其中Lasso回归就可以为大家提供一系列参考信息。在一区期刊:Gen Hosp Psychiatry(Q1 IF=7.0) 在2024年发表的一篇文章中,就应用到了Lasso回归进行变量筛选。本篇文章讨论的重点是构建“急诊科就诊后因…","guid":"https://zhuanlan.zhihu.com/p/24360598476","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T13:57:18.108Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在业余时学数据分析?-等待的回答:各位粉丝朋友们大家好!首先很抱歉这么久都未进行更新,因为博一一直在适应国外的新科研的生活,并跟随导师完成了很多科...","url":"https://www.zhihu.com/question/22119753/answer/103181196918","content":"如何在业余时学数据分析?各位粉丝朋友们大家好!首先很抱歉这么久都未进行更新,因为博一一直在适应国外的新科研的生活,并跟随导师完成了很多科研项目,之后我将重新陆续进行更新的~各位读者朋友们有想了解的内容也可以给我留言哦~
地理可视化是数据分析中非常重要的一部分,它能帮助我们直观地呈现研究对象在空间维度上的分布情况。例如,某项全国性调查的受访者在中国境内的分布,或者具体某个亚组的研究对象分布情况(例如2020年某数据库的糖尿病人群分布情况)。本篇推文将演示如何使用R语言,基于2020年CHARLS数据库(中国健康与养老追踪调查),结合GIS(地理信息系统)的Shapefile数据,实现中国地图分级或数值填充,并叠加省级边界,绘制一幅研究对象分布图。
和以往的R项目一样,我们首先需要设定工作目录并加载常用的R包,这些包涵盖了数据读取、处理和可视化等多方面功能。
# 设置工作目录并加载常用包\\nsetwd(\\"此处设置成你自己的路径\\")\\n\\nlibrary(readr)\\nlibrary(dplyr)\\nlibrary(sf)\\nlibrary(ggplot2)\\nlibrary(viridis) # 提供漂亮的颜色渐变\\nlibrary(cowplot) # 可选,若需要更美观的主题\\nlibrary(ggspatial) # 可选,若需要在地图上添加比例尺等元素\\n
在正式绘图之前,我们要先读取地级市的Shapefile数据。Shapefile是地理信息系统中常用的矢量数据格式,里面包含了区域边界、地名等信息。下面的代码将载入“2020年初”地级市的边界数据,并简要查看列名(可能是“区划码”“地名”“geometry”等):
# 读取 地级市 Shapefile\\nchina_city_map <- st_read(\\"2020年初/地级/T2020年初地级.shp\\")\\n\\n# 查看列名以确认“地名”、“区划码”准确名称\\nnames(china_city_map)\\n\\n# 根据需要只选取这几列,地名/区划码/geometry\\nchina_city_map <- china_city_map[c(\\"区划码\\", \\"地名\\", \\"geometry\\")]\\n
如果读取后发现地名乱码,可以在 st_read() 中增加编码选项,如:
china_city_map <- st_read(\\n \\"2020年初/地级/T2020年初地级.shp\\", \\n options = \\"ENCODING=GBK\\"\\n)
为了在地图上更清晰地分辨省级边界,可以再读取一份省级的Shapefile数据,供后续叠加使用:
同样,如果省名也出现乱码问题,可以添加 options = \\"ENCODING=GBK\\" 试试看。
province_map <- st_read(\\"2020年初/省级/2020年省级.shp\\")\\n\\n# 如果只需要“省名”和geometry这两列,可提取:\\n# province_map <- province_map[c(\\"省名\\", \\"geometry\\")]
名为final_data.csv的外部数据文件即为CHARLS 2020年的研究对象人口信息,里面记录了各个城市的研究对象信息。我们将在这里示例如何对该数据进行聚合处理,然后再与地理数据进行合并。(需要本教程中地级市 Shapefile和省级 Shapefile数据的粉丝朋友可以在公,,众,号(全哥的学习生涯)内回复“2020中国地图数据”获得;需要本教程中CHARLS数据库2020年人口分布的数据可以回复“2020CHARLS人口分布”获得)
# 读取并处理人口数据\\ndata <- read_csv(\\"final_data.csv\\")\\n# 如果文件是GBK/GB18030编码,可使用:\\n# data <- read_csv(\\"final_data.csv\\", locale = locale(encoding = \\"GB18030\\"))\\n\\n# 假设每行对应一个研究对象,给每个对象加一个计数 x=1\\ndata$x <- 1\\n\\n# 按 city 分组统计总人数(或其他指标)\\ndata_city <- data %>%\\n group_by(city) %>%\\n summarise(value = sum(x))
在这里,data_city最终得到两列:城市名称city和在该城市出现的研究对象人数value。请确保与地图数据中“地名”的匹配一致,如“北京市”和“北京”若不同,需要在读入前做相应的清洗或替换。
地图数据(china_city_map)包含几何信息和地名,统计数据(data_city)包含城市名和人数。我们用地名作为连接键,把这两份数据“拼”在一起:
# 合并地图与数据\\nchina_city_map2 <- china_city_map %>%\\n left_join(data_city, by = c(\\"地名\\" = \\"city\\"))
合并成功后,china_city_map2会多出一个名为value的数值列,用来表示每个地级市的研究对象人数。若某些城市无数据,则对应NA。
一切准备就绪后,我们可以使用ggplot2进行可视化。下面的示例中:
# 绘制以地级市为单位的人口分布图,并叠加省级边界\\np <- ggplot() +\\n # (1) 地市填充\\n geom_sf(data = china_city_map2, aes(fill = value), color = NA) +\\n # (2) 省级边界,描一个黑色线\\n geom_sf(data = province_map, fill = NA, color = \\"black\\", size = 0.4) +\\n # (3) 颜色渐变 scale\\n scale_fill_viridis_c(option = \\"magma\\", direction = -1, na.value = \\"grey90\\") +\\n # (4) 设置主题\\n theme_minimal() +\\n # (5) 标题和图例\\n labs(\\n fill = \\"Numbers of participants\\", # 图例标题\\n title = \\"2020 CHARLS Prefecture-Level City Distribution Map of Study Participants\\",\\n subtitle = \\"Author: 全哥的学习生涯\\"\\n ) +\\n # 可选:调整坐标等\\n coord_sf()\\n\\n# 查看绘制结果\\nprint(p)
对合并后的地市进行不同深浅的颜色填充。
叠加省级边界。
使用scale_fill_viridis_c()做渐变色。
使用theme_minimal()简化主题。
配置标题、图例等,并可选地使用coord_sf()保证地图比例正确。
图1
最终呈现出来的地图(如图1示例)将以不同的颜色深浅来表现某城市内研究对象的数量,省级边界也会明显标识,方便大家快速对比各地区之间的差异。
若你需要将地图插入到报告或PPT中,可以使用ggsave()来保存输出。指定图像的宽度、高度以及分辨率等参数,得到一张清晰度足够高的地图(或者使用我之前推荐的export包进行输出也可以):export包使用教程
# 查看并保存图形\\nggsave(\\"china_population_map.png\\", p, width = 10, height = 8, dpi = 300)
这样,我们就完成了从数据读取到可视化出图的全部流程。最后,需要本研究的完整R语言代码的粉丝朋友们可以回复“制作中国地图”export包使用教程获得。如果屏幕前的你对数据分析和可视化还有什么问题或看法,或者有什么建议,欢迎给我留言哦
","description":"如何在业余时学数据分析? 等待的回答\\n\\n\\n各位粉丝朋友们大家好!首先很抱歉这么久都未进行更新,因为博一一直在适应国外的新科研的生活,并跟随导师完成了很多科研项目,之后我将重新陆续进行更新的~各位读者朋友们有想了解的内容也可以给我留言哦~\\n\\n\\n\\n\\n地理可视化是数据分析中非常重要的一部分,它能帮助我们直观地呈现研究对象在空间维度上的分布情况。例如,某项全国性调查的受访者在中国境内的分布,或者具体某个亚组的研究对象分布情况(例如2020年某数据库的糖尿病人群分布情况)。本篇推文将演示如何使用R语言,基于2020年CHARLS数据库(中国健康与养老追踪调查),结合GIS…","guid":"https://www.zhihu.com/question/22119753/answer/103181196918","author":"等待","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T07:41:27.912Z","media":[{"url":"https://picx.zhimg.com/v2-8dd8d31f39cb242aa9d0a1f0941f6564.jpg","type":"photo","width":6000,"height":4800,"blurhash":"LGS6DF-=?^-:iwWntkMx?^t7I9IU"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何用R语言制作精美的中国地图(研究对象分布图)","url":"https://zhuanlan.zhihu.com/p/24255328782","content":"各位粉丝朋友们大家好!首先很抱歉这么久都未进行更新,因为博一一直在适应国外的新科研的生活,并跟随导师完成了很多科研项目,之后我将重新陆续进行更新的~各位读者朋友们有想了解的内容也可以给我留言哦~ 地理可视化是数据分析中非常重要的一部分,它能帮助我们直观地呈现研究对象在空间维度上的分布情况。例如,某项全国性调查的受访者在中国境内的分布,或者具体某个亚组的研究对象分布情况(例如2020年某数据库的糖尿病人…","description":"各位粉丝朋友们大家好!首先很抱歉这么久都未进行更新,因为博一一直在适应国外的新科研的生活,并跟随导师完成了很多科研项目,之后我将重新陆续进行更新的~各位读者朋友们有想了解的内容也可以给我留言哦~ 地理可视化是数据分析中非常重要的一部分,它能帮助我们直观地呈现研究对象在空间维度上的分布情况。例如,某项全国性调查的受访者在中国境内的分布,或者具体某个亚组的研究对象分布情况(例如2020年某数据库的糖尿病人…","guid":"https://zhuanlan.zhihu.com/p/24255328782","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-17T07:41:26.145Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r语言已知频数画直方图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列...","url":"https://www.zhihu.com/question/555410541/answer/102777919357","content":"r语言已知频数画直方图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:5]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x = price, y = cut, fill = cut)) +\\n geom_density_ridges(alpha=0.8, stat=\\"binline\\", bins=20) +\\n labs(x=\\"Value\\", y=\\"Density\\") +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(), legend.position = \\"none\\") +\\n scale_fill_manual(values = rev(colors))\\np
最后我们保存绘制的图形:
ggsave(\\"save/histogram-ridgeline.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
不需要学,熟悉基本的界面与按钮之后,学会描述问题,让deepseek帮你写,当然它写出来不一定一次就对,需要不断对话不断优化。
今天有尝试用deepseek帮我写操控excel的VBA程序,经过不断提炼问题,最终真能实现!!并且根本不需要会VBA代码知识,它连点哪里都告诉你了,真贴心!
","description":"医学生还需要学R语言吗? 陈玄章的回答\\n\\n\\n不需要学,熟悉基本的界面与按钮之后,学会描述问题,让deepseek帮你写,当然它写出来不一定一次就对,需要不断对话不断优化。\\n\\n今天有尝试用deepseek帮我写操控excel的VBA程序,经过不断提炼问题,最终真能实现!!并且根本不需要会VBA代码知识,它连点哪里都告诉你了,真贴心!","guid":"https://www.zhihu.com/question/6374954884/answer/102568131954","author":"陈玄章","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-16T13:29:14.415Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"医学生还需要学R语言吗?-Serein的回答:对大一来说,有时间可以学,对以后的研究生生涯很有帮助。确实向大家所说,统计更重要,我建议最好的办法是复现别人的文...","url":"https://www.zhihu.com/question/6374954884/answer/102555294316","content":"医学生还需要学R语言吗?对大一来说,有时间可以学,对以后的研究生生涯很有帮助。确实向大家所说,统计更重要,我建议最好的办法是复现别人的文章结果,既能了解其他人的分析思路,也能锻炼使用R的能力。
","description":"医学生还需要学R语言吗? Serein的回答\\n\\n\\n对大一来说,有时间可以学,对以后的研究生生涯很有帮助。确实向大家所说,统计更重要,我建议最好的办法是复现别人的文章结果,既能了解其他人的分析思路,也能锻炼使用R的能力。","guid":"https://www.zhihu.com/question/6374954884/answer/102555294316","author":"Serein","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-16T13:11:04.887Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R2jags包如何实现截断分布?-学不会不下班的回答:我也有同样的问题,题主解决了吗?","url":"https://www.zhihu.com/question/640577765/answer/102522387103","content":"R2jags包如何实现截断分布?我也有同样的问题,题主解决了吗?
","description":"R2jags包如何实现截断分布? 学不会不下班的回答\\n\\n\\n我也有同样的问题,题主解决了吗?","guid":"https://www.zhihu.com/question/640577765/answer/102522387103","author":"学不会不下班","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-16T12:20:26.766Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言菜鸟入门","url":"https://zhuanlan.zhihu.com/p/24031613528","content":"原文链接:R语言菜鸟入门 欢迎关注“细猪技术”微信公众号,更早获取最新资讯R语言统计检验及科研绘图是科研搬砖人日常,但其相对复杂的代码语法及文件操作对语言菜鸟来说压力山大。本文简要介绍R语言相关知识及常用操作。 [图片] 一、R+RStudio+Rtools简介及安装 R语言( http://cran.r-project.org )是一种广泛用于统计分析、数据可视化和机器学习等领域的编程语言,可以在多种操作系统上运行,包括Windows、MacOS、Linux等,方便不同平台的…","description":"原文链接:R语言菜鸟入门 欢迎关注“细猪技术”微信公众号,更早获取最新资讯R语言统计检验及科研绘图是科研搬砖人日常,但其相对复杂的代码语法及文件操作对语言菜鸟来说压力山大。本文简要介绍R语言相关知识及常用操作。 [图片] 一、R+RStudio+Rtools简介及安装 R语言( http://cran.r-project.org )是一种广泛用于统计分析、数据可视化和机器学习等领域的编程语言,可以在多种操作系统上运行,包括Windows、MacOS、Linux等,方便不同平台的…","guid":"https://zhuanlan.zhihu.com/p/24031613528","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-16T04:56:52.035Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"关于R语言ggplot做图:如何修改颜色?-TigerZ 生信宝库的回答:在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科...","url":"https://www.zhihu.com/question/492678504/answer/102062002770","content":"关于R语言ggplot做图:如何修改颜色?在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。
为了便于使用,本系列文章介绍的所有配色都已收录到了 sciRcolor 项目中,获取方式:
R 语言科研配色工具 --- sciRcolor为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:
① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60 种离散色 + 40 种连续色)
② 一个用来预览配色的在线网站
③ 一个用来获取配色的 R 包
library(sciRcolor)\\npal_scircolor(palette = 1, alpha = 1)\\n[1] \\"#5773CCFF\\" \\"#FFB900FF\\"
可以注释,先看这些基因是编码基因还是非编码基因
是编码基因的话,可以将这些基因的DNA序列转为氨基酸序列,以氨基酸序列作为输入用orthofinder软件与人类的氨基酸序列进行比较
或者将DNA序列或者氨基酸序列输入到eggmaper网站进行同源注释,这种方法比较推荐,无需使用Linux系统进行计算
","description":"这种基因怎么注释? ILIFE的回答\\n\\n\\n可以注释,先看这些基因是编码基因还是非编码基因\\n\\n是编码基因的话,可以将这些基因的DNA序列转为氨基酸序列,以氨基酸序列作为输入用orthofinder软件与人类的氨基酸序列进行比较\\n\\n或者将DNA序列或者氨基酸序列输入到eggmaper网站进行同源注释,这种方法比较推荐,无需使用Linux系统进行计算","guid":"https://www.zhihu.com/question/10395066324/answer/101340226499","author":"ILIFE","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-15T01:05:27.030Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-南极熊的回答:1. 倘若你能使你的心时常赞叹日常生活的神妙,你的苦痛的神妙必不减少于你的欢乐,你要承受你心天的季候,如同...","url":"https://www.zhihu.com/question/580956751/answer/101117127135","content":"能否分享一些让你豁然开朗的句子?1. 倘若你能使你的心时常赞叹日常生活的神妙,你的苦痛的神妙必不减少于你的欢乐,你要承受你心天的季候,如同你常常承受从田野上度过的四时。——纪伯伦《先知》
-
2. 谁都可能出个错儿,你在一件事情上越琢磨得多就越容易出错。——雅罗斯拉夫·哈谢克《好兵帅克历险记》
-
3. 我们经历着生活中突然降临的一切,毫无防备,就像演员进入初排。如果生活中的第一次彩排便是生活本身,那生活有什么价值呢?——米兰·昆德拉《生命中不能承受之轻》
-
4. 生存还是毁灭,这是一个值得思考的问题。——莎士比亚《哈姆雷特》
-
5. 在甜蜜的梦乡里,人人都是平等的,但是当太阳升起,生存的斗争重新开始时,人与人之间又是多么的不平等。——阿斯图里亚斯《总统先生》
-
6. 只要你是天鹅蛋,就是生在养鸡场里也没有什么关系。——安徒生《安徒生童话》
-
7. 我宁愿靠自己的力量,打开我的前途,而不愿求有力者垂青。——雨果《悲惨世界》
-
8. 盲目可以增加你的勇气,因为你无法看到危险。——乔纳森·斯威夫特《格列佛游记》
-
9. 宽宏大量,是惟一能够照亮伟大灵魂的光芒。——雨果《巴黎圣母院》
-
10.. 这里有一种无处投诉的罪行。这里有一种眼泪不足以象征的悲哀。这里有一种绝大的失败,足以使我们的一切成功都垮台。——约翰·斯坦贝克《愤怒的葡萄》
-
11. 我是说孩子们都在狂奔,也不知道自己是在往哪儿跑,我得从什么地方出来,把他们捉住。我整天就干这样的事。我只想当个麦田的守望者。我知道这有点异想天开,可我真正喜欢干的就是这个。——杰罗姆·塞林格《麦田的守者》
-
12.这是黄昏的太阳,我们却把它当成了黎明的曙光。——雨果《巴黎圣母院》
我是南极熊,记得关注我哦!
","description":"能否分享一些让你豁然开朗的句子? 南极熊的回答\\n\\n\\n1. 倘若你能使你的心时常赞叹日常生活的神妙,你的苦痛的神妙必不减少于你的欢乐,你要承受你心天的季候,如同你常常承受从田野上度过的四时。——纪伯伦《先知》\\n\\n-\\n\\n2. 谁都可能出个错儿,你在一件事情上越琢磨得多就越容易出错。——雅罗斯拉夫·哈谢克《好兵帅克历险记》\\n\\n-\\n\\n3. 我们经历着生活中突然降临的一切,毫无防备,就像演员进入初排。如果生活中的第一次彩排便是生活本身,那生活有什么价值呢?——米兰·昆德拉《生命中不能承受之轻》\\n\\n-\\n\\n4. 生存还是毁灭,这是一个值得思考的问题。——莎士比亚《哈姆雷特》\\n\\n-\\n\\n5. 在甜蜜的梦乡里…","guid":"https://www.zhihu.com/question/580956751/answer/101117127135","author":"南极熊","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-14T13:48:02.779Z","media":[{"url":"https://pica.zhimg.com/v2-1782b6703b15b7d78e8775e2349983fd.jpg","type":"photo","width":478,"height":720,"blurhash":"LVHTHL0$oyxD}?wwW;ay};NJbaaf"},{"url":"https://picx.zhimg.com/v2-c6486d56013eabca5648df9a8ee0f989.jpg","type":"photo","width":640,"height":964,"blurhash":"L_Nt~cWER6j=~Sjbiwn$b^s.nNn$"},{"url":"https://picx.zhimg.com/v2-07ee273039a6081152ee1af94fe558a8.jpg","type":"photo","width":600,"height":770,"blurhash":"LZIe2^oLoKR+ODazsnWp}DR+s.$i"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-不是本人的回答:一个人,出生了,这就不再是一个可以辩论的问题,只是上帝交给他的一个事实;上帝在交给我们这件事实的时候...","url":"https://www.zhihu.com/question/580956751/answer/100934508465","content":"能否分享一些让你豁然开朗的句子?一个人,出生了,这就不再是一个可以辩论的问题,只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。
但是太阳,它每时每刻都是夕阳,也都是旭日。当它熄灭着走下山去收尽苍凉残照之际,正是它在另一面燃烧着爬上山巅布散烈烈朝晖之时。
要是有些事我没说,地坛,你别以为是我忘了,我什么也没忘,但是有些事只适合收藏。不能说,也不能想,却又不能忘。
在满园弥漫的沉静光芒中,一个人更容易看到时间,并看到自己的身影。
苦难既然把我推到了悬崖的边缘,那么就让我在这悬崖的边缘坐下来,顺便看看悬崖下的流岚雾霭,唱支歌给你听。
生命的意义就在于你能创造这过程的美好与精彩,生命的价值就在于你能够镇静而又激动地欣赏这过程的美丽与悲壮。
一个失去差别的世界将是一潭死水,是块没有感觉没有肥力的沙漠。
","description":"能否分享一些让你豁然开朗的句子? 不是本人的回答\\n\\n\\n一个人,出生了,这就不再是一个可以辩论的问题,只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。\\n\\n但是太阳,它每时每刻都是夕阳,也都是旭日。当它熄灭着走下山去收尽苍凉残照之际,正是它在另一面燃烧着爬上山巅布散烈烈朝晖之时。\\n\\n要是有些事我没说,地坛,你别以为是我忘了,我什么也没忘,但是有些事只适合收藏。不能说,也不能想,却又不能忘。\\n\\n在满园弥漫的沉静光芒中,一个人更容易看到时间,并看到自己的身影。\\n\\n苦难既然把我推到了悬崖的边缘…","guid":"https://www.zhihu.com/question/580956751/answer/100934508465","author":"不是本人","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-14T09:07:25.667Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有人在R中成功安装GSIF包?-Duszka的回答:# https://github.com/cran/GSIF/pull/1 # https://www.rdocumentation.org/packages/GSIF/versions/0.5-5.1/topi...","url":"https://www.zhihu.com/question/627981046/answer/100733664190","content":"有没有人在R中成功安装GSIF包?# https://github.com/cran/GSIF/pull/1\\n# https://www.rdocumentation.org/packages/GSIF/versions/0.5-5.1/topics/WPS-class\\nremotes::install_github(\\"cran/GSIF#1\\")
【在快与慢的变奏中起舞】
茶水间微波炉的数字从2:59开始倒计时,隔壁工位键盘敲击声织成密集的雨点。当代上班族的日常像被按下1.5倍速的纪录片,却在某个转角藏着0.75倍速的温柔注脚。
神经科学家丹尼尔·列维京在《有序》中指出:大脑切换任务的成本高达40%效率损耗。这解释了为何总账会计王姐坚持午休闭目听黑胶唱片,程序员阿凯下班绕路三公里只为观察不同店铺的霓虹渐变。这些刻意制造的\\"减速带\\",实则是给精神安装的防抖装置。
东京大学实验室发现,定期进行\\"无目的观察\\"的人群,杏仁核活跃度降低27%。晨雾中包子铺蒸腾的热气与深夜便利店收银员的哈欠,都成了治愈十万网友的像素点。正如作家阿兰·德波顿在《艺术的慰藉》中写到的:\\"美常常诞生于被迫暂停的瞬间。\\"生活从不是单行道的竞速赛,咖啡机萃取时的30秒停顿,地铁换乘通道里突然响起的吉他声,文档保存进度条走完前的深呼吸,这些被折叠在效率至上主义之外的时间褶皱,恰是滋养心灵的暗河。当我们学会在疾驰与驻足间自由切换,每个当下都成了可以栖息的岛屿。
","description":"能否分享一些让你豁然开朗的句子? 幻雪帝国的回答\\n\\n\\n【在快与慢的变奏中起舞】\\n\\n茶水间微波炉的数字从2:59开始倒计时,隔壁工位键盘敲击声织成密集的雨点。当代上班族的日常像被按下1.5倍速的纪录片,却在某个转角藏着0.75倍速的温柔注脚。\\n\\n神经科学家丹尼尔·列维京在《有序》中指出:大脑切换任务的成本高达40%效率损耗。这解释了为何总账会计王姐坚持午休闭目听黑胶唱片,程序员阿凯下班绕路三公里只为观察不同店铺的霓虹渐变。这些刻意制造的\\"减速带\\",实则是给精神安装的防抖装置。\\n\\n\\n\\n\\n东京大学实验室发现,定期进行\\"无目的观察\\"的人群,杏仁核活跃度降低27…","guid":"https://www.zhihu.com/question/580956751/answer/100726008186","author":"幻雪帝国","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-14T05:08:15.649Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"rpy2","url":"https://zhuanlan.zhihu.com/p/23641043858","content":"export RPY2_CFFI_MODE=ABI pip install rpy2","description":"export RPY2_CFFI_MODE=ABI pip install rpy2","guid":"https://zhuanlan.zhihu.com/p/23641043858","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-14T02:22:21.166Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"随机森林算法分析数据实用python实现比较好还是R语言?-医学统计数据分析的回答:随机森林模型随机森林模型是一种集成学习方法,主要用于分类和回归任务。...","url":"https://www.zhihu.com/question/386966290/answer/100468945611","content":"随机森林算法分析数据实用python实现比较好还是R语言?随机森林模型
随机森林模型是一种集成学习方法,主要用于分类和回归任务。它由多个决策树组成,通过集成这些决策树的预测结果来提高模型的准确性和稳定性。
随机森林的工作原理
随机森林使用名为“bagging”的技术,通过数据集和特征的随机自助抽样样本并行构建完整的决策树。每棵树在称为自助聚集的过程中随机对训练数据子集进行抽样,模型适合这些较小的数据集,并汇总预测结果。通过有放回抽样,可以重复使用同一数据的几个实例,结果就是,这些树不仅基于不同的数据集进行训练,而且还使用不同的特征做出决策。
随机森林的特点
随机性:随机森林通过数据随机和特征随机来减少模型的偏差和过拟合问题。数据随机通过有放回抽样构成不同的样本数据集,特征随机则从所有特征中随机选择一部分特征用于每棵树的训练
泛化能力:由于每棵树都是基于不同的数据集和特征训练的,整体模型具有较好的泛化能力,能够适应不同的数据集。
运算速度快:随机森林在处理大数据时表现优异,运算速度较快。
总之,随机森林模型通过集成多个决策树的预测结果,提高了模型的准确性和稳定性,适用于多种机器学习任务。
我们仍以示例数据为例:
首先使用Rstudio打开示例数据:
首先使用caret包演示:
library(caret)
set.seed(1234)
rf.model <- train(
结局 ~ 指标1+指标2+指标3+指标4+指标5+指标6,
data=Train, method=\\"rf\\",
preProcess=c(center\\", \\"scale),
trControl=trainControl(method=\\"cv\\", number=10, classProbs=T))
print(rf.model)
plot(rf.model)
也可以使用randomForest包
library(randomForest)
modelFit <- randomForest(结局 ~ 指标1+指标2+指标3+指标4+指标5, data = Train, keep.forest = TRUE,
predict.all = TRUE, type = \\"prob\\")
print(modelFit)
plot(modelFit)
使用Train数据得到的模型预测test数据(caret包):
rf.pred.prob <- predict(rf.model, newdata=Test)
并绘制ROC曲线检验效果
par(las=1, cex.axis=.8)
rf.roc <- roc(
y ~ pred,
data=data.frame(y=Test$结局, pred=rf.pred.prob),
plot=T, ci=T, main=\\"ROC Curve of Random Forest\\",
print.auc=T, print.auc.cex=.8,
print.thres=T, print.thres.cex=.8,
auc.polygon=T, max.auc.polygon=T, grid=T)
使用Train数据得到的模型预测test数据(randomForest包):
rf.pred.prob <- predict(modelFit, newdata=Test)
并绘制ROC曲线检验效果:
par(las=1, cex.axis=.8)
rf.roc <- roc(
y ~ pred,
data=data.frame(y=Test$结局, pred=rf.pred.prob),
plot=T, ci=T, main=\\"ROC Curve of Random Forest\\",
print.auc=T, print.auc.cex=.8,
print.thres=T, print.thres.cex=.8,
auc.polygon=T, max.auc.polygon=T, grid=T)
对随机森林进行可视化
library(fastshap)
library(shapviz)
pfun <- function(model, newdata){
predict(model, newdata=newdata)
}
set.seed(1234)
rf.shap <- explain(rf.model, X=Test, pred_wrapper=pfun, shap_only=F,
feature_names=c(\\"指标1\\", \\"指标2\\", \\"指标3\\", \\"指标4\\", \\"指标5\\", \\"指标6\\"))
sv_importance(shapviz(rf.shap), kind=\\"beeswarm\\") +
theme_bw() +
theme(axis.text.y=element_text(family=\\"Songti SC\\"),
panel.grid=element_blank())
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
公众号
随机森林模型
随机森林模型是一种集成学习方法,主要用于分类和回归任务。它通过构建多个决策树并将它们的结果进行投票或平均,以得到最终的预测结果。随机森林模型由Leo Breiman和Adele Cutler发展,并由Tin Kam Ho在1995年提出。
随机森林模型的基本原理
随机森林模型通过以下步骤构建:
样本随机:从原始数据集中通过有放回抽样形成多个子数据集。
特征随机:在每个节点上随机选择一部分特征进行决策树的构建。
决策树构建:对每个子数据集构建一个决策树,每棵树都会完整成长而不会剪枝。
集成预测:最终预测是所有决策树的平均值(回归任务)或多数投票(分类任务)。
随机森林模型的优点:
防止过拟合:通过集成多个决策树,随机森林能够有效地处理过拟合问题,提高模型的泛化能力。
处理非线性问题:随机森林能够处理非线性问题,并且擅长处理大量样本和特征。
降低方差:通过减少单个决策树的方差,随机森林提高了对新数据的预测能力。
可解释性:尽管当前深度学习非常流行,随机森林因其简单、有效、高效以及可解释性等优点,仍然成为许多数据分析师工作中的首选算法。
实际应用:
随机森林模型可以应用于多种任务,包括分类、回归和异常检测。由于其强大的泛化能力和对高维数据的处理能力,随机森林在金融、医疗、生物信息学等领域有广泛的应用。
今天我们仍以示例数据为例,探讨一下随机森林模型可视化及预测效果的ROC曲线、混淆矩阵评价。
#加载程序包(openpyxl和pandas等)
# 使用pandas读取示例数据xlsx文件
import openpyxl
import pandas as pd
import simpleNomo
import matplotlib.pyplot as plt
datarf = pd.read_excel(r\'C:\\\\Users\\\\hyy\\\\Desktop\\\\示例数据.xlsx\')
# 查看前几行数据
print(datarf.head())
#随机森林主要使用到的第三方库有以下几种:
#numpy:常见的科学计算库
#matplotlib:进行绘图使用
#sklearn.datasets:导入训练需要的数据集
#train_test_split:划分训练集和测试集
#DecisionTreeClassifier:定义随机森林中的决策树分类器
#随机森林(Random Forest)的构建步骤如下:准备训练数据集;重复步骤(随机选择特征子集;随机采样训练数据集;构建决策树;);对新样本进行预测;模型评估;特征重要性评估
#步骤概览:
# 模型训练
#def fit(self, X, y):
\\"\\"\\"
训练随机森林模型
:param X: 训练集特征
:param y: 训练集标签
\\"\\"\\"
# 模型预测
#def predict(self, X):
\\"\\"\\"
使用训练好的模型进行预测
:param X: 测试集特征
:return: 预测结果
\\"\\"\\"
# 精度
#def score(self, y_pred, y):
\\"\\"\\"
计算分类的准确率
:param y_pred: 预测值
:param y: 真实值
:return: 准确率
\\"\\"\\"
#示例数据模型实战
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# 设置随机种子
seed_value = 1234
np.random.seed(seed_value)
# 对导入的实例数据分离特征和目标变量
X = datarf[[\'指标1\', \'指标2\', \'指标3\',\'指标4\',\'指标5\',\'指标6\']]
y = datarf[[\'结局\']]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.fit_transform(X_test)
# 训练随机森林
from sklearn.ensemble import RandomForestClassifier
rfmodel = RandomForestClassifier(
n_estimators=100,
max_depth=5,
min_samples_split=2,
random_state=seed_value)
rfmodel.fit(X_train, y_train)
#预测测试集数据
y_train_pred = rfmodel.predict(X_train)
print(预测训练集结果如下:\\\\n\\",y_train_pred)
y_test_pred = rfmodel.predict(X_test)
print(\\"预测测试集数据结果如下:\\\\n\\",y_test_pred)
#随机森林模型可视化
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
# 可视化所有提取的决策树
fig, axes = plt.subplots(nrows=5, ncols=4, figsize=(40, 50), dpi=200)
for i in range(20):
ax = axes[i // 4, i % 4]
plot_tree( rfmodel.estimators_[i],
feature_names=datarf.columns[3:9], # 使用 df 的列名作为特征名称
filled=True, ax=ax
)
ax.set_title(f\'Tree {i+1}\')
plt.savefig(\'随机森林.png\')
plt.tight_layout()
plt.show()
# Accuracy结果
from sklearn.metrics import classification_report, accuracy_score
score_train = accuracy_score(y_train,y_train_pred)
print(\\"训练集Classification Report:\\\\n \\", classification_report(y_train,y_train_pred))
score_test = accuracy_score(y_test,y_test_pred)
print(\\"测试集Classification Report:\\\\n \\", classification_report(y_test,y_test_pred))
print(\'训练集Accuracy: \', score_train)
print(\'测试集Accuracy: \', score_test)
#混淆矩阵评估模型
#导入第三方模块
from sklearn import metrics
# 混淆矩阵
print(\\"混淆矩阵四格表输出如下:\\")
print(metrics.confusion_matrix(y_test, y_test_pred, labels = [0, 1]))
Accuracy = metrics._scorer.accuracy_score(y_test, y_test_pred)
Sensitivity = metrics._scorer.recall_score(y_test, y_test_pred)
Specificity = metrics._scorer.recall_score(y_test, y_test_pred, pos_label=0)
print(\\"决策树模型混淆矩阵评价结果如下:\\")
print(\'模型准确率为%.2f%%\' %(Accuracy*100))
print(\'正例覆盖率为%.2f%%\' %(Sensitivity*100))
print(\'负例覆盖率为%.2f%%\' %(Specificity*100))
# 使用Seaborn的heatmap绘制混淆矩阵
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import seaborn as sns
sns.heatmap(metrics.confusion_matrix(y_test, y_test_pred), annot=True, fmt=\'d\')
plt.title(\'Confusion Matrix\')
plt.xlabel(\'Predicted label\')
plt.ylabel(\'True label\')
plt.show()
#进行ROC曲线绘制计算准备
# у得分为模型预测正例的概率
y_score =rfmodel.predict_proba(X_test)[:,1]
#计算不同阈值下,fpr和tpr的组合值,其中fpr表示1-Specificity,tpr表示sensitivity
fpr,tpr,threshold =metrics.roc_curve(y_test,y_score)
# 计算AUC的值
roc_auc = metrics.auc(fpr,tpr)
print(\\"随机森林模型预测测试集数据ROC曲线的AUC:\\",roc_auc)
随机森林模型预测测试集数据ROC曲线的AUC: 0.9709333333333334
#绘制ROC曲线
import matplotlib.pyplot as plt
import seaborn as sns
# 绘制面积图
plt.stackplot(fpr, tpr, color=\'steelblue\', alpha = 0.5,edgecolor = \'black\')
# 添加边际线
plt.plot(fpr, tpr, color=\'black\',lw = 1)
# 添加对角线
plt.plot([0,1],[0,1],color =\'red\',linestyle =\'--\')
# 添加文本信息
plt.text(0.5,0.3,\'Roc curve(area =%.2f)\'% roc_auc)
# 添加轴标签
plt.xlabel(\'1-Specificity\')
plt.ylabel(\'Sensitivity\')
# 显示图形
plt.show()
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
有大佬已经提醒你了,你没有安装Rtools工具,类似一个编译器。
除此之外,系统还提醒你,有两个依赖包无法直接安装,需要你单独安装。
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? 思而后乐的回答\\n\\n\\n有大佬已经提醒你了,你没有安装Rtools工具,类似一个编译器。\\n\\n除此之外,系统还提醒你,有两个依赖包无法直接安装,需要你单独安装。","guid":"https://www.zhihu.com/question/5929451559/answer/100085875751","author":"思而后乐","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-13T09:19:25.843Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【跟着顶刊学统计】DCA决策曲线","url":"https://zhuanlan.zhihu.com/p/23519191109","content":"Vol.1 前言 在前面的分享中,陆续介绍了模型的可视化方法与模型的验证方法。本次分享再带来一种模型验证的方法,它有别于区分度和校准度,不单单检验模型的灵敏度和特异度,还考虑到了患者/决策者的偏好,进而考虑什么时候进行干预是最合适的,可以为临床决策提供参考。如果审稿人提出你的文章只分析了模型的区分度和校准度,没有考虑到模型的临床实际应用效能问题,这时就可以采用这种方法,补充检验,来对审稿人的意见进行回应…","description":"Vol.1 前言 在前面的分享中,陆续介绍了模型的可视化方法与模型的验证方法。本次分享再带来一种模型验证的方法,它有别于区分度和校准度,不单单检验模型的灵敏度和特异度,还考虑到了患者/决策者的偏好,进而考虑什么时候进行干预是最合适的,可以为临床决策提供参考。如果审稿人提出你的文章只分析了模型的区分度和校准度,没有考虑到模型的临床实际应用效能问题,这时就可以采用这种方法,补充检验,来对审稿人的意见进行回应…","guid":"https://zhuanlan.zhihu.com/p/23519191109","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-13T09:16:24.913Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-云穆云的回答:让你豁然开朗的句子! 1.当你学会放下,心情会豁然开朗 2.真正治愈自己的,只有自己。不去抱怨,尽量担待,不...","url":"https://www.zhihu.com/question/580956751/answer/99781074105","content":"能否分享一些让你豁然开朗的句子?让你豁然开朗的句子!
1.当你学会放下,心情会豁然开朗
2.真正治愈自己的,只有自己。不去抱怨,尽量担待,不怕孤单,努力沉淀。
3.岁月不长也不短,因为你永远不知道意外与明天谁会先到来, 但是值得去努力,静待花开。
4.路途的意义不在于目的地,而在于行走的过程。你不是活在各种状态中,而是活在路上。
5.敏感的人爱胡思乱想,心软的人爱自讨苦吃。
6.世上有很多美好的事物等着你,所以你要内心温柔,安静努力。
7.凡事不要想的太复杂,手握的太紧,东西会碎,手会疼。
8.就算终有一散,也别辜负相遇。好好相遇,好好告别。
9.成长就是与这个世界讲和。接受自己的不完美,也接受别人的不完美。
10.付出真心才能得到真心,却也可能伤得彻底;保持距离也就能保护自己,却也注定永远寂寞。
11.原来我并不快乐,只是我未曾发觉。一个敏感的人,大多都不幸福,因为太在乎。
12.原谅是容易的。再次信任,就没那么容易了。
13.烦躁的时候,不要说话 不要做决定,自己安静地待一会。长大了,这些难捱的情绪,你总要学着自己消化掉。
14.我必须承认生命中大部分时光是属于孤独的,努力成长是在孤独里可以进行的最好的游戏。
15.不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。
16.以勇气面对人生的巨大悲恸,用耐心对待生活的小小哀伤。当你勤勤恳恳地完成一天的工作时,安心地入睡吧。
17.一直相信村上春树一句话,“如果一直想见谁,迟早肯定见得到。
18.下一步的事下一步考虑不迟。
19.越是不思考的人,越不愿倾听别人说话。
20.勇敢地去选择你想要过的生活,并坚持下去,这就是一种很棒的人生。
","description":"能否分享一些让你豁然开朗的句子? 云穆云的回答\\n\\n\\n让你豁然开朗的句子!\\n\\n1.当你学会放下,心情会豁然开朗\\n\\n2.真正治愈自己的,只有自己。不去抱怨,尽量担待,不怕孤单,努力沉淀。\\n\\n3.岁月不长也不短,因为你永远不知道意外与明天谁会先到来, 但是值得去努力,静待花开。\\n\\n4.路途的意义不在于目的地,而在于行走的过程。你不是活在各种状态中,而是活在路上。\\n\\n5.敏感的人爱胡思乱想,心软的人爱自讨苦吃。\\n\\n6.世上有很多美好的事物等着你,所以你要内心温柔,安静努力。\\n\\n7.凡事不要想的太复杂,手握的太紧,东西会碎,手会疼。\\n\\n8.就算终有一散,也别辜负相遇。好好相遇,好好告别。\\n\\n9…","guid":"https://www.zhihu.com/question/580956751/answer/99781074105","author":"云穆云","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-13T03:24:48.754Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"请教!网状meta录入完模型报错怎么办?-鸿创医学的回答:一般来说,这意味着在你的数据中,有些治疗间的比较不存在,也可以说是缺乏直接比较。 网状Meta分析是基...","url":"https://www.zhihu.com/question/3147942436/answer/99676095979","content":"请教!网状meta录入完模型报错怎么办?一般来说,这意味着在你的数据中,有些治疗间的比较不存在,也可以说是缺乏直接比较。
网状Meta分析是基于多个治疗方案间的直接和间接比较构建网络的,如果网络中某些节点间没有连接,就会导致网络不连通,从而出现错误提示(码字不易,记得点赞+关注哦)
检查治疗方案的组合:
如果你有需要,也可以咨询: 西安鸿创医学为您提供众多科研服务,助您解决各样科研难题! (qq.com)
绘制网络图:
netmeta
包或其他相关包来绘制网状Meta分析的网络图library(netmeta)\\n\\n# 假设你已经创建了一个netmeta对象(例如nma_model)\\nplot(nma_model)\\n
数据修正:
考虑修改网络结构:
使用network
函数查看:
network()
函数进一步检查网络结构的连通性,查看哪些治疗之间没有直接比较。解决方案:重新设计或合并治疗:
好啦!就写这么多吧~
码字不易记得点赞+关注哦~~
更多内容您可以查看我们往期作品,还有相关统计学知识、SPSS/R应用、机器学习内容等您,或关注“鸿创医研”的视频号/b站进行学习(比心)
PS:更多问题,可以向我们私信提问!专业硕博团队,一站式为您服务
要想发文,掌握的技能还真不能少!从选题、文献检索到文章写作、数据分析,步步都让人头大。看着同事、同门发文不停,自己的文章却遥遥无期,头更大了
别慌,看这里!专业硕博团队,一站式为您服务
如有更多想要了解的服务内容,记得私信为我们哦
","description":"请教!网状meta录入完模型报错怎么办? 鸿创医学的回答\\n\\n\\n一般来说,这意味着在你的数据中,有些治疗间的比较不存在,也可以说是缺乏直接比较。\\n\\n网状Meta分析是基于多个治疗方案间的直接和间接比较构建网络的,如果网络中某些节点间没有连接,就会导致网络不连通,从而出现错误提示(码字不易,记得点赞+关注哦)\\n\\n检查治疗方案的组合:\\n\\n\\n确保你提供的数据中所有治疗之间的组合都有足够的样本和数据支持。网状Meta分析要求每对治疗之间有直接比较。如果有某些治疗方案之间缺乏直接比较,那么网络就会不连通。\\n\\n如果你有需要,也可以咨询: 西安鸿创医学为您提供众多科研服务,助您解决各样科研难题!…","guid":"https://www.zhihu.com/question/3147942436/answer/99676095979","author":"鸿创医学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-13T01:45:18.406Z","media":[{"url":"https://pica.zhimg.com/v2-c69fdcfb628aa11c04f8dcbd724e2fb1.jpg","type":"photo","width":690,"height":674,"blurhash":"LfKTYV~9xu-nw]-nV@xtkCWCkCR*"},{"url":"https://picx.zhimg.com/v2-b05f414812c1f0fcd0633c0e4ad19a24.jpg","type":"photo","width":1080,"height":1086,"blurhash":"L7HKqYZ3hL^%?^n3#SI:*IGEAEv~"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么现在上班的人都开始摆烂了?-安粉云学堂的回答:摆烂? 这叫职场躺平学!( ̄▽ ̄*) 现在的打工人早就看透了:你卷任你卷,我躺平我快乐。 996福报?那是老...","url":"https://www.zhihu.com/question/613862113/answer/99604361520","content":"为什么现在上班的人都开始摆烂了?摆烂?
这叫职场躺平学!( ̄▽ ̄*)
现在的打工人早就看透了:你卷任你卷,我躺平我快乐。
996福报?那是老板的福报!
工资不涨物价涨,房价高得离谱,谁还愿意当韭菜啊?(╯°□°)╯︵ ┻━┻
摸鱼才是打工人的终极奥义,上班带薪拉屎,下班准时跑路。
反正卷也卷不动,躺也躺不平,那就摆烂呗!至少还能保住发际线( ̄▽ ̄)~*
为何新就业形态成为职场新宠?揭秘背后的经济动力","description":"为什么现在上班的人都开始摆烂了? 安粉云学堂的回答\\n\\n\\n摆烂?\\n\\n这叫职场躺平学!( ̄▽ ̄*)\\n\\n现在的打工人早就看透了:你卷任你卷,我躺平我快乐。\\n\\n996福报?那是老板的福报!\\n\\n工资不涨物价涨,房价高得离谱,谁还愿意当韭菜啊?(╯°□°)╯︵ ┻━┻\\n\\n摸鱼才是打工人的终极奥义,上班带薪拉屎,下班准时跑路。\\n\\n反正卷也卷不动,躺也躺不平,那就摆烂呗!至少还能保住发际线( ̄▽ ̄)~*\\n\\n为何新就业形态成为职场新宠?揭秘背后的经济动力","guid":"https://www.zhihu.com/question/613862113/answer/99604361520","author":"安粉云学堂","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-13T00:15:47.156Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"请教!网状meta录入完模型报错怎么办?-chalu pas的回答:就是没有相互对照的组,后续私聊","url":"https://www.zhihu.com/question/3147942436/answer/99477329355","content":"请教!网状meta录入完模型报错怎么办?就是没有相互对照的组,后续私聊
","description":"请教!网状meta录入完模型报错怎么办? chalu pas的回答\\n\\n\\n就是没有相互对照的组,后续私聊","guid":"https://www.zhihu.com/question/3147942436/answer/99477329355","author":"chalu pas","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-12T15:36:42.539Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Rstudio会有卡住不会出图的情况吗?-luna107的回答:关闭当前所有图形窗口。可以使用 dev.off() 函数来关闭当前活动的图形设备。如果有多个图形设备打开,可以多...","url":"https://www.zhihu.com/question/8799790527/answer/99230177247","content":"Rstudio会有卡住不会出图的情况吗?关闭当前所有图形窗口。可以使用 dev.off()
函数来关闭当前活动的图形设备。如果有多个图形设备打开,可以多次运行该函数直到所有设备关闭。
或者重置图形参数。有时候图形参数的设置可能会影响图形的显示,可以使用 par()
函数来重置参数。
绘图代码里是否有设置不显示图像的设置。
","description":"Rstudio会有卡住不会出图的情况吗? luna107的回答\\n\\n\\n关闭当前所有图形窗口。可以使用 dev.off() 函数来关闭当前活动的图形设备。如果有多个图形设备打开,可以多次运行该函数直到所有设备关闭。\\n\\n或者重置图形参数。有时候图形参数的设置可能会影响图形的显示,可以使用 par() 函数来重置参数。\\n\\n绘图代码里是否有设置不显示图像的设置。","guid":"https://www.zhihu.com/question/8799790527/answer/99230177247","author":"luna107","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-12T09:10:23.189Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"《AnnotMap 代码教程:R语言进阶指南》","url":"https://zhuanlan.zhihu.com/p/23264505037","content":"在生信分析中,我们常常需要对单细胞数据进行可视化,以更好地理解细胞类型的分布和特征。书接上回,今天,我们将详细讲解如何自己编写和使用`AnnotMap.R` 脚本在 Linux 平台下实现这一目标。这个脚本主要用于根据给定的单细胞数据(通常是 `rds` 格式),使用 `umap` 或 `tsne` 算法进行降维,并根据指定的细胞类型信息进行可视化绘图,最后将结果保存为 `pdf` 和 `png` 格式的图片。 ##一、代码结构概述 `AnnotMap.R` 脚本主要…","description":"在生信分析中,我们常常需要对单细胞数据进行可视化,以更好地理解细胞类型的分布和特征。书接上回,今天,我们将详细讲解如何自己编写和使用`AnnotMap.R` 脚本在 Linux 平台下实现这一目标。这个脚本主要用于根据给定的单细胞数据(通常是 `rds` 格式),使用 `umap` 或 `tsne` 算法进行降维,并根据指定的细胞类型信息进行可视化绘图,最后将结果保存为 `pdf` 和 `png` 格式的图片。 ##一、代码结构概述 `AnnotMap.R` 脚本主要…","guid":"https://zhuanlan.zhihu.com/p/23264505037","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-12T08:04:22.655Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 基本统计分析","url":"https://zhuanlan.zhihu.com/p/20008854319","content":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。完整R语言教程和测试数据可见: R语言基础学习手册 7.1 描述性统计分析 总体反应 连续型变量的中心趋势、变化性和分布形状的分析方法。 7.1.1 基本方法1) summary()函数:提供数值型变量的max,min,mean,四分位…","description":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。完整R语言教程和测试数据可见: R语言基础学习手册 7.1 描述性统计分析 总体反应 连续型变量的中心趋势、变化性和分布形状的分析方法。 7.1.1 基本方法1) summary()函数:提供数值型变量的max,min,mean,四分位…","guid":"https://zhuanlan.zhihu.com/p/20008854319","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-12T02:09:46.889Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于Monte Carlo方法计算网络分析中的被试量","url":"https://zhuanlan.zhihu.com/p/23090472892","content":"Vol.1 前言 近年来,网络分析方法在心理学研究中受到了广泛的关注和应用,然而,令人遗憾的是,众多研究在采用该方法时却忽视了对被试量的合理估算。受限于资源和条件,研究者无法将所研究的群体全体纳入研究之中。因此,在进行网络分析时,对被试量的估算显得尤为重要。这不仅能够确保研究结果的可靠性和有效性,还能为未来的研究提供有价值的参考。今天我们分享 一项基于Monte Carlo模拟计算网络分析中被试量的方法 (Constanti…","description":"Vol.1 前言 近年来,网络分析方法在心理学研究中受到了广泛的关注和应用,然而,令人遗憾的是,众多研究在采用该方法时却忽视了对被试量的合理估算。受限于资源和条件,研究者无法将所研究的群体全体纳入研究之中。因此,在进行网络分析时,对被试量的估算显得尤为重要。这不仅能够确保研究结果的可靠性和有效性,还能为未来的研究提供有价值的参考。今天我们分享 一项基于Monte Carlo模拟计算网络分析中被试量的方法 (Constanti…","guid":"https://zhuanlan.zhihu.com/p/23090472892","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T12:35:06.960Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"纵向时间/动态网络相似性检验 ——相同障碍下不同患者的个体差异","url":"https://zhuanlan.zhihu.com/p/23089096199","content":"Vol.1 前言 在临床上,我们经常可以看到两个同样被诊断为重度抑郁障碍的患者,却表现出了非常不同的症状。此外,相同的干预和治疗方案很可能对一名抑郁患者有效,而另一名抑郁患者则完全无效。这些现实情况背后都反映出,单一的症状诊断很难阐明相同障碍下不同患者的个体差异。那我们要如何在症状水平上,对不同患者进行区分呢?例如,比较两名被试每个具体症状项目的差异?在之前的分享中,我们介绍了 针对密集追踪数据的时间/…","description":"Vol.1 前言 在临床上,我们经常可以看到两个同样被诊断为重度抑郁障碍的患者,却表现出了非常不同的症状。此外,相同的干预和治疗方案很可能对一名抑郁患者有效,而另一名抑郁患者则完全无效。这些现实情况背后都反映出,单一的症状诊断很难阐明相同障碍下不同患者的个体差异。那我们要如何在症状水平上,对不同患者进行区分呢?例如,比较两名被试每个具体症状项目的差异?在之前的分享中,我们介绍了 针对密集追踪数据的时间/…","guid":"https://zhuanlan.zhihu.com/p/23089096199","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T12:28:44.657Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在网络分析中控制协变量?","url":"https://zhuanlan.zhihu.com/p/23088054977","content":"Vol.1 前言 正如一些研究者总想在结构方程模型中控制协变量一样,同样有研究者想要在网络分析中控制协变量。那么到底可不可行呢?答案是可行的。 在本文中,我们暂时不深入探讨协变量的概念。我相信,如果你对协变量还不太熟悉,你可能也不会选择阅读这篇文章。 Vol.2 实现方法、存在问题及相应示例目前主要有两种方式控制协变量:一种直接把每个节点回归掉协变量后取残差,另一种将协变量也当做节点纳入网络模型。 两种方法各有…","description":"Vol.1 前言 正如一些研究者总想在结构方程模型中控制协变量一样,同样有研究者想要在网络分析中控制协变量。那么到底可不可行呢?答案是可行的。 在本文中,我们暂时不深入探讨协变量的概念。我相信,如果你对协变量还不太熟悉,你可能也不会选择阅读这篇文章。 Vol.2 实现方法、存在问题及相应示例目前主要有两种方式控制协变量:一种直接把每个节点回归掉协变量后取残差,另一种将协变量也当做节点纳入网络模型。 两种方法各有…","guid":"https://zhuanlan.zhihu.com/p/23088054977","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T12:22:06.070Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"交叉滞后面板网络模型","url":"https://zhuanlan.zhihu.com/p/23086885414","content":"Vol.1 前言 被期待已久的CLPN如约到来,本来打算继续写其他的纵向数据处理技术的,奈何大家更关注CLPN,好在CLPN也算是一种纵向技术,那今天就主要讲CLPN吧。在研究中,对于一批纵向数据,我们往往需要构建模型来解释变量与变量之间的关系,而常见的交叉滞后纵向中介模型往往需要三个时间点及以上的数据,CLPN的优势就在于即使是两个时间点的数据也可以构建纵向网络模型。这对于一些只有两个时间点数据的研究者来说是一个好消息…","description":"Vol.1 前言 被期待已久的CLPN如约到来,本来打算继续写其他的纵向数据处理技术的,奈何大家更关注CLPN,好在CLPN也算是一种纵向技术,那今天就主要讲CLPN吧。在研究中,对于一批纵向数据,我们往往需要构建模型来解释变量与变量之间的关系,而常见的交叉滞后纵向中介模型往往需要三个时间点及以上的数据,CLPN的优势就在于即使是两个时间点的数据也可以构建纵向网络模型。这对于一些只有两个时间点数据的研究者来说是一个好消息…","guid":"https://zhuanlan.zhihu.com/p/23086885414","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T12:15:01.385Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"空间单细胞转录组流程?-医学科研-李宁的回答:在生物医学研究的前沿, 单细胞空间转录组测序(Spatial Transcriptomics RNA-seq,STRNA-seq)正成为揭示细胞空间...","url":"https://www.zhihu.com/question/645672929/answer/98403500910","content":"空间单细胞转录组流程?在生物医学研究的前沿,单细胞空间转录组测序(Spatial Transcriptomics RNA-seq,STRNA-seq)正成为揭示细胞空间分布和基因表达动态变化的重要工具。相比传统的单细胞RNA测序(scRNA-seq),STRNA-seq不仅能够测量单个细胞的基因表达,还能提供这些细胞在组织切片中的精准位置,从而帮助科学家构建高分辨率的空间转录组图谱。这一技术的突破,使我们在肿瘤微环境、神经系统疾病、肝病研究等领域有了更深入的认识。
想象你走进一座城市,每条街道上都居住着不同职业的人,比如医生、教师、工程师。传统的单细胞RNA测序(scRNA-seq)就像是一份职业统计报告,它能告诉我们这个城市里有哪些职业,但却无法告诉我们这些职业分布在哪些街道,或者哪些职业更容易互相交流。
而STRNA-seq则像是一张详细的城市地图,不仅能告诉我们每种细胞的基因表达情况,还能精确标注这些细胞在组织中的空间位置。
STRNA-seq结合了单细胞测序技术和空间定位技术,主要依赖于以下两种策略:
这些方法使研究人员可以在不破坏组织结构的情况下,解析细胞间的相互作用和基因表达的空间动态变化。
与传统的单细胞测序相比,STRNA-seq能够同时获取基因表达和空间分布信息,帮助科研人员更精准地解读生物学现象。例如,在研究肿瘤组织时,不同区域的癌细胞可能具有不同的基因表达特征,而STRNA-seq能绘制肿瘤微环境地图,精确识别肿瘤细胞与免疫细胞之间的相互作用。
《Nature》《Cell》《Science》《Nature Medicine》等高影响因子期刊对STRNA-seq研究非常关注。近年来,利用STRNA-seq技术的研究频繁登上这些顶级期刊,如2023年发表在《Nature》的文章,就利用STRNA-seq分析了肝癌组织中不同细胞亚群的空间分布及其与免疫逃逸的关系,为精准治疗提供了新思路。
在撰写国家自然科学基金(NSFC)申请书时,评审专家通常会关注研究的创新性和前沿性。STRNA-seq作为前沿技术,能够增强基金申请的技术创新性,提高获批的可能性。例如,在研究非酒精性脂肪肝(NAFLD)进展时,STRNA-seq可以帮助解析肝脏不同区域的细胞变化,为研究提供更有力的支持。
STRNA-seq的强大优势,使其在临床医学研究和精准医学领域的应用前景十分广阔,尤其是在肿瘤学、神经科学、肝病研究等方面。
癌症的治疗往往受限于肿瘤的异质性,即同一肿瘤内部的细胞可能具有不同的分子特征。例如,在乳腺癌、肺癌、肝癌等实体瘤中,肿瘤中心的细胞可能对药物敏感,而边缘区域的细胞可能具有较强的侵袭性和耐药性。
STRNA-seq可以:
✅ 绘制肿瘤微环境空间图谱,揭示肿瘤细胞、免疫细胞、间质细胞的相互作用模式;
✅ 发现耐药细胞亚群,指导靶向治疗方案的调整;
✅ 筛选肿瘤标志物,提高早期诊断的精准度。
阿尔茨海默病(AD)是一种进行性神经退行性疾病,主要表现为记忆力下降和认知障碍。近年来,研究发现AD的病理变化不仅限于神经元,还涉及星形胶质细胞、小胶质细胞和少突胶质细胞的异常。
STRNA-seq的应用可以:
✅ 解析不同神经细胞在大脑不同区域的空间分布变化,如海马体和额叶;
✅ 揭示病变区域的特定基因表达特征,为药物靶点筛选提供数据支持;
✅ 帮助开发精准治疗策略,通过识别不同阶段的细胞状态变化,找到合适的干预窗口。
非酒精性脂肪肝(NAFLD)是全球最常见的慢性肝病之一,可能发展为肝纤维化、肝硬化,甚至肝癌。然而,不同患者的病情进展速度存在较大差异。
STRNA-seq在肝病研究中的作用:
✅ 绘制肝脏细胞的空间转录组图谱,分析不同区域的肝细胞如何受到脂肪沉积和炎症因子的影响;
✅ 探索肝癌的分子机制,通过解析癌细胞、免疫细胞和成纤维细胞的相互作用,为免疫治疗提供指导;
✅ 鉴定潜在的治疗靶点,如寻找能够阻止肝纤维化进展的关键信号通路。
STRNA-seq作为一项革命性的空间生物学技术,正在改变我们对生命组织的理解。它不仅在基础研究中帮助科学家揭示细胞的空间动态变化,还在临床研究中推动精准医学的发展。未来,随着技术的不断优化和数据分析方法的进步,STRNA-seq有望在癌症、神经系统疾病、代谢性疾病等多个领域带来新的突破,为疾病的早期诊断和个体化治疗提供更有力的支持。
如果您对生物医学研究感兴趣,STRNA-seq无疑是一个值得关注的前沿方向,也许您的下一个科研项目,就能用到这项技术!
","description":"空间单细胞转录组流程? 医学科研-李宁的回答\\n\\n\\n在生物医学研究的前沿,单细胞空间转录组测序(Spatial Transcriptomics RNA-seq,STRNA-seq)正成为揭示细胞空间分布和基因表达动态变化的重要工具。相比传统的单细胞RNA测序(scRNA-seq),STRNA-seq不仅能够测量单个细胞的基因表达,还能提供这些细胞在组织切片中的精准位置,从而帮助科学家构建高分辨率的空间转录组图谱。这一技术的突破,使我们在肿瘤微环境、神经系统疾病、肝病研究等领域有了更深入的认识。\\n\\n什么是单细胞空间转录组测序(STRNA-seq)?\\n传统单细胞测序的局限性…","guid":"https://www.zhihu.com/question/645672929/answer/98403500910","author":"医学科研-李宁","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T10:23:55.343Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 基本图形绘制","url":"https://zhuanlan.zhihu.com/p/20013989446","content":"写在前面ggplot2 是一个基于 R 语言的数据可视化包,提供了一种结构化的方法来描述和构建图表,因此被广泛用于制作可视化图表。其是tidyverse数据科学生态系统的一部分。在 ggplot2 中,每一个图形都是从数据映射到美学属性(如颜色、形状和大小)、加上几何对象(如点、线和条形图)、统计变换和坐标系等元素组合而成。这种分层和模块化的方法使得用户可以灵活地创建复杂的图表,同时保持代码的可读性和易用性。通过ggplot2,你…","description":"写在前面ggplot2 是一个基于 R 语言的数据可视化包,提供了一种结构化的方法来描述和构建图表,因此被广泛用于制作可视化图表。其是tidyverse数据科学生态系统的一部分。在 ggplot2 中,每一个图形都是从数据映射到美学属性(如颜色、形状和大小)、加上几何对象(如点、线和条形图)、统计变换和坐标系等元素组合而成。这种分层和模块化的方法使得用户可以灵活地创建复杂的图表,同时保持代码的可读性和易用性。通过ggplot2,你…","guid":"https://zhuanlan.zhihu.com/p/20013989446","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T03:09:40.977Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 高级数据管理","url":"https://zhuanlan.zhihu.com/p/20017424129","content":"写在前面在R语言中,高级数据管理可利用R的各种功能和包来高效地处理、分析和操作数据集。这包括数据清洗、数值运算、转换、汇总和合并等一系列复杂的数据操作。这里我们简单的演示几种例子。 5.1 函数 5.1.1 数学函数5.1.1.1 数学函数列表 [图片] 5.1.1.2 举例x <- sqrt(c(16,25,9)) x ## [1] 4 5 35.1.2 统计函数5.1.2.1 函数列表 [图片] 5.1.2.2 数据的标准化这个功能在作图的时候常用,尤其是热图, 1)默认情况下就是对矩阵或数据框进行均值…","description":"写在前面在R语言中,高级数据管理可利用R的各种功能和包来高效地处理、分析和操作数据集。这包括数据清洗、数值运算、转换、汇总和合并等一系列复杂的数据操作。这里我们简单的演示几种例子。 5.1 函数 5.1.1 数学函数5.1.1.1 数学函数列表 [图片] 5.1.1.2 举例x <- sqrt(c(16,25,9)) x ## [1] 4 5 35.1.2 统计函数5.1.2.1 函数列表 [图片] 5.1.2.2 数据的标准化这个功能在作图的时候常用,尤其是热图, 1)默认情况下就是对矩阵或数据框进行均值…","guid":"https://zhuanlan.zhihu.com/p/20017424129","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-11T03:06:02.021Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R|ggplot2(五)|scale 修改默认设置?-被炸熟的虾的回答:R语言画图 | ggplot2标尺(scale)函数(一)颜色设置 scale_*函数中与颜色相关的函数主要用于调整线条、...","url":"https://www.zhihu.com/question/336666417/answer/97871573582","content":"R|ggplot2(五)|scale 修改默认设置?scale_*
函数中与颜色相关的函数主要用于调整线条、点、边框等的颜色(scale_color_
系列)以及填充区域的颜色(scale_fill_
系列)。
scale_color_continuous():
设置连续型变量的颜色渐变。对于数据为非因子型的颜色映射,ggplot2
自动使用continuous
类型颜色标尺表示连续颜色空间。可以使用scale_color_continuous
函数进行修改:
ggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_continuous(low = \\"blue\\", high = \\"red\\")
通过参数low
和high
分别设置低端和高端数据的颜色,中间颜色根据颜色空间space自动计算; type
参数用于指定渐变色的类型:
type = \\"gradient\\"
:默认的双色渐变。type = \\"viridis\\"
:感知上均匀的渐变色方案,适用于大多数场景。type = \\"plasma\\"
:从黄色到红色的渐变,适用于突出高值。type = \\"magma\\"
:从黑色到红色的渐变,适用于突出低值。type = \\"inferno\\"
:从黑色到黄色的渐变,适用于突出高值。type = \\"cividis\\"
:从蓝色到黄色的渐变,适用于突出中间值。type = \\"manual\\"
:手动指定颜色映射。这个参数很少使用,记录一下是为了方便理解ggplot2
提供的另一个功能重叠的函数scale_color_gradient()
:
ggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_gradient(low = \\"blue\\", high = \\"red\\")
以下两步是完全等效的:
scale_color_continuous(low = \\"white\\", high = \\"blue\\",type = \\"gradient\\")\\nscale_color_gradient(low = \\"white\\", high = \\"blue\\")
如果想要设置中间过渡颜色,可以借助scale_color_gradient2()
函数——
scale_color_gradient2()
: 通过参数low
、mid
和high
分别设置三种颜色的渐变(低、中、高)。示例中间点设置为20(白色)。ggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_gradient2(low = \\"blue\\", mid = \\"white\\", high = \\"red\\", midpoint = 20)
更复杂的scale_fill_gradientn()
函数可以使用colours
参数设置多个中间颜色,适合需要精细控制渐变色的场景:
library(ggplot2)\\n# 第一个图:使用 scale_color_gradientn\\nggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_gradientn(colors = c(\\"blue\\", \\"green\\", \\"yellow\\", \\"orange\\", \\"red\\"),\\n values = c(0, 0.25, 0.5, 0.75, 1))\\n# 第二个图:修正 values 参数\\nggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_gradientn(colors = c(\\"blue\\", \\"green\\", \\"yellow\\", \\"orange\\", \\"red\\"),\\n values = c(0, 0.1, 0.2, 0.75, 1))
colors = c(\\"blue\\", \\"green\\", \\"yellow\\", \\"orange\\", \\"red\\")
定义了渐变色。values = c(0, 0.25, 0.5, 0.75, 1)
定义了颜色变化的具体位置,0:最小值对应蓝色;0.25:数据范围的25%处对应绿色;0.5:数据范围的50%处对应黄色;0.75:数据范围的75%处对应橙色;1:最大值对应红色。第二个图相比第一个缩减了蓝色-绿色映射范围。
如果数据是因子型的颜色映射,修改标尺就需要使用相应的离散型颜色标尺,例如scale_color_discrete
。
scale_color_discrete()
scale_color_discrete()
会自动为离散变量的每个类别分配一组默认的颜色,这些颜色通常是均匀分布的,以确保不同类别之间的区分度。
ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_discrete()
scale_color_discrete()
可以通过设置色调范围(h
)、饱和度(c
)和亮度(l
)调整颜色,但灵活性相对较低且较难把控。
p6 <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_discrete()\\np7 <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_discrete(c = 50)\\np8 <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_discrete(h = c(180, 300))
如果需要自定义颜色分配,通常需要切换到scale_color_manual()
。
scale_color_manual()
:ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_manual(values = c(\\"red\\", \\"blue\\", \\"green\\", \\"orange\\", \\"purple\\", \\"pink\\", \\"brown\\"))
提供颜色数量必须大于等于离散变量的类别数量,否则会报错。
scale_color_brewer()
函数可以直接使用RColorBrewer
包预定义的一些调色板。使用时需要注意调色板可提供的颜色数量(8-11种),如果超过最大颜色数就不合适了。
ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_brewer(palette = \\"Set1\\")
离散变量(分类变量):使用scale_color_viridis_d()
或scale_fill_viridis_d()
:
ggplot(mpg, aes(x = displ, y = hwy, color = class)) +\\n geom_point(size = 5) +\\n scale_color_viridis_d() # d 表示 discrete(离散)
连续变量:使用scale_color_viridis_c()
或scale_fill_viridis_c()
:
ggplot(mpg, aes(x = displ, y = hwy, color = cty)) +\\n geom_point(size = 5) +\\n scale_color_viridis_c() # c 表示 continuous(连续)
关于R语言中的配色包之前写过一些,可以配合使用:
如果需要设置颜色填充,将color/colour替换成fill就可以了,函数都是类似的,挑几个展示一下——
scale_fill_manual()
: 手动指定填充颜色。ggplot(mpg, aes(x = displ, y = hwy, fill = class)) +\\n geom_point(size = 5, shape = 21, color = \\"black\\") +#外边缘用黑色\\n scale_fill_manual(values = c(\\"red\\", \\"blue\\", \\"green\\", \\"orange\\", \\"purple\\", \\"pink\\", \\"brown\\"))
scale_fill_brewer()
: 使用ColorBrewer调色板。ggplot(mpg, aes(x = class, fill = class)) +\\n geom_bar() +\\n scale_fill_brewer(palette = \\"Set2\\")
scale_fill_viridis_d()
: 使用Viridis调色板。ggplot(mpg, aes(x = class, fill = class)) +\\n geom_bar() +\\n scale_fill_viridis_d()
ggplot2
内置的颜色标尺函数还有很多
ls(\\"package:ggplot2\\", pattern=\\"^scale_fill.+\\")\\n# [1] \\"scale_fill_binned\\" \\"scale_fill_brewer\\" \\"scale_fill_continuous\\"\\n# [4] \\"scale_fill_date\\" \\"scale_fill_datetime\\" \\"scale_fill_discrete\\" \\n# [7] \\"scale_fill_distiller\\" \\"scale_fill_fermenter\\" \\"scale_fill_gradient\\" \\n#[10] \\"scale_fill_gradient2\\" \\"scale_fill_gradientn\\" \\"scale_fill_grey\\" \\n#[13] \\"scale_fill_hue\\" \\"scale_fill_identity\\" \\"scale_fill_manual\\" \\n#[16] \\"scale_fill_ordinal\\" \\"scale_fill_steps\\" \\"scale_fill_steps2\\" \\n#[19] \\"scale_fill_stepsn\\" \\"scale_fill_viridis_b\\" \\"scale_fill_viridis_c\\" \\n#[22] \\"scale_fill_viridis_d\\" \\nls(\\"package:ggplot2\\", pattern=\\"^scale_color.+\\")\\n# [1] \\"scale_color_binned\\" \\"scale_color_brewer\\" \\"scale_color_continuous\\"\\n# [4] \\"scale_color_date\\" \\"scale_color_datetime\\" \\"scale_color_discrete\\" \\n# [7] \\"scale_color_distiller\\" \\"scale_color_fermenter\\" \\"scale_color_gradient\\" \\n#[10] \\"scale_color_gradient2\\" \\"scale_color_gradientn\\" \\"scale_color_grey\\" \\n#[13] \\"scale_color_hue\\" \\"scale_color_identity\\" \\"scale_color_manual\\" \\n#[16] \\"scale_color_ordinal\\" \\"scale_color_steps\\" \\"scale_color_steps2\\" \\n#[19] \\"scale_color_stepsn\\" \\"scale_color_viridis_b\\" \\"scale_color_viridis_c\\" \\n#[22] \\"scale_color_viridis_d\\" \\n#ls(\\"package:ggplot2\\", pattern=\\"^scale_colour.+\\")
比如scale_fill_grey()
用于将填充颜色(fill
)映射为灰度颜色:
通过start
和end
参数来定义灰度值的范围(0-1),其中0表示纯黑色、1表示纯白色。值越小颜色越深(接近黑色),值越大颜色越浅(接近白色)。默认start = 0.2
、end = 0.8
。na.value
用于设置NA值的颜色,默认为红色。
p16 <- ggplot(mpg, aes(x = class, fill = class)) +\\n geom_bar() + \\n scale_fill_grey()\\np17 <- ggplot(mpg, aes(x = class, fill = class)) +\\n geom_bar() + \\n scale_fill_grey(start = 0.1, end = 0.6) # 从深灰到中灰\\n# 添加 NA 值\\nmpg_na <- mpg\\nmpg_na$class[1:3] <- NA\\np18 <- ggplot(mpg_na, aes(x = class, fill = class)) +\\n geom_bar() +\\n scale_fill_grey(na.value = \\"blue\\") # 将 NA 值填充为蓝色
其他的就不一一介绍了
R语言画图 | ggplot2标尺(scale)函数(一)颜色设置R语言是医学大数据分析较为好用的编程语言,研究生做课题研究时经常用到。如果大学期间能自学R语言并发表一篇文章,考研时很有优势。如果大学期间成绩好加上有文章,很容易能拿到研究生推免指标,可以选择top10的医学学校。如果已经是本硕博连读8年制,更需要学习R语言了,这样可以今早研究课题。所以,利用空余时间就学习R语言吧,然后试着分析基因组数据、单细胞数据、机器学分析临床数据。如果有空也可以试着学习一下python,它在医学大数据人工智能方面非常有用。
","description":"临床大一是不是应该自学 R 语言? 医学考研成长的回答\\n\\n\\nR语言是医学大数据分析较为好用的编程语言,研究生做课题研究时经常用到。如果大学期间能自学R语言并发表一篇文章,考研时很有优势。如果大学期间成绩好加上有文章,很容易能拿到研究生推免指标,可以选择top10的医学学校。如果已经是本硕博连读8年制,更需要学习R语言了,这样可以今早研究课题。所以,利用空余时间就学习R语言吧,然后试着分析基因组数据、单细胞数据、机器学分析临床数据。如果有空也可以试着学习一下python,它在医学大数据人工智能方面非常有用。","guid":"https://www.zhihu.com/question/4139067549/answer/97852297606","author":"医学考研成长","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-10T23:28:04.667Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"机器学习用python还是R,哪个更好?-爱收集软件分享的回答:这个问题就像打游戏选「键鼠操作」还是「手柄操作」——没有标准答案,取决于你的目标、习惯和游戏类...","url":"https://www.zhihu.com/question/612094457/answer/97703974197","content":"机器学习用python还是R,哪个更好?这个问题就像打游戏选「键鼠操作」还是「手柄操作」——没有标准答案,取决于你的目标、习惯和游戏类型。让我用三个真实场景拆解你的困惑。
场景1:当你深夜打开招聘网站输入「机器学习工程师」
搜索结果前十页岗位描述里会出现79次Python,R可能出现在角落里某个医疗数据分析岗的「加分项」中。国内互联网大厂的机器学习落地基本被Python生态垄断,从数据清洗的Pandas到模型部署的FastAPI,整条流水线早被Python焊死。
场景2:当你的统计学教授推着金丝眼镜说「看看这个时间序列」
纽约某大学统计系实验室里,白发教授正在用R的ggplot2画出生动的时间序列分解图。R语言在统计检验、可视化、假设验证等领域像是被天使吻过,尤其是tidyverse系列工具能让数据像乐高积木般优雅重组——这可能是Kaggle竞赛中某个统计学博士坚持用R的秘密武器。
场景3:当你在创业公司想十分钟跑通全流程
用Python写下「from sklearn import...」三行代码就召唤出随机森林时,隔壁产品经理已经在用RShiny做出了动态参数调节面板。这时候与其纠结语言之争,不如把R的统计诊断能力与Python的生产力结合——就像去年我们用R做因果推断确定核心变量,再用Python的LightGBM完成最终建模。
说点扎心的大实话:新手才做选择,老炮都在混着用。我工位右边用R做特征相关性分析的妹子,左手其实放着《Python深度学习》实体书。真正需要抉择的是你的职业规划——想去科技公司造AI产品就死磕Python,想在药企做临床试验分析就跟R绑定,想开发能部署在服务器上的实时推荐系统?今晚就开始学Django框架吧。
","description":"机器学习用python还是R,哪个更好? 爱收集软件分享的回答\\n\\n\\n这个问题就像打游戏选「键鼠操作」还是「手柄操作」——没有标准答案,取决于你的目标、习惯和游戏类型。让我用三个真实场景拆解你的困惑。\\n\\n场景1:当你深夜打开招聘网站输入「机器学习工程师」\\n\\n搜索结果前十页岗位描述里会出现79次Python,R可能出现在角落里某个医疗数据分析岗的「加分项」中。国内互联网大厂的机器学习落地基本被Python生态垄断,从数据清洗的Pandas到模型部署的FastAPI,整条流水线早被Python焊死。\\n\\n场景2:当你的统计学教授推着金丝眼镜说「看看这个时间序列」\\n\\n纽约某大学统计系实验…","guid":"https://www.zhihu.com/question/612094457/answer/97703974197","author":"爱收集软件分享","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-10T14:34:25.258Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"项目反应理论之Rasch模型","url":"https://zhuanlan.zhihu.com/p/22857954639","content":"Vol.1 方法介绍 由于经典测量理论(Classical Test Theory, CTT)存在一些理论体系上的缺陷,因此项目反应理论(Item Response Theory, IRT)应运而生。七十年代以来,IRT成了测量专家关心的主要课题之一。针对不同研究情形的IRT模型被研究者陆续开发出来,从两分的(dichotomous IRT)到多级计分的(polytomous IRT)、从单参数的(one-parameter IRT)到多参数的(multi-parameter IRT)、再从单维的(unidimensional IRT)到…","description":"Vol.1 方法介绍 由于经典测量理论(Classical Test Theory, CTT)存在一些理论体系上的缺陷,因此项目反应理论(Item Response Theory, IRT)应运而生。七十年代以来,IRT成了测量专家关心的主要课题之一。针对不同研究情形的IRT模型被研究者陆续开发出来,从两分的(dichotomous IRT)到多级计分的(polytomous IRT)、从单参数的(one-parameter IRT)到多参数的(multi-parameter IRT)、再从单维的(unidimensional IRT)到…","guid":"https://zhuanlan.zhihu.com/p/22857954639","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-10T13:29:48.132Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"空间单细胞转录组流程?-爱基百客的回答:时空转录组平台介绍 时空转录组技术利用纳米级芯片对组织和细胞原位捕获,以更高效率展开转录组扩增建库,同时捕获的空...","url":"https://www.zhihu.com/question/645672929/answer/97346324159","content":"空间单细胞转录组流程?时空转录组技术利用纳米级芯片对组织和细胞原位捕获,以更高效率展开转录组扩增建库,同时捕获的空间位置信息能更好地对细胞类型特征“寻根问源”。从转录组、单细胞转录组再到时空转录组,测序获取的信息愈加丰富,对科学研究问题的解答愈有助益,时空转录组已成为热点技术之一。
时空转录组芯片上有纳米级小孔,每个小孔都有自己的“身份证”——空间坐标序列。空间坐标信息结合PolyT探针形成“抓手”,将贴到芯片上的组织各个区域mRNA捕获到各个小孔中,带有位置信息的mRNA逆转录成cDNA随后从芯片上释放,建库测序就能检测组织不同区域的转录组信息,并通过空间坐标序列识别到对应位置。
目前,爱基百客的时空转录组平台已搭建完成,可接受新鲜冷冻(Fresh Frozen, FF)OCT包埋样本和福尔马林固定石蜡包埋(Formalin Fixed Paraffin Embedded, FFPE)样本进行服务。两种组织样本前期包埋处理和后续时空实验差异较大,应用特点和适用组织类型也不同。新鲜冷冻(FF)样本的制备流程相对简单,能快速高效检测组织中细胞类型分布特点和转录组信息。下面将详细介绍新鲜冷冻(FF)样本的时空转录组全流程步骤以及关键要点。
组织包埋可直接影响切片效果,若OCT未完全包裹组织可能导致RNA降解,进一步影响切片质检和建库质量。根据已测试物种组织的切片经验,我们总结制作了新鲜样本OCT包埋视频,如有需要可咨询获取。
常规组织OCT包埋需注意以下几点:
植物多组织包埋需注意以下几点:
不同物种器官和组织的适宜切片温度不一样,需根据资料搜集和经验积累调整箱体温度。若对于组织切片结构组成有要求,需调整样本头的角度,将目标结构切到一个平面。爱基百客时空平台已积累一些物种组织切片经验,以下展示部分组织类型的切片白片效果图。
核酸凝胶电泳。抽提的RNA进行电泳跑胶,常规组织有两条带,合格切片样本18S和28S条带完整且无降解;昆虫只有一条带,如家蚕、蜘蛛等。
片段大小分布检测。用Qsep仪器检测RNA的片段分布,计算28S/18S比值,即RIN值指标。合格切片样本RIN≥7,但昆虫RNA只有一个峰型,无法计算该指标。
在开展时空转录组正式实验之前用玻片贴切片进行H&E染色质检,能确定组织和细胞形态是否正常,进一步确定用于正式实验的贴片区域。以下展示部分已测试物种组织的切片H&E染色图。
时空转录组实验中,组织切片贴到芯片上,需要将组织中的mRNA捕获到纳米孔中。但是,不同动物组织的细胞膜等结构、植物组织的细胞壁等结构阻碍核酸释放,透化试剂能分解这些结构,切片被透化后,组织各个区域的mRNA就被释放到芯片上的各个小孔中。需要注意的是,同一组织不同结构层的适宜透化时间不同,即使是同一包埋组织块的不同层切片的透化时间也可能不同,故每一个组织包埋块开展正式实验前都要进行组织透化测试,且应尽量减少切片损耗,使不同阶段实验所用切片结构状况相似,能互相对应。
连续切片4张,贴于透化芯片,设置四个梯度的透化时间进行透化测试。在透化-反转录-组织移除结束后,保持相同拍照参数进行拍照成像,对比荧光成像效果判断最佳透化时间。如以下人皮肤黑色素瘤透化测试从左到右设置28-24-18-12min,结果显示透化少于18min,部分区域无荧光信号;透化24min时形态完整、各层结构信号均匀;透化28min时荧光信号减弱。综合以上结果,确定24min是最佳透化时间。
组织包埋块修片尽量减少损耗,修出完整组织时切片,将前期选定的区域贴于芯片上。将该芯片进行ssDNA或H&E染色后拍照,留存这张用于正式实验的切片染色图。成像图质检通过后按照最佳透化时间透化,将捕获的mRNA进行反转录反应,扩增纯化即可获得cDNA中间产物。合格的cDNA富集产物峰型分布在200-2000bp左右,产量大于100ng。下图是一个合格的cDNA产物片段大小分布图。
用合格的cDNA产物进行PCR扩增,纯化后即可获得时空转录组文库。合格的文库片段分布在100-1000bp,主峰在200-600bp范围,产量大于100ng。下图是一个合格文库片段大小分布图。
在新鲜冰冻(FF)样本的时空转录组全流程实验中,在每个阶段我们会进行相应质检,结果以报告形式反馈。切片图数据量过大,如需原图可联系公司人员进行返图。
2. 切片结果图片—玻片H&E染色图
3. RNA质检报告—切片抽提RNA电泳图、片段大小分布图
4. cDNA质检报告—时空转录组cDNA片段大小分布图、浓度总量等详细信息
5. 文库质检报告—文库片段大小分布图、浓度总量等详细信息
大概13年吧,大概。
那时候有个项目,跟某国字号单位合作。
叫做“门店商圈环境研究”吧,大概是这么一回事。
然后,要数据。
然后,可能是我对这类项目不熟。
也有执行人员的原因。
总之,数据不满意。
但是,高成本也去了。
反正项目不急,我就试着,用r,从百度api获取数据(所以对百度还是比较感激的)
补充了这部分信息。
不管好不好,总归是做出点东西。
至于这个语言还是窄了点,所以后面转python了。
","description":"大家用 R 语言做过哪些好玩的事情? Sylx的回答\\n\\n\\n大概13年吧,大概。\\n\\n那时候有个项目,跟某国字号单位合作。\\n\\n叫做“门店商圈环境研究”吧,大概是这么一回事。\\n\\n然后,要数据。\\n\\n然后,可能是我对这类项目不熟。\\n\\n也有执行人员的原因。\\n\\n总之,数据不满意。\\n\\n但是,高成本也去了。\\n\\n反正项目不急,我就试着,用r,从百度api获取数据(所以对百度还是比较感激的)\\n\\n补充了这部分信息。\\n\\n不管好不好,总归是做出点东西。\\n\\n至于这个语言还是窄了点,所以后面转python了。","guid":"https://www.zhihu.com/question/35224925/answer/96705567086","author":"Sylx","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T10:59:01.319Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在网络分析中计算可预测性(predictability)","url":"https://zhuanlan.zhihu.com/p/22574412387","content":"Vol.1 引言 在中文文献中,向中国研究者介绍“网络分析”方法的鼻祖是发表在《心理科学进展》上的《变量间的网络分析模型及其应用》(这也是我学习网络分析的启迪文献,可以说是我推荐给初学网络分析的人的必读文献之一)。在这篇文章中,它提到描述节点特征的指标除了中心性外,还有两个重要指标,一个是可预测性(predictability),另外一个是集群性(clustering)。根据目前网络分析的文章来说,更常用可预测性(predictabilit…","description":"Vol.1 引言 在中文文献中,向中国研究者介绍“网络分析”方法的鼻祖是发表在《心理科学进展》上的《变量间的网络分析模型及其应用》(这也是我学习网络分析的启迪文献,可以说是我推荐给初学网络分析的人的必读文献之一)。在这篇文章中,它提到描述节点特征的指标除了中心性外,还有两个重要指标,一个是可预测性(predictability),另外一个是集群性(clustering)。根据目前网络分析的文章来说,更常用可预测性(predictabilit…","guid":"https://zhuanlan.zhihu.com/p/22574412387","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T10:54:13.991Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"网络分析中的节点冗余-拓扑重叠检验","url":"https://zhuanlan.zhihu.com/p/22571196714","content":"在前面的文章中,我们介绍了如何通过R进行网络分析,想必大家都迫不及待地想试试啦。但先别急,在进行网络分析之前,我们还需要先做一些预分析(Pre-analysis)。在本文中我们介绍一种常用的预分析步骤——拓扑重叠检验(topological overlap test)。 Vol.1 什么时候用拓扑重叠检验?在心理学和精神病学研究领域,网络分析方法最常被用来考察一种或多种心理/精神障碍症状网络,及其与感兴趣变量的关系。其中,99.9%的研究都采用…","description":"在前面的文章中,我们介绍了如何通过R进行网络分析,想必大家都迫不及待地想试试啦。但先别急,在进行网络分析之前,我们还需要先做一些预分析(Pre-analysis)。在本文中我们介绍一种常用的预分析步骤——拓扑重叠检验(topological overlap test)。 Vol.1 什么时候用拓扑重叠检验?在心理学和精神病学研究领域,网络分析方法最常被用来考察一种或多种心理/精神障碍症状网络,及其与感兴趣变量的关系。其中,99.9%的研究都采用…","guid":"https://zhuanlan.zhihu.com/p/22571196714","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T10:32:41.238Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"新手求教一个简单的python代码?-小希的回答:运行环境:Windows11 + Python3.10.15 + VSCode之前的第1、2、3集里,写的都是Python的数据类型,非常地基础,当然...","url":"https://www.zhihu.com/question/50255653/answer/96435625723","content":"新手求教一个简单的python代码?运行环境:Windows11 + Python3.10.15 + VSCode
之前的第1、2、3集里,写的都是Python的数据类型,非常地基础,当然,也没有什么乐趣是吧doge(最基础的东西死记硬背就好了doge)
不过,编程其实也没有什么难的,在知道了Python的数据类型后就可以上手编程了,通过编程过程,在过程中学习和进步。
带你迈出编程的第一步,去明白如何用Python做一些简单的编程任务,一步步地。
首先,展示一个非常简单的Python程序,计算斐波那契数列的前几项。斐波那契数列是一个经典的数列,它的每一项都是前两项的和,比如:0, 1, 1, 2, 3, 5, 8, 13, 21, ...
# 这是一个简单的斐波那契数列程序\\na, b = 0, 1\\nwhile a < 10:\\n print(a)\\n a, b = b, a + b
解释:
a, b = 0, 1
:这里我们定义了两个变量a
和b
,它们的初始值分别是0和1。while a < 10:
:这是一个循环,只要a
的值小于10,循环就会一直执行。print(a)
:在循环中,我们会打印出a
的当前值。a, b = b, a + b
:这是关键的一步,它会更新a
和b
的值。a
变成b
,而b
变成a + b
,这样就能依次生成斐波那契数列。运行结果:
0\\n1\\n1\\n2\\n3\\n5\\n8
让我们一步一步来看看这个程序是怎么运行的:
第一次循环:
a = 0
, b = 1
a
,输出0
a
和b
:a = 1
, b = 0 + 1 = 1
第二次循环:
a = 1
, b = 1
a
,输出1
a
和b
:a = 1
, b = 1 + 1 = 2
第三次循环:
a = 1
, b = 2
a
,输出1
a
和b
:a = 2
, b = 1 + 2 = 3
第四次循环:
a = 2
, b = 3
a
,输出2
a
和b
:a = 3
, b = 2 + 3 = 5
第五次循环:
a = 3
, b = 5
a
,输出3
a
和b
:a = 5
, b = 3 + 5 = 8
第六次循环:
a = 5
, b = 8
a
,输出5
a
和b
:a = 8
, b = 5 + 8 = 13
第七次循环:
a = 8
, b = 13
a
,输出8
a
和b
:a = 13
, b = 8 + 13 = 21
循环结束:
a = 13
已经不小于10了,所以while循环停止。这个程序虽然简单,但它展示了编程中的几个重要概念:
a
和b
来存储数据。while
循环让我们可以重复执行某些操作,直到条件不满足为止。a
和b
的值,这样就能生成新的数列。为了让你更好地理解这个程序,你可以尝试做一些小的修改,看看会发生什么:
while a < 10:
改成while a < 20:
,看看会输出什么。a, b = 0, 1
改成a, b = 1, 2
,看看数列有什么变化。print(a)
后面加上print(b)
,看看每次b
的值是多少。通过一个简单的斐波那契数列程序,迈出了编程的第一步,去学会如何使用变量、循环和打印语句来编写一个简单的Python程序。虽然这个程序很短,但它已经展示了编程的基本思路:通过编写代码来让计算机按照我们的指令工作。
编程其实并不难,再复杂的程序,本质上也是由多个指令的集合、嵌套。
","description":"新手求教一个简单的python代码? 小希的回答\\n\\n运行环境:Windows11 + Python3.10.15 + VSCode\\n\\n之前的第1、2、3集里,写的都是Python的数据类型,非常地基础,当然,也没有什么乐趣是吧doge(最基础的东西死记硬背就好了doge)\\n\\n不过,编程其实也没有什么难的,在知道了Python的数据类型后就可以上手编程了,通过编程过程,在过程中学习和进步。\\n\\n4 编程的第一步\\n\\n带你迈出编程的第一步,去明白如何用Python做一些简单的编程任务,一步步地。\\n\\n4.1 编写一个简单的程序\\n\\n首先,展示一个非常简单的Python程序…","guid":"https://www.zhihu.com/question/50255653/answer/96435625723","author":"小希","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T03:49:02.056Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"蛇年叛逃到 Python 阵营","url":"https://zhuanlan.zhihu.com/p/22508790733","content":"我是 R 语言的 20 年长期用户。在盗版软件充盈的年代,我开始学习使用免费开源的 R ,只是因为它符合我的需要。我不喜欢 Stata 的丑陋的语法,也不喜欢 MATLAB 的臃肿庞大。我在北京度过的第一个冬天,窗外北风飘雪,我在开着暖气的自习室倒腾 R 语言,自得其乐。 每个人都希望自己学习的技能永远不过时。2017年,我曾经和一位前辈聊起未来的计量经济学编程语言。我说10年之后,MATLAB 要被淘汰了,因为 MATLAB 闭源,不符合开源…","description":"我是 R 语言的 20 年长期用户。在盗版软件充盈的年代,我开始学习使用免费开源的 R ,只是因为它符合我的需要。我不喜欢 Stata 的丑陋的语法,也不喜欢 MATLAB 的臃肿庞大。我在北京度过的第一个冬天,窗外北风飘雪,我在开着暖气的自习室倒腾 R 语言,自得其乐。 每个人都希望自己学习的技能永远不过时。2017年,我曾经和一位前辈聊起未来的计量经济学编程语言。我说10年之后,MATLAB 要被淘汰了,因为 MATLAB 闭源,不符合开源…","guid":"https://zhuanlan.zhihu.com/p/22508790733","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T03:32:47.018Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R的未来——与Python比较,R的缺点和优点?-学研录的回答:以下是针对你的问题的分析与建议: 一、R与Python的核心差异定位1. R的不可替代性(坚守场景)统计建...","url":"https://www.zhihu.com/question/265419633/answer/96383259266","content":"R的未来——与Python比较,R的缺点和优点?以下是针对你的问题的分析与建议:
lme4
、survival
)远超Python生态。knitr
生成学术论文/技术报告(LaTeX集成)的成熟度仍高于Python(Jupyter+Quarto尚不完善)。ggplot2
的图层语法仍是数据探索的金标准(Matplotlib/Seaborn代码更冗长,Altair语法接近但社区资源少)。DESeq2
)无Python等效方案。quantmod
、rugarch
(波动率模型)在Quant社区认可度更高。plumber
/Shiny
仅适合轻量级API/仪表盘。reticulate
调用Python,存在调试成本。sparklyr
功能有限且维护滞后。for
循环,改用apply
族函数或purrr::map()
。R# 慢: for循环\\nresult <- numeric(1e6)\\nfor (i in 1:1e6) result[i] <- sqrt(i)\\n\\n# 快: 向量化\\nresult <- sqrt(1:1e6)
data.table
替代data.frame
(亿级行合并速度比Pandas快5-10倍)。arrow
+ duckdb
实现内存映射查询(类似Python的DuckDB)。Rcpp
编写关键函数(性能与Python+Cython相当)。CPP// Rcpp函数示例:快速计算欧氏距离\\n#include <Rcpp.h>\\nusing namespace Rcpp;\\n\\n// [[Rcpp::export]]\\nNumericVector rcpp_dist(NumericMatrix x) {\\n int n = x.nrow();\\n NumericVector out(n * (n - 1) / 2);\\n int k = 0;\\n for (int i=0; i<n; ++i) {\\n for (int j=i+1; j<n; ++j) {\\n double sum = 0;\\n for (int col=0; col<x.ncol(); ++col) {\\n sum += pow(x(i, col) - x(j, col), 2);\\n }\\n out[k++] = sqrt(sum);\\n }\\n }\\n return out;\\n}
future
+ furrr
实现并行化(替代Python的multiprocessing
)。reticulate
包(直接操作Python对象)Rlibrary(reticulate)\\nnp <- import(\\"numpy\\")\\npd <- import(\\"pandas\\")\\n\\n# 调用PyTorch\\ntorch <- import(\\"torch\\")\\nmodel <- torch$nn$Linear(10L, 2L)
rpy2
库PYTHONfrom rpy2.robjects import r\\nfrom rpy2.robjects.packages import importr\\n\\n# 调用R的ggplot2\\nggplot2 = importr(\'ggplot2\')\\nr(\'\'\'ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point()\'\'\')
统计建模/学术报告工程化/深度学习混合需求任务类型R为主Python为主R+Python协作优化R代码: data.table/RcppPyTorch+Dask技术栈reticulate或rpy2桥接
总结起来,本次回答需要涵盖以下几点:
1. R和Python各自的优缺点,尤其是速度和通用性之外的方面。
2. 优化R速度的方法,避免用户因速度问题而放弃R。
3. 根据用户的具体工作需求,建议是否迁移或混合使用。
4. 特定领域R的优势,比如统计建模、学术研究。
5. 混合使用的可能性及工具(如reticulate)
最终选择取决于你的核心工作场景,但掌握双语言+桥接技术会是更优策略。
我是学研录,希望我的回答对你有所帮助。也欢迎大家关注学研录!
","description":"R的未来——与Python比较,R的缺点和优点? 学研录的回答\\n\\n\\n以下是针对你的问题的分析与建议:\\n\\n一、R与Python的核心差异定位\\n1. R的不可替代性(坚守场景)\\n统计建模与学术研究\\n✅ 专长领域:R在广义线性模型、时间序列、生存分析、空间统计等领域的包(如lme4、survival)远超Python生态。\\n✅ 可解释性报告:R Markdown + knitr生成学术论文/技术报告(LaTeX集成)的成熟度仍高于Python(Jupyter+Quarto尚不完善)。\\n✅ 可视化标杆:ggplot2的图层语法仍是数据探索的金标准(Matplotlib…","guid":"https://www.zhihu.com/question/265419633/answer/96383259266","author":"学研录","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-09T02:36:54.722Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【ArcGIS】R语言空间分析、模拟预测与可视化技术","url":"https://zhuanlan.zhihu.com/p/22283708463","content":"R语言是一种强大的统计计算和图形展示工具,它在空间数据挖掘领域也扮演着重要的角色。空间数据挖掘是从空间数据集中提取模式和知识的过程,这些数据集通常包括地理坐标和相关的属性信息。以下是R语言在空间数据挖掘中的一些应用: 空间分析:R提供了多种包来进行空间分析,如sp和sf,这些包可以用来分析空间数据的结构和模式。 地理可视化:R的ggplot2和tmap等包可以帮助用户创建高质量的地图和空间数据可视化。 空间统计:R可…","description":"R语言是一种强大的统计计算和图形展示工具,它在空间数据挖掘领域也扮演着重要的角色。空间数据挖掘是从空间数据集中提取模式和知识的过程,这些数据集通常包括地理坐标和相关的属性信息。以下是R语言在空间数据挖掘中的一些应用: 空间分析:R提供了多种包来进行空间分析,如sp和sf,这些包可以用来分析空间数据的结构和模式。 地理可视化:R的ggplot2和tmap等包可以帮助用户创建高质量的地图和空间数据可视化。 空间统计:R可…","guid":"https://zhuanlan.zhihu.com/p/22283708463","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-08T07:16:31.483Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Agilent 芯片(无GB_list、genesymbol)探针该如何注释?-富临医疗的回答:本文介绍了一种利用低成本微加工技术(如薄膜沉积、刀片切割和光刻技术)制造硅神经探...","url":"https://www.zhihu.com/question/308265236/answer/95753075668","content":"Agilent 芯片(无GB_list、genesymbol)探针该如何注释?本文介绍了一种利用低成本微加工技术(如薄膜沉积、刀片切割和光刻技术)制造硅神经探针的方法。构成面积为50×50平方微米的9个微电极、线路和焊盘的金属叠层由钛(Ti)和铂(Pt)制成,而钝化叠层则由二氧化硅(SiO₂)和氮化硅(Si₃N₄)构成。在铂微电极上沉积聚(3,4 - 乙烯二氧噻吩)(PEDOT)之前和之后,使用电化学阻抗谱对所制造的探针进行了表征。PEDOT(一种导电聚合物)的电化学沉积降低了铂微电极的阻抗。带有PEDOT的神经探针被用于成年大鼠体内的电生理急性记录。利用分别为400 - 6000赫兹和0.1 - 300赫兹的巴特沃斯带通滤波器对细胞外记录进行滤波,以获得锋电位(spike)和局部场电位(LFP)数据。与商业神经探针获取的信号相比,所制造的神经探针获得的结果验证了其功能,也验证了制造工艺的可行性,该工艺避免了高成本和复杂的蚀刻工艺。
一、介绍
在整合人体的系统中,神经系统是最不被理解的,而由此产生的疾病也是最难治疗的。自20世纪50年代以来,开发出了用于大脑电刺激和神经活动记录的设备,从而创建了与大脑的接口,并因此扩大了对神经系统的了解。自那时起,单线金属微电极被用于记录电活动。在20世纪70年代,由于薄膜和集成电路微加工技术的发展,出现了第一个基于硅的神经探针。从那时起,硅微加工技术被广泛用于开发微型化神经探针,从而建立了神经微机电系统(Neural MEMS)领域。
本文介绍的硅神经探针(见图1)是基于低成本微加工技术制造的,例如薄膜沉积、刀片划片和光刻。形成微电极、导轨和焊盘的金属堆叠由钛(Ti)和铂(Pt)制成,而钝化堆叠材料为二氧化硅(SiO₂)和氮化硅(Si₃N₄)。这些材料通常用于神经探针的制造。刀片划片被用于定义探针的几何形状。神经探针的设计没有采用V形尖端。微电极与神经探针尖端的高接近性使得进行V形尖端的划片切割变得困难且具有挑战性,这决定了采用平面探针尖端。此外,划片机的使用也定义了带有图案化微电极、焊盘和导轨的神经探针的最小物理尺寸,特别是探针的宽度。这避免了使用蚀刻工艺(湿法蚀刻或深反应离子蚀刻(DRIE)),从而避免了与这些工艺相关的一些缺点,例如DRIE的高成本以及湿法蚀刻对硅片方向和温度的依赖性。
图 1. 硅神经探针设计,带有9个微电极,每个微电极的面积为50×50 µm²(A–F和I–K)。微电极G和H是为了未来实现商业化的l-LED(发光二极管)用于光遗传学应用而设计的。l-LED可以通过焊锡膏焊接在神经探针上。
制造的神经探针通过电化学阻抗谱(EIS)测量进行了表征,因为低微电极阻抗对于记录神经信号是理想的。此外,在神经探针的每个微电极上进行了聚(3,4-乙撑二氧噻吩)(PEDOT)的电化学沉积,以降低微电极的阻抗。在PEDOT沉积后,再次进行了EIS测量,以评估微电极阻抗的降低。像PEDOT这样的导电聚合物可以在不改变其几何表面积的情况下增加微电极的电化学表面积,从而降低微电极的阻抗。
二、材料和方法
2.1制造工艺
神经探针的制造工艺如图2所示。首先,将一块厚度为525 ± 25微米、表面有1微米厚二氧化硅(SiO₂)层的n型(100)硅衬底在超声浴中用丙酮清洗20分钟。这一步骤可去除有机污染物,并促进金属更好地附着在衬底表面。
微电极、线路和焊盘通过剥离光刻法进行图案化:(1)旋涂一层7微米厚的负性光刻胶(AZ nLOF 2070)作为牺牲层,如图2a所示;(2)将样品暴露于紫外光下(图2b),然后浸入AZ 726 MIF显影剂中以溶解未曝光的光刻胶,如图2c所示;(3)在样品上沉积厚度为50纳米的钛(Ti)和厚度为100纳米的铂(Pt)薄膜,如图2d所示;(4)将牺牲光刻胶层浸泡在剥离剂中进行剥离,这样在衬底上仅留下构成微电极、连接线和焊盘的薄膜,如图2e所示。钛薄膜通过电子束(7千伏/80毫安)沉积,沉积速率为1.7埃/秒。铂薄膜通过直流溅射(100瓦/355伏/0.31毫安)沉积,氩气(Ar)流量为15标准立方厘米/分钟,沉积过程中压力为6×10⁻³毫巴,沉积速率为2.6埃/秒。
图 2.神经探针制造工艺流程
进行另一个光刻工艺来钝化探针:(1)通过旋涂沉积一层20微米厚的正性光刻胶,如图2f所示;(2)在紫外光曝光(图2g)之后,在配备金刚石刀片(Disco NBC - ZB 2050)的DISCO DAD - 2H/6T切割机上进行切割操作以确定探针的几何形状,切割厚度为150微米,如图2h所示;(3)然后用去离子水清洗样品,并用AZ 351B显影剂去除暴露的光刻胶,仅保护微电极和焊盘区域,如图2i所示;(4)沉积二氧化硅(SiO₂,厚度为600纳米)和氮化硅(Si₃N₄,厚度为200纳米)薄膜以形成钝化层,如图2j所示;(5)用丙酮去除牺牲光刻胶层,使得除微电极和焊盘区域外的整个探针被钝化,如图2k所示。二氧化硅薄膜通过射频溅射(150瓦电源)沉积,氩气流量恒定为15标准立方厘米/分钟,沉积过程中压力为8.5×10⁻⁴毫巴,沉积速率为0.5埃/秒。氮化硅薄膜通过射频溅射(150瓦电源)沉积,氩气流量为7标准立方厘米/分钟,氮气(N₂)流量为13标准立方厘米/分钟,沉积过程中压力为6×10⁻³毫巴,沉积速率为0.3埃/秒。
2.2电化学阻抗谱测量
电化学阻抗谱(EIS)测量使用恒电位仪,采用三电极配置:工作电极(神经探针的微电极)、银/氯化银(Ag/AgCl)参比电极和铂对电极,浸入生理盐水(0.9%氯化钠,NaCl)溶液中。在对电极和工作电极之间施加5毫伏均方根(RMS)的交流电势,频率范围从50千赫到100赫。获取每个微电极阻抗随频率变化的函数关系。在每个微电极上沉积聚(3,4 - 乙烯二氧噻吩)(PEDOT)之前和之后进行EIS测量,以评估微电极阻抗的降低情况。
2.3 PEDOT沉积过程
使用导电聚合物PEDOT来降低面积为50×50平方微米(A - F和I - K)的微电极的阻抗。PEDOT从含有0.14%(重量/体积)3,4 - 乙烯二氧噻吩(EDOT)和2%(重量/体积)聚(4 - 苯乙烯磺酸钠)(PSS,Sigma Aldrich公司)的蒸馏水溶液中进行电化学沉积。PEDOT的电化学沉积在经典的三电极电解池中进行(图3)。神经探针的每个微电极都浸入溶液中并作为工作电极。铂箔作为对电极,银/氯化银电极作为参比电极。对于沉积过程,使用恒电位仪,并施加2毫安/平方厘米的电流密度持续120秒(在工作电极和对电极之间),以便在微电极表面沉积聚合物。还测试了其他电流密度和沉积时间:0.75、1.5和2毫安/平方厘米的电流密度以及30、60、90、120、150和180秒的沉积时间。然而,通过EIS测量证明,2毫安/平方厘米的电流密度和120秒的沉积时间是降低阻抗的优化电沉积值。
图 3.用于PEDOT电化学沉积的经典三电极电解池的示意图和实际照片。WE,工作电极;RE,参比电极;CE,对电极;V,电压;I,电流。
2.4体内电生理急性记录
在雌性、体重250 - 300克、年龄3 - 5个月的Wistar Han大鼠(用1.44克/千克的乌拉坦麻醉)的初级视觉皮层[V1,根据帕西诺斯图谱,前囟:前后径(AP)= - 7.2,中侧径(ML)= 3]进行体内记录。动物饲养、手术操作和记录方案均符合欧洲法规(欧盟指令2010/63/EU)。动物设施和参与动物操作的人员均由葡萄牙监管机构——葡萄牙农业和兽医总局(DGAV)认证。所有方案均遵循生命与健康科学研究所的指南、米尼奥大学的机构动物护理和使用委员会的规定,并得到生命与健康科学研究所伦理委员会的批准。
将制造的神经探针插入V1区域,连接到头端(RHD2132,Intan Technologies公司),以30千赫/通道和16位/样本的频率对发送到Open Ephys盒的信号进行放大和数字化。获取离线原始数据(细胞外记录)。图4展示了将神经探针插入大鼠皮层V1区域的示意图和实际照片。
东莞富临医疗科技有限公司是Open Ephys 和 Intan Technologies 在亚洲的代理商,富临医疗为亚洲客户提供“技术服务”与“电生理产品”
图 4.神经探针插入初级视觉皮层(V1,Bregma:AP = -7.2,ML = 3,根据Paxinos图谱的示意图和实际照片。
三、结果和讨论
3.1制造的探针
神经探针的制造工艺包括几种微加工技术:薄膜沉积、刀片切割和光刻技术。通过这些技术的组合并优化参数,有可能获得长度约为8毫米的神经探针(见图5),该探针能够到达大鼠大脑的几乎每个深部区域。设计了一个包含Omnetics公司连接器的印刷电路板(PCB),用于将微电极连接到采集和可视化模块。制造的探针用胶水与PCB耦合,焊盘通过铝丝键合连接。在丝键合触点上涂覆胶水以进行保护。
图 5. 制造的神经探针的照片
3.2电化学阻抗谱:有和无PEDOT时
在每个微电极上沉积PEDOT之前和之后进行电化学阻抗谱(EIS)测量,以评估微电极阻抗的降低情况。图6显示了两个神经探针在PEDOT沉积之前和之后(考虑面积为50×50平方微米的微电极)的平均阻抗。对于探针1,在1千赫时,无PEDOT时的平均阻抗为263 ± 170千欧,有PEDOT时为170 ± 94千欧。对于探针2,在1千赫时,无PEDOT时的平均阻抗为282 ± 124千欧,有PEDOT时为114 ± 62千欧。正如预期的那样,PEDOT沉积使探针1的微电极阻抗降低了35%,使探针2的微电极阻抗降低了60%。研究人员报道,对于面积为30×30平方微米的铂微电极,平均阻抗为600千欧。我们测量的微电极平均阻抗略低(可能是由于微电极面积较大,为50×50平方微米),但处于相同的数量级,即数百欧姆。研究人员报道,对于直径为80微米的铂和PEDOT微电极,在1千赫时阻抗从96千欧降低到仅4.2千欧。我们的阻抗降低没有那么显著,这可能是由于PEDOT电化学沉积过程中的一些差异,例如所使用的电化学溶液、施加的电流密度、沉积时间等。
图 6. 两个制造的神经探针的微电极的平均阻抗。
3.3体内测量:急性记录
图7显示了用探针1获得的细胞外记录,包括原始数据和经过滤波的锋电位(spike)数据。使用巴特沃斯带通滤波器(400 - 6000赫兹)来获得滤波后的峰电位数据。滤波后,锋电位很容易与背景噪声活动区分开来。锋电位的幅度和波形取决于放电神经元与微电极之间的距离。因此,正如在图7中看到的那样,微电极记录信号之间存在差异是预料之中的。图8显示了锋电位波形:(a)探针1的电极C的滤波后锋电位数据的放大区域,突出显示了一个锋电位;(b)使用Neuronexus公司的商业探针在乌拉坦麻醉大鼠的运动皮层中获得的锋电位;(c)来自文献的一个峰电位示例。一个锋电位的平均持续时间约为1毫秒,这接近我们的平均基线到基线的锋电位持续时间,约为0.96毫秒(见图8a)。这些结果验证了制造的神经探针。
图 7. 细胞外记录(原始和滤波后的尖峰数据)。
图 8.使用探针1(a)和商业探针(b)获得的尖峰波形。来自文献的尖峰示例(c)(Zhang 等人,2018)。
还使用巴特沃斯带通滤波器(0.1 - 300赫兹)对原始数据中的局部场电位(LFP)进行了分析。局部场电位是由多个神经元的活动产生的,导致细胞外电位的波动。因此,功率谱用于量化局部场电位的活动。功率谱测量信号方差随频率的变化函数,可以使用韦尔奇(Welch)方法进行估计。该方法包括对小信号窗口的连续傅里叶变换求平均,可以有重叠或无重叠。较小的窗口大小有助于获得平滑的功率谱,因为噪声的随机效应被平均掉了。然而,较小的窗口大小会导致较低的频率分辨率。通过增加重叠百分比,窗口总数增加,这有助于平均掉噪声的影响。然而,由于窗口样本之间的高度相关性,高度重叠的窗口不能保证得到更平滑的功率谱。因此,为了获得具有较低噪声和较高频率分辨率的功率谱,需要在窗口大小和重叠百分比之间进行权衡。使用韦尔奇方法,采用3秒的窗口和50%的重叠,得到了最平滑的功率谱。图9和图10分别显示了探针1的电极C和Neuronexus商业探针的滤波后的局部场电位数据(a)和功率谱(b)。如文献报道,功率谱图显示出大约1/频率的特性。
图 9. 探针1的电极C的滤波后局部场电位(LFP)数据(a)及其功率谱(b)。
图 10. 商业探针的滤波后局部场电位(LFP)数据(a)及其功率谱(b)。
四、结论
基于低成本微加工技术,即薄膜沉积、刀片切割和光刻技术制造了一种硅基神经探针。在沉积导电聚合物PEDOT之前和之后,基于电化学阻抗谱测量对神经探针进行了表征,PEDOT降低了微电极的阻抗。带有PEDOT的神经探针用于成年大鼠的体内急性记录,并成功记录了锋电位活动。最后,制造的探针所记录的神经活动及其与商业探针信号的相似性,证明了制造的探针的实际用途,并且制造工艺具有明显的经济优势。
邮箱:li@fulinsujiao.com
公司地址:广东省东莞市樟木头镇塑金国际1号楼810
remotes::install_github(\\"idmn/ggview\\")
devtools::install_local(\\"C:Users/HP/Desktop/linkET-master_113049.zip\\",force = T)##本地安装master后缀包
install.packages(\\"jsonlite\\", type = \\"source\\")
#安装二进制文件
install.packages(\\"pkgload\\",type=\\"binary\\")
重点在type=那块,挨个试试,至少有一个能用的。
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? 穷奇的回答\\n\\n\\nremotes::install_github(\\"idmn/ggview\\")\\n\\ndevtools::install_local(\\"C:Users/HP/Desktop/linkET-master_113049.zip\\",force = T)##本地安装master后缀包\\n\\ninstall.packages(\\"jsonlite\\", type = \\"source\\")\\n\\n#安装二进制文件\\n\\ninstall.packages(\\"pkgload\\",type=\\"binary\\")\\n\\n重点在type=那块…","guid":"https://www.zhihu.com/question/5929451559/answer/95677620430","author":"穷奇","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-08T04:33:17.188Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"大学学不会R语言怎么办?r语言?-TigerZ 生信宝库的回答:在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图...","url":"https://www.zhihu.com/question/461436682/answer/95593470662","content":"大学学不会R语言怎么办?r语言?在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。
为了便于使用,本系列文章介绍的所有配色都已收录到了 sciRcolor 项目中,获取方式:
R 语言科研配色工具 --- sciRcolor为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:
① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60 种离散色 + 40 种连续色)
② 一个用来预览配色的在线网站
③ 一个用来获取配色的 R 包
library(sciRcolor)\\npal_scircolor(palette = 1, alpha = 1)\\n[1] \\"#5773CCFF\\" \\"#FFB900FF\\"
Pandas 提供两种核心数据结构:
Series
(一维带索引数组)DataFrame
(二维表格)Series
类似于 NumPy 的一维数组,但带有索引,可以存储不同类型的数据。
import pandas as pd\\nimport numpy as np\\n\\n# 直接创建\\ns = pd.Series([10, 20, 30, 40])\\nprint(s)\\n0 10\\n1 20\\n2 30\\n3 40\\ndtype: int64
s = pd.Series([10, 20, 30, 40], index=[\'a\', \'b\', \'c\', \'d\'])\\nprint(s)\\na 10\\nb 20\\nc 30\\nd 40\\ndtype: int64
print(s.index) # 获取索引\\nprint(s.values) # 获取值\\nprint(s.dtype) # 数据类型\\nprint(s.shape) # 形状
print(s[\'b\']) # 20\\nprint(s[1]) # 20 (整数索引)\\nprint(s[[\'a\', \'c\']]) # 选择多个值\\nprint(s[s > 15]) # 布尔索引
✅ 面试重点
Series
索引可以是字符串DataFrame
是 Pandas 最常用的数据结构,类似于 Excel 表格。
data = {\\n \'Name\': [\'Alice\', \'Bob\', \'Charlie\'],\\n \'Age\': [25, 30, 35],\\n \'Salary\': [5000, 6000, 7000]\\n}\\ndf = pd.DataFrame(data)\\nprint(df)\\nName Age Salary\\n0 Alice 25 5000\\n1 Bob 30 6000\\n2 Charlie 35 7000
✅ 面试重点
DataFrame
是 列方向存储,每列是一个 Series
。print(df[\'Name\']) # 取 Name 列(Series)\\nprint(df[[\'Name\', \'Age\']]) # 取多列(DataFrame)
df[\'Bonus\'] = df[\'Salary\'] * 0.1\\nprint(df)
df.drop(columns=[\'Bonus\'], inplace=True)
✅ 面试重点
df[[\'col1\', \'col2\']]
取 多列df.drop(columns=[\'col\'])
删除列df.set_index(\'Name\', inplace=True)\\nprint(df)
df.reset_index(inplace=True)
print(df.loc[\'Alice\']) # 按标签索引\\nprint(df.iloc[0]) # 按行号索引
✅ 面试重点
df.loc[label]
按标签取值df.iloc[index]
按行号取值df = pd.read_csv(\'data.csv\')
df = pd.read_excel(\'data.xlsx\', sheet_name=\'Sheet1\')
import sqlite3\\n\\nconn = sqlite3.connect(\'database.db\')\\ndf = pd.read_sql(\'SELECT * FROM table_name\', conn)
✅ 面试重点
read_csv()
常用于大规模数据read_sql()
需要数据库连接df.to_csv(\'output.csv\', index=False)
df.to_excel(\'output.xlsx\', index=False, sheet_name=\'Sheet1\')
df.to_sql(\'table_name\', conn, if_exists=\'replace\', index=False)
✅ 面试重点
index=False
避免写入 Pandas 的行索引if_exists=\'replace\'
避免重复插入数据功能 | 方法 | 面试重点 |
---|---|---|
Series 创建 | pd.Series(data, index=[]) | 带索引 |
Series 索引 | s[\'a\'], s[0], s[s>10] | 支持布尔索引 |
DataFrame 创建 | pd.DataFrame(data_dict) | 每列是 Series |
DataFrame 取列 | df[\'col\'], df[[\'col1\', \'col2\']] | 取单列 vs 取多列 |
DataFrame 取行 | df.loc[\'row\'], df.iloc[0] | 按索引 vs 按位置 |
DataFrame 改索引 | df.set_index(\'col\'), df.reset_index() | 设置 vs 还原 |
读 CSV | pd.read_csv(\'file.csv\') | 常考 |
写 CSV | df.to_csv(\'file.csv\', index=False) | index=False 避免行索引 |
读 SQL | pd.read_sql(query, conn) | 数据库连接 |
写 SQL | df.to_sql(\'table\', conn, if_exists=\'replace\') | 避免重复插入 |
✅ 建议
Series
和 DataFrame
索引操作read_csv()
、to_sql()
,面试常考loc[]
和 iloc[]
的区别Pandas 提供丰富的数据探索与选择方法,面试常考数据的查看、定位和筛选技巧。
常用于初步检查数据,快速了解数据的结构、缺失值和统计信息。
import pandas as pd\\n\\ndf = pd.DataFrame({\\n \'Name\': [\'Alice\', \'Bob\', \'Charlie\', None],\\n \'Age\': [25, 30, 35, None],\\n \'Salary\': [5000, 6000, 7000, 8000]\\n})\\n\\nprint(df.info()) # 查看列类型、缺失值\\n<class \'pandas.core.frame.DataFrame\'>\\nRangeIndex: 4 entries, 0 to 3\\nData columns (total 3 columns):\\n # Column Non-Null Count Dtype \\n--- ------ -------------- ----- \\n 0 Name 3 non-null object \\n 1 Age 3 non-null float64\\n 2 Salary 4 non-null int64
✅ 面试重点
info()
查看列数据类型 & 缺失值describe()
统计数值列df.dtypes
查看所有列的类型print(df.describe()) # 统计数值列\\nAge Salary\\ncount 3.0000 4.0000\\nmean 30.0000 6500.0000\\nstd 5.0000 1290.9944\\nmin 25.0000 5000.0000\\n25% 27.5000 5750.0000\\n50% 30.0000 6500.0000\\n75% 32.5000 7250.0000\\nmax 35.0000 8000.0000
✅ 面试重点
describe()
适用于数值列df.describe(include=\'all\')
可统计非数值列print(df.loc[0]) # 取第1行\\nprint(df.loc[:, \'Age\']) # 取 Age 列\\nprint(df.loc[0:2, [\'Name\', \'Salary\']]) # 取 0~2 行的 Name 和 Salary
print(df.iloc[0]) # 取第1行\\nprint(df.iloc[:, 1]) # 取第2列\\nprint(df.iloc[0:2, [0, 2]]) # 取前两行 & 第1/3列
at[]
用于 标签索引iat[]
用于 整数索引print(df.at[0, \'Name\']) # 取 (0, Name)\\nprint(df.iat[0, 1]) # 取 (0, 1)
✅ 面试重点
loc[]
按标签iloc[]
按位置at[] / iat[]
用于快速单值访问print(df[df[\'Age\'] > 25]) # 选出 Age > 25 的行\\nprint(df[df[\'Name\'].notnull()]) # 选出 Name 非空的行
✅ 面试重点
df[df[\'Age\'] > 25]
筛选行df[df[\'Name\'].notnull()]
筛选非空数据清洗是 Pandas 面试的高频考点,主要包括缺失值处理、重复值处理、数据类型转换和重命名。
print(df.isnull()) # True/False\\nprint(df.isnull().sum()) # 每列缺失值个数
df.dropna(inplace=True) # 删除含 NaN 的行\\ndf.dropna(axis=1, inplace=True) # 删除含 NaN 的列
df.fillna({\'Age\': df[\'Age\'].mean(), \'Name\': \'Unknown\'}, inplace=True)
✅ 面试重点
dropna()
删除fillna()
填充isnull().sum()
检查缺失值个数print(df.duplicated()) # 每行是否重复\\nprint(df.duplicated().sum()) # 计算重复行的个数
df.drop_duplicates(inplace=True)
✅ 面试重点
duplicated()
标记重复drop_duplicates()
去重df[\'Age\'] = df[\'Age\'].astype(int) # 转换为整数
df[\'Age\'] = pd.to_numeric(df[\'Age\'], errors=\'coerce\') # 遇到错误置 NaN
✅ 面试重点
astype()
转换类型to_numeric()
处理错误输入df.rename(columns={\'Age\': \'年龄\', \'Salary\': \'薪水\'}, inplace=True)
✅ 面试重点
rename()
修改列名功能 | 方法 | 面试重点 |
---|---|---|
查看信息 | http://df.info(), df.describe() | 了解缺失值、数据类型 |
索引 | df.loc[], df.iloc[], df.at[], df.iat[] | loc 按标签,iloc 按索引 |
筛选 | df[df[\'col\'] > val] | 布尔索引 |
缺失值 | isnull(), fillna(), dropna() | 删除 vs 填充 |
重复数据 | duplicated(), drop_duplicates() | 检查 & 删除 |
数据类型转换 | astype(), to_numeric() | 强制类型转换 |
重命名 | rename(columns={\'A\': \'B\'}) | 列名改写 |
✅ 面试技巧
loc[] vs iloc[]
dropna(), fillna()
astype()
和 to_numeric()
是高频考点df.sort_values(by=\'Age\', ascending=True, inplace=True) # 按 Age 升序排序
df.sort_index(ascending=False, inplace=True) # 按索引降序排序
✅ 面试重点
sort_values(by=…)
按列值排序sort_index()
按索引排序df.groupby(\'Category\')[\'Salary\'].mean() # 按 Category 计算平均 Salary
df.groupby([\'Category\', \'Gender\'])[\'Salary\'].sum()
✅ 面试重点
groupby(col)[\'target\'].agg(func)
分组统计df[\'Salary\'].agg([\'mean\', \'max\', \'min\']) # 计算平均值、最大值、最小值
df.agg({\'Salary\': [\'mean\', \'max\'], \'Age\': [\'sum\']})
✅ 面试重点
agg()
支持多个统计方法aggregate()
作用相同df.pivot_table(values=\'Salary\', index=\'Category\', columns=\'Gender\', aggfunc=\'mean\')
✅ 面试重点
pivot_table()
比 groupby 更灵活df1.merge(df2, on=\'ID\', how=\'inner\') # 内连接\\ndf1.merge(df2, on=\'ID\', how=\'left\') # 左连接
df1.set_index(\'ID\').join(df2.set_index(\'ID\'), how=\'outer\')
pd.concat([df1, df2], axis=0) # 行拼接\\npd.concat([df1, df2], axis=1) # 列拼接
✅ 面试重点
merge()
基于列,支持 SQL 连接join()
基于索引concat()
行列拼接Pandas 内置强大的时间序列处理能力,面试常考时间索引、重采样、滑动窗口等操作。
df[\'date\'] = pd.to_datetime(df[\'date\'])
✅ 面试重点
pd.to_datetime()
转换日期df.set_index(\'date\', inplace=True)
df.loc[\'2024-01\'] # 选取 2024 年 1 月的数据\\ndf.loc[\'2024-01-01\':\'2024-02-01\'] # 选取时间范围
✅ 面试重点
set_index()
时间索引df.loc[]
按时间筛选df.resample(\'M\').sum()
✅ 面试重点
resample()
重采样,按时间聚合df[\'rolling_mean\'] = df[\'Salary\'].rolling(window=3).mean()
✅ 面试重点
rolling()
计算滑动窗口功能 | 方法 | 面试重点 |
---|---|---|
排序 | sort_values(), sort_index() | 按值排序 vs 按索引排序 |
分组 | groupby(), agg(), aggregate() | 灵活分组统计 |
透视表 | pivot_table() | 比 groupby 更灵活 |
合并 | merge(), join(), concat() | SQL 连接 vs 索引连接 |
时间序列 | pd.to_datetime(), set_index() | 时间索引处理 |
重采样 | resample() | 按时间聚合 |
滑动窗口 | rolling() | 时间序列分析 |
✅ 面试技巧
merge() vs join() vs concat()
groupby() vs pivot_table()
Pandas 内置了 Matplotlib 作为后端支持,可以使用 plot()
方法快速绘制各种图表。
import pandas as pd\\nimport numpy as np\\nimport matplotlib.pyplot as plt\\n\\n# 创建数据\\ndf = pd.DataFrame({\\n \'Year\': [2018, 2019, 2020, 2021, 2022],\\n \'Sales\': [10, 15, 8, 25, 18]\\n})\\n\\n# 基本折线图\\ndf.plot(x=\'Year\', y=\'Sales\', kind=\'line\', marker=\'o\', title=\'Sales Over Time\')\\nplt.show()
✅ 面试重点
plot(kind=\'line\')
绘制折线图plt.show()
显示图形df.plot(kind=\'line\', x=\'Year\', y=\'Sales\', marker=\'o\', linestyle=\'--\', color=\'r\')\\nplt.show()
✅ 技巧
marker=\'o\'
添加数据点linestyle=\'--\'
更换线型color=\'r\'
更改颜色df.plot(kind=\'bar\', x=\'Year\', y=\'Sales\', color=\'c\', legend=False)\\nplt.show()
✅ 技巧
kind=\'bar\'
柱状图color=\'c\'
自定义颜色legend=False
去掉图例水平柱状图
df.plot(kind=\'barh\', x=\'Year\', y=\'Sales\', color=\'m\')\\nplt.show()
✅ 技巧
kind=\'barh\'
水平柱状图df2 = pd.DataFrame({\\n \'Temperature\': [20, 25, 30, 35, 40],\\n \'Sales\': [200, 220, 250, 270, 300]\\n})\\n\\ndf2.plot(kind=\'scatter\', x=\'Temperature\', y=\'Sales\', color=\'b\')\\nplt.show()
✅ 技巧
kind=\'scatter\'
散点图df3 = pd.DataFrame({\\n \'Category A\': np.random.randint(50, 100, 10),\\n \'Category B\': np.random.randint(40, 90, 10)\\n})\\n\\ndf3.plot(kind=\'box\')\\nplt.show()
✅ 技巧
df3[\'Category A\'].plot(kind=\'hist\', bins=5, color=\'g\', alpha=0.7)\\nplt.show()
✅ 技巧
kind=\'hist\'
直方图bins=5
设定区间数量alpha=0.7
调整透明度图表类型 | 适用场景 | 代码示例 |
---|---|---|
折线图(Line) | 趋势分析 | df.plot(kind=\'line\') |
柱状图(Bar) | 类别对比 | df.plot(kind=\'bar\') |
散点图(Scatter) | 变量关系 | df.plot(kind=\'scatter\') |
箱线图(Box) | 数据分布、异常值检测 | df.plot(kind=\'box\') |
直方图(Histogram) | 数据分布 | df.plot(kind=\'hist\') |
✅ 面试技巧
plot(kind=...)
直接绘制大家好!欢迎关注小号:医学统计数据分析,今天我们来介绍一下医学统计学中常用统计学方法的R语言基本操作。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
我们先下载R与Rstudio的安装包,先安装R,再安装Rstudio。RStudio是一款R语言的集成开发环境(IDE),R自带的环境操作起来可能不是方便,而Rstudio很好地解决了这个问题,RStudio只是辅助你使用R进行编辑的工具,因为它自身并不附带R程序。
R下载地址(官网):
https://cran.r-project.org/bin/windows/base/
Rstudio(官网):
打开RStudio之后,会出现上图所示的窗口,其中有四个独立的面板。RStudio界面分为左上角的源码编辑、脚本显示,左下角的代码执行、控制台,右上角的代码历史记录、数据对象列表,右下角的代码组织管理、包安装、更新、绘图。
一、R导入Excel数据
我们先把需要分析的Excel表格另存为.csv格式,使用<-read.csv(\\"\\")语句读取待分析的表格。
数据读取后,在脚本显示窗口可见数据预览:
使用summary()语句,对导入的数据大致分布做一下基本了解:
二、单因素(方差分析与卡方检验)
使用 anova<-aov(研究因素~分组因素)
summary(anova) 语句,可得方差分析结果:DF/SS/MS/F值/P值
使用plot(分组因素,研究因素)语句,可画出三组比较的箱形图:
使用chisq.test(分组因素,研究因素)做卡方检验,可见下图输出:
三、相关与回归
使用cor.test(testdata$1,testdata$2)语句做相关性分析,
使用plot(因素1,因素2)语句画出散点图。
使用> lm(Y~X+1)语句及
summary(lm(Y~X+1))语句得到一元线性回归的B值、R2、残差分析等结果。
四、时间序列图等
根据整理好的时间序列资料,使用plot()语句,即可直接画出时间序列图(散点):
安装包:
install.packages(\\"zoo\\")
install.packages(\\"xts\\")
载入包:
library(zoo)
library(xts)
计算与画图:
ts<- xts(data3$分析数据, as.Date(data3$日期, format=\'%Y/%m/%d\'))
plot(ts)
xts可画出线图:
同样,我们也可以画出五日平均线等平滑曲线:
在医疗卫生机构中,经常需要对大量的医疗数据进行分析和挖掘,例如患者信息、医疗记录、医药数据等。Python 具有简洁、高效、易学易用的特点,能够帮助医疗机构快速处理大量的医疗数据,从而发现医疗数据中的规律和规律性,并根据分析结果制定相应的治疗方案和预测未来趋势。今天我们来介绍一下Python做基础的医学统计数据分析简单步骤。
一、Python与PyCharm的获取与安装
与R语言和RStudio类似,Python也有它的IDE(集成开发环境)-PyCharm,就是一个用来编写Python程序的软件。PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
我们可以直接登录Pytmatchhon官网下载最新版本的安装包:https://www.python.org/ ;
然后登录PyCharm官网下载最新安装包:https://www.jetbrains.com/pycharm/ ;点击download 后会出现Full-fledged Professional(专业版) 和Free Community(免费社区版)两个版本,目前用免费版本就已经可以满足日常需求,专业版可以免费试用30天或者搜索获取激活码免费试用。
我们还可以登录https://www.anaconda.com/,下载Anaconda,Anaconda指的是一个Python集成开发软件,号称有两千万用户。Anaconda基于云的存储库,可查找并安装超过7,500个数据科学和机器学习模块。Anaconda使用conda-install命令,您可以开始使用数千个开源模块。因为包含了大量的科学包,Anaconda 的下载文件比较大500 MB左右。
将Python与PyCharm两个安装包安装到电脑,可以按照默认路径或者自定义路径。打开PyCharm,我们可以看到编辑页面,输入法调整为英文格式,写下第一行代码print(Hello World!),点击运行,可以看到结果界面输出。
我们来试一下简单运算功能,将3赋值给a,将4赋值给b,计算a乘以b,点击运行可以得到结果。出现“Process finished with exit code 0”即代表代码运行成功了。
二、简单的统计分析
例如我们在临床搜集到如下数据,两组研究对象,数据构成有分类变量,有数值变量,下面我们来做一个简单数据分析演示。
Python的数据分析主要依赖第三方程序包,以卡方检验为例,我们需要SciPy库中的stats.chi2_contingency函数来执行卡方检验。该函数计算两种或多种分类变量之间的卡方独立性检验的结果,返回一个包含卡方统计量、p值、自由度和期望值的元组。
Excel数据库中通过数据透视表,可以得到一个两组有效率的四格表。
我们在PyCharm新建一个kafang,py ,载入stats、scipy程序包输入代码及数据。点击运行即可得到卡方检验结果输出,包括卡方统计量、p值、自由度、期望值等变量。
如何做两组数据的t检验呢?比如我们需要比较两组均值分别为5.5、4,标准差分别为1、0.8,样本量均为50的数据,可以用stats.norm.rvs()语句先来创建两组数据,然后用levene检验来检验方差齐性,用stats.ttest_1samp()语句进行独立样本t检验,或者用stats.ttest_rel()语句进行配对t检验。点击运行,即可得到t检验的分析结果。
三、读取分析Excel里的数据进行分析
我们怎么样才能读取Excel里的数据进行统计分析呢?
需要import第一xlrd(用于读取Excel文件)、第二xlwt(用于写入Excel文件)、第三个Openpyxl(用于读写Excel文件)三个程序包。使用open_workbook(‘路径’) 打开excel;使用nrows(行),ncols(列)获取行与列;使用cell(row,col).value获取具体的值。
同样,Python通过pandas库可以轻松地读取Excel数据。pandas库是一个专门用于数据分析和处理的库,它可以将Excel中的数据读取为DataFrame格式,便于进行后续的数据分析和操作。使用data = pandas.read_excel()语句进行读取,print进行概览。
我们接着对Excel里的分类数据进行卡方检验,先提取需要进行卡方检验的两列,用contingency_table = pd.crosstab()语句进行列联表构建,使用statistic, p_value, dof, expected_values = chi2_contingency(contingency_table)语句进行卡方检验,print结果。
我们接着用stats.ttest_ind()语句、stats.ttest_rel()语句对Excel里的数据进行独立样本t检验或前后比较的配对样本t检验,print统计量t和显著性P值。
机器学习
机器学习是人工智能的一个重要分支,近年来在数据分析、图像识别、自然语言处理等领域发挥的作用越来越重要。机器学习的基本概念围绕着如何让计算机利用数据来进行学习和预测。而R语言,作为一种统计分析和图形表示的强大工具,因其丰富的包和灵活的数据处理能力,在机器学习领域中占有一席之地。今天我们开始R语言机器学习的第一篇,数据准备与包的批量安装。
机器学习的定义与工作原理
机器学习是一门研究如何使计算机系统从数据中学习和改进性能的学科。它通过训练模型来识别模式、预测趋势和做出决策从而实现对数据的自动处理和分析。
机器学习算法通过对大量数据进行学习,提取出有用的特征并建立模型来预测新数据。这些模型可以不断优化,以适应不同类型的数据和任务。常见的机器学习算法包括KNN、决策树、随机森林、贝叶斯等。
我们先打开Rstudio,对于单个包的安装与加载想必大家都已经很熟悉:
rm(list=ls()) #移除所有变量数据
install.packages() #安装包
library() #加载包
然后读取和写入Excel的包需要用到readxl和writexl:
#读取Excel数据
install.packages(\\"readxl\\")
library(readxl) #加载包
data <- read_excel(\\"路径/示例数据.xlsx\\")
#写入Excel数据导出
install.packages(\\"writexl\\")
library(writexl) #加载包
write_xlsx(data.all, \\"路径/总表.xlsx\\")
我们今天用到的示例数据是一个1000个个案的
数据库,我们用readxl读取进Rstudio进行处理。
我们可以
#定义要加载机器学习所需要的包列表,检查每个包是否已经安装,如果没有安装,则进行安装并加载
packages<-c(\\"readxl\\",\\"ggplot2\\",\\"caret\\",\\"lattice\\",\\"gmodels\\",
\\"glmnet\\",\\"Matrix\\",\\"pROC\\",\\"Hmisc\\",\\"rms\\",
\\"tidyverse\\",\\"Boruta\\",\\"car\\",\\"carData\\",
\\"rmda\\",\\"dplyr\\",\\"rpart\\",\\"rattle\\",\\"tibble\\",\\"bitops\\",
\\"probably\\",\\"tidymodels\\",\\"fastshap\\",
\\"shapviz\\",\\"e1071\\")
for(pkg in packages) {
if (!require(pkg, quietly = TRUE)) {
install.packages(pkg, dependencies = TRUE)
library(pkg, character.only = TRUE)
}
}
# 使用library()函数一次性加载多个包
lapply(packages,library,character.only = TRUE)
或者可以
#直接定义并批量安装包
packages<-c(\\"readxl\\",\\"ggplot2\\",\\"caret\\",
\\"lattice\\",\\"gmodels\\",\\"glmnet\\",\\"Matrix\\",\\"pROC\\",
\\"Hmisc\\",\\"rms\\",\\"tidyverse\\",\\"Boruta\\",\\"car\\",
\\"carData\\",\\"rmda\\",\\"dplyr\\",\\"rpart\\",\\"rattle\\",\\"tibble\\",
\\"bitops\\",\\"probably\\",\\"tidymodels\\",\\"fastshap\\",
\\"shapviz\\",\\"e1071\\")
install.packages(c(\\"readxl\\",\\"ggplot2\\",\\"caret\\",
\\"lattice\\",\\"gmodels\\",\\"glmnet\\",\\"Matrix\\",\\"pROC\\",
\\"Hmisc\\",\\"rms\\",\\"tidyverse\\",\\"Boruta\\",\\"car\\",\\"carData\\",
\\"rmda\\",\\"dplyr\\",\\"rpart\\",\\"rattle\\",\\"tibble\\",\\"bitops\\", \\"probably\\",\\"tidymodels\\",\\"fastshap\\",
\\"shapviz\\",\\"e1071\\"))
install.packages(packages)
# 使用library()函数一次性加载多个包
lapply(packages,library,character.only = TRUE)
进一步我们可以进行简单分析:
#独立样本t检验
t.test(data$指标1 ~ 结局, data = data, var.equal = TRUE)
t.test(data$指标2 ~ 结局, data = data, var.equal = TRUE)
t.test(data$指标3 ~ 结局, data = data, var.equal = TRUE)
#卡方检验
CrossTable(data$结局,data$指标8,expected = T,chisq = T,fisher = T, mcnemar = T, format = \\"SPSS\\")
#logistic回归
data$Group<-as.factor(data$结局)
model1 <- glm(Group ~ 指标1, data = data, family = \\"binomial\\")
summary(model1)
model2 <- glm(Group ~ 指标1+指标2, data = data, family = \\"binomial\\")
summary(model2)
model3 <- glm(Group ~ 指标1+指标2+指标3, data = data, family = \\"binomial\\")
summary(model3)
#ROC曲线
roc1 <- roc(data$结局,data$指标1);roc1
roc2 <- roc(data$结局,data$指标2);roc2
roc3 <- roc(data$结局,data$指标3);roc3
plot(roc1,
max.auc.polygon=FALSE, # 填充整个图像
smooth=F, # 绘制不平滑曲线
main=\\"Comparison of ROC curves\\", # 添加标题
col=\\"red\\", # 曲线颜色
legacy.axes=TRUE) # 使横轴从0到1,表示为1-特异度
plot.roc(roc2,
add=T, # 增加曲线
col=\\"orange\\", # 曲线颜色为红色
smooth = F) # 绘制不平滑曲线
plot.roc(roc3,
add=T, # 增加曲线
col=\\"yellow\\", # 曲线颜色为红色
smooth = F) # 绘制不平滑曲线
#列线图
dd<-datadist(data)
options(datadist=\\"dd\\")
data$Group<-as.factor(data$结局)
f_lrm<-lrm(Group~指标1+指标2+指标3+指标4+指标5+指标6+指标7+指标8,data=data)
summary(f_lrm)
par(mgp=c(1.6,0.6,0),mar=c(5,5,3,1))
nomogram <- nomogram(f_lrm,fun=function(x)1/(1+exp(-x)),
fun.at=c(0.01,0.05,0.2,0.5,0.8,0.95,1),
funlabel =\\"Prob of 结局\\",
http://conf.int = F,
abbrev = F )
plot(nomogram)
训练集和测试集
训练集和测试集是深度学习技术中经常使用的一种数据划分方式。它可以将数据自动划分为训练集和测试集,用于模型开发的评估。
训练集是为训练模型而准备的一组数据,它通常是人类标记过的,表明它们拥有特定方面的属性。通常情况下,为了训练有效的模型,训练集的采样大小最好是足够大的,而且应该有足够的多样性,可以代表它们的数据集中的所有可能的情况
测试集是一组样本,用于测试训练好的模型,通过测试集检验训练好的模型,从而测试模型的正确率和准确性。它本质上是一组未知的数据样本,用于测试模型性能的时候,而不受训练集采样的偏向,可以更可靠的评估模型的性能。
那么怎么划分测试集与训练集呢?
#分层抽样划分训练集和测试集
set.seed(123)
train <- sample(1:nrow(data),nrow(data)*7/10) #取70%做训练集、其余30%为测试集
#数据读取拆分与组合
Train <- data[train,] #定义训练集数据
Test <- data[-train,] #定义测试集数据
All <- rbind(Train, Test) #将拆分数据合并
#写入Excel数据导出
install.packages(\\"writexl\\")
library(writexl) #加载包
write_xlsx(Train, \\"C:/Users/L/Desktop/Train.xlsx\\")
write_xlsx(Test, \\"C:/Users/L/Desktop/Test.xlsx\\")
write_xlsx(All, \\"C:/Users/L/Desktop/All.xlsx\\")
Python机器学习
Python是一种广泛使用的语言,可以用于构建和应用各种机器学习模型。
以下是一些最常见的机器学习模型及其Python实现:
1.线性回归:用于回归分析,可以预测单个或多个输出。
2.逻辑回归:用于二分类问题,可以预测二进制输出。
3.决策树:用于二分类和多分类问题,可以可视化决策边界。
4.K最近邻(KNN):用于分类和回归问题,主要是基于实例的学习算法。
5.支持向量机(SVM):用于二分类和回归问题,可以找到最优分离超平面。
6.集成方法:如随机森林、Boosting等,可以提高预测精度并降低方差。
7.神经网络:用于复杂函数逼近和大规模数据集分类。
8.主成分分析(PCA)和 t-SNE:用于数据降维和可视化。
9.特征工程:包括数据清洗、特征缩放、特征选择等。
10.深度学习:用于复杂的数据分析和模式识别。
今天我们以临床医学数据中最常见的二分类因变量的logistic回归为例,开始Python机器学习系列的第一篇。
Scikit-learn(sklearn)是一个基于Python的开源机器学习库,它建立在NumPy、SciPy和Matplotlib之上,为数据建模提供了一整套工具。
Scikit-learn提供了大量的算法和工具,涵盖了数据挖掘、数据分析和机器学习领域的各种任务,包括分类、回归、聚类、降维等。
主要特点和功能
1.简单易用:Scikit-learn的设计非常简洁,易于上手,即使对于机器学习的新手也能快速掌握。
2.功能强大:它包含了从基础的线性回归、逻辑回归到复杂的支持向量机等多种机器学习算法。
3.集成性好:Scikit-learn与NumPy、Pandas、Matplotlib等Python科学计算库紧密集成,方便进行数据预处理、模型训练和结果可视化。
4.社区活跃:Scikit-learn有一个活跃的开源社区,不断更新和完善库的功能,同时提供丰富的文档和教程资源。
今天我们仍以熟悉的示例数据集为例,演示一下Python机器学习的数据准备:train_test_split训练集及测试集拆分。
加载程序包(openpyxl和pandas等)
#使用pandas读取示例数据xlsx文件
import openpyxl
import pandas as pd
import matplotlib.pyplot as plt
import sklearn
from sklearn.model_selection import train_test_split
# 加载数据集
dataknn = pd.read_excel(r\'C:\\\\Users\\\\L\\\\Desktop\\\\示例数据.xlsx\')
# 查看前几行数据
print(dataknn.head())
# 分离特征和目标变量
X = dataknn[[\'指标1\', \'指标2\', \'指标3\',\'指标4\',\'指标5\',\'指标6\']]
y = dataknn[\'结局\']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
在后续的分享中,我们将继续一起学习R语言和Python机器学习的各个模型简单示例,欢迎大家。
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
说实在我超讨厌广东人张口闭口叫人靓仔靓女(帅哥美女),非常轻浮,有时对方明明不好看还大声叫靓仔靓女,带着戏谑,不尊重人。
","description":"广东人被人喊一声“靓仔”到底是什么感觉? 敬一的回答\\n\\n\\n说实在我超讨厌广东人张口闭口叫人靓仔靓女(帅哥美女),非常轻浮,有时对方明明不好看还大声叫靓仔靓女,带着戏谑,不尊重人。","guid":"https://www.zhihu.com/question/552687195/answer/95324350166","author":"敬一","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-07T15:24:28.093Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ggplot2 画图能够取代 Matlab 吗,有哪些局限,如何取舍?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大...","url":"https://www.zhihu.com/question/23714116/answer/95118950647","content":"ggplot2 画图能够取代 Matlab 吗,有哪些局限,如何取舍?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=price)) +\\n geom_histogram(binwidth=5, fill=\\"#5470c6\\", color=\\"#e9ecef\\", alpha=0.9) +\\n labs(x=\\"Value\\", y=\\"Count\\") +\\n scale_y_continuous(breaks=seq(0,650,200), limits = c(0,650),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\")\\np
最后我们保存绘制的图形:
ggsave(\\"save/histogram-base.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
很多人喜欢把自己努力之后得不到相应的汇报作为摆烂的理由,仿佛他们觉得摆烂就必须要理由似的,虚伪,就好像做事都必须师出有名,而不能是自己不想干了,实际上,上班本质就是牺牲自由,健康去换金钱,该摆就摆那么多理由,老子就不想好好干,怎么的呢
","description":"为什么现在上班的人都开始摆烂了? Eliauk的回答\\n\\n\\n很多人喜欢把自己努力之后得不到相应的汇报作为摆烂的理由,仿佛他们觉得摆烂就必须要理由似的,虚伪,就好像做事都必须师出有名,而不能是自己不想干了,实际上,上班本质就是牺牲自由,健康去换金钱,该摆就摆那么多理由,老子就不想好好干,怎么的呢","guid":"https://www.zhihu.com/question/613862113/answer/94875051472","author":"Eliauk","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-07T05:11:38.040Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"怎么对一个已有的线性模型进行优化?-ILOR的回答:本系列文章是我在学习Dimitris Bertsimas和John N. Tsitsiklis的著作《Introduction to Linear Optimization》...","url":"https://www.zhihu.com/question/447665618/answer/94825170236","content":"怎么对一个已有的线性模型进行优化?本系列文章是我在学习Dimitris Bertsimas和John N. Tsitsiklis的著作《Introduction to Linear Optimization》期间所做的笔记,希望同样对大家学习线性规划有所帮助。
ILOR:线性优化导论(8)锥与多面体本文内容:延迟列生成、切割库存问题。本文是大规模线性优化方法的第一篇内容。
延迟列生成(delayed column generation)的想法是只有在确定某列可以有利地进入基之后,才生成矩阵 的对应列。
考虑标准形式的问题 其中
且
,并假设矩阵
的行是线性无关的。
假设列的数量非常庞大,甚至无法生成并存储整个矩阵 于内存中。针对大规模问题的经验表明,通常大多数列永远不会进入基,因此我们完全可以不生成这些未使用的列。这一特性与修正单纯形法契合。
然而,这里仍有一个问题需要解决:即我们需要一种方法来发现具有负 reduced cost 的变量
,而不必生成所有列。有时候,这可以通过求解优化问题
来实现,其中最小化是针对所有
进行的。在许多情况下这个优化问题具有特殊结构,可以在不计算所有
的情况下高效地找到最小的
。
如果 的最小值大于或等于
,则所有 reduced cost 均为非负数,意味着我们已经得到了原始线性规划问题的最优解。另一方面,如果最小值为负,则对应于该最小化索引
的变量
具有负的化简成本,此时列
可以进入基。
上述方法的关键在于我们能够高效求解 的最小值。在 Dantzig-Wolfe 分解法(Dantzig-Wolfe decomposition)中,该问题是一个较小的辅助线性规划问题,可以使用单纯形法来求解。而对于切割库存问题(cutting stock problem, CSP),该问题是一个特定的离散优化问题,可以利用专门的方法较高效地求解。当然,也存在问题没有特殊结构的情况,此时所描述的方法无法应用。
在刚刚讨论的延迟列生成方法中,退出基的列会被从内存中丢弃,不会享有任何特殊状态。然而,在该方法的一种变体中,算法保留过去生成的所有或部分列,并在受限的线性规划问题(restricted linear programming problem)中,仅使用这些保留的列进行计算。
我们将该算法描述为一系列主迭代(master iterations)。在每次主迭代的开始,我们拥有原始问题的一个基可行解以及一个相关的基矩阵。接下来寻找一个具有负 reduced cost 的变量,可能是通过在所有 上最小化
来实现;如果没有找到这样的变量,则算法终止。假设找到了某个
使得
,那么我们生成一个列的集合
,其中包含:所有基列,进入基的列
(entering column),以及可能的一些其他列。我们定义受限问题(restricted problem)为
当前原始问题的基可行解中的基变量位于受限问题所保留的列集合中,因此,我们拥有受限问题的一个基可行解,可用作其求解的起点。然后执行尽可能多的单纯形迭代,直到受限问题达到最优解。接着便可开始下一次主迭代。
刚刚描述的方法是修正单纯形法的一种特例,并结合了一些特殊规则来选择进入变量,使其优先考虑变量 。仅当这些变量的 reduced cost 均为非负时(即受限问题达到最优解时),算法才会检查剩余变量的化简成本。其动机在于,优先考虑那些对应列已被生成并存储在内存中的变量,或者更可能具有负化简成本的变量。
该方法存在几种变体,取决于每次迭代时如何选择集合 :
(a) 一个极端情况是, 仅包含当前基变量的索引,以及进入变量的索引;而退出基的变量立即从集合
中移除。由于受限问题包含
个变量和
个约束,因此其可行解集最多是一维的,可在单次单纯形迭代中求解,即一旦列
进入基,问题便可解决。
(b) 另一个极端情况是,令 为所有曾经成为基变量的索引集合;换句话说,没有变量被移除,每次进入的变量都加入到
中。如果主迭代次数较多,这种选择可能会导致问题,因为集合 II 会不断增长。
(c) 最后,还有一些中间选项,即保持 II 在一个适中的规模,方法是移除那些早期退出基,并且未重新进入的变量。
如果不存在退化,以上所有变体都保证会终止,因为它们都是修正单纯形法的特例。而如果存在退化性,可以通过改进单纯形法结合字典序平局规则来避免循环。
切割库存问题是延迟列生成的经典例子。
假设有一家纸张公司拥有宽度为 的大卷纸(假设
是正整数),但是客户的需求是小宽度的纸张;具体来说,需要生产宽度为
的小卷纸,其中
(每个
)。较小的卷纸通过以某种方式切割大卷纸得到,称为模式(pattern)。例如,一个宽度为
的大卷纸可以切割成三卷宽度为
和一卷宽度为
的小卷纸,且剩余部分为 4。
某一模式,比如第 个模式,可以通过一个列向量
来表示,其第
项
表示通过该模式生产出多少卷宽度为
的小卷纸。例如,前面描述的模式可以通过向量
来表示。为了让向量
表示的模式可行,其分量必须是非负整数,且还必须满足
设 为所有可行模式的数量,并考虑具有列
的
矩阵,其中
。注意,
可以是一个非常大的数。
公司的目标是最小化所使用的大卷纸数量,同时满足客户需求。设 为按照模式
切割的大卷纸数量。则问题可以表示为:
显然,每个
应为整数,因此这是一个整数规划问题。然而,线性规划问题(9.1)的最优解通常能为整数规划问题提供一个可行解(通过四舍五入或其他临时方法),这个解相当接近最优解,至少在需求
较大的情况下是如此。
线性规划问题(9.1)在计算上是一个困难的任务:即使 相对较小,可行模式的数量
也可能非常大,因此完全构建系数矩阵 A 是不现实的。但是使用修正单纯形法,并仅在需要时生成 A 的列,可以高效解决该问题,不必提前构建完整的矩阵。
对于这个问题,很容易找到一个初始的基本可行解。对于 ,可以令第
个模式仅由一卷宽度为
的纸组成,其他宽度的纸卷数均为零。这样,矩阵
的前
列就构成了一个基本可行解。(相应的基矩阵是单位矩阵)
假设现在有了一个基矩阵 和一个相关的基本可行解,并且我们希望执行修正单纯形法的下一次迭代。因为每个变量
的成本系数都为 1,所以向量
的每个分量都等于
。单纯形乘子
。接下来,不需要计算与每一列(模式)
相关的 reduced cost
,我们直接计算
。这与最大化
是等价的。如果最大值小于等于
,则所有的减少成本都是非负的,我们得到了一个最优解。如果最大值大于 1,则对应的列
具有负的减少成本并进入基。
接下来,我们的任务是找到一个模式 ,使得
最大。该问题可以建模为
这个问题被称为整数背包问题(integer knapsack problem)。设
为第
项的价值,
为第
项的重量;我们的目标是填充背包,并使得总重量不超过
。求解背包问题有一定的计算量,但对于切割库存问题中出现的数值范围,可以高效地完成。
解决背包问题的一个可能算法是基于动态规划的,步骤如下。设 为问题(9.2)中
时的最优目标值,并且使用约定当
时
。令
,如果
,则显然
。对于
,我们有以下递归关系:
要理解这个递归,需要注意到一个重量最多为
的背包是通过首先填充重量为
的背包,然后再添加一个重量为
的物品。如果已知
,我们只需选择
,使得总值
最大。使用递归公式,可以计算出
时的
。此外,如果记录下最大化的索引
,则可以通过回溯获得最优解。此过程的计算复杂度为
,因为递归需要对
个不同的
值进行计算,每次需要进行
次算术运算。
关于如何系统学习用户分析,大家都已经做了很全面的回答了,那么拿到的数据,究竟该怎么下手?这里就给大家提供几个实操方法,帮助你快速制作一张平台用户分析的数据看板,
九数云BI-在线自动化取数、整合、计算、分析、多维报表制作工具复购分析是衡量用户忠诚度和消费习惯的重要指标,通过分析用户下单趋势和复购率,可以帮助平台了解用户对产品和服务的满意度。
九数云-免费的在线数据分析工具,让分析更有趣主要分析视角:
RFM分析(Recency 最近一次消费、Frequency 消费频次、Monetary 消费金额)是一种经典的用户分层模型,通过对客户类型和行为的细分,帮助平台更好地制定运营策略。
主要分析视角:
用户留存率直接反映平台对用户的吸引力和粘性,是衡量用户忠诚度的核心指标。
主要分析视角:
1. 留存率:留存率是指在某一时间点注册或下单的用户中,在之后的某个时间段内依然活跃的用户比例。
留存率 = 某时间段内仍活跃用户数 / 初始时间段用户数 × 100%
2. 流失率:定义为最后一次下单距离当前超过120天的用户比例,通过计算流失率,明确平台的核心痛点。
3. 用户留存周期分析:如次日留存、3日留存、7日留存等,细化留存数据并制定差异化运营策略。
用户下单习惯分析主要通过用户下单间隔时间和金额变化趋势,洞察消费路径,为优化平台服务和用户体验提供方向。
主要分析视角:
以上看板替换数据即可快速复用,希望对你有帮助
九数云-免费的在线数据分析工具,让分析更有趣","description":"用户分析有哪些经典的模型和方法,如何系统地学习用户分析? 数据民工小jo的回答\\n\\n\\n关于如何系统学习用户分析,大家都已经做了很全面的回答了,那么拿到的数据,究竟该怎么下手?这里就给大家提供几个实操方法,帮助你快速制作一张平台用户分析的数据看板,\\n\\n九数云BI-在线自动化取数、整合、计算、分析、多维报表制作工具\\n九数云-免费的在线数据分析工具,让分析更有趣\\n维度1:复购分析\\n\\n复购分析是衡量用户忠诚度和消费习惯的重要指标,通过分析用户下单趋势和复购率,可以帮助平台了解用户对产品和服务的满意度。\\n\\n九数云-免费的在线数据分析工具,让分析更有趣\\n\\n主要分析视角:\\n\\n下单用户趋势:追踪平台每…","guid":"https://www.zhihu.com/question/27347443/answer/94262138091","author":"数据民工小jo","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-06T09:32:36.432Z","media":[{"url":"https://picx.zhimg.com/v2-cc7c561098b41dfe6959f9e2fb3d5701.jpg","type":"photo","width":2880,"height":1800,"blurhash":"LOSYy]%LR.-;.AjZWBj]n%ogkDad"},{"url":"https://pic1.zhimg.com/v2-05e25fe036ff7a6ee8961b6d070eb3c8.jpg","type":"photo","width":2537,"height":468,"blurhash":"LZSPCC%3kCxu?wkCaekCtTjubIkC"},{"url":"https://picx.zhimg.com/v2-fb9b94052141344317522ae9f3daac7a.jpg","type":"photo","width":2539,"height":494,"blurhash":"L9R{+0-;t7~q_3a$WBax~Tt6IURj"},{"url":"https://picx.zhimg.com/v2-861e37be3b85fc60affe2326311b827c.jpg","type":"photo","width":2551,"height":845,"blurhash":"LSSiKjxvp0.9.Aofemi^pJadjFWC"},{"url":"https://picx.zhimg.com/v2-03a45a9eee3a15d6f1f9986958ef5bae.jpg","type":"photo","width":2539,"height":1400,"blurhash":"LPSPFI%1X9%g.TaJWBj]s.oLaxad"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?-Jack Hsueh的回答:在$$$里面$$$写$\\\\latex$公式","url":"https://www.zhihu.com/question/10076895648/answer/94181084802","content":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?在$$$里面$$$写$\\\\latex$公式
","description":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。? Jack Hsueh的回答\\n\\n\\n在$$$里面$$$写$\\\\latex$公式","guid":"https://www.zhihu.com/question/10076895648/answer/94181084802","author":"Jack Hsueh","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-06T08:00:25.377Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在没有root权限的情况下使用R语言","url":"https://zhuanlan.zhihu.com/p/19844880982","content":"写在前面大部分共享服务器没有root权限(当然也有例外: 有root权限的共享服务器,报我名字立减200¥ ),装不了Rstudio-server。而R终端虽然可以完成一些基本任务,但对于数据分析、画图等高级操作则显得不够便利。因此,我们需要一种能够轻松应对这些任务的IDE。幸运的是,Jupyterlab为我们提供了一个交互式计算环境,让我们可以直接输入代码并立即查看结果。这个功能强大的工具已经成为了数据分析领域的瑰宝,被广泛应用于各种数…","description":"写在前面大部分共享服务器没有root权限(当然也有例外: 有root权限的共享服务器,报我名字立减200¥ ),装不了Rstudio-server。而R终端虽然可以完成一些基本任务,但对于数据分析、画图等高级操作则显得不够便利。因此,我们需要一种能够轻松应对这些任务的IDE。幸运的是,Jupyterlab为我们提供了一个交互式计算环境,让我们可以直接输入代码并立即查看结果。这个功能强大的工具已经成为了数据分析领域的瑰宝,被广泛应用于各种数…","guid":"https://zhuanlan.zhihu.com/p/19844880982","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-06T06:53:55.061Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何使用R语言轻松合并多个.txt文件?","url":"https://zhuanlan.zhihu.com/p/21606757269","content":"在数据分析的过程中,我们常常需要处理大量的文本文件。这些文件可能来源于不同的目录,内容也有不同格式,如何高效地将它们合并成一个文件进行分析,成为了不少数据科学工作者的痛点。今天,将向大家展示如何使用R语言,以一种简单而高效的方式,将多个.txt文件合并成一个完整的文件。 为什么选择R语言?R语言作为数据科学和统计分析的强大工具,其简洁的语法和丰富的包生态,使得很多数据处理任务变得简单而高效。而且,R语言…","description":"在数据分析的过程中,我们常常需要处理大量的文本文件。这些文件可能来源于不同的目录,内容也有不同格式,如何高效地将它们合并成一个文件进行分析,成为了不少数据科学工作者的痛点。今天,将向大家展示如何使用R语言,以一种简单而高效的方式,将多个.txt文件合并成一个完整的文件。 为什么选择R语言?R语言作为数据科学和统计分析的强大工具,其简洁的语法和丰富的包生态,使得很多数据处理任务变得简单而高效。而且,R语言…","guid":"https://zhuanlan.zhihu.com/p/21606757269","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-06T03:08:31.448Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"探针注释文件中没有基因名字怎么办?-被炸熟的虾的回答:新写章节写的不好: bulk RNA-array 芯片的探针注释指的是提取探针与基因之间的对应关系,这是我们获取...","url":"https://www.zhihu.com/question/610598283/answer/93917080792","content":"探针注释文件中没有基因名字怎么办?新写章节写的不好:
bulk RNA-array芯片的探针注释指的是提取探针与基因之间的对应关系,这是我们获取表达矩阵的基础。金标准当然是去芯片厂商的官网下载,不用想也知道很麻烦。这里记录几种常见的注释方法:bulk RNA-array | 获取芯片探针注释的几种方法芯片的探针注释指的是提取探针与基因之间的对应关系,这是我们获取表达矩阵的基础。金标准当然是去芯片厂商的官网下载,不用想也知道很麻烦。这里记录几种常见的注释方法:
GEOquery
包下载GPL注释表;下面我们以之前帖子里使用的数据集GSE25055为例:
Bioconductor官网中有各种GPL对应的R包,比如下面的这些芯片:
GPL201 hgfocus [HG-Focus] Affymetrix Human HG-Focus Target Array\\nGPL96 hgu133a [HG-U133A] Affymetrix Human Genome U133A Array\\nGPL571 hgu133a2 [HG-U133A_2] Affymetrix Human Genome U133A 2.0 Array\\nGPL97 hgu133b [HG-U133B] Affymetrix Human Genome U133B Array\\nGPL570 hgu133plus2 [HG-U133_Plus_2] Affymetrix Human Genome U133 Plus 2.0 Array\\nGPL13667 hgu219 [HG-U219] Affymetrix Human Genome U219 Array\\nGPL8300 hgu95av2 [HG_U95Av2] Affymetrix Human Genome U95 Version 2 Array\\nGPL91 hgu95av2 [HG_U95A] Affymetrix Human Genome U95A Array\\nGPL92 hgu95b [HG_U95B] Affymetrix Human Genome U95B Array\\nGPL93 hgu95c [HG_U95C] Affymetrix Human Genome U95C Array\\nGPL94 hgu95d [HG_U95D] Affymetrix Human Genome U95D Array\\nGPL95 hgu95e [HG_U95E] Affymetrix Human Genome U95E Array\\nGPL887 hgug4110b Agilent-012097 Human 1A Microarray (V2) G4110B (Feature Number version)\\nGPL886 hgug4111a Agilent-011871 Human 1B Microarray G4111A (Feature Number version)\\nGPL1708 hgug4112a Agilent-012391 Whole Human Genome Oligo Microarray G4112A (Feature Number version)\\nGPL13497 HsAgilentDesign026652 Agilent-026652 Whole Human Genome Microarray 4x44K v2 (Probe Name version)\\nGPL6244 hugene10sttranscriptcluster [HuGene-1_0-st] Affymetrix Human Gene 1.0 ST Array [transcript (gene) version]\\nGPL11532 hugene11sttranscriptcluster [HuGene-1_1-st] Affymetrix Human Gene 1.1 ST Array [transcript (gene) version]\\nGPL6097 illuminaHumanv1 Illumina human-6 v1.0 expression beadchip\\nGPL6102 illuminaHumanv2 Illumina human-6 v2.0 expression beadchip\\nGPL6947 illuminaHumanv3 Illumina HumanHT-12 V3.0 expression beadchip\\nGPL10558 illuminaHumanv4 Illumina HumanHT-12 V4.0 expression beadchip\\nGPL6885 illuminaMousev2 Illumina MouseRef-8 v2.0 expression beadchip\\nGPL81 mgu74av2 [MG_U74Av2] Affymetrix Murine Genome U74A Version 2 Array\\nGPL82 mgu74bv2 [MG_U74Bv2] Affymetrix Murine Genome U74B Version 2 Array\\nGPL83 mgu74cv2 [MG_U74Cv2] Affymetrix Murine Genome U74 Version 2 Array\\nGPL339 moe430a [MOE430A] Affymetrix Mouse Expression 430A Array\\nGPL6246 mogene10sttranscriptcluster [MoGene-1_0-st] Affymetrix Mouse Gene 1.0 ST Array [transcript (gene) version]\\nGPL340 mouse4302 [MOE430B] Affymetrix Mouse Expression 430B Array\\nGPL1261 mouse430a2 [Mouse430_2] Affymetrix Mouse Genome 430 2.0 Array\\nGPL8321 mouse430a2 [Mouse430A_2] Affymetrix Mouse Genome 430A 2.0 Array
示例数据集采用的检测平台为GPL96,因此安装hgu133a.db
:
#BiocManager::install(\\"hgu133a.db\\")\\nlibrary(hgu133a.db)\\nids <- toTable(hgu133aSYMBOL)\\nhead(ids)\\n# probe_id symbol\\n#1 1007_s_at DDR1\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at UBA7
但是一个R包通常就有几十M,那么多GPL平台一个个下载确实不是很方便,更致命的是有些平台没有对应R包!
GEOquery
包下载GPL注释表使用GEOquery
包下载数据集大家应该很熟悉了:
library(GEOquery)\\ngset <- getGEO(\\"GSE25055\\",\\n destdir = \\".\\",\\n getGPL = F)#是否下载GPL(平台)信息\\nexprset <- exprs(gset[[1]])\\nexprset[1:4,1:4]\\n# GSM615096 GSM615097 GSM615098 GSM615099\\n#1007_s_at 12.359267 12.613243 11.551397 11.828700\\n#1053_at 8.021741 7.842947 8.776267 9.523877\\n#117_at 8.294244 5.474758 8.197121 7.907263\\n#121_at 10.840949 11.715159 10.715077 10.750475\\ngset[[1]]@annotation\\n#[1] \\"GPL96\\"
如果我们设置参数getGPL = T
:
gset2 <- getGEO(\\"GSE25055\\",\\n destdir = \\".\\",\\n getGPL = T)#是否下载GPL(平台)信息\\n\\ngset\\n#$GSE25055_series_matrix.txt.gz\\n#ExpressionSet (storageMode: lockedEnvironment)\\n#assayData: 22283 features, 310 samples \\n# element names: exprs \\n#protocolData: none\\n#phenoData\\n# sampleNames: GSM615096 GSM615097 ... GSM615405 (310 total)\\n# varLabels: title geo_accession ... tissue:ch1 (80 total)\\n# varMetadata: labelDescription\\n#featureData: none\\n#experimentData: use \'experimentData(object)\'\\n# pubMedIds: 21558518\\n#36293478 \\n#Annotation: GPL96 \\n\\ngset2\\n#$GSE25055_series_matrix.txt.gz\\n#ExpressionSet (storageMode: lockedEnvironment)\\n#assayData: 22283 features, 310 samples \\n# element names: exprs \\n#protocolData: none\\n#phenoData\\n# sampleNames: GSM615096 GSM615097 ... GSM615405 (310 total)\\n# varLabels: title geo_accession ... tissue:ch1 (80 total)\\n# varMetadata: labelDescription\\n#featureData\\n# featureNames: 1007_s_at 1053_at ... AFFX-TrpnX-M_at (22283 total)\\n# fvarLabels: ID GB_ACC ... Gene Ontology Molecular Function (16 total)\\n# fvarMetadata: Column Description labelDescription\\n#experimentData: use \'experimentData(object)\'\\n# pubMedIds: 21558518\\n#36293478 \\n#Annotation: GPL96
可以看到在生成的gset2对象中就会包含一个注释信息featureData
#pData(gset2[[1]])\\nfeatureData(gset2[[1]])\\nids <- featureData(gset2[[1]])@data\\ncolnames(Table(GPL96))\\n# [1] \\"ID\\" \\"GB_ACC\\" \\n# [3] \\"SPOT_ID\\" \\"Species Scientific Name\\" \\n# [5] \\"Annotation Date\\" \\"Sequence Type\\" \\n# [7] \\"Sequence Source\\" \\"Target Description\\" \\n# [9] \\"Representative Public ID\\" \\"Gene Title\\" \\n#[11] \\"Gene Symbol\\" \\"ENTREZ_GENE_ID\\" \\n#[13] \\"RefSeq Transcript ID\\" \\"Gene Ontology Biological Process\\"\\n#[15] \\"Gene Ontology Cellular Component\\" \\"Gene Ontology Molecular Function\\"\\nhead(ids[,c(\\"ID\\",\\"Gene Symbol\\")])\\n# ID symbol\\n#1 1007_s_at DDR1 /// MIR4640\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at MIR5193 /// UBA7
其实getGEO
函数默认会下载其注释探针信息,但注释文件通常比较大,所以一般建议把注释关了,采用其他步骤进行手动注释。
此外,我们也可以直接下载GPL平台信息:
GPL96 <- getGEO(\\"GPL96\\",destdir =\\".\\")\\ncolnames(Table(GPL96))\\n# [1] \\"ID\\" \\"GB_ACC\\" \\n# [3] \\"SPOT_ID\\" \\"Species Scientific Name\\" \\n# [5] \\"Annotation Date\\" \\"Sequence Type\\" \\n# [7] \\"Sequence Source\\" \\"Target Description\\" \\n# [9] \\"Representative Public ID\\" \\"Gene Title\\" \\n#[11] \\"Gene Symbol\\" \\"ENTREZ_GENE_ID\\" \\n#[13] \\"RefSeq Transcript ID\\" \\"Gene Ontology Biological Process\\"\\n#[15] \\"Gene Ontology Cellular Component\\" \\"Gene Ontology Molecular Function\\"\\nids <- Table(GPL96)\\nhead(ids[,c(\\"ID\\",\\"Gene Symbol\\")])\\n# ID symbol\\n#1 1007_s_at DDR1 /// MIR4640\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at MIR5193 /// UBA7
从GEO数据库的GPL表格文件提取注释信息是个人最习惯的用法。首先点击Platform[GPL96]跳转到GPL界面,下拉下载:
GPL96 <- read.table(\\"D:/data/GEO/platform/GPL96-57554.txt\\",\\n sep = \'\\\\t\',quote = \\"\\",fill = T,comment.char = \\"#\\",\\n header = T,stringsAsFactors = F)\\nids <- GPL96[,c(\\"ID\\",\\"Gene.Symbol\\")]\\ncolnames(ids) <- c(\\"ID\\",\\"symbol\\")\\nhead(ids)\\n# ID symbol\\n#1 1007_s_at DDR1 /// MIR4640\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at MIR5193 /// UBA7
个人喜欢这种方式的一个主要原因是方便反复使用。GPL表格文件还包含了许多其他注释信息,比如基因类型、ENTREZ ID:
colnames(GPL96)\\n# [1] \\"ID\\" \\"GB_ACC\\" \\n# [3] \\"SPOT_ID\\" \\"Species.Scientific.Name\\" \\n# [5] \\"Annotation.Date\\" \\"Sequence.Type\\" \\n# [7] \\"Sequence.Source\\" \\"Target.Description\\" \\n# [9] \\"Representative.Public.ID\\" \\"Gene.Title\\" \\n#[11] \\"Gene.Symbol\\" \\"ENTREZ_GENE_ID\\" \\n#[13] \\"RefSeq.Transcript.ID\\" \\"Gene.Ontology.Biological.Process\\"\\n#[15] \\"Gene.Ontology.Cellular.Component\\" \\"Gene.Ontology.Molecular.Function\\"
当然,具体信息因GPL而异,不同GPL表格文件提供的信息各不相同。有的时候GPL表格文件也不提供基因注释信息,这时就得想别的办法了。
soft文件
也有很多教程会推荐使用soft文件(SOFT formatted family file)。
soft文件可以同时包含Platform(GPL)、Sample(GSM)和Series(GSE)的数据表和描述信息。
library(GEOquery)\\nSoft <- getGEO(filename = \\"./GSE25055_family.soft.gz\\")\\nids <- Soft@gpls$GPL96@dataTable@table\\ncolnames(ids)\\n# [1] \\"ID\\" \\"GB_ACC\\" \\n# [3] \\"SPOT_ID\\" \\"Species.Scientific.Name\\" \\n# [5] \\"Annotation.Date\\" \\"Sequence.Type\\" \\n# [7] \\"Sequence.Source\\" \\"Target.Description\\" \\n# [9] \\"Representative.Public.ID\\" \\"Gene.Title\\" \\n#[11] \\"Gene.Symbol\\" \\"ENTREZ_GENE_ID\\" \\n#[13] \\"RefSeq.Transcript.ID\\" \\"Gene.Ontology.Biological.Process\\"\\n#[15] \\"Gene.Ontology.Cellular.Component\\" \\"Gene.Ontology.Molecular.Function\\"\\nhead(ids[,c(\\"ID\\",\\"Gene Symbol\\")])\\n# ID symbol\\n#1 1007_s_at DDR1 /// MIR4640\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at MIR5193 /// UBA7
可以看到和GPL表格文件信息一致。个人不喜欢的原因有两个:
Anno <- data.table::fread(\\"./GSE25055_family.soft.gz\\",\\n skip = \\"ID\\",#从包含ID的行开始读取\\n header = T)\\nAnno[1:5,1:8]\\nhead(anno[,c(\\"ID\\",\\"Gene Symbol\\")])\\n# ID symbol\\n#1 1007_s_at DDR1 /// MIR4640\\n#2 1053_at RFC2\\n#3 117_at HSPA6\\n#4 121_at PAX8\\n#5 1255_g_at GUCA1A\\n#6 1294_at MIR5193 /// UBA7
用的最多,也是教程最好找的可能是生信技能树曾老师写的注释工具,这些年来也经历了从idmap1
到idmap2
、idmap3
,再到AnnoProbe
的多次迭代:
#library(devtools)\\n#install_github(\\"jmzeng1314/AnnoProbe\\")\\nlibrary(AnnoProbe)\\nids <- AnnoProbe::idmap(\'GPL96\')\\nhead(ids)\\n# probe_id symbol\\n#90969 1053_at RFC2\\n#90970 117_at HSPA6\\n#90971 121_at PAX8\\n#90972 1255_g_at GUCA1A\\n#90973 1316_at THRA\\n#90974 1320_at PTPN21
配合小洁老师的一体化microarray分析R包tinyarray
:
if(!require(AnnoProbe))install.packages(\\"AnnoProbe\\")\\nif(!require(tinyarray))install.packages(\\"tinyarray\\")\\n\\nlibrary(tinyarray)\\nfind_anno(\\"GPL96\\")\\n#`library(hgu133a.db);ids <- toTable(hgu133aSYMBOL)` and `ids <- AnnoProbe::idmap(\'GPL96\')` are both avaliable\\n#if you get error by idmap, please try different `type` parameters\\nexprSet <- geo_download(\\"GSE25055\\",\\n by_annopbrobe = TRUE,\\n simpd = TRUE,\\n colon_remove = FALSE,\\n destdir = getwd())\\nstr(exprSet,1)\\n#List of 3\\n# $ exp: num [1:22283, 1:310] 12.36 8.02 8.29 10.84 7.87 ...\\n# ..- attr(*, \\"dimnames\\")=List of 2\\n# $ pd :\'data.frame\': 310 obs. of 50 variables:\\n# $ gpl: chr \\"GPL96\\"\\nexprSet$exp[1:4,1:4]\\n# GSM615096 GSM615097 GSM615098 GSM615099\\n#1007_s_at 12.359267 12.613243 11.551397 11.828700\\n#1053_at 8.021741 7.842947 8.776267 9.523877\\n#117_at 8.294244 5.474758 8.197121 7.907263\\n#121_at 10.840949 11.715159 10.715077 10.750475\\nexprSet$pd[1:4,1:4]\\n title source_name_ch1 characteristics_ch1 sample id:ch1\\nGSM615096 1002 breast cancer, sample ISPY-1002 sample id: 1002 1002\\nGSM615097 1005 breast cancer, sample ISPY-1005 sample id: 1005 1005\\nGSM615098 1009 breast cancer, sample ISPY-1009 sample id: 1009 1009\\nGSM615099 1011 breast cancer, sample ISPY-1011 sample id: 1011 1011\\nexprSet$gpl\\n#[1] \\"GPL96\\"
提取ID对应关系并作差异分析:
ids <- AnnoProbe::idmap(exprSet$gpl)\\nDEG <- get_deg_all(exp = exprSet$exp,\\n group_list = factor(exprSet$pd$`dlda30_prediction:ch1`),\\n ids,\\n logFC_cutoff = 1)\\nstr(DEG)
具体用法请参照:tinyarray
张敬信老师
(虽然经常和他吵架 但那是语言倾向的问题 人家技术好 课也还可以还是要承认的)
","description":"想要系统学习R语言,请问哪个老师讲的比较好,零基础,应该看谁的课? 简简单单的回答\\n\\n\\n张敬信老师\\n\\n(虽然经常和他吵架 但那是语言倾向的问题 人家技术好 课也还可以还是要承认的)","guid":"https://www.zhihu.com/question/884111457/answer/92927203406","author":"简简单单","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-04T17:12:47.486Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"机器学习用python还是R,哪个更好?-北方的郎的回答:python,又快又好。R除了时序可能资源比python多。其他的,不论运行速度、易用性、功能性、还是扩展包的多...","url":"https://www.zhihu.com/question/612094457/answer/92386636308","content":"机器学习用python还是R,哪个更好?python,又快又好。R除了时序可能资源比python多。其他的,不论运行速度、易用性、功能性、还是扩展包的多少都不如python。
我玩机器学习的时候前后脚学了R和Python,Python玩的很舒服,R实在是玩不下去。别的不说,R的语法感觉和一般的编程语言就是两个样。后来除了搞时序,我几乎从来不用R。虽然说没到搞不定的地步,但是也没必要没苦硬吃。
","description":"机器学习用python还是R,哪个更好? 北方的郎的回答\\n\\n\\npython,又快又好。R除了时序可能资源比python多。其他的,不论运行速度、易用性、功能性、还是扩展包的多少都不如python。\\n\\n我玩机器学习的时候前后脚学了R和Python,Python玩的很舒服,R实在是玩不下去。别的不说,R的语法感觉和一般的编程语言就是两个样。后来除了搞时序,我几乎从来不用R。虽然说没到搞不定的地步,但是也没必要没苦硬吃。","guid":"https://www.zhihu.com/question/612094457/answer/92386636308","author":"北方的郎","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-04T01:51:28.096Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何使用R语言绘制下列类似的图?-医学统计数据分析的回答:动态条形图如何在Python或R中制作那种动态的条形图,也就是随着时间的推移,条形图的各个条形会动态...","url":"https://www.zhihu.com/question/448841111/answer/92315551615","content":"如何使用R语言绘制下列类似的图?动态条形图
如何在Python或R中制作那种动态的条形图,也就是随着时间的推移,条形图的各个条形会动态变化的那种。比如说,像那些展示不同国家GDP排名随时间变化的视频里常见的动态条形图?
首先,对于Python,有一个库叫做bar_chart_race,是专门用来做这种动态条形图的。不过需要先pip安装这个库。然后可能需要pandas来处理数据,确保数据格式正确。另外,需要matplotlib来调整一些图形设置,或者保存为视频的话需要ffmpeg的支持。所以代码的大致步骤应该是:安装必要的库,准备数据(数据可能需要是宽格式,每一列代表一个类别,每一行是时间点),然后调用bar_chart_race的函数生成动态图。不过需要注意数据是否需要排序,或者调整颜色等参数。
对于R语言,需要的包有gganimate,结合ggplot2来制作动画。此外,还需要gifski或者av来处理输出的动画文件。数据需要整理成长格式,每个时间点对应不同的观测值。然后使用ggplot创建条形图,再通过gganimate的transition_states或者transition_time函数来生成动画效果。可能需要设置视图跟随,保持坐标轴固定,这样在动画过程中条形的变化会更清晰。
例如我们已经已经有了一些时间序列的数据,每个时间点各个类别的值。如何将数据整理成适合的格式,比如Python中的宽格式或R中的长格式。可能还需要安装必要的依赖库,比如在Python中安装bar_chart_race的时候可能会遇到需要安装ffmpeg的问题,这时候需要安装ffmpeg并添加到系统路径中。另外,对动态条形图的细节有要求,比如颜色、标签、标题、速度控制等。在Python中,可以设置n_bars来限制显示的条形数量,设置sort=\'desc\'来让条形按降序排列,调整steps_per_period来控制动画速度。在R中,可以使用view_follow来保持y轴的固定,使用ease_aes来控制动画的缓动效果。
我们先简单演示一下R语言中的操作:
#环境整理
rm(list=ls()) #移除所有变量数据
install.packages(\\"\\") #安装包
library() #加载包
#安装并加载包
install.packages(c(\\"ggplot2\\", \\"gganimate\\", \\"dplyr\\", \\"gifski\\"))
library(ggplot2)
library(gganimate)
library(dplyr)
# 1. 准备数据(长格式:time, name, value)
data <- data.frame(
time = rep(2020:2023, each = 3),
name = rep(c(\\"A\\", \\"B\\", \\"C\\"), 4),
value = c(100, 90, 80, 120, 110, 100, 150, 130, 120, 180, 160, 140)
)
# 2. 创建动画
anim <- data %>%
ggplot(aes(x = value, y = reorder(name, value), fill = name)) +
geom_col(width = 0.8) +
geom_text(aes(label = value), hjust = -0.1) +
labs(title = \\"Year: {frame_time}\\", x = \\"Value\\", y = \\"Category\\") +
theme_minimal() +
transition_time(time) +
view_follow(fixed_y = TRUE) + # 固定Y轴范围
ease_aes(\\"cubic-in-out\\")
# 3. 渲染动画
animate(anim,
nframes = 100, # 总帧数
fps = 10, # 帧率
width = 800,
height = 600,
renderer = gifski_renderer(\\"C:/Users/L/Desktop/race.gif\\")) # 保存为GIF
或者使用我们自定义的数据,比如\\"天枢\\",\\"天璇\\",\\"天玑\\",\\"天权\\",\\"玉衡\\",\\"开阳\\",\\"瑶光\\"不同时间的变化。
# 1. 准备数据(长格式:time, name, value)
data <- data.frame(
time = rep(2016:2025, each = 7),
name = rep(c(\\"天枢\\",\\"天璇\\",\\"天玑\\",\\"天权\\",\\"玉衡\\",\\"开阳\\",\\"瑶光\\"), 10),
value = c(22,94,89,4,60,96,88,
17,56,93,50,20,13,94,
82,17,13,46,23,55,6,
53,98,72,53,99,10,67,
33,58,50,89,80,69,85,
27,66,10,27,71,37,26,
95,10,66,60,66,12,65,
37,98,57,21,97,61,85,
22,17,15,1,84,8,39,
82,93,59,61,6,36,57)
)
# 2. 创建动画
anim <- data %>%
ggplot(aes(x = value, y = reorder(name, value), fill = name)) +
geom_col(width = 0.8) +
geom_text(aes(label = value), hjust = -0.1) +
labs(title = \\"Year: {frame_time}\\", x = \\"Value\\", y = \\"Category\\") +
theme_minimal() +
transition_time(time) +
view_follow(fixed_y = TRUE) + # 固定Y轴范围
ease_aes(\\"cubic-in-out\\")
# 3. 渲染动画
animate(anim,
nframes = 100, # 总帧数
fps = 10, # 帧率
width = 800,
height = 600,
renderer = gifski_renderer(\\"C:/Users/L/Desktop/race2.gif\\")) # 保存为GIF
那么在Python中的操作如下:
#安装调用加载库
import pandas as pd
import bar_chart_race as bcr
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 设置matplotlib支持中文显示
plt.rcParams[\'font.sans-serif\'] = [\'SimHei\'] # 指定默认字体为黑体
plt.rcParams[\'axes.unicode_minus\'] = False # 解决负号\'-\'显示为方块的问题
# 1.生成示例数据
data = {
\'天枢\': [22,94,89,4,60,96,88],
\'天璇\': [17,56,93,50,20,13,94],
\'天玑\': [82,17,13,46,23,55,6],
\'天权\': [53,98,72,53,99,10,67],
\'玉衡\': [33,58,50,89,80,69,85],
\'开阳\': [27,66,10,27,71,37,26],
\'瑶光\': [95,10,66,60,66,12,65]
}
df = pd.DataFrame(data, index=[2018, 2019, 2020, 2021, 2022, 2023, 2024])
# 2. 生成动态条形图
bcr.bar_chart_race(
df=df,
filename=r\'C:\\\\Users\\\\L\\\\Desktop\\\\race.mp4\', # 保存为MP4文件
title=\'动态条形图示例\',
n_bars=5, # 显示前5个分类
sort=\'desc\', # 降序排列
steps_per_period=30, # 每时间段动画帧数
period_length=1000 # 每时间段显示时长(毫秒)
)
#或者可以将生成的视频文件转换为GIF格式
#ffmpeg -i race.mp4 -vf \\"fps=10,scale=640:-1:flags=lanczos\\" -loop 0 race.gif
# 3.直接生成交互式 HTML(无需 FFmpeg)
bcr.bar_chart_race(
df=df,
filename=None, # 不保存文件
n_bars=3,
title=\'动态条形图示例\',
steps_per_period=10,
period_length=2000, # 每帧停留时间(毫秒)
writer=\'html\' # 输出为 HTML 动画
)
# 3.生成GIF版本的操作
# 初始化画布
fig, ax = plt.subplots(figsize=(8, 5))
ax.set_xlim(0, df.values.max() * 1.1)
# 动态更新函数
def update(year):
ax.clear()
row = df.loc[year].sort_values(ascending=False)
ax.barh(row.index, row.values, color=[\'#1f77b4\', \'#ff7f0e\', \'#2ca02c\'])
ax.set_title(f\'Year: {year}\')
ax.set_xlabel(\'Value\')
# 创建动画
ani = animation.FuncAnimation(
fig,
update,
frames=df.index, # 按时间顺序传递年份
interval=1000, # 每帧间隔(毫秒)
repeat=True
)
# 保存为 GIF(需安装 ImageMagick)
ani.save(r\'C:\\\\Users\\\\L\\\\Desktop\\\\animation.gif\', writer=\'imagemagick\')
# 直接显示动画
plt.show()
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
Python语言坚定拥护者。本栏目侧重使用Python语言,进行数据分析和可视化,涵盖:深度学习、统计、遥感,侧重地学分析和可视化。
主战场不在知乎,但是会定期整理成果发在知乎平台,频率定为一周/两周一次。
请相信Python的力量,创作实属不易,靠点创作维持生活,部分文章收费还请谅解,欢迎您的关注!
","description":"有没有地理信息可视化的绘图软件? 淼的Python研学的回答\\n\\n内容主题\\n\\nPython语言坚定拥护者。本栏目侧重使用Python语言,进行数据分析和可视化,涵盖:深度学习、统计、遥感,侧重地学分析和可视化。\\n\\n更新频率\\n\\n主战场不在知乎,但是会定期整理成果发在知乎平台,频率定为一周/两周一次。\\n\\n作品展示(部分)\\nLSTM降雨径流模型\\n模型完整实战|1.LSTM时间序列预测\\nMatplotlib制图参考资料\\nMatplotlib制图参考资料|2.色系—NCL色系\\n多子图复现顶刊配图\\nRemote Sensing顶刊配图复现 中国遥感数据绘图\\n全球热力散点图绘制\\nPython地理绘图进阶系列…","guid":"https://www.zhihu.com/question/33546625/answer/92184131116","author":"淼的Python研学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-03T14:32:21.685Z","media":[{"url":"https://picx.zhimg.com/v2-55988718215fc8c93c6adbb0ae6aae90.jpg","type":"photo","width":2104,"height":1652,"blurhash":"LERfkB$k%g~q~qtRM{WB?bR+D%t7"},{"url":"https://picx.zhimg.com/v2-60e83ea2a3fec18aa92c4ac36236869b.jpg","type":"photo","width":960,"height":898,"blurhash":"LJPi|^jfMy%4%NR*ogoN_MRjM}WD"},{"url":"https://pica.zhimg.com/v2-8fd6af3934a13ef8bb3362226f8b2872.jpg","type":"photo","width":2411,"height":1693,"blurhash":"LSP6t4#]RSxb%Q+va#OYtJpXyAxX"},{"url":"https://pica.zhimg.com/v2-f42b55627f092063083ad9c3eb06979b.jpg","type":"photo","width":2064,"height":1145,"blurhash":"LZKoM~bws:xt$~oft6j=~Vt6t6R-"},{"url":"https://pic1.zhimg.com/v2-02b00dde91ad445cbf8ff0c187bc3f17.jpg","type":"photo","width":1441,"height":875,"blurhash":"LWPZx?NFWA.8-;XmM_R-~X%MaOM{"},{"url":"https://pica.zhimg.com/v2-238860f2f8203add115640d64edf90d9.jpg","type":"photo","width":641,"height":636,"blurhash":"LYQ0XNRn?a%f_2t7R-WB_MxuIBV["},{"url":"https://pica.zhimg.com/v2-91f15d5374736ffa9836439773d2fd04.jpg","type":"photo","width":839,"height":684,"blurhash":"LWQ0pxSc-qoxx[ofayRj~E$,NFof"},{"url":"https://pica.zhimg.com/v2-f0568b8852a03d3f608a131c185ddde6.jpg","type":"photo","width":889,"height":535,"blurhash":"LpN1r;%b%2N3SioxIpkB~Cs?I;%J"},{"url":"https://picx.zhimg.com/v2-79aa846089cb2d9d51880270cc2efe95.jpg","type":"photo","width":797,"height":685,"blurhash":"LaPZ=bIu-:og-:afRmNH~U%KM|t6"},{"url":"https://pic1.zhimg.com/v2-707fc722fa5b21d39054c0c2cbb4229a.jpg","type":"photo","width":900,"height":704,"blurhash":"LdQ0K^_LsqsqxcxpNdoz%cIYVt%d"},{"url":"https://pica.zhimg.com/v2-9138b1ce7ee9674a4eb80530357b6a1b.jpg","type":"photo","width":877,"height":591,"blurhash":"LDSF*5-;o#~q?Ht7t8t7Int8WVWB"},{"url":"https://picx.zhimg.com/v2-88fea9911261a5c5ebda5d35142c330b.jpg","type":"photo","width":922,"height":717,"blurhash":"LbL5jp~T$,=~^~RqWUn+}^RTSvX2"},{"url":"https://pic1.zhimg.com/v2-6db09ef20be705fb662aafc711ff8cae.jpg","type":"photo","width":838,"height":716,"blurhash":"LfLE~5~U$,%4?WjeWEoI^lN2N?X4"},{"url":"https://picx.zhimg.com/v2-78c9a08226a3f51e8cff20ab5ea0593c.jpg","type":"photo","width":631,"height":660,"blurhash":"LYOzxb^$-tsZ-ls;OYob^nR-RMbF"},{"url":"https://picx.zhimg.com/v2-751cc249603fa06567352ef11a36e870.jpg","type":"photo","width":685,"height":592,"blurhash":"LROz#p?b~X?b9?og%2s;^,RjM{S1"},{"url":"https://pic1.zhimg.com/v2-faab539b41634c390a3f2ca303aa4166.jpg","type":"photo","width":2203,"height":1152,"blurhash":"LaRfgo%MkF%Q%dfRe?WCbFjuayf6"},{"url":"https://pic1.zhimg.com/v2-4935a4fdbb40204222b362234bafdd94.jpg","type":"photo","width":697,"height":642,"blurhash":"LGQJfp_3~p_3xuofocj[_2RjIVt7"},{"url":"https://pic1.zhimg.com/v2-1bbb8209a31f111f9b1036d43d1a2113.jpg","type":"photo","width":1133,"height":547,"blurhash":"LROzDcN6%q$-reo|?Wxt~l%bVckU"},{"url":"https://picx.zhimg.com/v2-2d247696d8513df258bde98ef51a7c97.jpg","type":"photo","width":1167,"height":1052,"blurhash":"LPQHnYwDT|*O-Xt1bJkkxKWFrtTH"},{"url":"https://pica.zhimg.com/v2-657f0228219bfd8f2a0956506151ec23.jpg","type":"photo","width":2069,"height":1651,"blurhash":"LMRW0dx]%K?b~pj@RkNGxtayV]t7"},{"url":"https://pic1.zhimg.com/v2-3bc73d74034a88a4074e488c305f3058.jpg","type":"photo","width":1414,"height":1475,"blurhash":"LbQ9Za?^M|rCpxvyROOsRox[kERP"},{"url":"https://picx.zhimg.com/v2-ca63cddd11274e56484cf3ac4c41b9d3.jpg","type":"photo","width":4126,"height":2455,"blurhash":"LBSY]j^+s;~q_3aeWBxuE0V@oftR"},{"url":"https://picx.zhimg.com/v2-d92778fed3fc7583b04ee383b3e6519d.jpg","type":"photo","width":1712,"height":884,"blurhash":"LORfh6x]oy%N~oWUWCt7E1NFj[WB"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 语言实战:1 分钟、无 GPU,调用 DeepSeek R1","url":"https://zhuanlan.zhihu.com/p/21114690079","content":"第一步:打开 Rstudio,搭建基础环境 咱们首先得打开熟悉的 Rstudio,输入: install.packages(\\"httr\\") install.packages(\\"jsonlite\\") 第二步:拿到API密钥 前往 https://cloud.siliconflow.cn/i/CPyYCrz0 注册 API,按提示操作获取授权。注册好后在「API 密钥」一栏新建密钥后点击复制。 [图片] 第三步:复制代码 复制以下代码至 Rstudio 控制台: library(httr) library(jsonlite) url <- \\"https://api.siliconflow.cn/v1/chat/completions\\" messagetmp <…","description":"第一步:打开 Rstudio,搭建基础环境 咱们首先得打开熟悉的 Rstudio,输入: install.packages(\\"httr\\") install.packages(\\"jsonlite\\") 第二步:拿到API密钥 前往 https://cloud.siliconflow.cn/i/CPyYCrz0 注册 API,按提示操作获取授权。注册好后在「API 密钥」一栏新建密钥后点击复制。 [图片] 第三步:复制代码 复制以下代码至 Rstudio 控制台: library(httr) library(jsonlite) url <- \\"https…","guid":"https://zhuanlan.zhihu.com/p/21114690079","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-03T04:56:50.146Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"机器学习用python还是R,哪个更好?-随机老化的回答:成年人都要。R里缺什么py库,很简单,打开rstidio,输入 newname=import(\\"modulename\\") 就能在r下面用了,...","url":"https://www.zhihu.com/question/612094457/answer/91682868868","content":"机器学习用python还是R,哪个更好?成年人都要。R里缺什么py库,很简单,打开rstidio,输入
newname=import(\\"modulename\\")
就能在r下面用了,也有代码提示——当然,没有pycharm强大。
","description":"机器学习用python还是R,哪个更好? 随机老化的回答\\n\\n\\n成年人都要。R里缺什么py库,很简单,打开rstidio,输入\\n\\nnewname=import(\\"modulename\\")\\n\\n就能在r下面用了,也有代码提示——当然,没有pycharm强大。","guid":"https://www.zhihu.com/question/612094457/answer/91682868868","author":"随机老化","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-02T23:27:03.212Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"学统计可以不学c语言 直接学r语言吗?-长尾巴的猫的回答:让你先学C语言的都不是统计学毕业的…… 直接上R就行了 毕竟做统计分析的你会先从内存指针开始入手吗?","url":"https://www.zhihu.com/question/661706033/answer/90988186715","content":"学统计可以不学c语言 直接学r语言吗?让你先学C语言的都不是统计学毕业的……
直接上R就行了
毕竟做统计分析的你会先从内存指针开始入手吗?
","description":"学统计可以不学c语言 直接学r语言吗? 长尾巴的猫的回答\\n\\n\\n让你先学C语言的都不是统计学毕业的……\\n\\n直接上R就行了\\n\\n毕竟做统计分析的你会先从内存指针开始入手吗?","guid":"https://www.zhihu.com/question/661706033/answer/90988186715","author":"长尾巴的猫","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-02-01T16:42:09.240Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"网络分析中如何比较不同组/不同时间段之间的节点强度","url":"https://zhuanlan.zhihu.com/p/20867404977","content":"在之前的文章中,我们团队已经向大家介绍了网络分析的基本做法: https://mp.weixin.qq.com/s/Fa0i4Asz2OiH7twMHiELew 但是网络分析的细节实在是太多了,一篇文章实在难以说完它的细节,因此之后我计划针对网络分析的一些细节再展开进行分享。 [图片] Vol.1 介绍那么今天我们来看一下网络分析中如何比较不同组/不同时间段之间的节点强度。起因是我在网络上偶尔会有人发问“这张图的指标是怎么计算的哇?” [图片] 我们可以看到在这张图中显示了…","description":"在之前的文章中,我们团队已经向大家介绍了网络分析的基本做法: https://mp.weixin.qq.com/s/Fa0i4Asz2OiH7twMHiELew 但是网络分析的细节实在是太多了,一篇文章实在难以说完它的细节,因此之后我计划针对网络分析的一些细节再展开进行分享。 [图片] Vol.1 介绍那么今天我们来看一下网络分析中如何比较不同组/不同时间段之间的节点强度。起因是我在网络上偶尔会有人发问“这张图的指标是怎么计算的哇?” [图片] 我们可以看到在这张图中显示了…","guid":"https://zhuanlan.zhihu.com/p/20867404977","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-31T13:19:15.482Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"潜在类别分析-实操应用","url":"https://zhuanlan.zhihu.com/p/20866504548","content":"上篇讲述了潜在类别分析(以下称为LCA)的概念及应用方法,这篇我们参考一篇文献说一下该方法的应用及实操。 [图片] 本文举的例子是来自于柳叶刀呼吸医学的文章,文章题目为:急性呼吸窘迫综合征儿科患者表型鉴定:一项潜在类别分析,该文的发文时间为2022年3月。 [图片] [图片] 首先一起来看一下文献的主要内容吧! [图片] 本文中,该研究主要使用了潜在类别分析确定了儿童急性呼吸窘迫综合征(ARDS)的两个表型,后续的临床治疗可根据不同的临床表型制定特…","description":"上篇讲述了潜在类别分析(以下称为LCA)的概念及应用方法,这篇我们参考一篇文献说一下该方法的应用及实操。 [图片] 本文举的例子是来自于柳叶刀呼吸医学的文章,文章题目为:急性呼吸窘迫综合征儿科患者表型鉴定:一项潜在类别分析,该文的发文时间为2022年3月。 [图片] [图片] 首先一起来看一下文献的主要内容吧! [图片] 本文中,该研究主要使用了潜在类别分析确定了儿童急性呼吸窘迫综合征(ARDS)的两个表型,后续的临床治疗可根据不同的临床表型制定特…","guid":"https://zhuanlan.zhihu.com/p/20866504548","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-31T13:05:45.744Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有调节的网络分析——另一种方法","url":"https://zhuanlan.zhihu.com/p/20859441434","content":"在之前的分享中,我们已经简单介绍了有调节的网络分析模型(moderated network models, MNMs),并通过modnets包在R中实现。在今天这期中,我们将通过R中的mgm包(Haslbeck & Waldorp, 2020),展现另一种实现MNMs的方法。根据大家的要求,我们以2022年在Applied Psychology: Health and Well-Being上发表的文章《Changes in the network structure of mental health after a multicomponent positive psychology intervention in ad…","description":"在之前的分享中,我们已经简单介绍了有调节的网络分析模型(moderated network models, MNMs),并通过modnets包在R中实现。在今天这期中,我们将通过R中的mgm包(Haslbeck & Waldorp, 2020),展现另一种实现MNMs的方法。根据大家的要求,我们以2022年在Applied Psychology: Health and Well-Being上发表的文章《Changes in the network structure of mental health after a multicomponent…","guid":"https://zhuanlan.zhihu.com/p/20859441434","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-31T11:49:32.155Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 语言接入大模型:ellmer 包快速上手","url":"https://zhuanlan.zhihu.com/p/20799256130","content":"ellmer 包是 Hadley 大神最新开发的,使得从 R 语言中使用大语言模型(LLM)变得简单。它支持多种 LLM 提供商(包括 DeepSeek),并实现了丰富的功能:结构化数据提取、异步流式输出、工具/函数调用等。1 准备工作从 r-universe 安装 ellmer 包开发版:install.packages(\\"ellmer\\", repos = \\"https://tidyverse.r-universe.dev\\") 注:CRAN 上的 0.1.0 版本尚未专门支持 DeepSeek。加载包: library(ellmer)使用不同大模型,需要先…","description":"ellmer 包是 Hadley 大神最新开发的,使得从 R 语言中使用大语言模型(LLM)变得简单。它支持多种 LLM 提供商(包括 DeepSeek),并实现了丰富的功能:结构化数据提取、异步流式输出、工具/函数调用等。1 准备工作从 r-universe 安装 ellmer 包开发版:install.packages(\\"ellmer\\", repos = \\"https://tidyverse.r-universe.dev\\") 注:CRAN 上的 0.1.0 版本尚未专门支持 DeepSeek。加载包: library(ellmer)使用不同大模型…","guid":"https://zhuanlan.zhihu.com/p/20799256130","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-30T19:00:36.674Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言 | 相对重要性分析 domir包","url":"https://zhuanlan.zhihu.com/p/691753110","content":"网址: Conceptual Introduction to Dominance Analysis (r-project.org) domir.pdf (r-project.org) 目的:relative importance 概念介绍目的:优势分析 dominance analysis (DA); 以多个自变量预测因变量。 independent variables (IVs)/predictors/features (自变量(IV)/预测因子/特征) cooperate to produce a payoff in the form of predicting the dependent variable (DV)/outcome/response (因变量(DV)/结果/反应) …","description":"网址: Conceptual Introduction to Dominance Analysis (r-project.org) domir.pdf (r-project.org) 目的:relative importance 概念介绍目的:优势分析 dominance analysis (DA); 以多个自变量预测因变量。 independent variables (IVs)/predictors/features (自变量(IV)/预测因子/特征) cooperate to produce a payoff in the form of…","guid":"https://zhuanlan.zhihu.com/p/691753110","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-30T13:13:32.982Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何向 r 语言中的数据结构添加新的元素或列?-小郑同学的回答:在R语言中,数据结构是存储和操作数据的基本方式。R提供了多种数据结构,每种结构都有其特定的用...","url":"https://www.zhihu.com/question/604850066/answer/89431799618","content":"如何向 r 语言中的数据结构添加新的元素或列?在R语言中,数据结构是存储和操作数据的基本方式。R提供了多种数据结构,每种结构都有其特定的用途和特点。以下是R语言中常见的数据结构:
1.向量(Vector)
向量是R中最基本的数据结构,用于存储一组有序的元素。向量中的所有元素必须是同一类型(如数值型、字符型或逻辑型)。
• 创建向量:
```
numeric_vector <- c(1, 2, 3, 4, 5) # 数值型向量
character_vector <- c(\\"apple\\", \\"banana\\", \\"cherry\\") # 字符型向量
logical_vector <- c(TRUE, FALSE, TRUE) # 逻辑型向量
```
• 访问元素:
```
numeric_vector[1] # 访问第一个元素
character_vector[c(1, 3)] # 访问第1个和第3个元素
```
2.矩阵(Matrix)
矩阵是一个二维的向量,用于存储具有行和列结构的数据。矩阵中的所有元素必须是同一类型。
• 创建矩阵:
```
matrix_data <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
```
• 访问元素:
```
matrix_data[1, 2] # 访问第1行第2列的元素
matrix_data[1, ] # 访问第1行的所有元素
```
3.数组(Array)
数组是矩阵的扩展,可以有多个维度。数组中的所有元素必须是同一类型。
• 创建数组:
```
array_data <- array(c(1, 2, 3, 4, 5, 6, 7, 8), dim = c(2, 2, 2))
```
• 访问元素:
```
array_data[1, 2, 1] # 访问特定维度的元素
```
4.因子(Factor)
因子是R中用于表示分类数据的一种特殊向量。因子的每个元素都是一个类别。
• 创建因子:
```
factor_data <- factor(c(\\"apple\\", \\"banana\\", \\"apple\\", \\"cherry\\"))
```
• 访问元素:
```
factor_data[1] # 访问第一个元素
```
5.列表(List)
列表是一种复合数据结构,可以包含不同类型的元素,如数值、字符、矩阵、数组等。
• 创建列表:
```
list_data <- list(a = 1, b = \\"text\\", c = matrix(1:4, nrow = 2))
```
• 访问元素:
```
list_data$a # 通过名字访问元素
list_data[[2]] # 通过位置访问元素
```
6.数据框(Data Frame)
数据框是一种用于存储表格数据的结构,类似于数据库中的表格。数据框的每一列可以是不同的类型。
• 创建数据框:
```
data_frame <- data.frame(
name = c(\\"Alice\\", \\"Bob\\", \\"Charlie\\"),
age = c(25, 30, 35),
gender = c(\\"F\\", \\"M\\", \\"M\\")
)
```
• 访问元素:
```
data_frame$name # 访问某一列
data_frame[1, ] # 访问第一行
data_frame[1, \\"age\\"] # 访问第一行的\\"age\\"列
```
7.时间序列(Time Series)
时间序列用于存储按时间顺序排列的数据,如股票价格、气象数据等。
• 创建时间序列:
```
ts_data <- ts(c(1, 2, 3, 4, 5), start = c(2024, 1), frequency = 12)
```
• 访问元素:
```
ts_data[1] # 访问第一个时间点的数据
```
总结
• 向量:一维数据,元素类型相同。
• 矩阵:二维数据,元素类型相同。
• 数组:多维数据,元素类型相同。
• 因子:分类数据。
• 列表:复合数据结构,可以包含不同类型的数据。
• 数据框:表格数据,每列可以是不同类型的数据。
• 时间序列:按时间顺序排列的数据。
这些数据结构在R语言中非常灵活,可以根据具体需求选择合适的数据结构来存储和操作数据。
","description":"如何向 r 语言中的数据结构添加新的元素或列? 小郑同学的回答\\n\\n\\n在R语言中,数据结构是存储和操作数据的基本方式。R提供了多种数据结构,每种结构都有其特定的用途和特点。以下是R语言中常见的数据结构:\\n\\n1.向量(Vector)\\n\\n向量是R中最基本的数据结构,用于存储一组有序的元素。向量中的所有元素必须是同一类型(如数值型、字符型或逻辑型)。\\n\\n• 创建向量:\\n\\n```\\n\\nnumeric_vector <- c(1, 2, 3, 4, 5) # 数值型向量\\n\\ncharacter_vector <- c(\\"apple\\", \\"banana\\", \\"cherry\\") # 字符型向量…","guid":"https://www.zhihu.com/question/604850066/answer/89431799618","author":"小郑同学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-30T03:30:39.645Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言中的数据结构","url":"https://zhuanlan.zhihu.com/p/20741345367","content":"在R语言中,数据结构是存储和操作数据的基本方式。R提供了多种数据结构,每种结构都有其特定的用途和特点。以下是R语言中常见的数据结构: 1.向量(Vector) 向量是R中最基本的数据结构,用于存储一组有序的元素。向量中的所有元素必须是同一类型(如数值型、字符型或逻辑型)。 • 创建向量: ``` numeric_vector <- c(1, 2, 3, 4, 5) # 数值型向量 character_vector <- c(\\"apple\\", \\"banana\\", \\"cherry\\") # 字符型向量 logical_v…","description":"在R语言中,数据结构是存储和操作数据的基本方式。R提供了多种数据结构,每种结构都有其特定的用途和特点。以下是R语言中常见的数据结构: 1.向量(Vector) 向量是R中最基本的数据结构,用于存储一组有序的元素。向量中的所有元素必须是同一类型(如数值型、字符型或逻辑型)。 • 创建向量: ``` numeric_vector <- c(1, 2, 3, 4, 5) # 数值型向量 character_vector <- c(\\"apple\\", \\"banana\\", \\"cherry\\") # 字符型向量 logical_v…","guid":"https://zhuanlan.zhihu.com/p/20741345367","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-30T03:30:38.017Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"tidyverse的一些测试代码","url":"https://zhuanlan.zhihu.com/p/20712493100","content":"根据张敬信老师的内容进行的一些tidyverse代码练习。library(tidyverse) library(datasets) data(ToothGrowth) # dplyr library(dplyr) str(ToothGrowth) # 新增变量和变量重新赋值 ToothGrowth2 <- mutate(ToothGrowth, len=len^2, nv=1:nrow(ToothGrowth), nv2=ifelse(nv>median(nv),\\"H\\",\\"L\\")) # 筛选行(样本) ToothGrowth3 <- filter(ToothGrowth2, nv %in% 1:50, nv2==\\"H\\") ToothGrowth4 <- select(ToothGrowth3, c(2,4)) …","description":"根据张敬信老师的内容进行的一些tidyverse代码练习。library(tidyverse) library(datasets) data(ToothGrowth) # dplyr library(dplyr) str(ToothGrowth) # 新增变量和变量重新赋值 ToothGrowth2 <- mutate(ToothGrowth, len=len^2, nv=1:nrow(ToothGrowth), nv2=ifelse(nv>median(nv),\\"H\\",\\"L\\")) # 筛选行(样本) ToothGrowth3 <- filter…","guid":"https://zhuanlan.zhihu.com/p/20712493100","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-29T15:18:35.184Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Linux服务器screen后台运行R代码","url":"https://zhuanlan.zhihu.com/p/20491566384","content":"连接校园VPN总是断开,导致服务器session总是断掉,代码运行中途就停止了,该怎么办呢? 可以用screen把运行任务放到后台,这样即使前台关闭界面或者网络不稳定,代码也会照样继续运行,这样就可以解决这个问题。 下面介绍screen的相关基本方法。 screen的下载和安装按照 Linux非root用户配置安装screen_screen 安装目录user-CSDN博客 进行,亲测可以成功,这里需要注意下载及解压文件的路径与安装路径的区分。screen的基本使用方…","description":"连接校园VPN总是断开,导致服务器session总是断掉,代码运行中途就停止了,该怎么办呢? 可以用screen把运行任务放到后台,这样即使前台关闭界面或者网络不稳定,代码也会照样继续运行,这样就可以解决这个问题。 下面介绍screen的相关基本方法。 screen的下载和安装按照 Linux非root用户配置安装screen_screen 安装目录user-CSDN博客 进行,亲测可以成功,这里需要注意下载及解压文件的路径与安装路径的区分。screen的基本使用方…","guid":"https://zhuanlan.zhihu.com/p/20491566384","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-27T06:54:04.857Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用R模拟美国家庭净资产分布","url":"https://zhuanlan.zhihu.com/p/20417527866","content":"背景摘自美国驻华大使馆的报道: 美联储发布的统计显示,2023年底美国家庭净资产升至创纪录的156.2万亿美元,按1.3亿家庭计算,平均每户资产约120万美元。不过,根据美联储对2022年的家庭财务分析,如果按每户净资产中位数计算的话,每户为19.2万美元,也就是说有一半的家庭净资产在19.2万美元以下。想必上完高中的童鞋们都能看出这个分布“平均数120万,中位数19.2万”应该非常得右偏。我们要解决的问题是,分布右偏多少?或者…","description":"背景摘自美国驻华大使馆的报道: 美联储发布的统计显示,2023年底美国家庭净资产升至创纪录的156.2万亿美元,按1.3亿家庭计算,平均每户资产约120万美元。不过,根据美联储对2022年的家庭财务分析,如果按每户净资产中位数计算的话,每户为19.2万美元,也就是说有一半的家庭净资产在19.2万美元以下。想必上完高中的童鞋们都能看出这个分布“平均数120万,中位数19.2万”应该非常得右偏。我们要解决的问题是,分布右偏多少?或者…","guid":"https://zhuanlan.zhihu.com/p/20417527866","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-26T14:21:27.243Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-下野雪的回答:我与我周旋久,宁作我。 欢愉且胜意,万事皆可期。 人生海海,山山而川,不过尔尔。 海压竹枝低复举,风吹山角...","url":"https://www.zhihu.com/question/580956751/answer/87326651720","content":"能否分享一些让你豁然开朗的句子?我与我周旋久,宁作我。
欢愉且胜意,万事皆可期。
人生海海,山山而川,不过尔尔。
海压竹枝低复举,风吹山角晦还明。
我自人间漫浪,平生事,南北西东。
人生自在常如此,何事能妨笑口开。
世路如今已惯 此心到处悠然。
逢人不说人间事,便是人间无事人。
赌书消得泼茶香,当时只道是寻常。
莫思身外无穷事,且尽生前有限杯。
若无闲事挂心头,便是人间好时节。
世界的模样,取决于我们凝视它的目光
心似白云常自在,意如流水任东西。
悟已往之不谏,知来者之可追.
过去无法挽回,未来可以改变.
吾生梦幻间,何事绁尘羁。
知不可乎骤得,托遗响于悲风.
人生如逆旅,我亦是行人.
生活没有低谷 只有蓄势待发。
心似白云常自在 意如流水任东西。
不如意事常八九,可与语人无二三。
小舟从此逝,江海寄余生。
王侯将相宁有种乎?
知其不可奈何而安之若命,德之至也。
天下熙熙,皆为利来,天下攘攘皆为利往。
登高必自卑,行远必自迩。
今朝有酒今朝醉,明日愁来明日愁。
世事浮云何足问,不如高卧且加餐。
他日卧龙终得雨,今朝放鹤且冲天。
我亦愿携心中一二人游尽天涯。
“实迷途其未远,觉今是而昨非”
穷则独善其身,达则兼济天下.
万物皆有裂痕,那是光照进来的地方!
一人独往酌云间 ,不似人间不是仙。
莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃——惠能《菩提偈》
且视他人之疑目如盏盏鬼火,大胆地去走自己的路。
年少不识愁滋味,为赋新词强说愁,而今识尽愁滋味,却道天凉好个秋。
惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色。
与万事言和,与独处相安。自行,自省,自清欢。
村上春树说:“不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情以后,眼前的风景,已经和从前不一样了。人生没有无用的经历,只要我们一直向前走,天总会亮。”
不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了,人生没有无用的经历,只要我们一直向前走,天总会亮的。
活着不在于斗争,而在于在无数的斗争中找出与你一样发光努力的人。
且行且看且从容,且停且忘且随风,失而复得是为圆满,求而不得未必遗憾,慢品人间烟火色,闲观万事岁月长。
生活属于每个人自己的感受,不属于任何人的看法最好的情景:爱自己、享受生活、发自内心的笑。
争不过岁月,也跑不过时间。唯有以自己喜欢的方式,过好每一个日出日落
世界上只有一种真正的英雄主义,那就是在看清生活的真相后依旧热爱生活。——罗曼罗兰《名人传》
有情绪波动的人看是没办法平复的,闭上眼睛听比看更易开悟。
你是风啊,别怕大山,翻过它就是了。
","description":"能否分享一些让你豁然开朗的句子? 下野雪的回答\\n\\n\\n我与我周旋久,宁作我。\\n\\n欢愉且胜意,万事皆可期。\\n\\n人生海海,山山而川,不过尔尔。\\n\\n海压竹枝低复举,风吹山角晦还明。\\n\\n我自人间漫浪,平生事,南北西东。\\n\\n人生自在常如此,何事能妨笑口开。\\n\\n世路如今已惯 此心到处悠然。\\n\\n逢人不说人间事,便是人间无事人。\\n\\n赌书消得泼茶香,当时只道是寻常。\\n\\n莫思身外无穷事,且尽生前有限杯。\\n\\n若无闲事挂心头,便是人间好时节。\\n\\n世界的模样,取决于我们凝视它的目光\\n\\n心似白云常自在,意如流水任东西。\\n\\n悟已往之不谏,知来者之可追.\\n\\n过去无法挽回,未来可以改变.\\n\\n吾生梦幻间,何事绁尘羁。\\n\\n知不可乎骤得,托遗响于悲风.\\n\\n人生如逆旅…","guid":"https://www.zhihu.com/question/580956751/answer/87326651720","author":"下野雪","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-26T05:35:50.572Z","media":[{"url":"https://pica.zhimg.com/v2-b6efd2b32975006fb4db058960d1e981.jpg","type":"photo","width":2000,"height":3000,"blurhash":"L34UmSyGGJTMJT$jofW=$gWUR*R*"},{"url":"https://picx.zhimg.com/v2-7cbb2bec5ab7f9f6cb0ae945f2889046.jpg","type":"photo","width":2000,"height":3000,"blurhash":"L75h+GR=MvogIUjDneawDgxuaeWA"},{"url":"https://pica.zhimg.com/v2-3cc08b23128ffd435066de15d0fbc15c.jpg","type":"photo","width":2000,"height":3000,"blurhash":"LOE2H@=]5BR-~9xYNKoKRnRlt5s."},{"url":"https://picx.zhimg.com/v2-6301d2d6b7afd80ca9deb1e14e4fc4ce.jpg","type":"photo","width":2000,"height":2668,"blurhash":"LVDAAqbdE3t8.AayWCoLI_oKxVWE"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 语言中强大的文本分析数据包 rwordmap,有小伙伴在使用么?-张敬信的回答:rwordmap 不就是个画个性化全球地图的包吗,R 语言中强大的文本分析数据包是 quanted...","url":"https://www.zhihu.com/question/10438195250/answer/87274282327","content":"R 语言中强大的文本分析数据包 rwordmap,有小伙伴在使用么?rwordmap 不就是个画个性化全球地图的包吗,R 语言中强大的文本分析数据包是 quanteda
可以,好像MGI 网站?目前我没找到比较好的批量注释方法,那个网页你可以一个一个查,我找到合适的再跟你说
","description":"这种基因怎么注释? 茴的四种写法的回答\\n\\n\\n可以,好像MGI 网站?目前我没找到比较好的批量注释方法,那个网页你可以一个一个查,我找到合适的再跟你说","guid":"https://www.zhihu.com/question/10395066324/answer/85901798248","author":"茴的四种写法","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-24T00:51:46.923Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"你见过有调节的网络分析吗?保姆级教程!!!","url":"https://zhuanlan.zhihu.com/p/20072776156","content":"写在前面 近年来,网络分析方法被广泛应用于心理学、精神病学等领域,被用来控制节点之间的复杂相互作用。根据分析数据的时间特征,我们可以将常见的网络分析研究简单分为横断网络分析、纵向网络分析、动态(密集追踪)网络分析。这些研究大部分仅探讨了节点之间的两两关系,但对于更复杂机制的考察很少,例如调节作用。并且,在考察调节作用的网络分析研究中,相当一部分仅仅是简单的将整个样本分为几个子样本(例如分为男性和…","description":"写在前面 近年来,网络分析方法被广泛应用于心理学、精神病学等领域,被用来控制节点之间的复杂相互作用。根据分析数据的时间特征,我们可以将常见的网络分析研究简单分为横断网络分析、纵向网络分析、动态(密集追踪)网络分析。这些研究大部分仅探讨了节点之间的两两关系,但对于更复杂机制的考察很少,例如调节作用。并且,在考察调节作用的网络分析研究中,相当一部分仅仅是简单的将整个样本分为几个子样本(例如分为男性和…","guid":"https://zhuanlan.zhihu.com/p/20072776156","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-23T16:13:23.773Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R包开发与Github提交","url":"https://zhuanlan.zhihu.com/p/19866245782","content":"【要知道 · R】R包开发|保姆级教程 视频: https://www.bilibili.com/video/BV1Db411f73d/?spm_id_from=333.788.videopod.episodes&bvid=BV1Db411f73d&vd_source=26e955dabed3cb6a00e12e6609dfe955&p=3文档: https://blog.csdn.net/weixin_43843918/article/details/129395318?spm=1001.2014.3001.5501 使用 git 命令行上传项目到 GitHub(以 R 包为例) 视频: https://www.bilibili.com/video/BV1Zu4y1i7uN/?spm_id_from=33…","description":"【要知道 · R】R包开发|保姆级教程 视频: https://www.bilibili.com/video/BV1Db411f73d/?spm_id_from=333.788.videopod.episodes&bvid=BV1Db411f73d&vd_source=26e955dabed3cb6a00e12e6609dfe955&p=3文档: https://blog.csdn.net/weixin_43843918/article/details/129395318?spm=1001.2014.3001.5501 使用 git 命令行上传项目到…","guid":"https://zhuanlan.zhihu.com/p/19866245782","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-22T10:58:27.000Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"除了tidymodels、mlr3和h2o之外,还有哪些好用的R语言机器学习包?-生信学习者的回答:[图片] R语言机器学习算法实战系列(十九)特征选择之Monte Carlo算法(Mo...","url":"https://www.zhihu.com/question/647508579/answer/84830442724","content":"除了tidymodels、mlr3和h2o之外,还有哪些好用的R语言机器学习包?特征选择(Feature Selection)是机器学习中的一个重要步骤,它涉及到从原始特征集中选择最相关、最有信息量的特征子集,以用于模型训练和预测。这个过程的目的是提高模型的性能、减少计算成本、增强模型的可解释性,并可能提高模型的泛化能力。以下是特征选择的几个关键点:
Monte Carlo Feature Selection (MCFS) 是一种基于随机抽样的特征选择方法,旨在评估特征的重要性。MCFS 通过多次随机抽样和构建模型来评估每个特征的稳定性,从而确定哪些特征对模型的预测性能最为重要。这种方法特别适用于高维数据集,能够有效识别和选择对模型性能贡献最大的特征。
MCFS的核心思想是通过多次随机抽样和模型构建,评估每个特征在不同子集中的表现,从而确定特征的重要性。具体步骤如下:
本文旨在通过R语言实现MCFS(Monte Carlo Feature Selection and Interdependency Discovery)之特征选择,总共包含:
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
在之前的 6-10 期文章中介绍了散点图相关绘图,点击下方卡片跳转到对应文章
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
本学习笔记整理参考于Alain F.Zuur Elena N.Ieno等学者编写的《Mixed Effects Models and Extensions in Ecology with R》。
相关笔记链接:
梦被繁繁:学习笔记|模型学习一----线性回归和加性模型建模的基本流程梦被繁繁:学习笔记|模型学习二----线性回归在生态数据上应用的局限性梦被繁繁:学习笔记|模型学习三----事物并不总是线性的:加性模型梦被繁繁:学习笔记|模型学习四----模型的异质性梦被繁繁:学习笔记|模型学习五----嵌套数据的混合效应建模梦被繁繁:学习笔记|模型学习六七----违反独立性梦被繁繁:学习笔记|模型学习八----认识指数家族Meet the Exponential Family","description":"怎样简单易懂的解释GLM(广义线性模型)? 梦被繁繁的回答\\n\\n9.1 引言\\n广义线性模型(GLM)或广义加性模型(GAM)由三个步骤组成:(i)响应变量的分布,(ii)用解释变量说明系统成分,以及(iii)响应变量的平均值与系统部分之间的联系。\\n9.2 Gaussian Linear Regression as a GLM\\nGLM包括三个步骤:\\n\\n1. 对响应变量yi分布的假设。这也定义了Y的均值和方差。\\n\\n2. 系统部分的说明。这是解释变量的函数。\\n\\n3.Yi均值与系统部分的关系。这也被称为平均值与系统部分之间的联系。\\nGAM\\n9.3 Introducing Poisson…","guid":"https://www.zhihu.com/question/274341067/answer/84302036916","author":"梦被繁繁","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-21T14:43:10.095Z","media":[{"url":"https://pic1.zhimg.com/v2-9b058ca643684cc08df9b660cbf0df98.jpg","type":"photo","width":1052,"height":404,"blurhash":"LKRp5p?bt7-:?dt7t7fRp3R+WBWV"},{"url":"https://picx.zhimg.com/v2-5fe26da7522f0f20a411e7c1942f932b.jpg","type":"photo","width":607,"height":68,"blurhash":"LHSY{q%MWB-;~qxut7t7_3fQRjt7"},{"url":"https://pica.zhimg.com/v2-4ebbd7374e811c1d98a59f51ba5236a2.jpg","type":"photo","width":1017,"height":598,"blurhash":"LORCxX%2xv-ppKWFo#kCH;WBRjae"},{"url":"https://pic1.zhimg.com/v2-ef9b9972f6caaa052878df26b34ddfcc.jpg","type":"photo","width":737,"height":63,"blurhash":"LJSPX_~qxu%M_3WBWBof~qD%M{xu"},{"url":"https://picx.zhimg.com/v2-828f2ccdbdce453f149a435f391ce649.jpg","type":"photo","width":1032,"height":602,"blurhash":"LARysg_3-;~q%MM{WBj[9Fj[j[Rj"},{"url":"https://picx.zhimg.com/v2-ab014bc71a0072869bbcdb5f0ae6cefb.jpg","type":"photo","width":1030,"height":91,"blurhash":"LGR{#?t7Rj_3%MayWBj[~qayfQof"},{"url":"https://pica.zhimg.com/v2-e40c87045ed8dce41dd5be1635da138e.jpg","type":"photo","width":983,"height":125,"blurhash":"LnS$Z5x]tS%NxtkDaej]%jaeRORj"},{"url":"https://pic1.zhimg.com/v2-ef9798a95a0758f9243aa17064631cc2.jpg","type":"photo","width":1019,"height":359,"blurhash":"L8Qcn{~qof~qofxuofof-;j[ayof"},{"url":"https://picx.zhimg.com/v2-fd38ff46bf752f55aad0513692d40e13.jpg","type":"photo","width":610,"height":95,"blurhash":"LFSs50_3j[~q_3M{t7ay_3ofRjM{"},{"url":"https://picx.zhimg.com/v2-749f6949beb64a1c6d277a75e8d6d6ec.jpg","type":"photo","width":707,"height":106,"blurhash":"LERysg?bIUof_3ayt7M{~qofoft7"},{"url":"https://pic1.zhimg.com/v2-47fd7bfbf90950f9d2fed2ad88dae56f.jpg","type":"photo","width":694,"height":94,"blurhash":"LKRMb$xu-;t7_3t7ofRj~qt7Rjxu"},{"url":"https://picx.zhimg.com/v2-394ee3fdf509df1a0f0b51206b365b78.jpg","type":"photo","width":661,"height":68,"blurhash":"LJSY{q_3Rj_3_3RjofWB~qM{ofM{"},{"url":"https://pica.zhimg.com/v2-5ea0b574f257da7cf10a9673222fc709.jpg","type":"photo","width":1031,"height":664,"blurhash":"LCRp8-_3?b~qRjM{WBofxut7Rjof"},{"url":"https://pica.zhimg.com/v2-5f2b6d15b014948bfb1de7ff5c2380ea.jpg","type":"photo","width":1077,"height":436,"blurhash":"LMR3TW-;t7-;~qj[ofofIUWBWBWB"},{"url":"https://pic1.zhimg.com/v2-7e3dcf8291852f910994160eebe5efac.jpg","type":"photo","width":1006,"height":85,"blurhash":"LCS6Pl~qxu~q00t7t7t7Rjt7M{Rj"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?-二月火马的回答:因为工具从来都是为使用者服务,工具的市占率取决于技术的进展,背...","url":"https://www.zhihu.com/question/637441452/answer/84048508030","content":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?因为工具从来都是为使用者服务,工具的市占率取决于技术的进展,背后是不同科技路线的竞争,本质是人类趋利的天性。
会有三个阶段:
一个工具的热门缘于后来者对新科技红利的趋利。一个工具退出历史舞台也会因相较之下无利可图,进而变成冷门。
python一开始并不好用,甚至有很多数据分析的思想都是借鉴自R语言,R语言本来比python更好用。但当深度学习性能提上来之后,python就成为无可争议的重要语言了,因为一开始用python做神经网络的多。后来Theano、Caffe、Tensorflow、Torch等框架在领域内继续卷,相应的数据分析套件也进一步丰富完善。最后python就成为数据分析里生态最丰富和完善的工具,而深度学习框架的格局也逐渐清晰,pytorch成为的主流。而同期R语言并无太多热门深度学习框架,仅后期出现过了一个昙花一现的H2O。无他,在R之上做深度学习的人数跟python不是一个量级,取得的进展也不是一个量级。
同理,大语言模型在chatGPT3.5之前是Bert的天下,之后是自回归Transformer的天下。因为有无数人涌入,大模型的分布式训练加速方案、推理加速方案、量化方案、微调套件、预训练数据生态、强化学习方案、Prompt工程、RAG、Agent等等细节快速丰富,后来者的使用和研究门槛大大降低,技术迭代的飞轮出现。短短两年,现在回看bert,恍如隔世。举另一个例子,如果当时LK-99室温超导能被其他实验室复现验真,那么围绕高精度铜参杂工艺的成本、效率、质量短时间内会有巨大的进化。
由此可知,世界的进步其实由不趋利的少数人驱动,由趋利的多数人完善。ChatGPT3.5和LK-99一个被验真后开枝散叶、一个被证伪后趋于冷门,但二者都是伟大的实践,是被全世界90%的人否定之后的努力坚持。这种坚持的核心驱动力不是利益,是对信仰的朴素追求。资本喜欢现金流、厌恶不确定性,比如波音和英特尔,从创新进展的角度看,每每屠龙少年终成恶龙。因此可以断定,AGI不可能在以成瘾性为KPI的中国传统互联网企业中诞生。
但纵使如此,仍有无数的人在无数被大多数人不看好的领域里长期坚持,其中绝大多数人无法成功,大多数人一生籍籍无名,少部分人的探索被隐藏在浩若烟海的文献中偶然被后来探索者所翻阅。
但这里面极少数的成功,便是人类最耀眼的光。
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? 二月火马的回答\\n\\n\\n因为工具从来都是为使用者服务,工具的市占率取决于技术的进展,背后是不同科技路线的竞争,本质是人类趋利的天性。\\n\\n会有三个阶段:\\n\\n进展:一个领域出现重大进展,性能断崖式领先,引起巨大关注。\\n复现:当一个重大进展被发现时,推动进展的人所用的工具就很容易被后来者所学习采用,这是复现该重要进展最简单的路径依赖。\\n完善:当重大进展由于大量后来者涌入进而衍生成一个学派或技术流派之后,原始团队所使用的工具套件就会被进一步完善和丰富,因而形成一个工具生态。\\n外延:当一个工具形成完善生态…","guid":"https://www.zhihu.com/question/637441452/answer/84048508030","author":"二月火马","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-21T07:39:38.626Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?-文之的回答:R语言的优势只有俩,比较完善的统计环境和足够优秀的作图能力。除此之外...","url":"https://www.zhihu.com/question/637441452/answer/83855076367","content":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?R语言的优势只有俩,比较完善的统计环境和足够优秀的作图能力。除此之外堪称答辩。
R使用者多为学术界研究者,对于学界常用的各种模型基本都有比较方便调用的包。这一点确实比Python方便多了。在作图方面,ggplot确实天下无敌。我一般Python跑完数据再用ggplot画图。plt或者sns虽然经过调试也可以用,但确实不如ggplot那样方便优雅。
但缺点也很明显。(1)函数和方法一个二个就跟闹着玩一样,还有包的名字简直像牛皮癣小广告。风格极其不统计,可读性极其差。(2)我不能理解为什么要用重写符号这种需要摁两个三个键才能摁出来的东西来当赋值符号,而不用=号。(3)被吹上天的各种管道符,恰恰降低了代码的可读性,破坏了结构。(4)其他功能相当薄弱。。。工作流时不时要切换,体验感极差。
我使用r的唯一理由就是ggplot和复现使用了r包的论文数据。
ggplot也在逐渐移植到Python了,ggpy,ggpylot,plotnine等包也逐渐成熟了。等这些包完成复刻就是卸载r的时候
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? 文之的回答\\n\\n\\nR语言的优势只有俩,比较完善的统计环境和足够优秀的作图能力。除此之外堪称答辩。\\n\\nR使用者多为学术界研究者,对于学界常用的各种模型基本都有比较方便调用的包。这一点确实比Python方便多了。在作图方面,ggplot确实天下无敌。我一般Python跑完数据再用ggplot画图。plt或者sns虽然经过调试也可以用,但确实不如ggplot那样方便优雅。\\n\\n但缺点也很明显。(1)函数和方法一个二个就跟闹着玩一样,还有包的名字简直像牛皮癣小广告。风格极其不统计,可读性极其差…","guid":"https://www.zhihu.com/question/637441452/answer/83855076367","author":"文之","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-21T03:22:34.574Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ggplot2多个图共用一个调色板","url":"https://zhuanlan.zhihu.com/p/19549633603","content":"案例记录:多个图共用一个调色板 前言:我需要绘制两个ggplot2的病原谱(即堆叠条形图),但我需要这两个病原谱使用同一个调色板 方法一:(适用于不同脚本或者同个脚本) 思路:首先先给第一个病原谱①随机分配颜色,然后在提取这个病原谱①它给每种细菌分配的颜色,之后在合并到根据病原谱①给病原谱②分配颜色,再用其他颜色填充NA值#获得病原谱①的ggplot2布局信息 g2 <- ggplot_build(p.R.right.n)#在data列表中找到对应的f…","description":"案例记录:多个图共用一个调色板 前言:我需要绘制两个ggplot2的病原谱(即堆叠条形图),但我需要这两个病原谱使用同一个调色板 方法一:(适用于不同脚本或者同个脚本) 思路:首先先给第一个病原谱①随机分配颜色,然后在提取这个病原谱①它给每种细菌分配的颜色,之后在合并到根据病原谱①给病原谱②分配颜色,再用其他颜色填充NA值#获得病原谱①的ggplot2布局信息 g2 <- ggplot_build(p.R.right.n)#在data列表中找到对应的f…","guid":"https://zhuanlan.zhihu.com/p/19549633603","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T16:45:46.989Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?-张敬信的回答:Quarto和Rmd中都支持写Latex代码。","url":"https://www.zhihu.com/question/10076895648/answer/83542094098","content":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?Quarto和Rmd中都支持写Latex代码。
","description":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。? 张敬信的回答\\n\\n\\nQuarto和Rmd中都支持写Latex代码。","guid":"https://www.zhihu.com/question/10076895648/answer/83542094098","author":"张敬信","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T14:14:38.588Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 回归分析","url":"https://zhuanlan.zhihu.com/p/19503732254","content":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。回归分析是统计学中一种用于探究自变量与因变量之间关系的方法。在 R 语言中,回归分析可以通过内置的 lm()函数来实现更多R语言教程和测试数据可见:R语言基础学习手册 8.1 定义与分类 回归分析是一种用于建立…","description":"写在前面R语言拥有丰富的数据处理、统计分析和机器学习工具包,涵盖了从简单的描述统计到复杂的模型建立的各个方面。再加上数据的处理可以完美的衔接后续的可视化,这使得它成为处理各种类型和规模的数据集的理想选择。回归分析是统计学中一种用于探究自变量与因变量之间关系的方法。在 R 语言中,回归分析可以通过内置的 lm()函数来实现更多R语言教程和测试数据可见:R语言基础学习手册 8.1 定义与分类 回归分析是一种用于建立…","guid":"https://zhuanlan.zhihu.com/p/19503732254","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T10:11:29.406Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何用 R 语言编写简单的小游戏?-远志致远的回答:真心不推荐,兄弟。没有成熟的游戏图形库,游戏循环更新界面(对R来说是plot绘图)bling bling白屏一闪一闪的...","url":"https://www.zhihu.com/question/662160681/answer/83182946552","content":"如何用 R 语言编写简单的小游戏?真心不推荐,兄弟。没有成熟的游戏图形库,游戏循环更新界面(对R来说是plot绘图)bling bling白屏一闪一闪的,观感很不好,玩惯3A大作的你能忍这帧率?能玩哪怕几分钟不怕眼瞎?听我的劝,找成熟的游戏库,哪怕是多面手Python下的pygame也比R强,不要在编程语言上吊死,游戏体验最重要。
而且R是函数式编程思维,讲究像做实验一样把样本一次性送进去,把盖子合起来做一致的筛选或计算;像流水线一样固定好管线流动的方向;像做会议安排一样确定好开会人数,安排好座位和材料用品;很难忍受中途一个个添加样本,或者让某个零件离开大部队临时改变走向,或者大领导突击检查临时加座(动态数组)。霸王硬上弓纯纯是想法很爽很酷,但实现起来事倍功半。何苦呢。
编程语言各有所专,各有所长,虽然理论上什么都可以做,但是你最终要考虑性能和编程表达体验。
","description":"如何用 R 语言编写简单的小游戏? 远志致远的回答\\n\\n\\n真心不推荐,兄弟。没有成熟的游戏图形库,游戏循环更新界面(对R来说是plot绘图)bling bling白屏一闪一闪的,观感很不好,玩惯3A大作的你能忍这帧率?能玩哪怕几分钟不怕眼瞎?听我的劝,找成熟的游戏库,哪怕是多面手Python下的pygame也比R强,不要在编程语言上吊死,游戏体验最重要。\\n\\n而且R是函数式编程思维,讲究像做实验一样把样本一次性送进去,把盖子合起来做一致的筛选或计算;像流水线一样固定好管线流动的方向;像做会议安排一样确定好开会人数,安排好座位和材料用品;很难忍受中途一个个添加样本…","guid":"https://www.zhihu.com/question/662160681/answer/83182946552","author":"远志致远","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T05:29:16.533Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?-dave xu的回答:plot(function(x) dnorm(x),-3,3) text(x=1,y=0.3,labels=exp...","url":"https://www.zhihu.com/question/10076895648/answer/83200564158","content":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。?plot(function(x) dnorm(x),-3,3)\\ntext(x=1,y=0.3,labels=expression(\\n f(x) == frac(1, sqrt(2 * pi * sigma^2)) *\\n exp(-frac((x - mu)^2, 2 * sigma^2))\\n ))
各种数学公式的写法,请见
?plotmath
","description":"想问一下大佬们,怎么在 R语言中怎么表达像正态分布概率密度函数那样复杂的公式。? dave xu的回答\\n\\nplot(function(x) dnorm(x),-3,3)\\ntext(x=1,y=0.3,labels=expression(\\n f(x) == frac(1, sqrt(2 * pi * sigma^2)) *\\n exp(-frac((x - mu)^2, 2 * sigma^2))\\n ))\\n\\n各种数学公式的写法,请见\\n\\n?plotmath","guid":"https://www.zhihu.com/question/10076895648/answer/83200564158","author":"dave xu","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T05:21:10.195Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"是时候用Circos震撼全场了!附最简单的Circos实现。","url":"https://zhuanlan.zhihu.com/p/19350318703","content":"Circos图是一种采用圆形布局展示数据的可视化图表,这种独特的圆形设计特别适合用来探索不同对象之间或位置之间的关系。如果你的数据涉及某种关联性,或者需要展示多层次、多尺度的注释信息,Circos图将是一个非常理想的选择。 Circos图无论是基因组学研究、迁徙模式分析,还是数学艺术创作等领域,Circos图都能通过清晰、直观的方式将复杂的数据关系展现出来,帮助人们更好地理解和分析数据。 本文内容包含:circos案例分享Pyth…","description":"Circos图是一种采用圆形布局展示数据的可视化图表,这种独特的圆形设计特别适合用来探索不同对象之间或位置之间的关系。如果你的数据涉及某种关联性,或者需要展示多层次、多尺度的注释信息,Circos图将是一个非常理想的选择。 Circos图无论是基因组学研究、迁徙模式分析,还是数学艺术创作等领域,Circos图都能通过清晰、直观的方式将复杂的数据关系展现出来,帮助人们更好地理解和分析数据。 本文内容包含:circos案例分享Pyth…","guid":"https://zhuanlan.zhihu.com/p/19350318703","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-20T03:10:15.031Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床医学该学python 还是R?-喂狗的小狗的回答:先学R,因为大部分下机数据处理,测序,制图,R用的比较多。 但是涉及到计算加速,调度优化,高性能计算,数值分...","url":"https://www.zhihu.com/question/9225232333/answer/82939624372","content":"临床医学该学python 还是R?先学R,因为大部分下机数据处理,测序,制图,R用的比较多。
但是涉及到计算加速,调度优化,高性能计算,数值分析,Python和Matlab混用比较多。
两种语言语法没差太多,研究领域里哪个语言的工具包多,哪个就好用。
","description":"临床医学该学python 还是R? 喂狗的小狗的回答\\n\\n\\n先学R,因为大部分下机数据处理,测序,制图,R用的比较多。\\n\\n但是涉及到计算加速,调度优化,高性能计算,数值分析,Python和Matlab混用比较多。\\n\\n两种语言语法没差太多,研究领域里哪个语言的工具包多,哪个就好用。","guid":"https://www.zhihu.com/question/9225232333/answer/82939624372","author":"喂狗的小狗","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-19T22:13:53.529Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?-123456的回答:优雅不优雅和这个没关系,函数式编程本就比面向对象优雅,R支持管道本身就不是Py...","url":"https://www.zhihu.com/question/527922200/answer/82867438821","content":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?优雅不优雅和这个没关系,函数式编程本就比面向对象优雅,R支持管道本身就不是Python能碰瓷的
","description":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗? 123456的回答\\n\\n\\n优雅不优雅和这个没关系,函数式编程本就比面向对象优雅,R支持管道本身就不是Python能碰瓷的","guid":"https://www.zhihu.com/question/527922200/answer/82867438821","author":"123456","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-19T15:54:51.249Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基于mlr3进行机器学习","url":"https://zhuanlan.zhihu.com/p/19285052958","content":"R机器学习(基于mlr3verse,tidyverse) 赠完整课件、操作指南 内容包含:数据清洗、特征工程、集成学习、超参数调参、特征选择等数据分析处理操作。各种常用机器学习算法:正则化回归、Logistic回归、KNN、朴素贝叶斯、神经网络、支持向量机、决策树、随机森林、AdaBoost、XGBoost、LightGBM、聚类分析、关联分析、文本挖掘、生存分析的基本原理及R代码实现。另外,增加少量的torch包深度学习。 内容包含:高清视频+课件PPT+代…","description":"R机器学习(基于mlr3verse,tidyverse) 赠完整课件、操作指南 内容包含:数据清洗、特征工程、集成学习、超参数调参、特征选择等数据分析处理操作。各种常用机器学习算法:正则化回归、Logistic回归、KNN、朴素贝叶斯、神经网络、支持向量机、决策树、随机森林、AdaBoost、XGBoost、LightGBM、聚类分析、关联分析、文本挖掘、生存分析的基本原理及R代码实现。另外,增加少量的torch包深度学习。 内容包含:高清视频+课件PPT+代…","guid":"https://zhuanlan.zhihu.com/p/19285052958","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-19T03:59:16.441Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床工作者想自学统计软件,应该选择SAS、Stata还是R语言?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很...","url":"https://www.zhihu.com/question/62239133/answer/82365926553","content":"临床工作者想自学统计软件,应该选择SAS、Stata还是R语言?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:2]\\nhigh_colors <- colors[1]\\nlow_colors <- colors[2]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=Type, y=Value, fill=Type, color=Type)) +\\n stat_boxplot(geom=\\"errorbar\\", width=0.2) +\\n geom_boxplot(width=0.5, fill=NA) +\\n geom_line(aes(group=Pire), position = position_dodge(0.2), color=\\"black\\",\\n alpha=0.5) +\\n geom_point(aes(fill=Type, group=Pire), position = position_dodge(0.2),\\n shape=21, color=\\"black\\") + \\n labs(x=\\"Name\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,255,50), limits = c(0,255),\\n expand = expansion(mult = c(0, 0.05))) +\\n facet_wrap(.~Name, nrow=1)+\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(), strip.background = element_blank(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = c(high=high_colors, low=low_colors)) +\\n scale_color_manual(values = c(high=high_colors, low=low_colors))\\np
最后我们保存绘制的图形:
ggsave(\\"save/box-paired.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
不是所有的鲜花
都盛开在春天
不是所有的河流
都流向大海
鲜花盛开在四季
河流流向八方
只要热爱
山海皆可平
无处不风景
1.任何时候都不要撕破脸,也不要选择报复。烂掉的果子自然会从树上掉下来,不需要你亲自动手,你积你的德,他造他的孽老天有眼,自会分辨。
2.讨厌一个人,没必要翻脸,做不到微笑,沉默就好。
3.与其跟一条狗抢路走,不如让狗先走一步,因为打败一只狗并不光荣,而被狗咬上一口却很倒霉。
4.不要总是揪着过去不放,昨天的太阳再好,也晒不干今天的衣裳,生活嘛,总要向前看,只有放下了过去的包袱,你才能轻装前行。
5.良心这个东西不是人人都有的,你对别人好,别人不一定对你好,很多教训都是身边最信任的人把你教会的。你把他当亲人,他把你当外人,你拿他当朋友,他拿你当傻子,你对他真心实意,他对你充满算计。
6.没有良心的人,你对他再好也是白搭,哪怕你付出所有的真心,需要你的时候一脸微笑,一旦用不上你,立马会过河拆桥。你可以大度的去原谅别人,但千万不要愚蠢的再去相信,你可以不记仇,但不可以不长记性。
7.你没有害人之心,但一定要有防人之心。善良有尺,忍让有度,愿你有不伤人的教养,也要有不被伤害的气场。若没有人护你周全,就请你以后善良中带点锋芒,为自己保驾护航。
8.照顾好自己,世界才会属于你。风雨由天,快乐由己,保重身体,健康第一。
天冷了,就抱抱自己取暖;天亮了,告诉自己向前看;感觉累了,找个地方缓一缓。你要适应这个世界所有的温度,不论是四季,还是人心。要学会天黑自己点灯,天冷自己加衣。
9.既然是生活,就免不了酸甜苦辣;既然是人生,就少不了人情冷暖。你要学会适应,不管是渐变的天气,还是善变的人心。
","description":"能否分享一些让你豁然开朗的句子? 关注有惊喜的回答\\n\\n\\n1.任何时候都不要撕破脸,也不要选择报复。烂掉的果子自然会从树上掉下来,不需要你亲自动手,你积你的德,他造他的孽老天有眼,自会分辨。\\n\\n2.讨厌一个人,没必要翻脸,做不到微笑,沉默就好。\\n\\n3.与其跟一条狗抢路走,不如让狗先走一步,因为打败一只狗并不光荣,而被狗咬上一口却很倒霉。\\n\\n4.不要总是揪着过去不放,昨天的太阳再好,也晒不干今天的衣裳,生活嘛,总要向前看,只有放下了过去的包袱,你才能轻装前行。\\n\\n5.良心这个东西不是人人都有的,你对别人好,别人不一定对你好,很多教训都是身边最信任的人把你教会的。你把他当亲人…","guid":"https://www.zhihu.com/question/580956751/answer/82057294337","author":"关注有惊喜","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-18T09:23:08.096Z","media":[{"url":"https://pic1.zhimg.com/v2-f3a4f4c8c1a4e7b0b931347bb1ab8474.jpg","type":"photo","width":690,"height":517,"blurhash":"LNFi9^s,4:WC-:RlIooe0LkC-pWB"},{"url":"https://pic1.zhimg.com/v2-127a55363d16dd5d1f385599344adbed.jpg","type":"photo","width":1080,"height":810,"blurhash":"LJGu{$xuIV-:00M{xuRjRRM_M{M|"},{"url":"https://picx.zhimg.com/v2-3e554d5eb9fbe72acb718005568f4d43.jpg","type":"photo","width":1024,"height":768,"blurhash":"LoJR26^*t7oz~WjYWBWBxuNGt7s."}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基因家族分析05_序列比对以及进化树的构建和可视化","url":"https://zhuanlan.zhihu.com/p/19179674415","content":"基因家族分析05_序列比对以及进化树的构建和可视化❝基因家族分析流程系列推文的目标:做一个高质量、超耐看、很标准的基因家族分析教程!基因家族分析05_序列比对以及进化树的构建和可视化❝可算是走到了这一步骤,甚至是可以称之为基因家族分析里面最重要的一张图了,同时也是基因家族分析的核心。 一般来讲,作为Figure1,必须要首战告捷,立刻抓住审稿人的眼睛。要让审稿人知道,我们绘图有多么的用心。# 激活分析环境,…","description":"基因家族分析05_序列比对以及进化树的构建和可视化❝基因家族分析流程系列推文的目标:做一个高质量、超耐看、很标准的基因家族分析教程!基因家族分析05_序列比对以及进化树的构建和可视化❝可算是走到了这一步骤,甚至是可以称之为基因家族分析里面最重要的一张图了,同时也是基因家族分析的核心。 一般来讲,作为Figure1,必须要首战告捷,立刻抓住审稿人的眼睛。要让审稿人知道,我们绘图有多么的用心。# 激活分析环境,…","guid":"https://zhuanlan.zhihu.com/p/19179674415","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-18T09:20:24.873Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"纵向数据分析还在做交叉滞后?不如来看看这个","url":"https://zhuanlan.zhihu.com/p/19164050394","content":"Vol.1 方法介绍目前在教育学和心理学的研究中出现了两种不同的观点,以变量为中心的观点(Variable-centred)提倡探究变量与变量之间的关系,例如很多横断面研究测量某个时刻参与率与成绩之间的关系。而以事件为中心的观点(event-centred)则认为学习不是一个静态的过程,参与率和学习成绩会随着时间发生动态变化,探索学习在特定时间点的输入和输出之间的因果关系是没有意义的。因此研究者需要在动态的时间变化中捕捉变量之间的联…","description":"Vol.1 方法介绍目前在教育学和心理学的研究中出现了两种不同的观点,以变量为中心的观点(Variable-centred)提倡探究变量与变量之间的关系,例如很多横断面研究测量某个时刻参与率与成绩之间的关系。而以事件为中心的观点(event-centred)则认为学习不是一个静态的过程,参与率和学习成绩会随着时间发生动态变化,探索学习在特定时间点的输入和输出之间的因果关系是没有意义的。因此研究者需要在动态的时间变化中捕捉变量之间的联…","guid":"https://zhuanlan.zhihu.com/p/19164050394","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-18T09:09:07.884Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如果 非要选一门软件,大佬首先推荐哪个R、SAS、SPSS、Stata、Eviews、Epidata?-旷野的回答:[图片] 当我们讨论R语言的不同实现时,总是能听到一句话:“ 哪个R...","url":"https://www.zhihu.com/question/296403948/answer/81874664446","content":"如果 非要选一门软件,大佬首先推荐哪个R、SAS、SPSS、Stata、Eviews、Epidata?当我们讨论R语言的不同实现时,总是能听到一句话:“哪个R才是最好的?”那么,到底是基础R(base R),Tidyverse,还是data.table呢?这个问题引发了无数次的讨论,而每次讨论似乎都能引发一些“战争”。每个人都有自己的偏好,有些人会支持Tidyverse,有些人则认为基础R才是根基,还有一些人认为data.table才是处理大数据的王者。那么,我们究竟该如何选择?
基础R是R语言的原始形式,所有的R代码最初都基于这一基础构建。它是R的“灵魂”,没有它就没有Tidyverse和data.table。但问题来了——基础R的语法并不那么友好,尤其对于初学者而言,学习曲线较为陡峭。例如,基本的数组操作、循环、数据处理等都需要自己编写复杂的代码,没有太多便捷的工具来提高效率。因此,虽然它非常强大,但对于很多刚接触R的新手而言,可能会觉得难以理解和使用。
如果你在学校或工作中做一些简单的统计分析,基础R完全能满足你的需求。它提供了大量的原生函数,适用于大多数常见任务,但当涉及到更复杂的数据操作时,基础R的代码就显得有些冗长且难以维护。
如果你是编程新手,或者想要更快速地完成数据分析任务,那么Tidyverse可能是最适合你的选择。Tidyverse是一组R包的集合,目标是让R更容易理解和使用。它的语法直观、简洁,采用了**“管道操作符(%>%)”**等现代编程风格,极大地提高了代码的可读性和开发效率。
例如,数据清洗和处理任务,Tidyverse通过dplyr和tidyr等包的简洁语法,可以让你轻松地对数据进行变换、过滤、排序等操作。这种简洁的风格非常适合那些不擅长编程的用户,或者是已经有其他编程语言经验(如Python或SQL)的开发者。对于他们来说,Tidyverse的学习曲线要比基础R平滑得多。
然而,对于更复杂的数据处理任务,Tidyverse可能显得有些不足。例如,处理大数据集时,Tidyverse的性能会显得不那么优越。尽管如此,Tidyverse仍然适用于大多数普通的R用户,尤其是那些关注代码可读性和开发效率的人。
当数据量开始变得庞大时,data.table绝对是你不容忽视的选择。它是R中最为高效的数据处理包之一,以其卓越的内存管理和计算速度著称。使用data.table,你可以以极快的速度对大数据集进行高效的排序、过滤和汇总。
然而,data.table的语法和可读性常常成为许多开发者的“心病”。对于刚开始接触它的人来说,它的语法并不直观,且需要专门的学习。很多人认为,data.table的语法比较简洁,但也因此失去了可读性。例如,data.table的代码行数通常很少,能通过一行代码完成许多操作,但这也让它看起来显得非常“神秘”。
尽管如此,data.table无疑是性能最优的选择,特别是在处理超大规模数据时,它的效率远超基础R和Tidyverse。如果你的任务涉及到数百万行数据,或者对性能有极高要求,那么选择data.table无疑是最理想的选择。
那么,面对这三者,我们应该如何选择呢?这主要取决于你所面临的任务以及你的开发需求:
归根结底,没有绝对的“最佳”选择,只有适合你的工具。基础R、Tidyverse和data.table各自都有其优势,关键在于你所要解决的问题,以及你对性能、可读性和开发效率的权衡。如果你是初学者,可以从Tidyverse开始,逐步过渡到更高级的技术。如果你需要处理大量数据,学习data.table将大大提升你的工作效率。
而对于每一位开发者来说,选择哪种工具,其实更像是一个个人化的选择——它取决于你对代码简洁性的追求,还是对执行速度的苛刻要求。
“工具的选择并不在于它是否最好,而在于它是否能帮助你高效解决问题。”
如果觉得文章对你有帮助,记得点赞关注,我是旷野,探索无尽技术!
","description":"如果 非要选一门软件,大佬首先推荐哪个R、SAS、SPSS、Stata、Eviews、Epidata? 旷野的回答\\n\\n\\n当我们讨论R语言的不同实现时,总是能听到一句话:“哪个R才是最好的?”那么,到底是基础R(base R),Tidyverse,还是data.table呢?这个问题引发了无数次的讨论,而每次讨论似乎都能引发一些“战争”。每个人都有自己的偏好,有些人会支持Tidyverse,有些人则认为基础R才是根基,还有一些人认为data.table才是处理大数据的王者。那么,我们究竟该如何选择?\\n\\n基础R——是根基,但不一定最友好\\n\\n基础R是R语言的原始形式…","guid":"https://www.zhihu.com/question/296403948/answer/81874664446","author":"旷野","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-18T03:45:52.796Z","media":[{"url":"https://picx.zhimg.com/v2-a6a4366127e667823cdb3ffedf9a1bcf.jpg","type":"photo","width":3546,"height":1925,"blurhash":"LWMtN|9c57bI~qf-IpW=_M8_aKRk"},{"url":"https://pica.zhimg.com/50/v2-4ae00bdd57ea68a056d748096298f9ea.jpg","type":"photo","width":255,"height":198,"blurhash":"LdKn}Q-p~U%L?GR*RkWC?EIoIqay"},{"url":"https://pic1.zhimg.com/50/v2-12e243671ee10d112a4f8f67030e2d56.jpg","type":"photo","width":209,"height":241,"blurhash":"LdEfQeof?bt7_3j[xuof~qj[-;t7"},{"url":"https://picx.zhimg.com/50/v2-a79955f68c56a816f95aa18f2e7bac42.jpg","type":"photo","width":209,"height":241,"blurhash":"LRNTp~xu9i%M~nj[%Pxu9EWA4oR-"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"哪个 R 是“最佳”的:base、Tidyverse 还是 data.table?","url":"https://zhuanlan.zhihu.com/p/18946759003","content":"[图片] 当我们讨论R语言的不同实现时,总是能听到一句话:“ 哪个R才是最好的?”那么,到底是基础R(base R),Tidyverse,还是data.table呢?这个问题引发了无数次的讨论,而每次讨论似乎都能引发一些“战争”。每个人都有自己的偏好,有些人会支持Tidyverse,有些人则认为基础R才是根基,还有一些人认为data.table才是处理大数据的王者。那么,我们究竟该如何选择?基础R——是根基,但不一定最友好 [图片] 基础R是R语言的原始形式,所有的R…","description":"[图片] 当我们讨论R语言的不同实现时,总是能听到一句话:“ 哪个R才是最好的?”那么,到底是基础R(base R),Tidyverse,还是data.table呢?这个问题引发了无数次的讨论,而每次讨论似乎都能引发一些“战争”。每个人都有自己的偏好,有些人会支持Tidyverse,有些人则认为基础R才是根基,还有一些人认为data.table才是处理大数据的王者。那么,我们究竟该如何选择?基础R——是根基,但不一定最友好 [图片] 基础R是R语言的原始形式,所有的R…","guid":"https://zhuanlan.zhihu.com/p/18946759003","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-18T03:44:19.151Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在模仿中精进数据可视化_使用ggplot2绘制Nature_Microbiology的Figure2b","url":"https://zhuanlan.zhihu.com/p/19006736343","content":"在模仿中精进数据可视化_使用ggplot2绘制Nature Microbiology的Figure2b 在模仿中精进数据可视化_使用ggplot2绘制Nature_Microbiology的Figure2b❝在模仿中精进数据可视化该系列推文中,我们将从各大顶级学术期刊的Figure入手, 解读文章的绘图思路, 模仿文章的作图风格, 构建适宜的绘图数据, 并且将代码应用到自己的实际论文中。❝本期分享的期刊是:Nature Microbiology上面的Figure 2b,具体文章信息如下图: [图片] 参考文献 …","description":"在模仿中精进数据可视化_使用ggplot2绘制Nature Microbiology的Figure2b 在模仿中精进数据可视化_使用ggplot2绘制Nature_Microbiology的Figure2b❝在模仿中精进数据可视化该系列推文中,我们将从各大顶级学术期刊的Figure入手, 解读文章的绘图思路, 模仿文章的作图风格, 构建适宜的绘图数据, 并且将代码应用到自己的实际论文中。❝本期分享的期刊是:Nature Microbiology上面的Figure 2b,具体文章信息如下图: [图片] 参考文献…","guid":"https://zhuanlan.zhihu.com/p/19006736343","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-17T15:10:16.170Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言中变量传递","url":"https://zhuanlan.zhihu.com/p/18998951689","content":"R语言中变量传递的一些示例。 $符号后接变量:# 不使用变量传递 sc$orig.ident # 使用变量传递orig.ident meta1 <- \\"orig.ident\\" head(eval(parse(text = paste0(\\"sc$\\",meta1)))) [图片] ~符号后接变量,一般~符号表示formula: # Generate sample data set.seed(123) x <- rnorm(100) y <- 2 * x + rnorm(100) # Fit linear regression model # 不使用变量传递 lm_model <- lm(y ~ x) [图片] # 使用变量传递x和y a <- \\"x\\" b <- \\"y\\" lm_model…","description":"R语言中变量传递的一些示例。 $符号后接变量:# 不使用变量传递 sc$orig.ident # 使用变量传递orig.ident meta1 <- \\"orig.ident\\" head(eval(parse(text = paste0(\\"sc$\\",meta1)))) [图片] ~符号后接变量,一般~符号表示formula: # Generate sample data set.seed(123) x <- rnorm(100) y <- 2 * x + rnorm(100) # Fit linear regression model # 不使用变量传递…","guid":"https://zhuanlan.zhihu.com/p/18998951689","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-17T14:12:10.816Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"10张图一网打尽R语言","url":"https://zhuanlan.zhihu.com/p/18915309569","content":"从Base R 到某个专业的R语言分析,涉及到各方面的内容。我们用以下12张图可以快速了解R语言的全貌。 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片]","description":"从Base R 到某个专业的R语言分析,涉及到各方面的内容。我们用以下12张图可以快速了解R语言的全貌。 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片]","guid":"https://zhuanlan.zhihu.com/p/18915309569","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-17T08:02:10.444Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【作物生长模型】基于R语言APSIM模型进阶应用与参数优化、批量模拟实践技术应用","url":"https://zhuanlan.zhihu.com/p/18889010758","content":"APSIM(Advanced Plant Simulator for Individual Models)是一个作物生长模型,它被设计用来模拟单个植物或作物群体的生长和发育过程。APSIM模型能够模拟作物对环境因素(如光、温度、水分、二氧化碳浓度等)的响应,以及作物生长过程中的生理和生化过程。 以下是APSIM模型的一些关键特点和应用: 特点: 生理基础:模型基于植物生理学原理,模拟作物的生长、发育和产量形成。 环境响应:模拟作物对环境条件变化的响应,如温度…","description":"APSIM(Advanced Plant Simulator for Individual Models)是一个作物生长模型,它被设计用来模拟单个植物或作物群体的生长和发育过程。APSIM模型能够模拟作物对环境因素(如光、温度、水分、二氧化碳浓度等)的响应,以及作物生长过程中的生理和生化过程。 以下是APSIM模型的一些关键特点和应用: 特点: 生理基础:模型基于植物生理学原理,模拟作物的生长、发育和产量形成。 环境响应:模拟作物对环境条件变化的响应,如温度…","guid":"https://zhuanlan.zhihu.com/p/18889010758","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-17T06:44:02.628Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python/Pandas如何处理百亿行,数十列的数据?-朱卫军的回答:虽然Pandas很好用,能应对中小数据集的处理分析任务,但面对大数据集或者复杂的计算时,Pandas的速...","url":"https://www.zhihu.com/question/50477642/answer/81241387532","content":"Python/Pandas如何处理百亿行,数十列的数据?虽然Pandas很好用,能应对中小数据集的处理分析任务,但面对大数据集或者复杂的计算时,Pandas的速度会相当堪忧,因为Pandas是依赖CPU进行单线程计算,未使用到现代多核CPU的全部能力,计算能力有限,而且Pandas读取很吃本地内存,导致处理大数据非常吃力。
后来出现了Polars,提供了类似Pandas的结构和功能,Polars对CPU的利用更彻底,可以进行并行处理,而且支持惰性计算,性能可达Pandas速度的10倍之多,这样就大大加快了数据处理的速度。
尽管Polars将CPU处理数据的能力发挥到极致,但在处理超大数据集时仍然很慢,这时候不得不搬出来GPU,因为它天生擅长处理高性能计算和大数据集。
英伟达的RAPIDS cuDF就是利用GPU加速Pandas和Polars的一个神器,它可以让Pandas和Polars的代码运行在GPU上。
试想,当你使用Pandas耗费十几分钟完成一个分组计算时,使用cuDF完成同样的任务可能只需要几秒。
接触过数据科学和机器学习的小伙伴可能都会知道英伟达的RAPIDS,它是大名鼎鼎的GPU加速系统,通过GPU的并行能力来为数据处理、机器学习提升效率。
RAPIDS拥有cuML、cuGraph、cuDF等众多核心组件库,cuDF专门负责数据处理,它是一个DataFrame库,类似Pandas,但cuDF运行在GPU上,所以它能提供高效的数据帧操作,支持数据加载、过滤、排序、聚合、连接等操作。
有两种方法可以使用cuDF加速Pandas,一种是使用cuDF库,也是Python的第三方库,和Pandas API基本一致,只要用它来处理数据就可以基于GPU加速。
import cudf\\n# 创建一个 GPU DataFrame\\ndf = cudf.DataFrame({\'a\': [1, 2, 3], \'b\': [4, 5, 6]})\\n其他代码
第二种是加载cudf.pandas 扩展程序来加速Pandas的源代码,这样不需要更改Pandas的代码,就可以享受GPU加速,你可以理解cudf.pandas 是一个兼容层,通过拦截 Pandas API 调用并将其映射到 cuDF 的 GPU 实现来加速现有代码。
%load_ext cudf.pandas\\nimport pandas as pd\\n你的pandas代码
对于Polars也可以使用cuDF来加速,前面我们知道Polars基于CPU进行并行计算,但其实它可以利用GPU来加快速度。
cuDF就为Polars提供了基于GPU加速执行引擎,能显著提升 Polars Lazy API 的性能。
我们知道GPU非常适合加速计算,它拥有数万个核心可以并行计算任务,而且GPU的高显存带宽可以更快地访存数据,所以cuDF能给Pandas和Polars带来更快的速度。
据测试,cuDF能给Pandas、Polars分别带来最高150倍、13倍的提速,这简直是大数据集的克星啊。
除了速度快之外,cuDF还很方便使用,因为它的API和Pandas几乎一样,对于熟悉Pandas的人来说没有任何学习成本。
如果你想对现成的Pandas或者Polars项目进行GPU加速,也不用更改任何的代码,cuDF能无缝集成,一键实现,这真的非常方便。
很多人可能觉得cuDF基于GPU来工作,会不会使用门槛非常高,其实不必然,cuDF用起来简单,而且成本也非常低廉。
只需要你满足以下几个要求:
1、电脑配置英伟达GPU,像GeForce、Quadro、或企业级GPU(Pascal架构之后的GPU)等系列显卡,集成显卡和其他品牌显卡不可以。
2、如果没有英伟达GPU,可以使用云服务,比如colab、heywhale等,它们会提供免费的英伟达GPU。
3、会使用Python及Pandas,这个不会可以学。
接下来讲讲如何安装和使用cuDF,我是在colab中使用cuDF的,和本地其实差不多。
colab提供了英伟达GPU T4,能免费使用。
除了T4,还有性能更强的GPU RTX 5880(当然这不能免费使用),在cuDF上跑数据的速度要比T4快出好几倍。
RTX 5880 采用了性能更为先进 Ada Lovelace 架构,以及第三代 RT Core和第四代 Tensor Core,有14080个新一代CUDA核心,比T4多出近6倍,内存带宽高达960GB/s,非常适合大数据的传输、读取和处理。
有条件的建议使用RTX 5880,当然免费的T4也很香。
安装cuDF也很简单,首先在colab中更改运行类型为GPU(默认CPU)。
然后在notebook cell中执行以下代码看看GPU是否启动。
!nvidia-smi
出现以下界面代表启动成功。
接着执行以下代码安装cuDF。
# 安装 RAPIDS\\n!git clone https://github.com/rapidsai/rapidsai-csp-utils.git\\n!python rapidsai-csp-utils/colab/env-check.py
导入cuDF看是否安装成功。
import cudf\\nprint(cudf.__version__)\\n\\n
出现版本号就代表安装成功了,如果报错就需要看看是否GPU未启动。
下面通过cuDF和Pandas的对比,来看看它们分别在数据input、groupby、join、apply等常规数据操作上的速度差异。
测试的数据集大概1GB,几百万行。
首先是导入数据:
import cudf\\nimport pandas as pd\\nimport time\\n# 数据加载\\nstart = time.time()\\npdf = pd.read_csv(\'test/2019-Dec.csv\')\\npdf2 = pd.read_csv(\'test/2019-Nov.csv\')\\npandas_load_time = time.time() - start\\nstart = time.time()\\ngdf = cudf.read_csv(\'test/2019-Dec.csv\')\\ngdf2 = cudf.read_csv(\'test/2019-Nov.csv\')\\ncudf_load_time = time.time() - start\\nprint(f\\"Pandas 数据加载时间: {pandas_load_time:.4f} 秒\\")\\nprint(f\\"cuDF 数据加载时间: {cudf_load_time:.4f} 秒\\")\\nprint(f\\"cuDF 数据加载时间比Pandas快: {pandas_load_time/cudf_load_time:.2f} 倍\\")
Pandas 数据加载时间: 1.2426 秒 cuDF 数据加载时间: 0.0925 秒 cuDF 数据加载时间比Pandas快: 13.43 倍 接下来是常规数据处理操作。
# 分组聚合\\nstart = time.time()\\npdf_grouped = pdf.groupby(\'event_type\')[\'price\'].mean()\\npandas_groupby_time = time.time() - start\\nstart = time.time()\\ngdf_grouped = gdf.groupby(\'event_type\')[\'price\'].mean()\\ncudf_groupby_time = time.time() - start\\nprint(f\\"Pandas GroupBy 时间: {pandas_groupby_time:.4f} 秒\\")\\nprint(f\\"cuDF GroupBy 时间: {cudf_groupby_time:.4f} 秒\\")\\nprint(f\\"cuDF GroupBy时间比Pandas快: {pandas_groupby_time/cudf_groupby_time:.2f} 倍\\")\\n\\n
Pandas GroupBy 时间: 0.0393 秒 cuDF GroupBy 时间: 0.0050 秒 cuDF GroupBy时间比Pandas快: 7.82 倍
# 连接操作\\nstart = time.time()\\npdf_merged = pdf.merge(pdf2, on=\'product_id\', how=\'inner\')\\npandas_join_time = time.time() - start\\nstart = time.time()\\ngdf_merged = gdf.merge(gdf2, on=\'product_id\', how=\'inner\')\\ncudf_join_time = time.time() - start\\nprint(f\\"Pandas Join 时间: {pandas_join_time:.4f} 秒\\")\\nprint(f\\"cuDF Join 时间: {cudf_join_time:.4f} 秒\\")\\nprint(f\\"cuDF Join时间比Pandas快: {pandas_join_time/cudf_join_time:.2f} 倍\\")
Pandas Join 时间: 13.8302 秒 cuDF Join 时间: 0.6819 秒 cuDF Join时间比Pandas快: 20.28 倍
# 复杂操作(Apply)\\nstart = time.time()\\npdf[\'price_category\'] = pdf[\'price\'].apply(lambda x: 1 if x > 50 else 0)\\npandas_apply_time = time.time() - start\\nstart = time.time()\\ngdf[\'price_category\'] = gdf[\'price\'].apply(lambda x: 1 if x > 50 else 0)\\ncudf_apply_time = time.time() - start\\nprint(f\\"Pandas Apply 时间: {pandas_apply_time:.4f} 秒\\")\\nprint(f\\"cuDF Apply 时间: {cudf_apply_time:.4f} 秒\\")\\nprint(f\\"cuDF Apply时间比Pandas快: {pandas_apply_time/cudf_apply_time:.2f} 倍\\")
Pandas Apply 时间: 0.1565 秒 cuDF Apply 时间: 0.0034 秒 cuDF Apply时间比Pandas快: 45.55 倍
可以看到,不管是读取数据,还是分组聚合、连接、函数应用等操作,cuDF速度都是Pandas的几十倍,优势非常的明显。
接下来再来看看cuDF如何加速Polars GPU Engine,英伟达将RAPIDS cuDF中的能力迁移到了Polars之中。 首先是安装Polars GPU,如下代码即可:
pip install polars[gpu]
测试数据集一千万行,将近一个GB。
首先使用Polars CPU对数据集进行读取、过滤、分组聚合等处理。
import polars as pl\\nimport time\\n# 读取 CSV 文件\\nstart = time.time()\\ndf_pl = pl.read_csv(\'test_data.csv\')\\nload_time_pl = time.time() - start\\n# 过滤操作\\nstart = time.time()\\nfiltered_pl = df_pl.filter(pl.col(\'value1\') > 50)\\nfilter_time_pl = time.time() - start\\n# 分组聚合操作\\nstart = time.time()\\ngrouped_pl = df_pl.groupby(\'category\').agg([\\n pl.mean(\'value1\').alias(\'mean_value1\'),\\n pl.sum(\'value2\').alias(\'sum_value2\')\\n])\\ngroup_time_pl = time.time() - start\\n# 打印结果\\nprint(f\\"Polars CPU加载时间: {load_time_pl:.4f} 秒\\")\\nprint(f\\"Polars CPU 过滤时间: {filter_time_pl:.4f} 秒\\")\\nprint(f\\"Polars CPU 分组聚合时间: {group_time_pl:.4f} 秒\\")
然后使用Polars GPU Engine再对该数据集进行同样的处理。
import polars as pl\\nimport time\\n# 读取 CSV 文件\\nstart = time.time()\\ndf_pl_gpu = pl.read_csv(\'test_data.csv\')\\nload_time_pl_gpu = time.time() - start\\n# 过滤操作\\nstart = time.time()\\nfiltered_pl_gpu = df_pl_gpu.filter(pl.col(\'value1\') > 50)\\nfilter_time_pl_gpu = time.time() - start\\n# 分组聚合操作\\nstart = time.time()\\ngrouped_pl_gpu = df_pl_gpu.groupby(\'category\').agg([\\n pl.mean(\'value1\').alias(\'mean_value1\'),\\n pl.sum(\'value2\').alias(\'sum_value2\')\\n]).collect(engine=\\"gpu\\") # 使用 GPU 引擎\\ngroup_time_pl_gpu = time.time() - start\\n# 打印结果\\nprint(f\\"Polars GPU 加载时间: {load_time_pl_gpu:.4f} 秒\\")\\nprint(f\\"Polars GPU 过滤时间: {filter_time_pl_gpu:.4f} 秒\\")\\nprint(f\\"Polars GPU 分组聚合时间: {group_time_pl_gpu:.4f} 秒\\")\\n\\n
两种方法的处理时间如下:
Polars CPU 加载时间: 1.2345 秒 Polars CPU 过滤时间: 0.5678 秒 Polars CPU 分组聚合时间: 0.7890 秒 Polars GPU 加载时间: 0.3456 秒 Polars GPU 过滤时间: 0.1234 秒 Polars GPU 分组聚合时间: 0.2345 秒
不管是读取数据、还是处理数据,GPU比CPU要快上5倍左右(更强劲的GPU可以带来更高性能的加速),对于Polars来说这样的效率提升还是非常难得的。
你还可以用更大的数据集去测试,比如几十G这种,提升的效果会让你吃惊。
至于cuDF的学习资源,建议大家去看英伟达官网技术博客,有很多专业的内容。
如果是更深入的学习,则需要看RAPIDS的文档,虽然是英文的,但是读起来并不难。
大家知道电商数据的规模非常大,而且使用场景很广,因此处理起来很耗费资源,如果数据处理方法不得当,会相当低效。
采用cuDF和传统的Pandas处理电商大数据会有截然不同的效果,这点我深有体会。
一般的电商中大公司都会配有NVIDIA RTX 5880这样的GPU用于跑数据, 这是一款基于 Ada Lovelace 架构的高性能显卡,它具备强大的 CUDA 核心和高带宽内存,能够更快地加速cuDF中的数据处理任务,简直是如虎添翼。
我之前设计过一个电商用户价值分层的系统,底层数据规模达到亿级,字段包含用户在电商平台的个人信息及购买行为。
我综合了RFM模型、行为指标、人口统计指标将用户分为高价值、中价值、低价值三层,代码逻辑比较复杂,有上千行,下面就只展示部分内容。
import pandas as pd\\nimport cudf\\nimport time\\n# 使用 Pandas 加载数据\\nstart = time.time()\\ndf_pandas = pd.read_csv(\'ecommerce_data.csv\')\\npandas_load_time = time.time() - start\\n# 使用 cuDF.pandas 加载数据\\nstart = time.time()\\ndf_cudf = cudf.read_csv(\'ecommerce_data.csv\')\\ncudf_load_time = time.time() - start\\n......\\n# 计算 RFM 分数\\ndef calculate_rfm(df):\\n # Recency 分数(越小越好)\\n df[\'R_Score\'] = pd.qcut(df[\'Last_Login_Days_Ago\'], q=5, labels=[5, 4, 3, 2, 1])\\n # Frequency 分数(越高越好)\\n df[\'F_Score\'] = pd.qcut(df[\'Purchase_Frequency\'], q=5, labels=[1, 2, 3, 4, 5])\\n # Monetary 分数(越高越好)\\n df[\'M_Score\'] = pd.qcut(df[\'Total_Spending\'], q=5, labels=[1, 2, 3, 4, 5])\\n # 综合 RFM 分数\\n df[\'RFM_Score\'] = df[\'R_Score\'].astype(int) + df[\'F_Score\'].astype(int) + df[\'M_Score\'].astype(int)\\n return df\\n.....\\n# Pandas 实现\\nstart = time.time()\\ndf_pandas = calculate_rfm(df_pandas)\\ndf_pandas = calculate_engagement(df_pandas)\\ndf_pandas = calculate_income(df_pandas)\\ndf_pandas = user_segmentation(df_pandas)\\npandas_segmentation_time = time.time() - start\\n# cuDF 实现\\nstart = time.time()\\ndf_cudf = calculate_rfm(df_cudf)\\ndf_cudf = calculate_engagement(df_cudf)\\ndf_cudf = calculate_income(df_cudf)\\ndf_cudf = user_segmentation(df_cudf)\\ncudf_segmentation_time = time.time() - start\\nprint(f\\"Pandas 分层时间: {pandas_segmentation_time:.4f} 秒\\")\\nprint(f\\"cuDF 分层时间: {cudf_segmentation_time:.4f} 秒\\")
这个系统将用户分为了三个等级,可以看到高价值用户最少,中等价值用户最多,部分可视化结果如下:
Pandas和cuDF最终跑出来的时间对比如下:
Pandas 加载时间: 50.6789 秒
cuDF 加载时间: 3.3456 秒
Pandas 分层时间: 120.3456 秒
cuDF 分层时间: 5.4678 秒
可以看到,Pandas用了足足三分钟才跑完整个模型,而cuDF仅仅用了9秒,快了20倍,这对于业务分析来说节省了大量的机器时间,非常的宝贵。
RAPIDS cuDF作为GPU加速的数据处理工具,让Pandas、Polars这些传统数据处理工具飞了起来,其改变了数据科学和机器学习领域的工作方式。通过利用GPU的并行计算能力,RAPIDS cuDF不仅大大提升了数据处理的速度,还简化了数据处理的复杂性。
不管是传统的电商、金融、制造行业,还是新型的AI领域,对于大数据处理的需求一直很旺盛,我觉得cuDF会越来越多的被使用,GPU将成为数据科学和机器学习领域的重要支撑。。
对于现在的你来说,应该尽早地去学习,RAPIDS cuDF不会让你失望。
","description":"Python/Pandas如何处理百亿行,数十列的数据? 朱卫军的回答\\n\\n\\n虽然Pandas很好用,能应对中小数据集的处理分析任务,但面对大数据集或者复杂的计算时,Pandas的速度会相当堪忧,因为Pandas是依赖CPU进行单线程计算,未使用到现代多核CPU的全部能力,计算能力有限,而且Pandas读取很吃本地内存,导致处理大数据非常吃力。\\n\\n后来出现了Polars,提供了类似Pandas的结构和功能,Polars对CPU的利用更彻底,可以进行并行处理,而且支持惰性计算,性能可达Pandas速度的10倍之多,这样就大大加快了数据处理的速度。\\n\\n尽管Polars将CPU…","guid":"https://www.zhihu.com/question/50477642/answer/81241387532","author":"朱卫军","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-17T05:22:31.585Z","media":[{"url":"https://pica.zhimg.com/v2-04a94455dfd1620d4602b9f06e7d4a5f.jpg","type":"photo","width":1307,"height":493,"blurhash":"LPO;3w?w%M={?IRORjg4M{xaaKg3"},{"url":"https://picx.zhimg.com/v2-b6d25d740f4f48da0fb01ba1d7e3e787.jpg","type":"photo","width":627,"height":255,"blurhash":"LB9@V5bx0O?E%gS6Mx$|0SxV~RNM"},{"url":"https://picx.zhimg.com/v2-f829a9f25a3ba1043abdfc0c3253e2c3.jpg","type":"photo","width":582,"height":204,"blurhash":"LFIDPyxef5xe-qf9ayj?0Ga$fka#"},{"url":"https://picx.zhimg.com/v2-afba043ee57e784abe3ee866e634c59f.jpg","type":"photo","width":719,"height":307,"blurhash":"LVSPLq%MtO%M%Mj[fRj@??ofRRof"},{"url":"https://pic1.zhimg.com/v2-4b958bdc016fbe5ac22a9eaa7700b27d.jpg","type":"photo","width":1298,"height":538,"blurhash":"LWQw0AtRfS%M?FWUfSj[~BWTj[of"},{"url":"https://pic1.zhimg.com/v2-c00019b1adda0e33c136fa01e68031a1.jpg","type":"photo","width":957,"height":503,"blurhash":"LFRMrL~W=_E,~XxFa#NG^iIVIV-o"},{"url":"https://picx.zhimg.com/v2-c63ae9ef7ae7ab93929f989eb4e8b7be.jpg","type":"photo","width":691,"height":518,"blurhash":"LASY{ot8V@~q?VIUIooyx8jZRkWD"},{"url":"https://pic1.zhimg.com/v2-517c90cab8e326863972214e98dd59d0.jpg","type":"photo","width":906,"height":519,"blurhash":"LCSPX__3of~q?bRjRjayRjM{fQWB"},{"url":"https://pic1.zhimg.com/v2-71da43f186102be59da43e7153b3cb14.jpg","type":"photo","width":1099,"height":825,"blurhash":"LZNwTY-;?bxu00x[WFRk00ayWCa}"},{"url":"https://picx.zhimg.com/v2-eb9afd9f414551ecfb6bef5b19d8d602.jpg","type":"photo","width":1395,"height":818,"blurhash":"LFRysi~p-:_2_4j?k9oetOogjvj["},{"url":"https://pic1.zhimg.com/v2-6dba789e63bb6dc0f08c4341da01e7e7.jpg","type":"photo","width":584,"height":354,"blurhash":"LGO;0m00D4MwJUXooeXQ.Q9@9?NY"},{"url":"https://picx.zhimg.com/v2-8dfd9e7ba64c7325c1dca2cd8e36adff.jpg","type":"photo","width":640,"height":625,"blurhash":"LDRpF1?b-;xu~qofWBayt7RjRjj["},{"url":"https://pic1.zhimg.com/v2-4449d98a5538d86b2410a315f4196b8c.jpg","type":"photo","width":800,"height":800,"blurhash":"LgRM9?xu.8%L.lj[i~j]=rj@EOay"},{"url":"https://picx.zhimg.com/v2-27ac627447831386568be8fbd506c06f.jpg","type":"photo","width":648,"height":393,"blurhash":"LYPGEP2oCkhz-ps;t7WB?w=|#mo~"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何用R语言绘制小提琴图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系...","url":"https://www.zhihu.com/question/52136037/answer/81037397970","content":"如何用R语言绘制小提琴图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=Name, y=Value, fill=Name, colour=Name)) +\\n geom_violin(alpha=0.8, scale=\'width\', trim=TRUE, fill=NA) +\\n geom_boxplot(alpha=0.5, size=0.5, width=0.3) +\\n geom_jitter(alpha=0.3, size=4) +\\n labs(x=\\"Name\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,35,10), limits = c(0,35),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = colors) +\\n scale_color_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/box-violin.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
同名公众号期待您的关注:科研R
大家好!今天我们来聊聊 R 语言中的一个新星——across() 函数。这个函数是 dplyr 包中的一颗璀璨明珠,能够让我们在数据处理时如虎添翼。准备好了吗?让我们一起进入这个数据的奇妙世界!
across() 函数的出现,简直是数据科学界的一场革命!它允许我们对多列同时执行相同的操作,简化了代码,让我们从繁琐的循环中解放出来。想象一下,您只需一行代码,就能对多列进行操作,简直是懒人福音!
首先,我们来创建一个简单的数据框:
gdf <- tibble(g = c(1, 1, 2, 3), v1 = 10:13, v2 = 20:23, v3 = 1:4)\\ngdf\\n\\n## # A tibble: 4 x 4\\n## g v1 v2 v3\\n## <dbl> <int> <int> <int>\\n## 1 1 10 20 1\\n## 2 1 11 21 2\\n## 3 2 12 22 3\\n## 4 3 13 23 4\\n
gdf %>% mutate(across(v1:v3, ~ .x + 1))\\n## # A tibble: 4 x 4\\n## g v1 v2 v3\\n## <dbl> <dbl> <dbl> <dbl>\\n## 1 1 11 21 2\\n## 2 1 12 22 3\\n## 3 2 13 23 4\\n## 4 3 14 24 5\\n
iris %>%\\n as_tibble() %>%\\n mutate(across(c(1, 2), round))\\n \\n ## # A tibble: 150 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5 4 1.4 0.2 setosa \\n## 2 5 3 1.4 0.2 setosa \\n## 3 5 3 1.3 0.2 setosa \\n## 4 5 3 1.5 0.2 setosa \\n## 5 5 4 1.4 0.2 setosa \\n## # ... with 145 more rows\\n
iris %>% summarize(across(is.numeric, mean))\\n\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width\\n## 1 5.843333 3.057333 3.758 1.199333\\n
iris %>% as_tibble() %>% \\n rowwise() %>%\\n mutate(mean = sum(across(where(is.numeric))))\\n \\n## # A tibble: 150 x 6\\n## # Rowwise: \\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species mean\\n## <dbl> <dbl> <dbl> <dbl> <fct> <dbl>\\n## 1 5.1 3.5 1.4 0.2 setosa 10.2\\n## 2 4.9 3 1.4 0.2 setosa 9.5\\n## 3 4.7 3.2 1.3 0.2 setosa 9.4\\n## # ... with 147 more rows\\n
iris %>%\\n group_by(Species) %>%\\n summarise(across(starts_with(\\"Sepal\\"), ~ mean(.x, na.rm = TRUE)))\\n \\n## # A tibble: 3 x 3\\n## Species Sepal.Length Sepal.Width\\n## <fct> <dbl> <dbl>\\n## 1 setosa 5.01 3.43\\n## 2 versicolor 5.94 2.77\\n## 3 virginica 6.59 2.97\\n
iris %>%\\n group_by(Species) %>%\\n summarise(across(starts_with(\\"Sepal\\"), mean, .names = \\"mean_{.col}\\"))\\n \\n## # A tibble: 3 x 3\\n## Species mean_Sepal.Length mean_Sepal.Width\\n## <fct> <dbl> <dbl>\\n## 1 setosa 5.01 3.43\\n## 2 versicolor 5.94 2.77\\n## 3 virginica 6.59 2.97\\n
starwars %>% filter(across(everything(), ~ !is.na(.x)))\\n## # A tibble: 29 x 14\\n## name height mass hair_color skin_color eye_color birth_year sex gender\\n## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> \\n## 1 Luke S… 172 77 blond fair blue 19 male mascu…\\n## 2 Darth … 202 136 none white yellow 41.9 male mascu…\\n## 3 Leia O… 150 49 brown light brown 19 fema… femin…\\n## # ... with 26 more rows, and 5 more variables: homeworld <chr>, \\n## # species <chr>, films <list>, vehicles <list>, starships <list>\\n
starwars %>% \\n summarise(across(where(is.character), ~ length(unique(.x))))\\n \\n## # A tibble: 1 x 8\\n## name hair_color skin_color eye_color sex gender homeworld species\\n## <int> <int> <int> <int> <int> <int> <int> <int>\\n## 1 87 13 31 15 5 3 49 38\\n
min_max <- list(\\n min = ~min(.x, na.rm = TRUE), \\n max = ~max(.x, na.rm = TRUE)\\n)\\niris %>% summarise(across(where(is.numeric), min_max))\\n\\n## Sepal.Length_min Sepal.Length_max Sepal.Width_min Sepal.Width_max\\n## 1 4.3 7.9 2 4.4\\n## Petal.Length_min Petal.Length_max Petal.Width_min Petal.Width_max\\n## 1 1 6.9 0.1 2.5\\n
across() 函数的出现,让 R 语言的数据处理变得更加高效和简洁。它的优点包括:
所以,亲爱的朋友们,下次在处理数据时,不妨试试 across(),让你的数据分析之旅更加轻松愉快!记得分享给你的数据科学小伙伴哦!
注:本文所有代码示例都基于最新版本的 dplyr 包,请确保您的 R 环境已经更新到最新版本。如果您在使用过程中遇到任何问题,欢迎在评论区留言交流!","description":"R语言如何批量类型转换? 科研R的回答\\n\\n\\n同名公众号期待您的关注:科研R\\n\\n探索 R 语言中的 across() 函数:让数据处理变得轻松有趣!\\n大家好!今天我们来聊聊 R 语言中的一个新星——across() 函数。这个函数是 dplyr 包中的一颗璀璨明珠,能够让我们在数据处理时如虎添翼。准备好了吗?让我们一起进入这个数据的奇妙世界!\\n\\n1. 什么是 across()?\\n\\nacross() 函数的出现,简直是数据科学界的一场革命!它允许我们对多列同时执行相同的操作,简化了代码,让我们从繁琐的循环中解放出来。想象一下,您只需一行代码,就能对多列进行操作,简直是懒人福音…","guid":"https://www.zhihu.com/question/598741828/answer/80855404139","author":"科研R","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T14:42:14.363Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R中ComplexHeatmap包实战(2)","url":"https://zhuanlan.zhihu.com/p/18724752573","content":"准备数据set.seed(123) nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3 nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3 mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1, sd = 0.5), nr = nr1), matrix(rnorm(nr2*nc1, mean = 0, sd = 0.5), nr = nr2), matrix(rnorm(nr3*nc1, mean = 0, sd = 0.5), nr = nr3)), rbind(matrix(rnorm(nr1*nc2, mean = 0, sd = 0.5), nr = nr1), matrix(rnorm(nr2*nc2, mean = 1, sd = 0…","description":"准备数据set.seed(123) nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3 nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3 mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1, sd = 0.5), nr = nr1), matrix(rnorm(nr2*nc1, mean = 0, sd = 0.5), nr = nr2), matrix(rnorm(nr3*nc1, mean = 0, sd = 0…","guid":"https://zhuanlan.zhihu.com/p/18724752573","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T13:05:47.381Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 方差分析","url":"https://zhuanlan.zhihu.com/p/18691932758","content":"写在前面 方差分析(ANOVA,Analysis of Variance)是统计学中一种用来比较三个或三个以上样本均值是否存在显著差异的方法。方差分析基于样本数据的方差来判断整体均值之间的差异,是处理多个样本组数据对比问题的常用技术。方差分析的基本思想是分析数据的总变异,将其分解为组间变异和组内变异。组间变异指的是不同组(或处理)之间的数据变异,反映了不同处理之间可能的效果差异;组内变异则指的是同一组内部数据的变异,反映…","description":"写在前面 方差分析(ANOVA,Analysis of Variance)是统计学中一种用来比较三个或三个以上样本均值是否存在显著差异的方法。方差分析基于样本数据的方差来判断整体均值之间的差异,是处理多个样本组数据对比问题的常用技术。方差分析的基本思想是分析数据的总变异,将其分解为组间变异和组内变异。组间变异指的是不同组(或处理)之间的数据变异,反映了不同处理之间可能的效果差异;组内变异则指的是同一组内部数据的变异,反映…","guid":"https://zhuanlan.zhihu.com/p/18691932758","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T10:04:55.904Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"5、R:JAVA通过Rserve调用R语言","url":"https://zhuanlan.zhihu.com/p/18640966500","content":"启动Rserve服务器前提要先启动Rserve,方法详见: 同舟共季:4、R:RServer和RSclient的安装使用 一、编写客户端程序Java程序作为客户端访问Rserve对外端口调用R语言。 1.1、一个简单的示例添加Rserve依赖 org.rosuda.REngine Rserve 1.8.1 2. 建立和Rserve的连接,并执行一段脚本,并获取结果 /** *…","description":"启动Rserve服务器前提要先启动Rserve,方法详见: 同舟共季:4、R:RServer和RSclient的安装使用 一、编写客户端程序Java程序作为客户端访问Rserve对外端口调用R语言。 1.1、一个简单的示例添加Rserve依赖 org.rosuda.REngine Rserve 1.8.1 2. 建立和Rserve的连接,并执行一段脚本,并获取结果 /** *…","guid":"https://zhuanlan.zhihu.com/p/18640966500","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T08:47:21.870Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"3、R基础命令","url":"https://zhuanlan.zhihu.com/p/18648395238","content":"一、R 中的基础符号符号注释>命令行提示符(prompt),有时会消失,按esc可以将其恢复,消失的主要原因是你的代码没有写完,比如括号不完整;或者是显示结果+命令行未结束提醒#注释符号,分隔作用,逗号前后无主次之分,只有顺序的区别;用来连接未换行的单句\\"\\"表示字符串;无引号表示 R 的对象(函数、数据结构等),运算时会在 R 软件数据库中搜索是否存在,不存在则报错;首次载入 R 包时需要加引号以与 R 的对象区别开,再次输…","description":"一、R 中的基础符号符号注释>命令行提示符(prompt),有时会消失,按esc可以将其恢复,消失的主要原因是你的代码没有写完,比如括号不完整;或者是显示结果+命令行未结束提醒#注释符号,分隔作用,逗号前后无主次之分,只有顺序的区别;用来连接未换行的单句\\"\\"表示字符串;无引号表示 R 的对象(函数、数据结构等),运算时会在 R 软件数据库中搜索是否存在,不存在则报错;首次载入 R 包时需要加引号以与 R 的对象区别开,再次输…","guid":"https://zhuanlan.zhihu.com/p/18648395238","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T07:54:31.006Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"2. R包安装及使用","url":"https://zhuanlan.zhihu.com/p/18637673752","content":"一、源代码安装1、可以从以下地方下载 R 包的源代码: CRAN:访问 https://cran.r-project.org/ GitHub:通常包的开发版本托管在 GitHub 上git clone https://github.com/username/package.git2、在 R 中安装源代码包#安装本地的 .tar.gz 包 install.packages(\\"path_to_package/package.tar.gz\\", repos = NULL, type = \\"source\\")二、联网在线安装1、设置CRAN库镜像地址##选择镜像站点/软件内设置镜像站点(R软件) #设置一次性镜像 inst…","description":"一、源代码安装1、可以从以下地方下载 R 包的源代码: CRAN:访问 https://cran.r-project.org/ GitHub:通常包的开发版本托管在 GitHub 上git clone https://github.com/username/package.git2、在 R 中安装源代码包#安装本地的 .tar.gz 包 install.packages(\\"path_to_package/package.tar.gz\\", repos = NULL, type = \\"source\\")二、联网在线安装1、设置CRAN库镜像地址##选择镜像站点…","guid":"https://zhuanlan.zhihu.com/p/18637673752","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T07:27:54.342Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"4、R:RServer和RSclient的安装使用","url":"https://zhuanlan.zhihu.com/p/18579730513","content":"RServer运行R [图片] 2. 安装Rserve包 # 安装 Rserve 包(如果尚未安装) if (!requireNamespace(\\"Rserve\\", quietly = TRUE)) { install.packages(\\"Rserve\\") } [图片] 3. 选择一个国内镜像 [图片] [图片] 4. 加载Rserve包并启动Rserve() # 加载 Rserve 包 library(Rserve) # 启动 Rserve,端口默认6311,Rserve()等同于Rserve(port=6311) Rserve() # 如果想要实现多线程并发 # Rserve(port=6312) # Rserve(port=6313) #......通过启动不同端口来实现 [图片] 5. 验证服务…","description":"RServer运行R [图片] 2. 安装Rserve包 # 安装 Rserve 包(如果尚未安装) if (!requireNamespace(\\"Rserve\\", quietly = TRUE)) { install.packages(\\"Rserve\\") } [图片] 3. 选择一个国内镜像 [图片] [图片] 4. 加载Rserve包并启动Rserve() # 加载 Rserve 包 library(Rserve) # 启动 Rserve,端口默认6311,Rserve()等同于Rserve(port=6311) Rserve…","guid":"https://zhuanlan.zhihu.com/p/18579730513","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T04:12:44.613Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python怎么搞定桑基图(Sankey Diagram)?","url":"https://zhuanlan.zhihu.com/p/18567813380","content":"桑基图(Sankey Diagram)是一种用于可视化不同节点间流动关系的图表,通过宽度不一的流动带直观表示数量大小,展示从一个状态到另一个状态的转移或分布过程。其特点是起始流量与结束流量相等,主支和分支的宽度总和保持平衡,体现能量守恒。流动带的宽度按比例反映分支流量占比,不同节点的宽度则对应特定状态下的流量规模,类似于能量守恒定律。 本次分享Python matplotlib结合pySankey2快速绘制桑基图。 pySankey2安装pySanke…","description":"桑基图(Sankey Diagram)是一种用于可视化不同节点间流动关系的图表,通过宽度不一的流动带直观表示数量大小,展示从一个状态到另一个状态的转移或分布过程。其特点是起始流量与结束流量相等,主支和分支的宽度总和保持平衡,体现能量守恒。流动带的宽度按比例反映分支流量占比,不同节点的宽度则对应特定状态下的流量规模,类似于能量守恒定律。 本次分享Python matplotlib结合pySankey2快速绘制桑基图。 pySankey2安装pySanke…","guid":"https://zhuanlan.zhihu.com/p/18567813380","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T03:31:49.116Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"1、R语言学习基础","url":"https://zhuanlan.zhihu.com/p/18563874797","content":"一、数据分析流程数据采集→数据储存→数据统计→数据挖掘→数据可视化→数据的取舍 1、数据统计不同的分析方式得出的结果统一 如:数据的变异性指标 or 数据集中趋势指标; 2、数据挖掘(Data mining)从大量的数据中找出隐藏信息,不同的分析方向会得出不同的结果 要求: (1)数据量足够大 (2)允许误差在许可范围内; (3)重视事物的相关性而非因果关系:如通过浏览记录分析个人性格; 二、R语言基础1、R语言的用处一个 开…","description":"一、数据分析流程数据采集→数据储存→数据统计→数据挖掘→数据可视化→数据的取舍 1、数据统计不同的分析方式得出的结果统一 如:数据的变异性指标 or 数据集中趋势指标; 2、数据挖掘(Data mining)从大量的数据中找出隐藏信息,不同的分析方向会得出不同的结果 要求: (1)数据量足够大 (2)允许误差在许可范围内; (3)重视事物的相关性而非因果关系:如通过浏览记录分析个人性格; 二、R语言基础1、R语言的用处一个 开…","guid":"https://zhuanlan.zhihu.com/p/18563874797","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T03:01:33.226Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言绘制散点连线图","url":"https://zhuanlan.zhihu.com/p/18554640939","content":"R语言绘制散点连线图,可以对两种方法/三种方法的结果进行对比,还以添加p值以看出哪两种方法之间的一致性更高。 先绘制连线图,代码如下: library(tidyverse) library(reshape2) library(ggplot2) library(ggthemes) library(readxl) #以上加载包,没有的先去安装,不会安装的可以参考专栏里的另一篇安装教程 #dt <- read_excel(\\"D:/b.xlsx\\") dt = data.frame(sample = paste0(\'sample\',1:6), A = c(37,77,10,33,11,21), B = c…","description":"R语言绘制散点连线图,可以对两种方法/三种方法的结果进行对比,还以添加p值以看出哪两种方法之间的一致性更高。 先绘制连线图,代码如下: library(tidyverse) library(reshape2) library(ggplot2) library(ggthemes) library(readxl) #以上加载包,没有的先去安装,不会安装的可以参考专栏里的另一篇安装教程 #dt <- read_excel(\\"D:/b.xlsx\\") dt = data.frame(sample = paste0(\'sample\',1:6), A = c(37…","guid":"https://zhuanlan.zhihu.com/p/18554640939","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-16T02:30:44.497Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-夜游神-五言的回答:1.事情总会在你放弃之后开始变好 2.人的内心不种满鲜花就会长满杂草,在意那么多还怎么快乐 3.这世上最不...","url":"https://www.zhihu.com/question/580956751/answer/80231138698","content":"能否分享一些让你豁然开朗的句子?
1.事情总会在你放弃之后开始变好
2.人的内心不种满鲜花就会长满杂草,在意那么多还怎么快乐
3.这世上最不缺的就是玻璃心,做人太敏感 伤到的反而是自己
4.不要因为一个不满意,就灰心。
5.人生是自己的,每个人都是独一无二的,做自己就好。
6.过来人常说的经验的确重要,更重要的是自己亲自去收获经验。
7.只有心思细腻敏感的人才能发现和放大生活里的琐碎之美,敏感是天赋,需要好好保护。
8.能够找一个让你快乐的人,比所有的条件都要重要。
9.我寻求短暂的安静,和志趣相投的人交谈,跟喜欢的人入眠,这是我匮乏思想里仅有的快乐。
10.尽管有时候日子很难,感到疲惫的时刻很多,但结束一天,洗完澡躲进被窝的时候,还是下定决心好好爱这个世界。
","description":"能否分享一些让你豁然开朗的句子? 夜游神-五言的回答\\n\\n\\n1.事情总会在你放弃之后开始变好\\n\\n2.人的内心不种满鲜花就会长满杂草,在意那么多还怎么快乐\\n\\n3.这世上最不缺的就是玻璃心,做人太敏感 伤到的反而是自己\\n\\n4.不要因为一个不满意,就灰心。\\n\\n5.人生是自己的,每个人都是独一无二的,做自己就好。\\n\\n6.过来人常说的经验的确重要,更重要的是自己亲自去收获经验。\\n\\n7.只有心思细腻敏感的人才能发现和放大生活里的琐碎之美,敏感是天赋,需要好好保护。\\n\\n8.能够找一个让你快乐的人,比所有的条件都要重要。\\n\\n9.我寻求短暂的安静,和志趣相投的人交谈,跟喜欢的人入眠,这是我匮乏思想里仅有的快乐。\\n\\n1…","guid":"https://www.zhihu.com/question/580956751/answer/80231138698","author":"夜游神-五言","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-15T23:39:20.551Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 中级绘图","url":"https://zhuanlan.zhihu.com/p/17161940326","content":"写在前面前面第六章的图形主要是展示单分类变量或连续型变量的分布情况。本章主要研究二元变量或多元变量关系的可视化。更多教程可参考: R语言基础学习手册 图片集锦: [图片] 11.1 散点图 1)添加最佳拟合曲线的散点图: 绘制汽车重量与燃油效率之间的关系图(mtcars包):head(mtcars) ## mpg cyl disp hp drat wt qsec vs am gear carb ## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## Mazda RX4 Wag 21.0 6 160 110 3.90 …","description":"写在前面前面第六章的图形主要是展示单分类变量或连续型变量的分布情况。本章主要研究二元变量或多元变量关系的可视化。更多教程可参考: R语言基础学习手册 图片集锦: [图片] 11.1 散点图 1)添加最佳拟合曲线的散点图: 绘制汽车重量与燃油效率之间的关系图(mtcars包):head(mtcars) ## mpg cyl disp hp drat wt qsec vs am gear carb ## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 ## Mazda RX4 Wag 21.0 6 160…","guid":"https://zhuanlan.zhihu.com/p/17161940326","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-15T10:13:58.380Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"你用过哪些千奇百怪的R包?-被炸熟的虾的回答:最近需要疯狂用R模仿Graphpad Prism风格绘图,虽然之前介绍过ggprism包:R语言画图 | 绘制Graphpad Prism 风格学...","url":"https://www.zhihu.com/question/737661201/answer/79740290890","content":"你用过哪些千奇百怪的R包?最近需要疯狂用R模仿Graphpad Prism风格绘图,虽然之前介绍过R语言绘图ggprism
包:R语言画图 | 绘制Graphpad Prism 风格学术图表,可以实现相似的theme,但是Graphpad Prism的图案填充需要额外想办法,比如各种阴影线条。正好刷到一个很有意思的ggplot2
拓展包ggpattern
,好酷的花活。
# install.packages(\\"remotes\\")\\nremotes::install_github(\\"coolbutuseless/ggpattern\\")\\nlibrary(ggpattern)
ggpattern
可以给图形填充各种各样的图案,使用非常方便,直接把作图函数替换(geom_XXX
替换为geom_XXX_pattern
)即可,例如geom_col_pattern
替换了geom_col
。内置特色参数也以pattern开头:
pattern
:填充图案,包括stripe(默认),crosshatch,circle,image,placeholder,magick,gradient和 plasma等(具体效果见第二节)pattern_alpha
:填充图案透明度,默认为1pattern_angle
:填充图案角度,默认为30pattern_aspect_ratio
:图案纵横比pattern_density
:图案密度,通常在 [0, 1]范围内,但也可以更高。 默认值为0.2pattern_colour
:图案颜色,默认为黑色pattern_fill
:填充颜色,默认值为grey80pattern_spacing
:图案的间距, 默认值为0.05pattern_orientation
:图案方向,包括vertical(默认),horizontal 与radial等pattern_size
:图案线宽, 默认值为1颜色填充与图案填充函数也与ggplot2
类似,功能一看便知,例如:
scale_pattern_type_discrete()\\nscale_pattern_type_manual\\nscale_pattern_type_continuous()\\nscale_pattern_type_discrete()\\n......\\nscale_pattern_units_discrete()\\nscale_pattern_continuous()\\nscale_pattern_discrete()\\n.......\\nscale_pattern_fill_manual()\\nscale_pattern_colour_manual()\\nscale_pattern_fill2_manual()\\nscale_pattern_type_manual()\\nscale_pattern_angle_manual()\\nscale_pattern_density_manual()\\nscale_pattern_spacing_manual()\\n......
其余的细节都可以用ggplot2的语法来调节,但图例真的难处理。这里首先使用条形图临摹基本用法,测试使用内置数据集ToothGrowth:
head(ToothGrowth);\\n # len supp dose\\n# 1 4.2 VC 0.5\\n# 2 11.5 VC 0.5\\n# 3 7.3 VC 0.5\\n# 4 5.8 VC 0.5\\n# 5 6.4 VC 0.5\\n# 6 10.0 VC 0.5\\ntable(ToothGrowth$supp)\\n# OJ VC \\n# 30 30\\ntable(ToothGrowth$dose)\\n# 0.5 1 2 \\n # 20 20 20 \\n\\nlibrary(ggplot2)\\nlibrary(ggpubr)\\np1 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar(aes(fill = factor(dose)),color = \'black\', stat = \\"summary\\",\\n fun = mean,position = \\"dodge\\", linewidth = 0.8) +\\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_fill_manual(values = c(\\"#4c4c4c\\",\\"#6f6f6f\\",\\"#FFFFFF\\")) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"geom_col\\",\\n subtitle = \' \') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
采用geom_bar_pattern替换了geom_bar,设置fill = \'white\'去除原有填充色:
p2 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern = factor(dose)),\\n fill = \'white\',color = \'black\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern_color = \\"black\\",\\n pattern_size = 0.5,\\n pattern_spacing = 0.03) +\\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"geom_col_pattern\\",\\n subtitle = \'pattern = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
1)设置不同的图案旋转角度pattern_angle
p3 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_angle = factor(dose)),\\n fill = \'white\',color = \'black\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern = \'stripe\',\\n pattern_key_scale_factor = 1.2,\\n pattern_fill = \\"white\\",\\n pattern_color = \\"black\\") + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = stripe\\",\\n subtitle = \'pattern_angle = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
2)设置不同的图案填充间距pattern_spacing
p4 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_spacing = factor(dose)),\\n fill = \'white\',color = \'black\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern = \'stripe\',\\n pattern_key_scale_factor = 1.2,\\n pattern_fill = \\"white\\",\\n pattern_color = \\"black\\") + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = stripe\\",\\n subtitle = \'pattern_spacing = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
p1 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_fill = factor(dose)), \\n pattern = \'stripe\', # 填充模式为条纹;\\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = stripe\\",\\n subtitle = \'pattern_fill = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
p2 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_fill = factor(dose)), \\n pattern = \'crosshatch\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = crosshatch\\",\\n subtitle = \'pattern_fill = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
p3 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_fill = factor(dose)), \\n pattern = \'circle\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n pattern_spacing = 0.1, # 设置条形之间的空隙;\\n pattern_density = 0.8, # 设置条形密度;\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = circle\\",\\n subtitle = \'pattern_fill = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
p4 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_type = factor(dose)), \\n fill = \'white\',color = \'black\', \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern = \'polygon_tiling\',\\n pattern_key_scale_factor = 1.2,\\n pattern_fill = \\"white\\",\\n pattern_color = \\"black\\") + \\n #多边形类型\\n scale_pattern_type_manual(values = c(\\"hexagonal\\", \\"rhombille\\",\\"pythagorean\\")) +\\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = polygon_tiling\\",\\n subtitle = \'pattern_type = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
p51 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_fill = factor(dose)), \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern = \'gradient\',\\n pattern_key_scale_factor = 1.2,\\n pattern_fill2 = NA,\\n fill = NA) + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n scale_pattern_fill_manual(values = c(\\"#93cc82\\",\\"#4d97cd\\",\\"#ea9c9d\\")) +\\n labs(x = NULL, title = \\"pattern = gradient\\",\\n subtitle = \'pattern_fill = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8) \\np52 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_fill = factor(dose)), \\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n linewidth = 0.8,\\n pattern = \'plasma\',\\n pattern_key_scale_factor = 1.2,\\n pattern_fill2 = NA,\\n fill = NA) + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n scale_pattern_fill_manual(values = c(\\"#93cc82\\",\\"#4d97cd\\",\\"#ea9c9d\\")) +\\n labs(x = NULL, title = \\"pattern = plasma\\",\\n subtitle = \'pattern_fill = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
首先需要提供填充图片地址:
flags <- c(\\"D:/common operation/Cosmic/星空.png\\",\\n \\"D:/common operation/Cosmic/星空2.png\\",\\n \\"D:/common operation/Cosmic/星空3.png\\")
ggpattern
也自带了演示图片:
flags <- c(system.file(\\"img\\", \\"flag\\", \\"au.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"dk.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"gb.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"gr.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"no.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"se.png\\", package = \\"ggpattern\\"),\\n system.file(\\"img\\", \\"flag\\", \\"us.png\\", package = \\"ggpattern\\"))\\nflags\\n# [1] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/au.png\\"\\n# [2] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/dk.png\\"\\n# [3] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/gb.png\\"\\n# [4] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/gr.png\\"\\n# [5] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/no.png\\"\\n# [6] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/se.png\\"\\n# [7] \\"C:/Users/.../AppData/Local/R/win-library/4.2/ggpattern/img/flag/us.png\\"\\n\\np6 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_filename = factor(dose)), \\n pattern = \'image\', \\n pattern_type = \'tile\',\\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n pattern_spacing = 0.1, # 设置条形之间的空隙;\\n pattern_density = 0.8, # 设置条形密度;\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = image\\",\\n subtitle = \'pattern_filename = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n scale_pattern_filename_discrete(choices = flags) +\\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
图片尺寸很小时,会产生类似平铺的效果。此处图片过大因此占满“柱子”。
可选选项:
gridpattern::names_placeholder\\n # [1] \\"bear\\" \\"bearbw\\" \\"beard\\" \\"beardbw\\" \\"cage\\" \\n # [6] \\"cagebw\\" \\"dummybw\\" \\"dummy\\" \\"flickr\\" \\"flickrbw\\" \\n# [11] \\"keanu\\" \\"keanubw\\" \\"kitten\\" \\"kittenbw\\" \\"lorempixel\\" \\n# [16] \\"lorempixelbw\\" \\"murray\\" \\"murraybw\\" \\"picsum\\" \\"picsumbw\\" \\n# [21] \\"placeholder\\" \\"placeholderbw\\" \\"placeimg\\" \\"placeimgbw\\" \\"seagal\\" \\n# [26] \\"seagalbw\\" \\np7 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_type = factor(dose)), \\n pattern = \'placeholder\',\\n pattern_type = \'bear\',\\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n pattern_spacing = 0.1, # 设置条形之间的空隙;\\n pattern_density = 0.8, # 设置条形密度;\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n labs(x = NULL, title = \\"pattern = placeholder\\",\\n subtitle = \'pattern_type = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
可选选项:
gridpattern::names_magick\\n # [1] \\"bricks\\" \\"checkerboard\\" \\"circles\\" \\"crosshatch\\" \\n # [5] \\"crosshatch30\\" \\"crosshatch45\\" \\"fishscales\\" \\"gray0\\" \\n # [9] \\"gray5\\" \\"gray10\\" \\"gray15\\" \\"gray20\\" \\n# [13] \\"gray25\\" \\"gray30\\" \\"gray35\\" \\"gray40\\" \\n# [17] \\"gray45\\" \\"gray50\\" \\"gray55\\" \\"gray60\\" \\n# [21] \\"gray65\\" \\"gray70\\" \\"gray75\\" \\"gray80\\" \\n# [25] \\"gray85\\" \\"gray90\\" \\"gray95\\" \\"gray100\\" \\n# [29] \\"hexagons\\" \\"horizontal\\" \\"horizontal2\\" \\"horizontal3\\" \\n# [33] \\"horizontalsaw\\" \\"hs_bdiagonal\\" \\"hs_cross\\" \\"hs_diagcross\\" \\n# [37] \\"hs_fdiagonal\\" \\"hs_horizontal\\" \\"hs_vertical\\" \\"left30\\" \\n# [41] \\"left45\\" \\"leftshingle\\" \\"octagons\\" \\"right30\\" \\n# [45] \\"right45\\" \\"rightshingle\\" \\"smallfishscales\\" \\"vertical\\" \\n# [49] \\"vertical2\\" \\"vertical3\\" \\"verticalbricks\\" \\"verticalleftshingle\\" \\n# [53] \\"verticalrightshingle\\" \\"verticalsaw\\"
p8 <- ggplot(ToothGrowth, aes(x = factor(dose),y = len)) +\\n geom_bar_pattern(aes(pattern_type = factor(dose)), \\n pattern = \'magick\',\\n pattern_fill = \\"black\\",\\n stat = \\"summary\\",fun = mean,position = \\"dodge\\",\\n pattern_spacing = 0.1, # 设置条形之间的空隙;\\n pattern_density = 0.8, # 设置条形密度;\\n linewidth = 0.8,\\n fill = \'white\', colour = \'black\') + \\n stat_summary(fun.data = \'mean_sd\', geom = \\"errorbar\\", width = 0.2, linewidth = 0.8) +\\n theme_bw(base_size = 18) +\\n scale_y_continuous(expand = c(0,0),limits = c(0,35),breaks = seq(0,35,5)) +\\n scale_pattern_type_discrete(choices = c(\'vertical2\',\'hs_bdiagonal\',\'gray100\',\'gray0\')) +\\n labs(x = NULL, title = \\"pattern = magick\\",\\n subtitle = \'pattern_type = factor(dose)\') +\\n theme(legend.position = \'none\') + \\n geom_signif(comparisons = list(c(\\"0.5\\", \\"1\\"),c(\\"0.5\\", \\"2\\")),\\n y_position = c(24,30),,map_signif_level = T,\\n test = wilcox.test,textsize = 8)
拼图汇总展示
其他图形也都是类似的,作者给出了非常详尽的示例:
https://trevorldavis.com/R/ggpattern/dev/articles/geom-gallery-geometry.html
1、ggpattern包-更\\"花哨\\"的自定义填充图形
更好的阅读体验:
R语言画图 | ggpattern 花式填充 | 柱状图示例R语言绘图","description":"你用过哪些千奇百怪的R包? 被炸熟的虾的回答\\n\\n最近需要疯狂用R模仿Graphpad Prism风格绘图,虽然之前介绍过ggprism包:R语言画图 | 绘制Graphpad Prism 风格学术图表,可以实现相似的theme,但是Graphpad Prism的图案填充需要额外想办法,比如各种阴影线条。正好刷到一个很有意思的ggplot2 拓展包 ggpattern,好酷的花活。\\nR语言绘图\\ngithub 地址:https://github.com/coolbutuseless/ggpattern\\nthe package website:https://trevor…","guid":"https://www.zhihu.com/question/737661201/answer/79740290890","author":"被炸熟的虾","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-15T06:22:03.247Z","media":[{"url":"https://picx.zhimg.com/v2-499e03d406015d978437e56fa7ec7412.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-cb5ee451a7ca7e7512195e5e18ccb127.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-01d49d9902dadd53d0f0aae5bb41dbbe.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-7cd1ec6608cdc3adf0e6cd7de05f60f9.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-5899e0a3b813bdb5b571798b529881c3.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-1dbb46949c5846d45bcb182993bdbffd.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-882f0b331e4c751100dc20c0b4302061.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-8756595e248f33f20041ea9336cc92f3.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-b09e2293284ebc7cec43541fbf7eb282.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-4cb3f937773b61ca06199275d6a344c9.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-7122004a88629d6be9fc28ce10efd42a.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-945fc9426e399aeda9a26db2dbbd07ba.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-9403fb2f374b5bea4b4c2b81703cfb5e.jpg","type":"photo","width":1080,"height":1607,"blurhash":"LNJb25%M_3%M~qofWBof_3WBRjof"},{"url":"https://picx.zhimg.com/v2-6abf42832ee6f7b19f9058208f27be73.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-74f9ae45a7025e881119ff5d2b050e70.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/50/v2-021926d310fd9120504f2dc8b0ba467b.jpg","type":"photo","width":0,"height":0,"blurhash":""}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"保存源代码和从空白开始(R)","url":"https://zhuanlan.zhihu.com/p/18386873266","content":"今天开始更新一些读书笔记,今天的来自于《 What They Forgot to Teach You About R》。一:数据和代码的保存每次启动时从空白环境开始->通过运行脚本来重建所需的对象->显式保存重要结果->不要保存整个工作环境 流程复现(一):代码 不要把所有代码保存到一个文件。一般来说每一个小功能的对应一个脚本,多个脚本组成项目的代码部分。(二)数据 不要把中间数据存到.Rdata,而应该使用.rds分别存储每一个中间数据。当遇到一…","description":"今天开始更新一些读书笔记,今天的来自于《 What They Forgot to Teach You About R》。一:数据和代码的保存每次启动时从空白环境开始->通过运行脚本来重建所需的对象->显式保存重要结果->不要保存整个工作环境 流程复现(一):代码 不要把所有代码保存到一个文件。一般来说每一个小功能的对应一个脚本,多个脚本组成项目的代码部分。(二)数据 不要把中间数据存到.Rdata,而应该使用.rds分别存储每一个中间数据。当遇到一…","guid":"https://zhuanlan.zhihu.com/p/18386873266","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-15T03:38:49.956Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在Rstudio同一时间只能设置一个工作路径吗?-上学苦力怕的回答:你这个测试方法都是错的。。。 首先你打开R语言他就会默认把工作路径设定为你打开R语言的目录,...","url":"https://www.zhihu.com/question/8976155518/answer/79378292272","content":"在Rstudio同一时间只能设置一个工作路径吗?你这个测试方法都是错的。。。
首先你打开R语言他就会默认把工作路径设定为你打开R语言的目录,举个例子:
①我双击桌面上的Rstudio,那他的工作路径自动设定为你的桌面
②假设我有一个R文件myfile.R的路径为 \\"D:/test/myfile.R\\",那我右键 .R文件 以Rstudio打开并且在这之前Rstudio没有正在运行,那他就会默认把工作路径设为\\"D:/test\\"。
而当你已经打开Rstudio之后,再打开其他 .R 文件,只要你不用setwd()修改当前工作路径,那无论你怎么做(比如你提问中的打开另外一个R文件2.R),他都不会改变当前工作路径。
而getwd是获得当前工作路径,而不是获得文件路径,因此你用两次getwd当然只能得到一样的的值。
回到你的提问,Rstudio是支持多工作目录的,要实现这一点可以通过创建不同的project来实现多个不同工作目录的的脚本同时运行。
","description":"在Rstudio同一时间只能设置一个工作路径吗? 上学苦力怕的回答\\n\\n\\n你这个测试方法都是错的。。。\\n\\n首先你打开R语言他就会默认把工作路径设定为你打开R语言的目录,举个例子:\\n\\n①我双击桌面上的Rstudio,那他的工作路径自动设定为你的桌面\\n\\n②假设我有一个R文件myfile.R的路径为 \\"D:/test/myfile.R\\",那我右键 .R文件 以Rstudio打开并且在这之前Rstudio没有正在运行,那他就会默认把工作路径设为\\"D:/test\\"。\\n\\n而当你已经打开Rstudio之后,再打开其他 .R 文件,只要你不用setwd()修改当前工作路径,那无论你怎么做…","guid":"https://www.zhihu.com/question/8976155518/answer/79378292272","author":"上学苦力怕","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-14T19:39:27.978Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-蓝云天的回答:好了歌 世人都晓神仙好,唯有功名忘不了。 古今将相在何方?荒冢一堆草没了! 世人都晓神仙好,只有金银忘不了...","url":"https://www.zhihu.com/question/580956751/answer/79274215213","content":"能否分享一些让你豁然开朗的句子?好了歌
世人都晓神仙好,唯有功名忘不了。
古今将相在何方?荒冢一堆草没了!
世人都晓神仙好,只有金银忘不了。
终朝只恨聚无多,及到多时眼闭了!
秋窗风雨夕
秋花惨淡秋草黄,耿耿秋灯秋夜长。
已觉秋窗秋不尽,那堪风雨助凄凉!
泪烛摇摇爇短檠,牵愁照恨动离情。
谁家秋院无风入,何处秋窗无雨声。
罗衾不奈秋风力,残漏声催秋雨急。
不知风雨几时休,已教泪洒窗纱湿。
世人都有烦恼,不羡仙不羡神事情看开终成神。
(二)分析工具篇
(三)R语言基础篇之入门(上)(只讲需要的)
(四)R语言基础篇之进阶篇(下)(只讲需要的)
(五)geneHapR之数据准备篇(上)(只讲需要的)
(六)数据准备及软件实操篇
(七)结果诠释篇
本文主要介绍了 R 语言的基本信息,包括其简介、风格、基础变量等内容。R 语言是用于统计计算和绘图的编程语言,具有免费开源、包丰富、数据处理和可视化能力强等特点。其语法简洁灵活,区分大小写,注释包括单行注释和多行注释。基础变量涉及变量的命名与赋值规则,数据类型有数值型、字符型、逻辑型、复数型和原始型,运算符包括算术、逻辑和比较运算符。基本变量类型有向量和数据框,向量可通过多种方式创建和操作,数据框可通过特定函数创建、进行元素访问、添加删除列、合并等操作,并有相关属性和函数。此外,文章还提及了其他变量类型,但未详细介绍,推荐了菜鸟教程网站供读者进一步学习。
一、R语言简介 基本概念
R 语言是一种用于统计计算和绘图的编程语言。它提供了丰富的统计和数据分析方法,以及强大的数据可视化功能。 在 R 中,数据是操作的核心。数据可以存储在多种数据结构中,例如向量、数据框等。 R 语言的特点
免费开源:任何人都可以免费使用和修改 R 语言的源代码。 丰富的包(package):有大量的扩展包可用于各种领域,如数据分析、机器学习、生物信息学等。 强大的数据处理能力:能够轻松处理和分析大型数据集。 优秀的可视化功能:可以创建高质量的统计图表和数据可视化图形。 二、R 语言风格 语言风格 R 语言的语法简洁且灵活。它使用函数来执行各种操作,函数的调用格式通常是function_name(arguments)。 R 是区分大小写的,这意味着myVariable和myvariable是不同的标识符。 代码通常以脚本的形式编写,可以在 R 控制台中逐行执行,也可以一次性运行整个脚本。 R语言里的注释 1. 单行注释
使用#符号进行单行注释。从#开始直到该行结束的所有内容都会被 R 解释器忽略。例如:
x <- c(1, 2, 3, 4, 5) mean_value <- mean(x) 1 2 3 2. 多行注释
R 语言本身没有专门的多行注释符号,但可以通过连续使用单行注释来实现多行注释的效果。例如:
1 2 3 4 在实际编程中,良好的注释习惯可以提高代码的可读性,方便自己和其他开发者理解代码的功能、逻辑和算法流程等相关信息。
三、R语言基础变量 变量的命名与赋值 变量命名:变量名可以包含字母、数字、点(.)和下划线(_),但不能以数字开头。例如,my_variable、data_1等都是有效的变量名。 变量命名的注意事项: 1)不能以数字开头:例如,9var是不合法的变量名,而var9是合法的; 2)不能是保留字:R 语言中有一些保留字,这些保留字具有特定的语法含义,不能用作变量名,例如,if、else、for、while、function等; 3)大小写敏感:在 R 中,变量名是区分大小写的,例如,myVariable和myvariable被视为两个不同的变量; 4)语义清晰,见名知义:为了提高代码的可读性,变量名应该尽量具有描述性,能够反映变量所代表的含义或存储的数据内容,例如,使用student_names来表示存储学生姓名的变量,而不是简单地使用x或y。 变量的赋值:使用<-或=进行赋值操作。例如: x <- 5:将数值 5 赋给变量x。 y = \\"hello\\":将字符串 “hello” 赋给变量y。 R语言基本数据类型 数值型(Numeric)
整数(Integer)
表示没有小数部分的数字。在 R 中,可以通过在数字后面加上L来明确表示一个整数,例如1L、5L等。整数可以进行常规的算术运算,如加法、减法、乘法和除法。 浮点数(Floating - point)
用于表示带有小数部分的数字,例如3.14、-2.5等。浮点数在内存中的存储方式遵循 IEEE 754 标准,它能够表示的数值范围和精度是有限的。在进行高精度计算时可能会出现舍入误差。 字符型(Character)
用于存储文本数据,在 R 中字符型数据需要用单引号\'或双引号\\"括起来,例如\'hello\'、\\"world\\"。可以对字符型数据进行操作,如拼接(使用paste()函数)、提取子串(使用substr()函数)等。 逻辑型(Logical)
逻辑型数据只有两个取值:TRUE(真)和FALSE(假),也可以用T和F表示(不建议,因为T和F可以被重新赋值)。逻辑型数据主要用于条件判断和逻辑运算,例如在if语句、while语句中作为判断条件,或者进行与(&)、或(|)、非(!)等逻辑运算。 复数型(Complex)
用于表示复数,形式为a + bi,其中a是实部,b是虚部,在 R 中可以写成3 + 4i这样的形式。复数可以进行加、减、乘、除等运算,R 提供了相应的函数来处理复数的实部、虚部、模和幅角等。 原始型(Raw)
原始型数据是以字节为单位存储的数据,可以用来存储和操作二进制数据。例如,可以使用原始型数据来读取和写入二进制文件。 R语言中的运算符 算术运算符
加法(+) 用于两个数值(整数或浮点数)相加,例如:3 + 5的结果为8。 也可以用于向量、矩阵等数据结构的对应元素相加,前提是它们的维度相符。 减法(-) 实现两个数值的相减操作,如7 - 4等于3。 同样适用于数据结构元素间的减法运算。 乘法(*) 对两个数值进行乘法运算,例如2 * 6得到12。 对于向量和矩阵,按照线性代数规则进行乘法运算。 除法(/) 执行数值间的除法,如8 / 2的结果是4。 取模(%%) 返回除法运算的余数,例如10 %% 3的结果为1。 整除(%/%) 进行整数除法,只取商的整数部分,比如10 %/% 3等于3。 逻辑运算符
与(&、&&) &对两个逻辑向量的对应元素进行与运算,例如:c(TRUE, FALSE) & c(TRUE, TRUE)得到c(TRUE, FALSE)。 &&通常用于单个逻辑值的与运算,只检查第一个元素,如TRUE && FALSE为FALSE。 或(|、||) |用于逻辑向量对应元素的或运算,如c(TRUE, FALSE) | c(FALSE, TRUE)得到c(TRUE, TRUE)。 ||主要用于单个逻辑值的或运算,只检查第一个元素,例如TRUE || FALSE为TRUE。 非(!) 对单个逻辑值或逻辑向量的每个元素取反,如!TRUE是FALSE,!(c(TRUE, FALSE))得到c(FALSE, TRUE)。 比较运算符
等于(==) 比较两个对象是否相等,例如3 == 3为TRUE,\\"a\\" == \\"b\\"为FALSE。 对于数据结构,比较的是对应元素是否相等。 不等于(!=) 检查两个对象是否不相等,如4!= 5是TRUE。 大于(>) 当左边对象大于右边对象时返回TRUE,例如5 > 3为TRUE。 小于(<) 左边对象小于右边对象时结果为TRUE,如2 < 4是TRUE。 大于等于(>=) 左边对象大于或等于右边对象时为TRUE,例如3 >= 3为TRUE。 小于等于(<=) 左边对象小于或等于右边对象时返回TRUE,如4 <= 5是TRUE。 R语言里基本变量类型 1 向量(Vector) 向量的定义 向量是 R 语言中最基本的数据结构之一,它是由一组相同数据类型(如数值型、字符型、逻辑型等)的元素组成的有序集合。可以将其看作是一维的数组。
向量的创建
使用c()函数
数值型向量:例如num_vector <- c(1, 2.5, -3, 4),可以将多个数值组合成一个数值型向量。 字符型向量:char_vector <- c(\\"apple\\", \\"banana\\", \\"cherry\\"),把字符元素放在c()函数中创建字符型向量。 逻辑型向量:logical_vector <- c(TRUE, FALSE, TRUE),创建包含逻辑值的向量。 序列生成函数
:运算符:可以快速生成一个整数序列,例如1:5会生成向量c(1, 2, 3, 4, 5)。 seq()函数:更加灵活,例如seq(0, 10, by = 2)将生成c(0, 2, 4, 6, 8, 10),其中0是起始值,10是终止值,by = 2表示步长为 2。 向量的基本操作
访问向量元素
通过索引访问:在 R 中,向量的索引从 1 开始。例如,对于向量vec <- c(10, 20, 30),vec[2]将返回 20。也可以使用负索引来排除某些元素,如vec[-2]将返回c(10, 30)。 逻辑索引:根据逻辑条件选择元素。例如,对于向量num_vector <- c(1, 2, 3, 4, 5),num_vector[num_vector > 3]将返回c(4, 5)。 向量的运算
算术运算:对于数值型向量,可以进行加、减、乘、除等算术运算。如果两个向量长度相同,则对应元素进行运算,例如c(1, 2, 3) + c(4, 5, 6)得到c(5, 7, 9);如果一个向量和一个标量(单个数值)进行运算,则向量的每个元素都与该标量进行运算,如c(1, 2, 3) * 2得到c(2, 4, 6)。 逻辑运算:对逻辑型向量进行与(&)、或(|)、非(!)等逻辑运算。 向量的合并
使用c()函数:可以将多个向量合并成一个新的向量,例如new_vector <- c(vector1, vector2)。 向量的属性和函数
长度
使用length()函数可以获取向量中元素的个数,例如length(c(1, 2, 3))的结果为 3。 类型判断
is.numeric()、is.character()、is.logical()等函数分别用于判断向量是否为数值型、字符型、逻辑型。 其他常用函数
sum()、mean()、min()、max()等函数可以分别计算数值型向量的总和、平均值、最小值和最大值。 sort()函数可以对向量进行排序,例如sort(c(3, 1, 2))将返回c(1, 2, 3)。 2 数据框(Data Frame) 数据框的定义 数据框(Data Frame)是 R 语言中一种非常重要的二维数据结构,它类似于电子表格或数据库中的表。数据框的每一列可以是不同的数据类型(如数值型、字符型、逻辑型等),但每一行的元素个数必须相同。
数据框的创建 使用 data.frame() 函数 基本创建方式:可以直接在data.frame()函数中指定列名和对应的值来创建数据框。例如:
df <- data.frame(\\n Name = c(\\"Alice\\", \\"Bob\\", \\"Charlie\\"),\\n Age = c(25, 30, 35),\\n Gender = c(\\"Female\\", \\"Male\\", \\"Male\\")\\n)
1 2 3 4 5 从向量创建:先定义好每一列的向量,再将这些向量组合成数据框。 name_vec <- c(\\"Alice\\", \\"Bob\\", \\"Charlie\\") age_vec <- c(25, 30, 35) gender_vec <- c(\\"Female\\", \\"Male\\", \\"Male\\") df <- data.frame(Name = name_vec, Age = age_vec, Gender = gender_vec) 1 2 3 4 读取外部文件创建
从 CSV 文件创建:使用read.csv()函数可以从 CSV(逗号分隔值)文件中读取数据并创建数据框,例如df <- read.csv(\\"data.csv\\")。
从其他文件格式(如 Excel 文件、文本文件等):需要使用相应的 R 包,如readxl包中的read_excel()函数用于读取 Excel 文件。
数据框的基本操作
访问数据框中的元素
通过索引访问 按行和列索引:使用[ ]运算符,逗号前表示行索引,逗号后表示列索引。例如,df[1, 2]表示访问数据框df的第一行第二列的元素;df[1:2, ]表示访问第一行和第二行的所有列;df[, 2:3]表示访问第二列和第三列的所有行。 按名称索引:使用$符号通过列名来访问某一列,例如df$Age将返回数据框df中名为Age的列。 使用逻辑索引:根据逻辑条件选择数据框中的行或列。例如,df[df$Age > 30, ]将返回数据框df中Age列大于 30 的所有行。 添加和删除列
添加列:可以直接给数据框新增一列,例如df$NewColumn <- c(1, 2, 3),给df添加了一个名为NewColumn的新列。 删除列:可以使用subset()函数或者通过赋值NULL来删除列,例如df <- subset(df, select = -NewColumn)或者df$NewColumn <- NULL。 合并数据框
rbind()函数:用于按行合并数据框,要求合并的数据框具有相同的列数和相同的列名。例如,df_combined <- rbind(df1, df2)。 cbind()函数:用于按列合并数据框,要求合并的数据框具有相同的行数。例如,df_combined <- cbind(df1, df2)。 数据框的属性和函数
查看数据框的结构
str()函数:可以查看数据框的结构,包括列名、每列的数据类型以及前几个数据元素等信息。 dim()函数:返回数据框的行数和列数,例如dim(df)将返回一个包含行数和列数的向量。 数据框的统计汇总 summary()函数:对数据框的每一列进行基本的统计汇总,对于数值列会给出最小值、最大值、中位数、均值和四分位数等信息,对于字符列会给出不同取值的数量。 行名与列名
查看
列名查看
使用colnames()函数,例如对于数据框df,colnames(df)将返回列名组成的字符向量。 也可以使用names(df),效果与colnames(df)相同。 行名查看
使用rownames()函数,例如rownames(df)可以查看数据框df的行名。 修改
列名修改
使用colnames()函数,例如colnames(df) <- c(\\"new_col1\\", \\"new_col2\\",...)可以将df的数据框的列名修改为指定的新列名。 也可以在创建数据框时直接指定列名,如df <- data.frame(new_col1 = values1, new_col2 = values2,...)。 行名修改
同样使用rownames()函数,例如rownames(df) <- c(\\"row1\\", \\"row2\\",...)可以修改数据框df的行名。 注意事项
唯一性
列名在一个数据框中必须是唯一的,不能有重复的列名。如果尝试设置重复的列名,可能会导致数据访问和操作出现混淆。 行名也通常要求具有唯一性,尤其是在一些需要根据行名进行索引和匹配的操作中。不过,R 语言在某些情况下允许行名重复,但这可能会引起意想不到的结果。 字符类型
列名和行名通常是字符型向量。在修改或指定列名和行名时,要确保提供的是字符型数据。 影响其他操作
修改行名和列名可能会影响基于这些名称进行的其他操作,如数据提取、合并操作等。例如,如果在一个数据框和另一个数据框进行合并时,它们的列名不一致,可能需要先调整列名以确保合并操作的正确性。 3. 其他变量类型 R语言里的其他变量类型还包括:列表、矩阵、数组等;由于篇幅限制,以及其他变量类型其在单倍型分析中的必要性有限,故本文不过多介绍。 如有需要请自行去问度娘,然各路大神做的教程参差不齐;故另推荐菜鸟教程,一个适合新手入门的网站。
","description":"没有任何编程基础,怎么快速入门R语言? 随缘鸿珠的回答\\n\\n\\n(一)基础知识篇\\n\\n(二)分析工具篇\\n\\n(三)R语言基础篇之入门(上)(只讲需要的)\\n\\n(四)R语言基础篇之进阶篇(下)(只讲需要的)\\n\\n(五)geneHapR之数据准备篇(上)(只讲需要的)\\n\\n(六)数据准备及软件实操篇\\n\\n(七)结果诠释篇\\n\\n本文主要介绍了 R 语言的基本信息,包括其简介、风格、基础变量等内容。R 语言是用于统计计算和绘图的编程语言,具有免费开源、包丰富、数据处理和可视化能力强等特点。其语法简洁灵活,区分大小写,注释包括单行注释和多行注释。基础变量涉及变量的命名与赋值规则,数据类型有数值型、字符型…","guid":"https://www.zhihu.com/question/378478286/answer/79069100086","author":"随缘鸿珠","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-14T09:17:22.271Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"从零开始进行单倍型分析之R语言入门篇(上)","url":"https://zhuanlan.zhihu.com/p/18264790251","content":"(一)基础知识篇 (二) 分析工具篇 (三) R语言基础篇之入门(上) (只讲需要的) (四) R语言基础篇之进阶篇(下) (只讲需要的) (五) geneHapR之数据准备篇(上) (只讲需要的) (六)数据准备及软件实操篇 (七)结果诠释篇 本文主要介绍了 R 语言的基本信息,包括其简介、风格、基础变量等内容。R 语言是用于统计计算和绘图的编程语言,具有免费开源、包丰富、数据处理和可视化能力强等特点。其语法简洁灵活,区分大…","description":"(一)基础知识篇 (二) 分析工具篇 (三) R语言基础篇之入门(上) (只讲需要的) (四) R语言基础篇之进阶篇(下) (只讲需要的) (五) geneHapR之数据准备篇(上) (只讲需要的) (六)数据准备及软件实操篇 (七)结果诠释篇 本文主要介绍了 R 语言的基本信息,包括其简介、风格、基础变量等内容。R 语言是用于统计计算和绘图的编程语言,具有免费开源、包丰富、数据处理和可视化能力强等特点。其语法简洁灵活,区分大…","guid":"https://zhuanlan.zhihu.com/p/18264790251","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-14T09:17:21.721Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用R语言进行贝叶斯多重线性回归!?-小李的回答:专题一 贝叶斯统计学的思想与概念1.1 信念函数与概率 1.2 事件划分与贝叶斯法则 1.3 稀少事件的概率估计 1.4 可...","url":"https://www.zhihu.com/question/554581843/answer/79042459112","content":"用R语言进行贝叶斯多重线性回归!?专题一 贝叶斯统计学的思想与概念
1.1 信念函数与概率
1.2 事件划分与贝叶斯法则
1.3 稀少事件的概率估计
1.4 可交换性
1.5 预测模型的构建
专题二 单参数模型
2.1 二项式模型与置信域
2.2 泊松模型与后验分布
2.3 指数族模型与共轭先验
专题三 蒙特卡罗逼近
3.1 蒙特卡罗方法
3.2 任意函数的后验推断
3.3 预测分布采样
3.4 后验模型检验
专题四 正态模型
4.1 均值与条件方差的推断
4.2 基于数学期望的先验
4.3非正态分布的正态模型
专题五 吉布斯采样
5.1 半共轭先验分布
5.2 离散近似
5.3 条件分布中的采样
5.4 吉布斯采样算法及其性质
5.5 MCMC方法
专题六 多元正态分布与组比较
6.1 多元正态分布的密度
6.2 均值的半共轭先验
6.3 逆-Wishart分布
6.4 缺失数据与贝叶斯插补
6.5 组间比较
6.6分层模型的均值与方差
专题七 线性回归
7.1 回归的本质与最小二乘法
7.2 回归的贝叶斯估计
7.3 模型的贝叶斯比较
7.4 吉布斯采样与模型平均
7.5 指数模型比较与选择
7.6 总结与结论
7.7 Python的Copula相关包介绍
专题八 非共轭先验与M-H算法
8.1 广义线性模型
8.2 泊松模型Metropolis算法
8.3 Metropolis-Hastings算法
8.4 M-H算法与吉布斯采样的组合
专题九 线性与广义线性混合效应模型
9.1 多层回归模型
9.2 全条件分布
9.3 广义线性混合效应模型
专题十 有序数据的隐变量模型
10.1 有序Probit回归
10.2 秩的似然
10.3 高斯Copula模型
","description":"用R语言进行贝叶斯多重线性回归!? 小李的回答\\n\\n\\n专题一 贝叶斯统计学的思想与概念\\n\\n1.1 信念函数与概率\\n\\n1.2 事件划分与贝叶斯法则\\n\\n1.3 稀少事件的概率估计\\n\\n1.4 可交换性\\n\\n1.5 预测模型的构建\\n\\n专题二 单参数模型\\n\\n2.1 二项式模型与置信域\\n\\n2.2 泊松模型与后验分布\\n\\n2.3 指数族模型与共轭先验\\n\\n专题三 蒙特卡罗逼近\\n\\n3.1 蒙特卡罗方法\\n\\n3.2 任意函数的后验推断\\n\\n3.3 预测分布采样\\n\\n3.4 后验模型检验\\n\\n专题四 正态模型\\n\\n4.1 均值与条件方差的推断\\n\\n4.2 基于数学期望的先验\\n\\n4.3非正态分布的正态模型\\n\\n专题五 吉布斯采样\\n\\n5.1 半共轭先验分布\\n\\n5.2 离散近似\\n\\n5.3…","guid":"https://www.zhihu.com/question/554581843/answer/79042459112","author":"小李","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-14T08:45:20.152Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用R语言的人是不是都特别有钱?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,...","url":"https://www.zhihu.com/question/36980149/answer/78658061358","content":"用R语言的人是不是都特别有钱?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=Name, y=Value, fill=Name, colour=Name)) +\\n geom_boxplot(alpha=0.5, size=0.5, width=0.8) +\\n geom_jitter(alpha=0.3, size=4) +\\n labs(x=\\"Name\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,35,10), limits = c(0,35),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = colors) +\\n scale_color_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/box-jitter.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
同学们,大家好,今天继续更新R语言系列。今天我们开始讲R语言的集成开发环境(IDE)—Rstudio,这里会对Rstudio及其安装进行介绍,感兴趣的同学可以重点关注一下。
Rstudio简介
Rstudio是R语言一个常用的集成开发环境(IDE),包括控制台、语法高亮显示的编辑器,支持直接代码执行以及画图、浏览历史、调试和工作区管理等功能的强大工具,包含Rstudio Desktop(Rstudio桌面应用版)和Rstudio Server的网页版。
Rstudio安装
Rstudio可通过其官方网站进行下载,可根据需要下载桌面应用版或网页版。桌面应用版是直接以应用的方式安装在本地电脑上的,网页版是需要部署在远端服务器上的,可以通过特定的网络接口进行访问,其官方网址为:https://posit.co/download/rstudio-desktop/。
大部分情况下是在本地电脑使用的,所以这里对Rstudio Desktop版及其安装进行介绍。
1、下载Rstudio Desktop版
打开官方网站点击DOWNLOAD RSTUDIO DESKTOP FOR WINDOWS进行下载
2、找到下载的安装文件,双击进行安装
按照提示进行安装,直到安装完成
Rstudio界面介绍
1、主界面
打开Rstudio软件,会出现如下图所示界面。Rstudio界面分为4个区域,其中1区域为代码区,可以在这个位置写代码及运行代码;2区域分为Environment、History、Connections和Tutorial,其中Environment展示当前环境中的变量、数据、创建的函数等信息,History展示代码运行历史情况,保存已运行过的代码,Connections用于连接和管理外部数据库,方便操作大型数据,Tutorial是Rstudio中设置的专门用于学习和教学的区域;3区域为代码运行区,展示代码运行情况及运行结果;4区域为文件、图形、R包、帮助文档等的展示区域,当前文件夹下的文件、当前绘制的图形、当前环境中的R包及函数的帮助文档都可以在这个区域查看。
2、上方功能区
Rstudio界面上方为Rstudio的功能区,这里又分为File、Edit、Code、View、Plots、Session、Build、Debug、Profile、Tools和Help。功能区涉及的内容比较多,这里只对常用功能进行介绍。
点击File展示下拉菜单,可以进行新建文件、新建项目、打开文件、打开项目、保存文件、保存为...等操作。
点击Tools展示下拉菜单,在该下拉菜单,可以进行安装R包、检查R包更新等操作,在其Global Options选项中,可以对R语言版本进行选择,可以对Rstudio主界面的文件大小、字体等进行设置。
以上为Rstudio的简单介绍,其更多功能及使用方法,在后续学习中涉及到了再进行详解介绍。接下来的会对R语言语法及编程进行讲解,以后R语言的学习也都在Rstudio中进行。
","description":"R语言|如何更新R和RStudio? 小郑同学的回答\\n\\n\\n 同学们,大家好,今天继续更新R语言系列。今天我们开始讲R语言的集成开发环境(IDE)—Rstudio,这里会对Rstudio及其安装进行介绍,感兴趣的同学可以重点关注一下。\\n\\nRstudio简介\\n\\n Rstudio是R语言一个常用的集成开发环境(IDE),包括控制台、语法高亮显示的编辑器,支持直接代码执行以及画图、浏览历史、调试和工作区管理等功能的强大工具,包含Rstudio Desktop(Rstudio桌面应用版)和Rstudio Server的网页版。\\n\\nRstudio安装\\n\\n Rstudio可通过其官方网…","guid":"https://www.zhihu.com/question/594300209/answer/78515332603","author":"小郑同学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T15:56:38.170Z","media":[{"url":"https://picx.zhimg.com/v2-85ea15fe781443940cdfdc4b37be1f3a.jpg","type":"photo","width":692,"height":318,"blurhash":"LLRyyxbcxu_2~W%KRjRk9uIooct6"},{"url":"https://pic1.zhimg.com/v2-550ec48d60aea308183e26ddd5d120e2.jpg","type":"photo","width":692,"height":140,"blurhash":"LCS$ov?vt7~qbbR*t7xuWBRjj[t7"},{"url":"https://picx.zhimg.com/50/v2-360cba289a364bad844587009460bbf1.jpg","type":"photo","width":379,"height":268,"blurhash":"L,NTzf01D%xuWBRjWCWCt6%Lt6WB"},{"url":"https://picx.zhimg.com/v2-9a07992f5c1bbbcaf4f9e96ae2bf92bf.jpg","type":"photo","width":692,"height":366,"blurhash":"L9R:HHIVWB~q~qNHM{xaxuofayay"},{"url":"https://picx.zhimg.com/v2-7a7de0a57c9d1839e8a9d1ca53e367c9.jpg","type":"photo","width":1748,"height":1014,"blurhash":"L9R:HGD%Rj~q_3RPM{t7n$n$W:f8"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言系列—Rstudio简介和安装","url":"https://zhuanlan.zhihu.com/p/18124625141","content":"同学们,大家好,今天继续更新R语言系列。今天我们开始讲R语言的集成开发环境(IDE)—Rstudio,这里会对Rstudio及其安装进行介绍,感兴趣的同学可以重点关注一下。 Rstudio简介 Rstudio是R语言一个常用的集成开发环境(IDE),包括控制台、语法高亮显示的编辑器,支持直接代码执行以及画图、浏览历史、调试和工作区管理等功能的强大工具,包含Rstudio Desktop(Rstudio桌面应用版)和Rstudio Server的网页版。 Rstudio安装 Rstu…","description":"同学们,大家好,今天继续更新R语言系列。今天我们开始讲R语言的集成开发环境(IDE)—Rstudio,这里会对Rstudio及其安装进行介绍,感兴趣的同学可以重点关注一下。 Rstudio简介 Rstudio是R语言一个常用的集成开发环境(IDE),包括控制台、语法高亮显示的编辑器,支持直接代码执行以及画图、浏览历史、调试和工作区管理等功能的强大工具,包含Rstudio Desktop(Rstudio桌面应用版)和Rstudio Server的网页版。 Rstudio安装 Rstu…","guid":"https://zhuanlan.zhihu.com/p/18124625141","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T15:56:37.808Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-桦之旅的回答:生活在同一个世界上,人与人的认知却是天差地别。 生活中笑着度过每一天,没有不好的日子,只有不佳的心情,生...","url":"https://www.zhihu.com/question/580956751/answer/78509898332","content":"能否分享一些让你豁然开朗的句子?生活在同一个世界上,人与人的认知却是天差地别。
生活中笑着度过每一天,没有不好的日子,只有不佳的心情,生活中的阳光有一部分来自太阳,还有一部分来自内心。
《论语》中写道:“君子泰而不骄,小人骄而不泰。”
谦和,不是无能,不是示弱,而是一种修养。
正是因为见过更出色的人物,看过更广阔的世界,才明晰了自己的渺小。
放低姿态,把自己看小,把事情做好,你未来的道路就会越发广阔。
正所谓:“狂妄源于浅薄,低调基于见识。”
身不历苦 ,福禄难厚,心不悟苦 , 智慧难开,可立山巅之最,也可低谷涅槃,活着本是一种历程。
任何人的强大,背后都需要积累。
人生的道路充满了挑战和机遇,以平常心看待一切。
人只有拎得清自己,静观其变,在背后潜移默化,静静修炼自己。慢慢就得到提升了,在宁静的生活过程里,
不断地付出努力和时间。不断地追求卓越的过程中,自己也会变得更加有智慧。才能真正实现人生的价值。
才能在这条道路上走得更远、更稳、更精彩。
千好万好不如身体好。身体好,一切都好。身体是无价的,有了好的身体,就可享受美好的生活。
腊月天,寒风刺骨,天寒地冻,雪落成诗。在这个寒冷的冬天,谁问你粥可温,谁又念你衣可暖!
一日三餐,规律用餐,营养均衡,旱唾早起,保证睡眠。你的习惯,会影响你的人生。
闲时合理适当运动,做些自己喜欢的力所能及的事,让生活丰富多彩,让身体从里到外焕发健康光芒。
在生活中找到平静和安宁。看漫天风雪,守内心平静。在寒冷的冬天也过得温暖,幸福,有滋有味。
万事终有回转,此心到处悠然。
其实人活着活着你就明白 :跟任何人较劲都是在消耗自己。
人间清醒的四不原则:不被拿捏,不信承诺。不吃大饼,不听故事。
也许最稳定的关系就是没有关系。
","description":"能否分享一些让你豁然开朗的句子? 走路带风的回答\\n\\n\\n其实人活着活着你就明白 :跟任何人较劲都是在消耗自己。\\n\\n人间清醒的四不原则:不被拿捏,不信承诺。不吃大饼,不听故事。\\n\\n也许最稳定的关系就是没有关系。","guid":"https://www.zhihu.com/question/580956751/answer/78389972162","author":"走路带风","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T12:23:35.412Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"十年心血管疾病预测模型,图片上的是China-PAR公式吗?-皮皮的回答:求一下图片来源,看着像是我找了好久的公式","url":"https://www.zhihu.com/question/2284673973/answer/78197847239","content":"十年心血管疾病预测模型,图片上的是China-PAR公式吗?求一下图片来源,看着像是我找了好久的公式
","description":"十年心血管疾病预测模型,图片上的是China-PAR公式吗? 皮皮的回答\\n\\n\\n求一下图片来源,看着像是我找了好久的公式","guid":"https://www.zhihu.com/question/2284673973/answer/78197847239","author":"皮皮","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T07:44:21.437Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床医学该学python 还是R?-冢冢冢冢的回答:有一点儿计算机底子(上过C语言课就算,不管你现在会不会)就用python,否则R.","url":"https://www.zhihu.com/question/9225232333/answer/78184750654","content":"临床医学该学python 还是R?有一点儿计算机底子(上过C语言课就算,不管你现在会不会)就用python,否则R.
","description":"临床医学该学python 还是R? 冢冢冢冢的回答\\n\\n\\n有一点儿计算机底子(上过C语言课就算,不管你现在会不会)就用python,否则R.","guid":"https://www.zhihu.com/question/9225232333/answer/78184750654","author":"冢冢冢冢","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T07:27:35.317Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"投影问题(R语言)","url":"https://zhuanlan.zhihu.com/p/17959261126","content":"今天是2025年的1月了,快4个月没更新了,今日恢复更新,争取勤更新。 学过地图学的朋友都知道,坐标系主要分为球面坐标系和平面投影坐标系,球面坐标系的空间直角坐标系这里就对应Geographic coordinate reference systems。平面投影坐标系对应Projected coordinate reference systems 一:Geographic coordinate reference systems(一)基本表示形式R中定义坐标系一般可以通过 proj4 strings(已经过时)+proj=longlat +ellps…","description":"今天是2025年的1月了,快4个月没更新了,今日恢复更新,争取勤更新。 学过地图学的朋友都知道,坐标系主要分为球面坐标系和平面投影坐标系,球面坐标系的空间直角坐标系这里就对应Geographic coordinate reference systems。平面投影坐标系对应Projected coordinate reference systems 一:Geographic coordinate reference systems(一)基本表示形式R中定义坐标系一般可以通过 proj4 strings(已经过时)+proj=longlat +ellps…","guid":"https://zhuanlan.zhihu.com/p/17959261126","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-13T03:54:42.683Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"写学术论文用ggplot2绘图是否可行?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使...","url":"https://www.zhihu.com/question/37351778/answer/77867831801","content":"写学术论文用ggplot2绘图是否可行?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:2]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=Name, y=Value, fill=Type)) +\\n geom_boxplot() +\\n labs(x=\\"Name\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,255,50), limits = c(0,255),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/box-group.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
caret(Classification And Regression Training)是R语言中最广泛使用的机器学习包之一,最初由 Max Kuhn 开发,目的是为了简化机器学习流程,为用户提供一个统一的接口来处理不同模型、调参和验证。
在传统机器学习中,模型的训练和验证通常需要处理多个步骤(如数据预处理、特征工程、模型选择、参数调优等),且不同模型的接口不一致。caret 将这些步骤封装在一个统一的框架内,大大降低了使用不同机器学习算法的复杂性。
由于 caret 的广泛应用和功能的全面性,它到目前仍然是许多R用户的首选工具,尤其在快速构建机器学习模型时表现优异。
后面的文章就是按照上面顺序一步一步来给大家详细讲的:
preProcess() 函数用于数据预处理。包括缺失值处理、特征缩放、标准化、哑变量编码、去除高度相关的特征等等。主要涉及到preProcess() 函数的 method 参数。根据数据类型和特点选择合适的预处理方法: \\"center\\" 和 \\"scale\\":中心化和标准化,适用于大多数连续型数据,尤其是在使用需要计算距离的算法(如 KNN、SVM)时。 \\"BoxCox\\" 和 \\"YeoJohnson\\":幂变换,用于处理偏态数据,使其更接近正态分布。YeoJohnson 适用于包含负值的数据。 \\"pca\\" 和 \\"ica\\":降维,用于处理高维数据,减少特征数量,提高模型训练速度,并可能提高模型泛化能力。 \\"knnImpute\\" 和 \\"bagImpute\\":缺失值插补,用于处理数据中的缺失值。knnImpute 使用 K 近邻算法进行插补,bagImpute 使用 bagging 方法进行插补。下面的代码就对数据进行分割,然后分别对训练集和测试集进行了\\"center\\", \\"scale\\", \\"pca\\",然后生成主成分:
train_index <- createDataPartition(iris$Species, p = 0.7, list = FALSE)\\ntrain_data <- iris[train_index, ]\\ntest_data <- iris[-train_index, ]\\n# 创建预处理方法\\npreprocess <- preProcess(train_data[, -5], method = c(\\"center\\", \\"scale\\", \\"pca\\"), thresh = 0.95)\\n# 应用预处理\\ntrain_processed <- predict(preprocess, train_data[, -5])\\ntest_processed <- predict(preprocess, test_data[, -5])
运行代码后就成了下面了两个主成分,后面就直接用这两个主成分当作预测变量去训练模型即可:
createDataPartition() 函数用于创建数据分割。下面代码便是一个7:3比例划分训练集和测试集的例子:
# 创建训练集和测试集\\nset.seed(123)\\nindex <- createDataPartition(iris$Species, p = 0.7, list = FALSE)\\ntrain_data <- iris[index,]\\ntest_data <- iris[-index,]
特征选择的过程在caret包中也可以轻松实现。主要包括3种特征选择方法:
第一种是递归特征消除(RFE, Recursive Feature Elimination),RFE 是一种基于模型的特征选择方法,它通过以下步骤进行:
RFE 是一种迭代的过程,因此适合对少量特征进行选择,不适合高维数据集。
第二种是基于过滤器的方法(Filter Methods)过滤器方法通过统计特征和目标变量之间的关系(如相关性、卡方检验、互信息等),评估特征的重要性,并过滤掉不显著的特征。
第三种是嵌入式方法(Embedded Methods):嵌入式方法直接结合机器学习算法(如随机森林、LASSO 回归等)中的变量重要性,筛选出重要的特征。
现在我有一个数据集有60个自变量,相当多了,这个时候必须筛掉一波,那么我要用RFE方法的话就可以写出如下代码:
control <- rfeControl(\\n functions = rfFuncs, # 使用随机森林评估特征\\n method = \\"cv\\", # 使用交叉验证\\n number = 5 # 5折交叉验证\\n)\\n\\n# 递归特征消除\\nrfe_model <- rfe(\\n x = Sonar[, -ncol(Sonar)], # 自变量(剔除最后一列 \\"Class\\")\\n y = Sonar$Class, # 因变量(分类标签)\\n sizes = c(1:10, 15, 20), # 特征子集大小\\n rfeControl = control # 控制参数\\n)\\n\\n# 查看 RFE 的结果\\nprint(rfe_model)
输出结果如下:
可以看到结果中展示了特征选择过程中性能指标的详细表格,每个子集大小(变量数量)对应一组模型性能指标,同时最后一行输出了Top variables:显示被选中的特征名称,通常按重要性排序。这里60个预测变量选出可5个最重要的。
再看基于过滤器的方法(Filter Methods),比如过滤相关性大的变量,可以用下面代码:
findCorrelation() 函数可以用于剔除高度相关的特征。\\n# 计算特征间的相关性\\ncor_matrix <- cor(Sonar[, -ncol(Sonar)]) # 计算自变量的相关性矩阵\\n# 找到相关性较高的特征\\nhighly_correlated <- findCorrelation(cor_matrix, cutoff = 0.75) # 设置相关性阈值\\n# 剔除相关性较高的特征\\nreduced_data <- Sonar[, -highly_correlated]\\n# 查看结果\\ncat(\\"剔除的特征索引:\\", highly_correlated, \\"\\\\n\\")\\ncat(\\"剔除后的特征数:\\", ncol(reduced_data), \\"\\\\n\\")
运行后就可以知道60个预测变量中其实有32个是高度相关的,那么这32个变量我们只需要留下一个,所以这个样子筛选下来就只剩29个变量了。
我们接着看嵌入式方法。典型的就是变量重要性,caret 提供了 varImp() 函数,用于提取模型中各特征的重要性。许多模型(如随机森林、线性模型)支持变量重要性评估。一个随机森林模型输出变量重要性的代码如下:
# 训练随机森林模型\\nset.seed(123)\\nrf_model <- randomForest(Class ~ ., data = Sonar, importance = TRUE)\\n# 提取变量重要性\\nimportance <- varImp(rf_model)\\n# 查看变量重要性\\nprint(importance)\\n# 可视化变量重要性\\nplot(importance)
运行后输出如下:
可以看到最重要的20个变量都被筛出来了。同时还输出了变量重要性的图:
以上就是在caret中进行特征选择的操作示意。接着看模型训练。
train() 函数用于训练模型。基本结构如下:
要注意的是method参数,支持:
还可通过 modelLookup() 查看所有支持的模型。train 函数是 caret 包的核心,封装了数据预处理、模型训练、超参数调优和交叉验证等功能。通过调整 train 的参数,我们可以快速实现多种机器学习算法的建模和优化,适用于从简单的线性模型到复杂的非线性模型。
caret包中参数调优主要依赖于trainControl() 函数,用来设置模型训练过程的控制参数,尤其是在交叉验证、重采样方法、性能评估和模型保存等方面作用重大,基本写法如下:
给大家写一个使用 trainControl()结合train ()进行 5 折交叉验证训练随机森林模型的例子:
# 设置训练控制参数\\ncontrol <- trainControl(\\n method = \\"cv\\", # 交叉验证\\n number = 5, # 5 折\\n verboseIter = TRUE, # 显示训练过程\\n savePredictions = \\"final\\", # 保存预测结果\\n classProbs = TRUE, # 计算分类概率\\n summaryFunction = multiClassSummary # 多分类评估\\n)\\n\\n# 训练随机森林模型\\nset.seed(123)\\nrf_model <- train(\\n Species ~ ., \\n data = iris, \\n method = \\"rf\\", \\n trControl = control,\\n tuneLength = 3\\n)\\n\\n# 查看结果\\nprint(rf_model)\\n# 绘制调优结果\\nplot(rf_model)
运行后输出如下:
可以看到输出了不同超参mtry下的随机森林模型表现,一应俱全。
confusionMatrix() 函数用于计算混淆矩阵和各种评估指标。
# 混淆矩阵\\nconfusionMatrix(predictions, test_data$Species)
resamples() 函数用于比较不同模型的性能。比如我同样的数据训练3个模型,分别是随机森林、支持向量机、和KNN,这三个模型放在一起比较的话代码如下:
# 训练多个模型\\nrf_model <- train(Species ~ ., data = iris, method = \\"rf\\", trControl = control)\\nsvm_model <- train(Species ~ ., data = iris, method = \\"svmLinear\\", trControl = control)\\nknn_model <- train(Species ~ ., data = iris, method = \\"knn\\", trControl = control)\\n# 比较模型性能\\nresults <- resamples(list(RF = rf_model, SVM = svm_model, KNN = knn_model))\\n# 查看汇总结果\\nsummary(results)
运行后即可得到三个模型的性能比较结果
可以看到还是支持向量机模型的Accuracy最好。
","description":"机器学习做复杂系统的多变量预测分析(监督学习、连续变量),简单成熟的软件包有哪些? Codewar的回答\\n\\n\\ncaret(Classification And Regression Training)是R语言中最广泛使用的机器学习包之一,最初由 Max Kuhn 开发,目的是为了简化机器学习流程,为用户提供一个统一的接口来处理不同模型、调参和验证。\\n\\n在传统机器学习中,模型的训练和验证通常需要处理多个步骤(如数据预处理、特征工程、模型选择、参数调优等),且不同模型的接口不一致。caret 将这些步骤封装在一个统一的框架内,大大降低了使用不同机器学习算法的复杂性。\\n\\n由于…","guid":"https://www.zhihu.com/question/266802940/answer/77671902171","author":"Codewar","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T14:01:11.729Z","media":[{"url":"https://picx.zhimg.com/v2-82a5335fe72800349e8a9a298f7d7bb7.jpg","type":"photo","width":664,"height":455,"blurhash":"L55rDF?wx^.9.9ofRPj]%hofRikC"},{"url":"https://pica.zhimg.com/v2-2286eda96ef9e6bf8479ee0ae74948e6.jpg","type":"photo","width":1208,"height":651,"blurhash":"L01yLPoMIUj@f8s;t7j[IUxut7af"},{"url":"https://picx.zhimg.com/v2-cd4d6d484fde239288e7651589fc987c.jpg","type":"photo","width":1391,"height":112,"blurhash":"L05X+B00D%004oROajx[00br%3sq"},{"url":"https://picx.zhimg.com/v2-39ff6c0c680856112a4c067dadae1989.jpg","type":"photo","width":1452,"height":664,"blurhash":"L00+,y-;%Mxut7azWBWBofWBWBWB"},{"url":"https://picx.zhimg.com/v2-904e47fba99fee035c175f2cfd0ad73a.jpg","type":"photo","width":1658,"height":1503,"blurhash":"L9SF@T9aD$~W%MM{xt%MD%%M%Mj@"},{"url":"https://picx.zhimg.com/v2-40da17e66aa65b1e9379811915018fe1.jpg","type":"photo","width":747,"height":409,"blurhash":"L8R{#?_3D%_3~qRjWBRj_3ayofWB"},{"url":"https://picx.zhimg.com/v2-ffa211eafb642aeb018647c0fbd023a5.jpg","type":"photo","width":896,"height":403,"blurhash":"LERpB]%3nR_N-;RjRjt7?HbHRjV["},{"url":"https://pic1.zhimg.com/v2-3db75622add322e2dc980d99e80ea3fd.jpg","type":"photo","width":1949,"height":591,"blurhash":"L02FfE.AyF%$IVxut7WEIot7t7f7"},{"url":"https://picx.zhimg.com/v2-4ecdf2d54e8cc85680cdd48032fdbe19.jpg","type":"photo","width":1397,"height":505,"blurhash":"L02FfF?w%%.ARjxua|RjM{j[j[ay"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-柠檬草的回答:7、忌纠结拖延,宜现在就做 拖延最大的害处不是耽误,而是让自己变得犹豫消极,甚至自暴自弃。 本想筹备考试,...","url":"https://www.zhihu.com/question/580956751/answer/77617437944","content":"能否分享一些让你豁然开朗的句子?7、忌纠结拖延,宜现在就做
拖延最大的害处不是耽误,而是让自己变得犹豫消极,甚至自暴自弃。
本想筹备考试,却一拖再拖;
本该冲刺绩效,却一缓再缓。
荒废时间的后果,就是受到现实的暴击。
而在“想到”和“得到”之间,仅隔着一个“做到”的距离。
迈出第一步固然艰难,但坚持下去就会享受到红利。就像跳进泳池的一刹那,刚开始让人恐慌,适应水温后很快就乐在其中。
想要拖延的时候,不妨尝试5秒定律:在心里倒数5个数,然后即刻行动起来。给自己设定临界点,可以提高执行力,高效地完成任务。
8、忌渴求完美,宜自我接纳
有人喜欢追求完美,用力证明自己,对自己严加苛责。这就如同戴上沉重的枷锁,封住了所有的快乐。其实,完美只是一种执念,不完美才是人生常态。
有的人能力出众,却相貌平平;
有的人家财万贯,却并不幸福。
不要看到别人发光,就感慨自己黯淡。
生活为你关上一扇门时,或许也暗自为你准备了更大的惊喜。荣格曾说过:“幻想光明是没用的,唯一的出路是认识阴影。”
人生最重要的课题,就是学会自我接纳,勇敢地面对自身的短板和不足,达到内心的平衡与和谐。允许意外出错,允许偶尔断电,允许所有的事与愿违。
接纳缺憾,才能体会生活的真切;
肯定自己,才能成就真正的自我。
9、忌时刻紧绷,宜张弛有度
你知道“穿针效应”吗?试验员让被测试者穿针引线,并为比赛结果设立了奖励。但是,被测试者越是紧张,手就越是止不住地颤抖。同样,一个人越想尽力做好一件事,往往越是背道而驰。就像作家吴淡如,她看到室友每天都学习日语半小时,心里非常焦虑。为了能赶超室友,她每天学习两小时,可压力越大越烦躁,效果很不理想。
而那位室友始终匀速前行,最终学有所成。
我们的神经如同琴弦,抻得太紧也容易崩断。张弛有度,给自己喘息的空间,拥有足够的心理弹性,才不会轻易被外界扰乱。有顺其自然的心态,就获得足够的能量应对一切变数。“世间的人和事,来和去都有它的时间。”我们只需要把自己修炼成最好的样子,然后静静地去等待。”
人生的美妙之处就在于,生活瞬息万变。
而你我可以通过不断完善自己,拥抱日新月异的精彩。与其期盼好运降临,不如从现在开始,脚踏实地做出每一个细微的改变。
改变的力量,就是成长的助推器。
尽己所能,其他的不过是水到渠成。
感谢支持,点个关注,愿努力不被辜负,改变终见美好!
开心快乐就这么简单!!!
","description":"能否分享一些让你豁然开朗的句子? 柠檬草的回答\\n\\n\\n7、忌纠结拖延,宜现在就做\\n\\n拖延最大的害处不是耽误,而是让自己变得犹豫消极,甚至自暴自弃。\\n\\n本想筹备考试,却一拖再拖;\\n\\n本该冲刺绩效,却一缓再缓。\\n\\n荒废时间的后果,就是受到现实的暴击。\\n\\n而在“想到”和“得到”之间,仅隔着一个“做到”的距离。\\n\\n迈出第一步固然艰难,但坚持下去就会享受到红利。就像跳进泳池的一刹那,刚开始让人恐慌,适应水温后很快就乐在其中。\\n\\n想要拖延的时候,不妨尝试5秒定律:在心里倒数5个数,然后即刻行动起来。给自己设定临界点,可以提高执行力,高效地完成任务。\\n\\n8、忌渴求完美,宜自我接纳\\n\\n有…","guid":"https://www.zhihu.com/question/580956751/answer/77617437944","author":"柠檬草","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T12:28:59.543Z","media":[{"url":"https://pic1.zhimg.com/v2-dac9404d56699a4c4f5a40b585b5fd70.jpg","type":"photo","width":1080,"height":1440,"blurhash":"LKL{#0^jA1Z*}7o|NyxYyEkq%LR+"},{"url":"https://pic1.zhimg.com/v2-a2971da4b3c8b943385f2941c9a81644.jpg","type":"photo","width":1080,"height":1440,"blurhash":"LKKwB@ZLGcO=+@s7NKIBE.i_$~xu"},{"url":"https://pica.zhimg.com/v2-6be467006f43a1cfd09f4e12b05614d3.jpg","type":"photo","width":1080,"height":810,"blurhash":"L5JGfp.A9lD6}84VE2^zI0GZGt17"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床医学该学python 还是R?-达菲齐的回答:毫无疑问r","url":"https://www.zhihu.com/question/9225232333/answer/77499770137","content":"临床医学该学python 还是R?毫无疑问r
","description":"临床医学该学python 还是R? 达菲齐的回答\\n\\n\\n毫无疑问r","guid":"https://www.zhihu.com/question/9225232333/answer/77499770137","author":"达菲齐","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T08:50:27.928Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床医学该学python 还是R?-hka的回答:深度学习在单细胞和其它组学算法中的占比越来越大,而PyTorch是目前科研界最主流的深度学习框架。以后用Python的机会会很...","url":"https://www.zhihu.com/question/9225232333/answer/77490919120","content":"临床医学该学python 还是R?深度学习在单细胞和其它组学算法中的占比越来越大,而PyTorch是目前科研界最主流的深度学习框架。以后用Python的机会会很多的。
","description":"临床医学该学python 还是R? hka的回答\\n\\n\\n深度学习在单细胞和其它组学算法中的占比越来越大,而PyTorch是目前科研界最主流的深度学习框架。以后用Python的机会会很多的。","guid":"https://www.zhihu.com/question/9225232333/answer/77490919120","author":"hka","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T08:35:15.609Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?-年年叙的回答:你们的r语言都是在虚拟机里面的嘛?","url":"https://www.zhihu.com/question/5929451559/answer/77285709556","content":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?你们的r语言都是在虚拟机里面的嘛?
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? 年年叙的回答\\n\\n\\n你们的r语言都是在虚拟机里面的嘛?","guid":"https://www.zhihu.com/question/5929451559/answer/77285709556","author":"年年叙","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T02:40:16.619Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"医学生还需要学R语言吗?-年年叙的回答:你们的R语言都是装在虚拟机里面的嘛","url":"https://www.zhihu.com/question/6374954884/answer/77281593391","content":"医学生还需要学R语言吗?你们的R语言都是装在虚拟机里面的嘛
","description":"医学生还需要学R语言吗? 年年叙的回答\\n\\n\\n你们的R语言都是装在虚拟机里面的嘛","guid":"https://www.zhihu.com/question/6374954884/answer/77281593391","author":"年年叙","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-12T02:34:03.778Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 功效分析","url":"https://zhuanlan.zhihu.com/p/14218955888","content":"写在前面R语言在进行统计分析和数据处理方面具有多种优势,在R语言中进行功效分析(power analysis)同样很方便,R环境中有pwr、powerAnalysis、simr等包可支持功效分析,结合其可视化能力及与其它方法整合的灵活性,为R语言中的功效分析提供了良好的生态。更多R语言教程和测试数据可见: R语言基础学习手册 什么是功效分析当不知道一个研究需要多少个受试者(样本量)或不清楚当一个研究有n个样本量时值不值得做时,功效分析可…","description":"写在前面R语言在进行统计分析和数据处理方面具有多种优势,在R语言中进行功效分析(power analysis)同样很方便,R环境中有pwr、powerAnalysis、simr等包可支持功效分析,结合其可视化能力及与其它方法整合的灵活性,为R语言中的功效分析提供了良好的生态。更多R语言教程和测试数据可见: R语言基础学习手册 什么是功效分析当不知道一个研究需要多少个受试者(样本量)或不清楚当一个研究有n个样本量时值不值得做时,功效分析可…","guid":"https://zhuanlan.zhihu.com/p/14218955888","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-11T12:35:42.563Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r语言爬虫示例","url":"https://zhuanlan.zhihu.com/p/17786412464","content":"问题:网站数据的读取及整理问题重述访问“中华人民共和国教育部”网站,提取所有高等学校的基本信息(包括校名、主管部门、所在地、办学层次)形成数据框变量,并存入文件。 数据爬虫方法首先查找“中华人民共和国教育部”网站显示所有高等学校的基本信息的网址为 https://hudong.moe.gov.cn/qggxmd/# ,观察尝试读取数据,具体读取代码如下:rm(list=ls()) library(rvest) library(dplyr) # 定义要爬取的网页URL url =\\"https://hudong.moe.gov.c…","description":"问题:网站数据的读取及整理问题重述访问“中华人民共和国教育部”网站,提取所有高等学校的基本信息(包括校名、主管部门、所在地、办学层次)形成数据框变量,并存入文件。 数据爬虫方法首先查找“中华人民共和国教育部”网站显示所有高等学校的基本信息的网址为 https://hudong.moe.gov.cn/qggxmd/# ,观察尝试读取数据,具体读取代码如下:rm(list=ls()) library(rvest) library(dplyr) # 定义要爬取的网页URL url =\\"https://hudong.moe.gov.c…","guid":"https://zhuanlan.zhihu.com/p/17786412464","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-11T10:33:03.762Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言管道操作是干什么的呢?-123456的回答:函数式编程的,灵活度完爆Python以及其他语言例如Java的stream","url":"https://www.zhihu.com/question/4663782745/answer/76760541991","content":"R语言管道操作是干什么的呢?函数式编程的,灵活度完爆Python以及其他语言例如Java的stream
","description":"R语言管道操作是干什么的呢? 123456的回答\\n\\n\\n函数式编程的,灵活度完爆Python以及其他语言例如Java的stream","guid":"https://www.zhihu.com/question/4663782745/answer/76760541991","author":"123456","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-11T05:39:38.232Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基本图形绘制之点图——基于ggplot2","url":"https://zhuanlan.zhihu.com/p/17709709904","content":"点图提供了一种在简单水平刻度上绘制大量标签值的方法。使用函数 dotchart()创建点图: ggplot(data,aes(x=contvar,y=catvar))+geom_point()# data是一个数据框,contvar是一个连续型变量,catvar是一个分类变量。 例 使用mpg数据集中2008年各车型的每加仑汽油高速公路行驶英里数。每加仑汽油高速公路行驶英里数取每种车型的平均值 library(ggplot2) library(dplyr) plotdata<-mpg %>% filter(year==\\"2008\\") %>% group_by(model)…","description":"点图提供了一种在简单水平刻度上绘制大量标签值的方法。使用函数 dotchart()创建点图: ggplot(data,aes(x=contvar,y=catvar))+geom_point()# data是一个数据框,contvar是一个连续型变量,catvar是一个分类变量。 例 使用mpg数据集中2008年各车型的每加仑汽油高速公路行驶英里数。每加仑汽油高速公路行驶英里数取每种车型的平均值 library(ggplot2) library(dplyr) plotdata<-mpg %>% filter(year==\\"2008\\") %>% group…","guid":"https://zhuanlan.zhihu.com/p/17709709904","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-11T02:29:32.341Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言管道操作是干什么的呢?-邻家猛男的回答:强制爱。","url":"https://www.zhihu.com/question/4663782745/answer/76528011608","content":"R语言管道操作是干什么的呢?强制爱。
","description":"R语言管道操作是干什么的呢? 邻家猛男的回答\\n\\n\\n强制爱。","guid":"https://www.zhihu.com/question/4663782745/answer/76528011608","author":"邻家猛男","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T21:26:56.050Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何解决这个。。。?-张敬信的回答:这不是一个 R 包。","url":"https://www.zhihu.com/question/9177385024/answer/76526913155","content":"如何解决这个。。。?这不是一个 R 包。
","description":"如何解决这个。。。? 张敬信的回答\\n\\n\\n这不是一个 R 包。","guid":"https://www.zhihu.com/question/9177385024/answer/76526913155","author":"张敬信","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T21:15:12.446Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床医学该学python 还是R?-张敬信的回答:科研领域,毫无疑问 R 是更优选择。","url":"https://www.zhihu.com/question/9225232333/answer/76526721490","content":"临床医学该学python 还是R?科研领域,毫无疑问 R 是更优选择。
","description":"临床医学该学python 还是R? 张敬信的回答\\n\\n\\n科研领域,毫无疑问 R 是更优选择。","guid":"https://www.zhihu.com/question/9225232333/answer/76526721490","author":"张敬信","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T21:12:51.336Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言管道操作是干什么的呢?-张敬信的回答:其它语言也有类似的实现,但是像 R 这样内置 整洁评估 (直接使用变量名不用加引号,整洁选择)的好像没有。 magrit...","url":"https://www.zhihu.com/question/4663782745/answer/76526412644","content":"R语言管道操作是干什么的呢?其它语言也有类似的实现,但是像 R
这样内置 整洁评估 (直接使用变量名不用加引号,整洁选择)的好像没有。
magrittr
包引入了管道操作 %>%
(R 4.1 开始支持原生管道 |>
),能够通过管道将数据从一个函数传给另一个函数,从而用若干函数构成的管道依次变换你的数据:
x |> f() |> g() # 同 g(f(x))
表示依次对数据进行若干操作:先对数据 x
进行 f
操作,接着对结果数据进行 g
操作,这比原来的从内往外读 g(f(x))
可读性要好得多,特别是考虑到实际的函数名更长,涉及更多嵌套。
使用管道的好处:
• 避免使用过多的中间变量,节省内存
• 程序可读性大大增强:对数据集依次进行一系列操作
示例:对数据集 mtcars
,先筛选自动挡汽车,再对连续变量 mpg
做关于 cyl
的分组汇总计算均值:
mtcars |>\\n filter(am == 0) |>\\n summarise(mpg_avg = mean(mpg), .by = cyl)
管道也支持 base R
函数,但是有为了管道而管道的嫌疑,更建议将管道用于 tidyverse
数据操作流。
先学r,有余力再学py,r足够应付那点湿组的生信需求了
","description":"临床医学该学python 还是R? kkkwatermelon的回答\\n\\n\\n先学r,有余力再学py,r足够应付那点湿组的生信需求了","guid":"https://www.zhihu.com/question/9225232333/answer/76391917188","author":"kkkwatermelon","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T13:58:00.723Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有哪些很好玩而且很有用的 R 包?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用...","url":"https://www.zhihu.com/question/30978260/answer/76327472993","content":"有哪些很好玩而且很有用的 R 包?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot在之前的 1-5 期文章中介绍了折线图相关绘图,点击下方卡片跳转到对应文章:
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
本期利用 python 的 pyecharts 可视化库绘制疫情动态时序地图、动态时序柱状图、动态时序折线图、动态时序饼图等来展示疫情情况,希望对大家有所帮助,如有疑问或者需要改进的地方可以在评论区留言。
涉及到的库:
Pandas — 数据处理
Pyecharts — 数据可视化
import pandas as pd\\nfrom pyecharts.charts import Bar\\nfrom pyecharts.charts import Map\\nfrom pyecharts.charts import Pie\\nfrom pyecharts.charts import Line\\nfrom pyecharts.charts import Timeline\\nfrom pyecharts import options as opts\\nimport warnings\\nwarnings.filterwarnings(\'ignore\')
df = pd.read_excel(\\"C:/Users/王/Downloads/2020-2022疫情数据.xlsx\\")\\ndf.head(10)
df1 = df.copy()\\ndf1[\'month\'] = pd.DatetimeIndex(df1[\\"date\\"]).month\\ndf1[\'year\'] = pd.DatetimeIndex(df1[\\"date\\"]).year\\ndf1[\'month\'] = df1[\'month\'].astype(\'str\')\\ndf1[\'year\'] = df1[\'year\'].astype(\'str\')\\ndf1[\'year_month\'] = df1[\'year\']+\'_\'+df1[\'month\']
就医学统计学和生物信息学方面而言,两种语言都很适合,有各类丰富完善的包。
根据我的身边统计学,大多认识的临床医学相关的朋友以用R的居多,尤其是单细胞分析,转录组学分析等。毕竟R作为为统计而生的语言,这方面也算是R语言的看家本领。优势是网上的应用教程和现有代码丰富,相关的包比较好找。
如果你有一些编程向的思维的话,Python可能会更适应你的习惯。Python在一些语法和编程思维上更加贴近于C语言,写起来可能会感觉更加丝滑。此外,Python的功能更加全面(应用的领域很广),包管理工具也丰富。如果涉及到略复杂的算法(比如神经科学),Python也比较利于对复杂算法的实现。
此外,你可以参考自己的课题组或者想进的课题组在用哪种语言更多。毕竟还是有旧代码能用就不会重新写,最好还是能够读懂祖传代码比较好。
","description":"临床医学该学python 还是R? 踏雪兰妃的回答\\n\\n\\n就医学统计学和生物信息学方面而言,两种语言都很适合,有各类丰富完善的包。\\n\\n根据我的身边统计学,大多认识的临床医学相关的朋友以用R的居多,尤其是单细胞分析,转录组学分析等。毕竟R作为为统计而生的语言,这方面也算是R语言的看家本领。优势是网上的应用教程和现有代码丰富,相关的包比较好找。\\n\\n如果你有一些编程向的思维的话,Python可能会更适应你的习惯。Python在一些语法和编程思维上更加贴近于C语言,写起来可能会感觉更加丝滑。此外,Python的功能更加全面(应用的领域很广),包管理工具也丰富…","guid":"https://www.zhihu.com/question/9225232333/answer/76028123122","author":"踏雪兰妃","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T05:01:58.839Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言笔记","url":"https://zhuanlan.zhihu.com/p/17548561380","content":"roll<-function(){ die<-1:6 dice<-sample(die,size=2,replace=TRUE) sum(dice) } roll() library(\\"ggplot2\\") replicate(10,roll()) rolls<-replicate(10000,roll()) qplot(rolls,binwidth=1) library(\\"ggplot2\\") roll<-function(){ die<-1:6 dice<-sample(die,size=2,replace = TRUE, prob=c(1/4,1/8,1/8,1/8,1/4,1/8)) sum(dice) } rolls<-replicate(10000,roll()) qplot(rolls,binwidth=1) die<-c(1,2,3,4,5,6) is.vector(die…","description":"roll<-function(){ die<-1:6 dice<-sample(die,size=2,replace=TRUE) sum(dice) } roll() library(\\"ggplot2\\") replicate(10,roll()) rolls<-replicate(10000,roll()) qplot(rolls,binwidth=1) library(\\"ggplot2\\") roll<-function(){ die<-1:6 dice<-sample(die,size=2,replace = TRUE, prob=c(1/4,1/8…","guid":"https://zhuanlan.zhihu.com/p/17548561380","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T04:11:33.571Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"RStudio !Window XP 32 位该下哪个版本?官网貌似没有XP对应版本。-细猪技术的回答:原文链接:Windows系统安装R+RStudio+Rtools 欢迎关注“细猪技术”微信公众...","url":"https://www.zhihu.com/question/32128419/answer/75822733205","content":"RStudio !Window XP 32 位该下哪个版本?官网貌似没有XP对应版本。原文链接:Windows系统安装R+RStudio+Rtools
欢迎关注“细猪技术”微信公众号,更早获取最新资讯
一、R+RStudio+Rtools简介
R是一种用于数据统计分析(线性和非线性建模、经典统计检验、时间序列分析、分类和聚类等)和图形化的语言和环境,且扩展性很强。R是一个GNU项目,它类似于贝尔实验室(以前的AT&T,现在的朗讯技术)约翰·钱伯斯及其同事开发的S语言和环境。S语言往往是统计方法研究的首选工具,而R语言提供了一条开源途径。R作为开源程序,同意通用公共许可协议GNU且开放源代码,R可以在各种类UNIX系统、Windows和MacOS上编译和运行。R能够相对容易地制作出高质量的出版级图表,且对图表中的必要符号、计算公式以及微小设计也保留了完全的用户权限。RStudio是最理想的R编辑运行工具之一,支持纯R脚本、脚本文档混排(Rmarkdown)、脚本文档混排成书(Bookdown)和交互式网络应用(Shiny)等。RStudio是R的集成开发环境(IDE),包括控制台、支持代码执行的语法编辑器以及用于绘图、历史记录、调试和工作区管理的工具。RStudio有商业版本和非商业版本,可以使用桌面版(Windows/Mac/Linux)连接到RStudioServer或RStudioWorkbench的网页浏览器上运行(Debian/Ubuntu/RedHat/CentOS)。Rtools是R语言的一个工具包,安装流程简单,建议根据使用的R版本自行下载安装使用。Rtools提供了一个适用于R的Windows平台工具链,包括GNU make,GNU gcc和UNIX-ish平台上的实用程序。
二、R+RStudio+Rtools安装
(1) R安装
① 打开R官网(https://www.r-project.org/),点击页面左侧的“CRAN”按钮进入镜像网站;
② 选择中国高校镜像地址,以清华大学为例,点击对应链接跳转;
③ 点击“Download R for Windows”,跳转适配Windows系统的R安装包下载界面;
④ 作为第一次安装R,点击“install R for the first time”;
⑤ 点击“Download R-4.4.0 for Windows”,开始下载;
⑥ 双击打开“R-4.4.0-win”安装程序,选择“中文(简体)”,点击“确定”执行下一安装步骤;
⑦ 浏览安装信息,点击“下一步(N)”执行下一安装步骤;
⑧ 推荐使用安装向导默认的安装路径(系统盘),点击“下一步(N)”执行下一安装步骤;
⑨ 推荐使用安装向导默认的安装文件,点击“下一步(N)”执行下一安装步骤;
⑩ 选择“No(接受默认选项)”,点击“下一步(N)”执行下一安装步骤;
⑪ 推荐使用安装向导默认的开始菜单文件夹,点击“下一步(N)”执行下一安装步骤;
⑫ 选择“版本信息保存于注册表内”和“把R程序同.RData文件联合起来”,点击“下一步(N)”执行安装;
⑬ 安装成功,点击“结束(F)”退出安装程序;
⑭ 打开R,检查R包安装和载入与基础安装数据是否正常。执行下述三条命令演示安装和载入A3程序包以及cars数据输出。
install.packages(\\"A3\\")\\nlibrary(A3)\\ncars
(2) RStudio安装
① 打开RStudio官网(https://rstudio.com/),点击页面右上方“DOWNLOAD RSTUDIO”按钮进入下载界面;
② 点击页面右上方“DOWNLOAD RSTUDIO”按钮进入下一级下载界面;
③ 下拉页面,点击“DOWNLOAD RSTUDIO DESKTOP FOR WINDOWS”下载Windows桌面版RStudio安装包;
④ 双击打开“RStudio-2024.04.0-735.exe”安装程序,点击“下一步(N)”执行下一安装步骤;
⑤ 推荐使用安装向导默认的安装路径(系统盘),点击“下一步(N)”执行下一安装步骤;
⑥ 推荐使用安装向导默认的开始菜单文件夹,点击“安装(I)”执行安装;
⑦ 安装成功,点击“完成(F)”退出安装程序;
⑧ 打开RStudio,执行下述程序安装命令测试RStudio。
install.packages(\\"ggplot2\\")
(3) Rtools安装
① 访问Rtools网页(https://cran.r-project.org/bin/windows/Rtools/),点击“RTools 4.4”按钮进入与R版本适配的Rtools 4.4安装包下载界面;
② 点击“Rtools44 installer”按钮下载Rtools44程序安装包;
③ 双击打开“rtools44-6104-6039.exe”安装程序,推荐使用安装向导默认的安装路径(系统盘),点击“Next”执行下一安装步骤;
④ 选择“Save version information to registry”和“Create start-menu icons to msy2 chells”,点击“Next”执行下一安装步骤;
⑤ 检查安装信息,点击“Install”执行安装;
⑥ 安装成功,点击“Finish”退出安装程序。
至此,Windows版本的R+RStudio+Rtools程序安装完成了,恭喜你成为功能强悍的全新R4.4程序用户。本文提供4.4版本的R+RStudio+Rtools程序安装包,公众号后台回复“R1”获取安装包。
","description":"RStudio !Window XP 32 位该下哪个版本?官网貌似没有XP对应版本。 细猪技术的回答\\n\\n\\n原文链接:Windows系统安装R+RStudio+Rtools\\n\\n欢迎关注“细猪技术”微信公众号,更早获取最新资讯\\n\\n一、R+RStudio+Rtools简介\\n\\nR是一种用于数据统计分析(线性和非线性建模、经典统计检验、时间序列分析、分类和聚类等)和图形化的语言和环境,且扩展性很强。R是一个GNU项目,它类似于贝尔实验室(以前的AT&T,现在的朗讯技术)约翰·钱伯斯及其同事开发的S语言和环境。S语言往往是统计方法研究的首选工具,而R语言提供了一条开源途径…","guid":"https://www.zhihu.com/question/32128419/answer/75822733205","author":"细猪技术","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T01:08:25.220Z","media":[{"url":"https://picx.zhimg.com/50/v2-b1d26fd3b4a31b40a7d4f663b1eb642f.jpg","type":"photo","width":1080,"height":700,"blurhash":"L6R:HH.9WZ_N-;xtoIt69ExYM_WA"},{"url":"https://pica.zhimg.com/50/v2-64e90ce0e9dd5d48f0e4033d48eb8ed5.jpg","type":"photo","width":1080,"height":812,"blurhash":"LORp8_M;D*~o-;obj]Rloyoyj[WB"},{"url":"https://pic1.zhimg.com/50/v2-254720fdc7c2deff11aad9de77477f29.jpg","type":"photo","width":1080,"height":587,"blurhash":"LGQ]++-@04Rq.7ITot%KtKICt1t6"},{"url":"https://picx.zhimg.com/50/v2-dea078225e29702033e57c656c6a5180.jpg","type":"photo","width":1080,"height":407,"blurhash":"LJRW0d?axu?b~pxvt7t7?bRjM{V["},{"url":"https://pica.zhimg.com/50/v2-e780adb55e0cf41b6eee984c83b5c18f.jpg","type":"photo","width":1080,"height":694,"blurhash":"LCR3QX_4E9D]%LScR%t1k7Iok7ox"},{"url":"https://picx.zhimg.com/50/v2-756978e530f2988503cff6a4be5de2b0.jpg","type":"photo","width":475,"height":231,"blurhash":"LXO;0tShOsS$~WRkWBRj57j[aJt6"},{"url":"https://pic1.zhimg.com/50/v2-72ebeb81185bf9765c4877f824ced153.jpg","type":"photo","width":594,"height":405,"blurhash":"LBRMb%-;a}?b_NM{t7t7I:IUogxu"},{"url":"https://picx.zhimg.com/50/v2-6a28a65ebca46b591731cf9792d2c95b.jpg","type":"photo","width":594,"height":405,"blurhash":"LAQv%i-;%0~p.SIUxat7%KV?IqRn"},{"url":"https://picx.zhimg.com/50/v2-8b1f63fd11ee639d1b2bcd699aef351d.jpg","type":"photo","width":594,"height":405,"blurhash":"LARW3kR+IV_3_NIUWBtR0Kxtxaj@"},{"url":"https://pica.zhimg.com/50/v2-fda8aade6701f780c61513afa35dff01.jpg","type":"photo","width":594,"height":405,"blurhash":"LDR3QPnOkW_N?bIUozxuX.kWV@RP"},{"url":"https://picx.zhimg.com/50/v2-0bcfd6a9a4acf683a0c97536b9e15df0.jpg","type":"photo","width":594,"height":405,"blurhash":"LBR3TX-;oz~q_3M{j[t7WBM{ayt7"},{"url":"https://picx.zhimg.com/50/v2-4d22361d0b65bcf58cacc991f92cc008.jpg","type":"photo","width":594,"height":405,"blurhash":"LDQvzZRkoz~q?vIUf6t8%gxaM{M{"},{"url":"https://pic1.zhimg.com/50/v2-f0a64ff0300d005a6178d316e190c61f.jpg","type":"photo","width":594,"height":405,"blurhash":"LARMoEPC9~.9pJW=%Mf+0J?F%1xt"},{"url":"https://picx.zhimg.com/50/v2-f65b2fd813ad33466774bb9f5f3a4b48.jpg","type":"photo","width":675,"height":1004,"blurhash":"LBRp8?4XIU_3.7M{R%t6SctQS2Rk"},{"url":"https://picx.zhimg.com/50/v2-dd841a4e91e2370e0b7d69fd23d7bbd2.jpg","type":"photo","width":1080,"height":584,"blurhash":"LlN^b$~q-;?b-=adRjRj?bWBIUM{"},{"url":"https://picx.zhimg.com/50/v2-40109196ea7ca812fcca32c30eefc829.jpg","type":"photo","width":1080,"height":806,"blurhash":"LIRfqUog%1-;~pt7NHs:RnM|WAWV"},{"url":"https://picx.zhimg.com/50/v2-fecb7dbb4f9e5211601a2d363a38e0ba.jpg","type":"photo","width":1080,"height":496,"blurhash":"LkQJo[bcxa-p~qWBWBayDixaazWC"},{"url":"https://pic1.zhimg.com/50/v2-561e96899b9c556aa4e3955981b52bac.jpg","type":"photo","width":737,"height":461,"blurhash":"LvN,}R019GofRkWBj[ayxu%Lt7j["},{"url":"https://pic1.zhimg.com/50/v2-e0381d19cc67e86ca3939553e143ea6c.jpg","type":"photo","width":623,"height":450,"blurhash":"L7QcuEOI9b?c_4D*xwM~NbslohM}"},{"url":"https://pica.zhimg.com/50/v2-d963e7685cd959a1da8d0d68a78c6bd8.jpg","type":"photo","width":499,"height":360,"blurhash":"LBQ].-IX0LW@XBNft9NK01%Mxvt8"},{"url":"https://picx.zhimg.com/50/v2-660d02d0b4978a8ebc0702ef62877d83.jpg","type":"photo","width":499,"height":360,"blurhash":"L.NKF-01IU%LWBWBayWCxt%LofWB"},{"url":"https://pic1.zhimg.com/50/v2-fa6eebe01011d045bfb415f32c788236.jpg","type":"photo","width":930,"height":1018,"blurhash":"L9SP30=zNa~WysOYoykBC7NGaKW:"},{"url":"https://picx.zhimg.com/50/v2-c5b41cca7245aec6b158b1257a7a1de8.jpg","type":"photo","width":702,"height":426,"blurhash":"LGRC=3$.N4%N_N-+X3t6T1tRSia}"},{"url":"https://picx.zhimg.com/50/v2-5c4b56fedd91090c174f6c9e8161766b.jpg","type":"photo","width":837,"height":660,"blurhash":"LFQcn~xZxt?b?wofocs:t,t7jFn$"},{"url":"https://picx.zhimg.com/50/v2-1c408696631f98d7642f490af86ed286.jpg","type":"photo","width":695,"height":491,"blurhash":"LBQT4O0M0LW@-=IUR+RkIoRjofWB"},{"url":"https://picx.zhimg.com/50/v2-2fbcb5e4f0f63c8f0f3c369cf4fbfe6b.jpg","type":"photo","width":475,"height":390,"blurhash":"L9Q].,xuIp_N_ND*oztRJAadWBof"},{"url":"https://pica.zhimg.com/50/v2-4ac921bd2b71701a95826d7e170f2794.jpg","type":"photo","width":475,"height":390,"blurhash":"L9R3TW%MNG_N~qIVkCkCo#t7NGRj"},{"url":"https://picx.zhimg.com/50/v2-f530f99b450ff3c5e03d744f932a4ec5.jpg","type":"photo","width":475,"height":390,"blurhash":"L8RD4fB=5T~qt-XTx]oz00^*-po#"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Windows系统安装R+RStudio+Rtools","url":"https://zhuanlan.zhihu.com/p/17493164658","content":"原文链接:Windows系统安装R+RStudio+Rtools 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、R+RStudio+Rtools简介R是一种用于数据统计分析(线性和非线性建模、经典统计检验、时间序列分析、分类和聚类等)和图形化的语言和环境,且扩展性很强。R是一个GNU项目,它类似于贝尔实验室(以前的AT&T,现在的朗讯技术)约翰·钱伯斯及其同事开发的S语言和环境。S语言往往是统计方法研究的首选工具,而R语言提供了一条开源途径。R…","description":"原文链接:Windows系统安装R+RStudio+Rtools 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、R+RStudio+Rtools简介R是一种用于数据统计分析(线性和非线性建模、经典统计检验、时间序列分析、分类和聚类等)和图形化的语言和环境,且扩展性很强。R是一个GNU项目,它类似于贝尔实验室(以前的AT&T,现在的朗讯技术)约翰·钱伯斯及其同事开发的S语言和环境。S语言往往是统计方法研究的首选工具,而R语言提供了一条开源途径。R…","guid":"https://zhuanlan.zhihu.com/p/17493164658","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-10T01:08:24.111Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-颖子颖的回答:人生是什么并不重要,重要的是我们对人生的态度。豁达是心胸开阔,性格开朗,能容人容事。豁达是遇宠不骄,处...","url":"https://www.zhihu.com/question/580956751/answer/75694958078","content":"能否分享一些让你豁然开朗的句子?人生是什么并不重要,重要的是我们对人生的态度。豁达是心胸开阔,性格开朗,能容人容事。豁达是遇宠不骄,处变不惊。豁达是大度,遇事泰然,面对困境无惧色,昂首品味生活酸涩,尔后笑看云开日出。
人,必须豁达大度,自己豁达,才不至于钻入死胡同或牛角尖,才能乐观进取,才能站得高看得远;豁达才有大度,才有严于律己,宽以待人,从而自己开朗,快乐也带给了别人,生活的氛围就充斥着温情和愉悦。
人有喜喜哀乐,月有阴晴圆缺,人生苦短,何必要难为自己,伤自已的心。学会豁达乐观,学会顺其自然,得之必然,失之坦然才能随逢而安。
豁达是一种坦荡,那心灵像一汪碧泉清澈见底,容不得半点污秽和虚伪,是黑而决不会说白,是鹿决不会说是马。
","description":"能否分享一些让你豁然开朗的句子? 颖子颖的回答\\n\\n\\n人生是什么并不重要,重要的是我们对人生的态度。豁达是心胸开阔,性格开朗,能容人容事。豁达是遇宠不骄,处变不惊。豁达是大度,遇事泰然,面对困境无惧色,昂首品味生活酸涩,尔后笑看云开日出。\\n\\n人,必须豁达大度,自己豁达,才不至于钻入死胡同或牛角尖,才能乐观进取,才能站得高看得远;豁达才有大度,才有严于律己,宽以待人,从而自己开朗,快乐也带给了别人,生活的氛围就充斥着温情和愉悦。\\n\\n人有喜喜哀乐,月有阴晴圆缺,人生苦短,何必要难为自己,伤自已的心。学会豁达乐观,学会顺其自然,得之必然,失之坦然才能随逢而安。\\n\\n豁…","guid":"https://www.zhihu.com/question/580956751/answer/75694958078","author":"颖子颖","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-09T16:30:28.037Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言单细胞分析步骤封装成函数1","url":"https://zhuanlan.zhihu.com/p/17459062856","content":"R语言单细胞分析步骤有很多,对于一些经常用的重复步骤,慢慢地装成函数,方便下次使用。 Seurat寻找高可变基因到UMAP步骤封装成函数:run_seurat <- function(seurat_ob,dims,cluster_name,reduction_name) { sc <- NormalizeData(seurat_ob) %>% FindVariableFeatures(selection.method = \\"vst\\",nfeatures = 2000) %>% ScaleData(features = rownames(.)) %>% RunPCA(npcs = 30,verbose = T,features = VariableFeatures(.)) %…","description":"R语言单细胞分析步骤有很多,对于一些经常用的重复步骤,慢慢地装成函数,方便下次使用。 Seurat寻找高可变基因到UMAP步骤封装成函数:run_seurat <- function(seurat_ob,dims,cluster_name,reduction_name) { sc <- NormalizeData(seurat_ob) %>% FindVariableFeatures(selection.method = \\"vst\\",nfeatures = 2000) %>% ScaleData(features = rownames…","guid":"https://zhuanlan.zhihu.com/p/17459062856","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-09T13:54:02.678Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"澄清概念-准确理解信息和知识的含义-2准确理解语词-消除模糊词语-明确词项所指的内涵和外延","url":"https://zhuanlan.zhihu.com/p/17173037988","content":"把问题搞清楚了,解决方案也就出现了 消除模糊的目标就是:搞清词语的确切含义和所指对象。就是搞清词语的内涵和外延。 .... 思考题:概念和专名的关系是什么? 名词:概念-专名 名词:用来描述世界的重要词类,可分为以下两类: 1专名:北京、鲁迅. 2 概念:首都、作家 3摹状短语 若把概念看成对象的集合 外延:集合里包含的所有对象(集合里有哪些具体对象) 内涵:集合里对象的共同属性(以及,区别于其它概念、集合的独特属性) 很多事物没有…","description":"把问题搞清楚了,解决方案也就出现了 消除模糊的目标就是:搞清词语的确切含义和所指对象。就是搞清词语的内涵和外延。 .... 思考题:概念和专名的关系是什么? 名词:概念-专名 名词:用来描述世界的重要词类,可分为以下两类: 1专名:北京、鲁迅. 2 概念:首都、作家 3摹状短语 若把概念看成对象的集合 外延:集合里包含的所有对象(集合里有哪些具体对象) 内涵:集合里对象的共同属性(以及,区别于其它概念、集合的独特属性) 很多事物没有…","guid":"https://zhuanlan.zhihu.com/p/17173037988","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-09T08:16:01.459Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于R语言的DICE模型应用","url":"https://zhuanlan.zhihu.com/p/17374761178","content":"随着温室气体排放量的增大和温室效应的增强,全球气候变化问题受到日益的关注。我国政府庄严承诺在2030和2060年分别达到“碳达峰”和“碳中和”,因此气候变化和碳排放已经成为科研人员重点关心的问题之一。气候变化问题不仅仅是科学的问题,同时也是经济问题。为了综合评估气候变化及其带来的经济影响,很多经济-气候的综合模型被开发出来;其中2018年诺贝尔经济学奖得主W.D.Nordhaus开发的DICE型是运用最广泛的综合模型之一。…","description":"随着温室气体排放量的增大和温室效应的增强,全球气候变化问题受到日益的关注。我国政府庄严承诺在2030和2060年分别达到“碳达峰”和“碳中和”,因此气候变化和碳排放已经成为科研人员重点关心的问题之一。气候变化问题不仅仅是科学的问题,同时也是经济问题。为了综合评估气候变化及其带来的经济影响,很多经济-气候的综合模型被开发出来;其中2018年诺贝尔经济学奖得主W.D.Nordhaus开发的DICE型是运用最广泛的综合模型之一。…","guid":"https://zhuanlan.zhihu.com/p/17374761178","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-09T07:52:00.424Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"该如何学习 R 语言?-数据无忧的回答:精心整理R语言保姆级代码,每套代码均包含【代码+详细注释+实例数据】,几乎囊括机器学习所有主流模型,特别适合初学者想...","url":"https://www.zhihu.com/question/21654166/answer/75066143837","content":"该如何学习 R 语言?精心整理R语言保姆级代码,每套代码均包含【代码+详细注释+实例数据】,几乎囊括机器学习所有主流模型,特别适合初学者想快速入门R语言,掌握机器学习模型和统计模型的使用,实例数据均为公开数据或者R库里的自带数据,甚至可以直接拿来用。
Adaboost 算法
GBDT梯度提升算法
Meta分析
SEM:结构方程模型
XGB/XGBoost
方差分析
分位数回归
灰色关联度/灰色预测
聚类分析模型
决策树算法: ID3、C4.5、C50、条件推断树等
逻辑回归
面板数据:固定效应、随机效应
判别分析:LDA/Fisher 判别、Knn、距离判别、Bayes 判别
朴素贝叶斯
缺失值查询与数据插补
神经网络
COX生存分析
时间序列模型:Prophet算法/VECM
时间序列模型:指数预测模型+季节性分解+指数平滑模型+ARIMA模型
时间序列模型:ARIMA+GARCH(包含完整的分析)
随机森林模型
随机森林生存模型
套索回归+岭回归
线性回归模型
验证性因子分析(CFA)
支持向量机
趋势分析
预测用户是否进行购买产品
销量预测模型
各类检验:功效分析/卡方检验/秩和检验/t检验/费希尔精确概率检验/Friedman检验(弗里德曼双向评秩方差分析)等
部分代码展示
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=ifelse(Type==\\"A\\", Value, -Value), y=Date, fill=Type)) +\\n geom_bar(stat = \\"identity\\", width = 0.8) +\\n labs(y=\\"Date\\", x=\\"Value\\") +\\n scale_x_continuous(breaks=seq(-350,350,100), limits = c(-350,350),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = colors) +\\n scale_color_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/bar-negative.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
可学可不学,学了有点优势
","description":"医学生还需要学R语言吗? kkkwatermelon的回答\\n\\n\\n可学可不学,学了有点优势","guid":"https://www.zhihu.com/question/6374954884/answer/74887183701","author":"kkkwatermelon","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T17:08:20.714Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?-张敬信的回答:来看 tidyverse 优雅数据思维编程,也就是一行代...","url":"https://www.zhihu.com/question/8943154545/answer/74877412735","content":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?来看tidyverse
优雅数据思维编程,也就是一行代码的事。
合并因子水平,forcats
包有现成函数。
比如,starwars
的 skin_color
有 31 个类别:
library(tidyverse)\\nstarwars |> count(skin_color)
保留频数最高的 10 个类别,其余归到 others
,这属于修改列:
starwars |> \\n mutate(skin_color = fct_lump_n(skin_color, n = 10, other_level = \\"others\\", \\n ties.method = \\"first\\")) |>\\n count(skin_color, sort = TRUE)
注:为了展示效果,多加了一句 count()
分组计数。
如果只是选择前 10
大的高频(用于绘图),这只是筛选行,前面结果已经看到,前 10 高频是到 频数 = 2:
starwars |>\\n filter(n() >= 2, .by = skin_color)
这位漫步的思考者自问:“你原先打算从法义里,从师父处学到什么?你学了很多,却无法真正学到的又是什么?”他最终发现:“答案是‘我’。我要学的即是‘我’的意义及本质,‘我’,是我要摆脱、要制胜的东西。‘我’,却是我无法制胜,只能欺罔、逃遁,只能隐藏的东西。当真!世上再没什么别的,像我的‘我’这样让我费解。是‘我’,这个谜,让我活着,让我有别于他人,让我成为悉达多!在世上,我最一无所知的莫过于‘我’,莫过于悉达多!”
","description":"能否分享一些让你豁然开朗的句子? 来自小李的书摘的回答\\n\\n\\n这位漫步的思考者自问:“你原先打算从法义里,从师父处学到什么?你学了很多,却无法真正学到的又是什么?”他最终发现:“答案是‘我’。我要学的即是‘我’的意义及本质,‘我’,是我要摆脱、要制胜的东西。‘我’,却是我无法制胜,只能欺罔、逃遁,只能隐藏的东西。当真!世上再没什么别的,像我的‘我’这样让我费解。是‘我’,这个谜,让我活着,让我有别于他人,让我成为悉达多!在世上,我最一无所知的莫过于‘我’,莫过于悉达多!”","guid":"https://www.zhihu.com/question/580956751/answer/74846788586","author":"来自小李的书摘","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T15:36:56.414Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"空间分析 | 2 格局分析 3","url":"https://zhuanlan.zhihu.com/p/567814544","content":"就是介绍了3种数据分布形式:Join-count统计;Lacunarity analysis;Centrography点模式分析 3.1 Join-count统计分类数据,例土地利用类型(耕地;水体) 当空间随机变量是二值/类型的时候,Join-count用来评价空间离散/聚集程度 Join-count统计是全局统计,也称为黑-白统计(黑白、黑黑、白白) 二值化情况下, 变量临近区域的排列方式(Join)有三种:BB(1-1), BW(1-0), WW(0-0) [图片] !!!Join-count的解释(for BB/WW-同色)统计BB j…","description":"就是介绍了3种数据分布形式:Join-count统计;Lacunarity analysis;Centrography点模式分析 3.1 Join-count统计分类数据,例土地利用类型(耕地;水体) 当空间随机变量是二值/类型的时候,Join-count用来评价空间离散/聚集程度 Join-count统计是全局统计,也称为黑-白统计(黑白、黑黑、白白) 二值化情况下, 变量临近区域的排列方式(Join)有三种:BB(1-1), BW(1-0), WW(0-0) [图片] !!!Join-count的解释(for BB/WW-同色)统计BB j…","guid":"https://zhuanlan.zhihu.com/p/567814544","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T14:02:36.625Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"空间分析 | 2 相关分析 2","url":"https://zhuanlan.zhihu.com/p/567610968","content":"小结 [图片] 1 统计相关1.1 简单线性相关相关分析(Correlation)测试随机变量之间的统计依赖性(dependence) 相关系数(Coefficients)定量给出相关性的大小 相关性不能用于推断变量之间的因果关系(Causal relationship) (先因果,后相关) Pearson’s 相关系数- Pearson’s r是一种参数方法,衡量变量之间的线性相关性,反映整个样本的平均响应 [图片] Pearson‘s r 的统计显著性可以由n-2自由度 t-分布近似做显著性检验 [图片] #简单线性相关 cor.test(fa…","description":"小结 [图片] 1 统计相关1.1 简单线性相关相关分析(Correlation)测试随机变量之间的统计依赖性(dependence) 相关系数(Coefficients)定量给出相关性的大小 相关性不能用于推断变量之间的因果关系(Causal relationship) (先因果,后相关) Pearson’s 相关系数- Pearson’s r是一种参数方法,衡量变量之间的线性相关性,反映整个样本的平均响应 [图片] Pearson‘s r 的统计显著性可以由n-2自由度 t-分布近似做显著性检验 [图片] #简单线性相关 cor.test(fa…","guid":"https://zhuanlan.zhihu.com/p/567610968","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T14:01:52.690Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言:IPW深度解读-离散变量和连续变量情形","url":"https://zhuanlan.zhihu.com/p/17189396526","content":"温馨提示:若页面不能正常显示数学公式和代码,请阅读原文 获得更好的阅读体验。 阅读全文:R语言:IPW深度解读-离散变量和连续变量情形 (lianxh.cn) 作者:李增杰 (南开大学) 邮箱:Lazaroo@163.com 编者按:本文主要摘译自下文,特此致谢! Source:Andrew Heiss , 2020, Generating inverse probability weights for both binary and continuous treatments. -Link- Title:R语言:IPW深度解读-离散变量和连续变量情形Keywords:…","description":"温馨提示:若页面不能正常显示数学公式和代码,请阅读原文 获得更好的阅读体验。 阅读全文:R语言:IPW深度解读-离散变量和连续变量情形 (lianxh.cn) 作者:李增杰 (南开大学) 邮箱:Lazaroo@163.com 编者按:本文主要摘译自下文,特此致谢! Source:Andrew Heiss , 2020, Generating inverse probability weights for both binary and continuous treatments. -Link- Title:R语言:IPW深度解读…","guid":"https://zhuanlan.zhihu.com/p/17189396526","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T11:06:50.680Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化","url":"https://zhuanlan.zhihu.com/p/17169011736","content":"DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。 实际案例:评估全球碳税政策的影响假设我们要评估一项全球碳税政策对经济增长、碳排放和气候变化的影响。我们将使用DICE模型的基本框架来进行分析。 模型构建经济部分: 生产函数:假设使用…","description":"DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。 实际案例:评估全球碳税政策的影响假设我们要评估一项全球碳税政策对经济增长、碳排放和气候变化的影响。我们将使用DICE模型的基本框架来进行分析。 模型构建经济部分: 生产函数:假设使用…","guid":"https://zhuanlan.zhihu.com/p/17169011736","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T10:26:17.655Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用心制作--只为更好的承载生命的重量","url":"https://zhuanlan.zhihu.com/p/17180594970","content":"起初,绘制细胞注释的 MAP 图轻而易举。 首先,加载 Seurat 包: library(Seurat)接着,读入注释好的 Seurat object: soj <- readRDS(“/path/to/cellannot.rds”)随后,使用 DimPlot 函数绘制细胞注释的 UMAP 图,其中细胞注释对象命名为 “CellType”,降维方式为 “umap” 且标注细胞名: DimPlot(soj,group.by = “CellType”,reduction = \\"umap\\", label = T)如此,便能顺利得到细胞注释的 UMAP 图。若要保存图片,只需添加…","description":"起初,绘制细胞注释的 MAP 图轻而易举。 首先,加载 Seurat 包: library(Seurat)接着,读入注释好的 Seurat object: soj <- readRDS(“/path/to/cellannot.rds”)随后,使用 DimPlot 函数绘制细胞注释的 UMAP 图,其中细胞注释对象命名为 “CellType”,降维方式为 “umap” 且标注细胞名: DimPlot(soj,group.by = “CellType”,reduction = \\"umap\\", label = T)如此,便能顺利得到细胞注释的 UMAP 图…","guid":"https://zhuanlan.zhihu.com/p/17180594970","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T10:20:57.116Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于R语言的DICE模型实践技术应用;评估气候变化对经济的影响以及不同减排政策的经济成本和效益","url":"https://zhuanlan.zhihu.com/p/17170576411","content":"DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。 实际案例:评估全球碳税政策的影响假设我们要评估一项全球碳税政策对经济增长、碳排放和气候变化的影响。我们将使用DICE模型的基本框架来进行分析。 模型构建经济部分: 生产函数:假设使用…","description":"DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。 实际案例:评估全球碳税政策的影响假设我们要评估一项全球碳税政策对经济增长、碳排放和气候变化的影响。我们将使用DICE模型的基本框架来进行分析。 模型构建经济部分: 生产函数:假设使用…","guid":"https://zhuanlan.zhihu.com/p/17170576411","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T09:38:29.055Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?-张麒灵的回答:不会敲R代码的方法:手动删除前10以后的物种,其...","url":"https://www.zhihu.com/question/8943154545/answer/74598672735","content":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?不会敲R代码的方法:手动删除前10以后的物种,其他全都归为others
会敲R代码的方法:用dplyr删除前10以后的物种,其他全都归为others
","description":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”? 张麒灵的回答\\n\\n\\n不会敲R代码的方法:手动删除前10以后的物种,其他全都归为others\\n\\n会敲R代码的方法:用dplyr删除前10以后的物种,其他全都归为others","guid":"https://www.zhihu.com/question/8943154545/answer/74598672735","author":"张麒灵","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T09:10:50.015Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"一文学会基因ID转换","url":"https://zhuanlan.zhihu.com/p/17136402068","content":"常见的基因ID类型 基因ID转换可分为在不同物种间的Gene ID转换和同一物种不同基因ID类型的转换。今天分享的主要内容是针对同一物种不同基因ID类型的转换。 我们常见的基因名称有: Gene ID(Entrez ID)、Gene Symbol和Ensemble ID等。 Gene ID(又称Entrez ID):是由 NCBI (National Center for Biotechnology Information) 提供的一种独特的标识符,用于标识基因、蛋白质、文献等生物学信息资源中的条目。Entrez ID 是一个数字编号…","description":"常见的基因ID类型 基因ID转换可分为在不同物种间的Gene ID转换和同一物种不同基因ID类型的转换。今天分享的主要内容是针对同一物种不同基因ID类型的转换。 我们常见的基因名称有: Gene ID(Entrez ID)、Gene Symbol和Ensemble ID等。 Gene ID(又称Entrez ID):是由 NCBI (National Center for Biotechnology Information) 提供的一种独特的标识符,用于标识基因、蛋白质、文献等生物学信息资源中的条目。Entrez ID 是一个数字编号…","guid":"https://zhuanlan.zhihu.com/p/17136402068","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T08:07:02.793Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言保姆级【代码+详细注释+实例数据】","url":"https://zhuanlan.zhihu.com/p/17125878958","content":"精心整理R语言保姆级代码,每套代码均包含【代码+详细注释+实例数据】,几乎囊括机器学习所有主流模型,特别适合初学者想快速掌握机器学习模型和统计模型的使用,实例数据均为公开数据或者R库里的自带数据,甚至可以直接拿来用。需要的同学可以关注或评论后私信我。 R语言保姆级代码【代码+详细注释+实例数据】目录: Adaboost 算法 GBDT梯度提升算法 Meta分析 SEM:结构方程模型 XGB/XGBoost 方差分析 分位数回归 灰色关联度/灰…","description":"精心整理R语言保姆级代码,每套代码均包含【代码+详细注释+实例数据】,几乎囊括机器学习所有主流模型,特别适合初学者想快速掌握机器学习模型和统计模型的使用,实例数据均为公开数据或者R库里的自带数据,甚至可以直接拿来用。需要的同学可以关注或评论后私信我。 R语言保姆级代码【代码+详细注释+实例数据】目录: Adaboost 算法 GBDT梯度提升算法 Meta分析 SEM:结构方程模型 XGB/XGBoost 方差分析 分位数回归 灰色关联度/灰…","guid":"https://zhuanlan.zhihu.com/p/17125878958","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T07:21:15.281Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗?-south-bank的回答:将两个结果都列上去,然后使用置信区间的结果说明存在中介效应。","url":"https://www.zhihu.com/question/4909325593/answer/74445334555","content":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗?将两个结果都列上去,然后使用置信区间的结果说明存在中介效应。
","description":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗? south-bank的回答\\n\\n\\n将两个结果都列上去,然后使用置信区间的结果说明存在中介效应。","guid":"https://www.zhihu.com/question/4909325593/answer/74445334555","author":"south-bank","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T06:17:59.318Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何评价中国沸羊羊这么多?-我要珍惜账号的回答:主要原因就是家长们严防死守早恋,导致大多数中国小羊直到大学还是没吃过见过的生瓜蛋子。","url":"https://www.zhihu.com/question/599605312/answer/74405527874","content":"如何评价中国沸羊羊这么多?主要原因就是家长们严防死守早恋,导致大多数中国小羊直到大学还是没吃过见过的生瓜蛋子。
","description":"如何评价中国沸羊羊这么多? 我要珍惜账号的回答\\n\\n\\n主要原因就是家长们严防死守早恋,导致大多数中国小羊直到大学还是没吃过见过的生瓜蛋子。","guid":"https://www.zhihu.com/question/599605312/answer/74405527874","author":"我要珍惜账号","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T05:30:39.652Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想买本r语言入门书, R语言实战好还是R语言入门与实践更适合新手?-小郑同学的回答:同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的...","url":"https://www.zhihu.com/question/474083588/answer/74396442654","content":"想买本r语言入门书, R语言实战好还是R语言入门与实践更适合新手?同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下。
什么是R语言?
R语言是用于统计分析、绘图的语言和操作环境。R语言是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R语言是S语言的一个分支,可以认为R语言是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来新西兰奥克兰大学的Robert Gentleman和Ross Ihaka及其他志愿人员开发了一个R系统,由“R开发核心团队”负责开发。R可以看作贝尔实验室(AT&T BellLaboratories)的Rick Becker、John Chambers和Allan Wilks开发的S语言的一种实现。当然,S语言也是S-Plus的基础。所以,两者在程序语法上可以说是几乎一样的,可能只是在函数方面有细微差别。
为什么选择R语言?
除了R语言以外,市面上也有许多其他流行的统计和制图软件,如Microsoft Excel、SAS、IBM SPSS、Stata以及Minitab。为什么要选择R语言进行数据分析?
R有着非常多值得推荐的特性:
1、多数商业统计软件价格不菲,投入成千上万美元都是可能的。而R是免费的!
2、R是一个全面的统计研究平台,提供了各式各样的数据分析技术。几乎任何类型的数据分析工作皆可在R中完成。
3、R囊括了在其他软件中尚不可用的、先进的统计计算例程。事实上,新方法的更新速度是以周来计算的。
4、R拥有顶尖水准的制图功能。如果希望复杂数据可视化,那么R拥有最全面且最强大的一系列可用功能。
5、R是一个可进行交互式数据分析和探索的强大平台。举例来说,任意一个分析步骤的结果均可被轻松保存、操作,并作为进一步分析的输入。
6、R可以轻松地从各种类型的数据源导入数据,包括文本文件、数据库管理系统、统计软件,乃至专门的数据仓库。它同样可以将数据输出并写入到这些系统中。R也可以直接从网页、社交媒体网站和各种类型的在线数据服务中获取数据。
7、R是一个无与伦比的平台,在其上可使用一种简单而直接的方式编写新的统计方法。它易于扩展,并为快速编程实现新方法提供了一套十分自然的语言。
8、R的功能可以被整合进其他语言编写的应用程序,包括C++、Java、Python、PHP、Pentaho、SAS和SPSS。这让你在不同的语言环境中加入R的功能。
9、R可运行于多种平台之上,包括Windows、UNIX和Mac OS X。这基本上意味着它可以运行于你所能拥有的任何计算机上。
R语言获取及安装
R语言安装文件收存于R语言官方网站CRAN,其链接为:https://www.r-project.org/。
1、进入官方链接,点击CRAN进行镜像选择(一个镜像站点(或称镜像)是指另一个站点内容的拷贝。镜像通常用于为相同信息内容提供不同的源,特别是在下载量大的时候提供了一种可靠的网络连接。)
2、镜像涉及到下载速度,不过R语言安装文件不大,所以不同国家的镜像或同一国家的不同镜像下载时间相近,这里选择China的清华大学的镜像
3、根据自己电脑系统选择不同的安装包
4、以windows为例,点击 base,然后点击 Download R-4.4.2 for Windows 下载即为R语言安装包
5、找到下载的安装包,双击安装包,按照软件提示即可完成安装
R语言界面
1、主界面
打开R语言,其主界面如下,可以在>处输入命令行,按回车键(Enter)运行命令
2、脚本窗口
由于主页面命令行,只能一行一行运行命令,也可点击File→New script创建一个脚本窗口,可以在窗口写多行命令,然后选中多行命令,点击鼠标右键,选择Run line or selection同时运行多行命令。
R语言界面还涉及其他很多功能和设置,例如设置界面文字大小及代码文字大小、加载R语言包等,不过R语言的IDE(Integrated Development Environment,集成开发环境)—Rstudio提供了更为便捷的界面和更多的功能,这里不对R语言界面进行过多介绍。在R语言实际使用过程中,更多情况下都是使用Rstudio进行编程和开发,所以接下来也会对Rstudio进行更详细的介绍。
","description":"想买本r语言入门书, R语言实战好还是R语言入门与实践更适合新手? 小郑同学的回答\\n\\n\\n 同学们,大家好,今天开始开设一个新系列,R语言系列,对生信分析中涉及到的R语言代码及R语言绘图进行详细讲解,感兴趣的同学可以重点关注一下。\\n\\n什么是R语言?\\n\\n R语言是用于统计分析、绘图的语言和操作环境。R语言是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。\\n\\n R语言是S语言的一个分支,可以认为R语言是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言…","guid":"https://www.zhihu.com/question/474083588/answer/74396442654","author":"小郑同学","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T05:19:35.147Z","media":[{"url":"https://picx.zhimg.com/v2-0c9336e79fb4c08f7a324842d6f2a6dd.jpg","type":"photo","width":746,"height":329,"blurhash":"LER{#@?Is;_3-;MyRjWC~pWCRjV@"},{"url":"https://picx.zhimg.com/v2-6ca4691df0bddeb53a9ef826a6597365.jpg","type":"photo","width":730,"height":495,"blurhash":"LCRp8.?c%M~qkCofWqRkjsRjRjW="},{"url":"https://pica.zhimg.com/v2-0b4dd1f8b7822906df25626f098cdad9.jpg","type":"photo","width":781,"height":326,"blurhash":"LJQ]+%9H_1~p?boLM{RjxtoeRjV["},{"url":"https://picx.zhimg.com/v2-9765469fbe2c8eaf652e5f334733267b.jpg","type":"photo","width":791,"height":321,"blurhash":"LFRMYv_2.7~q_3WCWBaw-;j@RkWB"},{"url":"https://picx.zhimg.com/v2-411ae1a8163c8d75630aed3692c1d640.jpg","type":"photo","width":786,"height":552,"blurhash":"LARfkC?cxb~q_3%Mt7WCt7t5j@WD"},{"url":"https://pic1.zhimg.com/v2-85d6f3ab061eb514819cbc57b5d12854.jpg","type":"photo","width":747,"height":210,"blurhash":"L9S~t|~qgM~W-qM{f+V@o}IBRPg3"},{"url":"https://picx.zhimg.com/v2-42b35ad37b351dfd648472473ce62841.jpg","type":"photo","width":762,"height":585,"blurhash":"LNQv%jWDaxxv-=Rjj?j[0KodRkof"},{"url":"https://pic1.zhimg.com/v2-603016b7832c0f77c4601cfe9eb5c9db.jpg","type":"photo","width":770,"height":439,"blurhash":"LKRC_F%MM{?b-=?vM{Rj00D%Rjxa"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ggMarginal type Densigram bug","url":"https://zhuanlan.zhihu.com/p/17066152572","content":"[图片] [图片] 明显后者的直方图不符合实际,应该是有bug,或者有我没注意到的地方...请大家注意","description":"[图片] [图片] 明显后者的直方图不符合实际,应该是有bug,或者有我没注意到的地方...请大家注意","guid":"https://zhuanlan.zhihu.com/p/17066152572","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T03:16:34.306Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"scRNA-seq pipeline","url":"https://zhuanlan.zhihu.com/p/17015038322","content":"scRNA-seq简单明了的流程框架图 [图片] A","description":"scRNA-seq简单明了的流程框架图 [图片] A","guid":"https://zhuanlan.zhihu.com/p/17015038322","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-08T00:03:37.936Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R中调用python","url":"https://zhuanlan.zhihu.com/p/16969564440","content":"随着用的包越来越多,有些包需要调用python才能使用,总结如下: 第一步,在终端创建一个环境,如,创建名称为scRNA,并安装版本3.8的python conda create -n scRNA python=3.8第二步,在R中调用python ##安装R包 install.packages(\\"reticulate\\") ##加载R包 library(reticulate) ##设置R与指定的名为\\"scRNA\\"的conda环境进行交互 reticulate::use_condaenv(\\"scRNA\\") ##确认调用成功否 py_config() ##显示调用的python路径 py_avail…","description":"随着用的包越来越多,有些包需要调用python才能使用,总结如下: 第一步,在终端创建一个环境,如,创建名称为scRNA,并安装版本3.8的python conda create -n scRNA python=3.8第二步,在R中调用python ##安装R包 install.packages(\\"reticulate\\") ##加载R包 library(reticulate) ##设置R与指定的名为\\"scRNA\\"的conda环境进行交互 reticulate::use_condaenv(\\"scRNA\\") ##确认调用成功否 py_config…","guid":"https://zhuanlan.zhihu.com/p/16969564440","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T23:31:46.230Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Rstudio会有卡住不会出图的情况吗?-上学苦力怕的回答:建议把完整代码截出来,不然你就借一点也没法帮你看哪里出问题呀","url":"https://www.zhihu.com/question/8799790527/answer/74073218418","content":"Rstudio会有卡住不会出图的情况吗?建议把完整代码截出来,不然你就借一点也没法帮你看哪里出问题呀
","description":"Rstudio会有卡住不会出图的情况吗? 上学苦力怕的回答\\n\\n\\n建议把完整代码截出来,不然你就借一点也没法帮你看哪里出问题呀","guid":"https://www.zhihu.com/question/8799790527/answer/74073218418","author":"上学苦力怕","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T19:20:08.535Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何打出带有单个抑音符的Rr?-IIJEi的回答:gboard输入法切换到国际音标,r+中低平调调符 知 dr 直 dŕ 纸 dř 志 dr̀ 吃 tr 迟 tŕ 尺 tř 翅 tr̀ 师 sr 十 ...","url":"https://www.zhihu.com/question/8615020633/answer/73872903427","content":"如何打出带有单个抑音符的Rr?gboard输入法切换到国际音标,r+中低平调调符
知 dr 直 dŕ 纸 dř 志 dr̀
吃 tr 迟 tŕ 尺 tř 翅 tr̀
师 sr 十 sŕ 史 sř 是 sr̀
日 r̀
同理可以打出有抑音符的z,同样也是ź ž 有预组合而这个没有的
资 z 子 ž 自 z̀
疵 cz 词 cź 此 cž 次 cz̀
斯 sz 死 sž 四 sz̀
","description":"如何打出带有单个抑音符的Rr? IIJEi的回答\\n\\n\\ngboard输入法切换到国际音标,r+中低平调调符\\n\\n知 dr 直 dŕ 纸 dř 志 dr̀\\n\\n吃 tr 迟 tŕ 尺 tř 翅 tr̀\\n\\n师 sr 十 sŕ 史 sř 是 sr̀\\n\\n日 r̀\\n\\n同理可以打出有抑音符的z,同样也是ź ž 有预组合而这个没有的\\n\\n资 z 子 ž 自 z̀\\n\\n疵 cz 词 cź 此 cž 次 cz̀\\n\\n斯 sz 死 sž 四 sz̀","guid":"https://www.zhihu.com/question/8615020633/answer/73872903427","author":"IIJEi","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T11:56:32.721Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"“双碳”目标下资源环境中的可计算一般均衡(CGE)模型实践技术。模拟宏观经济系统运行和价格调节机制、R语言","url":"https://zhuanlan.zhihu.com/p/16927264595","content":"可计算一般均衡(CGE)模型是一种用于分析经济政策变化对经济系统影响的工具。静态CGE模型主要用于分析某一特定时间点或短期内的经济均衡状态,而不考虑时间的动态变化。以下是静态CGE模型的基本原理和一个简单的实际案例,结合R语言代码进行讲解。 静态CGE模型的基本原理生产函数:描述生产过程中投入与产出之间的关系。常用的生产函数包括Leontief、Cobb-Douglas和CES(恒定弹性替代)生产函数。效用函数:描述消费者对不同商…","description":"可计算一般均衡(CGE)模型是一种用于分析经济政策变化对经济系统影响的工具。静态CGE模型主要用于分析某一特定时间点或短期内的经济均衡状态,而不考虑时间的动态变化。以下是静态CGE模型的基本原理和一个简单的实际案例,结合R语言代码进行讲解。 静态CGE模型的基本原理生产函数:描述生产过程中投入与产出之间的关系。常用的生产函数包括Leontief、Cobb-Douglas和CES(恒定弹性替代)生产函数。效用函数:描述消费者对不同商…","guid":"https://zhuanlan.zhihu.com/p/16927264595","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T10:28:13.398Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"人与鼠基因名互换的方法","url":"https://zhuanlan.zhihu.com/p/16872688176","content":"最近项目需要用这个,每次都要去翻找,这次干脆做个记录,方便以后查看 ##安装R包 BiocManager::install(\\"biomaRt\\") ##加载R包 library(biomaRt) ##建立人和鼠的基因集(这一步容易失败,所以用了既往存档的数据) human <- useMart(\\"ensembl\\", dataset = \\"hsapiens_gene_ensembl\\", host = \\"https://dec2021.archive.ensembl.org/\\") mouse <- useMart(\\"ensembl\\", dataset = \\"mmusculus_gene_ensembl\\", host = \\"https://dec2021.a…","description":"最近项目需要用这个,每次都要去翻找,这次干脆做个记录,方便以后查看 ##安装R包 BiocManager::install(\\"biomaRt\\") ##加载R包 library(biomaRt) ##建立人和鼠的基因集(这一步容易失败,所以用了既往存档的数据) human <- useMart(\\"ensembl\\", dataset = \\"hsapiens_gene_ensembl\\", host = \\"https://dec2021.archive.ensembl.org/\\") mouse <- useMart(\\"ensembl\\", dataset…","guid":"https://zhuanlan.zhihu.com/p/16872688176","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T06:44:14.087Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?-王勇的回答:大模型时代,这个问题直接发给大模型就可以。如果有...","url":"https://www.zhihu.com/question/8943154545/answer/73578289083","content":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?大模型时代,这个问题直接发给大模型就可以。如果有一定的倾向,例如使用tidyverse ,forcat, 可以使用如下提示词:
作为一个R tidyverse 专家,请问,R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”? 注:请考虑使用 forcat 库
大模型的答案非常详实,下面这部分代码可以运行。
在R语言中,使用 `tidyverse` 和 `forcats` 库可以很方便地处理数据并绘制物种堆积图。要将丰度前10或前20的物种显示出来,其余归为“others”,可以按照以下步骤操作:","description":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”? 王勇的回答\\n\\n\\n大模型时代,这个问题直接发给大模型就可以。如果有一定的倾向,例如使用tidyverse ,forcat, 可以使用如下提示词:\\n\\n作为一个R tidyverse 专家,请问,R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”? 注:请考虑使用 forcat 库\\n\\n大模型的答案非常详实,下面这部分代码可以运行。\\n\\n在R语言中,使用 `tidyverse` 和 `forcats…","guid":"https://www.zhihu.com/question/8943154545/answer/73578289083","author":"王勇","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T05:25:46.238Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?-而今听雨的回答:最简单不动脑子的办法:先给你的表排序,前10以...","url":"https://www.zhihu.com/question/8943154545/answer/73529022754","content":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”?
### 1. 加载必要的库
首先,确保加载了 `tidyverse` 和 `forcats` 库。
```r
library(tidyverse)
library(forcats)
```
### 2. 准备数据
假设你有一个数据框 `df`,其中包含物种名称和它们的丰度。数据框的结构可能如下:
```r
df <- tibble(
species = c(\\"Species1\\", \\"Species2\\", \\"Species3\\", ..., \\"SpeciesN\\"),
abundance = c(100, 200, 150, ..., 50)
)
```
### 3. 筛选前10或前20的物种
使用 `dplyr` 对数据进行排序,并筛选出丰度前10或前20的物种。然后,将剩余的物种归为“others”。
```r
top_n <- 10 # 或者 top_n <- 20,如果你想显示前20的物种
df_top <- df %>%
arrange(desc(abundance)) %>%
mutate(species = ifelse(row_number() <= top_n, as.character(species), \\"others\\")) %>%
group_by(species) %>%
summarise(abundance = sum(abundance))
```
### 4. 使用 `forcats` 调整因子水平
为了确保“others”在图中显示在最后,可以使用 `forcats` 库中的 `fct_relevel` 函数。
```r
df_top <- df_top %>%
mutate(species = fct_relevel(species, \\"others\\", after = Inf))
```
### 5. 绘制堆积图
使用 `ggplot2` 绘制堆积图。
```r
ggplot(df_top, aes(x = 1, y = abundance, fill = species)) +
geom_bar(stat = \\"identity\\", position = \\"stack\\") +
labs(x = \\"\\", y = \\"Abundance\\", fill = \\"Species\\") +
theme_minimal()
```
### 6. 完整代码示例
以下是完整的代码示例:
```r
library(tidyverse)
library(forcats)
# 示例数据
df <- tibble(
species = paste0(\\"Species\\", 1:50),
abundance = runif(50, 10, 500)
)
# 筛选前10的物种
top_n <- 10
df_top <- df %>%
arrange(desc(abundance)) %>%
mutate(species = ifelse(row_number() <= top_n, as.character(species), \\"others\\")) %>%
group_by(species) %>%
summarise(abundance = sum(abundance)) %>%
mutate(species = fct_relevel(species, \\"others\\", after = Inf))
# 绘制堆积图
ggplot(df_top, aes(x = 1, y = abundance, fill = species)) +
geom_bar(stat = \\"identity\\", position = \\"stack\\") +
labs(x = \\"\\", y = \\"Abundance\\", fill = \\"Species\\") +
theme_minimal()
```
### 解释
- `arrange(desc(abundance))`:按丰度降序排列。
- `mutate(species = ifelse(row_number() <= top_n, as.character(species), \\"others\\"))`:将前10或前20的物种保留,其余归为“others”。
- `group_by(species) %>% summarise(abundance = sum(abundance))`:将“others”组的丰度求和。
- `fct_relevel(species, \\"others\\", after = Inf)`:确保“others”在图中显示在最后。
通过这种方式,你可以轻松地绘制出只显示丰度前10或前20的物种堆积图,并将剩余的物种归为“others”。
最简单不动脑子的办法:先给你的表排序,前10以后的在表里直接删掉替换成others再绘图
考虑代码复用那当然最好是写个stat_*()函数,但是我估计题主应该搞不定……
","description":"R语言绘制物种堆积图的时候如何调整使只显示丰度前10或者前20的物种,其余全都归为“others”? 而今听雨的回答\\n\\n\\n最简单不动脑子的办法:先给你的表排序,前10以后的在表里直接删掉替换成others再绘图\\n\\n考虑代码复用那当然最好是写个stat_*()函数,但是我估计题主应该搞不定……","guid":"https://www.zhihu.com/question/8943154545/answer/73529022754","author":"而今听雨","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T04:20:48.331Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-三尺野人的回答:黑塞《荒原狼》洞察人性的一句话:这个世界把你吐了出来,因为你与众不同。 [图片] 孤独,似乎是每个人的宿...","url":"https://www.zhihu.com/question/580956751/answer/73373039966","content":"能否分享一些让你豁然开朗的句子?黑塞《荒原狼》洞察人性的一句话:这个世界把你吐了出来,因为你与众不同。
孤独,似乎是每个人的宿命。
正如赫尔曼·黑塞的《荒原狼》,像一面照进人心的镜子,折射出我们内心的孤独与挣扎。
《荒原狼》的主人公哈里出身于一个传统的牧师家庭,从小就接受着严苛的教育。
他选择逃离,走出了宗教的牢笼,却逃不出社会的枷锁。
当国家陷入战争的狂热时,他选择和平,结果被扣上“叛徒”的帽子,成了众人避之不及的异类。
他的孤独,也许不是他主动选择的,而是当时的环境强加给他的。
就如同鲁迅笔下的孔乙己,哈里成了那个不被理解的人,孤独地徘徊在世人的边缘。
无论是哈里,还是孔乙己,他们都代表着那个不被理解的个体,像被指控的古希腊哲学家苏格拉底一样,尽管口吐真言,坚持真理,最终也难逃毒酒的命运。
哈里自认为是一只“荒原狼”,既有人性的温暖与顺从,也有狼性的冷漠与反叛。
他追求纯粹,却逃不开现实中的世俗。
他追求真实,却不知不觉被拉进了堕落的深渊。
故事里赫米娜的出现,让他体验到前所未有的自由与狂欢,但这种自由也成了另一种枷锁,把他推向更深的痛苦。
我想黑塞《荒原狼》中的哈里,正是我们现在每个人的缩影。
正如黑塞说过的一句话:
每个人的内心深处都有一匹甘于孤独却又渴望被理解的荒原之狼。
我们渴望认同,却又不得不与世俗妥协;
我们想要独立,却又害怕孤独;
我们追求自由,却又无法摆脱现实的枷锁。
于是,我们带上了面具,隐藏真实的自我,做着他人眼中合群的自己。
面对这些矛盾,和解,成了唯一的出路。
哈里最终明白,只有接受自己的多面性,才能从痛苦中解脱出来。
魔法剧院中的各个自我,正是他内心矛盾的折射。
莫扎特的出现,让他看到了生活中的幽默,也让他认识到自我和解的重要性。
终于,哈里想通了,他不在内耗自己,决定重启人生。
与其在理想与现实之间挣扎,不如学会与自己的矛盾和平共处,让内心的人性与狼性共存。
人天生就是群居动物,不可能长时间生活在自己的那座孤岛中不与外界接触。
唯有和解,试着找到自己人性和狼性之间的一种平衡,恰到好处地活着,才是对生命的不辜负。
或许无法改变这个世界的荒诞与残酷,但可以改变自己对待生活的态度。
正如《荒原狼》所要表达的一样,真正的救赎不在于外界,而在于内心。
接受生活的残缺,接受不完美的自己,允许一切发生,才是人生的智慧。
我们需要学会与自己和解,学会在荒诞中找到幽默。
尼采说过:成为你自己。
不管这个自己是有着多面性的自己,还是和解之后的自己,至少是你喜欢的自己。
(图源网络,侵删)
","description":"能否分享一些让你豁然开朗的句子? 三尺野人的回答\\n\\n\\n黑塞《荒原狼》洞察人性的一句话:这个世界把你吐了出来,因为你与众不同。\\n\\n孤独,似乎是每个人的宿命。\\n\\n正如赫尔曼·黑塞的《荒原狼》,像一面照进人心的镜子,折射出我们内心的孤独与挣扎。\\n\\n《荒原狼》的主人公哈里出身于一个传统的牧师家庭,从小就接受着严苛的教育。\\n\\n他选择逃离,走出了宗教的牢笼,却逃不出社会的枷锁。\\n\\n当国家陷入战争的狂热时,他选择和平,结果被扣上“叛徒”的帽子,成了众人避之不及的异类。\\n\\n他的孤独,也许不是他主动选择的,而是当时的环境强加给他的。\\n\\n就如同鲁迅笔下的孔乙己,哈里成了那个不被理解的人,孤独地徘徊在世人的边缘…","guid":"https://www.zhihu.com/question/580956751/answer/73373039966","author":"三尺野人","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T01:37:30.491Z","media":[{"url":"https://pic1.zhimg.com/v2-880b9c5343e6a1be3a54fb0c69dea2a9.jpg","type":"photo","width":1280,"height":717,"blurhash":"LTE3C*9F00?bxuM{j[%MM{Rj%Mof"},{"url":"https://pica.zhimg.com/v2-050fdde575fd9f8dd58c54734804cbb7.jpg","type":"photo","width":1280,"height":717,"blurhash":"LjK_E~4n9FWB~qD%RjxuD%Rjoft7"},{"url":"https://pica.zhimg.com/v2-a37d95756f77c615162ded13dcb61a71.jpg","type":"photo","width":1280,"height":717,"blurhash":"LtIi2ax[01bI_2t6IVafM|WBt7j["},{"url":"https://picx.zhimg.com/v2-636442b46772f0733e3bbb140550ffe5.jpg","type":"photo","width":1280,"height":717,"blurhash":"LiNA@lIVD*xu~ot7RkRkIURkxtWB"},{"url":"https://pic1.zhimg.com/v2-a71415b6c50dd6de90e4a0d664c4129f.jpg","type":"photo","width":1080,"height":1920,"blurhash":"L35OQn?b009F-;xuRjRjD%M{%M%M"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于R语言的DICE模型","url":"https://zhuanlan.zhihu.com/p/16787180243","content":"【教程】基于R语言的DICE模型应用 DICE型是运用最广泛的综合模型之一。DICE和RICE模型虽然代码量不多,但涉及经济学与气候变化,原理较为复杂。 一:DICE模型的原理与推导1.经济学 2.气候变化问题3.DICE模型的经济学部分 4.DICE模型的气候相关部分 5.DICE模型的目标函数与经济约束 6.DICE模型使用的地球物理方程 二:碳循环与气候变化1.能源市场上的均衡 2.生产函数及其校准 3.碳供给的影响 4.碳循环与其它辐射强迫 5.气候变化影…","description":"【教程】基于R语言的DICE模型应用 DICE型是运用最广泛的综合模型之一。DICE和RICE模型虽然代码量不多,但涉及经济学与气候变化,原理较为复杂。 一:DICE模型的原理与推导1.经济学 2.气候变化问题3.DICE模型的经济学部分 4.DICE模型的气候相关部分 5.DICE模型的目标函数与经济约束 6.DICE模型使用的地球物理方程 二:碳循环与气候变化1.能源市场上的均衡 2.生产函数及其校准 3.碳供给的影响 4.碳循环与其它辐射强迫 5.气候变化影…","guid":"https://zhuanlan.zhihu.com/p/16787180243","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T00:50:18.006Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R语言】三种常用的logistic回归模型拟合方法及相关可视化实现","url":"https://zhuanlan.zhihu.com/p/16771683483","content":"logistic回归logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率,因此因变量的范围在 0 和 1 之间。 例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。…","description":"logistic回归logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率,因此因变量的范围在 0 和 1 之间。 例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。…","guid":"https://zhuanlan.zhihu.com/p/16771683483","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-07T00:28:48.155Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Cox回归预测模型:变量筛选——LASSO回归","url":"https://zhuanlan.zhihu.com/p/16774743558","content":"前面已经讲述了单因素和多因素Cox回归在生存数据变量筛选中的应用。今天介绍LASSO回归进行变量筛选。LASSO回归主要通过生成一个惩罚函数对回归模型中的变量系数进行压缩,从而防止过拟合并解决高度共线性问题。下面我们就看R语言实现LASSO回归的具体过程。 1、安装并加载所需要的R包install.packages(\\"survival\\")#survival包提供生存分析相关的函数。 install.packages(\\"glmnet\\")#glmnet包用于进行岭回归和 LASSO 回归。 install…","description":"前面已经讲述了单因素和多因素Cox回归在生存数据变量筛选中的应用。今天介绍LASSO回归进行变量筛选。LASSO回归主要通过生成一个惩罚函数对回归模型中的变量系数进行压缩,从而防止过拟合并解决高度共线性问题。下面我们就看R语言实现LASSO回归的具体过程。 1、安装并加载所需要的R包install.packages(\\"survival\\")#survival包提供生存分析相关的函数。 install.packages(\\"glmnet\\")#glmnet包用于进行岭回归和 LASSO 回归。 install…","guid":"https://zhuanlan.zhihu.com/p/16774743558","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T19:05:15.631Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"ROC曲线绘制","url":"https://zhuanlan.zhihu.com/p/16768939362","content":"1数据导入、整理1.1数据集说明数据来源《医学统计学(第3版)》(孙振球主编)。对26例冠心病病人和28例对照者进行病例-对照研究,探讨冠心病发生的有关危险因素,各因素的说明如下: 1.X1:年龄(岁),<45=1,45~=2,55~=3,65~=4; 2.X2:高血压史,无=0,有=1; 3.X3:高血压家族史,无=0,有=1; 4.X4:吸烟,不吸=0,吸=1; 5.X5:高血脂史,无=0,有=1; 6.X6:动物脂肪摄入,低=0,高=1; 7.X7:体重指数(BMI),<24=1,…","description":"1数据导入、整理1.1数据集说明数据来源《医学统计学(第3版)》(孙振球主编)。对26例冠心病病人和28例对照者进行病例-对照研究,探讨冠心病发生的有关危险因素,各因素的说明如下: 1.X1:年龄(岁),<45=1,45~=2,55~=3,65~=4; 2.X2:高血压史,无=0,有=1; 3.X3:高血压家族史,无=0,有=1; 4.X4:吸烟,不吸=0,吸=1; 5.X5:高血脂史,无=0,有=1; 6.X6:动物脂肪摄入,低=0,高=1; 7.X7:体重指数(BMI),<24=1,…","guid":"https://zhuanlan.zhihu.com/p/16768939362","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T16:02:25.062Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"零容忍! 打击碳排放数据造假!加强碳排放数据监管难在哪?企业如何提高数据质量?","url":"https://zhuanlan.zhihu.com/p/16757563067","content":"我国碳排放数据质量管理面临三大难题:相关主体对碳排放数据弄虚作假;数据获取方式不够准确;数据审核方面存在不足。 数据质量是保证碳市场健康平稳有序的基础,可以说是碳市场的生命线!2023年8月8日,最高人民法院等发布的《关于办理环境污染刑事案件适用法律若干问题的解释》明确规定,承担温室气体排放检验检测、排放报告编制或者核查等职责的中介组织的人员故意提供虚假证明文件,可以认定为刑法第二百二十九条第一款规定…","description":"我国碳排放数据质量管理面临三大难题:相关主体对碳排放数据弄虚作假;数据获取方式不够准确;数据审核方面存在不足。 数据质量是保证碳市场健康平稳有序的基础,可以说是碳市场的生命线!2023年8月8日,最高人民法院等发布的《关于办理环境污染刑事案件适用法律若干问题的解释》明确规定,承担温室气体排放检验检测、排放报告编制或者核查等职责的中介组织的人员故意提供虚假证明文件,可以认定为刑法第二百二十九条第一款规定…","guid":"https://zhuanlan.zhihu.com/p/16757563067","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T14:33:17.263Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"文献计量学-国家发文量世界地图—R语言","url":"https://zhuanlan.zhihu.com/p/16756505757","content":"国家发文量世界地图 Sys.setenv(LANGUAGE = \\"en\\") #禁止chr转成factor options(stringsAsFactors = FALSE) setwd(\\"E:\\\\\\\\PAPER\\\\\\\\bibliometrics\\\\\\\\mam1\\\\\\\\R包处理\\") library(reshape2) library(tidyverse) library(ggplot2) library(dplyr) library(sf) library(rnaturalearth) library(rnaturalearthdata) Bw<-read.csv(\\"Bibliometrix-Export-File-2024-09-09.CSV\\")#加载数据库文档 colnames(Bw) selected_data <- Bw %>% select(RP)…","description":"国家发文量世界地图 Sys.setenv(LANGUAGE = \\"en\\") #禁止chr转成factor options(stringsAsFactors = FALSE) setwd(\\"E:\\\\\\\\PAPER\\\\\\\\bibliometrics\\\\\\\\mam1\\\\\\\\R包处理\\") library(reshape2) library(tidyverse) library(ggplot2) library(dplyr) library(sf) library(rnaturalearth) library(rnaturalearthdata) Bw<-read.csv…","guid":"https://zhuanlan.zhihu.com/p/16756505757","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T14:30:46.372Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R语言】面板数据分析常用的几种模型及可视化的简单教程","url":"https://zhuanlan.zhihu.com/p/16728925552","content":"什么是面板数据?面板数据(Panel Data),也称为“平行数据”,是指在时间序列上取多个截面,并在这些截面上同时选取样本观测值所构成的样本数据。它是一个m×n的数据矩阵,记载的是n个时间节点上m个对象的某一数据指标。 特点 面板数据具有时间序列和截面两个维度,当这类数据按两个维度排列时,与只有一个维度的数据明显不同。整个表格像是一个面板,因此被称为“面板数据”。从其内在含义上讲,也可以将其称为“时间序…","description":"什么是面板数据?面板数据(Panel Data),也称为“平行数据”,是指在时间序列上取多个截面,并在这些截面上同时选取样本观测值所构成的样本数据。它是一个m×n的数据矩阵,记载的是n个时间节点上m个对象的某一数据指标。 特点 面板数据具有时间序列和截面两个维度,当这类数据按两个维度排列时,与只有一个维度的数据明显不同。整个表格像是一个面板,因此被称为“面板数据”。从其内在含义上讲,也可以将其称为“时间序…","guid":"https://zhuanlan.zhihu.com/p/16728925552","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T11:47:33.564Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有对象了 但是以前很喜欢的人跟你表白了 你会怎么办?-是小汪啊的回答:两个都谈","url":"https://www.zhihu.com/question/572770039/answer/72697430425","content":"有对象了 但是以前很喜欢的人跟你表白了 你会怎么办?两个都谈
","description":"有对象了 但是以前很喜欢的人跟你表白了 你会怎么办? 是小汪啊的回答\\n\\n\\n两个都谈","guid":"https://www.zhihu.com/question/572770039/answer/72697430425","author":"是小汪啊","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-06T03:58:29.368Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床工作者想自学统计软件,应该选择SAS、Stata还是R语言?-亿牛云爬虫专家的回答:[图片] 引言在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可...","url":"https://www.zhihu.com/question/62239133/answer/72640597512","content":"临床工作者想自学统计软件,应该选择SAS、Stata还是R语言?在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames
函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文章以采集BOSS直聘的招聘信息为例,展示如何通过 colnames
和其他数据处理技术优化数据处理流程。
colnames
是R语言中用于获取或设置数据框列名的函数。其核心功能包括:
在爬虫项目中,采集的数据通常是非结构化的,处理过程中需要重命名列以提升数据可读性和分析效率。
以下示例展示了如何使用R语言结合代理IP技术采集BOSS直聘的招聘信息,并利用 colnames
优化数据处理流程。
# 加载必要的库\\nlibrary(httr)\\nlibrary(jsonlite)\\n\\n# 配置代理IP信息 亿牛云爬虫代理 www.16yun.cn\\nproxy_url <- \\"http://proxy.16yun.cn\\" # 亿牛云爬虫代理域名\\nproxy_port <- 12345 # 亿牛云代理端口\\nproxy_user <- \\"your_username\\" # 用户名\\nproxy_password <- \\"your_password\\" # 密码\\n\\n# 设置User-Agent和Cookie\\nuser_agent <- \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\\"\\ncookie <- \\"your_cookie_here\\" # 替换为实际的Cookie\\n\\n# 目标URL(BOSS直聘的搜索结果页面)\\nurl <- \\"https://www.zhipin.com/job_detail/\\"\\n\\n# 创建请求头\\nheaders <- c(\\n \\"User-Agent\\" = user_agent,\\n \\"Cookie\\" = cookie\\n)\\n\\n# 构造代理认证\\nproxy_auth <- paste(proxy_user, proxy_password, sep = \\":\\")\\n\\n# 发起请求\\nresponse <- GET(\\n url,\\n add_headers(.headers = headers),\\n use_proxy(url = proxy_url, port = proxy_port, username = proxy_user, password = proxy_password)\\n)\\n\\n# 检查响应状态\\nif (status_code(response) == 200) {\\n # 解析响应数据\\n content <- content(response, \\"text\\", encoding = \\"UTF-8\\")\\n\\n # 提取招聘信息(示例数据结构为JSON)\\n data <- fromJSON(content)$data$results\\n\\n # 转换为数据框\\n df <- data.frame(\\n company = sapply(data, function(x) x$company$name),\\n position = sapply(data, function(x) x$job_name),\\n requirements = sapply(data, function(x) x$requirement),\\n salary = sapply(data, function(x) x$salary)\\n )\\n\\n # 设置列名\\n colnames(df) <- c(\\"公司名称\\", \\"招聘岗位\\", \\"招聘要求\\", \\"薪资待遇\\")\\n\\n # 保存到CSV文件\\n write.csv(df, \\"招聘信息.csv\\", row.names = FALSE, fileEncoding = \\"UTF-8\\")\\n\\n print(\\"数据采集成功并保存到招聘信息.csv\\")\\n} else {\\n print(paste(\\"请求失败,状态码:\\", status_code(response)))\\n}
采集的数据可以进一步分析,以洞察招聘趋势:
示例代码如下:
library(ggplot2)\\n# 加载数据\\ndf <- read.csv(\\"招聘信息.csv\\", fileEncoding = \\"UTF-8\\")\\n\\n# 薪资分析(假设薪资格式为 \\"10k-20k\\")\\ndf$min_salary <- as.numeric(gsub(\\"k\\", \\"\\", sapply(strsplit(as.character(df$薪资待遇), \\"-\\"), \\"[\\", 1)))\\ndf$max_salary <- as.numeric(gsub(\\"k\\", \\"\\", sapply(strsplit(as.character(df$薪资待遇), \\"-\\"), \\"[\\", 2)))\\n\\n# 绘制薪资分布图\\nggplot(df, aes(x = min_salary)) +\\n geom_histogram(binwidth = 1, fill = \\"blue\\", color = \\"white\\") +\\n labs(title = \\"最低薪资分布\\", x = \\"薪资 (k)\\", y = \\"频数\\")\\n\\n# 岗位统计\\nposition_count <- table(df$招聘岗位)\\nbarplot(sort(position_count, decreasing = TRUE)[1:10], las = 2, col = \\"orange\\", main = \\"热门招聘岗位\\")
本文展示了 colnames
在爬虫数据处理中不可或缺的作用。通过设置合理的列名,可以显著提升数据的可读性和处理效率。同时结合R语言的强大数据分析功能,我们可以快速获取并分析招聘市场的关键信息,助力业务决策。
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot() +\\n geom_bar(data1, mapping=aes(x=group, y=Value, color=Type, fill=Type), \\n position = \\"stack\\", stat = \\"identity\\", width = 0.3) +\\n geom_bar(data2, mapping=aes(x=group+0.3+0.1, y=Value, color=Type, fill=Type),\\n position = \\"stack\\", stat = \\"identity\\", width = 0.3) +\\n labs(x=\\"Date\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,600,200), limits = c(0,600),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_x_continuous(breaks = c(1.2,2.2,3.2),\\n labels = c(\\"Mon\\",\\"Tue\\",\\"Wed\\"))+\\n scale_fill_manual(values = colors) +\\n scale_color_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/bar-groupstack.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRplot 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
资源介绍
一、资源名称:2000-2023年31省泰尔指数/城乡收入差距:原始数据+计算过程+参考文献+计算结果
二、数据来源:《中国统计年鉴》、中国经济信息网数据库
三、测算方法 借鉴核心期刊《中国社会科学》王少平等(2008)老师的方法,采用泰尔指数度量,具体公式为:
注:农村人均收入和城镇人均收入分别用城镇居民家庭人均可支配收入和农村居民家庭纯收入表示
四、数据指标 附件 31省份泰尔指数或城乡收入差距(2000-2023) 具体指标包括:年份、省份、居民可支配收入(元)、农村家庭可支配(元)、城市家庭可支配(元)、总人口数(万人)、城镇化率、城镇总人口(万人)、农村总人口(万人)、城镇总收入(元)、农村总收入(元)、总收入(元)、泰尔指数
五、参考文献 [1]王少平,欧阳志刚.中国城乡收入差距对实际经济增长的阈值效应[J].中国社会科学,2008(02):54-66+205.
附赠:一、泰尔指数模型stata全流程代码+数据+文献
参考C刊《农业经济问题》朱红根(2023)老师的做法,用泰尔指数是衡量个人或地区之间收入差距的重要指标,本文利用泰尔指数分析中国区域内和区域间数字乡村发展水平的差异,测算了全国总体差异、区域内差异、区域间差异以及相关贡献率。此资料包括stata全流程代码、案例数据、参考文献,用excel计算有标注有过程 ,并且参照文献讲的。 参考文献:朱红根,陈晖.中国数字乡村发展的水平测度、时空演变及推进路径[J].农业经济问题,2023,No.519(03):21-33.
","description":"怎么用软件计算城乡收入差距用泰尔指数表示? PaperData的回答\\n\\n\\n资源介绍\\n\\n\\n\\n\\n一、资源名称:2000-2023年31省泰尔指数/城乡收入差距:原始数据+计算过程+参考文献+计算结果\\n\\n二、数据来源:《中国统计年鉴》、中国经济信息网数据库\\n\\n三、测算方法 借鉴核心期刊《中国社会科学》王少平等(2008)老师的方法,采用泰尔指数度量,具体公式为:\\n\\n\\n\\n\\n注:农村人均收入和城镇人均收入分别用城镇居民家庭人均可支配收入和农村居民家庭纯收入表示\\n\\n四、数据指标 附件 31省份泰尔指数或城乡收入差距(2000-2023) 具体指标包括:年份、省份、居民可支配收入(元…","guid":"https://www.zhihu.com/question/383638513/answer/71665360286","author":"PaperData","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-04T14:35:41.877Z","media":[{"url":"https://picx.zhimg.com/v2-c51f60e9c133920c99dfa6484e5bc702.jpg","type":"photo","width":1080,"height":393,"blurhash":"LH7M2QNjR5RktTa%WBoeDNt6oyt7"},{"url":"https://picx.zhimg.com/v2-47b85128bb3ff735776521650647b21f.jpg","type":"photo","width":913,"height":575,"blurhash":"LCQvzX%Mxv-;~ps;M{WARojYRibH"},{"url":"https://pic1.zhimg.com/v2-8d6b12d0e8d1decbe4f0071a2e653eb9.jpg","type":"photo","width":1080,"height":676,"blurhash":"L9ODqR~qM{_3Xojbogof9wWVt7j]"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语音绘制圆锥曲线与平面相交与抛物线","url":"https://zhuanlan.zhihu.com/p/16413269789","content":"R语音绘制圆锥曲线与平面相交与抛物线 # 安装并加载必要的包 if (!require(\\"rgl\\")) install.packages(\\"rgl\\") if (!require(\\"magick\\")) install.packages(\\"magick\\") library(rgl) library(magick) # 定义圆锥曲线和平面 cone <- function(x, y) { z <- sqrt(x^2 + y^2) return(z) } plane <- function(x, y) { z <- 2 - x return(z) } # 生成数据 x <- seq(-5, 5, length.out = 100) y <- seq(-5, 5, length.out = 100) z_cone <-…","description":"R语音绘制圆锥曲线与平面相交与抛物线 # 安装并加载必要的包 if (!require(\\"rgl\\")) install.packages(\\"rgl\\") if (!require(\\"magick\\")) install.packages(\\"magick\\") library(rgl) library(magick) # 定义圆锥曲线和平面 cone <- function(x, y) { z <- sqrt(x^2 + y^2) return(z) } plane <- function(x, y) { z <- 2 - x return(z…","guid":"https://zhuanlan.zhihu.com/p/16413269789","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-04T13:14:49.318Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何打出带有单个抑音符的Rr?-Sim-CH的回答:謝不邀。 「R̀r̀」就是了。 既然你在用Unicode就要努力擯棄東亞人尤其是中國人特有的蘿蔔坑思維——要理解並接受...","url":"https://www.zhihu.com/question/8615020633/answer/71484813508","content":"如何打出带有单个抑音符的Rr?謝不邀。
「R̀r̀」就是了。
既然你在用Unicode就要努力擯棄東亞人尤其是中國人特有的蘿蔔坑思維——要理解並接受組合字符的存在。一個grapheme cluster可以由多個character組成,而且這種東西是可疊加的,比如我再多加幾個抑音符:「r̀̀̀̀」。正是組合字符的存在提供了非常大的可擴展性,同時也不用單獨收各種排列組合來浪費空間——前排提醒,不要拿諺文的歷史遺留問題說事情,首先用歷史指導當下是很不負責任的行為,其次,Unicode中所有的所謂「預組合字符」都是歷史遺留問題,基本都來自於前Unicode時代已有的一些字符集,為了兼容不得不這麼做。而Unicode有normalization的機制,比如你用組合字符打一個「ã」和單獨打一個「ã」原則上是完全等價的。
以上。
","description":"如何打出带有单个抑音符的Rr? Sim-CH的回答\\n\\n\\n謝不邀。\\n\\n「R̀r̀」就是了。\\n\\n既然你在用Unicode就要努力擯棄東亞人尤其是中國人特有的蘿蔔坑思維——要理解並接受組合字符的存在。一個grapheme cluster可以由多個character組成,而且這種東西是可疊加的,比如我再多加幾個抑音符:「r̀̀̀̀」。正是組合字符的存在提供了非常大的可擴展性,同時也不用單獨收各種排列組合來浪費空間——前排提醒,不要拿諺文的歷史遺留問題說事情,首先用歷史指導當下是很不負責任的行為,其次,Unicode中所有的所謂「預組合字符」都是歷史遺留問題…","guid":"https://www.zhihu.com/question/8615020633/answer/71484813508","author":"Sim-CH","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-04T09:22:52.832Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"小白教程:基于R代码对问卷数据进行表征相似性分析(RSA)——第1节","url":"https://zhuanlan.zhihu.com/p/16332425807","content":"1. 概念简介 表征相似性分析(Representational Similarity Analysis,RSA)是一种多变量技术,由Nikolaus Kriegskorte于2008年提出。它允许不同类型的数据使用它们的相似性矩阵来获得关联,例如fMRI和视觉刺激,或者人类和猿猴的颞下沟。RSA不是直接将脑活动映射到某个度量上,而是使用二阶同构比较脑活动与度量之间的相似性。 表征相似性分析是一种强大的工具,它能够帮助研究者通过比较大脑活动模式的相似性来分析记忆形成中…","description":"1. 概念简介 表征相似性分析(Representational Similarity Analysis,RSA)是一种多变量技术,由Nikolaus Kriegskorte于2008年提出。它允许不同类型的数据使用它们的相似性矩阵来获得关联,例如fMRI和视觉刺激,或者人类和猿猴的颞下沟。RSA不是直接将脑活动映射到某个度量上,而是使用二阶同构比较脑活动与度量之间的相似性。 表征相似性分析是一种强大的工具,它能够帮助研究者通过比较大脑活动模式的相似性来分析记忆形成中…","guid":"https://zhuanlan.zhihu.com/p/16332425807","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-04T04:01:45.489Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言实现探索性因子分析 (EFA)","url":"https://zhuanlan.zhihu.com/p/16274564659","content":"EFA 是一种数据降维技术,旨在识别潜在的因子或构造,这些因子可以解释观测变量之间的相关性模式。在 R 编程语言中,探索性因子分析 (EFA) 通常用于心理学、社会学、教育学和市场研究等领域,以揭示数据的潜在结构。 探索性因子分析探索性因子分析 (EFA) 是一种统计方法,用于发现大量变量的潜在结构。可以将其视为在一组数据中寻找隐藏模式或分组(称为“因子”)的方法。EFA 的主要目的是通过将变量数量减少到更少的因子来简化…","description":"EFA 是一种数据降维技术,旨在识别潜在的因子或构造,这些因子可以解释观测变量之间的相关性模式。在 R 编程语言中,探索性因子分析 (EFA) 通常用于心理学、社会学、教育学和市场研究等领域,以揭示数据的潜在结构。 探索性因子分析探索性因子分析 (EFA) 是一种统计方法,用于发现大量变量的潜在结构。可以将其视为在一组数据中寻找隐藏模式或分组(称为“因子”)的方法。EFA 的主要目的是通过将变量数量减少到更少的因子来简化…","guid":"https://zhuanlan.zhihu.com/p/16274564659","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T14:08:47.782Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-李怡怡的回答:• 咖啡是成年人的果汁。 • 有时候,最好的计划就是没有计划。 • 网络不好的时候,就是最好的断网时间。 • ...","url":"https://www.zhihu.com/question/580956751/answer/70930076445","content":"能否分享一些让你豁然开朗的句子?• 咖啡是成年人的果汁。
• 有时候,最好的计划就是没有计划。
• 网络不好的时候,就是最好的断网时间。
• 有时候,最好的答案就是“我不知道”。
• 周末是一周中唯一两天不需要闹钟的日子。
• 有时候,最舒服的椅子就是别人的椅子。
• 有时候,最好的旅行就是没有目的地的旅行。
• 有时候,最好的礼物就是时间。
• 有时候,最好的建议就是“别听任何人的建议”。
• 有时候,最好的决策就是不做任何决策。
• 有时候,最好的锻炼就是散步。
• 有时候,最好的食谱就是“随便做点什么”。
• 有时候,最好的闹钟就是饿肚子。
• 有时候,最好的书就是那本你读了一半的书。
• 有时候,最好的电影就是老电影。
• 有时候,最好的音乐就是自然的声音。
• 有时候,最好的艺术就是即兴创作。
• 有时候,最好的科技就是不使用科技。
• 有时候,最好的游戏就是简单的游戏。
• 有时候,最好的笑话就是你自己讲的笑话。
• 有时候,最好的派对就是小型的家庭聚会。
• 有时候,最好的衣服就是最舒服的那件。
• 有时候,最好的发型就是自然风干的发型。
• 有时候,最好的化妆品就是微笑。
• 有时候,最好的投资就是投资自己。
• 有时候,最好的储蓄就是时间。
• 有时候,最好的礼物就是真诚的感谢。
• 有时候,最好的旅行伴侣就是你自己。
• 有时候,最好的问题就是“为什么”。
• 有时候,最好的答案就是“因为”。
文章旨在传播正能量,均无低俗等不良引导,图片侵权问题,请及时联系作者,将予以刑除。谢谢!","description":"能否分享一些让你豁然开朗的句子? 李怡怡的回答\\n\\n\\n• 咖啡是成年人的果汁。\\n\\n\\n\\n\\n• 有时候,最好的计划就是没有计划。\\n\\n\\n\\n\\n• 网络不好的时候,就是最好的断网时间。\\n\\n\\n\\n\\n• 有时候,最好的答案就是“我不知道”。\\n\\n\\n\\n\\n• 周末是一周中唯一两天不需要闹钟的日子。\\n\\n• 有时候,最舒服的椅子就是别人的椅子。\\n\\n\\n\\n\\n• 有时候,最好的旅行就是没有目的地的旅行。\\n\\n\\n\\n\\n• 有时候,最好的礼物就是时间。\\n\\n\\n\\n\\n• 有时候,最好的建议就是“别听任何人的建议”。\\n\\n\\n\\n\\n• 有时候,最好的决策就是不做任何决策。\\n\\n• 有时候,最好的锻炼就是散步。\\n\\n\\n\\n\\n• 有时候,最好的食谱就是“随便做点什么”。\\n\\n\\n\\n\\n• 有时候,最好的闹钟就是饿肚子。\\n\\n\\n\\n\\n• 有时候…","guid":"https://www.zhihu.com/question/580956751/answer/70930076445","author":"李怡怡","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T13:23:09.676Z","media":[{"url":"https://picx.zhimg.com/v2-8a66ef84451b785bb4026dc96538e6c6.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LkQ].-xu~p%M.8ofIUWB-:ofIURj"},{"url":"https://pica.zhimg.com/v2-211b83e79dd303fc0c1a295a140de235.jpg","type":"photo","width":1080,"height":1079,"blurhash":"LMNv9,4UNIIV8{%gozD*oy%LROxa"},{"url":"https://pic1.zhimg.com/v2-fb27ba548239cd0445317024bc51d5df.jpg","type":"photo","width":690,"height":690,"blurhash":"L[N115%2M{Rj~qWBs:xtxuj[WBWC"},{"url":"https://picx.zhimg.com/v2-7a5898bdd549fe55c3681c66e2c92347.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LEH-}b}l.7ib?t~oj]E2O?J9D*oz"},{"url":"https://pic1.zhimg.com/v2-ccf26652060a292416131bacd5cc77c9.jpg","type":"photo","width":1080,"height":1080,"blurhash":"LPJHHw0f?Gxt-:IotR%2yrivWWs:"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言中的因子分析","url":"https://zhuanlan.zhihu.com/p/16263498002","content":"目标是寻求可解释观测变量变量的潜在隐含变量。 1 探索性因子分析(EFA)通过发掘隐藏在数据下的一组较少的、更为基本的无法观测的变量,来解释一组观测变量的相关性。这些虚拟的、无法观测的变量称作因子(每个因子被认为可解释多个观测变量间共有的方差,因此准确来说,它们应该称作公共因子) 为阐述因子分析的分析过程,我们用它来对6个心理测验间的相关性进行分析。12个人参与了6个测验,包括非语言的普通智力测验(general…","description":"目标是寻求可解释观测变量变量的潜在隐含变量。 1 探索性因子分析(EFA)通过发掘隐藏在数据下的一组较少的、更为基本的无法观测的变量,来解释一组观测变量的相关性。这些虚拟的、无法观测的变量称作因子(每个因子被认为可解释多个观测变量间共有的方差,因此准确来说,它们应该称作公共因子) 为阐述因子分析的分析过程,我们用它来对6个心理测验间的相关性进行分析。12个人参与了6个测验,包括非语言的普通智力测验(general…","guid":"https://zhuanlan.zhihu.com/p/16263498002","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T12:55:07.104Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在业余时学数据分析?-小鹅通老鲍的回答:本期嘉宾:马文豪 所属行业:数据分析、职业培训 客户介绍:老鲍对话标杆第485期,邀请了砝码数据负责人、讲师——...","url":"https://www.zhihu.com/question/22119753/answer/70815922282","content":"如何在业余时学数据分析?
本期嘉宾:马文豪
所属行业:数据分析、职业培训
客户介绍:老鲍对话标杆第485期,邀请了砝码数据负责人、讲师——马文豪老师
本期聊天围绕“如何在生命科学领域连接企业、人才和技术?”主题展开,我们精选了部分直播中的对话内容,更多精彩内容欢迎收看直播回放。
节目主播:小鹅通创始人CEO——老鲍
老鲍:请老师介绍一下自己和砝码数据这个平台,为什么说您是一个非典型创业者?
马文豪:大家好,我叫马文豪,我们公司名叫砝码数据,2021年注册成立,专注生命科学领域下的临床试验相关培训。药物要审核上市,必须经过临床试验及后续数据分析流程。
我在美国既工作又创业,给药企做相关咨询,在国内做培训业务并非只为盈利。从2021年公司注册到2022年底接入小鹅通系统,目前公司后台显示收入仅几十万,主要是因为这个领域在生命科学的临床试验下还做了细分,全球包括中国从业者都很少,能达到现在的规模我还是比较满意,未来也有发展机会,这是我创业“非典型”的特点之一。
我2014年大学毕业后赴美读书,2016年毕业就留在美国工作,其间偶尔回国,但从未在国内职场求职或就业。我敢给国内求职者做培训,得益于行业的高度标准化,无论在美国、中国还是日本提交药物申请,临床试验规范、数据分析、生物统计及临床提交流程都很相似。全球基本以美国FDA标准为主导,其他国家多是参照转化。所以如果我在中国有一定经验,无缝对接美国药企项目也没问题,这是我“非典型”的第二个点。
老鲍:大有大的难处,小有小的优势,关键得找到合适的方式。你是怎么开始做这件事的?能不能讲讲这个过程?
马文豪:最开始想做这件事,跟我闲不住、爱折腾有关系。我以前当过游戏up主,开过专栏,16年进入这个行业。
到20年的时候,我就有这样一个想法:工作能赚钱,教别人工作是不是也能赚钱。其实很多人创业都是源于自身擅长的领域,我也是。最开始我以个人形式在腾讯课堂做了两门课售卖,积累了第一批用户。
2021年,腾讯课堂规定不许个人卖课,得是企业形式,我才注册公司,只为解决卖课问题,并非一开始就想创业。后来就想,腾讯课堂虽好,但局限在一个平台,用户得进来搜才能找到我,互联网这么大,我不想受限。正好小鹅通销售人员联系我们,介绍了他们成熟的系统,既能卖课又有营销玩法。当时我们犹豫是自己做系统还是用现成的,一看小鹅通完善度挺高,就直接买了旗舰版长期使用。
课程迁移到小鹅通后,公司就我和合伙人两个人,我负责课程,合伙人负责市场营销,他在搜索引擎投流、自媒体营销方面经验都很丰富。
老鲍:你们是怎么开展学习的?在学习过程中,又是怎样提升大家的学习效果,促进学员之间交流的?
马文豪:基于对人才既要有广度又要有深度的需求,我们设置了两种课程。一种是学习时间比较长的课程,从原始数据处理到临床提交全流程教学,视频时长约40多小时,还有约10个实战训练项目,用脱敏后的临床实验数据让学员练习,有助教来进行审查,建议学员花两到三个月来学习课程。
另一种是专项课,整个临床试验的数据统计分析产业链很长,我们专注其中一节。这一节从临床试验的原始数据入手,要将其转化成符合行业CDISC标准的数据,依据统计分析计划创建统计图表,再把图表及前期的支持文件打包,按不同国家要求,发给相应审核部门,如美国FDA、中国食品药品监督管理局、欧洲EMA等,这一过程涉及很多技术与能力。重点在于对整个产业链的理解,而非局限于某一编程技术,针对单点突破的需求,给学员精准指导。
目前我们在深挖专项课,一共16节课,每门课都随堂有练习,还有一场考试。考试后小鹅通系统会发证书,虽说这个证书没公信力,但很多同学都有打卡心态,有证书他们就觉得心安,还能增加学习体验感,促进学习,这就是我们的课程体系。
老鲍:这4年运营下来,肯定经历不少事儿,这过程中有没有遇到一些比较有挑战或者有意思的事儿?你又是咋解决这些问题的?
马文豪:要说大的挑战,还真有一个,和小鹅通系统有关,但不是小鹅通的问题,而是我们专业分工导致的。小鹅通系统功能很全,直播、课程、图文专栏这些我们都在用,营销手段也多,像优惠券、优惠码、裂变海报、宣传语等。但课程和营销这两块是分离的,得不同专业的人负责。
我登录小鹅通系统,一般就关注课程内容更新,不懂营销那块。我合伙人专做营销,他提议弄个裂变海报,还得给我解释啥是裂变海报。有时营销人员遇到学员问专业问题,看不懂就来问我,我得回复过去。同样,要是校园大使或一线人员接触一些潜在客户,客户提专业问题后,校园大使不懂,营销负责人也不懂,问题还得转到我这儿。这一来二去,很影响团队效率。
目前的解决办法是,每回答一个问题,就把问题和答案整理到表格里,下次再遇到类似问题,营销人员或一线人员自己去查,可以直接复制粘贴,这样避免信息来回转手。
老鲍:是这样的,之前我有个中医客户,他们有大量客户服务方面的问题。小助理解决不了,他们当老师又没精力回复那些专业性问题,于是就跟我们合作一个AI智能体,把相关数据灌进去进行调试。
如果你们的数据足够丰富,其实也可以尝试这种做法。毕竟AI在美国应用得更广些,这其实是一个解题的方向。你不可能掌握别的业务又精通营销那块,那能不能干脆把相关内容都交给AI呢?之后我们跟AI聊就行。我们甚至还可以把AI培养好,让它去解决客户的大部分问题,只有少部分问题才会转到我们这儿来,这或许是很多行业可以借鉴的思路。
马文豪:这确实是一种方法。我看到小鹅通上线了AI助理相关功能,还能自己创建,不过我还没用过。
老鲍:我们更多还是在工具支持层面发力,就是把行业模型和底层技术模型对接起来,现在调用了两个库进行转换。最后关于准确率的修复以及不断训练这块,还是得以你们为主。目前双方做这些成本确实都比较高,不过我觉得这在未来会是个趋势,是一种可行的方式,大家效率越来越高,或许都会往这个方向走。
还有另外一个方式,可以交给人去解决这个问题。这个人可以是社群里的人,比如你的徒弟们,这其实就是通过组织形成分工协作的模式来解决问题。
老鲍:现在时代变化太快了,特别是AI加入之后,未来充满各种可能。关于行业未来的趋势,结合你们的工作,谈谈接下来有什么打算吧。
马文豪:有学生常问我:“老师,未来AI会不会影响咱们,过几年这职业是不是就没了?”我一般会从这个几个角度来分析:
第一,就算几年后行业有变数,眼下也得吃饭。要是担心十年后除诗人、运动员外没其他职业,难道计算机系毕业就立马改行当诗人?找工作、创业,起初都是为了赚钱,刚毕业别光想太遥远的事,我们签的是劳动合同,日后跳槽也无妨。
第二,目前AI对我们行业影响比较小。一来,行业数据有特点,前几年大数据火热时,我就说它替代不了我们,因为我们行业没有大数据。像较大的数据集也就十几万或上百万条实验室数据记录,跟真正的大数据比差远了,而且数据高度结构化。人工智能也需要用大量的数据喂养,就拿临床实验来说,我们得给它完整数据,全球每年临床实验数量有限,用这点数据训练AI,难度高、成本大,因此企业也不会轻易去改变。
另外,我们行业的数据特性是涉密的,标注着“confidential”,不允许私自传播。网上学编程能搜到教大家做派送、点单系统的课程,那是有程序泄露再改良的,而我们行业除脱敏数据以外,没机构敢给临床实验数据让人进行练习,法律不允许,药厂也没有动力,创建一个通用AI难度就更高了。
所以,AI要取代我们还早。还有,我们这行业叫临床统计程序员或临床数据分析师,核心竞争力是在产业链上的沟通协作能力,比如发现数据错误能跟数据管理部门进行沟通,对统计分析计划有疑问知道找统计师探讨,查资料、借鉴相似分析方法,而非死记数据标准。要是入行后只埋头写代码、做图表交差,即便多年后你被取代,那淘汰你的不是新技术,淘汰你的是你的旧思想。
","description":"如何在业余时学数据分析? 小鹅通老鲍的回答\\n\\n\\n本期嘉宾:马文豪\\n\\n所属行业:数据分析、职业培训\\n\\n客户介绍:老鲍对话标杆第485期,邀请了砝码数据负责人、讲师——马文豪老师\\n\\n本期聊天围绕“如何在生命科学领域连接企业、人才和技术?”主题展开,我们精选了部分直播中的对话内容,更多精彩内容欢迎收看直播回放。\\n\\n节目主播:小鹅通创始人CEO——老鲍\\n\\n01\\n个人经历与创业故事\\n\\n老鲍:请老师介绍一下自己和砝码数据这个平台,为什么说您是一个非典型创业者?\\n\\n马文豪:大家好,我叫马文豪,我们公司名叫砝码数据,2021年注册成立,专注生命科学领域下的临床试验相关培训。药物要审核上市…","guid":"https://www.zhihu.com/question/22119753/answer/70815922282","author":"小鹅通老鲍","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T10:07:48.765Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言基础| 时间序列分析","url":"https://zhuanlan.zhihu.com/p/9060734906","content":"写在前面 时间序列分析是一种用于分析时间序列数据的方法。时间序列数据是指在时间轴上按照一定的 时间间隔顺序记录的观测值。这种数据在许多领域都很常见,例如经济学、气象学、金融市场、医学等。时间序列分析的主要目标是理解数据随时间的变化模式,预测未来的趋势,并识别数据中的潜在规律和结构。 时间序列分析的主要步骤:数据预处理:包括数据清洗、缺失值处理、去除异常值、对数据进行平滑处理等步骤,以确保数据的质量…","description":"写在前面 时间序列分析是一种用于分析时间序列数据的方法。时间序列数据是指在时间轴上按照一定的 时间间隔顺序记录的观测值。这种数据在许多领域都很常见,例如经济学、气象学、金融市场、医学等。时间序列分析的主要目标是理解数据随时间的变化模式,预测未来的趋势,并识别数据中的潜在规律和结构。 时间序列分析的主要步骤:数据预处理:包括数据清洗、缺失值处理、去除异常值、对数据进行平滑处理等步骤,以确保数据的质量…","guid":"https://zhuanlan.zhihu.com/p/9060734906","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T09:51:14.250Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r 语言绘图的技巧有哪些?-被炸熟的虾的回答:R语言画图 | ggplot2 基础语法简述 ggplot2是一个功能强大且灵活的R包,主张模块间的协调与分工,包括数据 (data)...","url":"https://www.zhihu.com/question/583433499/answer/70787060017","content":"r 语言绘图的技巧有哪些?ggplot2
是一个功能强大且灵活的R包,主张模块间的协调与分工,包括数据 (data
)、映射 (mapping
)、几何对象 (geom_xx
)、统计变换 (stat_xx
)、标度 (scale
)、坐标系 (coord
)、分面 (facet
)、主题 (theme
)、存储和输出 (output
)等部件。使用时可以分为数据绘图部分与美化细节部分。
ggplot2
允许用户通过添加图层来构建复杂的图形,就像搭积木一样,有明确的起始(ggplot()
开始)与终止,图层之间的叠加靠“+
”实现,越往后,其图层越在上方。
ggplot(data, aes(...)) + #基础图层,不出现图形元素\\n geom_xxx() | stat_xxx() + #几何图层或统计变换,出现图形元素\\n scale_xxx() + #度量调整,包括颜色(color)、大小(size)或形状(shape)等\\n coord_xxx() + #坐标变换,默认为笛卡儿坐标系\\n facet_xxx() + #分面系统,将某个变量进行分面变换\\n guides() + #图例调整\\n theme_xxx() + #主题设定,主要用于调整图表的细节\\n labs(...) #标签,设置图形的标题、轴标签等
ggplot()
:首先使用ggplot()
函数来创建图形对象。该函数有两个重要参数:data
和mapping
,用于定义绘图时使用的数据以及图形属性映射。1、DATA
为数据框(data.frame
)格式的数据集;2、MAPPINGS
为变量的属性映射,不仅可以根据变量x和y映射位置,还可以用来控制颜色(color)、大小(size)或形状(shape)等。geom_xxx() | stat_xxx()
:创建完图形对象之后,就可以添加图层了,包括:几何对象函数geom_xxx()
,用于定义图形的基本元素,如点、线、条形等;以及统计变换函数stat_xxx()
,用于数据的统计汇总和转换。1、geom_xxx()
直接从数据中绘制几何对象,常用于展示原始数据的分布和关系,例如,geom_point()
直接根据数据点绘制散点图。2、stat_xxx()
常用于展示数据的统计摘要或变换后的结果,例如,stat_summary()
可以对数据进行汇总(如求平均值、中位数)后绘制。可选内容主要包括以下几个部分,主要是实现图表的美化与变换:
scale_xxx()
:度量调整,包括颜色(color)、大小(size)或形状(shape)等,跟MAPPINGS
的映射变量相对应;coord_xxx()
:坐标变换,默认为笛卡儿坐标系,还包括极坐标系、地理空间坐标系等;facet_xxx()
:分面系统,将某个变量进行分面变换,包括按行、列和网格等形式分面绘图;guides()
:图例调整,主要包括连续型和离散型两种类型的图例;theme_xxx()
:主题设定,主要用于调整图表的细节,包括图表背景颜色、网格线的间隔与颜色等;labs(...)
:标签,设置图形的标题、轴标签等。使用iris数据绘制散点图,Petal.Length列的数据会被映射到图层的x轴,Petal.Width列会被映射到y轴。设置散点颜色为红色,半透明,尺寸为“2”,然后再绘制一条拟合直线,不显示置信区间。
ggplot(data = iris, mapping = aes(x = Petal.Length,y = Petal.Width)) +\\n geom_point(size = 2,alpha = 0.5,col =\\"red\\") +\\n geom_smooth(method = \\"lm\\",se = F)
如果你的列名不是有效的R变量名,需要用``
符号包裹,如
df <- data.frame(\\"x\\" = 1:3,\\n \\"a b\\" = 4:6,\\n check.names = FALSE)\\nggplot(df, aes(x, `a b`)) + geom_point()
下面列举一些常见的geom_xxx() | stat_xxx()
函数,个人觉得记下来的意义不大,需要时不如按照图形查询:https://r-graph-gallery.com/
geom_xxx()
函数在ggplot2
中,使用不同的geom_*()
函数可以绘制不同类型的图形。在这里我们列举一些常用的geom_*()函数。
geom_point()
:用于绘制散点图,每个点代表数据集中的一个观测值,对于显示两个连续变量之间的关系最有用,例如相关性、火山图。geom_line()
:用于绘制线图,将所有的数据点按照x轴上的顺序进行连接,展示数据随时间或其他连续变量的变化。geom_smooth()
:用于添加拟合曲线(比如线性回归线),展示数据的趋势。geom_smooth()
的一个重要参数是method
,用于选择使用哪种类型的模型来拟合平滑曲线, 一般常用的有lm
、glm
、gam
、loess
\\"等方法。geom_abline()
, geom_hline()
, geom_vline()
:用于添加水平、垂直或对角线(由坡度和截距指定),对于注释绘图很有用。geom_histogram()
:用于绘制直方图,展示数据的分布情况。geom_histogram()
函数通过将x轴划分为多个分段并计算每个分段中的观测值数量,可视化单个连续变量的分布情况。geom_freqpoly()
:用于绘制频率多边形,展示数据的频率分布。geom_boxplot()
:用于绘制箱线图,展示数据的中位数、四分位数和异常值。geom_violin()
:用于绘制小提琴图,结合了箱线图和密度图的特点,展示数据的分布和密度。geom_area()
:用于绘制面积图,展示随时间或其他连续变量的累积值。geom_bar()
:用于绘制条形图,通常用于展示分类数据的频率或计数。geom_col()
:类似于geom_bar()
,用于绘制直方图或条形图,这两者的区别需要仔细比较。geom_count()
:用于绘制每个类别的观测计数,类似于条形图,但条形的高度自动调整以显示计数。geom_density()
:用于绘制密度图,展示数据的密度估计。这是直方图的平滑版本。geom_dotplot()
:用于绘制点图,展示每个类别的观测值。geom_jitter()
:用于在散点图中添加随机抖动,以避免重叠的点。geom_jitter()
是geom_point(position = “jitter”)
的便捷变化形式。两者的区别与联系整理过一些,但很不充分:R语言画图 | ggplot2包的position参数设置geom_step()
:用于绘制阶梯图,展示数据的变化。geom_tile()
:可以用于绘制热图:geom_text()
:用于在图表中添加文本标签。geom_label()
:用于在图表中添加带边框的文本标签。这两个函数的区别在火山图实例中应该展示的比较充分:
geom_errorbar()
:用于添加误差条,展示数据的离散分布。geom_rug()
:用于在图表的边缘添加“地毯图”,展示数据点的位置。stat_xxx()
函数光看文字很难理解,后续慢慢补充对应实例(开始立flag).
stat_bin()
:用于创建直方图,将连续数据分成若干个区间(箱),并计算每个箱中的观测数。stat_boxplot()
:用于绘制箱线图,展示数据的中位数、四分位数和异常值。stat_count()
:用于计算每个组的观测数量,通常用于条形图,其中每个条形的高度代表该组中的观测数。stat_density()
:用于绘制密度图,展示数据的密度估计。stat_ecdf()
:用于绘制经验累积分布函数图,展示数据的累积分布。stat_identity()
:表示数据不需要进行任何统计变换(很多geom_*()函数对应的默认stat_xxx()函数),适用于已经预先计算好了要展示的值的情况。stat_qq()
:用于绘制QQ图,比较样本数据与理论分布的相似性。stat_smooth()
:用于添加平滑曲线(如线性回归线),展示数据的趋势。stat_summary()
:用于绘制统计摘要,如均值、中位数等,可以通过 fun 参数自定义统计函数。stat_summary_bin()
:用于在二维图中对一个变量进行分箱,并计算另一个变量的统计摘要,如均值。截止至目前,只整理过位置调整参数position
与基础分面,后续慢慢补:
1. ggplot2 function reference
2. ggplot2: Elegant Graphics for Data Analysis (3e)
3.ggplot2绘图中常用的 geom_* 函数.
原文链接:R包Tax4Fun2功能注释分析实战
欢迎关注“细猪技术”微信公众号,更早获取最新资讯
一、Tax4Fun2简介
Tax4Fun是Aßhauer等人于2015年发布在Bioinformatics期刊上的通过扩增子序列预测微生物群落功能的方法,设计思路与PICRUSt类似,请访问http://tax4fun.gobics.de/获取相关数据资料。Tax4Fun2(https://github.com/ZihaoShu/Tax4Fun2, https://github.com/fjossandon/Tax4Fun2)是一个基于Tax4Fun升级的本地分析的R包,可基于扩增子序列快速预测微生物群落功能图谱和功能冗余。通过合并用户定义的、特定栖息地的基因组信息,显著地提高功能预测的灵活性、特异性、准确性和鲁棒性。Tax4Fun2参考库侧重于原核生物,也兼容真核生物,还提供了计算特定功能冗余的方法,对于预测特定功能在环境扰动期间丢失的可能性至关重要。文献引用请参考Wemheuer, F., Taylor, J. A., Daniel, R., Johnston, E., Meinicke, P., Thomas, T., & Wemheuer, B. (2018). Tax4Fun2: a R-based tool for the rapid prediction of habitat-specific functional profiles and functional redundancy based on 16S rRNA gene marker gene sequences. BioRxiv, 490037. https://www.biorxiv.org/content/10.1101/490037v1
二、Tax4Fun2程序与数据准备
(1) 分析数据与程序包准备
① Tax4Fun2输入文件来源于QIIME2分析实战(3)_DADA2去噪输出的特征表文件exported-feature-table/feature-table.txt和代表性序列文件repseqs.qza,解压缩上述*.qza文件,复制其中exported-feature-table/feature-table.txt和data/dna-sequences.fasta到tax4fun2工作目录D:\\\\R\\\\tax4fun2下;
② 使用Excel打开feature-table.txt文件,删除第一行和OTU ID前面的#;
③ 访问网页链接https://github.com/ZihaoShu/Tax4Fun2/blob/main/Tax4Fun2_1.1.5.tar.gz,下载最新R包(Tax4Fun2_1.1.5.tar.gz, 35K)放到tax4fun2工作目录;
④ 使用R创建一个R脚本tax4fun2.R,放入tax4fun2工作目录D:\\\\R\\\\tax4fun2中;
⑤ 查看tax4fun2工作目录D:\\\\R\\\\tax4fun2。注意,R、RStudio和Rtools安装方法请参考Windows系统安装R+RStudio+Rtools,公众号后台回复“tax4fun2”获取本文所有示例数据、R程序包、数据库配置文件和结果文件。
(2) 安装R包tax4fun2
① 双击打开R脚本tax4fun2.R,RStudio工作路径变成D:\\\\R\\\\tax4fun2;
② R包tax4fun2本地安装与加载。
# R包tax4fun2本地安装\\ninstall.packages(pkgs = \'Tax4Fun2_1.1.5.tar.gz\', repos = NULL, source = TRUE)\\n# R包tax4fun2加载\\nlibrary(Tax4Fun2)
(3) 构建Tax4Fun2默认参考库
2018年8月18日,Tax4Fun2开发者从NCBIRefSeq下载了所有完整基因组和所有“染色体”状态的基因组,得到275个古菌基因组和12102个细菌基因组。将所有rDNA序列按长度递减排序,用USEARCH 10.240程序的UCLUST算法分别以99%和100%的序列相似性进行聚类,每个聚类簇中的最长序列作为参考序列。
# 构建Tax4Fun2默认参考库\\nbuildReferenceData(path_to_working_directory = \\".\\", use_force = FALSE, install_suggested_packages = TRUE)
在上述命令参数中,path_to_working_directory = \\".\\"指定按默认在当前工作路径中构建库;use_force = FALSE指定是否覆盖已有的文件夹,默认为FALSE;install_suggested_packages = TRUE指定安装R包ape和R包seqinr,默认为TRUE。如果出现库连接失败或配置报错,可以尝试更换源镜像下载配置。或者公众号后台回复“tax4fun2”获取备份数据库,解压缩到工作路径tax4fun2下。
(4) 安装依赖
# 安装依赖\\nbuildDependencies(path_to_reference_data = \'./Tax4Fun2_ReferenceData_v2\', use_force = FALSE, install_suggested_packages = TRUE)
使用上述命令下载当前最新版本BLAST程序,且放置在Tax4Fun2参考库路径下,可见“Tax4Fun2_ReferenceData_v2”中新增了blast程序。另外,还将测试R包ape和R包seqinr是否可用。
三、Tax4Fun2实战分析
(1) 物种注释
指定ASV代表性序列、Tax4Fun2库、参考库版本以及序列比对(blastn)处理线程数等进行blast比对,参考库版本可选聚类阈值99%的Ref99NR或聚类阈值100%的Ref100NR。
# 物种注释\\nrunRefBlast(path_to_otus = \'dna-sequences.fasta\', path_to_reference_data = \'./Tax4Fun2_ReferenceData_v2\', path_to_temp_folder = \'bac_Ref99NR\', database_mode = \'Ref99NR\', use_force = TRUE, num_threads = 12)
Tax4Fun2默认调用blastn程序比对代表性序列和参考序列,获得物种注释信息。参考数据库v2包括SILVA、NR等库,本示例使用了Ref99NR参考库比对输出结果bac_Ref99NR/ref_blast.txt,包括输入序列和库中最佳匹配的目标序列。
(2) 功能预测
使用Prodigal基于原核生物KEGG Orthology(KO)数据库预测开放阅读框(open-reading-frames)。通过在每个基因组中鉴定出的16S rDNA的数量来标准化功能图谱(functional profiles),进而解释rRNA拷贝数的差异。
# 功能预测\\nmakeFunctionalPrediction(path_to_otu_table = \'feature-table.txt\', path_to_reference_data = \'./Tax4Fun2_ReferenceData_v2\', path_to_temp_folder = \'bac_Ref99NR\', database_mode = \'Ref99NR\', normalize_by_copy_number = TRUE, min_identity_to_reference = 0.97, normalize_pathways = FALSE)
在上述命令参数中,normalize_pathways = FALSE指定每个KO丰度信息关联到其所属的Pathway;normalize_by_copy_number = TRUE指定基于ASV特征表所含rDNA序列拷贝数对物种丰度进行标准化校正,然后用于功能(丰度)预测。此分析步骤输出bac_Ref99NR/functional_prediction.txt和bac_Ref99NR/pathway_prediction.txt,functional_prediction.txt包含预测到的功能基因在所有样本中的丰度信息,功能基因映射到KO功能4级分类单元上,在KEGG官网https://www.genome.jp/kegg/pathway.html根据KO ID查询更多信息。pathway_prediction.txt包含功能基因映射到其所属的KEGG pathway代谢途径的KO第3级分类单元,也提供了Pathway的更高级KO分类单元。
(3) 计算功能冗余指数FRI
功能冗余是指同一生态系统中具有相似功能的物种的多样性或饱和程度。de Bello等提出量化功能冗余的方法,即将Simpson物种多样性指数(SD)分为功能多样性(FD)和功能冗余(FR)两部分,反映出物种多样性是产生功能多样性和功能冗余的基础。通过Simpson物种多样性指数和功能多样性计算结果来确定微生物群落功能冗余的大小。Tax4Fun2针对单个功能通路首次引入了功能冗余指数(FRI)的概念,可以基于包含特定功能的物种比例及其相互之间的系统发育关系来计算FRI。功能冗余指数(FRI)描述了原核生物群落的多种功能的冗余度,高FRI表示该功能在群落成员中普遍存在,低FRI表示该功能仅在少量物种中存在,FRI为0表示该功能不存在。功能冗余指数包括相对FRI(rFRI)和绝对FRI(aFRI),rFRI使用微生物群落中的平均系统发生距离进行归一化,适用于比较某一项研究中的样本;aFRI使用Tax4Fun2参考库中所有原核生物的平均系统发生距离进行归一化,适用于比较不同生态系统中的功能冗余指数。
# 计算功能冗余指数FRI,耗费约1-2小时\\ncalculateFunctionalRedundancy(path_to_otu_table = \\"feature-table.txt\\", path_to_reference_data = \\"Tax4Fun2_ReferenceData_v2\\", path_to_temp_folder = \\"bac_Ref99NR\\", database_mode = \\"Ref99NR\\", min_identity_to_reference = 0.97)
输出结果文件bac_Ref99NR/absolute_functional_redundancy.txt和bac_Ref99NR/relative_functional_redundancy.txt,分别是绝对功能冗余指数文件和相对功能冗余指数文件。下图展示绝对功能冗余指数文件数据结果,其中第一行为样本名称,第一列为KO功能编号,中间数据框为所有样本各绝对功能冗余指数。
矫情
","description":"如何放下喜欢了很久很久的人呢? 土豆的回答\\n\\n\\n矫情","guid":"https://www.zhihu.com/question/611381246/answer/70459248307","author":"土豆","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T03:09:57.965Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?-无己无功无名的回答:前者是专业的,后者是职业的。 为啥,因为程序员和数据工作者互...","url":"https://www.zhihu.com/question/637441452/answer/70429540303","content":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿?前者是专业的,后者是职业的。
为啥,因为程序员和数据工作者互为打工仔。后者在数据领域内应该都是程序员用的吧?职业的,是要拿工资的,工具不一定专业,但一定要称手。
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? 无己无功无名的回答\\n\\n\\n前者是专业的,后者是职业的。\\n\\n为啥,因为程序员和数据工作者互为打工仔。后者在数据领域内应该都是程序员用的吧?职业的,是要拿工资的,工具不一定专业,但一定要称手。","guid":"https://www.zhihu.com/question/637441452/answer/70429540303","author":"无己无功无名","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T02:42:52.311Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"医学生还需要学R语言吗?-泡芙的回答:太需要了,尤其是专硕,或者流统","url":"https://www.zhihu.com/question/6374954884/answer/70419548781","content":"医学生还需要学R语言吗?太需要了,尤其是专硕,或者流统
","description":"医学生还需要学R语言吗? 泡芙的回答\\n\\n\\n太需要了,尤其是专硕,或者流统","guid":"https://www.zhihu.com/question/6374954884/answer/70419548781","author":"泡芙","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-03T02:31:35.128Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Tidyverse包能够如何提高R语言的数据分析效率?-科研R的回答:你是否曾经面对杂乱的数据发愁?就像是整理一个凌乱的衣柜,数据处理有时也需要各种\\"收纳神器\\"。今...","url":"https://www.zhihu.com/question/647971815/answer/70219614443","content":"Tidyverse包能够如何提高R语言的数据分析效率?你是否曾经面对杂乱的数据发愁?就像是整理一个凌乱的衣柜,数据处理有时也需要各种\\"收纳神器\\"。今天,让我们一起来认识tidyverse中的这些\\"数据整理神器\\"!
首先来看看这个\\"排座位\\"高手。假设我们有一个学生成绩单:
# 创建示例数据\\nstudents <- tibble(\\n name = c(\\"小明\\", \\"小红\\", \\"小华\\", \\"小李\\", \\"小张\\"),\\n chinese = c(85, 92, 78, 95, 88),\\n math = c(92, 88, 75, 89, 94),\\n english = c(88, 95, 82, 87, 90)\\n)\\n\\n# 按总分排序\\nstudents %>%\\n mutate(total = chinese + math + english) %>%\\n arrange(desc(total))\\n## # A tibble: 5 x 5\\n## name chinese math english total\\n## <chr> <dbl> <dbl> <dbl> <dbl>\\n## 1 小红 92 88 95 275\\n## 2 小李 95 89 87 271\\n## 3 小张 88 94 90 272\\n## 4 小明 85 92 88 265\\n## 5 小华 78 75 82 235\\n
看,就像给学生按成绩排座位一样简单!
有时候数据就像复制粘贴出了\\"影分身\\",让我们看看如何消除重复:
# 创建带重复的购物清单\\nshopping <- tibble(\\n item = c(\\"苹果\\", \\"香蕉\\", \\"苹果\\", \\"橙子\\", \\"香蕉\\"),\\n price = c(5, 3, 5, 4, 3),\\n quantity = c(2, 3, 2, 1, 3)\\n)\\n\\n# 去除重复记录\\nshopping %>% distinct()\\n## # A tibble: 3 x 3\\n## item price quantity\\n## <chr> <dbl> <dbl>\\n## 1 苹果 5 2\\n## 2 香蕉 3 3\\n## 3 橙子 4 1\\n
# 英文列名改中文\\nshopping %>%\\n rename(\\n 商品 = item,\\n 单价 = price,\\n 数量 = quantity\\n )\\n
就像整理抽屉一样,有时候我们需要调整数据列的位置:
# 创建销售数据\\nsales <- tibble(\\n date = as.Date(\'2024-01-01\') + 0:4,\\n product = c(\\"A\\", \\"B\\", \\"C\\", \\"A\\", \\"B\\"),\\n revenue = c(1000, 1500, 800, 1200, 1600),\\n region = c(\\"北京\\", \\"上海\\", \\"广州\\", \\"深圳\\", \\"杭州\\"),\\n sales_person = c(\\"张三\\", \\"李四\\", \\"王五\\", \\"赵六\\", \\"钱七\\")\\n)\\n\\n# 把重要信息放前面\\nsales %>%\\n relocate(revenue, .before = product) %>%\\n relocate(sales_person, .after = product)\\n
# 创建带缺失值的考勤数据\\nattendance <- tibble(\\n name = c(\\"小明\\", \\"小红\\", \\"小华\\", \\"小李\\"),\\n monday = c(TRUE, TRUE, NA, TRUE),\\n tuesday = c(TRUE, NA, TRUE, TRUE),\\n wednesday = c(NA, TRUE, TRUE, TRUE)\\n)\\n\\n# 删除有缺勤记录的行\\nattendance %>% drop_na()\\n
# 快速提取某一列数据\\nstudents %>%\\n mutate(average = (chinese + math + english)/3) %>%\\n pull(average) %>%\\n round(1)\\n
students %>%\\n mutate(average = (chinese + math + english)/3) %>%\\n arrange(desc(average)) %>%\\n relocate(average, .after = name)\\n
这些tidyverse函数就像一套精良的工具,每个都有其独特用途:
掌握这些工具,你的数据处理工作就能事半功倍!
如果你觉得这篇文章对你有帮助,别忘了点个赞 。关注我,还有更多数据分析\\"黑科技\\"等着你! 下期预告:《数据整理的瑞士军刀:tidyverse专职函数详解》,我们不见不散!
彩蛋:据说经常整理数据的分析师,连相亲时都会用arrange(desc(好感度))来筛选对象...","description":"Tidyverse包能够如何提高R语言的数据分析效率? 科研R的回答\\n\\n你是否曾经面对杂乱的数据发愁?就像是整理一个凌乱的衣柜,数据处理有时也需要各种\\"收纳神器\\"。今天,让我们一起来认识tidyverse中的这些\\"数据整理神器\\"!\\n\\n1. arrange():数据排排坐\\n\\n首先来看看这个\\"排座位\\"高手。假设我们有一个学生成绩单:\\n\\n# 创建示例数据\\nstudents <- tibble(\\n name = c(\\"小明\\", \\"小红\\", \\"小华\\", \\"小李\\", \\"小张\\"),\\n chinese = c(85, 92, 78, 95, 88),\\n math = c(92,…","guid":"https://www.zhihu.com/question/647971815/answer/70219614443","author":"科研R","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-02T17:16:16.081Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"JackStraw与ElbowPlot在确定主成分上的区别","url":"https://zhuanlan.zhihu.com/p/16073456785","content":"JackStraw 和 ElbowPlot 都是用于确定主成分 (Principal Components, PCs) 的重要性的方法,但它们的原理、结果以及适用性有所不同。1. JackStraw 的原理和结果 JackStraw 是一种统计置换检验方法,用于评估每个主成分的显著性:原理:通过随机置换基因表达数据,生成背景分布,评估某个主成分是否显著解释了比随机噪声更多的变异。计算每个主成分的 P 值,表示主成分是否显著。结果:JackStrawPlot 图显示每个主成分的显著性: …","description":"JackStraw 和 ElbowPlot 都是用于确定主成分 (Principal Components, PCs) 的重要性的方法,但它们的原理、结果以及适用性有所不同。1. JackStraw 的原理和结果 JackStraw 是一种统计置换检验方法,用于评估每个主成分的显著性:原理:通过随机置换基因表达数据,生成背景分布,评估某个主成分是否显著解释了比随机噪声更多的变异。计算每个主成分的 P 值,表示主成分是否显著。结果:JackStrawPlot 图显示每个主成分的显著性:…","guid":"https://zhuanlan.zhihu.com/p/16073456785","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-02T14:35:46.196Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-从北到南的回答:杀疯了热烈而自由的宝藏文案 [图片] 1、“冬囚夏蝉,我栖春山” 2、“我爱人的方式是我想被爱的方式” 3、“...","url":"https://www.zhihu.com/question/580956751/answer/70136434996","content":"能否分享一些让你豁然开朗的句子?
杀疯了热烈而自由的宝藏文案
1、“冬囚夏蝉,我栖春山”
2、“我爱人的方式是我想被爱的方式”
3、“你所热爱的东西,有一天会反过来拥抱你。”
4、“你所谓的迷茫,不过是清醒地看着自己沉沦。”
5、“你多学一样本事,就少说一句求人的话。”
6、“钟表会回到原点,但昨天永远是昨天”
7、“若真心存栀子花,庭中怎有梨花树”
8、“我想,生命这卷书,落款应该是亭亭常青树”
9、“我开始享受听风,永远自由,但依旧心事重重”
10、“弱者才会一蹶不振,我要逆风翻盘。”
11、“如果一定有人要赢,那为什么不能是我。”
12、“在这个世界上只有伤心的理由,没有沉沦的借口。”
13、“如果我们换个心脏,你就会明白,我就会懂你。”
14、“写不尽的轻舟,又是几个春秋”
15、“每个冬天的句点都是春暖花开”
16、“我神色如常的爱,是不声不响的海”
17、“请永远疯狂,永远浪漫,永远清澈的存在”
18、“埋头努力的路上,偶尔也要看看星空”
19、“得失随缘,心无增减”
20、“我喜欢的人很优秀,我努力的理由是配得上他/她。”
21、“当下每一次想要努力的念头,都有可能是未来的你在向现在的你求救。”
22、“无人问津的港口总是开满鲜花。”
23、“最值得欣赏的风景,是自己奋斗的足迹。”
24、“没有回音的山谷不值得纵身一跃。”
学,R对生物方面很有用,也很友好,生信分析+统计都是R的强项
","description":"医学生还需要学R语言吗? 14170603的回答\\n\\n\\n学,R对生物方面很有用,也很友好,生信分析+统计都是R的强项","guid":"https://www.zhihu.com/question/6374954884/answer/69710512048","author":"14170603","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-02T04:38:40.138Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"怎么用r语言进行生物多样性分析(α多样性)?-细猪技术的回答:原文链接:微生物群落多样性指数_Alpha、Beta与Gamma多样性指数 欢迎关注“细猪技术”微信公众号...","url":"https://www.zhihu.com/question/498476662/answer/69625896113","content":"怎么用r语言进行生物多样性分析(α多样性)?原文链接:微生物群落多样性指数_Alpha、Beta与Gamma多样性指数
欢迎关注“细猪技术”微信公众号,更早获取最新资讯
微生物是地球上分布最广泛的多样性最高的一类生物,其无处不在,且随着生境的变化而变化。在自然环境中,微生物发挥着一系列生态功能,持续地驱动着生物地球化学循环,是生态系统中的最重要的成员之一。微生物多样性研究对微生物-环境关系探究、环境治理技术开发和微生物资源利用具有重要的理论指导和评估意义,一直是微生物生态研究的热点,二代测序技术的广泛应用更是极大地发展了微生物生态的研究策略。微生物多样性包括Alpha多样性、Beta多样性和Gamma多样性,三者都来源于生态学。Alpha多样性是指特定生境内的物种多样性,Beta多样性是指不同生境间的群落多样性,主要区别于空间尺度。Alpha多样性分析主要使用优势度指数(Dominance_D)、辛普森指数(Simpson_1-D)、香农指数(Shannon_H)、均匀度指数(Evenness)、样本丰富度指数(Menhinick/Margalef)和总物种丰富度指数(Chao1)等综合评估生态系统的物种丰富度(Species richness)和物种均匀度(Species evenness)。此外,也可以使用Alpha稀释曲线评估测序深度合理性。Beta多样性分析往往先通过计算样本间的距离矩阵分解群落结构,然后对样本排序(Ordination)来观测样本差异,最后通过差异检验确定其是否具有统计学意义。本文重点介绍3种微生物多样性度量指标,包括α多样性、β多样性和γ多样性。PAST程序可以轻松实现微生物群落多样性分析,其简介及其安装方法请参考PAST4.17简介及其安装方法。
一、Alpha多样性
α多样性(Alpha Diversity)即生境内的多样性(within-habitat diversity),是指某一栖息地或微生物群落在物种水平上数目和频率的分布特征,包含物种的丰富度和均匀度。丰富度是指特定生境内的物种数量,与丰度(某物种个体数量)无关。均匀度是指特定生境内的物种间的丰度差异大小,所有物种丰度一致则均匀度最高。Alpha多样性指数类别包括物种数量(Taxa_S)、序列总数(Individuals)、优势度指数(Dominance_D)、辛普森指数(Simpson_1-D)、香农指数(Shannon_H)、均匀度指数(Evenness)、样本丰富度指数(Menhinick/Margalef)和总物种丰富度指数(Chao1)等。
(1) Chao1指数
Chao1指数由Chao在1984年提出,在生态学中常用Chao1算法估计样本中的总物种数。总物种丰富度的无偏差矫正的估算公式见式A。
式中,SChao1是Chao1算法估计的总物种丰富度;S是观测到的物种数目(Number of taxa);n是物种总数(Total number of individuals);F1是丰度为1的物种数目(Number of singleton species);F2是丰度为2的物种数目(Number of doubleton species)。如果F2=0,使用式B。
偏差矫正的估算公式见式C。
iChao1算法是Chiu等人在2014年提出的“改进的Chao1算法”,即兼顾了F3(丰度为3的物种数目)和F4(丰度为4的物种数目),如果F4=0,使用F4=1来避免被零除。如果基于ASV/OTU特征丰度表分析,ASV/OTU则被认定为物种。估算公式见式D。
(2) ACE指数
ACE指数由Chao在1992年提出,是通过物种丰度覆盖度估计群落物种数目的指数。ACE指数计算公式见式E、式F和式G。
式中,CACE是样本覆盖度的估计值;F1是丰度为1的物种数目;Srare是丰度>0且≤10的(稀有)物种数目;nrare是Srare中的个体数量;γ2ACE是稀有物种的变异系数;Fk是丰度为k的物种数目;SACE是基于覆盖度估计的丰度;Sabund是丰度>10的物种数目;S=Srare+Sabund。
(3) 香农指数
香农指数(Shannon)是一个综合考虑物种数量和总个体数量的多样性指数,Shannon值越大代表多样性越高。如果微生物群落仅有一个物种,则Shannon=0,且随着物种数量增大而增大。Shannon指数计算公式见式H,或使用计算公式I获取偏差校正Hu。
式中,ni是物种i的个体数目;n是样本中的丰度总和。
(4) 辛普森指数
辛普森指数(Simpson)又称优势度指数(Dominance),由Edward Hugh Simpson在1949年提出,用来定量描述特定区域的生物多样性。Simpson指数越大代表多样性越低,当一个群落仅有一个物种时,Simpson=0;当一个群落所有物种的丰度都相同时,Simpson=1。Simpson=1-Dominance。Dominance指数计算公式见式J,偏差校正Dominance指数计算公式见式K。
式中,ni是物种i的个体数目;n是样本中的丰度总和。注意,Dominance和Simpson经常互换使用,务必确认具体计算公式,避免出现错误。
二、Beta多样性
β多样性(Beta Diversity)探究不同生境群落组成差异或沿环境梯度的更替特征,即生境间的多样性(between-habitat diversity)。β多样性越大代表群落间的共有物种越少且物种组成差异越大,往往用来指示不同生境的物种隔离程度,且与α多样性共同构成了总体多样性或特定生境的生物异质性。Beta多样性分析往往通过计算样本间的距离矩阵分解群落结构,然后对样本排序(Ordination)来观测样本差异,最后通过差异检验确定其是否具有统计学意义。
(1) 距离矩阵计算
常用的加权距离算法有Bray-Curtis、Abund_jaccard、Euclidean和Weighted Unifrac,非加权距离算法有Jaccard和Unweighted Unifrac。非加权算法侧重比较物种有无,β多样性越小代表群落间的物种种类越相似,加权算法则兼顾物种有无和物种丰度。Bray-Curtis距离基于物种丰度信息计算,Weighted Unifrac距离基于物种进化关系及其相对丰度计算,二者对丰度较高的物种更加敏感。Unweighted Unifrac距离算法仅考虑物种有无,忽略物种相对丰度,对稀有物种更敏感。
(2) 排序分析
基于上述距离矩阵对样本进行降维排序(Ordination),深入挖掘不同样品间的微生物群落组成差异,常见的排序方法包括主成分分析(Principle Compounent Analysis, PCA)、主坐标分析(Principal Co-ordinates Analysis, PCoA)、非度量多维排列(Non-metric multidimensional scaling, NMDS)和非加权组平均聚类分析(Unweighted Pair-group Method with Arithmetic Means, UPGMA)等分析。
(3) 差异检验
通过降维排序分析和结果可视化分析后,需要进一步使用相似性分析(ANOSIM)和置换多元方差分析(PERMANOVA)等差异检验方法判断不同分组样本群落是否具有显著性差异,其本质是检验不同分组的样本中心点或分布特征是否相同。
(4) 概念拓展
① 主成分分析(Principal component analysis, PCA)是一种非约束性的数据降维方法,基于欧式距离的方差分解探究形成样本差异的主成分(特征值)及其贡献率。主成分分析由原始的物种丰度表中提取最主要的差异特征,且根据提取的特征在新的低维空间中排序,使得样本在新坐标中的距离最大化地代表样本实际差异。主成分分析的降维依据是物种丰度,模型评估指标是轴解释率,且坐标轴有权重意义。在排序过程中,排序轴对原始样本差异解释率逐渐降低,往往选择前二维(PC1/PC2)或三维(PC1/PC2/PC3)数据进行可视化展示。PCA系线性模型,即假定物种丰度沿环境变量呈线性变化,而自然生境微生物对环境响应常常是单峰模型(非线性模型),所以应用相对受限。
② 主坐标分析(Principal coordinateanalysis, PCoA)依据距离数值对样本距离矩阵进行降维分析,呈现样本在某种特定距离尺度下的自然分布,模型评估指标是轴解释率,且坐标轴有权重意义。选择任意距离尺度的距离矩阵对ASV/OTU水平的群落组成进行PCoA分析,以二维或三维空间呈现样本间的自然分布特征。
③ 非度量多维尺度分析(Non-metricmulti-dimensional scaling, NMDS)是一种经典的MDS分析方法,该算法可以基于除了欧式距离以外的绝大多数距离尺度评价样本相似度。NMDS使用样本距离矩阵进行排序分析,不计算特征根和特征向量而是对样本距离进行等级排序,模型评估指标是Stress值,且坐标轴无权重意义。通过距离等级排序使样本关系趋近间距大小关系而非确切距离数值,减小依赖距离矩阵实际数值,强化数值排名(Rank)的作用。NMDS系非线性模型,对于复杂数据的排序结果相对更稳定。在NMDS分析中,同组样本的间距代表样本重复性优劣,不同组别样本间距代表了组间样本距离在数值排名(秩次)上的差异。
④ 层次聚类(Hierarchical clustering)分析方法以系统发育树的形式呈现样本相似度,根据系统发育树的分枝长度评估聚类效果。类似于多维尺度分析(Multidimensional scaling, MDS),聚类分析也可以采用任何距离评价样本相似度。
三、Gamma多样性
γ多样性(Gamma diversity)的主要指标为物种数(S),是描述气候区域或大陆尺度的多样性(物种数量),也被称为区域多样性(Regional diversity)。控制γ多样性的生态过程主要为水热动态,气候和物种形成及演化的历史。群落生态学中研究微生物多样性,γ多样性分析是指α多样性与β多样性相结合的分析。
参考文献
[1] Clark D R, Ferguson R M W, Harris D N, et al. Streams of data from drops of water: 21st century molecular microbial ecology[J]. Wiley Interdisciplinary Reviews: Water, 2018, 5(4): e1280.
[2] Chao A. Nonparametric estimation of the number of classes in a population[J]. Scandinavian Journal of statistics, 1984, 11: 265-270.
[3] Chiu C H, Wang Y T, Walther B A, et al. An improved nonparametric lower bound of species richness via a modified good–turing frequency formula[J]. Biometrics, 2014, 70(3): 671-682.
[4] Chao A, Lee S M. Estimating the number of classes via sample coverage[J]. Journal of the American statistical Association, 1992, 87(417): 210-217.
[5] Chao A, Shen T J. Nonparametric estimation of Shannon’s index of diversity when there are unseen species in sample[J]. Environmental and ecological statistics, 2003, 10(4): 429-443.
","description":"怎么用r语言进行生物多样性分析(α多样性)? 细猪技术的回答\\n\\n\\n原文链接:微生物群落多样性指数_Alpha、Beta与Gamma多样性指数\\n\\n欢迎关注“细猪技术”微信公众号,更早获取最新资讯\\n\\n微生物是地球上分布最广泛的多样性最高的一类生物,其无处不在,且随着生境的变化而变化。在自然环境中,微生物发挥着一系列生态功能,持续地驱动着生物地球化学循环,是生态系统中的最重要的成员之一。微生物多样性研究对微生物-环境关系探究、环境治理技术开发和微生物资源利用具有重要的理论指导和评估意义,一直是微生物生态研究的热点,二代测序技术的广泛应用更是极大地发展了微生物生态的研究策略…","guid":"https://www.zhihu.com/question/498476662/answer/69625896113","author":"细猪技术","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-02T03:04:09.678Z","media":[{"url":"https://pic1.zhimg.com/50/v2-5072994b6445f49c38fea681e7c9669d.jpg","type":"photo","width":513,"height":90,"blurhash":"LISigQ-;j[-;-;j[offQ~qofofof"},{"url":"https://picx.zhimg.com/50/v2-e5f34a51d2ceae76b00c0685be68fa91.jpg","type":"photo","width":582,"height":82,"blurhash":"LHRW0b_3D%?bt7of%MWB~qWBWBj["},{"url":"https://picx.zhimg.com/50/v2-86cee38a77a9ab7bc68f7450b1ccac50.jpg","type":"photo","width":582,"height":88,"blurhash":"LIQ]+w_3xuxu-;WBWBt7~qofWBof"},{"url":"https://pica.zhimg.com/50/v2-d2c5e17c3de3a04ec51e11b91f107db4.jpg","type":"photo","width":965,"height":94,"blurhash":"LISY{q_3WB-;?boft7of~qM{j[of"},{"url":"https://picx.zhimg.com/50/v2-2cb3e3fddf4ce56d61cb460f59ae3532.jpg","type":"photo","width":747,"height":305,"blurhash":"LER:HG_3xu-;~qt7ofay?bxuWBWB"},{"url":"https://picx.zhimg.com/50/v2-3f4ca496879c3e56be9f30d41666b4a1.jpg","type":"photo","width":529,"height":165,"blurhash":"LGR:HG~qxu?b?bofxu%M9Ft7j[WB"},{"url":"https://picx.zhimg.com/50/v2-caf2da10080dccafa78ebdf062458f76.jpg","type":"photo","width":425,"height":207,"blurhash":"LBRfkB~q~q?b_3WBWBM{9Fj[xuM{"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"请问如何将txt格式文件转成biom格式,R的那个工具包一直都装不上去,求助。?-细猪技术的回答:原文链接:BIOM格式_微生物组数据通用格式 欢迎关注“细猪技术”...","url":"https://www.zhihu.com/question/265766451/answer/69515601564","content":"请问如何将txt格式文件转成biom格式,R的那个工具包一直都装不上去,求助。?原文链接:BIOM格式_微生物组数据通用格式
欢迎关注“细猪技术”微信公众号,更早获取最新资讯
生物观测矩阵(Biological Observation Matrix, BIOM)是微生物组数据通用存储格式(http://biom-format.org/),BIOM格式表格称为BIOM表,文件名称一般是*.biom。BIOM表允许ASV/OTU Table、Sample Metadata和Species Data等多类型数据保存在同一文件中,其优点是格式统一且体积小巧。目前,几乎所有的主流微生物组分析流程都兼容BIOM格式,包括QIIME2、Mothur、PICRUSt2、MEGAN、RDP Classifier和USEARCH等。文献参考Daniel McDonald, Jose C. Clemente, Justin Kuczynski, Jai Ram Rideout, Jesse Stombaugh, Doug Wendel, Andreas Wilke, Susan Huse, John Hufnagle, Folker Meyer, Rob Knight, and J. Gregory Caporaso.GigaScience 2012, 1:7.
一、BIOM应用范围与格式版本
(1) BIOM格式应用范围
BIOM格式用于存储和操作大规模的稀疏的生物数据列联表,即按两个及以上属性(定性变量)分类列出的生物观测频数矩阵,类似于一般统计表格。BIOM格式允许将样本核心元数据(Contingency table data and sample / Observation metadata)封装到单个文件中。此外,许多微生物组分析程序对其均有很好的兼容性,包括QIIME2、Mothur和USEARCH等。
(2) BIOM格式版本
BIOM格式有2个版本,包括JSON(JavaScript Object Notation)和HDF5(Hierarchical Data Format version 5)。JSON是编程语言广泛支持的轻量级的数据交换格式,类似于散列的键值对,可以根据数据松散程度选择合适的更小空间的存储结构。HDF5是一种用于存储和管理大量数据的二进制格式,程序语言兼容广泛,支持高效读取和节约空间。
二、biom-format工具安装与使用
(1) biom-format工具安装
① 基于pip或conda安装最新的Python包biom-format,二者选其一
# 基于pip安装\\npip install numpy\\npip install biom-format\\n# 基于conda安装\\nconda install biom-format
② 安装h5py模块处理BIOM2.0+文件
# 安装h5py模块\\npip install h5py
③ 查看BIOM的所有命令列表
# 查看命令列表\\nbiom
(2) biom-format工具使用
biom-format工具的convert命令可以实现BIOM表和制表符分隔的文本格式表格之间的相互转换。制表符分隔的文本格式表格是经典格式表格,可以在Excel、文本阅读器等程序中轻松查看。
① BIOM表和制表符分隔的文本格式表格TXT的相互转换
# 将制表符分隔的文本格式表格TXT转换为HDF5 BIOM或JSON BIOM格式的表格,必须指定表格类型\\nbiom convert -i table.txt -o txt_to_json.biom --table-type=\\"OTU table\\" --to-json\\nbiom convert -i table.txt -o txt_to_hdf5.biom --table-type=\\"OTU table\\" --to-hdf5\\n# 将BIOM表格转换为制表符分隔的文本格式表格TXT\\nbiom convert -i table.biom -o biom_to_txt.txt --to-tsv
② BIOM表和制表符分隔的文本格式表格TSV的相互转换
# 将BIOM表格转换为制表符分隔的文本格式表格TSV\\nbiom convert -i table.biom -o biom_to_tsv.txt --to-tsv --header-key taxonomy\\n# 将制表符分隔的文本格式表格TSV转换为BIOM表格,必须指定表格类型\\nbiom convert -i biom_to_tsv.txt -o tsv_to_biom.biom --to-hdf5 --table-type=\\"OTU table\\" --process-obs-metadata taxonomy
实操演示:BIOM表格转换为制表符分隔的文本格式表格,参考QIIME2分析实战(3)_DADA2去噪
# BIOM表格转换为制表符分隔的文本格式表格\\ntime biom convert -i exported-feature-table/feature-table.biom -o exported-feature-table/feature-table.txt --to-tsv
查看feature-table.txt文件,第1列为OTU名称,第2行是样本名称,第2列到第28列分别为27个样本中对应OTU的计数数值。
《数据获取与预处理》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践,也要加强同其他学科的关联。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据特定的案列,学会分析爬取页面的方法,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,能够运用数据获取与预处理的原理和方法解决简单的实际问题,逐步培养学生良好的程序设计能力。
(1)目的:从豆瓣top250上面获取的电影名称、导演和演员、评分、排名、图片等信息并保存下来
(2)意义:通过对电影数据的分析得出自己想要的信息。
本文的主要研究内容包括下面两个部分。
(1)分析网页
对网页进行分析,寻找规律,获得想要的数据链接
(2)数据的提取与保存
对从网站中获取的信息进行分析,提取所需要的信息并把这些信息保存下来,并将部分信息做成折线图。
在实现时学到不同的方法读取和存储数据,实现按两种不同的xpath方法分别存电影封面图片和电影名称、导演和演员、评分、排名、简介等信息,对网页的分析更加详细。并对爬取的信息进行了处理,获取的数据信息更加简洁,看起来更轻松
```python
for start_num in range(0, 250, 25)
```
进行10次循环,每次读取25个电影的图片,信息,分步实现,可以方便查出程序问题,requests.get向网页发出请求。
```python
response = requests.get(f\\"https://movie.douban.com/top250?start={start_num}\\", headers=headers)
```
后面用网页上分析复制下来的xpath获取对应数据
```python
lis = html.xpath(\'//*[@id=\\"content\\"]/div/div[1]/ol/li\')
```
存放到文件和列表中,按列表前十绘制折线图
代码量大,代码有部分太过于繁琐,对于折线图的绘制函数调用不是很合理,绘制图是在程序运行中实现,导致不关掉折线图就无法继续爬取数据。网络爬虫如果不严格控制网络采集的速度,会对被采集网站服务器造成很重的负担。恶意消耗别人网站的服务器资源,甚至是拖垮别人网站是一件不道德的事情。
本人承诺本次课题中爬取的数据都是公开数据,取得数据的手段合法,项目中爬取取得的所有数据仅供学习使用非商用,且没有对网站造成伤害
首先根据url访问到电影网站页面,通过request请求访问到电影信息,调用读取电影封面函数读取电影封面和链接将网络上的内容下载到本地,保存在c盘的douban文件中,再调用获取电影信息函数读取电影名、导演和演员、评分、排名、简介等信息以及信息并把它们分别保存在豆瓣top250.csv文件中,以及把排行前10的电影评分和评价人数做成折线图。

打开豆瓣网站右键鼠标选择检查,点击网络,在里面获得user-agent,再获取网页规律得出url,通过requests.get()函数赋值给response
```python
headers = {\\"User-Agent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57\\"}
i = 0
for start_num in range(0, 250, 25):
# 发起get请求:get方法会返回请求成功的响应对象
response = requests.get(f\\"https://movie.douban.com/top250?start={start_num}\\", headers=headers) # url
time.sleep(random.uniform(0.5, 1))
img(response.text, start_num)
massage(response, i)
i = 1
```
存储图片函数,先对网页分析,再用etree.HTML()函数将字符串网页转换成_Element对象,再用列表存储电影信息,然后分别用title存放电影标题,img_url存放电影封面地址,再用urllib.request.urlretrieve方法将网上内容下载本地文件夹
```python
element = html.etree.HTML(response)# 用response.text获取字符串格式的网页,用etree.HTML()可以将字符串格式的网页转换成_Element对象
lis = element.xpath(\'//ol[@class=\\"grid_view\\"]\')[0]
i = 1
for li in lis:
title = li.xpath(\'.//span[@class=\\"title\\"]/text()\')[0] # 获取影片标题
img_url = li.xpath(\'.//img/@src\')[0] # 获取封面地址#封面地址在img这个标签下的src属性中
file_name = \'C:/douban/\' + str(start_num + i) + \'.\' + title + \'.jpg\' # 点号能防止和名字粘在一起
urllib.request.urlretrieve(img_url, filename=file_name) # 将网络上的文件下载到本地。该函数有两个必须的参数:第一个是文件的 URL 地址,第二个是本地文件的路径
i += 1
```
绘制折线图函数,将列表中前10个电影名称,评分,评价人数按xy轴画折线图
```python
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\'] # 指定默认字体,SimHei为黑体
movies = movies[:10] # 取排名前十
eval_num = eval_num[:10]
rating = rating[:10]
movies = movies[::-1]#切片
eval_num = eval_num[::-1]
rating = rating[::-1]
fig, ax1 = plt.subplots() #返回一个包含一个 Axes 对象的 tuple,Axes 对象被赋值给了变量 ax1
fig.set_size_inches(10, 7) # 设置画布的尺寸
ax2 = ax1.twinx()
ax1.plot(movies, eval_num, color=\'blue\', label=\'评价数\', marker=\'o\')
ax1.set_xlabel(\'电影名称\', fontsize=16) # 设置x轴标签的文本内容#字体高度
ax1.set_ylabel(\'评价数\', color=\'blue\', fontsize=16) # 设置y轴标签的文本内容
ax1.tick_params(axis=\'y\', labelcolor=\'blue\') # axis=\'y\' 表示设置y轴的刻度线和刻度标签
ax1.legend(loc=\'upper left\') # 将标签的位置设置在画布顶部中央
ax2.plot(movies, rating, color=\'red\', label=\'评分\', marker=\'^\')
ax2.set_ylabel(\'评分\', color=\'red\', fontsize=16) # 设置y轴标签的文本内容
ax2.tick_params(axis=\'y\', labelcolor=\'red\')
ax2.spines[\'right\'].set_position((\'axes\', 1))
ax2.legend(loc=\'upper center\')
plt.title(\'电影评价数及评分折线图\', fontsize=18) # 设置标题
plt.show()
```
调用存储电影信息文件,在网页选择整个电影,获取html.xpath,再用相同的方法,获取电影名、导演和演员、评分、排名、简介等信息的xpath,在程序中处理得到我们想要的数据并打印,然后存入豆瓣top250.csv文件,下方调用函数绘制折线图。
```python
html = etree.HTML(res.text)
lis = html.xpath(\'//*[@id=\\"content\\"]/div/div[1]/ol/li\') # 整个电影的信息
movies = [] # 电影名称列表
eval_num = [] # 评价数列表
rating = [] # 评分列表
for li in lis:
title = li.xpath(\' ./ div / div[2] / div[1] / a / span[1]/text()\')[0]
link = li.xpath(\'./div/div[2]/div[1]/a/@href\')[0] # href超链接
director = li.xpath(\'./div/div[2]/div[2]/p[1]/text()\')[0].strip()
score = li.xpath(\'./div/div[2]/div[2]/div/span[2]/text()\')[0]
peonum = li.xpath(\'./div/div[2]/div[2]/div/span[4]/text()\')[0]
intd = getintd(li) # 有些电影没有简介返回空列表报错:list index out of range
print(title, link)
print(director)
print(\'评分:\', score)
print(\'评价人数:\', \'\'.join(filter(str.isdigit, peonum))) # 只保留数字
print(\'简介:\', intd)
movies.append(title)
eval_num.append(\'\'.join(filter(str.isdigit, peonum)))
rating.append(score)
with open(\\"./豆瓣top250.csv.\\", \'a\', newline=\\"\\", encoding=\'utf-8-sig\') as fp:
writer = csv.writer(fp)
writer.writerow((title, link, director, score, peonum, intd))
if i == 0:
movie_visual(movies, eval_num, rating)
```



在这次数据获取与预处理实训中,我学到了对request库的运用,以及Python中调用各种库的便利,同时也加强了我通过使用lxml中etree对爬取到的数据进行Xpath解析的运用。也学会了分析爬取页面的方法以及数据提取的方法。对于爬虫这项技术我表现出很大的热情,我觉得这项技术非常实在有用,当然我们也不能违背法律,要合理运营爬虫。
**注:本人承诺本次课题中爬取的数据都是公开数据,取得数据的手段合法,项目中爬取取得的所有数据仅供学习使用非商用,且没有对网站造成伤害 。**
","description":"如何爬取豆瓣网电影短评的星级评分的分值和影评用户信息? 席万里的回答\\n\\n1.数据获取可行性及需求分析\\n1.1 课题背景\\n\\n《数据获取与预处理》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践,也要加强同其他学科的关联。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据特定的案列,学会分析爬取页面的方法,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,能够运用数据获取与预处理的原理和方法解决简单的实际问题,逐步培养学生良好的程序设计能力。\\n\\n1.2 目的和意义\\n\\n(1)目的…","guid":"https://www.zhihu.com/question/50872169/answer/68958193328","author":"席万里","authorUrl":null,"authorAvatar":null,"publishedAt":"2025-01-01T04:14:36.453Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"WGCNA 分析-R语言","url":"https://zhuanlan.zhihu.com/p/15459599603","content":"分析代码 ##WGCNA 分析 # 标准化数据(z-score 标准化) dataNorm = t(scale(t(bind_combat)))#scale() 函数按列处理数据,基因维度(行)上进行标准化 #bind_combat这个来自tcga与gtex合并后去批次的表达数据 #提取25% of the maximum variationin基因 dataNorm1 <- as.data.frame(t(dataNorm))# 转置数据,使得每行代表一个基因,每列代表一个样本 m.vars <- apply(dataNorm1,2,var)# 计算每列(即每个基因)的方差,得到基因…","description":"分析代码 ##WGCNA 分析 # 标准化数据(z-score 标准化) dataNorm = t(scale(t(bind_combat)))#scale() 函数按列处理数据,基因维度(行)上进行标准化 #bind_combat这个来自tcga与gtex合并后去批次的表达数据 #提取25% of the maximum variationin基因 dataNorm1 <- as.data.frame(t(dataNorm))# 转置数据,使得每行代表一个基因,每列代表一个样本 m.vars <- apply(dataNorm1,2,var…","guid":"https://zhuanlan.zhihu.com/p/15459599603","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-31T14:20:44.952Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言:求解方程","url":"https://zhuanlan.zhihu.com/p/15761131812","content":"rootSolvelibrary(rootSolve) est=function(x,a) x^2-2*x+a x=uniroot.all(est,c(0,10),a=1) [图片]","description":"rootSolvelibrary(rootSolve) est=function(x,a) x^2-2*x+a x=uniroot.all(est,c(0,10),a=1) [图片]","guid":"https://zhuanlan.zhihu.com/p/15761131812","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-31T14:10:39.729Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"解锁unlist在网页爬取中的另类用法","url":"https://zhuanlan.zhihu.com/p/15666579680","content":"[图片] 在大数据时代,网络爬虫技术是获取海量数据的关键工具。然而,随着网站反爬措施的加强,爬虫开发者需要探索新的方法和工具,以确保高效、安全的数据抓取。今日头条作为国内知名的新闻聚合平台,以其多样化的内容和即时的新闻更新,成为数据分析和挖掘的重要来源。头条新闻覆盖了热点时事、社会动态、科技发展等多个领域,为用户提供了全面的信息服务。在这篇文章中,我们将聚焦于一种另类的技术手段——unlist的使用,并结合代…","description":"[图片] 在大数据时代,网络爬虫技术是获取海量数据的关键工具。然而,随着网站反爬措施的加强,爬虫开发者需要探索新的方法和工具,以确保高效、安全的数据抓取。今日头条作为国内知名的新闻聚合平台,以其多样化的内容和即时的新闻更新,成为数据分析和挖掘的重要来源。头条新闻覆盖了热点时事、社会动态、科技发展等多个领域,为用户提供了全面的信息服务。在这篇文章中,我们将聚焦于一种另类的技术手段——unlist的使用,并结合代…","guid":"https://zhuanlan.zhihu.com/p/15666579680","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-31T06:00:14.276Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-沈梦的回答:爱是精神的奢侈品,也就意味着你的精神世界的产出已经满足了自身的需要,并且有充足的盈余,于是你把盈余拿出来...","url":"https://www.zhihu.com/question/580956751/answer/68164027312","content":"能否分享一些让你豁然开朗的句子?爱是精神的奢侈品,也就意味着你的精神世界的产出已经满足了自身的需要,并且有充足的盈余,于是你把盈余拿出来无私奉献给别人。所以说,这就是爱。如果你的精神不富足,你是生产不了爱的,或者自己都不够用,又拿什么爱别人呢?精神贫困的人大概率是没有爱的。导致精神贫困最主要的因素是什么?物质贫困。
","description":"能否分享一些让你豁然开朗的句子? 沈梦的回答\\n\\n\\n爱是精神的奢侈品,也就意味着你的精神世界的产出已经满足了自身的需要,并且有充足的盈余,于是你把盈余拿出来无私奉献给别人。所以说,这就是爱。如果你的精神不富足,你是生产不了爱的,或者自己都不够用,又拿什么爱别人呢?精神贫困的人大概率是没有爱的。导致精神贫困最主要的因素是什么?物质贫困。","guid":"https://www.zhihu.com/question/580956751/answer/68164027312","author":"沈梦","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-31T02:47:46.233Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R实操:配对t检验","url":"https://zhuanlan.zhihu.com/p/15573011273","content":"案例为比较两种方法对乳酸饮料中脂肪含量测定结果是否不同,某人随机抽取了12份软算饮料制品,分别用脂肪酸水解法和哥特里-罗紫法测定,问两种方法测定结果是否不同? 方法12345678910哥特里-罗紫法0.8400.5910.6740.6320.6870.9780.7500.7301.2000.870脂肪酸水解法0.5800.5090.5000.3160.3370.5170.4540.5120.9970.506rm(list = ls()) dat <- data.frame( method1=c(0.840,0.591,0.674,0.632,0.687,0.978,0.750,0.730,1.200,0.8…","description":"案例为比较两种方法对乳酸饮料中脂肪含量测定结果是否不同,某人随机抽取了12份软算饮料制品,分别用脂肪酸水解法和哥特里-罗紫法测定,问两种方法测定结果是否不同? 方法12345678910哥特里-罗紫法0.8400.5910.6740.6320.6870.9780.7500.7301.2000.870脂肪酸水解法0.5800.5090.5000.3160.3370.5170.4540.5120.9970.506rm(list = ls()) dat <- data.frame( method1=c(0.840,0.591,0.674,0.632,0.687…","guid":"https://zhuanlan.zhihu.com/p/15573011273","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T15:28:53.428Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"小白教程:基于R代码进行交叉滞后面板模型","url":"https://zhuanlan.zhihu.com/p/12069103600","content":"1. 概念简介 交叉滞后面板模型用于分析纵向数据的因果联系,是结构方程模型的一种。 2. 软件安装 Rstudio: https://posit.co/download/rstudio-desktop/ R: https://cran.r-project.org/bin/windows/base/ 3. 代码运行 3.1 加载工具包 library(lavaan) library(rmarkdown) library(knitr) # 设置工作目录 setwd(\\"D:/data\\")3.2 导入数据并建构误差关系 这里有reliance和hum两个量表,reliance有14道题目,hum有7道题目。自己的量表只需要对应修改题目数量和题目标题即可。 model.…","description":"1. 概念简介 交叉滞后面板模型用于分析纵向数据的因果联系,是结构方程模型的一种。 2. 软件安装 Rstudio: https://posit.co/download/rstudio-desktop/ R: https://cran.r-project.org/bin/windows/base/ 3. 代码运行 3.1 加载工具包 library(lavaan) library(rmarkdown) library(knitr) # 设置工作目录 setwd(\\"D:/data\\")3.2 导入数据并建构误差关系 这里有reliance和hum两个量表…","guid":"https://zhuanlan.zhihu.com/p/12069103600","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T14:35:42.914Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"自动处理excel数据,用什么语言合适?-蒋宇捷的回答:主理人:蒋宇捷,信天创投管理合伙人,专注于全球AI应用的投资与孵化。 前言:在我们这个新的栏目里,我们...","url":"https://www.zhihu.com/question/31077489/answer/67523776142","content":"自动处理excel数据,用什么语言合适?主理人:蒋宇捷,信天创投管理合伙人,专注于全球AI应用的投资与孵化。
前言:在我们这个新的栏目里,我们将介绍100家全球最酷的AI应用,你在此可以实时了解国外最新AI产品的功能和进展,寻找适合的AI工具,同时也可以寻找创业的灵感。
成立时间:2022
所在地:旧金山
员工数:10人以下
融资历史:孵化于Y Combinator S22
创始人:Rahul Sonwalkar,本科毕业于得克萨斯大学达拉斯分校计算机系,曾就职于Uber和Facebook。
简介:用AI分析你的数据,可以与你的文件聊天,在几秒钟内获得专家级的见解。
主要竞对:Claude、Formula Bot、GPTExcel、SheetAI等
Julius AI是一个高级数据分析和可视化平台,为非专业人士构建,允许上传数据文件(Excel、CSV、PDF等)并使用自然语言与数据进行交互,可理解原始数据并将其转换为普通用户可以理解的数据。
优点 | 为非技术人员提供对话界面,易于使用。高级数据处理、分析和可视化功能。能够创建交互式和可视化数据动画。与GPT-4、Claude等AI模型集成,并访问互联网以增强洞察力。允许直接上传电子表格,并提供即时可视化建议。提供基本和高级图表类型,从简单的条形图到复杂的3D可视化。 |
---|---|
不足 | 编辑功能仅限于某些图表类型,从而限制了生成后的修改。需要高质量、结构良好的数据才能获得最佳可视化效果。基本计划上传的文件将在一小时后删除。免费计划每月只能发送15条消息。 |
平台可用性 | Web app、Android、iOS |
Julius AI是一位强大的数据分析师、生成式AI内容引擎和研究助理,无论你有/没有数据,它都能做一些神奇的事。
它允许你与你的文件(PDF、图像、CSV、Google表格等)聊天并从中提取想要的见解。Julius AI用途广泛,你可以做任何事情,从基本的PDF摘要到复杂的统计分析。你可以从数据中创建不同的图表和图形(包括交互式和GIF动画),然后单击一下即可下载它们。
它经过了大量的训练来理解Python和R语言。这意味着它几乎可以满足与Python和R兼容的任何用例。Julius AI还配备了其他编程语言。事实上,我可以使用它来创建一个完整的Web应用(HTML、CSS和JS),只需一个提示词。
Julius AI可以访问最先进的大模型,例如:
它甚至可以访问互联网。
此外,Julius AI具有高级推理功能。如果你打开它,它会深入思考并得出超详细和完整的回应。
Julius AI还具有Model Lab功能,它允许你试验最新的AI模型,将其视为具有Internet访问权限但没有文件嵌入功能的生成式AI工具。包括:
它可以回答你的任何问题。与Perplexity AI一样,它为你接下来可能想问的答案和相关问题提供了来源,这意味着没有/更少的幻觉焦虑。
Julius AI在许多领域都有用例,包括但不限于市场营销、学术、医疗和金融,从大学生和研究人员到知名数据科学家,每个人都可以从Julius AI中受益。
以下是一些示例:
简短的回答是:Julius AI适合任何不想动手却想更好地利用原始数据的人。
使用Julius AI很容易。前往Julius AI的主页,然后单击开始试用按钮创建一个免费帐户。
登录后,你将进入此页面。这是Julius AI的主仪表板。
它干净而简约,左侧边栏可以折叠以获得更简约的外观。所有对话都将在聊天窗口上进行。让我们看看Julius AI能为你做些什么。
Julius AI可以为你的数据做很多事情,这一切都始于上传数据文件。
点击对话框左侧的clip按钮,你将看到文件上传选项,可以从不同的文件上传选项中进行选择。
上传文件后,它将可见。如果是电子表格,则电子表格的内容也将可见。
如果你希望Julius AI仅从特定数据子集中提供答案,你可以拖动并选择电子表格的特定部分。
默认情况下,Julius AI会读取整个电子表格。本文中我将使用一个测试数据集,其中包括:
重要提示:你上传的所有文件都会在一小时后从服务器中自动删除。虽然这样做是出于安全原因,但对于那些需要将文件保存在Julius AI中的人来说可能不太方便。 |
---|
Julius AI甚至允许你同时上传多个文件。
专业提示:如果你没有要使用的示例数据集,可以从Google Datasets或Kaggle Datasets获取有关任何主题的免费数据集。 |
---|
上传文件后,在与数据对话之前,我可以启用/禁用一些选项。
单击默认按钮可以选择使用想要的大模型。
接下来,点击工具按钮可以启用或禁用:
Model chat则同时禁用上述两项功能(不推荐)。
最后,我始终建议你启用Advanced Reasoning,以便AI可以为任务创建适当的计划来完成任务。
在我们分析示例数据集之前,还需要进行一些其他设置。在右上角,你可以选择Python或R语言。
除了语言选择外,还有一个聊天设置选项。我们对提示部分感兴趣。
这是一个简单的文本容器,你可以在其中向Julius AI提供它可以遵循的提示(例如,用某种语言回答、幽默回答等)。它与ChatGPT的自定义指令功能相同。
现在,我可以要求Julius AI对我上传的数据执行特定操作,并带有自然提示。但我尝试在不给它任何命令的情况下按回车,看看会发生什么。
在几秒钟内,它开始理解数据文件。它做的第一件事是通过Python代码加载和理解数据,点击Generated Code可以隐藏Python代码。
你甚至可以编辑代码,它会进行适当的更改。
最后,它自动帮我生成了可视化的图表。
我分析的需求主要是想知道最开始投资苹果1美元,现在会变成多少钱,年化回报率有多少。Julius完美的帮我解答了这个问题,答案是2510美元,年化回报19.47%。
这只是一个非常简单的例子。想象一下,你可以用数据做多少好玩的分析工作。
Julius AI使数据可视化变得轻松。你几乎可以创建任何类型的图表/图表,例如基本图表里的柱状图、折线图、饼图,统计图表里的直方图、气泡图以及各种专业图表。
让我们看看可以做些什么。上传一个新的数据文件后,我要求它查看该文件,并告诉我可以为数据创建的不同类型的可视化效果。Julius为我提供了一些建议,以及图表对应的用途。
然后它为我生成了一张柱状图。
我要求它创建一个条形图来比较不同国家的点击次数,图表最终顺利生成,而且还可以在静态/交互式图表之间切换。
注:就像代码一样,Julius AI也允许你编辑一些图表,而不是全部。对于可以编辑的图表,你将在下载按钮旁边看到一个编辑按钮。 |
---|
让我们再创建一个图表 – 这次是一个饼图,显示前五个国家/地区的网站点击量比例(此处交互式的图表展示有问题,似乎是一个小bug)。
非常简便,这只是一座巨大冰山的一角,你可以创建所需的任何类型的图表。
Julius AI可以实现与图表交互。
要创建交互式可视化效果,需要让Julius AI创建特定的界面图。
例如,我将要求它为前五个国家/地区创建一个交互式3D饼图。得到如下结果:
Julius还给了我一个下载链接。单击它,你可以下载完整的HTML代码并随时显示此交互式数据。
到目前为止,你已经可以想象出为你的案例创建的所有令人惊叹的交互式图形和图表。
似乎这还不够,Julius AI还向前迈进了一步。
如果你想为无聊的静态图表制作动画,该怎么办?
Julius AI允许你将图表制作动画并将其转换为高质量的GIF。
下面是一个示例:
非常强大。Julius内部的数据分析和可视化非常棒。但是,如果你喜欢AI/ML,希望训练你的模型以使其更智能,Julius AI也可以提供帮助。让我们看看如何操作。
Julius AI使机器学习变得轻而易举,即使你不是专家。
首先,Julius允许你使用市面上最流行的ML库(如sci-kit-learn、TensorFlow和PyTorch)构建和训练模型。
在查看模型的表现时,Julius会自动计算所有重要指标,例如准确率、精度、召回率和F1分数。
但是,当你想使用经过训练的模型来预测包含新数据的内容时,真正有魔力的事就会发生。
我真正喜欢的是Julius如何让你快速试验和迭代。你可以调整设置,尝试不同的算法,并立即看到结果。
它不仅功能强大,而且如果你是机器学习工程师,使用起来也是一种乐趣。
这个Julius AI功能对于内容创作者来说非常有用—YouTuber、博主及所有人。
首先,Julius可以查看你给它的任何图片,并挑选出各种有用的信息和模式。
假设你有一堆不同物体的照片—Julius实际上可以识别每张图像中的内容,有点像我们立即知道我们是在看狗还是汽车。
但Julius并没有就此止步。它还可以像专业人士一样处理视频。
Julius几乎可以从任何地方下载视频,然后根据需要将它们切片和切块,这是小菜一碟。
因此,如果你想从一个较长的视频中抓取一些关键剪辑,或者将一堆较短的视频拼接在一起,Julius会很快完成。不需要视频编辑技能!
这些只是可以采取的众多方案中的一部分。
可能性是无穷无尽的(例如,更改任何图像的纵横比、放大图像、下载更高分辨率的YouTube视频等)。
Julius AI在网络抓取方面也不是开玩笑的。
与复杂的软件不同,Julius AI中的网络抓取非常简单,前往聊天页面并要求它抓取你想要的任何网页。
例如,我将要求它抓取某个网站并给我一些有用的见解。
将链接粘贴到任何页面,并让Julius为你抓取/总结该页面。
可以将其扩展到电子商务和求职。你可以在几秒钟内抓取亚马逊产品页面、LinkedIn个人资料等。
简直太棒了。
如果你是学生、教师或介于两者之间的任何人 - Julius AI也能满足你的需求。
首先,Julius是一位数学奇才。它几乎可以解决你抛出的任何复杂数学问题,无论是微积分、统计还是代数。
最厉害的地方是什么?
它以这种简洁易读的格式向你展示了分步解决方案。
Julius也支持许多其他学科。例如努力理解一个棘手的编程概念,试图为你的数据科学项目理解机器学习算法。
它就像一本会走路、会说话的学术百科全书。
甚至可以作为个人研究助理,分析论文并提取关键点,为你节省数小时的阅读时间。
它甚至可以通过总结一堆关于你的主题的论文来帮助你整理一篇流畅的文献综述。
简而言之,Julius AI是一位天才最好的朋友,他随时准备帮助你完成家庭作业,如果你让它重复工作一百次,它也不会生气。
最后,Julius有一个称为Model Lab的功能。
它是一个生成式AI,可以访问所有最新的AI模型和互联网。
这非常强大。虽然它不允许你上传文件和聊天,但它可以充当你的答案引擎。提出任何问题,它都会回复,并附有相关来源的链接。
这意味着它不会虚构一堆不存在的东西。Julius AI不会产生幻觉。
因为它可以访问互联网,所以它总是更新有关任何主题的最新信息。例如,最近举行的国际足联洲际杯决赛,我想知道谁赢了。
你甚至可以使用Model Lab来帮助你编写/改进电子邮件、校对文章等。
Julius AI免费版每月最多可以发送15条消息。
按月订阅的话,最便宜的是基本计划,每月18.6美元可以发送250条消息和访问主要的AI功能。
大部分人会选择标准计划,每月40美元可以发送无限的消息、保留上下文对话、输入更复杂的数据。
还有一个团队计划,每个成员每月46美元,可以获得所有标准计划的功能、对最长数据输入的支持和集中计费。
还可以选择按年付费,平均下来每月会更便宜一些。
如果处理数据是你工作或学习的一部分,但你不是一个全面的数据科学家,那么Julius AI可能会带来巨大帮助。
它专为像你我这样需要分析数据和获得见解,但又不想学习编码和技术的普通人而设计。
自然语言界面非常简单 – 你只需用简单的英语描述你的需求,Julius就会为你完成所有繁重的数据操作和可视化工作。
而且它不仅适用于数据新手。
即使你熟悉Python和统计学,Julius也可以轻松启动快速可视化或训练机器学习模型,而无需重新发明轮子。
Julius AI以一种非常易于访问的方式为大众带来了强大的数据工具。如果这种数据的便利性和民主化对你有吸引力,那么100%值得一试。
","description":"自动处理excel数据,用什么语言合适? 蒋宇捷的回答\\n\\n\\n主理人:蒋宇捷,信天创投管理合伙人,专注于全球AI应用的投资与孵化。\\n\\n前言:在我们这个新的栏目里,我们将介绍100家全球最酷的AI应用,你在此可以实时了解国外最新AI产品的功能和进展,寻找适合的AI工具,同时也可以寻找创业的灵感。\\n\\n官网:https://julius.ai/\\n\\n成立时间:2022\\n\\n所在地:旧金山\\n\\n员工数:10人以下\\n\\n融资历史:孵化于Y Combinator S22\\n\\n创始人:Rahul Sonwalkar,本科毕业于得克萨斯大学达拉斯分校计算机系,曾就职于Uber和Facebook。\\n\\n简介:用AI分析你的数…","guid":"https://www.zhihu.com/question/31077489/answer/67523776142","author":"蒋宇捷","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T06:40:34.482Z","media":[{"url":"https://picx.zhimg.com/v2-274ff8b0cd78b65ad1886db017e4a003.jpg","type":"photo","width":1024,"height":614,"blurhash":"LGRfqT?b~Ux^~WRkIWxt_4xa%KRl"},{"url":"https://pica.zhimg.com/v2-5d7cc5903d93c528e4974c44fb0b6cb0.jpg","type":"photo","width":732,"height":354,"blurhash":"LhN1P^RPoe%N0Ks:WCRkx]tRayV@"},{"url":"https://picx.zhimg.com/v2-798d10cdac821a6f89cbbc37dced7029.jpg","type":"photo","width":2048,"height":1088,"blurhash":"LHR3Zp-;~U?bITWB%MayROoeIqWC"},{"url":"https://pica.zhimg.com/v2-751ffbaaef46e9631873dafacd623051.jpg","type":"photo","width":1158,"height":658,"blurhash":"L8SY{q~q-;~q?bWBt7WBM{t7ofRj"},{"url":"https://pica.zhimg.com/v2-2111a7f60016ce4ccdd21702abae53f4.jpg","type":"photo","width":522,"height":328,"blurhash":"LPQmP7xuoc%L~TWrWYWE9caxj=js"},{"url":"https://picx.zhimg.com/v2-2a3932d25409b4c90782dd7cd8b95865.jpg","type":"photo","width":1242,"height":871,"blurhash":"LASigQ~qRj~q_3ofWBt7t7WBayWB"},{"url":"https://picx.zhimg.com/v2-9ac4c7c13853804983539e096de33587.jpg","type":"photo","width":1253,"height":531,"blurhash":"LNQTTD%gof?b%Nj[WBj[~2oLofjr"},{"url":"https://pic1.zhimg.com/v2-2980542fdb838182c7fc73914d86ca99.jpg","type":"photo","width":1254,"height":723,"blurhash":"LQQc*g?b%Nj[ObWBRjj]~VM{IU%M"},{"url":"https://picx.zhimg.com/v2-4046e620712cbde52a0c0a38854311e2.jpg","type":"photo","width":1246,"height":718,"blurhash":"LCQ,dv?cRk?vF$xujYt7~2obf6jY"},{"url":"https://pica.zhimg.com/v2-3dfd46eeea7f4fc6dda54a324b309feb.jpg","type":"photo","width":993,"height":225,"blurhash":"LKJI34t8xuRj9FM_xuRj~VV?WBxu"},{"url":"https://picx.zhimg.com/v2-b0f54041a715e7af9e0a9f0af02579b0.jpg","type":"photo","width":2076,"height":1382,"blurhash":"L7M%}}-=j]_3~qRiofxuogRjofae"},{"url":"https://pic1.zhimg.com/v2-a30db8c265f512b441c78184359f44bc.jpg","type":"photo","width":952,"height":614,"blurhash":"LDSPX_~q_3-;-=t7ofaz?cWAM_f+"},{"url":"https://pica.zhimg.com/v2-485149ec7a2fe0178d26c79c1543101c.jpg","type":"photo","width":845,"height":861,"blurhash":"LJQ,OA%MWB-;~qaxWBay?boeWBj]"},{"url":"https://picx.zhimg.com/v2-05aad81e120db00522b9062fd7c30508.jpg","type":"photo","width":796,"height":101,"blurhash":"LqL;y=oyoMt7~qbGoMof~qj[j[of"},{"url":"https://picx.zhimg.com/v2-f1af23dd09d4516ac1c666c62bbf06ff.jpg","type":"photo","width":828,"height":652,"blurhash":"LCSPX_?wV?_3XARjjFWX4pROkDRj"},{"url":"https://pic1.zhimg.com/v2-d64fc56cf04eaa745f45cec344f3a67c.jpg","type":"photo","width":839,"height":711,"blurhash":"LARyvq%NRj_3_4ahWBofWBWBj[of"},{"url":"https://picx.zhimg.com/v2-fb08d67dc4f89e335f33a80b9c05b20c.jpg","type":"photo","width":1080,"height":615,"blurhash":"LDS6Sr~q^,_3_3R*V]ofRVbHRiod"},{"url":"https://picx.zhimg.com/v2-3c4e37d9031f670692ae72894b1c9ee1.jpg","type":"photo","width":825,"height":266,"blurhash":"L7QA29%ND%~q~q?at7M|xvM{Rjxu"},{"url":"https://pica.zhimg.com/v2-86c5ce5ac9cde81428329a124a91ec2b.jpg","type":"photo","width":818,"height":486,"blurhash":"LURM#kT0R+x]~Cs.f+j[-6%1xas."},{"url":"https://pic1.zhimg.com/v2-2f570e29ec2ca3ae1c67df2d39d9f447.jpg","type":"photo","width":825,"height":611,"blurhash":"LNR3sGT0s+?H~BaeIpR+IVxFxEay"},{"url":"https://picx.zhimg.com/v2-b01f02acc8d2193b34937abc618d6832.jpg","type":"photo","width":847,"height":811,"blurhash":"LqOzGMS*?^-hMyjItkSw_3xBMxNy"},{"url":"https://picx.zhimg.com/v2-c6825409de6163779d16db2961079130.jpg","type":"photo","width":759,"height":478,"blurhash":"LWQJZd%L_M%O-;jFWBX9_1M~Djf3"},{"url":"https://picx.zhimg.com/v2-f970587c5d8f182d0d9123e9e93f16cc.jpg","type":"photo","width":600,"height":388,"blurhash":"LESs88?bxu-;~qR*RjoMj[j[Rjof"},{"url":"https://picx.zhimg.com/v2-2ab3ce4c9794330c16a8fa39b923d78f.jpg","type":"photo","width":723,"height":378,"blurhash":"LHQ]=[~q?b~W-;tQWBogt7Rkj[Rj"},{"url":"https://picx.zhimg.com/v2-d66ff3b8231b01f19e1c6b54d99b93ae.jpg","type":"photo","width":719,"height":391,"blurhash":"LERysi~q_2~q_3WBM{a#IWWCaxj?"},{"url":"https://picx.zhimg.com/v2-44f7c811ed6b482e59c191c859af1e79.jpg","type":"photo","width":756,"height":473,"blurhash":"LFS6Su-;?b~q%MogofbHWBofRjR%"},{"url":"https://picx.zhimg.com/v2-b114d6c87e21aa49e8115111498f5c61.jpg","type":"photo","width":1600,"height":862,"blurhash":"LAR{#@t74.?c~qIqRjs;R.xZogNG"},{"url":"https://picx.zhimg.com/v2-62a1e2ee8ce90778082f0ecc1b36a080.jpg","type":"photo","width":2081,"height":1384,"blurhash":"LHNT%i_NRPIA%MWrR+j?IoM{t6xu"},{"url":"https://picx.zhimg.com/v2-2ac13ed2a9640bb940771b89b5a09651.jpg","type":"photo","width":649,"height":468,"blurhash":"LHQ,UR-=-:~p~qV[M|R-.8M|RjWA"},{"url":"https://picx.zhimg.com/v2-0cbda06d72dbf79e3b84514750b99a7c.jpg","type":"photo","width":728,"height":603,"blurhash":"LGRpF2xuWC-=~qofWBay-;t7ayt7"},{"url":"https://pic1.zhimg.com/v2-582ccf28e71e8e27ed2aa61604bea1b8.jpg","type":"photo","width":1038,"height":535,"blurhash":"LER3ZsIyNHt7^+oLjcjF~S-nt5xu"},{"url":"https://pic1.zhimg.com/v2-c2f33eb4987a05c1bd8c7229098bc04c.jpg","type":"photo","width":708,"height":556,"blurhash":"LFQ,Xd~o^%Nz?IIoR-of^%IqIV-o"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗?-知乎用户椿的回答:P值没意义不存在中介效应","url":"https://www.zhihu.com/question/4909325593/answer/67513647616","content":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗?P值没意义不存在中介效应
","description":"置信区间上下限不包含0,但由于p值大于0.05,中介效应显著吗? 知乎用户椿的回答\\n\\n\\nP值没意义不存在中介效应","guid":"https://www.zhihu.com/question/4909325593/answer/67513647616","author":"知乎用户椿","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T06:28:53.483Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何利用R语言进行LefSe分析?-实验配方的回答:LefSe(Linear discriminant analysis Effect Size)是一种用于微生物群落数据的统计方法,能够帮助识别在不同组...","url":"https://www.zhihu.com/question/3965769314/answer/67477657066","content":"如何利用R语言进行LefSe分析?LefSe(Linear discriminant analysis Effect Size)是一种用于微生物群落数据的统计方法,能够帮助识别在不同组之间有显著差异的特征。对于16S rRNA测序后的OTU(Operational Taxonomic Unit)表数据,LefSe分析可以帮助你找出在不同组之间差异显著的OTU。
在R中,你可以使用 lefse
或 LEfSe
包进行LefSe分析。以下是使用R进行LefSe分析的步骤。
LefSe分析通常要求输入的OTU表是一个矩阵,其中每一行代表一个样本,每一列代表一个OTU或特征。每个样本都应有一个对应的分类信息。
假设你有一个OTU表 otu_table
和样本的组别信息 group_info
,其中:
otu_table
是一个 n_samples x n_otus
的矩阵,表示每个样本中每个OTU的丰度。group_info
是一个包含每个样本所属组别的向量。在R中,可以使用 biom
和 LEfSe
(由Bioconductor提供)包来执行LEfSe分析。首先,安装这些包。
r\\n复制代码\\n# 安装biom包\\ninstall.packages(\\"biomformat\\")\\n\\n# 安装LEfSe包\\n# Bioconductor安装(若没有安装Bioconductor,请先执行install.packages(\\"BiocManager\\"))\\nBiocManager::install(\\"LEfSe\\")\\n
LefSe的输入格式要求为一个特定的txt文件,其中包含OTU丰度数据和分组信息。
OTU表应该是一个样本-OTU矩阵,列是OTU,行是样本,最后一列是样本的分类信息(如分组信息)。你需要将其保存为一个文件,格式如下:
OTU_ID | Sample1 | Sample2 | Sample3 | ... | Group |
---|---|---|---|---|---|
OTU_1 | 10 | 5 | 15 | ... | A |
OTU_2 | 8 | 6 | 13 | ... | B |
... | ... | ... | ... | ... | ... |
你需要将OTU表保存为一个txt文件,并包含样本组信息。通常可以使用 write.table()
函数将其保存为 tab-delimited
格式。
r\\n复制代码\\n# 假设otu_table是OTU表,group_info是每个样本的组别信息\\notu_data <- cbind(otu_table, Group = group_info)\\n\\n# 将数据保存为文件\\nwrite.table(otu_data, \\"otu_table_lefse.txt\\", sep = \\"\\\\t\\", row.names = TRUE, col.names = TRUE, quote = FALSE)\\n
在LEfSe包中,进行LEfSe分析的主要步骤包括:
r\\n复制代码\\n# 加载LEfSe包\\nlibrary(LEfSe)\\n\\n# 读取数据文件\\notu_data <- read.table(\\"otu_table_lefse.txt\\", header = TRUE, row.names = 1, sep = \\"\\\\t\\")\\n\\n# 执行LEfSe分析\\nlefse_results <- lefse(otu_data, group_col = \\"Group\\") # group_col指定样本分组的列\\n\\n# 查看结果\\nlefse_results\\n
LEfSe分析的结果会包括显著性分析、线性判别分析 (LDA) 的值以及每个OTU的效果大小。你可以通过以下方式可视化和分析结果:
r\\n复制代码\\n# 获取LDA得分结果\\nlda_scores <- lefse_results$lda_scores\\n\\n# 绘制LDA图\\nplot(lda_scores, main = \\"LDA Effect Size\\", xlab = \\"OTUs\\", ylab = \\"LDA Score\\")\\n\\n# 可视化差异丰度OTUs\\nsignificant_otus <- lefse_results$significant_otus\\n\\n# 查看显著的OTUs\\nprint(significant_otus)\\n
LDA score
越高,表示该特征(OTU)对组别分类的贡献越大。p-value
和 LDA score
,来评估哪些OTU在不同组之间有显著的差异。以上步骤将帮助你使用R进行16S测序数据的LefSe分析,识别出在不同组之间有显著差异的OTU。你可以根据LDA结果筛选出有显著差异的特征,并进行进一步的功能分析。
","description":"如何利用R语言进行LefSe分析? 实验配方的回答\\n\\n\\nLefSe(Linear discriminant analysis Effect Size)是一种用于微生物群落数据的统计方法,能够帮助识别在不同组之间有显著差异的特征。对于16S rRNA测序后的OTU(Operational Taxonomic Unit)表数据,LefSe分析可以帮助你找出在不同组之间差异显著的OTU。\\n\\n在R中,你可以使用 lefse 或 LEfSe 包进行LefSe分析。以下是使用R进行LefSe分析的步骤。\\n\\n1. 准备数据\\n\\nLefSe分析通常要求输入的OTU表是一个矩阵…","guid":"https://www.zhihu.com/question/3965769314/answer/67477657066","author":"实验配方","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T05:45:46.544Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于Cibersort的免疫浸润分析-R语言","url":"https://zhuanlan.zhihu.com/p/15341270317","content":"1.LM22.txt获取方法 Robust enumeration of cell subsets from tissue expression profiles | Nature Methods [图片] [图片] 只保留矩阵部分为制表符分割的txt(“LM22.txt”) [图片] 2.Cibersort.R获得 在R中新建R Script,复制以下网址中代码,保存为“Cibersort.R” singha53/amritr source: R/supportFunc_cibersort.R [图片] 3.基因表达矩阵保存为制表符分割的txt write.table(exprSet2, file = \\"expDATA.txt\\", sep = \\"\\\\t\\", row.names = TRUE, col.names …","description":"1.LM22.txt获取方法 Robust enumeration of cell subsets from tissue expression profiles | Nature Methods [图片] [图片] 只保留矩阵部分为制表符分割的txt(“LM22.txt”) [图片] 2.Cibersort.R获得 在R中新建R Script,复制以下网址中代码,保存为“Cibersort.R” singha53/amritr source: R/supportFunc_cibersort.R [图片] 3.基因表达矩阵保存为制表符分割的txt…","guid":"https://zhuanlan.zhihu.com/p/15341270317","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T05:39:53.368Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?-林大郎的回答:单独安装SummarizedExperiment, 看看报错信息。对症下药。","url":"https://www.zhihu.com/question/5929451559/answer/67417632877","content":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?单独安装SummarizedExperiment, 看看报错信息。对症下药。
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? 林大郎的回答\\n\\n\\n单独安装SummarizedExperiment, 看看报错信息。对症下药。","guid":"https://www.zhihu.com/question/5929451559/answer/67417632877","author":"林大郎","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T04:32:29.828Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"4步教你用rvest抓取网页并保存为CSV文件","url":"https://zhuanlan.zhihu.com/p/15424422589","content":"[图片] 背景/引言在数据分析和统计分析中,我们经常需要将网站上的数据进行抓取,以便进行更进一步分析。这里,我们将介绍如何使用 R 语言中的 rvest 包来抓取网页,并将数据保存为 CSV 文件。文章中展示如何设置代理IP,为抓取添加驱动,以及设置User-Agent和Cookie来增强网站访问的稳定性和安全性。界面新闻( https://www.jiemian.com )是一个以提供全面新闻信息为主的日报网站,包括政策、经济、科技、文化等各类分析和讨论。并以其新…","description":"[图片] 背景/引言在数据分析和统计分析中,我们经常需要将网站上的数据进行抓取,以便进行更进一步分析。这里,我们将介绍如何使用 R 语言中的 rvest 包来抓取网页,并将数据保存为 CSV 文件。文章中展示如何设置代理IP,为抓取添加驱动,以及设置User-Agent和Cookie来增强网站访问的稳定性和安全性。界面新闻( https://www.jiemian.com )是一个以提供全面新闻信息为主的日报网站,包括政策、经济、科技、文化等各类分析和讨论。并以其新…","guid":"https://zhuanlan.zhihu.com/p/15424422589","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T03:18:01.585Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?-猪儿虫的回答:if (!require(\\"BiocManager\\", quietly = TRUE)) install.packages(\\"BiocManager\\") BiocMa...","url":"https://www.zhihu.com/question/5929451559/answer/67313611400","content":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?if (!require(\\"BiocManager\\", quietly = TRUE)) install.packages(\\"BiocManager\\")
BiocManager::install(\\"ropls\\")
试一试这一段代码,然后把ropls换成你的
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? 猪儿虫的回答\\n\\n\\nif (!require(\\"BiocManager\\", quietly = TRUE)) install.packages(\\"BiocManager\\")\\n\\nBiocManager::install(\\"ropls\\")\\n\\n试一试这一段代码,然后把ropls换成你的","guid":"https://www.zhihu.com/question/5929451559/answer/67313611400","author":"猪儿虫","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T02:42:12.545Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R实操:单样本均数的t检验","url":"https://zhuanlan.zhihu.com/p/15394017167","content":"单样本t检验即样本均数代表的未知总体均数和已知总体均数的比较,从而检验样本是否来自已知总体。 案例1 某医生测量了36名从事铅作业男性工人的血红蛋白含量,算得其均数为130.83g/L,标准差为25.74g/L。问从事铅作业工人血红蛋白是否不同于正常成年男性平均值140g/L? s_m <- 130.83 std <- 25.74 p_m <- 140 n <- 36 t <- (s_m-p_m)/(std/sqrt(n)) p <- (1-pt(abs(t), df = n-1))*2 p [1] 0.03961784 p=0.0396178<0.05,说明该…","description":"单样本t检验即样本均数代表的未知总体均数和已知总体均数的比较,从而检验样本是否来自已知总体。 案例1 某医生测量了36名从事铅作业男性工人的血红蛋白含量,算得其均数为130.83g/L,标准差为25.74g/L。问从事铅作业工人血红蛋白是否不同于正常成年男性平均值140g/L? s_m <- 130.83 std <- 25.74 p_m <- 140 n <- 36 t <- (s_m-p_m)/(std/sqrt(n)) p <- (1-pt(abs(t), df = n-1))*2 p [1] 0.03961784 p=0.0396178<0.05…","guid":"https://zhuanlan.zhihu.com/p/15394017167","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T01:44:25.917Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何利用数据库筛选出结直肠癌耐奥沙利铂和不耐奥沙利铂的细胞中差异性表达的circRNA?-Tars的回答:用cmg数据库筛","url":"https://www.zhihu.com/question/667079738/answer/67240216631","content":"如何利用数据库筛选出结直肠癌耐奥沙利铂和不耐奥沙利铂的细胞中差异性表达的circRNA?用cmg数据库筛
","description":"如何利用数据库筛选出结直肠癌耐奥沙利铂和不耐奥沙利铂的细胞中差异性表达的circRNA? Tars的回答\\n\\n\\n用cmg数据库筛","guid":"https://www.zhihu.com/question/667079738/answer/67240216631","author":"Tars","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-30T01:25:44.128Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-我是一个小太阳的回答:1. 惟有悲观净化而成的乐观,才是真正的乐观。 ——尼采 2. 我一直崇尚划清界限,厌恶你我不分。而世...","url":"https://www.zhihu.com/question/580956751/answer/66934826340","content":"能否分享一些让你豁然开朗的句子?1.
惟有悲观净化而成的乐观,才是真正的乐观。
——尼采
2.
我一直崇尚划清界限,厌恶你我不分。而世人频频在此犯错,关系处得含糊不清,到头来落得个谁都没讨好,自己不痛快的下场。
——《激情耗尽》
3.
纵使你的选择和努力注定徒劳无益,你也仍然绝对是你,不是你以外的什么。你正在作为你自己而向前迈进,毫无疑问,不必担心。
——村上春树《海边的卡夫卡》
4.
我花了这么多世间,好不容易才培养出自己的个性,如果可能,我想守住。
——伊藤比吕美
5.
当森林暗下来的时候,不要再去走小路。当你被情绪吞噬的时候,你会有极大的冲动想尝试改变生活,但那也是最糟糕的时机。不要再你难过的时候做决定。
——布里安娜.威斯特
6.
和别人混在一起时,我向往孤独。孤独时,我又向往看到我的同类。但解除孤独毕竟只能靠相爱相知的人,其余的人扰乱了孤独,反而使人更感孤独。
——周国平《人与永恒》
7.
有时没有流出来的泪水在心里越积越多,你沉溺其中,就会被淹没。
——妮娜.乔治《小小巴黎书店》
8.
也许你我终将行踪不明,但是你该知道我曾为你动情。
——波德莱尔《恶之花》
9.
道歉不是什么丢脸的事,只是证明你对我很重要。
——刘同
10.
永远热烈,永远尽享欢愉。永远心跳,永远年少青春。
——济慈《希腊古瓮颂》
11.
何谓积极生活?首先是踏访已知环境的热枕;其次是探测未知环境的勇敢;其三是从自己和环境的斡旋中找到乐趣。
——阿兰.德波顿
12.
人们常常以为懂得越多越好,这是错误的,问题不在于懂得多少,而在于要在可以学会的知识中懂得最需要的东西。
——《战争与和平》
13.
生活如果没有目标,就会变得懒散。一旦决定“今天这样做”,生活一下子就会张弛有度。
——中村恒子
14.
别人也许不同意,但我认为:见到一种差异,就以为这里有优劣之分,这是一种市侩心理。
——王小波
15.
车站有两个地方最感人:一个入口,一个出口。一个是不想让你走,一个是等你回来。
——李宫俊
就hadley wickham能得copss总统奖,在统计领域就不是Python能碰瓷的。Python那么牛逼咋不去得个奖?
","description":"明明R语言比python容易学的多,为什么还有那么多人说R语言学起来陡峭? 123456的回答\\n\\n\\n就hadley wickham能得copss总统奖,在统计领域就不是Python能碰瓷的。Python那么牛逼咋不去得个奖?","guid":"https://www.zhihu.com/question/388683190/answer/66558649362","author":"123456","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-29T02:02:02.460Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"单基因GSEA分析-R语言","url":"https://zhuanlan.zhihu.com/p/15243133010","content":"#########特定基因的GSEA分析 library(clusterProfiler) library(org.Hs.eg.db) # 人类基因的注释包 library(enrichplot) library(ggplot2) library(AnnotationDbi) exprSet_BP<-exprSet2[,-((ncol(exprSet2)-3):ncol(exprSet2))] #删除对照四个样本#这里的exprSet2是基因表达矩阵,进行了删除对照样本保留肿瘤样本的处理 dat<-t(exprSet_BP) #数据框格式的转换,变为基因为列名,样本为行名 datc<-cor(dat, method=\\"spearman\\")#…","description":"#########特定基因的GSEA分析 library(clusterProfiler) library(org.Hs.eg.db) # 人类基因的注释包 library(enrichplot) library(ggplot2) library(AnnotationDbi) exprSet_BP<-exprSet2[,-((ncol(exprSet2)-3):ncol(exprSet2))] #删除对照四个样本#这里的exprSet2是基因表达矩阵,进行了删除对照样本保留肿瘤样本的处理 dat<-t(exprSet_BP) #数据框格式的转换…","guid":"https://zhuanlan.zhihu.com/p/15243133010","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T14:51:19.117Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"置换检验","url":"https://zhuanlan.zhihu.com/p/15214921377","content":"1概念 置换检验,也称随机化检验或重随机化检验,是Fisher提出的一种基于大量计算(computationally intensive),利用样本数据的随机排列(置换检验的核心思想,故名Permutation test)进行统计推断的方法。因其对总体分布自由,特别适合用于总体分布未知的小样本数据,以及一些常规方法难以使用的假设检验情况。 2步骤1.提出原假设,如A组(m个元素)和B组(n个元素)没有差异;2.计算统计量,如两组的均值之差 [公式] ;…","description":"1概念 置换检验,也称随机化检验或重随机化检验,是Fisher提出的一种基于大量计算(computationally intensive),利用样本数据的随机排列(置换检验的核心思想,故名Permutation test)进行统计推断的方法。因其对总体分布自由,特别适合用于总体分布未知的小样本数据,以及一些常规方法难以使用的假设检验情况。 2步骤1.提出原假设,如A组(m个元素)和B组(n个元素)没有差异;2.计算统计量,如两组的均值之差 [公式] ;…","guid":"https://zhuanlan.zhihu.com/p/15214921377","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T10:35:34.568Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"r 语言绘图的技巧有哪些?-问号的回答:Facets :当我们使用 ggplot2 里的 facet_grid 和 facet_wrap 时候,有时候会觉得它的排布不够灵活,我们可以使用 ggh4x ...","url":"https://www.zhihu.com/question/583433499/answer/65948616176","content":"r 语言绘图的技巧有哪些?抽象一下
","description":"r 语言绘图的技巧有哪些? 问号的回答\\n\\nFacets:当我们使用 ggplot2 里的 facet_grid 和 facet_wrap 时候,有时候会觉得它的排布不够灵活,我们可以使用 ggh4x 包,这个网站提供了教程,包括:\\n提供嵌套排列行和列\\n改变 panel 标签的颜色和排布(允许不同 panel 对应不同颜色)\\n自定义不同 panel 占的大小、位置和比例\\n改变不同 panel 的 x 轴和 y 轴的颜色\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n抽象一下","guid":"https://www.zhihu.com/question/583433499/answer/65948616176","author":"问号","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T03:51:06.313Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"一些R里绘图技巧网站盘点(用到新的就更新)","url":"https://zhuanlan.zhihu.com/p/15165195817","content":"Facets :当我们使用 ggplot2 里的 facet_grid 和 facet_wrap 时候,有时候会觉得它的排布不够灵活,我们可以使用 ggh4x 包,这个网站提供了教程,包括:提供嵌套排列行和列改变 panel 标签的颜色和排布(允许不同 panel 对应不同颜色)自定义不同 panel 占的大小、位置和比例改变不同 panel 的 x 轴和 y 轴的颜色 抽象一下","description":"Facets :当我们使用 ggplot2 里的 facet_grid 和 facet_wrap 时候,有时候会觉得它的排布不够灵活,我们可以使用 ggh4x 包,这个网站提供了教程,包括:提供嵌套排列行和列改变 panel 标签的颜色和排布(允许不同 panel 对应不同颜色)自定义不同 panel 占的大小、位置和比例改变不同 panel 的 x 轴和 y 轴的颜色 抽象一下","guid":"https://zhuanlan.zhihu.com/p/15165195817","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T03:51:04.967Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-三颗宝石的回答:1.能力到底怎么来? 不是先有能力,才能干成事! 而是先干事,通过不断的做事,不断的总结经验教训,不断的复...","url":"https://www.zhihu.com/question/580956751/answer/65876522428","content":"能否分享一些让你豁然开朗的句子?1.能力到底怎么来?
不是先有能力,才能干成事!
而是先干事,通过不断的做事,不断的总结经验教训,不断的复盘,把自己放在事上磨,磨的够多了,磨到位了,能力自然就有了。
有能力的人,谁不是风霜血雨过来
经历的多了,能力自然就有了;
干成的次数多了,把握自然也有了。
能力不是天生就有的,能力是闯出来的,是练出来的,是磨出来的,是对无数次挫折·教训以及胜利的总结。
2.自己不强大,一切都是浮云
酒,喝不出朋友;烟,抽不走寂寞;诉,换不来同情;怨,变不了命运;炫,带不来幸福。生如蝼蚁,当有鸿鹄之志,命如纸薄,应有不屈之心,狐朋狗友说的再美,都抵不过碎银几两,在这凉薄的世界里,自己不强大,一切都是浮云。人活一生,不要将自己的希望寄托在别人身上。当你弱小的时候,你要提升自己的实力,而不是费尽心机巴结讨好别人。当你的能力驾驭不了你的目标的时候,你就应该沉下心来历练。当你的才华撑不起你的野心时,你要静下心来学习。
3.看完你就不抑郁了
人这辈子,天大的事,只要顺其自然,也不过如此,你之所以痛苦,是因为你太较真了!你之所以迷茫,是因为你太计较得失了,失之东隅,收之桑榆!
人生在世,想得开是天堂,想不开便是地狱,你在意什么,什么就会折磨你,你计较什么,什么就会困扰你!
尽人事,听大命,得之我幸,失之我命,有些事选择放下,不是为了原谅别人,而是为了放过自己!
","description":"能否分享一些让你豁然开朗的句子? 三颗宝石的回答\\n\\n\\n1.能力到底怎么来?\\n\\n不是先有能力,才能干成事!\\n\\n而是先干事,通过不断的做事,不断的总结经验教训,不断的复盘,把自己放在事上磨,磨的够多了,磨到位了,能力自然就有了。\\n\\n有能力的人,谁不是风霜血雨过来\\n\\n经历的多了,能力自然就有了;\\n\\n干成的次数多了,把握自然也有了。\\n\\n能力不是天生就有的,能力是闯出来的,是练出来的,是磨出来的,是对无数次挫折·教训以及胜利的总结。\\n\\n2.自己不强大,一切都是浮云\\n\\n酒,喝不出朋友;烟,抽不走寂寞;诉,换不来同情;怨,变不了命运;炫,带不来幸福。生如蝼蚁,当有鸿鹄之志,命如纸薄,应有不屈之心…","guid":"https://www.zhihu.com/question/580956751/answer/65876522428","author":"三颗宝石","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T02:14:05.931Z","media":[{"url":"https://pica.zhimg.com/v2-928dbdd403298e30f9579189eb25acb0.jpg","type":"photo","width":2448,"height":3264,"blurhash":"LqFsMs-o$yoJt:jYaJoJktRjjsWB"},{"url":"https://picx.zhimg.com/v2-1f9a36297fbe87bebff3c689c7cb8b9e.jpg","type":"photo","width":3264,"height":2448,"blurhash":"LjEf?HRQoIWCt:Rkj?fR9Gt7kCof"},{"url":"https://pica.zhimg.com/v2-3a16f16e268910e97b8a0a65fc818eef.jpg","type":"photo","width":3472,"height":4624,"blurhash":"LkE3xWIVV?ozyZtRM_t7b|t8adbH"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用R语言的公司多吗?-TigerZ 生信宝库的回答:在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一...","url":"https://www.zhihu.com/question/31193425/answer/65828644204","content":"用R语言的公司多吗?在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。
为了便于使用,本系列文章介绍的所有配色都已收录到了 sciRcolor 项目中,获取方式:
R 语言科研配色工具 --- sciRcolor为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:
① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60 种离散色 + 40 种连续色)
② 一个用来预览配色的在线网站
③ 一个用来获取配色的 R 包
library(sciRcolor)\\npal_scircolor(palette = 1, alpha = 1)\\n[1] \\"#5773CCFF\\" \\"#FFB900FF\\"
R的最大问题在于这个语言的底层设计不符合计算机逻辑 小数据量统计玩一玩可以 但凡也涉及到算法优化 这种bug报告都不怎么统一的语言 实在让人头疼
","description":"明明R中可用的方法比Python多得多,为什么Python比R更像是数据科学的宠儿? 王二瓜的回答\\n\\n\\nR的最大问题在于这个语言的底层设计不符合计算机逻辑 小数据量统计玩一玩可以 但凡也涉及到算法优化 这种bug报告都不怎么统一的语言 实在让人头疼","guid":"https://www.zhihu.com/question/637441452/answer/65804824563","author":"王二瓜","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-28T00:06:50.891Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"史上最强 和最弱欧洲金球奖得主分别是谁呀?-wyj74的回答:个人观点是截止到目前为止,史上最强的欧洲金球奖得主应该是梅西,8次金球奖入手,在俱乐部和国家队的...","url":"https://www.zhihu.com/question/7986639794/answer/65799787590","content":"史上最强 和最弱欧洲金球奖得主分别是谁呀?个人观点是截止到目前为止,史上最强的欧洲金球奖得主应该是梅西,8次金球奖入手,在俱乐部和国家队的表现都起到关键性的作用。最弱的是罗德里,在俱乐部和国家队的表现都不足以支撑其获得金球奖。
","description":"史上最强 和最弱欧洲金球奖得主分别是谁呀? wyj74的回答\\n\\n\\n个人观点是截止到目前为止,史上最强的欧洲金球奖得主应该是梅西,8次金球奖入手,在俱乐部和国家队的表现都起到关键性的作用。最弱的是罗德里,在俱乐部和国家队的表现都不足以支撑其获得金球奖。","guid":"https://www.zhihu.com/question/7986639794/answer/65799787590","author":"wyj74","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T23:53:21.966Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-浮生一梦的回答:人什么时候最累? 一会儿干干这,一会儿干干那的时候最累。还有就是闲着的时候最累 人累不死,只是可以闲死 ...","url":"https://www.zhihu.com/question/580956751/answer/65670943067","content":"能否分享一些让你豁然开朗的句子?人什么时候最累?
一会儿干干这,一会儿干干那的时候最累。还有就是闲着的时候最累
人累不死,只是可以闲死
人什么时候最幸福?
每天全身心做一件事儿最幸福。岁月流逝,不知老之将至
勤奋的人:“吾十有五,而志于学。三十而立。四十而不惑。五十而知天命。六十而耳顺。七十而从心所欲,不逾矩。”
这句话啥意思呢?
就是说我很小就知道自己该干啥,每天踏踏实实学习,老老实实睡觉
我到了30岁,五子登科;到了40岁,阅尽世间繁华再也没遇到过迷茫或困惑的事;到了50岁,我觉得啥都是命到了60岁,我听啥都觉得顺;到了70岁,我能管住自己了,有了很强的自律性
一般的牛人,是在30岁前,就能做到古人以前70岁才能达到的境界。一般的兄台,能在80岁,达到古人15岁的做人境界就算祖坟冒黑烟
心态很重要,境界很重要。一开始拼执行力,拼悟性,后期就是拼做人的境界与格局。
古龙为了生活,除了写小说还是写小说,因为他没了任何退路
人没了选择,或许才意味着有了选择,有了方向。
或许这就是生活,或许这就是所谓的人生
唯有学习和赚钱,才是一个人最好的修行,前者使人不惑,后者使人不屈
每个人在这个世间,都应该清晰自己的“人生商业模式”,
很多人把时间和体力直接拿去出售换钱,这是最错误的做法
自己的时间和学习是生产资料,通过投入时间和学习,把自己加工成更有价值的产品,才能换来更高的回报
而不是直接去卖自己的时间和体力,这是最廉价的
把泥巴打造成砖去卖,永远比直接卖泥巴更值钱,把砖打造成房子,永远比砖更值钱
把山楂加工成糖葫芦,就比山楂卖的贵
把白菜加工成上汤白菜,就比白菜更值钱
把自己打造成为更值钱的产品,就需要对的学习,对的方向,跟随对的人
记住,你是不值钱的,你把自己打造成为什么产品,才决定你的财富
你每天在干吗?
学习力,决定你和别人的差距!
","description":"能否分享一些让你豁然开朗的句子? 浮生一梦的回答\\n\\n\\n人什么时候最累?\\n\\n一会儿干干这,一会儿干干那的时候最累。还有就是闲着的时候最累\\n\\n人累不死,只是可以闲死\\n\\n人什么时候最幸福?\\n\\n每天全身心做一件事儿最幸福。岁月流逝,不知老之将至\\n\\n勤奋的人:“吾十有五,而志于学。三十而立。四十而不惑。五十而知天命。六十而耳顺。七十而从心所欲,不逾矩。”\\n\\n这句话啥意思呢?\\n\\n就是说我很小就知道自己该干啥,每天踏踏实实学习,老老实实睡觉\\n\\n我到了30岁,五子登科;到了40岁,阅尽世间繁华再也没遇到过迷茫或困惑的事;到了50岁,我觉得啥都是命到了60岁,我听啥都觉得顺;到了70岁,我能管住自己了…","guid":"https://www.zhihu.com/question/580956751/answer/65670943067","author":"浮生一梦","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T15:01:16.453Z","media":[{"url":"https://picx.zhimg.com/v2-90e2228de480f5fbb5181751f48e9732.jpg","type":"photo","width":1080,"height":2339,"blurhash":"LeJ[eq+qNKtSpfoIRjR.M|f5WZay"},{"url":"https://picx.zhimg.com/v2-f743d6147bfd95e2eaa5bc4a7b5f4c3d.jpg","type":"photo","width":1080,"height":2341,"blurhash":"LNHonG?Z^+%M~Vxts:ofPER.E2WC"},{"url":"https://picx.zhimg.com/v2-ac725bfec953922aed8aa7cb78f92d33.jpg","type":"photo","width":1080,"height":2340,"blurhash":"LQA1YLt:I^M{Xpp0WZoItSRoaes:"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言中哪些包是处理混合属性聚类的?-医学统计数据分析的回答:什么是lasso回归?Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)...","url":"https://www.zhihu.com/question/29708763/answer/65666222388","content":"R语言中哪些包是处理混合属性聚类的?什么是lasso回归?
Lasso回归(Least Absolute Shrinkage and Selection Operator Regression)是一种线性回归模型,通过引入L1正则化(即Lasso惩罚项),对模型中的系数进行压缩,使某些系数缩减至零,从而实现特征选择和模型稀疏性。Lasso回归由Robert Tibshirani提出,主要用于处理变量过多而样本量较少的情况,能够有效防止过拟合并解决多重共线性问题。
Lasso回归的基本原理
Lasso回归通过在目标函数中添加一项L1正则化项,即变量系数的绝对值之和,来压缩模型。这使得一些系数变为零,从而实现特征选择和模型稀疏性。具体来说,Lasso回归的优化目标函数如下:
[ \\\\min_{\\\\beta} \\\\left( \\\\sum_{i=1}^n (y_i - x_i^T \\\\beta)^2 + \\\\alpha \\\\sum_{j=1}^p |\\\\beta_j| \\\\right) ]
其中,( n ) 是样本数量,( p ) 是特征数量,( y_i ) 是实际观测值,( x_i^T \\\\beta ) 是预测值,( \\\\beta ) 是模型参数(系数),( \\\\alpha ) 是L1正则化项的权重。
Lasso回归的应用场景和优缺点
应用场景:
一、特征选择:Lasso回归可以用于选择最重要的特征,通过将不重要的特征系数缩减为零,简化模型并提高模型的泛化能力。
二、多重共线性问题:在存在多重共线性的情况下,Lasso回归可以通过将相关变量的系数变为零来降低其对回归结果的影响。
三、预测建模:在医学研究中,Lasso回归可以选择最相关的指标和变量,建立高效的预测模型。
Lasso回归的优点:
1.特征选择:能够有效进行变量选择,特别是在预测变量数量远大于样本量的情况下。
2.防止过拟合:通过压缩系数,避免模型过于复杂,提高模型的泛化能力。
Lasso回归的缺点:
1.计算复杂度较高:由于L1正则化的非光滑性,优化过程较为复杂,计算成本较高。
2.稳定性问题:由于某些系数可能完全为零,模型的稳定性可能受到影响。
什么是岭回归?
岭回归(Ridge Regression)是一种用于处理多重共线性的有偏估计回归方法,它通过在普通最小二乘法的基础上加入L2正则化项来解决多重共线性问题,从而提高模型的泛化能力和鲁棒性。
基本概念和原理
岭回归通过在最小二乘损失函数中加入L2范数的惩罚项,即模型参数的平方和乘以一个称为岭参数的λ值。这个惩罚项确保了模型参数不会变得过大,从而减少过拟合的风险,提高模型的稳定性和泛化能力。岭回归的损失函数包括两部分:一部分是残差平方和,另一部分是模型参数平方和乘以λ值。
应用场景
岭回归特别适用于那些特征之间高度相关(即多重共线性问题)的数据集。在这种情况下,普通的线性回归模型可能会变得不稳定,并且模型的系数可能会变得非常大。岭回归通过惩罚模型参数,使其保持较小的值,从而使得模型更加稳健。
岭回归的优点:
1.处理多重共线性:岭回归能够有效处理特征之间的强相关性,避免参数估计的不稳定。
2.减少过拟合:通过惩罚大参数,岭回归能够提高模型的泛化能力,减少过拟合的风险。
3.计算简单:岭回归的实现相对简单,不需要复杂的计算过程。
岭回归的缺点:
1.有偏估计:岭回归通过牺牲无偏性来获得更稳定的估计,可能会导致模型预测的偏差。
2.参数选择:选择合适的λ值是一个挑战,不同的λ值会影响模型的性能。
岭回归的实际应用案例
在实际应用中,岭回归常用于生物信息学、金融数据分析等领域,特别是在处理具有高度相关特征的数据时表现出色。例如,在基因表达数据分析中,基因之间的相关性可能导致普通线性回归模型不稳定,此时岭回归可以提供更稳定的参数估计。
今天我们仍以熟悉的示例数据集为例,演示一下R语言glmnet包分别拟合二分类logistic模型的lasso回归和岭回归的简单示例。
我们先整理一下Rstudio的环境并加载数据
rm(list=ls()) #移除所有变量数据
install.packages(\\"\\") #安装包
library() #加载包
#1.数据及包准备
#读取Excel数据
library(readxl) #加载包
data <- read_excel(\\"C:/Users/hyy/Desktop/示例数据.xlsx\\")
data
#2.Lasso回归,加载所需的包
library(glmnet)
library(Matrix)
#设置自变量与因变量
lambdas <- seq(0,5, length.out = 1000)
X <- as.matrix(data[,3:9]) #指标1至7
Y <- as.matrix(data[,2]) #结局
set.seed(12345)
lassofit <- glmnet(X, Y, family = \\"binomial\\",alpha = 1)
plot(lassofit,label = T)
plot(lassofit, xvar = \\"lambda\\", label = TRUE)
plot(lassofit, xvar = \\"dev\\", label = TRUE)
print(lassofit)
#交叉验证
set.seed(12345)
lasso_model <- cv.glmnet(X,Y,alpha = 1,lambda = lambdas,nfolds =3)
plot(lasso_model)
plot(lasso_model$glmnet.fit, \\"lambda\\", label = T)
#查看具体筛选的变量系数值和Lambda值(lambda.min处)
coef<-coef(lasso_model,s=\\"lambda.min\\")
coef
#查出lambda.min处的Lambda值
Lambda<-lasso_model$lambda.min
Lambda
#lambda.min处保留的变量的个数,也就是系数不为0
bl.index<-which(coef!=0)
bl.index
#lambda.min处保留的各变量的系数
bl.coef<-coef[bl.index]
bl.coef
#列出lambda.min处保留的各变量的变量名
rownames(coef)[bl.index]
#岭回归
set.seed(12345)
ridgefit <- glmnet(X, Y, family = \\"binomial\\",alpha = 0)
plot(ridgefit,label = T)
plot(ridgefit, xvar = \\"lambda\\", label = TRUE)
plot(ridgefit, xvar = \\"dev\\", label = TRUE)
print(ridgefit)
#交叉验证
set.seed(12345)
ridge_model <- cv.glmnet(X,Y,alpha = 0,lambda = lambdas,nfolds =3)
plot(ridge_model)
plot(ridge_model$glmnet.fit, \\"lambda\\", label = T)
#查看具体筛选的变量系数值和Lambda值(lambda.min处)
coefridge<-coef(ridge_model,s=\\"lambda.min\\")
coefridge
#查出lambda.min处的Lambda值
Lambdaridge<-ridge_model$lambda.min
Lambdaridge
#lambda.min处保留的变量的个数,也就是系数不为0
ridge.index<-which(coefridge!=0)
ridge.index
#lambda.min处保留的各变量的系数
ridge.coef<-coef[ridge.index]
ridge.coef
#列出lambda.min处保留的各变量的变量名
rownames(coef)[ridge.index]
Lasso回归和岭回归(Ridge Regression)的主要区别在于正则化项的形式和应用场景。
一、正则化项的区别
Lasso回归采用L1正则化,即在损失函数中加入权重的绝对值之和作为惩罚项。其损失函数可以表示为:
[
J(\\\\theta) = \\\\frac{1}{2n} \\\\sum_{i=1}^{n} (y_i - x_i^T \\\\theta)^2 + \\\\alpha |\\\\theta|
]
其中,∥θ∥1是θ的L1范数,即θ中各元素的绝对值之和。L1正则化会导致一些权重严格为0,从而实现特征选择。
岭回归采用L2正则化,即在损失函数中加入权重的平方和作为惩罚项。其损失函数可以表示为:
[
J(\\\\theta) = \\\\frac{1}{2n} \\\\sum_{i=1}^{n} (y_i - x_i^T \\\\theta)^2 + \\\\alpha |\\\\theta|^2
]
其中,∥θ∥2是θ的L2范数,即θ中各元素的平方和。L2正则化会使所有权重趋近于0,但不会严格为0,这有助于处理多重共线性问题。
二、应用场景的区别
Lasso回归通过将一些权重压缩为0来实现特征选择,适合于特征之间有关联的情况,能够有效剔除无关特征,适用于特征选择和变量压缩。
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
声明:本专栏文章主要内容整理自《Discovering Statistics Using R》(Andy Field, Jeremy Miles and Zoë Field, 2012)一书,仅用于个人学习分享,不用于任何商业目的。如需转载,可私信或邮件联系。
社会科学专业的同学或研究人员对统计又爱又恨。因为在大多数情况下,统计分析是做研究必不可少的一部分,我们需要借助统计方法来宣称研究结果是具有“显著”意义的;不幸的是,大多数人并不具备相应的数学或统计学背景,这使得理解复杂的统计方程变得非常困难。
为什么统计是做研究的一个重要部分
科学的进步在于不断地提出并解答问题,这一切源自于人类的好奇心。你可能会问自己一些问题:比如为什么人们会表现出不同的行为方式(心理学),为什么不同文化下群体的行为不同(人类学),企业如何最大化他们的利润(商业),恐龙如何死亡(古生物学),吃西红柿是否能保护你免受癌症的侵害(医学,生物学),是否有可能建造量子计算机(物理,化学),地球是否比以前更热以及在哪些地区(地理,环境研究)...
无论你正在学习或研究什么,你学习它的原因可能是因为你有兴趣提出和回答问题。科学家是好奇的人,你可能也是。但做研究没有讨价还价,因为要回答有趣的问题,必须要有两样东西:数据和对这些数据的解释。
统计学是研究如何处理数据的科学,这就是为什么我们需要它。提到数据,我们最先想到的是数字,作为最普遍的一种数据形式,数字对研究过程至关重要。当然,除了数字之外,还有其他形式的数据可以用来产生和检验理论。当涉及数字时,需要定量方法(Quantitative methods)。你也可以通过分析文本形式的数据(如访谈记录,杂志文章,社交媒体评论等)来产生和检验理论,这需要定性方法(Qualitative methods),不过这不是本书的主题。有人可能会偏爱这两类方法中的一种,但定量研究和定性研究是互补的,而不是竞争的方法。话虽如此,所有定性研究都是垃圾[1]。
回归正题,我们如何回答一个有趣的问题?科学的研究过程如下所示:
从你想要理解的观察开始,这个观察可能是轶事或者基于一些数据。从最初的观察中,你提出了这些观察结果的解释或理论,然后从中做出预测(假设)。为了验证你的假设是否正确,你需要收集一些数据,然后分析这些数据。对数据的分析结果可能会支持你的理论,或者给你修改理论的理由。
因此,数据收集与分析和产生理论的过程是内在联系的,换句话说:
科学研究的起点往往都是提出一个需要解决或回答的问题。作为一名心理学家,我花在看真人秀的时间比预计的要多。每年我都发誓我不会迷上 Big Borther[2](一档源自荷兰的社会实验类真人秀节目),然而每年我都发现自己粘在电视屏幕上等待下一个参赛者的崩溃。
我经常困惑的一个问题是:为什么每年都有这么多性格非常不好的参赛者。许多科学努力都是这样开始的:不是通过观看 Big Brother,而是通过观察世界上的某些事物并想知道它为什么会发生。通过观察(Big Brother 选手整体的性格缺陷很深),我需要收集一些数据(Data)来看看这个观察是否属实(而不仅仅是偏颇的观察)。为此,我需要定义一个或多个要测量的变量。这个例子中有一个变量:参赛者的个性。我可以通过向他们提供许多衡量人格特征的成熟问卷来衡量这个变量。假设我这样做了,并发现 75% 的参赛者确实患有自恋型人格障碍(通俗地讲就是“自大狂”)[3]。那么这些数据支持了我的观察:很多 Big Brother 选手都有极端的性格。
接下来需要的事情是解释这些数据(大多数 Big Brother 选手都患有自恋型人格障碍)。一种可能的解释是:患有自恋型人格障碍的人比没有自恋型人格障碍的人更有可能参加 Big Brother 的试镜,这是一个理论(Theory)。另一种可能性是,Big Brother 的制片人更倾向于选择患有自恋型人格障碍的人作为参赛者,这是另一种理论。我们通过收集数据验证最初的观察结果,同样可以收集更多的数据来检验我们的理论。
我们可以从以上两个理论中做出两个预测。首先,参加试镜的自恋型人格障碍人数将高于人群中的一般水平(约为1%)。来自理论的预测被称为假设(Hypothesis)。我们可以通过让一组临床心理学家在 Big Brother 试镜中采访每个人,并诊断他们是否患有自恋型人格障碍来验证这一假设。第二个理论的预测是,如果 Big Brother 评选小组更倾向于选择自恋型人格障碍患者,那么患有自恋型人格障碍的选手在最终参赛者中的比率将高于参加试镜的人群中的比率,这是另一个假设。想象一下,我们收集了这些数据。
自恋型人格障碍 | 非自恋型人格障碍 | 总计 | |
---|---|---|---|
选中 | 3 | 9 | 12 |
淘汰 | 6805 | 845 | 7650 |
总计 | 6808 | 854 | 7662 |
共有 7662 人参加了试镜。我们的第一个假设是,选手中自恋型人格障碍患者的百分比将高于人群的一般水平。在表格中可以看到,7662 人中有 854 人被诊断出患有这种自恋型人格障碍,大约占 11% (854/7662 × 100),远高于预期的 1%(普通人群中的比例)。因此,假设 1 得到数据的支持。第二个假设是老大哥评选小组倾向于选择自恋型人格障碍的选手。如果我们查看他们选择的 12 名参赛者,其中 9 人患有自恋型人格障碍(占 75%)。假如制片人没有偏见,预计只有 11% 的参赛者患有自恋型人格障碍,实际的比例远高于此,数据再次支持了假设 2。因此,最初的观察(Big Brother 选手患有人格障碍)是通过数据验证的,然后我的理论产生了特定的假设,这些假设也使用数据进行了检验。因此,数据非常重要!
Box 1 科学研究需要什么样的理论和假设
好的理论应该允许我们对客观世界的状况做出合理的陈述,这些陈述使我们能够理解我们所在的世界,并做出影响我们未来的决定。一个例子是全球变暖,科学家们能够明确地声明全球变暖正在发生,并且是由社会中的某些做法(比如工业化,空气污染)引起的,这使我们能够改变这些做法,并希望避免灾难的发生。
但是,并非所有的陈述都可以使用科学进行检验。诸如“周星驰最好的电影是大话西游”,”R 语言才是最好的语言“和“女朋友永远是对的“之类的陈述都是非科学的,它们不能被证明或反驳。而科学陈述可以通过经验证据(数据)得到证实或不予证实。例如“听音乐会增加神经递质多巴胺的水平”和“喝咖啡可以提高你的工作效率”都是可以进行检验(test)的事情(前提是你可以量化和测量相关的变量)。
非科学的陈述有时也可以变为科学的陈述,比如“披头士是有史以来最有影响力的乐队”是非科学的(因为很难以任何有意义的方式来量化“影响力”),但是通过将陈述改为“披头士是有史以来最畅销的乐队”,它就变得可以验证(我们可以收集有关全球唱片销售的数据,并确定披头士乐队是否拥有最高的销量)。著名的科学哲学家卡尔·波普尔(Karl Popper)认为,非科学的陈述是无稽之谈,在科学中没有立足之地。因此,好的理论应该产生科学的陈述(假设)。
假如我们的理论得到了数据的支持,这当然是一件好事。然而,更有可能的是,在解开了一个伟大的谜团之后,我兴奋的头脑会转向另一个谜团。又过了几个小时(嗯,可能是几天)被锁在家里看着 Big Brother,另一个更深刻的观察结果又出现了,那就是这些人格紊乱的参赛者,尽管他们有明显的性格缺陷,但进入房子时相信公众会喜欢他们,他们会赢。 因此,我的假设是,如果我问参赛者他们是否认为自己会赢,那些患有人格障碍的人会说是的。
让我们想象一下,我通过衡量他们对节目成功的期望来测试我的假设,如果只是问他们:\\"你认为你会赢得 Big Brother 吗?\\"假设 9 名患有人格障碍的参赛者中有 7 名表示他们认为自己会赢,这证实了我的观察。接下来,我会想出另一个理论:这些参赛者认为他们会赢,因为他们没有意识到自己患有人格障碍。我的假设是,如果我问这些人他们的个性是否与其他人不同,他们会说“不”。和以前一样,我会收集更多的数据,也许会问那些认为自己会赢的人,他们是否认为自己的个性与常规不同。所有7名参赛者都表示,他们认为自己的个性与常规不同。这些数据似乎与我的理论相矛盾。这被称为证伪,这是反驳假设或理论的行为。
我们不太可能是唯一对为什么参加 Big Brother 的人有极端个性并认为他们会赢的人感兴趣。想象一下这些研究人员发现:(1)自恋型人格障碍患者认为自己比其他人更有趣;(2)他们也认为自己比别人更值得成功;(3)他们也认为别人喜欢他们,因为他们有“特殊”的个性。
对于我的理论来说,这项额外的研究是更糟糕的消息:如果他们没有意识到自己的性格与正常人不同,那幺你就不会期望他们认为自己比其他人更有趣,你当然也不会期望他们认为别人会喜欢他们不寻常的个性。 总的来说,这意味着我的理论很糟糕:它不能解释所有的数据,理论的预测没有得到后续数据的支持,它不能解释其他研究结果。在这一点上,我开始感到智力不足,人们会发现我蜷缩在桌子上,泪流满面,哭泣和抱怨我失败的职业生涯......
此时,一位竞争对手科学家 Fester Ingpant-Stain 出现在现场,并提出了一个竞争对手的理论。在他的新理论中,他认为问题不在于人格紊乱的参赛者没有意识到他们有人格障碍(或者至少是一种不寻常的人格),而是他们错误地认为这种特殊的他人对个性的看法是积极的(换句话说,他们相信自己的个性使他们讨人喜欢,而不是不讨人喜欢)。该模型的一个假设是,如果要求人格障碍的参赛者评估其他人对他们的看法,那幺他们将高估其他人的积极看法。为了验证这一假设,Fester Ingpant-Stain 收集了更多数据。当每位参赛者来到日记室时,他们必须填写一份问卷,评估所有其他参赛者的性格,并像回答每个参赛者一样回答每个问题。 (因此,对于每位参赛者,他们都会衡量他们对其他参赛者的看法,以及他们认为其他参赛者对他们的看法。)他发现患有人格障碍的参赛者确实高估了室友对他们的看法;相比之下,没有人格障碍的参赛者对其他人的看法有相对准确的印象。这些数据,虽然对我来说很烦人,但支持了竞争对手的理论,即患有人格障碍的参赛者知道他们有不寻常的性格,但相信这些特征是其他人会感到积极的特征。
Fester Ingpant-Stain 的理论非常好:它解释了最初的观察结果,并汇集了一系列研究结果。在这种情况下,我们可以说:“患有人格障碍的选手参赛者高估了其他人有多喜欢他们的人格特征”。
数据收集对检验理论(假设)至关重要。当我们开始收集数据之前,需要决定两件事:我们要测量什么(what to measure),以及如何测量(how to measure it)。
3.1.1 变量
1) 自变量和因变量
为了检验假设,我们需要测量变量(variables)。简单来说,变量就是可以改变或变化的东西,它们可能因人而异(例如智商,行为表现等),也可能随时间变化(例如情绪,利润,癌细胞数量等)。大多数研究假设可以用两个变量来表示:提出的原因和产生的结果。例如,科学研究声明“可口可乐是一种有效的杀精剂”,那么提出的原因就是可口可乐,而产生的结果是死去的精子。原因和结果都是变量:对于原因,我们可以改变可口可乐的的类型(有糖or无糖)或剂量,结果则可以是杀死的精子数量。检验此类假设的关键是测量这两个变量。
我们认为是原因的变量称为自变量(indenpendent variables),因为它的值不依赖于任何其他变量;我们认为是结果的变量称为因变量(dependent variables),因为该变量的值取决于原因(自变量)。这与实验方法(experiment methods)密切相关,因为自变量通常是由实验者操纵的。
2) 测量的水平
正如我们在到目前为止的示例中看到的那样,变量可以呈现出许多不同的形式和复杂程度。正在测量的内容与表示正在测量的数字之间的关系称为测量级别。从广义上讲,变量可以是分类变量,也可以是连续变量,并且可以具有不同的度量级别。
Box 2 自我报告数据(self-report data)
自我报告数据是社会科学领域最常见的数据类型,许多自我报告数据都是有序的。想象一下,如果两个评委在 X Factor 上被要求对 Billie 的歌声进行评分(10 分制)。我们可能相信法官给 10 分的评分发现 Billie 比一个给 2 分的人更有才华,但我们能确定第一位评委发现她的才华是第二位的五倍吗?如果两位评委都给 8 分,我们能确定他们发现她同样有才华吗? 可能不是:他们的评分将取决于他们对什幺构成天赋的主观感受(唱歌的质量?表演技巧?跳舞?)。由于这些原因,在我们要求人们对某些主观事物进行评级的任何情况下(例如,评估他们对产品的偏好,他们对答案的信心,他们对某些医学指令的理解程度),我们可能应该将这些数据视为序数,尽管许多科学家不这样做。
通常,类别变量和有序变量属于离散变量(discrete variables),等距变量和比率变量属于连续变量(continus variables)。但事实上离散变量和连续变量之间的界限可能非常模糊。首先,连续变量可能以类散的方式被测量。例如,当我们测量年龄时,很少使用秒,而是使用年(或着年和月)。此外,离散变量也可能被视为连续变量。例如,你拥有的男/女朋友的数量是一个离散变量(除了非常奇怪的情况之外,它将是一个整数)。然而,你可能会读到一本杂志,上面写着“20 多岁女性的平均男朋友数量从 4.6 增加到 8.9”。这假设变量是连续的,当然这些平均值是没有意义的(没有人实际上拥有 8.9 个男朋友)。
3.1.2 测量误差
理想情况下,我们希望我们的测量标准经过校准,使测量结果在不同时间和不同情况下保持一致。测量的准确性是得出有效结论的重要保障。重量就是一个例子:无论谁给我们称重,或者我们在哪里进行测量(假设它在地球上而不是在反重力室中),我们都希望得到相同的重量。
有时变量可以直接测量(如利润,体重,身高),但在其他情况下(尤其是心理学),变量不可能直接测量(如人格特质,焦虑程度,对某一时间的态度),我们只能依赖于一些间接测量的方法,如自我报告,问卷调查和计算机化任务。
例子:可乐是杀精剂。
假如我们拿一些可乐和水,把它们加入两个精子试管中。几分钟后,我们测量了两个样本中精子的运动,发现没有区别。几年后,另一位科学家 Late 博士重复了这项研究,但他发现,可口可乐样本中的精子活力更差。造成这种结果差异可能的原因有两个:
a. Late 博士可能在试管中使用了更多的可乐(精子在受到影响之前可能需要足够量的可乐);
b. Late 博士对结果(精子运动)的测量与我们不同。
第一点解释了为什么化学家和物理学家花了很多时间来开发标准的测量单位,第二个原因是测量结果的差异可能与精子运动的测量方式有关,也许 Late 博士的测量更加敏感,即更加精确。与测量精确性直接相关的一个重要概念就是测量误差(measurement error)。
测量误差:用来表示我们正在测量的事物的数值与其实际值(如果我们能够直接测量它,我们将得到的值)之间的差异。
例如:想象一下,你知道你的体重 60 公斤是一个绝对的事实。有一天,你踩在浴室的秤上,上面写着 63 公斤。你的实际重量与测量工具(浴室的秤)给出的重量相差 3 公斤:测量误差为 3 公斤,虽然经过正确校准的秤应该只产生非常小的测量误差。但像自我报告这样的间接测量确实有可能会产生很大的测量误差,因为除了你试图测量的因素之外,其他因素也会影响人们对测量的反应。想象一下,你正在完成一份问卷,询问你是否从商店偷了东西。如果你这样做了,你会承认吗,还是会忍不住隐瞒这个事实呢?
3.1.3 信度和效度
确保测量误差最小化的一种方法是确定测量的属性——信度和效度。
效度(validity):一种测量工具是否真的测量了它要测量的东西(有效性)。
信度(reliability):一种测量工具能否在不同的情况下得到一致的测量结果(可靠性)。
例如:像反应时间和生理测量这样的东西是有效的,因为反应时间确实测量了个体做出反应所花的时间,皮肤电导率确实测量了皮肤的电导率。然而,如果我们用这些东西来推断其他东西(例如,用皮肤电导率来测量焦虑),那么只有在我们感兴趣的因素之外没有其他因素可以影响它们的情况下,这些东西才是有效的。
我们已经了解到,想要回答一个研究问题,必须获得数据,而为了获得好的数据则需要使用准确的测量。现在,我们继续简要介绍一下如何收集数据。
3.2.1 两类研究
简单来说,我们可以通过两种方法收集数据检验一个假设:
a. 通过观察自然发生的事情 —— 相关研究
b. 通过操纵环境的某些方面,观察它对我们感兴趣的变量的影响 —— 实验研究
两者的主要区别在于是否操纵或干扰了变量。
相关研究(correlational research):相关研究为我们正在研究的问题提供了一个非常自然的视角,因为我们不会影响所发生的事情。例如,我们可以测量河流中的污染水平和生活在那里的某些鱼类的数量;生活方式和疾病之间的关系;不同风格管理者领导下员工的工作满意度;或者不同地区的儿童在学校的表现等等。
实验研究(experimental research):如前所述,我们对变量的命名实际上包含了因果关系(独立/依赖变量,预测/结果变量),有时这种关系非常明显,如研究问题“自卑会导致约会焦虑吗?”,有时则更加微妙,如研究问题“约会焦虑一直存在吗”,这个问题的含义是:一个人的精神面貌会使他在约会时感到焦虑。即使因果关系没有明确说明,大多数研究问题也可以被分解成一个提出的原因(在这个例子中是约会者的精神面貌)和一个产生的结果(约会焦虑)。回答这个研究问题的关键是揭示提出的原因和结果是如何相互关联的——是不是那些对自己评价很低的人和对约会感到焦虑的人是同一类人?
因果推断
哲学家大卫·休谟(David Hume)给出了进行因果推断的三个条件:
a. 因、果必须在时间上(连续)紧密地发生;
b. 必须先有原因,后有结果;
c. 如果原因不存在,就永远不会产生这种结果。
这些条件意味着因果关系可以通过佐证来推断:原因等同于相邻事件之间的高度相关性。
在上面的例子中,想要得出“低自尊造成约会焦虑”的推断,只要发现:当一个人的自尊心较低时,他在约会时就会感到焦虑(对应a),低自尊先于约会焦虑出现(对应b),如果这个人没有经历过自卑,他就不应该有约会焦虑(对应c)。
在相关研究中,变量通常是同时被测量的,因此无法提供关于变量之间连续性的信息。例如,我们可能会从一个问卷调查中发现,低自尊的人也有约会焦虑,但我们不知道是低自尊还是约会焦虑先出现。
如果我们发现一些低自尊的人没有约会焦虑(这一发现并没有违反休谟的规则:他没有提到任何不产生结果的原因),这可能是低自尊和约会焦虑都是由第三个变量引起的(例如,糟糕的社交技能可能会让你觉得自己毫无价值,但也会在约会时给你带来压力)。这展示了相关研究的第二个问题:第三方变量。例如,研究发现隆胸与自杀之间存在相关性。然而,隆胸不太可能导致自杀——可能有一个或多个外部因素同时导致自杀。例如,低自尊可能会导致你隆胸,并试图自杀。这些外来因素有时被称为混淆变量。
休谟标准的缺陷导致 John Stuart Mill 提出了一个更进一步的标准:排除所有其他关于因果关系的解释。简单来说,Mill 认为,为了排除混杂变量,当原因存在时,结果应该存在,当原因不存在时,结果也应该不存在。
统计学中的一个经典问题是“为什么说相关不等于因果”,相信大家读到这里已然明白。
Mill 的思想可以总结为:推断因果关系的唯一方法是通过两种受控情况的比较,一种是原因存在,另一种是原因不存在。这就是实验方法努力要做的:提供原因存在(实验组)或不存在(对照组)的情况之间的比较。
例子:激励因素对学习统计学有什么影响
我可能会随机地把一些学生分成三个不同的组,在这三个组中,我会在课程的讨论课上改变教学风格:
Group 1 (正强化):在讨论课上,我祝贺所有这组学生的努力和成功。即使他们做错了事情,我也会很高兴,我会说‘这几乎就是正确答案了,你做得很好’之类的话,然后给他们一块美味的巧克力。
Group 2 (惩罚):在这个小组的讨论课上,我对所有的学生进行无情的语言攻击,即使他们给出的答案是正确的。我贬低他们的贡献,对他们说的每句话都以恩人的身份不屑一顾。我告诉学生,他们很愚蠢,毫无价值,根本不应该学这门课。
Group 3(无任何措施):这个小组接受师范大学风格的研讨会,学生没有得到表扬或惩罚,不给他们任何反馈。
在这个例子中,结果变量是学生的统计水平,可以用课后的统计学考试来衡量这个变量。这里的关键是包含了无动机组(group 3),因为这是一个没有原因(激励因素)的组,我们可以将这个组的结果与有原因存在的两种情况(group 1 和 group 2)进行比较。如果每个激励组(有原因)的统计分数与没有提供激励因素的组(没有原因)的统计分数不同,那么这种差异可以归因于使用的激励因素的类型。换句话说,使用的激励方法导致了统计学考试分数的差异。
Box 3 因果关系和统计检验
人们有时会感到困惑,认为某些统计检验允许因果推论,而其他方法则不允许。事实并非如此,真相是,在实验研究中我们系统地操纵自变量来观察其对结果的影响;在相关研究中,我们观察到变量的共现,而不会先操纵自变量,然后测量其效果。因此我们无法将自变量存在时的效应与不存在时的效应进行比较。简而言之,我们不能说哪个变量导致另一个变量的变化,只能说变量以某种方式共同发生。有些人认为某些统计检验允许因果推论的原因或许是,历史上某些检验(如方差分析,t检验)已被用于分析实验研究,而另一些检验(如回归,相关)被用于分析相关研究。但你将会将发现,这些统计过程在数学上是相同的(方差分析和 t 检验也属于回归分析)。
3.2.2 数据收集的两种方法
在实验研究中,收集数据有两种方法:
a. 组间设计(被试间设计、独立设计):使用不同的参与者来操纵自变量,即每个被试只接收一种实验处理;
b. 被试内设计(重复测量设计):使用相同的参与者来操纵自变量,即每个被试同时接受全部的实验处理;
收集数据的方式决定了用于分析数据的统计检验方法。
1)两类变异
想象一下,我们试着看看能否训练黑猩猩来管理经济。
条件1:在第一个训练阶段,黑猩猩会坐在一台“黑猩猩友好型”电脑前,按下按钮,以改变各种经济参数。一旦这些参数被改变,屏幕上就会出现一个数字,表明这些参数带来的经济增长。假设黑猩猩不能阅读数字(实际上我不这么认为),所以这个反馈没有意义。
条件2:第二个训练阶段是相同的,只是如果经济增长良好,黑猩猩就会得到一根香蕉(如果增长不好,他们就得不到)——这种反馈对黑猩猩来说是有价值的。
这是一个有两个条件的重复测量设计:相同的黑猩猩参与条件1和条件2。
让我们退一步来想想,如果我们不引入一个实验性的操作(即在第二个训练阶段没有香蕉,所以条件 1 和条件 2 是完全相同的)。我们期望黑猩猩的行为在两种情况下都是相似的。我们预计其它外部因素如年龄、性别、智商、动机和唤醒状态等在两个条件中也一样,且表现测量是可靠的(即他们如何运行经济的测试),那这两种条件下黑猩猩的表现应该是高度相关的,在条件 1 中得分高的黑猩猩在条件 2 中得分也高,而在条件 1 中得分低的黑猩猩在条件 2 中得分也低。然而,黑猩猩的表现不会完全相同,将会有一些由于未知因素而导致的微小差异,这种表现上的变化称为非系统变异(unsystematic variation)。
如果我们引入了实验操作(给香蕉),此时条件 1 和条件 2 之间的唯一区别是黑猩猩是否得到了香蕉作为正面奖励。因此,这两种情况下黑猩猩表现的平均值之间的任何差异都可能是由于实验操作造成的。如果黑猩猩在一个训练阶段比另一个表现得更好,那么这一定是由于香蕉这一正向反馈。这种由特定的实验操作产生的性能差异称为系统变异(systematic variation)。
现在考虑一下当我们使用不同的参与者进行独立实验设计(被试间设计)时会发生什么。在这个设计中,我们仍然有两个条件,但这次每种条件下的黑猩猩不同。在我们没有加入实验操作时,即对这两组黑猩猩什么都不做,我们仍然会发现群体之间的行为有一些差异,因为它们包含不同的黑猩猩,它们的能力、动机、智商和其他因素会有所不同。
简而言之,在重复测量设计中保持不变的因素类型在独立测量设计中可以自由变化。因此,非系统的变异将比重复测量的设计更大。
如果我们引入实验操作(给香蕉),然后我们将看到更多的变异由这种操纵造成的。因此,在重复测量设计和独立测量设计中,总是存在两个变量源:
系统变异:由于实验者对变量的操纵而产生;
非系统变异:由于实验条件之外的随机因素(能力的自然差异等)造成;
统计的作用就是发现被试在的表现(各个实验条件下)有多少变化,然后计算这些变化中有多少是系统变异,有多少是非系统变异。
在重复测量设计中,两种实验条件之间的差异只可能由两种因素引起:
1)对被试的操纵(实验操纵);
2)任何其他可能影响被试从一次(条件1)到下一次(条件2)表现的因素;
与实验操作的影响相比,后一个因素可能是相当小的。
在独立设计中,两种条件之间的差异也可以由以下两种原因之一引起:
1)对参与者的操纵(实验操纵);
2)分配给每个组的参与者的特征差异(性别,年龄,能力等)。
在这种情况下,后一个因素很可能在每个条件内和它们之间产生相当大的随机变异。
因此,实验操纵的效果在重复测量设计中可能比在组间设计中更明显,因为在前者中,非系统变异只能由个体在不同时间的行为方式的差异造成。而对于后者,当我们观察我们的实验操纵的效果时,它总是与我们的条件之间随机的、无法控制的差异所造成的“噪音”相互混淆。在重复测量的设计中,这种“噪音”被保持在最小,因此实验的效果更有可能显现出来。这意味着,在其他条件相同的情况下,重复测量设计比独立设计更有能力检测自变量的效果。
2)随机化
无论是重复测量设计还是独立设计,都要尽量使非系统的变异最小化,这样我们就得到了一个对实验操作更敏感的测量。一般来说,科学家使用随机化(Randomization)来实现这一目标。
许多统计检验的工作是通过识别系统的和非系统的变异来源,然后比较它们。这种比较允许我们得知实验操纵是否引起了个体表现的更多变异,随机化的重要性在于它消除了大多数其他来源的系统变异。我们可以以两种不同的方式使用随机化,这取决于我们的设计是独立的还是重复的:
在重复测量设计中,同一批被试参与多个实验条件,他们在第一个实验条件下是无知的,但在第二个实验条件下,他们对所期望的有事先的经验。至少他们会熟悉相关的测量(例如他们正在执行的任务)。此时系统变异的两个最重要的来源是:
a. 练习效应:由于熟悉实验环境和/或使用的测量方法,被试的表现可能有所不同;
b. 疲劳效应:随着实验的进行被试感到疲倦或无聊,进而消极反应
此时采用平衡实验设计——实验条件的随机化,即随机地决定每个被试完成实验条件的顺序。
在独立设计中,由于不同的被试参与不同的实验条件,这些被试者在许多方面(智商、注意力等)会有所不同。虽然我们知道这些混杂变量会产生实验条件间的变异,但我们需要确保这些变量会导致非系统变异,而不是系统变异。因此采用被试分配的随机化,将被试随机地分配到各个实验条件中。
研究过程的最后阶段是分析你收集的数据。对于定量数据,这涉及到:
1)可视化数据以了解其一般趋势;
2)使用统计模型对数据进行拟合。
4.1.1 数据的分布
1)频率分布(直方图)—— 用条形图显示每个值在数据集中出现的次数。
频率分布对于评估分数分布的性质非常有用,频率分布有许多不同的形状和大小。因此,对常见的分布类型进行一般的描述非常重要。
正态分布(大名鼎鼎的“钟形曲线”)
正态分布意味着大多数数据位于整个分布的中心(因此直方图上最长的条形都位于中心值周围),只有极少数数据位于两端(条形很短)。例如,英国大多数男性的身高约为 175 厘米,有些略高,有些略矮,但大多数都在 175 厘米左右。很少有人是非常高(205 cm以上)或特别矮的(低于145cm)。
有时候分布往往会偏离正态,偏离的主要方式有两种:
a. 缺乏对称性(偏度)
b. 上下拉伸(峰度)
偏态分布可以是正偏态(大部分数据集中在较低的一端/左端)或负偏态(大部分数据集中在较高的一端/右端),如下图所示:
分布的峰度也可以发生变化,具有正峰度的分布在尾部有许多分数(所谓的重尾分布),并且是尖的,这被称为尖峰分布(leptokurtic distribution)。相反,负峰度分布的尾部相对较薄(尾部较轻),而且往往比正常情况下更平坦。这被称为平峰分布(platykurtic distribution)。
2)分布的中心(集中趋势)
我们也可以计算频率分布的中心在哪里,常用的测量方法有三种:平均数、众数和中位数。
众数(mode):整个数据集中出现次数最多的数,即频率分布的最高点,众数可以有多个;
中位数(median):将整个数据集从小到大排序,位于中间位置的数。
中位数相对来说不受分布两端极端分数的影响,也相对不受偏态分布的影响,因此可以用于有序、区间(等距)和比值(等比)数据,但不能用于名义数据,因为这些数据没有大小顺序)。
平均数(mean):最常见的集中趋势的测量(到处都是,平均身高,平均收入……)
让我们计算一组 Facebook 数据的平均值:
11个人的 Facebook 好友数:22,40,53,57,93,98,103,108,116,121,253
平均值是 96.64,这不是我们在实际数据中观察到的值(有0.64 个朋友是荒谬的)。从这个意义上讲,均值也是一个统计模型。
平均值的一个缺点是它会受到极端分数的影响,也受到偏态分布的影响,只能用于区间或比值数据。如果均值很糟糕,为什么我们总是用它?一个非常重要的原因是均值使用了每一个数据(众数和中位数忽略了数据集中的大多数数据值),而且,在不同的样本中均值趋于稳定。
3)分布的散度(离散趋势)
范围(range)
考察数据离散趋势最简单的方法是用最大值减去最小值,也就是分数的范围。由于只使用了最大值和最小值,所以它会受到极端分数的影响。
解决这个问题的一种方法是在计算时去掉一些极端值,常见的做法是去掉上端25%和下端25%的数据,然后计算中间50%数据的范围——称为四分位距(interquartile range)。为了计算四分位距,首先需要计算四分位数(Quartiles),四分位数是将排序后的数据分成四个相等部分的三个值,分别是上四分位数(upper quartile,数据上半部分的中位数,也叫做Q3),第二四分位数(second quartile,也就是中位数),下四分位数(lower quartile,数据下部分的中位数,也叫做Q1)。
同样以 Facebook 的数据为例:
22,40,53,57,93,98,103,108,116,121,253
4)数据之外的频率分布
另一种考虑频率分布的方法不是考虑数据实际出现的频率,而是考虑数据出现的可能性(即分数发生的概率)。
比奇角(Beachy Head)是一个位于苏塞克斯海岸多风的大悬崖(离我住的地方不远),这里吸引了很多试图自杀的人,重写这本书几个月后,我发现自己的思绪越来越多地被那平静的白垩悬崖所吸引……下面的频率分布图显示了比奇角(Beachy Head)一年内不同年龄的人自杀的数量(其中一些是虚构的数据):
总共有 172 人自杀,你可以看到,自杀最常见的年龄在 30 到 35 岁之间。该图还告诉我们,很少有 70 岁以上的人在比奇角自杀。
我们可以从概率的角度来考虑频率分布。为了解释这个问题,假设有人问你“活到 70 岁的人在比奇角自杀的可能性有多大?”如果你看一下自杀数据的频率分布,你可能会回答“不太可能”,因为你可以看到,在 172 例自杀中,只有 3 人的年龄在 70 岁左右。如果有人问你“一个 30 岁的人自杀的可能性有多大?”再一次,通过观察图表,你可能会说‘这实际上很有可能’,因为在 172 起自杀事件中,有 33 起发生在 30 岁左右的人身上(超过五分之一)。
因此,根据不同数据出现的频率,我们可以计算这些数据出现的概率。从理论上讲,对于任何数据分布,我们都可以计算得到某一特定数据的概率——这是非常繁琐和复杂的,但我们可以做到。统计学家已经确定了几种常见的分布,对于每一种情况,他们都已经制定出了数学公式来指定这些分布的理想化版本(用曲线表示),这些理想化的分布就是概率分布(probability distribution),根据这些分布,我们就可以计算得到某个特定数据出现的概率,最常见的依然是正态分布。
对于一个均值为 0,标准差为 1 的正态分布,统计学家已经计算出了每个特定数据出现的概率,可以通过查表得到。然而很多服从正态分布的数据其均值和标准差都不一定是 0 和 1,幸运的是任何数据都可以进行标准化,得到服从正态分布且均值为0,标准差为1的 z 分数:
如果我们看一下自杀数据,就可以回答这个问题:一个人从比奇角跳下的概率是多少?是 70 岁或者更老?首先我们把 70 转换成 z 分数。假设自杀得分的均值为 36,标准差为 13。那么 70 就变成 (70-36)/13 = 2.62。然后查表得到的概率是 0.0044,也就是说,一个 70 岁或 70 岁以上的人自杀的概率只有 0.44%。我们还可以看到自杀受害者年龄在 70 岁或以下的可能性。这个概率是 0.9956,即自杀的受害者小于 70 岁的概率有 99.56%。
几个需要记住的 z 分数:95% 的 z 分数位于 -1.96 和 1.96 之间;99% 的 z 分数位于 -2.58 和 2.58 之间;
99.9% 的 z 分数在 -3.29 和 3.29 之间;
查看数据之后,下一步就是使用特定的统计模型来拟合数据,本书的剩余部分讨论了拟合数据的各种统计模型。首先简要介绍数据分析中两个非常重要的假设:
备择假设 alternative hypothesis(H1):一个效应会出现
虚无假设 null hypothesis(H0):没有效应
我们需要虚无假设的原因在于,我们无法在统计上证明实验假设(即备择假设),但是可以拒绝虚无假设。如果数据能够提供足够的证据来拒绝虚无假设,那么也就支持了实验假设。需要注意的是,即使我们可以拒绝虚无假设,也无法证明实验假设(仅仅是支持它)。因此,与其谈论接受或拒绝一个假设,我们应该讨论的是 ——“在零假设为真的情况下,我们获得数据的机会”。
在 Big Brother 的例子中,我们从试镜中收集有关选手性格的数据时,发现 75% 的人有障碍。分析数据时,我们实际上是在问,“假设参赛选手患人格障碍的可能性并不比普通大众高,那么 75% 或更多的参赛选手有人格障碍吗?” 从直觉上来说,答案是几率非常低。如果零假设成立,那么大多数参赛者就不会有人格障碍,因为他们相对罕见。因此,如果零假设为真,我们不太可能得到这样的数据。如果数据显示只有一名选手报告有人格障碍(大约8%),由于零假设成立时,说明参赛选手的性格与一般人没有什么不同,那么只有一小部分参赛选手有人格障碍获得这些数据的几率比以前要高。
理解这一点很重要,因为这是假设检验的核心思想。
当我们收集数据来检验理论时,必须记住:我们不能说零假设为真或实验假设为真,只能说根据获得一组特定的数据的概率,零假设是真的。
最后,假设可以是定向的和非定向的:
定向假设:一个效应会发生,同时也会指明效应的方向。
例如:“通过阅读本章,读者会对研究方法有更多的了解”,它说明了效应的方向(读者会知道更多)
非定向假设:仅表明一个效应会发生,不指明方向。
例如:“读者对研究方法的知识在他们读完这一章后会发生改变”,并没有告诉我们读者的知识是会增加还是会变差。
再次回顾一下最开始的图,即做研究的基本流程:
统计学作为研究过程中固有的一部分,能够帮助我们回答感兴趣的问题。
统计学致力于收集数据,解读数据,挖掘数据背后蕴含的真相。
统计学也是一种思维方式。现实世界纷繁复杂,日常生活中我们会接收到大量的信息,包含各种各样的数据,而统计学帮助我们理性、客观地思考,免于陷入复杂的数字谜团,做出正确的决策。
陈希孺先生在其《数理统计学简史》的序中说道:
“统计学不止是一种方法或技术,还含有世界观的成分——它是看待世界上万事万物的一种方法。我们常讲某事从统计观点看如何如何,指的就是这个意思。但统计思想也有一个发展过程。因此统计思想(或观点)的养成,不单需要学习一些具体的知识,还有能够从发展的眼光,把这些知识连缀成一个有机的、清晰的途径,获得一种历史的厚重感。”
本期内容到此结束,后续内容『不定期』更新。
","description":"学习统计、R语言有经典图书推荐吗? Squirtle的回答\\n\\n\\n声明:本专栏文章主要内容整理自《Discovering Statistics Using R》(Andy Field, Jeremy Miles and Zoë Field, 2012)一书,仅用于个人学习分享,不用于任何商业目的。如需转载,可私信或邮件联系。\\n\\n引言\\n\\n社会科学专业的同学或研究人员对统计又爱又恨。因为在大多数情况下,统计分析是做研究必不可少的一部分,我们需要借助统计方法来宣称研究结果是具有“显著”意义的;不幸的是,大多数人并不具备相应的数学或统计学背景,这使得理解复杂的统计方程变得非常困难…","guid":"https://www.zhihu.com/question/21767690/answer/65394806040","author":"Squirtle","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T07:59:08.017Z","media":[{"url":"https://pic1.zhimg.com/v2-6e8a27d119fc2cf9254ce5857b3e16c3.jpg","type":"photo","width":1280,"height":720,"blurhash":"LLQJs8kY?Z0P?a%1%Kj[-.WBM|xt"},{"url":"https://picx.zhimg.com/v2-e0829afdd149954f6ae2ca78cb2597f5.jpg","type":"photo","width":599,"height":498,"blurhash":"LgQA8V^*?Z9H~VIVIVxtxaWCRk%L"},{"url":"https://picx.zhimg.com/v2-212e543c3ce7866dca328b82ac3c7856.jpg","type":"photo","width":1133,"height":567,"blurhash":"LgQ,Xd~VRjE3^*IVRkxtxtM|xat6"},{"url":"https://pica.zhimg.com/v2-d6f4aa9fcc8c2745f88047ad70ba6f4e.jpg","type":"photo","width":1136,"height":709,"blurhash":"LmQv:+?a-oN1~VIVM|%2Rkfkayof"},{"url":"https://www.zhihu.com/equation?tex=%5Cbar%7BX%7D%3D%5Cfrac%7B%5Csum_%7Bi%3D1%7D%5E%7Bn%7Dx_%7Ba%7D%7D%7Bn%7D%3D%5Cfrac%7B1063%7D%7B11%7D%3D96.64","type":"photo","width":233,"height":44,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-2817a167834285a9f8d37d1b4d7740f4.jpg","type":"photo","width":838,"height":267,"blurhash":"LQQvze?b-;kDogj[aet7~UofWExa"},{"url":"https://picx.zhimg.com/v2-f11f46d7b66e4964148be4de4ae12fc5.jpg","type":"photo","width":870,"height":686,"blurhash":"LoP%eZxu~V%M_2RkIoofxtt6IVR*"},{"url":"https://www.zhihu.com/equation?tex=z%3D%5Cfrac%7BX-%5Cbar%7BX%7D%7D%7Bs%7D","type":"photo","width":89,"height":43,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"统计与R-01为什么我们需要统计方法","url":"https://zhuanlan.zhihu.com/p/544172580","content":"声明:本专栏文章主要内容整理自《Discovering Statistics Using R》(Andy Field, Jeremy Miles and Zoë Field, 2012)一书,仅用于个人学习分享,不用于任何商业目的。如需转载,可私信或邮件联系。引言社会科学专业的同学或研究人员对统计又爱又恨。因为在大多数情况下,统计分析是做研究必不可少的一部分,我们需要借助统计方法来宣称研究结果是具有“显著”意义的;不幸的是,大多数人并不具备相应的数学或统计学背景,这…","description":"声明:本专栏文章主要内容整理自《Discovering Statistics Using R》(Andy Field, Jeremy Miles and Zoë Field, 2012)一书,仅用于个人学习分享,不用于任何商业目的。如需转载,可私信或邮件联系。引言社会科学专业的同学或研究人员对统计又爱又恨。因为在大多数情况下,统计分析是做研究必不可少的一部分,我们需要借助统计方法来宣称研究结果是具有“显著”意义的;不幸的是,大多数人并不具备相应的数学或统计学背景,这…","guid":"https://zhuanlan.zhihu.com/p/544172580","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T07:59:07.802Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"时间序列建模问题,如何准确的建立时间序列模型?-皮卡丘的回答:【导读】DUET创新性的引入了一种时间和通道双向聚类架构,有效解决了时序分布漂移以及多变量时...","url":"https://www.zhihu.com/question/31833683/answer/65349918085","content":"时间序列建模问题,如何准确的建立时间序列模型?【导读】DUET创新性的引入了一种时间和通道双向聚类架构,有效解决了时序分布漂移以及多变量时间序列中变量关系难以动态建模的难题。研究团队在最新时间序列预测基准评测TFB的25个数据集上进行了广泛验证,证明了DUET的卓越性能,为各行业的时间序列预测任务提供了全新的解决方案。
多变量时间序列预测(MTSF)在金融投资、能源管理、天气预测和交通优化等领域具有重要应用。然而,现实中的时间序列通常面临两大挑战:
近日,来自华东师范大学和丹麦奥尔堡大学的科研人员合作,创新性地提出了一种基于时间和通道双向聚类架构的时间序列预测模型DUET,在多变量时间序列预测领域取得了巨大的突破。
论文地址:https://arxiv.org/pdf/2412.10859
Github:https://github.com/decisionintelligence/DUET
由时序漂移引起的异质性时间模式难以建模
在实际应用中,描述不稳定系统的时间序列往往容易受到外部因素的影响。这种时间序列的非平稳性意味着数据分布会随着时间的推移发生变化,这一现象被称为时间分布漂移(Temporal Distribution Shift, TDS)TDS会导致时间序列呈现出不同的时间模式,这种现象正式被称为时间模式的异质性。
例如,图1(a) 展示了一个经济领域的时间序列,反映了随国际环境变化而产生的波动。
可以观察到,三个时间区间 A、B 和 C 遵循不同的时间分布,这一点可以通过图1 (b)、图1 (c) 和图1 (d) 所示的值直方图得到证明。这种分布的变化伴随着时间模式的差异。正如图1 (a) 所示,蓝色区间 A 呈现下降趋势,绿色区间 B 呈现上升趋势,而黄色区间 C 则表现为更陡峭的下降趋势。
考虑到这些模式在时间序列中的普遍存在,将其纳入建模过程显得尤为重要。然而,近期的研究大多以隐式方式处理时间模式的异质性,这在很大程度上削弱了预测的准确性。
复杂的通道间关系难以灵活建模
多变量时间序列预测任务中,建模不同通道之间的相关性至关重要,因为利用其他相关通道的信息往往可以提升特定通道的预测精度。
例如,在天气预测中,温度的预测可以通过结合湿度、风速和气压等数据得到改进,因为这些因素之间相互关联,可以提供更全面的天气状况信息。
研究人员探索了多种通道策略,包括:将每个通道独立对待 (Channel-Independent, CI); 假设每个通道与其他所有通道相关(Channel-Dependent, CD); 以及将通道分组为若干簇 (Channel-Hard-Clustering, CHC)。
核心贡献
时间聚类模块 (TCM)
分布路由器:通过两层全连接网络将时间序列的潜在分布投影到高维空间,利用 Noisy Gating 技术选择最可能的分布簇。
线性模式提取器:将时间序列分解为趋势部分和季节性部分,分别通过线性变换提取特征。
聚合器:利用分布路由器的权重,动态聚合提取的特征,整合为全局时间特征表示。
通道聚类模块 (CCM)
频域通道表示:利用傅里叶变换将时间序列映射到频率空间,以频域特征衡量通道的相关性;使用可学习的Mahalanobis距离构建通道间的关系矩阵。
稀疏化:通过Gumbel Softmax重采样策略,将通道关系矩阵转化为稀疏的掩码矩阵,仅保留对预测任务有益的通道连接。
融合模块 (FM)
使用掩码注意力机制,将时间特征与通道掩码矩阵相结合,以生成最终的特征表示。
实验效果
本文使用 Time Series Forecasting Benchmark (TFB) 代码库作为统一的评估框架,该框架提供了所有基线代码、脚本和结果。按照 TFB 中的设置,为了确保公平对比,我们没有使用\\"Drop Last\\"技巧。
整体性能
DUET在10个被广泛认可的真实数据集上大幅领先于当前最先进模型。从绝对性能的角度来看,DUET 相较于表现次优的基线模型 PDF,有显著提升,均方误差(MSE)降低了6.9%,平均绝对误差(MAE)降低了 6.2%。
DUET 在应对由时间分布漂移引起的时间异质性问题时表现出卓越的能力。此外,在不同通道策略的对比中,DUET 同样展现了 CSC 策略的显著优势。
消融实验
文中进一步提供了一系列消融实验来验证模型框架设计的合理性。实验表明,DUET的设计在提升模型精度上是有效的。
参数敏感性分析:
DUET根据时间序列的时间分布将其聚类为M类,其中M是模式提取器的数目,研究人员分析了不同M值对预测精度的影响,并得出以下观察结论:
1)当M=1时,模型性能低于M≠1的情况
2)对于来自相同领域的数据集,例如电力领域的数据集ETTh1和ETTh2,最佳M值相同,均为4
3)对于来自不同领域的数据集,例如 ILI(健康领域)和 Exchange(经济领域),最佳N值分别为2和5
4)在选择最合适的M时,模型性能在大多数情况下显著优于其他变体,突显了在时间视角下进行聚类的有效性,并表明来自相同领域的数据集通常具有相似的时间分布,反之亦然。
总结
论文提出了一种通用框架DUET,该框架通过在时间维度和通道维度上引入双向聚类来提升多变量时间序列的预测能力。
DUET集成了一个时间聚类模块(Temporal Clustering Module,TCM),该模块将时间序列聚类为细粒度的分布簇,并针对不同分布簇设计多种模式提取器,以捕捉其独特的时间模式,从而建模时间模式的异质性。
此外,研究人员引入了通道聚类模块(Channel Clustering Module,CCM),采用通道软聚类策略,通过度量学习在频率域中捕捉通道之间的关系,并进行稀疏化处理。
最后,融合模块(Fusion Module,FM)基于掩码注意力机制,将TCM提取的时间特征与CCM生成的通道掩码矩阵高效结合,这些创新机制共同赋予DUET卓越的预测性能。
参考资料:
https://decisionintelligence.github.io/OpenTS/
团队成员相关论⽂:
TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods, PVLDB 2024 (Best Research Paper Award Nomination).
https://arxiv.org/abs/2403.20150
","description":"时间序列建模问题,如何准确的建立时间序列模型? 皮卡丘的回答\\n\\n\\n【导读】DUET创新性的引入了一种时间和通道双向聚类架构,有效解决了时序分布漂移以及多变量时间序列中变量关系难以动态建模的难题。研究团队在最新时间序列预测基准评测TFB的25个数据集上进行了广泛验证,证明了DUET的卓越性能,为各行业的时间序列预测任务提供了全新的解决方案。\\n\\n\\n\\n\\n多变量时间序列预测(MTSF)在金融投资、能源管理、天气预测和交通优化等领域具有重要应用。然而,现实中的时间序列通常面临两大挑战:\\n\\n时间模式的异质性,即由于外部因素的影响,真实时间序列往往表现出非平稳性(Temporal…","guid":"https://www.zhihu.com/question/31833683/answer/65349918085","author":"皮卡丘","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T07:09:06.620Z","media":[{"url":"https://picx.zhimg.com/v2-4b1ea239d3d1bd1cc7ca3461f500aea2.jpg","type":"photo","width":1428,"height":414,"blurhash":"LFQ]$p_3~q_3~qxaRjt7Mxs:Rjt7"},{"url":"https://pica.zhimg.com/v2-18c4c23df1886be5921781df0427ff42.jpg","type":"photo","width":1456,"height":1284,"blurhash":"LPRW9vk?s;yD~qt6ofn$r_r;jGn#"},{"url":"https://pic1.zhimg.com/v2-9a71a235b26f0c36a56af890e7e94c07.jpg","type":"photo","width":1188,"height":772,"blurhash":"LBNm$l~qoht6I9%MM|RikWt7M{xu"},{"url":"https://pic1.zhimg.com/v2-e4f1b84bce24cb39c663c8932067f9f7.jpg","type":"photo","width":1762,"height":852,"blurhash":"LGQcr1~Xbw~q?a%3S5xvROV@R.NG"},{"url":"https://picx.zhimg.com/v2-e38c72c2ec89f42583e7740e8d04aaa6.jpg","type":"photo","width":1628,"height":248,"blurhash":"LCR:HG~qIUxu?b%MWBRjt7Rjofj["},{"url":"https://pica.zhimg.com/v2-7608cb8e5898547d320a2df11d341a16.jpg","type":"photo","width":1568,"height":218,"blurhash":"L~Kd}KoffQof~qofj[ofofj[j[j["},{"url":"https://pic1.zhimg.com/v2-99dafc3d8c11f267821b84bcde35116b.jpg","type":"photo","width":1618,"height":294,"blurhash":"LBRysg_3t7~qxuxut7RjRjRjRjfQ"},{"url":"https://picx.zhimg.com/v2-4206ad4e6fac15112e6e2ee5ede80680.jpg","type":"photo","width":1586,"height":152,"blurhash":"LCSPX_?bt7~q?bofM{RjxuWBWBof"},{"url":"https://picx.zhimg.com/v2-fb78d36e0635923e1bbd2df0a462ae4b.jpg","type":"photo","width":1576,"height":188,"blurhash":"L9SY{q~qRj?b-;?bxuayxuRjIUxu"},{"url":"https://pic1.zhimg.com/v2-ce9276608ff3ba4372a68c4ae60b282c.jpg","type":"photo","width":1522,"height":250,"blurhash":"LCSPX__3WB~q?bRjj[Rjt7xuofRj"},{"url":"https://pica.zhimg.com/v2-efaf6dde20a411269e173f507985c307.jpg","type":"photo","width":1156,"height":1060,"blurhash":"LLRV|T-;?b-p~qt7t7oLE1RjV@bG"},{"url":"https://picx.zhimg.com/v2-5dc47b700388e9025f6c72899a20eec2.jpg","type":"photo","width":1926,"height":1632,"blurhash":"LCQvwR~q%M~q?bfQj[j[xuWBayay"},{"url":"https://pica.zhimg.com/v2-66bb5f8797fc8d566fdf6a4504991d70.jpg","type":"photo","width":922,"height":414,"blurhash":"LCQmCr?b%M~qxuM{j[ofD%M{t7WB"},{"url":"https://pic1.zhimg.com/v2-3565fc7c64449089e036ba0039174fd8.jpg","type":"photo","width":924,"height":444,"blurhash":"LsKUZkt7fQof~qoffQj[xufQj[fQ"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在 R 语言开发环境中如何建模和预测数据?-等到好久的回答:为了在AWS上实现一个Python+Flask前端、后端结合OpenAI GPT-4和向量数据库技术生成并执行R语言代码的...","url":"https://www.zhihu.com/question/595111105/answer/65315916456","content":"在 R 语言开发环境中如何建模和预测数据?为了在AWS上实现一个Python+Flask前端、后端结合OpenAI GPT-4和向量数据库技术生成并执行R语言代码的应用,实现自动生成、编辑、执行R语言代码的功能。Flask前端提供简单的交互界面,用户可以输入描述、查看和修改代码,并获得执行结果。 下面将详细描述如何进行架构设计、开发步骤、关键代码及相关配置。
Flask前端代码:
from flask import Flask, render_template, request, jsonify\\nimport openai\\nimport subprocess\\n\\napp = Flask(__name__)\\n\\n# 设置OpenAI API密钥\\nopenai.api_key = \'your-openai-api-key\'\\n\\n@app.route(\'/\', methods=[\'GET\', \'POST\'])\\ndef index():\\n if request.method == \'POST\':\\n prompt = request.form[\'prompt\']\\n # 使用OpenAI生成R语言代码\\n r_code = generate_r_code(prompt)\\n return render_template(\'index.html\', r_code=r_code)\\n return render_template(\'index.html\')\\n\\ndef generate_r_code(prompt):\\n response = openai.Completion.create(\\n model=\\"gpt-4\\",\\n prompt=f\\"根据以下描述生成R语言代码:{prompt}\\",\\n temperature=0.7,\\n max_tokens=200\\n )\\n return response[\'choices\'][0][\'text\']\\n\\n@app.route(\'/run_code\', methods=[\'POST\'])\\ndef run_code():\\n r_code = request.form[\'r_code\']\\n # 执行R代码并返回结果\\n result = execute_r_code(r_code)\\n return jsonify(result=result)\\n\\ndef execute_r_code(r_code):\\n try:\\n # 使用subprocess运行R代码\\n process = subprocess.Popen(\\n [\'Rscript\', \'-e\', r_code],\\n stdout=subprocess.PIPE,\\n stderr=subprocess.PIPE\\n )\\n stdout, stderr = process.communicate()\\n if process.returncode == 0:\\n return stdout.decode()\\n else:\\n return stderr.decode()\\n except Exception as e:\\n return str(e)\\n\\nif __name__ == \'__main__\':\\n app.run(debug=True)
HTML模板(templates/index.html):
<!DOCTYPE html>\\n<html lang=\\"en\\">\\n<head>\\n <meta charset=\\"UTF-8\\">\\n <meta name=\\"viewport\\" content=\\"width=device-width, initial-scale=1.0\\">\\n <title>R Code Generator</title>\\n</head>\\n<body>\\n <h1>R Code Generator</h1>\\n <form method=\\"POST\\">\\n <label for=\\"prompt\\">Enter a description for R code:</label>\\n <textarea id=\\"prompt\\" name=\\"prompt\\" rows=\\"4\\" cols=\\"50\\"></textarea><br>\\n <button type=\\"submit\\">Generate Code</button>\\n </form>\\n\\n {% if r_code %}\\n <h2>Generated R Code:</h2>\\n <form id=\\"r-code-form\\" method=\\"POST\\" action=\\"/run_code\\">\\n <textarea id=\\"r_code\\" name=\\"r_code\\" rows=\\"10\\" cols=\\"50\\">{{ r_code }}</textarea><br>\\n <button type=\\"submit\\">Run Code</button>\\n </form>\\n <h3>Execution Result:</h3>\\n <pre id=\\"result\\"></pre>\\n {% endif %}\\n</body>\\n</html>
generate_r_code
函数中展示。示例代码:
from milvus import Milvus, IndexType, MetricType\\n\\n# 连接Milvus服务器\\nmilvus = Milvus(host=\'localhost\', port=\'19530\')\\n\\n# 假设我们已经有生成的R代码向量\\ncode_vector = [0.2, 0.1, 0.4, ...] # 向量化后的R代码表示\\n\\n# 插入数据\\nmilvus.insert(collection_name=\\"r_code_collection\\", records=[code_vector])
PyRserve
库从Python调用R脚本。示例代码:
import rpy2.robjects as ro\\n\\ndef execute_r_code(r_code):\\n try:\\n ro.r(r_code) # 执行R代码\\n return ro.r[\'result\'] # 返回执行结果\\n except Exception as e:\\n return str(e)
很喜欢丰子恺在《豁然开朗》中写到的一段话:\\"不是世界选择了你,是你选择了这个世界。既然无处可躲,不如傻乐;既然无处可逃,不如喜悦;既然没有净土,不如静心;既然没有如愿,不如释然。\\"
人生在世,谁都免不了会遇到风风雨雨,你永远不知道在别人眼中你是什么样的状态,不要试图解释,要明白我们都是独立的自己,是不可复制的。生活,从不是为了展示什么,冷暖自知,要活给自己看。
生活中,我们不可能做到让所有人都满意。与其把情绪的开关交到别人手中,不如学会珍爱自己。学会做自己的主人,克服生活的焦虑和沮丧,不因一时的低谷就摇摆不定,不因他人的轻视就自我怀疑。
每个人都是独一无二的,倾听内心的声音、勇敢逐梦,才会获得掌控生活的信心和力量;活得洒脱些,自己的内心丰盈了,快乐才能更持久。人生的风景,不在别人的评价里。坦坦荡荡走自己的路,光明磊落做自己的事,就是最美的风景。
也不要总是以自己的标准去评价他人,吾日三省吾身,不强求他人,不纠结过往。学会慢下来,调整生活节奏,听从内心的声音,认清方向也读懂自己,才会有生活的底气和动力。与其抱怨,不如做最真实的自己,得之坦然,失之淡然,顺其自然,你会发觉:自己比想像中要好很多。
无论你活成什么样子,都会有人说三道四,这个世界我们都只来一次,吃想吃的饭,见想见的人,看喜欢的风景,做喜欢的事。你不一定非要长成玫瑰,你乐意的话,做茉莉、做雏菊、做向日葵、做野花、做千千万万。过好自己的人生,你便是那最美的风景。
","description":"能否分享一些让你豁然开朗的句子? 平渝知野的回答\\n\\n\\n很喜欢丰子恺在《豁然开朗》中写到的一段话:\\"不是世界选择了你,是你选择了这个世界。既然无处可躲,不如傻乐;既然无处可逃,不如喜悦;既然没有净土,不如静心;既然没有如愿,不如释然。\\"\\n\\n人生在世,谁都免不了会遇到风风雨雨,你永远不知道在别人眼中你是什么样的状态,不要试图解释,要明白我们都是独立的自己,是不可复制的。生活,从不是为了展示什么,冷暖自知,要活给自己看。\\n\\n生活中,我们不可能做到让所有人都满意。与其把情绪的开关交到别人手中,不如学会珍爱自己。学会做自己的主人,克服生活的焦虑和沮丧,不因一时的低谷就摇摆不定…","guid":"https://www.zhihu.com/question/580956751/answer/65221215274","author":"平渝知野","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T04:28:48.529Z","media":[{"url":"https://pic1.zhimg.com/v2-f82e480413af2e19c92784309ed0b86d.jpg","type":"photo","width":1080,"height":1454,"blurhash":"LBBWb-}*%1s:?G-m%1RPtSM|kCxt"},{"url":"https://picx.zhimg.com/v2-a2a9bacd16bab394ca21f477843a9a45.jpg","type":"photo","width":2992,"height":2992,"blurhash":"LiH2jDo%Wqs;-@RPbbbITgaijYay"},{"url":"https://picx.zhimg.com/v2-97c603db72b6e5ea9f9dda58b58459cb.jpg","type":"photo","width":1080,"height":1491,"blurhash":"LBL|=P_2xV~WtmMxM{%MxaobITRi"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"怎样用r语言将字符串里的数字提取出来呢?如图中“80-84years”(这一列的数字全提取出来)?-Via爱早起的回答:对于阿拉伯数字,既可以是字符也可以是数字,具体...","url":"https://www.zhihu.com/question/587218428/answer/65196995483","content":"怎样用r语言将字符串里的数字提取出来呢?如图中“80-84years”(这一列的数字全提取出来)?mydata <- dd_8年级数据
nchar(mydata$职业)
grep(\\"辛辣\\", mydata$饮食偏好)
从mydata文件的饮食偏好一列中找出含有“辛辣”字符串的个案,并用0、1数值标记,另存为一列名为“辛辣”的新列。
grepl(\\"辛辣\\", mydata$饮食)
as.numeric(grepl(\\"辛辣“, mydata$饮食))
mydata$辛辣<- as.numeric(grepl(\\"辛辣“, mydata$饮食))
substr(字符串, 开始位置, 结束位置)
mydata$出生年份 <- substr(mydata$身份证号, 7, 10)\\nas.numeric(mydata$出生年份)
gsub(\\"被替换的内容\\", \\"替换内容\\", 字符串)
gsub(\\"[0-9]\\", \\"\\", mydata$姓名)\\nmydata$姓名 <- gsub(\\"[0-9]\\", \\"\\", mydata$姓名编号)
gsub(\\"[^0-9]\\", \\"\\", mydata$姓名编号)\\nmydata$编号 <- gsub(\\"[^0-9]\\", \\"\\", mydata$姓名编号)
paste(变量1, 变量2, sep = \\"间隔内容\\")
paste(mydata$姓名, mydata编号, sep = \\"+\\")
paste0(mydata$姓名, mydata编号)\\n或\\npaste(mydata$姓名, mydata$编号, \\"\\") ##引号内为空,表示无间隔内容
regexpr(\\"具体内容\\", 字符串)
mydata$星号位置 <- regexpr(\\"*\\", mydata$姓名编号, fixed = TRUE)
strsplit(字符串, split = \\"拆分依据\\", fixed = TRUE)
aaa <- strsplit(mydata$姓名编号, split = \\"*\\", fixed = TRUE)
以上命令存在一个问题:strsplit命令拆分开后的结果不是变量而是list,软件无法直接将结果放进原来的数据框,我们需要把list转换成Matrix或Vector或者data.frame
do.call
aaa <- do.call(rbind, aaa) ##row bind合并为矩阵\\naaa <- data.frame(aaa) ##转为数据框\\ncolnames(aaa) <- c(\\"姓名\\", \\"编号\\") ##修改列的名字\\nmydata <- data.frame(mydata, aaa) ###合并两个表格
本章封面是chat生成的图片,之后会一直用做更新该部分的封面。欢迎各位来到R语言的霍格沃茨魔法学院!
","description":"怎样用r语言将字符串里的数字提取出来呢?如图中“80-84years”(这一列的数字全提取出来)? Via爱早起的回答\\n\\n对于阿拉伯数字,既可以是字符也可以是数字,具体是哪一种,取决于是否加引号\\n修改用中文命名的文件为英文,方便操作\\nmydata <- dd_8年级数据\\n求字符串的长度\\nnchar(mydata$职业)\\n查找出(查找字符串的各个元素中哪些包含目标内容),输出结果为包含目标内容的序号。\\ngrep(\\"辛辣\\", mydata$饮食偏好)\\n\\n从mydata文件的饮食偏好一列中找出含有“辛辣”字符串的个案,并用0、1数值标记,另存为一列名为“辛辣”的新列。\\n\\n查找…","guid":"https://www.zhihu.com/question/587218428/answer/65196995483","author":"Via爱早起","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T03:59:59.923Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"霍格沃茨魔法学院:R的字符串整理","url":"https://zhuanlan.zhihu.com/p/14962864943","content":"本章封面是chat生成的图片,之后会一直用做更新该部分的封面。欢迎各位来到R语言的霍格沃茨魔法学院! 对于阿拉伯数字,既可以是字符也可以是数字,具体是哪一种,取决于是否加引号修改用中文命名的文件为英文,方便操作mydata <- dd_8年级数据求字符串的长度nchar(mydata$职业)查找出(查找字符串的各个元素中哪些包含目标内容),输出结果为包含目标内容的序号。grep(\\"辛辣\\", mydata$饮食偏好)从mydata文件的饮食偏好一列中找…","description":"本章封面是chat生成的图片,之后会一直用做更新该部分的封面。欢迎各位来到R语言的霍格沃茨魔法学院! 对于阿拉伯数字,既可以是字符也可以是数字,具体是哪一种,取决于是否加引号修改用中文命名的文件为英文,方便操作mydata <- dd_8年级数据求字符串的长度nchar(mydata$职业)查找出(查找字符串的各个元素中哪些包含目标内容),输出结果为包含目标内容的序号。grep(\\"辛辣\\", mydata$饮食偏好)从mydata文件的饮食偏好一列中找…","guid":"https://zhuanlan.zhihu.com/p/14962864943","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T03:59:58.397Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有人知道这个代码是咋整得吗?-李橘的回答:1.检查是否存在该文件,以及该文件的路径文件名是否正确 2.检查文件是否为空 3.检查分隔符sep是否为“,” 4.检查文...","url":"https://www.zhihu.com/question/3865298645/answer/65129629328","content":"有人知道这个代码是咋整得吗?1.检查是否存在该文件,以及该文件的路径文件名是否正确
2.检查文件是否为空
3.检查分隔符sep是否为“,”
4.检查文件编码
","description":"有人知道这个代码是咋整得吗? 李橘的回答\\n\\n\\n1.检查是否存在该文件,以及该文件的路径文件名是否正确\\n\\n2.检查文件是否为空\\n\\n3.检查分隔符sep是否为“,”\\n\\n4.检查文件编码","guid":"https://www.zhihu.com/question/3865298645/answer/65129629328","author":"李橘","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-27T02:57:57.356Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"针对绘图方面的需求,matlab、python和R哪个更加强大?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的...","url":"https://www.zhihu.com/question/28707877/answer/65001505932","content":"针对绘图方面的需求,matlab、python和R哪个更加强大?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data=data, aes(x=Date, y=Value)) +\\n geom_bar(stat=\\"identity\\", fill=colors) +\\n labs(x=\\"Date\\", y=\\"Value\\") +\\n scale_y_continuous(breaks=seq(0,210,50), limits = c(0,210),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\")\\np
最后我们保存绘制的图形:
ggsave(\\"save/bar-base.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
1、“祝我们拥有重新晒太阳的勇气”
亲爱的自己,生命的年轮又圆满一个圆周时。我只盼你可以毫无遗漏的拥抱自己。别再疏离自己。
亲爱的自己,从前想成为一座山,如今想成为一棵树。而无论想成为什么,我都希望自己可以有一股韧劲。逢失泄气也好,逢雨湿颓也好。但凭着这股韧劲,我坚信自己会把往日遮蔽的阴影一扫而空,重新拥有一副新的光景。重新晒太阳。
祝我们一直都拥有重新晒太阳的勇气。
2、毛姆《人性的枷锁》那些让人豁然开朗的句子!
“成长本来就是一条不可逆的道路,更恐怖的是,它往往还是一条孤独的单行车道。只愿我们能在别人的故事中,切身体味或已逝去,或未到来的岁月。”
“同情心本身就是一种居高临下的感情。当一个人的思想强大到足以凌驾空间与时间,那么这一世过得清明与否似乎就并不重要了。”
“如果你想让男人好好待你,你就得对他们狼心狗肺;如果你对他们温柔体贴,他们就让你吃尽苦头。”
3、可有可无,可去可留,取舍之间便是。人生能折磨我的永远。都是我过于在意的东西,我若不在意了,天奈我何。日落归山海,山海藏深意,没有人不遗憾,也没有人不痛苦,只是有人不喊疼,后来晚风吹人醒,万事藏于心。
4、这个世界就是这样,我们会认识形形色色的人,会遇到无法解释的恶意,会感到失望,但是只要过去了,你就会发现,其实这些都是在提醒你,不要成为那样的人,经历的意义在于:引导你,而非定义你。记住:深渊可以凝视,但不要驻足。
5、白岩松老师说过这样一段话:
“一生中总会遇到这样的时候,你的内心已经兵荒马乱天翻地覆了,可是在别人看来你只是比平时沉默了一点,没人会觉得奇怪,这场战争,注定单枪应马。”
6、“常常熬不住的时候也想找个靠山,可是你怎么找都会发现,有的山长满荆棘,有的山全是野兽,所以你应该是自己的那座山。”——《皮囊》
7、“活着,就该逢山开路,遇水架桥”
——《自渡》
8、李娟 《我的阿勒泰》
世界就在手边,躺倒就是睡眠,嘴里吃的是食物,身上裹的是衣服,在这里,我不知道还能有什么遗憾。
阳光在云隙间不断移动,把一束束明亮的光线在大地上来回投射。云块遮蔽的地方是冰凉清晰的,光线照射的地方时灿烂恍惚的。这斑斓、浩荡的世界。
哈萨克文化里,人与人之间,产生友情或者爱情,是由于被看见。所以在哈萨克语中,“我清楚地看见你”意思是“我喜欢你”。
看到全世界都是一场透明的倾斜,全世界都在倾向风去的方向。我的头发也往那边飘扬,我的心在原地挣扎,也充满了想要过去的渴望。
痛苦这东西,天生应该用来藏在心底,悲伤天生是要被努力节制的。受到的伤害和欺骗总得去原谅,满不在乎的人不是无情的人。最安静与最孤独的成长,也是能使人踏实、自信、强大、善良的。再颠簸的生活,也要闪亮地过,去爱、去生活、去受伤,人间总归值得。
……………………
点个关注,防止迷路! 同名公众号:科研R 本文继续上一篇着重介绍R语言中tidyverse中的一些常用函数,如何对数据进行初步的处理,拒绝水文,满满干货,请各位看官收藏细品。
iris %>% as_tibble() %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 4.9 3 1.4 0.2 setosa \\n## 3 4.7 3.2 1.3 0.2 setosa \\n## 4 4.6 3.1 1.5 0.2 setosa \\n## 5 5 3.6 1.4 0.2 setosa \\n## 6 5.4 3.9 1.7 0.4 setosa\\n
iris %>% as_tibble() %>% filter(Species==\\"setosa\\") %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 4.9 3 1.4 0.2 setosa \\n## 3 4.7 3.2 1.3 0.2 setosa \\n## 4 4.6 3.1 1.5 0.2 setosa \\n## 5 5 3.6 1.4 0.2 setosa \\n## 6 5.4 3.9 1.7 0.4 setosa\\n
iris %>% as_tibble() %>% filter(Species !=\\"setosa\\") %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species \\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 7 3.2 4.7 1.4 versicolor\\n## 2 6.4 3.2 4.5 1.5 versicolor\\n## 3 6.9 3.1 4.9 1.5 versicolor\\n## 4 5.5 2.3 4 1.3 versicolor\\n## 5 6.5 2.8 4.6 1.5 versicolor\\n## 6 5.7 2.8 4.5 1.3 versicolor\\n\\n# 此2种方法结果一致,处理复杂数据时推荐第二种\\niris %>% as_tibble() %>% filter(!Species %in% \\"setosa\\") %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species \\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 7 3.2 4.7 1.4 versicolor\\n## 2 6.4 3.2 4.5 1.5 versicolor\\n## 3 6.9 3.1 4.9 1.5 versicolor\\n## 4 5.5 2.3 4 1.3 versicolor\\n## 5 6.5 2.8 4.6 1.5 versicolor\\n## 6 5.7 2.8 4.5 1.3 versicolor\\n
iris %>% as_tibble() %>% \\n filter(.,Species %in% c(\\"setosa\\",\\"virginica\\")) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 4.9 3 1.4 0.2 setosa \\n## 3 4.7 3.2 1.3 0.2 setosa \\n## 4 4.6 3.1 1.5 0.2 setosa \\n## 5 5 3.6 1.4 0.2 setosa \\n## 6 5.4 3.9 1.7 0.4 setosa\\n
!Species 表示不包含在其中,此处注意前面的.
iris %>% as_tibble() %>% \\n filter(.,!Species %in% c(\\"setosa\\",\\"virginica\\")) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species \\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 7 3.2 4.7 1.4 versicolor\\n## 2 6.4 3.2 4.5 1.5 versicolor\\n## 3 6.9 3.1 4.9 1.5 versicolor\\n## 4 5.5 2.3 4 1.3 versicolor\\n## 5 6.5 2.8 4.6 1.5 versicolor\\n## 6 5.7 2.8 4.5 1.3 versicolor\\n
iris %>% as_tibble() %>% \\n filter(Species==\\"setosa\\",Sepal.Length >= 5) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 5 3.6 1.4 0.2 setosa \\n## 3 5.4 3.9 1.7 0.4 setosa \\n## 4 5 3.4 1.5 0.2 setosa \\n## 5 5.4 3.7 1.5 0.2 setosa \\n## 6 5.8 4 1.2 0.2 setosa\\n\\n
& 在R中表示和的意思与,作用一致;|或的意思
iris %>% as_tibble() %>% \\n filter(.,(Species==\\"setosa\\" & !Sepal.Length >= 5)) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 4.9 3 1.4 0.2 setosa \\n## 2 4.7 3.2 1.3 0.2 setosa \\n## 3 4.6 3.1 1.5 0.2 setosa \\n## 4 4.6 3.4 1.4 0.3 setosa \\n## 5 4.4 2.9 1.4 0.2 setosa \\n## 6 4.9 3.1 1.5 0.1 setosa\\n\\niris %>% as_tibble() %>% \\n filter(.,(Species==\\"setosa\\" | Sepal.Length >= 5)) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 4.9 3 1.4 0.2 setosa \\n## 3 4.7 3.2 1.3 0.2 setosa \\n## 4 4.6 3.1 1.5 0.2 setosa \\n## 5 5 3.6 1.4 0.2 setosa \\n## 6 5.4 3.9 1.7 0.4 setosa\\n
iris %>% as_tibble() %>% \\n filter(.,xor(Species==\\"setosa\\",Sepal.Length >= 5)) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 4.9 3 1.4 0.2 setosa \\n## 2 4.7 3.2 1.3 0.2 setosa \\n## 3 4.6 3.1 1.5 0.2 setosa \\n## 4 4.6 3.4 1.4 0.3 setosa \\n## 5 4.4 2.9 1.4 0.2 setosa \\n## 6 4.9 3.1 1.5 0.1 setosa\\n
可通过以下代码验证上面的结果
iris %>% as_tibble() %>% \\n filter(.,(Species==\\"setosa\\" & !Sepal.Length >= 5)) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 4.9 3 1.4 0.2 setosa \\n## 2 4.7 3.2 1.3 0.2 setosa \\n## 3 4.6 3.1 1.5 0.2 setosa \\n## 4 4.6 3.4 1.4 0.3 setosa \\n## 5 4.4 2.9 1.4 0.2 setosa \\n## 6 4.9 3.1 1.5 0.1 setosa\\n\\niris %>% as_tibble() %>% \\n filter(.,Species!= \\"setosa\\",Sepal.Length >= 5) %>% head()\\n\\n## # A tibble: 6 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species \\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 7 3.2 4.7 1.4 versicolor\\n## 2 6.4 3.2 4.5 1.5 versicolor\\n## 3 6.9 3.1 4.9 1.5 versicolor\\n## 4 5.5 2.3 4 1.3 versicolor\\n## 5 6.5 2.8 4.6 1.5 versicolor\\n## 6 5.7 2.8 4.5 1.3 versicolor\\n
此代码将首先提取出含有setosa的行,之后根据Sepal.Length >= 5这一条件对其进行过滤,最后将含有versicolor\\",\\"virginica\\"的数据追加上去
iris %>% as_tibble() %>% \\n filter(.,(Species==\\"setosa\\" & Sepal.Length >= 5)|(Species %in% c(\\"versicolor\\",\\"virginica\\")))\\n\\n## # A tibble: 130 x 5\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## <dbl> <dbl> <dbl> <dbl> <fct> \\n## 1 5.1 3.5 1.4 0.2 setosa \\n## 2 5 3.6 1.4 0.2 setosa \\n## 3 5.4 3.9 1.7 0.4 setosa \\n## 4 5 3.4 1.5 0.2 setosa \\n## 5 5.4 3.7 1.5 0.2 setosa \\n## 6 5.8 4 1.2 0.2 setosa \\n## 7 5.7 4.4 1.5 0.4 setosa \\n## 8 5.4 3.9 1.3 0.4 setosa \\n## 9 5.1 3.5 1.4 0.3 setosa \\n## 10 5.7 3.8 1.7 0.3 setosa \\n## # ... with 120 more rows\\n
删除Species中含有NA的行
iris %>% filter(!is.na(Species)) %>% head()\\n\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## 1 5.1 3.5 1.4 0.2 setosa\\n## 2 4.9 3.0 1.4 0.2 setosa\\n## 3 4.7 3.2 1.3 0.2 setosa\\n## 4 4.6 3.1 1.5 0.2 setosa\\n## 5 5.0 3.6 1.4 0.2 setosa\\n## 6 5.4 3.9 1.7 0.4 setosa\\n
filter_all( )
对数值执行全部筛选:此代码将保留任何值等于5的行
iris %>% filter_all(any_vars(. == 5)) %>% head()\\n\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## 1 5 3.6 1.4 0.2 setosa\\n## 2 5 3.4 1.5 0.2 setosa\\n## 3 5 3.0 1.6 0.2 setosa\\n## 4 5 3.4 1.6 0.4 setosa\\n## 5 5 3.2 1.2 0.2 setosa\\n## 6 5 3.5 1.3 0.3 setosa\\n
对字符串进行过滤,在所有列中检索含有“Ca”的字符串,需要将条件包装在any_vars()中
msleep %>% \\n select(name:order, sleep_total, -vore) %>% \\n filter_all(any_vars(str_detect(., pattern = \\"Ca\\"))) %>% head()\\n\\n## # A tibble: 6 x 4\\n## name genus order sleep_total\\n## <chr> <chr> <chr> <dbl>\\n## 1 Cheetah Acinonyx Carnivora 12.1\\n## 2 Northern fur seal Callorhinus Carnivora 8.7\\n## 3 Vesper mouse Calomys Rodentia 7 \\n## 4 Dog Canis Carnivora 10.1\\n## 5 Roe deer Capreolus Artiodactyla 3 \\n## 6 Goat Capri Artiodactyla 5.3\\n
filter_if( )
下面这段代码首先对列的类型进行判断,再在字符列中筛选NA
msleep %>% \\n select(name:order, sleep_total:sleep_rem) %>% \\n filter_if(is.character, any_vars(is.na(.))) %>% head()\\n\\n## # A tibble: 6 x 6\\n## name genus vore order sleep_total sleep_rem\\n## <chr> <chr> <chr> <chr> <dbl> <dbl>\\n## 1 Vesper mouse Calomys <NA> Rodentia 7 NA \\n## 2 Desert hedgehog Paraechinus <NA> Erinaceomorpha 10.3 2.7\\n## 3 Deer mouse Peromyscus <NA> Rodentia 11.5 NA \\n## 4 Phalanger Phalanger <NA> Diprotodontia 13.7 1.8\\n## 5 Rock hyrax Procavia <NA> Hyracoidea 5.4 0.5\\n## 6 Mole rat Spalax <NA> Rodentia 10.6 2.4\\n
filter_at( )
filter_at( )它不筛选所有列,也不需要您指定列的类型,可以通过vars() 参数选择要对那些列进行筛选
iris %>% \\n filter_at(vars(Sepal.Length,Petal.Length),all_vars(. >=6)) %>% head()\\n\\n## Sepal.Length Sepal.Width Petal.Length Petal.Width Species\\n## 1 6.3 3.3 6.0 2.5 virginica\\n## 2 7.6 3.0 6.6 2.1 virginica\\n## 3 7.3 2.9 6.3 1.8 virginica\\n## 4 7.2 3.6 6.1 2.5 virginica\\n## 5 7.7 3.8 6.7 2.2 virginica\\n## 6 7.7 2.6 6.9 2.3 virginica
我感觉自己用R语言搞定了进行数据的聚类分析和判别分析之后,自己对R语言和多元统计的兴趣和理解都相应得到提高和加深了。
当然进行判别分析之前首先是要进行聚类分析的。
数据大致浏览:
聚类分析是一种无监督学习方法,它试图根据数据的内在结构将一组对象划分为若干个簇(clusters),使得同一个簇内的对象尽可能相似,而不同簇之间的对象尽可能不同。
我们是生产2类哈,利用Wald法。
R代码
读取数据:
library(readxl)\\nd <- read_excel(\\"小康指数.xls\\")\\nd<-as.data.frame(d)\\nhead(d)
运行结果:
进行聚类分析
library(fields)\\nlibrary(plot3D)\\nlibrary(cluster)\\nlibrary(factoextra)\\nlibrary(readxl)\\nXF <- d\\nhead(XF)\\nrownames(XF)=XF[,1]\\nXF<-XF[,-1]\\nhead(XF)\\nGS=scale(XF)#数据标准化\\nG=dist(GS,method=\\"euclidean\\",diag=T)#采用欧氏距离计算相似矩阵\\nimage.plot(as.matrix(G))\\nHC=hclust(G,method=\\"ward.D\\")#采用ward法聚类\\n# ?hclust\\nwin.graph()\\nplot(HC)#绘制聚类树状图\\ndend1 <- as.dendrogram(HC)\\nwin.graph()\\nplot(dend1, type = \\"rectangle\\", \\n ylab=\\"Height\\",\\n main=\\"Cluster Dendrogram\\")\\nplot(dend1, \\n nodePar = list(pch = c(1,NA), cex = 1.2, lab.cex = 0.9),#设置节点的形状,大小和标签字体大小\\n type = \\"triangle\\", center = TRUE)\\nplot(dend1, \\n nodePar = list(pch = 17:16, cex = 1.2:0.8, col = 2:3),\\n horiz = TRUE)#水平放置聚类树\\nwin.graph()\\nresult=cutree(HC,k=2)#提取每个样品所属的类别\\nresult#显示\\nwin.graph()\\n# 创建颜色向量,根据聚类结果为每个点分配颜色\\ncolors <- c(\\"red\\", \\"blue\\")[result]\\n\\n# 绘制前五列的数据点图,使用聚类结果的颜色\\nplot(GS[, 1:5], col = colors, pch = 19, frame = FALSE)\\n\\n# 添加文本标签(行名)\\n# 使用GS中的坐标来确定文本的位置\\ntext(GS[, 1], GS[, 2], labels = rownames(GS), pos = 3, cex = 0.7, col = colors)\\n
运行效果:
判别分析是一种监督学习方法,它基于已知类别标签的数据集来建立模型,以便对新的观测值进行分类。它的目的是找到一个或多个线性组合(判别函数),这些组合可以最好地区分不同的类别。
我们在聚类分析中可以认为得到了qlc_3哈,当然我们其实是在SPSS分析中得到的哈。
然后进行判别分析
R代码
train<-d\\nhead(train)\\nrownames(train)=train[,1]\\nhead(train)\\ntrain<-train[,-1]\\nlibrary(MASS)\\nmodel<-lda(qlc_3~.,train)\\nmodel.predict<-predict(model,train)\\nmodel\\npredict_class<-model.predict$class\\nmodel.predict\\npredict_class\\n#搞一个列联表\\ntable(train$qlc_3,predict_class)\\nmean(train$qlc_3==predict_class)
部分重要运行结果:
当然SPSS作为一款成熟的软件包也是可以完成这个任务的,而且功能也很丰富强大的。
不过R 的优势在于它的灵活性、可扩展性和强大的社区支持,使其成为统计分析、数据科学和机器学习领域的首选工具。
然而,对于那些更喜欢图形界面或不需要复杂编程的人来说,SPSS 仍然是一个不错的选择。选择哪个工具取决于你的具体需求和偏好。
参考资料
1、聚类分析的代码是学习借鉴了我们多元统计授课老师的代码
2、判别分析的代码则是我学习借鉴了B站一位老师的讲解视频得到的
链接是:
【判别分析在R中的实现——教材案例5.1讲评】https://www.bilibili.com/video/BV1Sd4y1v728?vd_source=57666171e463927ad266e541d52cf678
3、数据是朱红兵、吴喜之老师的SPSS统计分析第7版小康指数数据,当然我也进行了加工处理哈。
","description":"R语言聚类分析,如何导出将分类结果? 佐手牵鼬手的回答\\n\\n\\n我感觉自己用R语言搞定了进行数据的聚类分析和判别分析之后,自己对R语言和多元统计的兴趣和理解都相应得到提高和加深了。\\n\\n当然进行判别分析之前首先是要进行聚类分析的。\\n\\n数据大致浏览:\\n\\n1、聚类分析实现\\n\\n聚类分析是一种无监督学习方法,它试图根据数据的内在结构将一组对象划分为若干个簇(clusters),使得同一个簇内的对象尽可能相似,而不同簇之间的对象尽可能不同。\\n\\n我们是生产2类哈,利用Wald法。\\n\\nR代码\\n\\n读取数据:\\n\\nlibrary(readxl)\\nd <- read_excel(\\"小康指数.xls\\")\\nd<-as…","guid":"https://www.zhihu.com/question/27859730/answer/63897620581","author":"佐手牵鼬手","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-25T13:05:00.489Z","media":[{"url":"https://pic1.zhimg.com/v2-6c86898e594563f92d7e21092573a6e0.jpg","type":"photo","width":654,"height":753,"blurhash":"L8R{#?~qIU_3~qofofofWBfQofj["},{"url":"https://pic1.zhimg.com/v2-c4f764052d94990b2e02b14d3cc9083f.jpg","type":"photo","width":765,"height":238,"blurhash":"LCQ,L2_3%M_3_4IVj?%M%NM|Rj%L"},{"url":"https://picx.zhimg.com/v2-fb353c6913ddf947d5c2bf0f0c514d65.jpg","type":"photo","width":664,"height":664,"blurhash":"LESigQ?b%M?b~qRjWBfQayoft7of"},{"url":"https://pica.zhimg.com/v2-b2d69931e22713895e0c240a8b1c0757.jpg","type":"photo","width":664,"height":664,"blurhash":"LJSs50~qIT_3?bogWBofxuM{t7WB"},{"url":"https://pic1.zhimg.com/v2-9057bb0e7d0d07b65b0730e63bf4cc43.jpg","type":"photo","width":1280,"height":709,"blurhash":"LDS~x6_3of?b~qWBRjj[xtazj@of"},{"url":"https://picx.zhimg.com/v2-137ae68e849c70a5c9606b84629dbe73.jpg","type":"photo","width":851,"height":581,"blurhash":"LERymQM{Mx?b_NoztRNG-=IURje:"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"怎么看一个时间序列的趋势,季节性?-人大博士交易之路的回答:从时间维度上,我们可以假设走势是时间信息序列,而时间信息序列是可以划分的。因而,我们可以 从...","url":"https://www.zhihu.com/question/499853193/answer/63878270040","content":"怎么看一个时间序列的趋势,季节性?从时间维度上,我们可以假设走势是时间信息序列,而时间信息序列是可以划分的。因而,我们可以从时间维度上,对走势进行分类。例如普通人都能想到的上涨阶段、下跌阶段,就是从时间维度上考虑的。
在网页爬取过程中,选择合适的数据存储结构至关重要。R 语言中有两种常用的数据存储结构:传统数据框(data.frame)和现代的 tibble(来自 tibble
包)。两者在性能、灵活性和兼容性方面各有优劣。
同时,百度搜索作为中国最受欢迎的搜索引擎,其关键词排名数据可以精准反映用户的搜索意图和当前的网络热点。这些关键词排名数据在舆情监控、市场调研、用户需求分析等领域中具有重要价值。例如,通过采集百度搜索前十排名的链接,可以快速了解热门话题或特定关键词的受欢迎程度,从而为决策提供数据支持。
本文将探讨传统数据框与 tibble 的差异,并通过从百度搜索获取排名前十的关键词链接为例,分析两者在网页爬取数据存储中的表现。
属性 | 传统数据框 | tibble |
---|---|---|
性能 | 操作速度较慢,特别是大规模数据处理时表现较差。 | 优化性能,适合大数据集的存储与处理。 |
灵活性 | 不支持嵌套列表或复杂结构,列名需遵循规则。 | 支持复杂结构,如嵌套列表,列名可以包含特殊字符。 |
易用性 | 在控制台打印时输出所有数据,易导致信息过载。 | 更友好的打印方式,仅显示前几行,提高可读性。 |
兼容性 | 与 R 的基础函数完全兼容。 | 与 tidyverse 套件完美集成,但可能需要额外学习成本。 |
以下代码展示了如何结合代理 IP 和多线程技术,从百度搜索中爬取排名前十的关键词链接,并将数据存储为 tibble。
library(httr)\\nlibrary(rvest)\\nlibrary(tibble)\\nlibrary(future)\\nlibrary(furrr)\\n\\n# 配置爬虫代理参数 亿牛云爬虫代理加强版 www.16yun.cn\\nproxy_ip <- \\"proxy.16yun.cn\\" # 替换为亿牛云提供的IP\\nproxy_port <- 12345 # 替换为亿牛云提供的端口\\nproxy_user <- \\"用户名\\" # 替换为亿牛云用户名\\nproxy_pass <- \\"密码\\" # 替换为亿牛云密码\\n\\n# 自定义函数:从百度搜索获取前十排名链接\\nfetch_baidu_links <- function(keyword) {\\n # 构建百度搜索 URL\\n url <- paste0(\\"https://www.baidu.com/s?wd=\\", URLencode(keyword))\\n\\n # 配置请求头信息\\n headers <- add_headers(\\n \\"User-Agent\\" = \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.1 Safari/537.36\\",\\n \\"Cookie\\" = \\"your_cookie_here\\"\\n )\\n\\n # 配置爬虫代理信息\\n proxy <- use_proxy(\\n url = paste0(\\"http://\\", proxy_ip, \\":\\", proxy_port),\\n username = proxy_user,\\n password = proxy_pass\\n )\\n\\n # 发送请求\\n response <- GET(url, headers, proxy)\\n\\n # 检查响应状态并解析 HTML\\n if (status_code(response) == 200) {\\n page <- read_html(content(response, \\"text\\", encoding = \\"UTF-8\\"))\\n\\n # 提取搜索结果链接\\n links <- page %>%\\n html_nodes(\\".t a\\") %>% # 根据百度搜索的HTML结构定位\\n html_attr(\\"href\\") %>%\\n head(10) # 获取前10个链接\\n\\n return(links)\\n } else {\\n warning(\\"Failed to fetch search results for keyword: \\", keyword)\\n return(NULL)\\n }\\n}\\n\\n# 目标关键词列表\\nkeywords <- c(\\"R语言爬虫\\", \\"数据分析工具\\", \\"Python与R比较\\")\\n\\n# 使用多线程技术并行爬取关键词排名\\nplan(multisession) # 设置多线程计划\\nresults <- future_map(keywords, fetch_baidu_links)\\n\\n# 转换为 tibble\\ndata <- tibble(\\n keyword = keywords,\\n top_links = results\\n)\\n\\n# 输出结果\\nprint(data)\\n\\n# 保存结果为 CSV\\nwrite.csv(data, \\"baidu_top_links.csv\\", row.names = FALSE)
百度搜索的关键词排名数据能帮助开发者快速捕捉网络热点并获得用户行为洞察。在网页爬取数据存储方面,传统数据框和 tibble 各具优势:
通过结合代理 IP 和多线程技术,以上代码提供了一种高效采集百度搜索排名数据的解决方案,并展示了 tibble 的灵活性和性能优势。
","description":"用R语言的公司多吗? 亿牛云爬虫专家的回答\\n\\n爬虫代理加强版\\n\\n\\n\\n\\n概述\\n\\n在网页爬取过程中,选择合适的数据存储结构至关重要。R 语言中有两种常用的数据存储结构:传统数据框(data.frame)和现代的 tibble(来自 tibble 包)。两者在性能、灵活性和兼容性方面各有优劣。\\n\\n同时,百度搜索作为中国最受欢迎的搜索引擎,其关键词排名数据可以精准反映用户的搜索意图和当前的网络热点。这些关键词排名数据在舆情监控、市场调研、用户需求分析等领域中具有重要价值。例如,通过采集百度搜索前十排名的链接,可以快速了解热门话题或特定关键词的受欢迎程度,从而为决策提供数据支持。\\n\\n本文将探…","guid":"https://www.zhihu.com/question/31193425/answer/62735113779","author":"亿牛云爬虫专家","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-24T06:21:54.942Z","media":[{"url":"https://picx.zhimg.com/v2-8a6ce2b1dc96908691a6249046cca014.jpg","type":"photo","width":1024,"height":1024,"blurhash":"LH6l*}kCMJj[o#kCaeaeHqaetlkC"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"tibble 和传统数据框:哪个更适合网页爬取的数据存储","url":"https://zhuanlan.zhihu.com/p/14376281315","content":"[图片] 概述在网页爬取过程中,选择合适的数据存储结构至关重要。R 语言中有两种常用的数据存储结构:传统数据框(data.frame)和现代的 tibble(来自 tibble 包)。两者在性能、灵活性和兼容性方面各有优劣。同时,百度搜索作为中国最受欢迎的搜索引擎,其关键词排名数据可以精准反映用户的搜索意图和当前的网络热点。这些关键词排名数据在舆情监控、市场调研、用户需求分析等领域中具有重要价值。例如,通过采集百度搜索前十排名的链…","description":"[图片] 概述在网页爬取过程中,选择合适的数据存储结构至关重要。R 语言中有两种常用的数据存储结构:传统数据框(data.frame)和现代的 tibble(来自 tibble 包)。两者在性能、灵活性和兼容性方面各有优劣。同时,百度搜索作为中国最受欢迎的搜索引擎,其关键词排名数据可以精准反映用户的搜索意图和当前的网络热点。这些关键词排名数据在舆情监控、市场调研、用户需求分析等领域中具有重要价值。例如,通过采集百度搜索前十排名的链…","guid":"https://zhuanlan.zhihu.com/p/14376281315","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-24T06:21:53.156Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?-苍穹之翼DIY的回答:这个内存拉满具体是什么程度,有明确的数据吗...","url":"https://www.zhihu.com/question/7314355600/answer/62625380721","content":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?这个内存拉满具体是什么程度,有明确的数据吗?比如说越大越好,不限上限。还是说48GB就够用?64GB才够用?
因为内存这玩意,在不溢出的前提下,多余的容量并不提升性能,却提升成本。4根插满和只插2根,性能也不一样,前者是负面的。
至于黑神话,只要RTX4060这个级别的显卡就可以流畅的玩。毕竟这是一台工作用的机器,没必要投入过多预算给显卡。
建议的配置单如下:
这一套先上了64GB内存。如果不够用,就再加一对,128GB是目前性价比还OK的情况下能上的上限了。
48GB*4这种搭配,成本太高。
希望对你有帮助。
","description":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ? 苍穹之翼DIY的回答\\n\\n\\n这个内存拉满具体是什么程度,有明确的数据吗?比如说越大越好,不限上限。还是说48GB就够用?64GB才够用?\\n\\n因为内存这玩意,在不溢出的前提下,多余的容量并不提升性能,却提升成本。4根插满和只插2根,性能也不一样,前者是负面的。\\n\\n至于黑神话,只要RTX4060这个级别的显卡就可以流畅的玩。毕竟这是一台工作用的机器,没必要投入过多预算给显卡。\\n\\n建议的配置单如下:\\n\\n这一套先上了64GB内存。如果不够用,就再加一对…","guid":"https://www.zhihu.com/question/7314355600/answer/62625380721","author":"苍穹之翼DIY","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-24T04:10:25.442Z","media":[{"url":"https://pic1.zhimg.com/v2-12c1499ac2c370ae896de0760f5fc79f.jpg","type":"photo","width":619,"height":454,"blurhash":"LKQvtEo}%Ox]~qk9oJoeItozRhax"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在没有网的条件下安装R的库?-张敬信的回答:[图片]","url":"https://www.zhihu.com/question/7641619672/answer/62575430360","content":"如何在没有网的条件下安装R的库?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:4]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data = data, mapping = aes(x = x, y = y)) +\\n geom_pointdensity() +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.text = element_text(size = 12),\\n legend.title = element_text(size = 16)) +\\n guides(color=guide_colorbar(\\"Density\\", barwidth = unit(1, \\"cm\\"), \\n barheight = unit(6, \\"cm\\"))) +\\n scale_color_gradientn(colours = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/scatter-density.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
点个关注,防止迷路! 同名公众号:科研R
科研中R语言绘图可以说独占鳌头,以其强大的绘图功能深得科研工作者的喜爱,那么在进行绘图之前,我们需要对原始数据进行一系列的处理和操作,本文将着重介绍R语言中tidyverse中的一些常用函数,如何对数据进行初步的处理,拒绝水文,满满干货,请各位看官收藏细品。
那么在画图之前我们还需要对数据来进行格式处理,是否还记得在ggplot2进行可视化时需要给aes
传入2个美学参数
,一个作为X另一个为Y,但是我们通常手里边的数据有很多列,在R中将其定义为宽表,而ggplot函数需要的数据格式在R中我们定义为长表,因此第一步即宽表转长表
如下图所示:
下面我们创建数据集来演示一下:
df <- data.frame(state = c(\\"Maine\\", \\"Massachusetts\\", \\n \\"New Hampshire\\", \\"Vermont\\"),\\n male_fulltime = c(50329,66066, 59962, 50530), \\n male_other = c(18099, 18574, 20274, 17709), \\n female_fulltime = c(40054, 53841, 46178, 42198),\\n female_other = c(13781, 14981, 15121, 14422))\\n\\ndf\\n
## state male_fulltime male_other female_fulltime female_other\\n## 1 Maine 50329 18099 40054 13781\\n## 2 Massachusetts 66066 18574 53841 14981\\n## 3 New Hampshire 59962 20274 46178 15121\\n## 4 Vermont 50530 17709 42198 14422\\n
df2.long <- pivot_longer(df,cols = -state, \\n names_to = c(\\"sex\\",\\"work\\"), \\n names_sep = \\"_\\", \\n values_to = \\"income\\")\\ndf2.long\\n
## # A tibble: 16 x 4\\n## state sex work income\\n## <chr> <chr> <chr> <dbl>\\n## 1 Maine male fulltime 50329\\n## 2 Maine male other 18099\\n## 3 Maine female fulltime 40054\\n## 4 Maine female other 13781\\n## 5 Massachusetts male fulltime 66066\\n## 6 Massachusetts male other 18574\\n## 7 Massachusetts female fulltime 53841\\n## 8 Massachusetts female other 14981\\n## 9 New Hampshire male fulltime 59962\\n## 10 New Hampshire male other 20274\\n## 11 New Hampshire female fulltime 46178\\n## 12 New Hampshire female other 15121\\n## 13 Vermont male fulltime 50530\\n## 14 Vermont male other 17709\\n## 15 Vermont female fulltime 42198\\n## 16 Vermont female other 14422\\n
可以看到通过pivot_longer( )函数很轻松完成了宽表转长表
pivot_longer()
函数有三个主要的参数cols
,表示哪些列需要转换names_to
,表示cols选取的这些列的名字,构成了新的一列或多列;需要给定名称values_to
,表示cols选取的这些列的值,构成了新的一列,同样要给定名称经过上面的格式转换我们得到了需要的数据,接下来进行一个简单的可视化
df2.long %>% ggplot(aes(sex,income,fill=state))+\\n geom_boxplot()+theme_classic()\\n
在某些时刻我们可能还需要进行长表转宽表,让我们通过下面的代码来学习
pivot_wider(df2.long, \\n names_from = c(sex,work), \\n values_from = income,\\n names_sep = \\".\\")\\n
## # A tibble: 4 x 5\\n## state male.fulltime male.other female.fulltime female.other\\n## <chr> <dbl> <dbl> <dbl> <dbl>\\n## 1 Maine 50329 18099 40054 13781\\n## 2 Massachusetts 66066 18574 53841 14981\\n## 3 New Hampshire 59962 20274 46178 15121\\n## 4 Vermont 50530 17709 42198 14422\\n
select
选择列基础要选择几列,只需在select
函数中添加其名称即可。添加它们的顺序将确定它们在输出中出现的顺序
msleep %>%\\n select(name, genus, sleep_total, awake) \\n
## # A tibble: 83 x 4\\n## name genus sleep_total awake\\n## <chr> <chr> <dbl> <dbl>\\n## 1 Cheetah Acinonyx 12.1 11.9\\n## 2 Owl monkey Aotus 17 7 \\n## 3 Mountain beaver Aplodontia 14.4 9.6\\n## 4 Greater short-tailed shrew Blarina 14.9 9.1\\n## 5 Cow Bos 4 20 \\n## 6 Three-toed sloth Bradypus 14.4 9.6\\n## 7 Northern fur seal Callorhinus 8.7 15.3\\n## 8 Vesper mouse Calomys 7 17 \\n## 9 Dog Canis 10.1 13.9\\n## 10 Roe deer Capreolus 3 21 \\n## # ... with 73 more rows\\n
如果要添加大量的列,可以使用start_col:end_col
的语句:
msleep %>%\\n select(name:order,sleep_cycle:brainwt)\\n
## # A tibble: 83 x 7\\n## name genus vore order sleep_cycle awake brainwt\\n## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>\\n## 1 Cheetah Acinonyx carni Carnivora NA 11.9 NA \\n## 2 Owl monkey Aotus omni Primates NA 7 0.0155 \\n## 3 Mountain beaver Aplodontia herbi Rodentia NA 9.6 NA \\n## 4 Greater short-tailed ~ Blarina omni Soricomor~ 0.133 9.1 0.00029\\n## 5 Cow Bos herbi Artiodact~ 0.667 20 0.423 \\n## 6 Three-toed sloth Bradypus herbi Pilosa 0.767 9.6 NA \\n## 7 Northern fur seal Callorhin~ carni Carnivora 0.383 15.3 NA \\n## 8 Vesper mouse Calomys <NA> Rodentia NA 17 NA \\n## 9 Dog Canis carni Carnivora 0.333 13.9 0.07 \\n## 10 Roe deer Capreolus herbi Artiodact~ NA 21 0.0982 \\n## # ... with 73 more rows\\n
还可以通过在列名称前面添加减号
来取消列
msleep %>% \\n select(-conservation, -(sleep_total:awake))\\n
## # A tibble: 83 x 6\\n## name genus vore order brainwt bodywt\\n## <chr> <chr> <chr> <chr> <dbl> <dbl>\\n## 1 Cheetah Acinonyx carni Carnivora NA 50 \\n## 2 Owl monkey Aotus omni Primates 0.0155 0.48 \\n## 3 Mountain beaver Aplodontia herbi Rodentia NA 1.35 \\n## 4 Greater short-tailed shrew Blarina omni Soricomorpha 0.00029 0.019\\n## 5 Cow Bos herbi Artiodactyla 0.423 600 \\n## 6 Three-toed sloth Bradypus herbi Pilosa NA 3.85 \\n## 7 Northern fur seal Callorhinus carni Carnivora NA 20.5 \\n## 8 Vesper mouse Calomys <NA> Rodentia NA 0.045\\n## 9 Dog Canis carni Carnivora 0.07 14 \\n## 10 Roe deer Capreolus herbi Artiodactyla 0.0982 14.8 \\n## # ... with 73 more rows\\n\\n
如果有很多的列具有相似的结构,可以通过starts_with(),ends_with()
或contains( )
来进行选择
msleep %>% select(name, starts_with(\\"sleep\\")) \\n\\n## # A tibble: 83 x 4\\n## name sleep_total sleep_rem sleep_cycle\\n## <chr> <dbl> <dbl> <dbl>\\n## 1 Cheetah 12.1 NA NA \\n## 2 Owl monkey 17 1.8 NA \\n## 3 Mountain beaver 14.4 2.4 NA \\n## 4 Greater short-tailed shrew 14.9 2.3 0.133\\n## 5 Cow 4 0.7 0.667\\n## 6 Three-toed sloth 14.4 2.2 0.767\\n## 7 Northern fur seal 8.7 1.4 0.383\\n## 8 Vesper mouse 7 NA NA \\n## 9 Dog 10.1 2.9 0.333\\n## 10 Roe deer 3 NA NA \\n## # ... with 73 more rows\\n
msleep %>%\\n select(contains(\\"eep\\"), ends_with(\\"wt\\"))\\n\\n## # A tibble: 83 x 5\\n## sleep_total sleep_rem sleep_cycle brainwt bodywt\\n## <dbl> <dbl> <dbl> <dbl> <dbl>\\n## 1 12.1 NA NA NA 50 \\n## 2 17 1.8 NA 0.0155 0.48 \\n## 3 14.4 2.4 NA NA 1.35 \\n## 4 14.9 2.3 0.133 0.00029 0.019\\n## 5 4 0.7 0.667 0.423 600 \\n## 6 14.4 2.2 0.767 NA 3.85 \\n## 7 8.7 1.4 0.383 NA 20.5 \\n## 8 7 NA NA NA 0.045\\n## 9 10.1 2.9 0.333 0.07 14 \\n## 10 3 NA NA 0.0982 14.8 \\n## # ... with 73 more rows\\n
如果列名没有相似性,则可以使用matches()
来进行选择;以下示例代码将添加包含“o”后跟一个或多个其他字母和“er”的列
msleep %>% select(matches(\\"o.+er\\")) \\n\\n## # A tibble: 83 x 2\\n## order conservation\\n## <chr> <chr> \\n## 1 Carnivora lc \\n## 2 Primates <NA> \\n## 3 Rodentia nt \\n## 4 Soricomorpha lc \\n## 5 Artiodactyla domesticated\\n## 6 Pilosa <NA> \\n## 7 Carnivora vu \\n## 8 Rodentia <NA> \\n## 9 Carnivora domesticated\\n## 10 Artiodactyla lc \\n## # ... with 73 more rows\\n
class <- c(\\"name\\", \\"genus\\", \\"vore\\", \\"order\\", \\"conservation\\")\\n\\nmsleep %>% select(!!class)\\n\\n## # A tibble: 83 x 5\\n## name genus vore order conservation\\n## <chr> <chr> <chr> <chr> <chr> \\n## 1 Cheetah Acinonyx carni Carnivora lc \\n## 2 Owl monkey Aotus omni Primates <NA> \\n## 3 Mountain beaver Aplodontia herbi Rodentia nt \\n## 4 Greater short-tailed shrew Blarina omni Soricomorpha lc \\n## 5 Cow Bos herbi Artiodactyla domesticated\\n## 6 Three-toed sloth Bradypus herbi Pilosa <NA> \\n## 7 Northern fur seal Callorhinus carni Carnivora vu \\n## 8 Vesper mouse Calomys <NA> Rodentia <NA> \\n## 9 Dog Canis carni Carnivora domesticated\\n## 10 Roe deer Capreolus herbi Artiodactyla lc \\n## # ... with 73 more rows\\n
select_if( )
函数来判断数据类型,可以使用其来选择所有字符串列select_if(is.character)。同样也可以添加is.numeric,is.integer,is.double,is.logical,is.factor等列;如果有日期列,则可以加载lubridate包
,然后使用 is.POSIXt或is.Date来进行格式转换
msleep %>% select_if(is.numeric) \\n\\n## # A tibble: 83 x 6\\n## sleep_total sleep_rem sleep_cycle awake brainwt bodywt\\n## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\\n## 1 12.1 NA NA 11.9 NA 50 \\n## 2 17 1.8 NA 7 0.0155 0.48 \\n## 3 14.4 2.4 NA 9.6 NA 1.35 \\n## 4 14.9 2.3 0.133 9.1 0.00029 0.019\\n## 5 4 0.7 0.667 20 0.423 600 \\n## 6 14.4 2.2 0.767 9.6 NA 3.85 \\n## 7 8.7 1.4 0.383 15.3 NA 20.5 \\n## 8 7 NA NA 17 NA 0.045\\n## 9 10.1 2.9 0.333 13.9 0.07 14 \\n## 10 3 NA NA 21 0.0982 14.8 \\n## # ... with 73 more rows\\n
同样也可以取反,选择不需要那种数据类型的列
msleep %>% select_if(~!is.numeric(.))\\n\\n## # A tibble: 83 x 5\\n## name genus vore order conservation\\n## <chr> <chr> <chr> <chr> <chr> \\n## 1 Cheetah Acinonyx carni Carnivora lc \\n## 2 Owl monkey Aotus omni Primates <NA> \\n## 3 Mountain beaver Aplodontia herbi Rodentia nt \\n## 4 Greater short-tailed shrew Blarina omni Soricomorpha lc \\n## 5 Cow Bos herbi Artiodactyla domesticated\\n## 6 Three-toed sloth Bradypus herbi Pilosa <NA> \\n## 7 Northern fur seal Callorhinus carni Carnivora vu \\n## 8 Vesper mouse Calomys <NA> Rodentia <NA> \\n## 9 Dog Canis carni Carnivora domesticated\\n## 10 Roe deer Capreolus herbi Artiodactyla lc \\n## # ... with 73 more rows\\n
select_if( )
不仅仅是基于数据类型来进行选择。还可以选择所有列平均值大于10的列。mean > 10它本身不是函数,因此需要在前面添加波浪号,或使用funs()
将语句转换为函数
msleep %>% select_if(is.numeric) %>% \\n select_if(~mean(., na.rm=TRUE) > 10)\\n\\n## # A tibble: 83 x 3\\n## sleep_total awake bodywt\\n## <dbl> <dbl> <dbl>\\n## 1 12.1 11.9 50 \\n## 2 17 7 0.48 \\n## 3 14.4 9.6 1.35 \\n## 4 14.9 9.1 0.019\\n## 5 4 20 600 \\n## 6 14.4 9.6 3.85 \\n## 7 8.7 15.3 20.5 \\n## 8 7 17 0.045\\n## 9 10.1 13.9 14 \\n## 10 3 21 14.8 \\n## # ... with 73 more rows\\n
也可以这样写
msleep %>%\\n select_if(~is.numeric(.) & mean(., na.rm=TRUE) > 10)\\n\\n## # A tibble: 83 x 3\\n## sleep_total awake bodywt\\n## <dbl> <dbl> <dbl>\\n## 1 12.1 11.9 50 \\n## 2 17 7 0.48 \\n## 3 14.4 9.6 1.35 \\n## 4 14.9 9.1 0.019\\n## 5 4 20 600 \\n## 6 14.4 9.6 3.85 \\n## 7 8.7 15.3 20.5 \\n## 8 7 17 0.045\\n## 9 10.1 13.9 14 \\n## 10 3 21 14.8 \\n## # ... with 73 more rows\\n
另一个有用的select_if参数是n_distinct()
,它可以在列中找到的不同值出现的数量
msleep %>% select_if(~n_distinct(.) < 10)\\n\\n## # A tibble: 83 x 2\\n## vore conservation\\n## <chr> <chr> \\n## 1 carni lc \\n## 2 omni <NA> \\n## 3 herbi nt \\n## 4 omni lc \\n## 5 herbi domesticated\\n## 6 herbi <NA> \\n## 7 carni vu \\n## 8 <NA> <NA> \\n## 9 carni domesticated\\n## 10 herbi lc \\n## # ... with 73 more rows\\n
everything()
函数可将选择的列移至表格最前
msleep %>%\\n select(conservation, sleep_total, everything())\\n\\n## # A tibble: 83 x 11\\n## conservation sleep_total name genus vore order sleep_rem sleep_cycle awake\\n## <chr> <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>\\n## 1 lc 12.1 Cheet~ Acin~ carni Carn~ NA NA 11.9\\n## 2 <NA> 17 Owl m~ Aotus omni Prim~ 1.8 NA 7 \\n## 3 nt 14.4 Mount~ Aplo~ herbi Rode~ 2.4 NA 9.6\\n## 4 lc 14.9 Great~ Blar~ omni Sori~ 2.3 0.133 9.1\\n## 5 domesticated 4 Cow Bos herbi Arti~ 0.7 0.667 20 \\n## 6 <NA> 14.4 Three~ Brad~ herbi Pilo~ 2.2 0.767 9.6\\n## 7 vu 8.7 North~ Call~ carni Carn~ 1.4 0.383 15.3\\n## 8 <NA> 7 Vespe~ Calo~ <NA> Rode~ NA NA 17 \\n## 9 domesticated 10.1 Dog Canis carni Carn~ 2.9 0.333 13.9\\n## 10 lc 3 Roe d~ Capr~ herbi Arti~ NA NA 21 \\n## # ... with 73 more rows, and 2 more variables: brainwt <dbl>, bodywt <dbl>\\n\\n
msleep %>%\\n select(animal = name, sleep_total, extinction_threat = conservation)\\n\\n## # A tibble: 83 x 3\\n## animal sleep_total extinction_threat\\n## <chr> <dbl> <chr> \\n## 1 Cheetah 12.1 lc \\n## 2 Owl monkey 17 <NA> \\n## 3 Mountain beaver 14.4 nt \\n## 4 Greater short-tailed shrew 14.9 lc \\n## 5 Cow 4 domesticated \\n## 6 Three-toed sloth 14.4 <NA> \\n## 7 Northern fur seal 8.7 vu \\n## 8 Vesper mouse 7 <NA> \\n## 9 Dog 10.1 domesticated \\n## 10 Roe deer 3 lc \\n## # ... with 73 more rows\\n
也可以通过rename()
函数来重命名
msleep %>% \\n rename(animal = name, extinction_threat = conservation)\\n\\n## # A tibble: 83 x 11\\n## animal genus vore order extinction_thre~ sleep_total sleep_rem sleep_cycle\\n## <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>\\n## 1 Cheetah Acin~ carni Carn~ lc 12.1 NA NA \\n## 2 Owl mon~ Aotus omni Prim~ <NA> 17 1.8 NA \\n## 3 Mountai~ Aplo~ herbi Rode~ nt 14.4 2.4 NA \\n## 4 Greater~ Blar~ omni Sori~ lc 14.9 2.3 0.133\\n## 5 Cow Bos herbi Arti~ domesticated 4 0.7 0.667\\n## 6 Three-t~ Brad~ herbi Pilo~ <NA> 14.4 2.2 0.767\\n## 7 Norther~ Call~ carni Carn~ vu 8.7 1.4 0.383\\n## 8 Vesper ~ Calo~ <NA> Rode~ <NA> 7 NA NA \\n## 9 Dog Canis carni Carn~ domesticated 10.1 2.9 0.333\\n## 10 Roe deer Capr~ herbi Arti~ lc 3 NA NA \\n## # ... with 73 more rows, and 3 more variables: awake <dbl>, brainwt <dbl>,\\n## # bodywt <dbl>\\n
select_all()
函数允许更改所有列,并以一个函数作为参数。要以大写
形式获取所有列名称,可以使用toupper()
,也可以使用tolower()
将其全部转化为小写
msleep %>% select_all(toupper)\\n\\n## # A tibble: 83 x 11\\n## NAME GENUS VORE ORDER CONSERVATION SLEEP_TOTAL SLEEP_REM SLEEP_CYCLE AWAKE\\n## <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>\\n## 1 Cheet~ Acin~ carni Carn~ lc 12.1 NA NA 11.9\\n## 2 Owl m~ Aotus omni Prim~ <NA> 17 1.8 NA 7 \\n## 3 Mount~ Aplo~ herbi Rode~ nt 14.4 2.4 NA 9.6\\n## 4 Great~ Blar~ omni Sori~ lc 14.9 2.3 0.133 9.1\\n## 5 Cow Bos herbi Arti~ domesticated 4 0.7 0.667 20 \\n## 6 Three~ Brad~ herbi Pilo~ <NA> 14.4 2.2 0.767 9.6\\n## 7 North~ Call~ carni Carn~ vu 8.7 1.4 0.383 15.3\\n## 8 Vespe~ Calo~ <NA> Rode~ <NA> 7 NA NA 17 \\n## 9 Dog Canis carni Carn~ domesticated 10.1 2.9 0.333 13.9\\n## 10 Roe d~ Capr~ herbi Arti~ lc 3 NA NA 21 \\n## # ... with 73 more rows, and 2 more variables: BRAINWT <dbl>, BODYWT <dbl>\\n\\n
将列名中的空格替换为下划线
msleep2 <- select(msleep, name, sleep_total, brainwt)\\ncolnames(msleep2) <- c(\\"name\\", \\"sleep total\\", \\"brain weight\\")\\n\\nmsleep2 %>%\\n select_all(~str_replace(., \\" \\", \\"_\\"))\\n\\n## # A tibble: 83 x 3\\n## name sleep_total brain_weight\\n## <chr> <dbl> <dbl>\\n## 1 Cheetah 12.1 NA \\n## 2 Owl monkey 17 0.0155 \\n## 3 Mountain beaver 14.4 NA \\n## 4 Greater short-tailed shrew 14.9 0.00029\\n## 5 Cow 4 0.423 \\n## 6 Three-toed sloth 14.4 NA \\n## 7 Northern fur seal 8.7 NA \\n## 8 Vesper mouse 7 NA \\n## 9 Dog 10.1 0.07 \\n## 10 Roe deer 3 0.0982 \\n## # ... with 73 more rows\\n
还可以使用select_all与str_replace来消除多余的字符
msleep2 <- select(msleep, name, sleep_total, brainwt)\\ncolnames(msleep2) <- c(\\"Q1 name\\", \\"Q2 sleep total\\", \\"Q3 brain weight\\")\\nmsleep2[1:3,]\\n\\n## # A tibble: 3 x 3\\n## `Q1 name` `Q2 sleep total` `Q3 brain weight`\\n## <chr> <dbl> <dbl>\\n## 1 Cheetah 12.1 NA \\n## 2 Owl monkey 17 0.0155\\n## 3 Mountain beaver 14.4 NA\\n\\nmsleep2 %>%\\n select_all(~str_replace(., \\"Q[0-9]+\\", \\"\\")) %>% \\n select_all(~str_replace(., \\" \\", \\"_\\")) \\n\\n## # A tibble: 83 x 3\\n## `_name` `_sleep total` `_brain weight`\\n## <chr> <dbl> <dbl>\\n## 1 Cheetah 12.1 NA \\n## 2 Owl monkey 17 0.0155 \\n## 3 Mountain beaver 14.4 NA \\n## 4 Greater short-tailed shrew 14.9 0.00029\\n## 5 Cow 4 0.423 \\n## 6 Three-toed sloth 14.4 NA \\n## 7 Northern fur seal 8.7 NA \\n## 8 Vesper mouse 7 NA \\n## 9 Dog 10.1 0.07 \\n## 10 Roe deer 3 0.0982 \\n## # ... with 73 more rows\\n
某些数据框的行名本身实际上并不是一列,例如mtcars数据集
mpg cyl disp hp drat wt qsec vs am gear carb\\nMazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4\\nMazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4\\nDatsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1\\nHornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1\\nHornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2\\nValiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1\\n
如果希望此列为实际列,则可以使用该 rownames_to_column()
函数,并指定新的列名称
mtcars %>%\\n tibble::rownames_to_column(\\"car_model\\") %>% head\\n\\n## car_model mpg cyl disp hp drat wt qsec vs am gear carb\\n## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4\\n## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4\\n## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1\\n## 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1\\n## 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2\\n## 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
作者张金昌、张英、董娜
读书目标:了解财务在数据时代的发展趋势。拓展拓展认知。
读书时间:2024年12月21-23日
目录:
第一章智能财务分析概论
第二章智能财务分析技术基础
第三章智能财务分析数据管理
第四章资产负债智能分析
第五章盈利能力智能分析
第六章现金流量智能分析
第七章营运能力与经营杠杆智能分析
第八章发展能力智能分析
第九章偿债能力智能分析
第十章智能财务分析工具
大概内容:
第一章智能财务分析概论
1.1智能财务分析方法
智能财务分析方法是通过准确计算法和因素穷尽法来回答财务分析问题,并将这种方法固化到计算机软件之中,让计算机软件能够自动分析并回答相关问题的方法。(分析思路、模型、经验)
1.1.1准确计算法
偿债能力准确计算法:
可用来还债的流动资产=期初流动资产*(1+流动资产利润率)流动资产周转次数的幂次方
1.1.2因素穷尽法(因素枚举法、层次分析法或决策树分析法)
它是从某个方面出发不断深入挖掘,考虑各种可能情况及其情况的组合,直到找出准确的分析结论为止的一种财务分析方法。
1.2智能财务分析方法创新要坚持的原则
1.2.1尽可能使用准确计算的方法
1.2.2尽可能穷尽各种可能情况
1.2.3尽可能基于企业自身数据
1.2.4尽可能使用能够洞察企业经营本质的方法
1.3智能财务分析的内容
1.3.112个关键决策问题的智能分析
经营、成本费用、资产结构、投融资的协调、偿债、盈利、增加负债、可动用资金、经营风险、盈亏平衡点、财务风险、现金流动的协调及有效性
1.3.2企业经营和财务状况11个方面的智能分析
利润、成本、经营协调写、现金流量、发展能力、资产结构、资本结构、运营能力、偿债能力、盈利能力、经营风险。
1.3.3★企业经营管理52个问题的智能分析
1.3.4传统财务分析方法和智能财务分析方法的区别
第二章智能财务分析技术基础
2.1物联网、大数据和云计算
2.2人工智能及智能机器人
2.2.1专家系统
2.2.2机器学习和深度学习技术
2.2.3机器人技术和财务机器人
2.3智能财务分析软件开发
2.3.1用Excel开发智能财务分析软件
①用Excel定义可自动、胜场、判断的图表和文字
②Excel软件实现智能财务分析存在的主要问题
2.3.2用软件编程语言开发智能分析软件
①J2EE平台
以J2EE为核心的技术线路
J2EE的优势:保留现有的IT资产、高效的开发、支持异构环境、可伸缩性、稳定的可用性
J2EE的四层模型
②Python语言:可移植性、丰富强大的库、可扩展性
③智能分析软件的技术架构
④智能分析软件的业务实现逻辑框架
第三章智能财务分析数据管理
3.1智能企业信息管理
3.1.1智能企业信息管理的内容
行业的4种划分标准
①国家统计局发布的国家行业标准,实际行业分类,共1860个细分行业
②中国证券监督管理委员会的行业划分,通常90多个;
③上市企业进行的“申万行业”分类,大概160多个
④国务院国有资产监督管理委员会为了进行企业之间的绩效考核和发布行业考核标准值,也进行了三级工业的划分
3.1.2智能企业信息管理应用的技巧
3.1.3智能企业信息管理应用的案例
3.2智能报表数据管理
3.2.1智能报表数据管理内容
3.2.2智能报表数据管理应用技巧
3.2.3智能报表数据管理案例分析
3.3数据智能导入
3.3.1数据智能内容
①自动识别分析主体
②自动识别报表名称
③自动进行科目匹配
④自动导入数据
⑤数据勾稽关系验证
⑥原始数据和导入数据比对
3.3.2数据智能导入应用技巧
3.4报表智能转换
3.4.1报表智能转换的内容
3.4.2报表智能转换应用技巧
3.4.3报表智能转换案例解读
3.5OCR识别导入
3.5.1OCR识别导入内容
3.5.2OCR识别导入应用技巧
3.5.3OCR识别导入案例解读
第四章资产负债智能分析
4.1资产智能分析
4.1.1资产分析的主要内容
①资产构成基本情况分析
②流动资产构成特点
③资产总额变化
④资产结构的合理性评价
⑤资产结构的变动情况
⑥资产结构分析指标
4.1.2资产智能分析应用技巧
4.1.3资产智能分析案例解读
4.2负债权益智能分析
4.2.1负债权益智能分析内容
①资本构成基本情况分析
②流动负债构成特点
③负债和权益变化趋势图
④资本结构分析
4.2.2负债权益智能分析应用技巧
4.2.3负债权益智能分析案例解读
第五章盈利能力智能分析
5.1利润构成智能分析
5.1.1利润构成智能分析内容
5.1.2利润构成智能分析应用技巧
5.1.3利润构成智能分析案例解析
5.2成本费用智能分析
5.2.1成本费用智能分析内容
成本费用构成基本情况分析
营业成本变化情况及原因分析
销售费用变化情况及合理性评价
管理费用变化情况及合理性评价
5.2.2成本费用智能分析应用技巧
5.2.3成本费用智能分析案例解析
5.3盈利能力智能分析
5.3.1盈利能力智能分析内容
经营业务的盈利能力分析
资产投资的汇报能力分析
资本投资的收益能力分析
成本投入的利润率分析
5.3.2盈利能力智能分析用用技巧
5.3.3盈利能力智能分析案例
第六章现金流量智能分析
6.1现金流量结构智能分析
6.1.1现金流量结构智能分析的基本内容
现金流入结构分析
现金流出结构分析
现金流量的稳定性分析
现金流量的变动趋势分析
6.1.2现金流量结构智能分析应用技巧
6.1.3现金流量结构智能分析的案例解析
6.2现金流量充足性智能分析
6.2.1现金流量充足性智能分析内容
投资现金满足能力分析
偿债现金满足能力分析
6.2.2现金流量充足性智能分析应用技巧
6.2.3现金流量充足性智能分析案例解析
6.3现金流量有效性智能分析
6.3.1现金流量有效性智能分析内容
利润含金量、现金周转速度、现金盈利能力
6.3.2现金流量有效性智能分析应用技巧
6.3.3现金流量有效性智能分析的案例解析
第七章营运能力与经营杠杆智能分析
7.1营运能力智能分析
7.1.1营运能力智能分析的基本内容
现有资产的周转速度
利用他人资产的能力
对资产结构的优化能力反映
7.1.2营运能力智能分析的应用技巧
7.1.3营运能力智能分析案例解析
7.2经营杠杆智能分析
7.2.1经营杠杆智能分析内容
财务杠杆系数
临界销售收入
筹资无差别收入
7.2.2经营杠杆智能分析应用技巧
7.2.3经营杠杆智能分析案例解析
第八章发展能力智能分析
8.1自我发展智能分析
8.1.1自我发展分析指标
可动用资金总额
可动用现金总额
可持续增长率
8.1.2自我发展能力智能分析应用技巧
8.1.3自我发展能力智力分析案例解析
8.2挖掘发展潜力能力分析
8.2.1挖掘发展潜力能力智能分析基本内容
企业收入增长率
总资产周转率增长率
净利润增长率
8.2.2挖掘发展潜力能力智能分析应用技巧
8.2.3挖掘发展潜力能力智能分析案例解析
第九章偿债能力智能分析
9.1企业支付能力分析
9.1.1企业支付能力分析的内容
账面现金支付能力
内在现金支付能力
新增现金支付能力
未来现金支付能力
9.1.2企业支付能力分析应用技巧
9.1.3企业支付能力案例解析
9.2短期偿债能力智能分析
9.2.1短期偿债能力智能分析内容
有息债务资本化比率
产权比率
有形净值债务率
或有负债率
流动比率
速动比率
现金比率
9.2.2短期还债能力智能分析应用技巧
9.2.3短期偿债能力智能分析案例解读
9.3长期还本付息能力智能分析
9.3.1长期还本付息能力分析内容
营业还债期
EBIT债务比
EBITD债务比
经营还债期
现金还债期
利息保障倍数
利息负担数
利息现金保障倍数
到期债务本息偿还率
收入短期借款比
9.3.2长期还本付息能力智能分析应用技巧
9.3.3长期付息能力智能分析案例解读
9.4偿债风险智能评价
9.4.1偿债风险智能评价主要内容
偿还期智能分析
流动性智能分析
9.4.2偿债风险智能评价应用技巧
9.4.3偿债风险智能评价案例解析
第十章智能财务分析工具
10.1智能企业对标
10.1.1智能企业对标内容
各方面对标:经营战略、客户满意度等
10.1.2智能企业对标应用
10.1.3智能企业对标案例解读
10.2智能行业比较
10.2.1智能行业比较内容
盈利能力
偿债能力
营运能力
发展能力
10.2.2智能行业比较应用
10.2.3智能行业比较案例解读
10.3自动进行杜邦分析
10.3.1杜邦分析内容
三因素:销售净利率、资产周转速度、资本结构
四因素:销售利润率、所得税率、资产周转率、权益乘数
五因素:息税前利润、利率、所得税率、资产周转率、资产负债率
六因素:营业利润率、利率、所得税税率、特殊项目贡献率、资产周转率、资产负债率
10.3.2智能杜邦分析应用
10.3.3杜邦分析案例解读
10.4自动进行沃尔比重分析
10.4.1沃尔比重自动分析内容
从企业还债能力角度评价
实际分数=实际值/标准值*权重
10.4.2沃尔比重分析应用
10.4.3沃尔比重分析案例解读
10.5其他常用分析方法
10.5.1Z计分模型
10.5.2巴萨利模型
10.5.3营运资产分析模型
10.5.4黑色倒闭模型
匆忙的翻阅一下,即使并非所有的企业用得上,可以感受一下“智慧税务”,或许也是这个原理。
","description":"经常做报表数据分析希望通过编程来实现部分办公自动化,作为零基础编程的人,哪种语言易于上手? 和之韵的回答\\n\\n\\n作者张金昌、张英、董娜\\n\\n读书目标:了解财务在数据时代的发展趋势。拓展拓展认知。\\n\\n读书时间:2024年12月21-23日\\n\\n目录:\\n\\n第一章智能财务分析概论\\n\\n第二章智能财务分析技术基础\\n\\n第三章智能财务分析数据管理\\n\\n第四章资产负债智能分析\\n\\n第五章盈利能力智能分析\\n\\n第六章现金流量智能分析\\n\\n第七章营运能力与经营杠杆智能分析\\n\\n第八章发展能力智能分析\\n\\n第九章偿债能力智能分析\\n\\n第十章智能财务分析工具\\n\\n大概内容:\\n\\n第一章智能财务分析概论\\n\\n1.1智能财务分析方法\\n\\n智能财务分析方法是通过准确计算法和因素穷尽法来…","guid":"https://www.zhihu.com/question/265102877/answer/62202838863","author":"和之韵","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T13:23:15.065Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何高效地使用RStudio?-deprecated的回答:我先有PyCharm使用经验,再用RStudio时,知道这本质就是一个代码编译器。随便看一期R或RStudio的教程就能上手。 复...","url":"https://www.zhihu.com/question/24504689/answer/62192395398","content":"如何高效地使用RStudio?我先有PyCharm使用经验,再用RStudio时,知道这本质就是一个代码编译器。随便看一期R或RStudio的教程就能上手。
复杂的功能不用去纠结,基本的四个框会用就行了。
对于小白来说,最重要的原则就是run时遇到了“错误”就不要再继续run了,后面的都没意义的。直接到发现错误的内容发给ChatGPT 或者其他AI进行debug
目前来说,ChatGPT 4o对R代码debug的水平基本就够了,不会出错。能用ChatGPT o1或更高级的模型更好。o1模型的缺点是不能上传Excel文件,ChatGPT不知道你的原始数据长什么样,只能靠你描述,因此,虽然编程能力强,但不一定能一步到位。而你可以把原始数据直接上传给ChatGPT 4o并提需求,让它写代码。
kimi之类的,看过2024年中旬精鼎的演示,代码能力还是有些差距,可能需要多跑几遍,比较浪费时间。
","description":"如何高效地使用RStudio? deprecated的回答\\n\\n\\n我先有PyCharm使用经验,再用RStudio时,知道这本质就是一个代码编译器。随便看一期R或RStudio的教程就能上手。\\n\\n复杂的功能不用去纠结,基本的四个框会用就行了。\\n\\n对于小白来说,最重要的原则就是run时遇到了“错误”就不要再继续run了,后面的都没意义的。直接到发现错误的内容发给ChatGPT 或者其他AI进行debug\\n\\n目前来说,ChatGPT 4o对R代码debug的水平基本就够了,不会出错。能用ChatGPT o1或更高级的模型更好。o1模型的缺点是不能上传Excel文件…","guid":"https://www.zhihu.com/question/24504689/answer/62192395398","author":"deprecated","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T13:06:09.167Z","media":[{"url":"https://pic1.zhimg.com/v2-ffc61948735e70121acf94d189834432.jpg","type":"photo","width":1722,"height":1470,"blurhash":"L055FAIU00M{~qM{4ntQx]s:M{Rj"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"朴素贝叶斯分类器在 R 语言中的应用","url":"https://zhuanlan.zhihu.com/p/12619812480","content":"朴素贝叶斯(Naive Bayes)是一种监督学习的非线性分类算法,在 R 语言中广泛应用。朴素贝叶斯分类器是一类基于贝叶斯定理的简单概率分类器,它假设特征之间相互独立(朴素假设)。 理论基础朴素贝叶斯算法基于贝叶斯定理。贝叶斯定理给出了事件 A 在事件 B 发生后的条件概率: 贝叶斯定理公式P(A|B) = P(B|A) * P(A) / P(B) 其中: P(A|B):给定 B 发生的情况下,A 发生的条件概率。P(B|A):给定 A 发生的情况下,B 发生的条件概…","description":"朴素贝叶斯(Naive Bayes)是一种监督学习的非线性分类算法,在 R 语言中广泛应用。朴素贝叶斯分类器是一类基于贝叶斯定理的简单概率分类器,它假设特征之间相互独立(朴素假设)。 理论基础朴素贝叶斯算法基于贝叶斯定理。贝叶斯定理给出了事件 A 在事件 B 发生后的条件概率: 贝叶斯定理公式P(A|B) = P(B|A) * P(A) / P(B) 其中: P(A|B):给定 B 发生的情况下,A 发生的条件概率。P(B|A):给定 A 发生的情况下,B 发生的条件概…","guid":"https://zhuanlan.zhihu.com/p/12619812480","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T12:25:56.505Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何在没有网的条件下安装R的库?-Kevin的回答:拷贝library文件到其他电脑对应的library文件夹中, 比如D:\\\\Program Files\\\\R\\\\R-4.3.2\\\\library, 拷贝到新电脑的lib...","url":"https://www.zhihu.com/question/7641619672/answer/62077300578","content":"如何在没有网的条件下安装R的库?免费啊。而且学习曲线非常平缓,如果初学一些常用的功能,你甚至不需要会写脚本,会导入csv和调包就行了。
统计软件没一个便宜的,知道我发现了jamovi。
","description":"统计专业大一新生,不懂为什么大伙都推荐得学R语言? 初心的回答\\n\\n\\n免费啊。而且学习曲线非常平缓,如果初学一些常用的功能,你甚至不需要会写脚本,会导入csv和调包就行了。\\n\\n统计软件没一个便宜的,知道我发现了jamovi。","guid":"https://www.zhihu.com/question/621098169/answer/62012671852","author":"初心","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T08:39:53.902Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"巴乔 小罗 谁的球感更好?-剩下的骨头的回答:不相伯仲。 巴乔灵动飘逸,第一脚触球绝对是历史T0的存在,同时代可比肩者唯有博格坎普和齐达内。 小罗号称足球精灵...","url":"https://www.zhihu.com/question/7608303130/answer/61877609886","content":"巴乔 小罗 谁的球感更好?不相伯仲。
巴乔灵动飘逸,第一脚触球绝对是历史T0的存在,同时代可比肩者唯有博格坎普和齐达内。
小罗号称足球精灵,球风华丽,爱炫技,这让他的有些动作显得刻意,没有巴乔的大巧不工,但他的空间感更好,经常用不间断的挑球戏耍对手。
这两个都是我喜爱的球员,如果硬要站队我选巴乔,和技术无关,纯粹是因为颜值!
","description":"巴乔 小罗 谁的球感更好? 剩下的骨头的回答\\n\\n\\n不相伯仲。\\n\\n巴乔灵动飘逸,第一脚触球绝对是历史T0的存在,同时代可比肩者唯有博格坎普和齐达内。\\n\\n小罗号称足球精灵,球风华丽,爱炫技,这让他的有些动作显得刻意,没有巴乔的大巧不工,但他的空间感更好,经常用不间断的挑球戏耍对手。\\n\\n这两个都是我喜爱的球员,如果硬要站队我选巴乔,和技术无关,纯粹是因为颜值!","guid":"https://www.zhihu.com/question/7608303130/answer/61877609886","author":"剩下的骨头","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T06:02:56.755Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"学统计可以不学c语言 直接学r语言吗?-linlol的回答:统计学锤子c语言.... 好好学统计,以后需要写吗的时候改成用python/R 别和我说什么python也是c写的这种鬼话...","url":"https://www.zhihu.com/question/661706033/answer/61789312139","content":"学统计可以不学c语言 直接学r语言吗?统计学锤子c语言....
好好学统计,以后需要写吗的时候改成用python/R
别和我说什么python也是c写的这种鬼话,你用python写两行代码你从x86的架构开始学起是吧?
","description":"学统计可以不学c语言 直接学r语言吗? linlol的回答\\n\\n\\n统计学锤子c语言....\\n\\n\\n\\n\\n好好学统计,以后需要写吗的时候改成用python/R\\n\\n\\n\\n\\n别和我说什么python也是c写的这种鬼话,你用python写两行代码你从x86的架构开始学起是吧?","guid":"https://www.zhihu.com/question/661706033/answer/61789312139","author":"linlol","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-23T03:57:19.521Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何利用R语言学习机器学习?-亿牛云爬虫专家的回答:[图片] 引言在网页爬取和数据分析中,将不同源的数据进行举体化和统一处理是一项关键操作。R语言中的 cbind...","url":"https://www.zhihu.com/question/403123109/answer/61737468793","content":"如何利用R语言学习机器学习?在网页爬取和数据分析中,将不同源的数据进行举体化和统一处理是一项关键操作。R语言中的cbind
函数为将不同列的数据合并提供了强大支持。同时,财经新闻作为了解经济趋势的重要窗口,以其高时效性、权威性和数据丰富性受到广泛关注。财经网作为国内知名财经新闻平台,其新闻内容涵盖广泛,从宏观经济政策到行业发展动态,均能为分析经济未来趋势提供重要依据。
目前经济将面临产业升级、绿色经济和全球供应链调整等多重挑战与机遇。通过及时获取财经新闻,能够帮助研究者和决策者洞察政策动向、市场变化以及技术创新,从而为制定有效的战略提供支持。本文将介绍如何将cbind
函数应用于爬取和数据合并,并通过实例展示其实际应用效果。
网页爬取是从网站中获取有值信息的过程,基本步骤如下:
cbind
将较为分散的数据格式进行合并。在连续访问网页时,为避免被定义为恶意连接,通常需要以下手段:
以爬取财经网新闻为例,下列代码展示如何将代理IP、多线程和cbind
合并应用到一起。
import requests\\nfrom bs4 import BeautifulSoup\\nimport pandas as pd\\nfrom concurrent.futures import ThreadPoolExecutor\\n\\n# 代理IP设置 亿牛云爬虫代理 www.16yun.cn\\nproxy = {\\n \\"http\\": \\"http://username:password@proxy.16yun.cn:proxy-port\\",\\n \\"https\\": \\"https://username:password@proxy.16yun.cn:proxy-port\\",\\n}\\n\\n# 设置头信息\\nheaders = {\\n \\"User-Agent\\": \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\\",\\n \\"Cookie\\": \\"session=example_cookie_value\\",\\n}\\n\\n# 爬取单个网页\\n\\ndef fetch_page(url):\\n try:\\n response = requests.get(url, headers=headers, proxies=proxy, timeout=10)\\n response.raise_for_status()\\n soup = BeautifulSoup(response.content, \\"html.parser\\")\\n\\n # 获取需要的内容(财经新闻标题)\\n titles = [h2.text.strip() for h2 in soup.find_all(\\"h2\\", class_=\\"news-title\\")]\\n return pd.DataFrame(titles, columns=[\\"新闻标题\\"])\\n except Exception as e:\\n print(f\\"Error fetching {url}: {e}\\")\\n return pd.DataFrame()\\n\\n# 多线程实现汇总所有页面\\n\\ndef main():\\n base_url = \\"https://www.yicai.com/news/page{}.html\\"\\n urls = [base_url.format(i) for i in range(1, 11)] # 渲染前10页链接\\n\\n with ThreadPoolExecutor(max_workers=5) as executor:\\n results = list(executor.map(fetch_page, urls))\\n\\n # 使用cbind把数据合并\\n merged_data = pd.concat(results, axis=0)\\n\\n # 存储到本地CSV\\n merged_data.to_csv(\\"yicai_news.csv\\", index=False, encoding=\\"utf-8\\")\\n print(\\"数据采集完成,已保存到 yicai_news.csv\\")\\n\\nif __name__ == \\"__main__\\":\\n main()
通过代理IP和多线程,可以大幅提高网页爬取效率;使用cbind
/同类函数,可以将整齐数据化精简。财经网新闻的高质量内容能为分析经济发展趋势提供重要支持。本文提供的总体解决方案,能应对于大量分散网站数据爬取和数据处理。
每个人都会有一段异常艰难的时光,生活的压力,工作的失意,学业的压力,爱的惶惶不可终日,挺过来的,人生就会豁然开朗,挺不过来的,时间也会教你,怎么与它们握手言和,所以不必害怕的。
一个人若能观察落叶,羞花,从细微处欣赏一切,生活就不能把他怎么样。
","description":"能否分享一些让你豁然开朗的句子? 快乐麦穗的回答\\n\\n\\n每个人都会有一段异常艰难的时光,生活的压力,工作的失意,学业的压力,爱的惶惶不可终日,挺过来的,人生就会豁然开朗,挺不过来的,时间也会教你,怎么与它们握手言和,所以不必害怕的。\\n\\n一个人若能观察落叶,羞花,从细微处欣赏一切,生活就不能把他怎么样。","guid":"https://www.zhihu.com/question/580956751/answer/61088784313","author":"快乐麦穗","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-22T04:00:54.749Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 中的 Bartlett 检验","url":"https://zhuanlan.zhihu.com/p/12625268830","content":"在统计学中,Bartlett 检验用于检验 k 个样本是否来自具有相同方差的总体。总体之间方差相等称为 同方差性 或 方差齐性。一些统计检验,例如 ANOVA 检验,假设各组或样本之间的方差相等。Bartlett 检验可以用来验证这一假设。Bartlett 检验使我们能够比较两个或多个样本的方差,以决定它们是否来自具有相同方差的总体。它适用于正态分布的数据。 有多种方法可以检验组间方差的相等性(同质性),包括:F 检验Bartlett 检验Levene…","description":"在统计学中,Bartlett 检验用于检验 k 个样本是否来自具有相同方差的总体。总体之间方差相等称为 同方差性 或 方差齐性。一些统计检验,例如 ANOVA 检验,假设各组或样本之间的方差相等。Bartlett 检验可以用来验证这一假设。Bartlett 检验使我们能够比较两个或多个样本的方差,以决定它们是否来自具有相同方差的总体。它适用于正态分布的数据。 有多种方法可以检验组间方差的相等性(同质性),包括:F 检验Bartlett 检验Levene…","guid":"https://zhuanlan.zhihu.com/p/12625268830","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-22T01:19:34.477Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何学习 R 绘图?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介...","url":"https://www.zhihu.com/question/23566221/answer/60963706090","content":"如何学习 R 绘图?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:5]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=gdpPercap, y=lifeExp, size=pop, color=continent)) +\\n geom_point(alpha=0.8) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\", legend.text = element_text(size = 12),\\n legend.title = element_text(size = 16)) +\\n guides(size = \\"none\\", colour=guide_legend(\\"Type\\", override.aes = list(size=3))) +\\n scale_size_continuous(range=c(1,40)) +\\n scale_color_manual(values = colors)\\np
最后我们保存绘制的图形:
ggsave(\\"save/scatter-bubble.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
听组会的时候有位师兄分享了一个特别实用的Rstudio 的插件——copilot,GPT 的风终于刮到了 Rstudio,copilot 对于使用 Rstudio 的新手很友好类似于AI 编程助手。
Github Copilot 是一个基于 OpenAI 的 GPT-3 技术的 RStudio 插件,帮助 R 语言开发者更快速、更高效地编写代码。这个插件可以根据你的输入提供智能的代码建议、自动补全和文档提示,从而加速编程过程并提高代码质量。通过结合人工智能和自然语言处理技术,RStudio Copilot 可以理解你的意图并生成符合语法规范的代码片段。
主要功能包括:
打开 Rstudio 的,Tools---\x3eGlobal Options 下面就有 Copilot,再 ✔Enable Github Copilot---\x3eSign in 注意:这里需要有 github 账号,如果没有可以先注册 github 账号
之后会弹出网址,点进网址,再填验证码
填验证码,验证码在网址下面,填好后continue
再点击 Authorize Github Copilot Plugin
就连接成功了,但是还需要激活
重新回到 Rstudio 的界面,激活 copilot
虽然付费,但是初次使用有一个月的免费试用期,点击Start free trial开始试用
激活成功就可以回到 Rstudio 开始 enjoy Copilot 带来的便捷了。
试用期结束需要付费才能继续使用。但是如果您是在校大学生或者是老师,可以通过教育邮箱和学生证明申请免费使用。下面附上认证学生/老师身份的网址:
https://education.github.com/discount_requests/application
打开网页就是如下页面
输入学校邮箱,填写学校名称(英文),和 GitHub 的使用计划, 再上传自己是学生/老师的证明
copilot chat 可以自己申请加入,学习讨论 copilot 的使用:
https://github.com/github-copilot/chat_waitlist_signup/join
总的来说,RStudio Copilot 是一个强大的工具,可以提升我们在 RStudio 中的编程体验,减少重复劳动,减轻记忆负担,并帮助我们更快地实现编程目标。
本期的分享到此结束,希望对大家有所帮助!本人也是处于学习阶段,如有其他好工具推荐或者问题可以评论区留言哦!
","description":"如何高效地使用RStudio? 简佐义的回答\\n\\n听组会的时候有位师兄分享了一个特别实用的Rstudio 的插件——copilot,GPT 的风终于刮到了 Rstudio,copilot 对于使用 Rstudio 的新手很友好类似于AI 编程助手。\\n\\nGithub Copilot 是一个基于 OpenAI 的 GPT-3 技术的 RStudio 插件,帮助 R 语言开发者更快速、更高效地编写代码。这个插件可以根据你的输入提供智能的代码建议、自动补全和文档提示,从而加速编程过程并提高代码质量。通过结合人工智能和自然语言处理技术,RStudio Copilot…","guid":"https://www.zhihu.com/question/24504689/answer/60824934145","author":"简佐义","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T14:55:54.177Z","media":[{"url":"https://pica.zhimg.com/v2-538f901c7d02ba3f760818a06c376a8c.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-ae0eff5a719b4419fab1f85695340499.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-956cbb7d6a8e2bf1fa41ceacd94a8009.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-7499b6b3bb5d71e0ea14cba1af70af94.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-6c541bb361f1fc085969e778d67bd211.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-3f7bbe4a597b39ed9979138b97b28107.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://picx.zhimg.com/v2-0d6984627a2dfcd6fd59e9f81872427e.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-2cf9e6949ab5c7d73213bbd96d1d6a95.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-08c262ad9a174c779734b62bbcb3a40e.jpg","type":"photo","width":0,"height":0,"blurhash":""}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言|如何更新R和RStudio?-简佐义的回答:R 是开源的数据分析和统计计算语言,功能强大且应用广泛,R 的版本更新频率较高。最近处理数据时突然有一个 R 包无法...","url":"https://www.zhihu.com/question/594300209/answer/60821684443","content":"R语言|如何更新R和RStudio?R 是开源的数据分析和统计计算语言,功能强大且应用广泛,R 的版本更新频率较高。最近处理数据时突然有一个 R 包无法安装,细探究发现这个 R 包需要新版本 R 的才可以安装。本文主要分享:更新 R、更新 Rstudio 和一键升级 R 包。
在 Rstudio/R 中更新 R,输入以下命令:
install.packages(\'installr\')\\nlibrary(installr)\\nupdateR()
在 R 中运行时:
会显示如下界面,如果已经有了新版本,点击确定
不看新闻点击否
再次确认是否安装最新版本的 R,点击确定
接下来就开始安装了
安装成功即可。
最新版本在最下面,一般下载.gz 的压缩包,下载完安装即可。
进入 Rstudio 官网:https://posit.co/downloads/ 点击 DOWNLOAD RSTUDIO ---\x3e DOWNLOAD RSTUDIO DESKTOP FOR WINDOWS
Tools---\x3eGlobal Options
点击 change 更换 R 版本
换完版本不要忘了点击两个 OK, 然后再重启一便RStudio即可,这样就是完全更新完了
跑代码的时候可能会遇到 R 包版本不匹配或者附加包不匹配的情况,所以需要更新完 R 版本的同时需要升级我们的 R 包
输入命令直接升级所有 R 包(CRAN、Bioconductor、GitHub)
## 安装rvcheck包\\ninstall.packages(\\"rvcheck\\")\\n## 加载rvcheck包\\nlibrary(\\"rvcheck\\")\\n#检查R是否有更新\\nrvcheck::check_r()\\n\\nrvcheck::update_all(check_R = FALSE,\\n which =c(\\"CRAN\\",\\"BioC\\",\\"github\\"))
首先找到旧版本 R 包安装的路径,在命令行中输入.libPaths() 就可以找到 R 包的位置,此处输出的第一个路径为 R 包安装的位置
.libPaths()\\n[1] \\"C:/Users/B/AppData/Local/R/win-library/4.4\\" \\"C:/Program Files/R/R-4.4.1/library\\"
打开路径可以发现有两个或三个文件夹,把 4.3 文件内的文件复制粘贴到 4.4 即可
平常更新完 R 版本总是懒得重新安装 R 包,所以就会把自己之前安装的 R 包全部打包压缩好,这样就可以方便自己安装了。
到这里 R、Rstudio 和 R 包就都更新完了,本期的分享到此结束,希望对大家有所帮助!本人也是处于学习阶段,如有问题可以评论区留言哦!
空想会让困难越变越多,只有行动才是最好的答案。不要让自己成为空想家,要做行动的巨人。
“人生没有白走的路,每一步都算数。弯路自有弯路存在的意义,走下去,可能才能找到真正的自己。”有时候我们会懊悔过去做的一些选择,觉得走了很多冤枉路,但这句会让我们明白,过往的一切经历其实都是在塑造如今的自己,也就不再去过度纠结那些走过的“弯路”了。 没有弯路,又何谈捷径?
吃一堑,长一智。“所有没能打败你的东西,都将使你变得更强大。”当身处艰难处境,被挫折压得有些喘不过气时,这句话能让我们转换视角,把困境当作成长的磨砺,心态也会从消极转为积极,对眼前的难题也就有了新的认识和应对的勇气。
“山重水复疑无路,柳暗花明又一村。”陷入困境、觉得前路迷茫的时候,想想这句诗,就会相信转机也许就在下一个转角处,只要不放弃继续探索,总能迎来豁然开朗、出现新希望的那一刻。
不知道你对这个不需要学习什么语言,全程0代码拖拉拽就能实现自动化处理的方法感不感兴趣。
需要用到一个工具叫九数云BI;
这个工具是一款在线的数据处理器,可以做到
1、千万级别的数据量处理不卡顿,秒出结果
2、理解为一个高级版的excel,0代码版的数据分析工具,可以把处理数据的过程自动化;
注意!这个自动化可不是跟excel一样把数据粘贴进去,是真的可以实现,从下载表格、数据处理、数据可视化、结果自动通知到人这一系列流程的自动化
3、学习起来比较简单,0基础的人1-2天熟悉下就能用好
这个工具是拖拉拽就能实现一些在excel里需要复杂函数,或者需要VBA代码才能实现的数据处理步骤的,比如说
只是一些小例子,这个工具主要客户群体是企业,个人用是免费的,大家感兴趣的可以去自动探索一下
九数云BI","description":"自动处理excel数据,用什么语言合适? 数据民工小jo的回答\\n\\n\\n不知道你对这个不需要学习什么语言,全程0代码拖拉拽就能实现自动化处理的方法感不感兴趣。\\n\\n需要用到一个工具叫九数云BI;\\n\\n这个工具是一款在线的数据处理器,可以做到\\n\\n1、千万级别的数据量处理不卡顿,秒出结果\\n\\n2、理解为一个高级版的excel,0代码版的数据分析工具,可以把处理数据的过程自动化;\\n\\n注意!这个自动化可不是跟excel一样把数据粘贴进去,是真的可以实现,从下载表格、数据处理、数据可视化、结果自动通知到人这一系列流程的自动化\\n\\n3、学习起来比较简单,0基础的人1-2天熟悉下就能用好\\n\\n这个工具是拖拉拽就能实现…","guid":"https://www.zhihu.com/question/31077489/answer/60562650015","author":"数据民工小jo","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T07:02:32.356Z","media":[{"url":"https://pica.zhimg.com/v2-590bcd9bb606398d54d74ca025b75f1d.jpg","type":"photo","width":960,"height":510,"blurhash":"L:IFA100xux]Rkofa#a#ocRjj]t7"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言管道操作是干什么的呢?-R语言与可视化的回答:传递参数 [文章: 管道符函数(%>%),R语言进阶必备]","url":"https://www.zhihu.com/question/4663782745/answer/60459298027","content":"R语言管道操作是干什么的呢?传递参数
https://zhuanlan.zhihu.com/p/567173699","description":"R语言管道操作是干什么的呢? R语言与可视化的回答\\n\\n\\n传递参数\\n\\nhttps://zhuanlan.zhihu.com/p/567173699","guid":"https://www.zhihu.com/question/4663782745/answer/60459298027","author":"R语言与可视化","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T04:07:43.554Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"(超详细)批量根据经纬度点位提取NC转化为tiff中包含的气候信息","url":"https://zhuanlan.zhihu.com/p/13838684589","content":"library(tidyverse) library(raster) # library(sf) library(writexl) library(sf) # 读取Excel数据,并选择需要的列 df <- read_excel(\\"点位tmp温度查询.xlsx\\", sheet = \\"Sheet1\\") %>% select(lon, lat) %>% # 使用新的列名lon和lat as.data.frame() # 获取tif文件列表 file_list <- list.files(path = \\"E:/tmp/NC2TIF\\", pattern = \\"\\\\\\\\.tif$\\", full.names = TRUE) # 初始化结果列表(用于存储查询结果) results_list <- list()…","description":"library(tidyverse) library(raster) # library(sf) library(writexl) library(sf) # 读取Excel数据,并选择需要的列 df <- read_excel(\\"点位tmp温度查询.xlsx\\", sheet = \\"Sheet1\\") %>% select(lon, lat) %>% # 使用新的列名lon和lat as.data.frame() # 获取tif文件列表 file_list <- list.files(path = \\"E:/tmp/NC2TIF\\", pattern = \\"\\\\…","guid":"https://zhuanlan.zhihu.com/p/13838684589","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T01:03:56.317Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"(超详细)R代码对NC气候数据进行批量转化为tiff","url":"https://zhuanlan.zhihu.com/p/13838343904","content":"library(raster) library(ncdf4) # 获取目录中的所有文件 file_list <- list.files(path = \\"E:/pre/\\", pattern = \\"\\\\\\\\.nc$\\", full.names = TRUE) # 循环遍历所有文件并读取数据 for (file_path in file_list) # ---- 数据读取过程 { nc_file <- file_path year_part <- gsub(\'.*/pre_(.*)\\\\\\\\.nc\', \'\\\\\\\\1\', file_path) year_num=1 if(nchar(year_part)==4){ year_num=1 year_start= as.integer(year_part) year_end= as.integer(year…","description":"library(raster) library(ncdf4) # 获取目录中的所有文件 file_list <- list.files(path = \\"E:/pre/\\", pattern = \\"\\\\\\\\.nc$\\", full.names = TRUE) # 循环遍历所有文件并读取数据 for (file_path in file_list) # ---- 数据读取过程 { nc_file <- file_path year_part <- gsub(\'.*/pre_(.*)\\\\\\\\.nc\', \'\\\\\\\\1\', file_path) year_num=1 if…","guid":"https://zhuanlan.zhihu.com/p/13838343904","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T01:01:34.777Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么你在使用R语言?-TigerZ 生信宝库的回答:在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的...","url":"https://www.zhihu.com/question/350488840/answer/60336963577","content":"为什么你在使用R语言?在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。
为了便于使用,本系列文章介绍的所有配色都已收录到了sciRcolor 项目中,获取方式:
R 语言科研配色工具 --- sciRcolor为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:
① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60 种离散色 + 40 种连续色)
② 一个用来预览配色的在线网站
③ 一个用来获取配色的 R 包
library(sciRcolor)\\npal_scircolor(palette = 1, alpha = 1)\\n[1] \\"#5773CCFF\\" \\"#FFB900FF\\"
注:本账号内所有原创内容,未经允许禁止转载和用于商业用途,违者必究。
","description":"为什么你在使用R语言? TigerZ 生信宝库的回答\\n\\n\\n在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。\\n\\n为了便于使用,本系列文章介绍的所有配色都已收录到了sciRcolor 项目中,获取方式:\\n\\nR 语言科研配色工具 --- sciRcolor\\n\\n\\n\\n\\n1. 配色绘图预览\\n\\n\\n\\n\\n2. sciRcolor\\n\\n为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:\\n\\n① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60…","guid":"https://www.zhihu.com/question/350488840/answer/60336963577","author":"TigerZ 生信宝库","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-21T00:58:40.672Z","media":[{"url":"https://picx.zhimg.com/v2-2ef49ca6161d3b1de40d44eff37543c6.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LgP~pC%0s9sDUbV@n%n+Q8a#bIax"},{"url":"https://pic1.zhimg.com/v2-3f510a66587dfd2cb391672ccd4614f4.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LlQlRdxZn%xHL#jEn%afQSaej]ae"},{"url":"https://pica.zhimg.com/v2-4521f79836fe7f773a01a85c71b0ed98.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LEQ9s3~U+u-XdCW8v#nAMMZ}$*M}"},{"url":"https://picx.zhimg.com/v2-e901272c1d810f6957d9d6f2552deda3.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LMOM8A-nOZ;3@Grq#kNzqHShnTSw"},{"url":"https://pic1.zhimg.com/v2-0679269e949966e8c02caa8c1be52e91.jpg","type":"photo","width":1080,"height":1501,"blurhash":"LENmyb~qog-;x]%Mjejas5bwt7V["},{"url":"https://pica.zhimg.com/v2-c3becc543e8003ba66b38d94939264da.jpg","type":"photo","width":1079,"height":607,"blurhash":"LTOWpV9FM_nz_3oKRjoz00xuj^j]"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-楠楠的回答:1.对人不必太真诚,你不知道别人到底是什么样的人; 2.工作任何时候留痕,避免被人利用; 3.不要搅浑水,非要被推...","url":"https://www.zhihu.com/question/580956751/answer/60178313322","content":"能否分享一些让你豁然开朗的句子?1.对人不必太真诚,你不知道别人到底是什么样的人;
2.工作任何时候留痕,避免被人利用;
3.不要搅浑水,非要被推出来揽茬的时候,做好录音或留好微信记录
4.任何时候不要有圣母心,凡事以个人利益为重,个人正当利益绝不允许被侵犯
5.警惕团队中拱火的人,表面是为你好,实际是拿你打头阵、当炮灰或者想排除你
6.任何时候发觉自己权益受到侵害的时候不要咨询同事或同龄人,问有经验的长辈或咨询律师,大众点评上什么服务都有
7.当你觉得一个人品性有问题时,务必远离,别企图感化她
8.当觉察到你觉得关系很好的人欺骗你时,要立马醒悟,她可能骗了你不止这一次,这个人是心眼多的人,气场三观不合,立马远离,玩不过就躲远点
9.不要总当老好人,适当留有心机,不该妥协的时候千万别妥协
10.手机录音功能非常好用,任何时候受到侵犯记得第一时间打开
11.很喜欢一段话:生活各自不易,个人所求不同,各自立场不一,勿在别人心中修行自己,勿在自己心中强求别人。
12.没必要和一些没必要的人,去说一些没必要的话,然后产生一些没必要的情绪,因为我们每个人立场不同,所求不一,所以不必刻意的强求认同和理解。
13.你不能用自己的脚步,去丈量别人该走的路。你认为的康庄大道,也许是别人的荆棘之路;你认为的精彩人生,也许是别人牢笼的枷锁。
14.杨绛先生说过:思想不在一个高度,尊重就好:三观不在一个层次,微笑就好。人与人之间最好的相处模式,尊重是标配,靠谱是高配,厚道是顶配。
15.我们要成为一个阳光的人,风和日丽时可以温暖别人,而在寒风刺骨的时候,也可以温暖自己。
众所周知 R 语言是科研统计和科研绘图的优秀语言,至于网上说的 python 语言的可视化,只能和 baseR 相比,在咱们国家 python 的搜索指数远远大于 R,下图一是国内 R 语言和 python 语言在谷歌搜索上的搜索指数;而放眼全球我们可以看到图二 R 语言的搜索指数远远大于 python 并且呈现出周期性。 我们知道 python 语言在国内的火爆,可能取决于国内培训机构的宣传,好像不懂点 python 马上就要被时代所淘汰,而 R 语言的使用多用在科研论文中,相比于国内和国外的差距,诸君细品!
作为科研人,掌握精通 R 语言是必不可少的一个技能,我们不说 python 和 R 孰轻孰劣,我希望大家可以左手 python 右手 R,做一个掌握掌握左右手互搏术的周伯通~下面将详细介绍R 语言环境和编码 IDE 的配置和安装
R 作为一门编程语言,有 Windows、Mac、Linux 三大版本,下面一一展示 R 的安装方法
R作为一门编程语言,有Windows、Mac、Linux三大版本,下面一一展示R的安装方法
R,目前选择下载 R 4.4.2 版本 https://mirrors.tuna.tsinghua.edu.cn/CRAN/
Rstudio 选择 Windows 版本即可https://rstudio.com/products/rstudio/download/#download
首先下载deb包,之后通过gdebi包管理器进行安装
wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu/bionic-cran40/r-base_4.0.3-1.1804.0_all.deb\\nsudo gdebi r-base_4.0.3-1.1804.0_all.deb\\n
可以参考windows也有对应的安装包
选择Tools > Global Options > Appearance
,按照如下设置即可
Tools > Global Options > Packages > change
选择China (Beijing 1) [https]-TUNA Team,Tsinghua University完成上述设置我们已经配置好了R分析环境,最终我们将在Rstudio中来编写我们的R代码,Rstudio界面如下所示
R包的安装一直是分析过程中的大问题,成功与否即取决于个人的网速,同时也受许多其它的因素影响,R包一般有2个版本CRAN官方版与github开发版 官方版R包的安装有以下方法:
install.packages(\\"ggplot2\\")\\n
括号内换成自己所要安装的包名即可
if (!requireNamespace(\\"BiocManager\\", quietly = TRUE))\\n install.packages(\\"BiocManager\\")\\nBiocManager::install(version = \\"3.12\\")\\nlibrary(\\"BiocManager\\")\\n\\nBiocManager::install(\\"ggplot2\\")\\n
以上2种方法基本满足了大部分R包的安装,但还是建议去参考R包作者给出的安装方法
这部分主要参考作者github主页的安装文档 示例如下:安装开发版ggplot2
install.packages(\\"devtools\\")\\ndevtools::install_github(\\"tidyverse/ggplot2\\")\\n
通过以下命令可安装一些常用的R包
BiocManager::install(c(\\"tidyverse\\",\\"ggtree\\",\\"DESeq2\\",\\"ggsci\\",\\"cowplo\\",\\"phyloseq\\",\\"aplot\\",\\"patchwork\\",\\"ggstatsplot\\",\\"reshape\\",\\"psych\\",\\"magrittr\\",\\"stringi\\",\\"genoPlotR\\",\\"ggstar\\",\\"ggtreeExtra\\",\\"ggnewscale\\",\\"RColorBrewer\\",\\"ggsignif\\",\\"FactoMineR\\",\\"vegan\\",\\"multcomp\\",\\"ggalluvial\\"))\\n
注:每次使用前需要加载R包,示例如下
library(\\"ggplot2\\")\\n
打开Rstudio
新建脚本点击左上角的绿色+或者使用快捷键:Ctrl+Shift+N注:在代码编写框写代码,在结果运行区查看结果
执行getwd()
获得当前工作路径
> getwd()\\n[1] \\"/\\"\\n
我们读入的外部数据和导出的分析结果都会位于此文件内 执行setwd()
更改工作路径
> setwd()\\n[1]
不清楚题主是如何划分验证集和训练集的。
首先要考虑的就是数据分布是否一致,可以做个对抗验证,构建一个模型来区分训练集和验证集,如果AUC接近0.5,说明分布一致。或者直接交叉验证,再看看效果。
","description":"临床预测模型验证集的AUC高于训练集AUC合理吗?该如何纠正? HorizonGazer的回答\\n\\n\\n不清楚题主是如何划分验证集和训练集的。\\n\\n首先要考虑的就是数据分布是否一致,可以做个对抗验证,构建一个模型来区分训练集和验证集,如果AUC接近0.5,说明分布一致。或者直接交叉验证,再看看效果。","guid":"https://www.zhihu.com/question/7027398814/answer/59892639528","author":"HorizonGazer","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-20T07:13:57.778Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?-类星体的回答:板U套装:R5 9600X+微星 B650 MORTAR 迫击炮 D5 —...","url":"https://www.zhihu.com/question/7314355600/answer/59810310234","content":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?板U套装:R5 9600X+微星 B650 MORTAR 迫击炮 D5 ——2259
内存:威刚 64GB(32GBX2)D5 6000 C30 海力士A-die XPG威龙D300 X2——1419X2=2838
显卡:讯景RX6750GRE 10GB 黑狼 ——1788
固态硬盘:铠侠 SD10 1TB ——439
电源:先马黑钻750W 金牌全模组 ——399
散热器:雅俊B3SE ——79
机箱:先马朱雀SE ——119
显示器:HKC 27英寸NanoIPS 2K 180Hz HDR400 神盾MG27Q ——999
总价:8920
PS:如果想要用intel,把板U套装和内存散热器换了就行,建议不要用13,14代intel,有缩缸风险。
intel板U:i7 12700+微星PRO B760M-A DDR4 Ⅱ ——2221
内存:金士顿 FURY 128GB(32Gx4)套装 3200 C16 骇客神条 ——1899
散热器:雅俊E6SE ——149
","description":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ? 类星体的回答\\n\\n\\n板U套装:R5 9600X+微星 B650 MORTAR 迫击炮 D5 ——2259\\n\\n内存:威刚 64GB(32GBX2)D5 6000 C30 海力士A-die XPG威龙D300 X2——1419X2=2838\\n\\n显卡:讯景RX6750GRE 10GB 黑狼 ——1788\\n\\n固态硬盘:铠侠 SD10 1TB ——439\\n\\n电源:先马黑钻750W 金牌全模组 ——399\\n\\n散热器:雅俊B3SE ——79\\n\\n机箱:先马朱雀SE ——119\\n\\n显示器:HKC…","guid":"https://www.zhihu.com/question/7314355600/answer/59810310234","author":"类星体","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-20T05:52:09.895Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"用box-cox变量变换得出来的结果不知道再怎么分析了,求答疑?-精益质量的回答:[公式] 变换是一种常用的非正态数据的正态化处理方式,关于这个话题我在两年前写...","url":"https://www.zhihu.com/question/46476931/answer/59585979546","content":"用box-cox变量变换得出来的结果不知道再怎么分析了,求答疑?变换是一种常用的非正态数据的正态化处理方式,关于这个话题我在两年前写过专门的公众号文章,这篇文章增加了最优
的计算方法,以及如何使用
语言进行
的变换。
目录
非正态数据如何计算?
在回答这么问题之前,我们需要思考一件事情,那就是为什么收集到的数据是非正态的。
是数据中有异常值,还是说制程不稳定,亦或者这些数据天生就是非正态的。
下面是比较容易遇到的非正态数据的几种情况:
子组数为4,合计25个子组,正态性检验结果显示数据不服从正态分布。
很明显,这组数据出现了异常数据,绘制箱线图可以更直观的看到这些异常数据,检查后发现原来是员工手工输入表单时误将“2”输入成了“3”。
子组数为5,一共26个子组,对数据进行正态性检验显示数据不服从正态分布。
绘制直方图,可以发现数据是左偏分布。
绘制控制图我们发现子组14~16的均值突然变小了,我们就要先看一下那几天的生产是不是有什么异常。
如果发生了这种情况,我们要首先分析过程异常的原因,并进行改进,使过程重新受控,然后再进行的计算。(在过程不受控的情况下可以使用
来进行过程能力的评价)
子组数为5,一共26个子组,对数据进行正态性检验显示数据不服从正态分布。
绘制直方图,可以发现直方图似乎有两个峰。
绘制控制图发现,在过程中途均值发生了整体偏移。
如果发生了这种情况,我们就要关注发生漂移的那天产线到底发生了什么,和情况2的处理方式相同,先找到失控原因并加以改进,使过程重新受控,再进行的计算。
要评估某一焊接工位的焊接强度,对焊接后产品的焊接强度进行测量(单位为N),子组数为5,合计26个子组。
正态性检验结果显示数据不服从正态分布。
绘制控制图,没有发现过程有失控迹象。
焊接强度与焊接面的横截面积和焊接深度相关,横截面积和焊接深度可能是服从正态分布的,但是我们知道两个正态分布相乘后得到的分布是不服从正态的,所以焊接强度天生就是不服从正态分布的。这时我们可以使用变换或
变换对原始数据进行正态变换,然后再对变换后的数据进行
的计算。
下文将使用焊接强度进行变换的举例说明,原始数据如下:
要将非正态分布的数据转换为正态分布,我们一般可以对原数据进行平方,开根号,自然对数,倒数等方式进行转换,转换后的数据为
。
上面的转换形式归结起来就是幂函数转换和对数函数转换。统计学家George E. P. Box和David Roxbee Cox两人在1964年共同提出了变换的方法,将上述一系列变换公式进行了统一。
变换公式(简化版本):
当不为
时,进行幂函数转换,当
为
时进行自然对数转换,
的取值在
到
之间。
那么要选择怎么样的λ值进行数据变换呢?一般是使用极大似然估计进行 值的求解,转换后的数据
与
值的相关系数最大的
值即为最优的
值。
以拉拔力的数据为例,使用进行
变换的最优
值计算。
将焊接强度数据记录在csv文件中,方便调取。
语言的代码如下,计算得到最优
。
#boxcox()的函数需要调用此库\\nlibrary(MASS)\\n\\n#导入数据文件\\nData = read.csv(\\"weld_strength.csv\\",\\n header=TRUE)\\n\\n#将焊接数据写入Weld_Strength变量中\\nWeld_Strength <- Data[,1]\\n\\n#绘制Q-Q曲线\\nqqnorm(Weld_Strength) \\nqqline(Weld_Strength) \\n\\n#进行Box-Cox计算\\nbc <- boxcox(lm(Weld_Strength ~ 1)) \\n\\n#将最优lambda记入“lambda”变量中\\nlambda <- bc$x[which.max(bc$y)] \\n
使用转换公式对原数据进行变换,并对变换后的数据进行正态性检验,这次数据成功的通过了正态性检验。
同步比较一下变换前后的直方图的情况。
备注
在网上搜索公式,会发现公式好像和上面的写法不太一样,对于
,有些资料记为:
其实这个公式才是当年George E. P. Box和David Roxbee Cox这两位统计学家提出的公式,但是由于
变换的本质在于对原数据进行幂运算和对数运算,所以《六西格玛管理统计指南》以及Minitab的帮助文档中,对
公式进行了简化。
变换有它的使用局限性,在实际使用过程中,大家可能会发现它的正态性变换的成功率不如
变换,这和这两种变换使用的参数数量有关,
变换只有
这一个参数,而
变换则有
四个参数,公式也更为复杂。但是由于
变换公式较为简单,一般优先使用
变换,如果变换失败再使用
变换。
变换在使用时需要注意的事项:
语言使用一句代码就可以计算得到
,非常的方便,但是对于热爱学习的你来说,必定想知道这背后的计算逻辑是怎么样的。借助
,来一步步的说明最佳
的计算过程。
我们的目的是通过调整值,计算相关系数。
因此:
计算得到最优值为
。
可以手动取一些值,计算出相关系数,并绘制散点图,如下所示。这样可以更直观的显示出随着
的变化,相关系数将发生怎么样的变化。
还是以上文的焊接强度为例,要求焊接强度不能小于,即规格下限为
。
根据之前得到的值
,得到变换公式为
,对原始数据和规格下限进行变换。
规格下限变换后为,由于
为负数,所以规格限需要互相调换一下,即变换后的规格上限为
。
变换后的数据的正态性结果:
变换后进行
计算,得到
,这制程能力非常棒了。
反过来,如果我们在数据非正态的情况下,强行假设其是正态的,并进行计算,那么得到的。
而这就会得出该焊接工序能力不达标的结论,从而把资源浪费在对其的改造上。
","description":"用box-cox变量变换得出来的结果不知道再怎么分析了,求答疑? 精益质量的回答\\n\\n\\n变换是一种常用的非正态数据的正态化处理方式,关于这个话题我在两年前写过专门的公众号文章,这篇文章增加了最优的计算方法,以及如何使用语言进行的变换。\\n\\n目录\\n1. 非正态数据可能的出现形态\\n情况1:数据中包含异常值\\n情况2:过程未受控\\n情况3:双峰数据\\n情况4:过程受控但数据不服从正态分布\\n2. 变换\\n变换的公式说明\\n使用语言计算最优\\n3. 变换注意事项\\n4. 的最优求解过程\\n5. 变换后的计算例\\n1. 非正态数据可能的出现形态\\n\\n非正态数据如何计算?\\n\\n在回答这么问题之前,我们需要思考一件事情…","guid":"https://www.zhihu.com/question/46476931/answer/59585979546","author":"精益质量","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-20T01:17:35.827Z","media":[{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Excel","type":"photo","width":44,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-22fc051760aa31cb94af49621fe686f7.jpg","type":"photo","width":840,"height":454,"blurhash":"LESijY.8-p~q_3t7kCa}s.s:M|Ip"},{"url":"https://pica.zhimg.com/v2-e4a8e8197a88f55b259c9e51a8b36cdd.jpg","type":"photo","width":825,"height":547,"blurhash":"LAT9L#~q%M~q~qfQofj[D%j[xuj["},{"url":"https://picx.zhimg.com/v2-91b2a6011c181523d8028c10e9153382.jpg","type":"photo","width":773,"height":426,"blurhash":"LBSY~z~qxa_3~q-pR*R*-oWBE1t7"},{"url":"https://pic1.zhimg.com/v2-1f5bec33e4607ee8ef4b64ea8ac9e309.jpg","type":"photo","width":834,"height":514,"blurhash":"LlQAHs~URk%2~VM}NGt6R+Rkt6a#"},{"url":"https://www.zhihu.com/equation?tex=%5Coverline+X-R","type":"photo","width":51,"height":24,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-5581449fbce082ee066d18f39dacc604.jpg","type":"photo","width":781,"height":519,"blurhash":"LASPb2~qM{?b_3o|kCV[M{oft7WB"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Ppk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-71a27ab5008693d249a560ce853f5dd2.jpg","type":"photo","width":839,"height":478,"blurhash":"LBSijZ~qxu_3_3-oWBNH%LafE1oL"},{"url":"https://picx.zhimg.com/v2-26289bb70c15ae1e0042f32f68ca8c79.jpg","type":"photo","width":828,"height":508,"blurhash":"LXL=IW0i-oR:~VNGWEWC~T-oM|oe"},{"url":"https://www.zhihu.com/equation?tex=%5Coverline+X-R","type":"photo","width":51,"height":24,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/v2-053b767d57aa414c6e7320a137d46047.jpg","type":"photo","width":847,"height":554,"blurhash":"LASY{q_Nxu~q_3s;xuWVRjt7xuWB"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/v2-cf53bbf55db2ce30a7d396473f5d453b.jpg","type":"photo","width":720,"height":480,"blurhash":"LCSPb3_3?H~q?bxt%LRkjEofbvWC"},{"url":"https://www.zhihu.com/equation?tex=%5Coverline+X-R","type":"photo","width":51,"height":24,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-2573a2a47a0a6736a8f92b02c75b2142.jpg","type":"photo","width":720,"height":480,"blurhash":"L9S6V#~q%M~q?bofxuWBIUof%May"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Johnson","type":"photo","width":67,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/v2-86ccc11cd228432b1299b84850155fa5.jpg","type":"photo","width":702,"height":871,"blurhash":"L7RMb$_3t7~q-;xuRjj[xuWBfQj["},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y","type":"photo","width":9,"height":15,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A","type":"photo","width":17,"height":20,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%2A%7D+y%5E%2A%26%3Dy%5E2%5C%5C+y%5E%2A%26%3D%5Csqrt%7By%7D%5C%5C+y%5E%2A%26%3Dln%28y%29%5C%5C+y%5E%2A%26%3D1%2Fy%5C%5C+%5Cend%7Balign%2A%7D+%5C%5C","type":"photo","width":563,"height":104,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%2A%7D+%5Cbegin%7Bcases%7D+y%5E%2A%3Dy%5E%7B%5Clambda%7D%2C+%5Cspace+if+%5Cspace+%5Clambda+%5Cnot%3D0%5C%5C+%5C%5C+y%5E%2A%3Dln%28y%29%2C+%5Cspace+if+%5Cspace+%5Clambda+%3D0++%5Cend%7Bcases%7D+%5Cend%7Balign%2A%7D+%5C%5C","type":"photo","width":563,"height":74,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=0","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=0","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=-5","type":"photo","width":22,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=5","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A","type":"photo","width":17,"height":20,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Z","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/50/v2-6f722e27ffa5c375b5eb6885b8eae12e.jpg","type":"photo","width":371,"height":598,"blurhash":"LBSPX_j[00-;WBRjt7xu9FRjxuof"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda%3D-0.63","type":"photo","width":78,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A%3Dy%5E%7B-0.63%7D","type":"photo","width":82,"height":23,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-7a366ba9cf7ad1de8403fb44095e3092.jpg","type":"photo","width":720,"height":480,"blurhash":"LBSF@U?c?a~q_3%2-pRjVrxao}NH"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-004668c2de26ba24735a4e48bc821993.jpg","type":"photo","width":848,"height":590,"blurhash":"LERMb$D%%M~q~qM{WBt7~q?bt7Rj"},{"url":"https://picx.zhimg.com/v2-f2de39a98a087dcef4088c50aae63951.jpg","type":"photo","width":848,"height":590,"blurhash":"LHRC[6%M~q-;_3t7xuof~qxuIUof"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda+%5Cnot%3D0","type":"photo","width":42,"height":20,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A%3D%5Cfrac%7By%5E%5Clambda-1%7D%7B%5Clambda%7D%2Cif%5Cquad%5Clambda%5Cneq0+%5C%5C","type":"photo","width":563,"height":53,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Johnson","type":"photo","width":67,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Johnson","type":"photo","width":67,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Ceta%2C%5Cgamma%2C%5Clambda%2C%5Cvarepsilon","type":"photo","width":60,"height":20,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Johnson","type":"photo","width":67,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=0","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=0","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Excel","type":"photo","width":44,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=R","type":"photo","width":13,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Excel","type":"photo","width":44,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-a6abedbf485d390da3623275c39f0d31.jpg","type":"photo","width":835,"height":495,"blurhash":"L9R:HG9F4n_3?bayayt700j[ayay"},{"url":"https://picx.zhimg.com/v2-589dfc200d19c99d40a7ba971c908d24.jpg","type":"photo","width":964,"height":390,"blurhash":"LEQmF#RrE3?bD$?HNaR*4m%LWBRj"},{"url":"https://www.zhihu.com/equation?tex=z","type":"photo","width":8,"height":13,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-145fec905230574adbc0672db8437851.jpg","type":"photo","width":1221,"height":229,"blurhash":"L9Q,OByE%1_39Gt7kB-;Hq-oNGxu"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-d4a757bedd0533e3d24d143550dbc335.jpg","type":"photo","width":1164,"height":243,"blurhash":"LAQA26xvD%rs0J_3?bi{R6xuxvo}"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=z","type":"photo","width":8,"height":13,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-84f1d57553186a0923a5c598c875dfdf.jpg","type":"photo","width":1137,"height":321,"blurhash":"LOPsn+#QM{_N%fkWWBWAR%g3a}Rj"},{"url":"https://www.zhihu.com/equation?tex=Excel","type":"photo","width":44,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-07d946521f0faa69ea8d77ebe38e98e2.jpg","type":"photo","width":835,"height":334,"blurhash":"LSR3NG_Nxu%2t7RjRjoLRPkCRkj?"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=1","type":"photo","width":9,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-415a7986a55b44334294cc4f966f9381.jpg","type":"photo","width":611,"height":586,"blurhash":"LEQm3S.m?H~W^+tRs;oyE#r?%gSe"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=-0.6758","type":"photo","width":62,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-b525f0ee20eb86617edd878469e23c37.jpg","type":"photo","width":640,"height":547,"blurhash":"LEQ9_[_3~q_N^+M|%MadNGt7t6D*"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pica.zhimg.com/v2-7881960380c4fc42eb83302208fe2a38.jpg","type":"photo","width":755,"height":605,"blurhash":"L8SPb3_2D%_3~qjYt7R*9FbF%MR*"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=100N","type":"photo","width":42,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=100","type":"photo","width":26,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=-0.67","type":"photo","width":45,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A%3Dy%5E%7B-0.67%7D","type":"photo","width":82,"height":23,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=y%5E%2A%3D100%5E%7B-0.67%7D%3D0.0445","type":"photo","width":171,"height":23,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=%5Clambda","type":"photo","width":10,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=0.0445","type":"photo","width":48,"height":16,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://picx.zhimg.com/v2-2ede6a4726e21a746e0634f78e8f8a12.jpg","type":"photo","width":720,"height":480,"blurhash":"LASPb3?v?H~q~W%2-pRknht6kWWB"},{"url":"https://www.zhihu.com/equation?tex=Box-Cox","type":"photo","width":85,"height":18,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk","type":"photo","width":31,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://www.zhihu.com/equation?tex=Cpk%3D14.71","type":"photo","width":94,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/v2-76f402e74f254a9ceca979f83052dbae.jpg","type":"photo","width":800,"height":599,"blurhash":"L9SPX_?b%L_N~qxvxuV[9FM{fkWB"},{"url":"https://www.zhihu.com/equation?tex=Cpk%3D0.75","type":"photo","width":85,"height":19,"blurhash":"L00000fQfQfQfQfQfQfQfQfQfQfQ"},{"url":"https://pic1.zhimg.com/v2-4645d9d8260269a127944a9e31ab709c.jpg","type":"photo","width":800,"height":599,"blurhash":"LPQ,Xa%M~U%M-pflxuoc^iM{9bt6"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?-酱油加冰的回答:不如E5 2673V3+DDR3 32G×8如何,一根就50块","url":"https://www.zhihu.com/question/7314355600/answer/59457361376","content":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ?不如E5 2673V3+DDR3 32G×8如何,一根就50块
","description":"想组个台式机,要内存拉满,其他都没啥要求,带显示器一共预算9000以内,请教下大神怎么配置 ? 酱油加冰的回答\\n\\n\\n不如E5 2673V3+DDR3 32G×8如何,一根就50块","guid":"https://www.zhihu.com/question/7314355600/answer/59457361376","author":"酱油加冰","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-19T16:50:25.748Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"蒙特卡洛方法(四):MCMC(下)-Gibbs抽样","url":"https://zhuanlan.zhihu.com/p/13564601655","content":"在贝叶斯统计中,不同于频率学派将参数视作为未知常数,贝叶斯学派将参数视作为随机变量。 若参数 [公式] 的先验分布为 [公式] ,则可以根据获得的样本数据X和贝叶斯定理去跟新对于先验分布 [公式] 的认知,得到参数 [公式] 的后验分布: [公式] 由于等式右侧的分母部分相较于后验分布 [公式] 为一常数,在实际求贝叶斯后验分布时可将其如下正比于去除,方便推导后验分布。 [公式]","description":"在贝叶斯统计中,不同于频率学派将参数视作为未知常数,贝叶斯学派将参数视作为随机变量。 若参数 [公式] 的先验分布为 [公式] ,则可以根据获得的样本数据X和贝叶斯定理去跟新对于先验分布 [公式] 的认知,得到参数 [公式] 的后验分布: [公式] 由于等式右侧的分母部分相较于后验分布 [公式] 为一常数,在实际求贝叶斯后验分布时可将其如下正比于去除,方便推导后验分布。 [公式]","guid":"https://zhuanlan.zhihu.com/p/13564601655","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-19T09:39:28.640Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"蒙特卡洛方法(四):MCMC(上)-马尔科夫链","url":"https://zhuanlan.zhihu.com/p/13562824660","content":"之前介绍过的蒙特卡洛方法及其拓展的重要性采样解决很多期望的估计问题,但是其有一个必要条件,那就是在用蒙特卡洛方法或重要性采样时,需知道待采样的密度函数的具体的解析表达式,然而在贝叶斯统计里 [公式] 往往没有没有完全解析表达式,则不能采用一般蒙特卡洛法或者重要性采样对后验分布进行采样,则无法估计后验期望或利用后验期望进行统计推断。因此引入马尔可夫链蒙特卡洛法 本例先介绍马尔可夫链 定义1:若有序…","description":"之前介绍过的蒙特卡洛方法及其拓展的重要性采样解决很多期望的估计问题,但是其有一个必要条件,那就是在用蒙特卡洛方法或重要性采样时,需知道待采样的密度函数的具体的解析表达式,然而在贝叶斯统计里 [公式] 往往没有没有完全解析表达式,则不能采用一般蒙特卡洛法或者重要性采样对后验分布进行采样,则无法估计后验期望或利用后验期望进行统计推断。因此引入马尔可夫链蒙特卡洛法 本例先介绍马尔可夫链 定义1:若有序…","guid":"https://zhuanlan.zhihu.com/p/13562824660","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-19T09:29:03.015Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-糖果超甜的回答:就算路不坦荡也要做自己的太阳 最近很喜欢一句话:“山海自有归期,风雨自有相逢,意难平终将和解,万事终将...","url":"https://www.zhihu.com/question/580956751/answer/59124552475","content":"能否分享一些让你豁然开朗的句子?就算路不坦荡也要做自己的太阳
最近很喜欢一句话:“山海自有归期,风雨自有相逢,意难平终将和解,万事终将如意。这个世界上没不存在无法治愈的伤痛,没有不能结束的沉沦,所有失去的会以另一种方式归来。那些我们现在非常在意的事情、久久放不下的人,可能多年以后再回头,会觉得根本不算。
就像现在的你不会再纠结以前的事情一样,曾经放下的人和事,到最后,岁月终会教学会轻描淡写一切都是瞬息,一切都将会过去,别再纠结得与失。请你一定相信,如果事与愿违那一定是另有安排!
回头看,轻舟已过万重山,向前看,长路漫易灿灿。
","description":"能否分享一些让你豁然开朗的句子? 糖果超甜的回答\\n\\n\\n就算路不坦荡也要做自己的太阳\\n\\n最近很喜欢一句话:“山海自有归期,风雨自有相逢,意难平终将和解,万事终将如意。这个世界上没不存在无法治愈的伤痛,没有不能结束的沉沦,所有失去的会以另一种方式归来。那些我们现在非常在意的事情、久久放不下的人,可能多年以后再回头,会觉得根本不算。\\n\\n就像现在的你不会再纠结以前的事情一样,曾经放下的人和事,到最后,岁月终会教学会轻描淡写一切都是瞬息,一切都将会过去,别再纠结得与失。请你一定相信,如果事与愿违那一定是另有安排!\\n\\n回头看,轻舟已过万重山,向前看,长路漫易灿灿。","guid":"https://www.zhihu.com/question/580956751/answer/59124552475","author":"糖果超甜","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-19T07:57:54.468Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何快速学会R语言?-亿牛云爬虫专家的回答:[图片] 在数据采集和分析中,爬取网页中的表格数据是一个常见任务。 html_table2 是一个非常实用的 R 包,它可以帮...","url":"https://www.zhihu.com/question/346865819/answer/58851063061","content":"如何快速学会R语言?在数据采集和分析中,爬取网页中的表格数据是一个常见任务。html_table2
是一个非常实用的 R 包,它可以帮助我们将 HTML 表格快速解析为数据框。然而,在实际应用中,数据清洗和转换往往是不可避免的。本文将分享如何高效地将 html_table2
的结果转化为更适合分析的 tibble
格式,并展示一个以采集汽车之家(https://www.autohome.com.cn/)汽车品牌和价格信息为例的完整实践。
html_table2
是 R 语言中解析 HTML 表格的主要工具之一,可以轻松从 HTML 文档中提取表格数据。
tibble
是 tidyverse
生态系统中的数据结构,类似于数据框,但提供了更优的打印格式、更强的可读性以及便捷的数据处理特性。
通过结合这两者,我们可以在数据采集后,直接进入高效的分析流程。
tibble
显示时更加紧凑易读。tidyverse
包对 tibble
的支持更佳。tibble
提供了更强的列操作功能。以下是将 html_table2
结果转化为 tibble
的最佳实践:
library(rvest)\\nlibrary(dplyr)\\nlibrary(tidyr)
以汽车之家为例,假设我们需要采集汽车品牌和价格信息。由于该网站对爬虫有限制,我们需要使用代理 IP 来实现。
以下是实现代理 IP 技术的代码示例:
# 设置代理参数 亿牛云爬虫代理 www.16yun.cn\\nproxy_url <- \\"http://proxy.16yun.cn\\"\\nproxy_port <- \\"12345\\"\\nproxy_user <- \\"your_username\\"\\nproxy_password <- \\"your_password\\"\\n\\n# 构建代理 URL\\nproxy <- paste0(\\"http://\\", proxy_user, \\":\\", proxy_password, \\"@\\", proxy_url, \\":\\", proxy_port)\\n\\n# 爬取数据\\nurl <- \\"https://www.autohome.com.cn/\\"\\npage <- read_html(url, options = list(proxy = proxy))
假设我们需要提取某个包含汽车品牌和价格的表格。
# 提取表格\\ntable <- page %>% html_node(\\"table\\") %>% html_table2()\\n\\n# 转换为 tibble\\ntable_tibble <- as_tibble(table)\\n\\n# 打印结果\\nprint(table_tibble)
表格数据常常需要进一步清理。例如:
# 数据清洗\\ncleaned_data <- table_tibble %>%\\n rename(brand = 1, price = 2) %>% # 重命名列\\n mutate(price = as.numeric(gsub(\\"[^0-9.]\\", \\"\\", price))) # 提取价格中的数值\\n\\n# 查看清洗后的数据\\nhead(cleaned_data)
以下是完整的代码实现:
library(rvest)\\nlibrary(dplyr)\\nlibrary(tidyr)\\n\\n# 设置代理参数 亿牛云爬虫代理 www.16yun.cn\\nproxy_url <- \\"http://proxy.16yun.cn\\"\\nproxy_port <- \\"12345\\"\\nproxy_user <- \\"your_username\\"\\nproxy_password <- \\"your_password\\"\\nproxy <- paste0(\\"http://\\", proxy_user, \\":\\", proxy_password, \\"@\\", proxy_url, \\":\\", proxy_port)\\n\\n# 目标网址\\nurl <- \\"https://www.autohome.com.cn/\\"\\n\\n# 爬取页面\\npage <- read_html(url, options = list(proxy = proxy))\\n\\n# 提取表格\\ntable <- page %>% html_node(\\"table\\") %>% html_table2()\\n\\n# 转换为 tibble\\ntable_tibble <- as_tibble(table)\\n\\n# 数据清洗\\ncleaned_data <- table_tibble %>%\\n rename(brand = 1, price = 2) %>%\\n mutate(price = as.numeric(gsub(\\"[^0-9.]\\", \\"\\", price)))\\n\\n# 打印清洗后的数据\\nprint(cleaned_data)
通过本文,我们学习了如何使用 html_table2
提取 HTML 表格,并高效地将其转化为 tibble
以便于后续分析。同时,我们结合代理 IP 技术实现了对汽车之家数据的采集。希望这些方法能为您的数据采集与分析提供帮助!
在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。
为了便于使用,本系列文章介绍的所有配色都已收录到了sciRcolor 项目中,获取方式:
R 语言科研配色工具 --- sciRcolor为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:
① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60 种离散色 + 40 种连续色)
② 一个用来预览配色的在线网站
③ 一个用来获取配色的 R 包
library(sciRcolor)\\npal_scircolor(palette = 1, alpha = 1)\\n[1] \\"#5773CCFF\\" \\"#FFB900FF\\"
注:本账号内所有原创内容,未经允许禁止转载和用于商业用途,违者必究。
","description":"如何快速学会R语言? TigerZ 生信宝库的回答\\n\\n\\n在使用 R 语言进行科研绘图时,颜色的选择是一件让人特别纠结的事情。本系列文章介绍了 R 语言科研绘图时常用的一些配色。\\n\\n为了便于使用,本系列文章介绍的所有配色都已收录到了sciRcolor 项目中,获取方式:\\n\\nR 语言科研配色工具 --- sciRcolor\\n\\n\\n\\n\\n1. 配色绘图预览\\n\\n\\n\\n\\n2. sciRcolor\\n\\n为了解决 R 语言科研绘图中颜色的选择问题,我推出了 sciRcolor 项目。sciRcolor 项目实际上包含了 3 个内容:\\n\\n① 一个包含 100 种常用配色的配色卡,按照配色的个数和类型排序分类(60…","guid":"https://www.zhihu.com/question/346865819/answer/58735948601","author":"TigerZ 生信宝库","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-19T00:31:34.254Z","media":[{"url":"https://pic1.zhimg.com/v2-8db459fd1e959b33fd34b5306b00023a.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LfPG58-BjJoMqGnOaijcQ8a|j[ax"},{"url":"https://pica.zhimg.com/v2-7ec33a86c130ea93a4299c85935ed72d.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LmPixF$%ait7Y+nhjJWCQSWBkBae"},{"url":"https://picx.zhimg.com/v2-9f90d73b960a2f0baf75ea0e75600d9b.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LFPj3|~CnC-Xhz#7RURSIBvytANG"},{"url":"https://pic1.zhimg.com/v2-2960e13077f01ea327f677c57b3d6583.jpg","type":"photo","width":1080,"height":1460,"blurhash":"LMN,3s=xS~#F_lv#rdOXHZkAV_bW"},{"url":"https://pica.zhimg.com/v2-0679269e949966e8c02caa8c1be52e91.jpg","type":"photo","width":1080,"height":1501,"blurhash":"LENmyb~qog-;x]%Mjejas5bwt7V["},{"url":"https://pic1.zhimg.com/v2-c3becc543e8003ba66b38d94939264da.jpg","type":"photo","width":1079,"height":607,"blurhash":"LTOWpV9FM_nz_3oKRjoz00xuj^j]"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"地理探测器如何选择最优空间尺度,(R语言或excel表都可),求解?-赵哈哈的回答:你知道了嘛求解,是代码要重新写嘛","url":"https://www.zhihu.com/question/597099815/answer/58411737556","content":"地理探测器如何选择最优空间尺度,(R语言或excel表都可),求解?你知道了嘛求解,是代码要重新写嘛
","description":"地理探测器如何选择最优空间尺度,(R语言或excel表都可),求解? 赵哈哈的回答\\n\\n\\n你知道了嘛求解,是代码要重新写嘛","guid":"https://www.zhihu.com/question/597099815/answer/58411737556","author":"赵哈哈","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-18T10:05:11.541Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么现在上班的人都开始摆烂了?-Lionel的回答:工作本质就是剥削,是资本家对于劳动者剩余价值的赚取。任何性质的企业都一样,毕竟现在是市场化。就算你在TZ内...","url":"https://www.zhihu.com/question/613862113/answer/58304321501","content":"为什么现在上班的人都开始摆烂了?工作本质就是剥削,是资本家对于劳动者剩余价值的赚取。任何性质的企业都一样,毕竟现在是市场化。就算你在TZ内,也存在各种资源,关系,很难完全公平了,没资源的普通人,也就图个安稳,当然TZ内,还是要相对公平点,毕竟大多数人还是考进来的。
作为应试教育下出来的绝大多数人,如果你不在TZ内,你奋斗半天都是在给别人卖命,再怎么说公司是老板的,人家吃肉你喝汤。对于部分人来说,可能确实凭借所谓情商高,会表现,可以发展不错。
但是,并不是所有人都想爱表现,都想为了别人的事掏空自己。你干的再好,终究公司不是你的。总经理不持股,也是给资本打工的高级打工仔。对大多数人来说,上班只是依靠公司这个平台,通过出卖劳动力,分担经营风险,用来谋生、养家糊口的一个手段,并不是生活和自我的全部,任何一个人,都追求自由,都不愿意做不喜欢的事儿,不可能想当牛马!
所以,你说你想摆烂,根本不用自责,人之常情,人性就是这样。你可以工作摆烂,但你不能放弃发展自己,投资自己,最好的投资是学习!
我工作快六年多,也曾经相信过什么年轻就该努力,有眼力价什么的。但到现在,我更相信,自己的事应该优先,别相信别人的画饼,指望别人给你升职加薪,毕竟好老板和好制度,还是少数,人性自私、贪婪是多数。把命运交给别人,永远不如自己能力和实力的提高。
如果你不是四面玲珑的人,没必要非强迫自己变成那样的人,作为i人,社交能力可以提高,但性格无法改变。你最好接受你性格的优点和缺点。
你可以工作摆烂,但请记住,战术上可以适当放弃工作(毕竟工作可以换),但你在战略上不能放弃学习,不能因为你的懒惰,使你在市场上的竞争力降低。要努力提高自身能力,多在证件和学历上下功夫,只有学习,能力的切实提高,才是真正有意义的。
诚然,考证、考学历,也不一定总是好使,肯定也有没那么有用的时候。但你有这些积累和阅历,可以永远增强你面对风险的底气,永远多一些选择和出路,另外也可以证明你的智力水平和学习能力不低。要记住,发展自己的优先级,应该比给公司卖命,透支自己要高。
","description":"为什么现在上班的人都开始摆烂了? Lionel的回答\\n\\n\\n工作本质就是剥削,是资本家对于劳动者剩余价值的赚取。任何性质的企业都一样,毕竟现在是市场化。就算你在TZ内,也存在各种资源,关系,很难完全公平了,没资源的普通人,也就图个安稳,当然TZ内,还是要相对公平点,毕竟大多数人还是考进来的。\\n\\n作为应试教育下出来的绝大多数人,如果你不在TZ内,你奋斗半天都是在给别人卖命,再怎么说公司是老板的,人家吃肉你喝汤。对于部分人来说,可能确实凭借所谓情商高,会表现,可以发展不错。\\n\\n但是,并不是所有人都想爱表现,都想为了别人的事掏空自己。你干的再好,终究公司不是你的。总经理不持股…","guid":"https://www.zhihu.com/question/613862113/answer/58304321501","author":"Lionel","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-18T08:05:00.588Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何用 R 语言中的 monocle 进行拟时序分析?-Starlitnightly的回答:作者按 本章节详细讲解了基于随机二阶游走的拟时序模型StaVIA在OmicVerse中的扩展应用。该...","url":"https://www.zhihu.com/question/576725891/answer/58151853824","content":"如何用 R 语言中的 monocle 进行拟时序分析?作者按
本章节详细讲解了基于随机二阶游走的拟时序模型StaVIA在OmicVerse中的扩展应用。该算法可较为精确,快速地计算拟时序值,同时还有很多富有表现力的图像。本教程首发于单细胞最好的中文教程,未经授权许可,禁止转载。
全文字数|预计阅读时间: ~4000|10min
——Starlitnightly(星夜)
VIA是一种单细胞轨迹推断方法,提供拓扑结构构建、伪时间、自动终端状态预测以及沿谱系的时间基因动态的自动绘图功能。在这里,我们改进了原作者的着色逻辑和用户习惯,使用户可以直接使用anndata对象进行分析。
我们使用原VIA作者提供的分析完成了本教程。
论文:使用VIA在单细胞组学数据中进行广义和可扩展的轨迹推断
代码:https://github.com/ShobiStassen/VIA
Colab可重现性:https://colab.research.google.com/drive/1A2X23z_RLJaYLbXaiCbZa-fjNbuGACrD?usp=sharing
import scanpy as sc\\nimport omicverse as ov\\nfrom omicverse.externel import VIA\\n\\nimport matplotlib.pyplot as plt\\nov.plot_set()
____ _ _ __ \\n / __ \\\\____ ___ (_)___| | / /__ _____________ \\n / / / / __ `__ \\\\/ / ___/ | / / _ \\\\/ ___/ ___/ _ \\\\ \\n/ /_/ / / / / / / / /__ | |/ / __/ / (__ ) __/ \\n\\\\____/_/ /_/ /_/_/\\\\___/ |___/\\\\___/_/ /____/\\\\___/ \\n\\nVersion: 1.6.9, Tutorials: https://omicverse.readthedocs.io/
作为示例,我们将差异动力学分析应用于海马齿状回神经发生,该过程包含多个异质性亚群。
import scvelo as scv\\nadata=scv.datasets.dentategyrus()\\nadata
在这里,我们加载了一个包含2930个观测值和13913个变量的AnnData对象。接下来,我们对数据进行预处理。
adata=ov.pp.preprocess(adata,mode=\'shiftlog|pearson\',n_HVGs=2000,)\\nadata.raw = adata\\nadata = adata[:, adata.var.highly_variable_features]\\nov.pp.scale(adata)\\nov.pp.pca(adata,layer=\'scaled\',n_pcs=50)
这段代码对数据进行了以下操作:
接下来,我们构建邻居图并计算UMAP嵌入。
ov.pp.neighbors(adata,use_rep=\'scaled|original|X_pca\',n_neighbors=15,n_pcs=30)\\nov.pp.umap(adata,min_dist=1)
这段代码通过计算邻居来构建数据的图结构,并将其投影到UMAP空间中进行可视化。
ov.pl.embedding(adata,basis=\'X_umap\',\\n color=[\'clusters\'],\\n frameon=\'small\',cmap=\'Reds\')
这一步通过UMAP可视化了不同簇的分布。
我们需要指定用于VIA推断的细胞特征向量use_rep
,可以使用X_pca, X_scVI或X_glue,取决于分析目的。在这里,我们直接使用X_pca。还需要指定使用多少个组件(不应超过向量的长度)。
此外,我们需要指定用于着色和计算的clusters
。如果root_user
为None,则会自动计算根细胞。
我们还需要设置存储在adata.obsm
中的basis
参数。一个示例是设置为tsne
,因为它存储在obsm: \'tsne\', \'MAGIC_imputed_data\', \'palantir_branch_probs\', \'X_pca\'
中。
其他参数和属性的解释可以在https://pyvia.readthedocs.io/en/latest/notebooks/ViaJupyter_scRNA_Hematopoiesis.html找到。
StaVia用于时间序列
StaVia用于空间-时间分析
ncomps=30\\nknn=15\\nv0_random_seed=4\\nroot_user = [\'nIPC\'] #属于nIPC细胞类型的一个细胞的索引\\nmemory = 10\\ndataset = \'\'\\nuse_rep = \'scaled|original|X_pca\'\\nclusters = \'clusters\'\\nbasis=\'X_umap\'\\n\\nv0 = VIA.core.VIA(data=adata.obsm[use_rep][:, 0:ncomps], \\n true_label=adata.obs[clusters], \\n edgepruning_clustering_resolution=0.15, cluster_graph_pruning=0.15,\\n knn=knn, root_user=root_user, resolution_parameter=1.5,\\n dataset=dataset, random_seed=v0_random_seed, memory=memory)\\n\\nv0.run_VIA()
在后续分析之前,我们需要指定每个簇的颜色。在这里,我们使用sc.pl.embedding
自动为每个簇着色,如果需要指定自己的颜色,可以指定调色板参数。
fig, ax, ax1 = VIA.core.plot_piechart_viagraph_ov(adata,clusters=\'clusters\',dpi=80,\\n via_object=v0, ax_text=False,show_legend=False)\\nfig.set_size_inches(8,4)
adata.obs[\'pt_via\']=v0.single_cell_pt_markov\\nov.pl.embedding(adata,basis=\'X_umap\',\\n color=[\'pt_via\'],\\n frameon=\'small\',cmap=\'Reds\')
以不同方式可视化投影到二维嵌入(如UMAP, Phate, TSNE等)上的VIA轨迹。
关键参数:
clusters=\'clusters\'\\ncolor_true_list=adata.uns[\'{}_colors\'.format(clusters)]\\nfig, ax, ax1 = VIA.core.plot_trajectory_curves_ov(adata,clusters=\'clusters\',dpi=80,\\n via_object=v0,embedding=adata.obsm[\'X_umap\'],\\n draw_all_curves=False)
v0.embedding = adata.obsm[\'X_umap\']\\nfig, ax = VIA.core.plot_atlas_view(via_object=v0, \\n n_milestones=150, \\n sc_labels=adata.obs[\'clusters\'], \\n fontsize_title=12,\\n fontsize_labels=12,dpi=80,\\n extra_title_text=\'Atlas View colored by pseudotime\')\\nfig.set_size_inches(4,4)
# edge plots can be made with different edge resolutions. Run hammerbundle_milestone_dict() to recompute the edges for plotting. Then provide the new hammerbundle as a parameter to plot_edge_bundle()\\n# it is better to compute the edges and save them to the via_object. this gives more control to the merging of edges\\ndecay = 0.6 #increasing decay increasing merging of edges\\ni_bw = 0.02 #increasing bw increases merging of edges\\nglobal_visual_pruning = 0.5 #higher number retains more edges\\nn_milestones = 200\\n\\nv0.hammerbundle_milestone_dict= VIA.core.make_edgebundle_milestone(via_object=v0, \\n n_milestones=n_milestones, \\n decay=decay, initial_bandwidth=i_bw,\\n global_visual_pruning=global_visual_pruning)\\nfig, ax = VIA.core.plot_atlas_view(via_object=v0, \\n add_sc_embedding=True, \\n sc_labels_expression=adata.obs[\'clusters\'], \\n cmap=\'jet\', sc_labels=adata.obs[\'clusters\'], \\n text_labels=True, \\n extra_title_text=\'Atlas View by Cell type\', \\n fontsize_labels=3,fontsize_title=3,dpi=300\\n )\\nfig.set_size_inches(6,4)\\n# via_streamplot() requires you to either provide an ndarray as embedding as an input parameter OR for via to have an embedding attribute\\nfig, ax = VIA.core.via_streamplot_ov(adata,\'clusters\',\\n v0, embedding=adata.obsm[\'X_umap\'], dpi=80,\\n density_grid=0.8, scatter_size=30, \\n scatter_alpha=0.3, linewidth=0.5)\\nfig.set_size_inches(5,5)
#Colored by pseudotime\\n\\nfig, ax = VIA.core.via_streamplot_ov(adata,\'clusters\',\\n v0,density_grid=0.8, scatter_size=30, color_scheme=\'time\', linewidth=0.5, \\n min_mass = 1, cutoff_perc = 5, scatter_alpha=0.3, marker_edgewidth=0.1, \\n density_stream = 2, smooth_transition=1, smooth_grid=0.5,dpi=80,)\\nfig.set_size_inches(5,5)
可视化从根到终端状态的概率路径,这由谱系可能性指示。谱系可能性越高,特定细胞向终端状态分化的潜力就越大。改变记忆参数将改变谱系路径的特异性。这可以在单细胞水平可视化,也可以与可视化细胞-细胞连接性和路径的Atlas View结合。
关键参数:
fig, axs= VIA.core.plot_sc_lineage_probability(via_object=v0, dpi=80,\\n embedding=adata.obsm[\'X_umap\'])\\nfig.set_size_inches(12,12)
fig, axs= VIA.core.plot_atlas_view(via_object=v0, dpi=80,\\n lineage_pathway=[5,25,4],\\n fontsize_title = 12,\\n fontsize_labels = 12,\\n )\\nfig.set_size_inches(12,4)
查看基因表达在VIA图上的变化。我们使用VIA中计算的HNSW小世界图来加速基因插补计算(使用类似于MAGIC的方法):
import pandas as pd\\ngene_list_magic =[\'Tmsb10\', \'Hn1\', ]\\ndf = adata.to_df()\\ndf_magic = v0.do_impute(df, magic_steps=3, gene_list=gene_list_magic) #optional\\nfig, axs = VIA.core.plot_viagraph(via_object=v0, \\n type_data=\'gene\',\\n df_genes=df_magic, \\n gene_list=gene_list_magic[0:3], arrow_head=0.1)\\nfig.set_size_inches(12,4)
VIA自动推断所有检测到的谱系的基因动态。这些可以解释为沿任何给定谱系的基因表达变化。
关键参数
fig, axs=VIA.core.get_gene_expression(via_object=v0, \\n gene_exp=df_magic[gene_list_magic])\\nfig.set_size_inches(14,4)
fig, axs = VIA.core.plot_gene_trend_heatmaps(via_object=v0, \\n df_gene_exp=df_magic, cmap=\'plasma\',\\n marker_lineages=[34,5])\\nfig.set_size_inches(5,5)
VIA.core.animate_streamplot_ov(adata,\'clusters\',v0, embedding=adata.obsm[\'X_umap\'],\\n cmap_stream=\'Blues\', \\n scatter_size=200, scatter_alpha=0.2, marker_edgewidth=0.15, \\n density_grid=0.7, linewidth=0.1, \\n segment_length=1.5, \\n saveto=\'result/animation_test.gif\')
from IPython.display import Image\\n\\nwith open(\'result/animation_test.gif\',\'rb\') as file:\\n display(Image(file.read(),width=400,height=400))\\nVIA.core.animate_atlas(via_object=v0, \\n extra_title_text=\'test animation\',\\n n_milestones=None,\\n saveto=\'result/edgebundle_test.gif\')\\nfrom IPython.display import Image\\n\\nwith open(\'result/edgebundle_test.gif\',\'rb\') as file:\\n display(Image(file.read(),width=500,height=500))\\nadata.obs[\'pt_via\']=v0.single_cell_pt_markov\\nadata.write(\'data/stavia_res.h5ad\',compression=\'gzip\')
以上是关于使用StaVIA进行轨迹推断的完整教程,涵盖了数据预处理、模型构建、轨迹可视化、概率路径分析以及基因动态分析等多个方面。
","description":"如何用 R 语言中的 monocle 进行拟时序分析? Starlitnightly的回答\\n\\n\\n作者按\\n 本章节详细讲解了基于随机二阶游走的拟时序模型StaVIA在OmicVerse中的扩展应用。该算法可较为精确,快速地计算拟时序值,同时还有很多富有表现力的图像。本教程首发于单细胞最好的中文教程,未经授权许可,禁止转载。\\n 全文字数|预计阅读时间: ~4000|10min\\n ——Starlitnightly(星夜)\\n\\nVIA是一种单细胞轨迹推断方法,提供拓扑结构构建、伪时间、自动终端状态预测以及沿谱系的时间基因动态的自动绘图功能。在这里…","guid":"https://www.zhihu.com/question/576725891/answer/58151853824","author":"Starlitnightly","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-18T05:03:00.553Z","media":[{"url":"https://picx.zhimg.com/v2-ba1b40f612b903a5f9f2d02d45d937a1.jpg","type":"photo","width":846,"height":632,"blurhash":"LDQTDmAI?v_2E4IV-p?G~U?Fs,M|"},{"url":"https://pic1.zhimg.com/v2-4daf1ab41c863300cccb8850057205b4.jpg","type":"photo","width":1175,"height":572,"blurhash":"LNRyvm~WoMtR%Novxut8%MM{V@t6"},{"url":"https://picx.zhimg.com/v2-9aff812615ba0a5ff5bb43b382c64400.jpg","type":"photo","width":587,"height":578,"blurhash":"LPR.[Y?^cEibrY%Mx[MeXnVsVrbc"},{"url":"https://picx.zhimg.com/v2-e97693d236dec888a329c9802b0ed9fc.jpg","type":"photo","width":2624,"height":1301,"blurhash":"LWQTM*~q-qjGM+xst6IV$,WXR#R*"},{"url":"https://picx.zhimg.com/v2-41fa149c60835fee9ace8393e359281d.jpg","type":"photo","width":692,"height":562,"blurhash":"LPSF*4_Na}-o%GRoofawbXRja#Rk"},{"url":"https://picx.zhimg.com/v2-5600745fc85865de331c68f0bba7de16.jpg","type":"photo","width":656,"height":676,"blurhash":"LeQcxM~p-VIqM|%LRjRkxsWXRls."},{"url":"https://picx.zhimg.com/v2-4e668dce5eff8213eb8125ff0c1ec072.jpg","type":"photo","width":656,"height":676,"blurhash":"LaQmO|~q$-NEIb%LR$M}%3WBR~oN"},{"url":"https://pic1.zhimg.com/v2-6dd445deef60f440c590c364835ad970.jpg","type":"photo","width":1597,"height":1527,"blurhash":"LCQ,2h~qIq_M?bWXoLbIs:j?S2ay"},{"url":"https://picx.zhimg.com/v2-743c1f7a6a6816e7553e5b21241911aa.jpg","type":"photo","width":1617,"height":562,"blurhash":"LMSF*5_Nfi-p-.Rnt7j=brRQt7WV"},{"url":"https://picx.zhimg.com/v2-da9076c987ba5ef0c6eed26b542e17ee.jpg","type":"photo","width":955,"height":588,"blurhash":"LLRfa;?u4UR6=vj]#*nhWEa#R+ay"},{"url":"https://picx.zhimg.com/v2-0bd7c3467dbccbb8b33cb019e2a3f84c.jpg","type":"photo","width":3381,"height":1125,"blurhash":"LDRyvn.8IU~qxZR%n-%M?HnhRQfl"},{"url":"https://picx.zhimg.com/v2-5856e4eea9df158e8f0a3401786d88fa.jpg","type":"photo","width":706,"height":706,"blurhash":"L%OVis?8?[J;$if6She?tQahR+oJ"},{"url":"https://pica.zhimg.com/v2-2c7ac1c491f98eede22943d1c992e251.jpg","type":"photo","width":500,"height":400,"blurhash":"LXP%eV~p^jV{9b-:obE2jXxuNIWD"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何零基础自学R语言?-亿牛云爬虫专家的回答:[图片] 背景/引言在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业...","url":"https://www.zhihu.com/question/279781791/answer/58005537198","content":"如何零基础自学R语言?在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业调研还是信息整理,表格数据的结构化特性都使其具有较高的利用价值。然而,如何快速、准确地从网页中提取表格数据始终是爬虫技术的一个挑战。
本文将介绍如何利用 R 语言中的 html_table
函数轻松提取网页表格数据,并结合代理 IP 技术(以爬虫代理为例)实现对反爬机制的规避,最终采集 www.58.com 的租房信息。
html_table
函数html_table
是 R 语言中 rvest
包的一个重要函数,用于将 HTML 文档中的表格节点转换为 R 中的 data.frame
,极大地简化了表格数据的提取流程。
使用 html_table
的基本步骤包括:
html_table
函数解析表格。很多网站(如 http://www.58.com)会对频繁的访问进行限制,常见的限制手段包括 IP 限制、User-Agent 检测、Cookie 校验等。通过使用代理 IP,可以有效地降低被限制的风险。
在本文示例中,我们将参考爬虫代理的域名、端口、用户名、密码,并结合 httr
包实现代理设置。
为了模拟真实用户的访问,我们需要在请求中加入 User-Agent
和 Cookie
。
下面的代码展示了如何结合 R 语言、html_table
函数以及代理技术采集 www.58.com 的租房信息,并将数据保存到文件中。
# 加载必要的库\\nlibrary(rvest)\\nlibrary(httr)\\nlibrary(xml2)\\n\\n# 设置代理IP信息(以亿牛云爬虫代理加强版为例 www.16yun.cn)\\nproxy_url <- \\"http://proxy.16yun.cn:端口\\"\\nproxy_user <- \\"用户名\\"\\nproxy_pass <- \\"密码\\"\\n\\n# 自定义请求头\\nheaders <- c(\\n \\"User-Agent\\" = \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.1 Safari/537.36\\",\\n \\"Cookie\\" = \\"your_cookie_here\\"\\n)\\n\\n# 目标网页URL\\nurl <- \\"https://www.58.com/chuzu\\"\\n\\n# 使用代理发送请求\\nresponse <- GET(\\n url,\\n config = use_proxy(url = proxy_url, username = proxy_user, password = proxy_pass),\\n add_headers(.headers = headers)\\n)\\n\\n# 检查响应状态\\nif (status_code(response) == 200) {\\n # 解析HTML文档\\n html_content <- content(response, as = \\"text\\", encoding = \\"UTF-8\\")\\n parsed_html <- read_html(html_content)\\n\\n # 提取表格数据\\n tables <- html_nodes(parsed_html, \\"table\\") # 定位所有表格\\n\\n if (length(tables) > 0) {\\n table_data <- html_table(tables[[1]], fill = TRUE) # 提取第一个表格\\n\\n # 查看提取结果\\n print(table_data)\\n\\n # 保存数据到文件\\n write.csv(table_data, file = \\"rent_info.csv\\", row.names = FALSE)\\n cat(\\"数据已保存到文件:rent_info.csv\\\\n\\")\\n } else {\\n cat(\\"未找到任何表格\\\\n\\")\\n }\\n} else {\\n cat(\\"请求失败,状态码:\\", status_code(response), \\"\\\\n\\")\\n}
use_proxy
函数设置代理。add_headers
函数自定义 User-Agent
和 Cookie
。User-Agent
模拟真实浏览器行为。html_nodes
定位表格节点。html_table
解析表格内容为 data.frame
。write.csv
函数将提取的数据保存为 CSV 文件。通过本文的介绍,我们可以看到,利用 R 语言的 html_table
函数结合代理 IP 技术,不仅能够轻松提取网页表格数据,还可以有效规避网站的反爬策略。在实际应用中,合理设置请求参数和优化代码逻辑是保证数据采集效率的关键。
对于需要频繁采集或高频访问的网站,建议使用商业代理服务(如爬虫代理),以保障数据采集的稳定性和合法性。
通过上述方法,开发者可以快速获得目标表格数据,为后续的数据分析和挖掘提供坚实的基础。
","description":"如何零基础自学R语言? 亿牛云爬虫专家的回答\\n\\n爬虫代理加强版\\n\\n\\n\\n\\n背景/引言\\n\\n在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业调研还是信息整理,表格数据的结构化特性都使其具有较高的利用价值。然而,如何快速、准确地从网页中提取表格数据始终是爬虫技术的一个挑战。\\n\\n本文将介绍如何利用 R 语言中的 html_table 函数轻松提取网页表格数据,并结合代理 IP 技术(以爬虫代理为例)实现对反爬机制的规避,最终采集 www.58.com 的租房信息。\\n\\n正文\\n1. 了解 html_table 函数\\n\\nhtml_table 是 R 语言中 rv…","guid":"https://www.zhihu.com/question/279781791/answer/58005537198","author":"亿牛云爬虫专家","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-18T02:30:10.771Z","media":[{"url":"https://pica.zhimg.com/v2-97b6121baff9a4d1c5170689ef9731f3.jpg","type":"photo","width":1024,"height":1024,"blurhash":"LIDv$foL4TtRE3ozxZM{t7ozR+t8"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"利用 html_table 函数轻松获取网页中的表格数据","url":"https://zhuanlan.zhihu.com/p/13250415006","content":"[图片] 背景/引言在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业调研还是信息整理,表格数据的结构化特性都使其具有较高的利用价值。然而,如何快速、准确地从网页中提取表格数据始终是爬虫技术的一个挑战。 本文将介绍如何利用 R 语言中的 html_table 函数轻松提取网页表格数据,并结合代理 IP 技术(以爬虫代理为例)实现对反爬机制的规避,最终采集 www.58.com 的租房信息。正文1. …","description":"[图片] 背景/引言在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业调研还是信息整理,表格数据的结构化特性都使其具有较高的利用价值。然而,如何快速、准确地从网页中提取表格数据始终是爬虫技术的一个挑战。 本文将介绍如何利用 R 语言中的 html_table 函数轻松提取网页表格数据,并结合代理 IP 技术(以爬虫代理为例)实现对反爬机制的规避,最终采集 www.58.com 的租房信息。正文1.…","guid":"https://zhuanlan.zhihu.com/p/13250415006","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-18T02:30:09.462Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"线性方程组AX=B有解的充要条件为什么不是R(A)=R(B),而是R(A,B)=R(A),麻烦了?-青椒奶糖的回答:[图片]","url":"https://www.zhihu.com/question/310600948/answer/57996509390","content":"线性方程组AX=B有解的充要条件为什么不是R(A)=R(B),而是R(A,B)=R(A),麻烦了?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1:3]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=wt, y=mpg, fill = Type)) +\\n geom_point(shape=21, color=\\"black\\", size=6) +\\n scale_y_continuous(breaks=seq(5,35,5), limits = c(5,35),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line(),\\n legend.position = \\"top\\") +\\n scale_fill_manual(values = c(\\"#5470c6\\",\\"#91cc75\\",\\"#fac858\\"))\\np
最后我们保存绘制的图形:
ggsave(\\"save/scatter-group.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
▶资源推荐S003-雷达对海探测数据
数据来源:雷达学报
◆数据内容:海用雷达在对海上目标探测过程中易受海杂波影响,高海况、复杂气象条件下尤为严重。开展海杂波特性、海杂波抑制、海上目标检测跟踪与识别方法研究,需要多种条件下的海杂波和海上目标回波实测数据,海军航空大学海上目标探测课题组于2019年提出一项“雷达对海探测数据共享计划”,旨在利用X波段固态全相参雷达等多型雷达开展对海探测试验,获取不同海况、分辨率、擦地角条件下海杂波数据和海上目标回波数据,并同步获取海洋气象水文数据、目标位置与轨迹的真实数据,形成信息全记录的雷达试验数据集。
从2019年到2022年共完成了6期,可以从雷达学报网站上免费下载。下面对各期数据进行介绍。
✔1、2022年第1期
本期数据为5级到2级海况变化条件下的雷达试验数据,试验期间风、浪所对应的的海情是由低到高、再由高到低的过程。试验时有SPPR50P-HH和SPPR50P-VV两部独立的固态功放监视/导航雷达,两部雷达均工作在X波段,采用固态功放组合脉冲发射体制,利用脉冲压缩技术,发射时间为40ns~100us,发射功率为100W,最高距离分辨率为6米。
✔2、2021年第1期
本期数据为云雨气象条件下的雷达试验数据。数据采集时正在下雨(雷阵雨),且雨较大,同时有云雨气团过顶雷达所观察海面的上空(低空)。
✔3、2020年第1期
本期数据主要包括两组:海杂波数据、海杂波+目标回波数据,主要为凝视模式数据(仅1组数据为天线扫描模式数据)。
✔4、2020年第2期
本期数据包括两组:第1组为雷达零中频回波数据(均为脉冲压缩后的数据);第2组为第1组数据对应的PPI图像序列。
✔5、2020年第3期
本期数据为雷达目标RCS定标数据采集试验数据。试验时在海上投放定标体(不锈钢球,RCS为0.25㎡),使其漂浮于海面以上,用船只(MMSI:413659899)拖拽定标体沿雷达径向慢速往返运动,在沿途部分位置点静止(漂浮),雷达工作模式固定不变,采集试验全程的雷达与配合传感器数据。
✔6、2019年第1期
本期数据分为3组,包括53个雷达数据及相应的6个气象水文数据和4个AIS数据文件。
★推荐语:该组数据不仅提供了原始数据,还有对应的说明文章,对雷达感兴趣的同学,可以免费下载数据对照相应的文章进行学习。
在当今数字化时代,数据已经成为企业和组织决策的重要依据。Python 作为一种功能强大且易于学习的编程语言,在数据分析领域占据着重要地位。它拥有丰富的库和工具,能够高效地处理、分析和可视化数据,帮助数据分析师和科学家从海量数据中提取有价值的信息,为决策提供支持。本文将详细介绍 Python 数据分析的各个方面,从基础环境搭建到数据处理、分析、可视化以及实际案例应用,旨在帮助读者全面掌握 Python 数据分析的技能。
【教程领取方式在文末!!】
【教程领取方式在文末!!】
sudo apt-get install python3
命令安装 Python 3。pip install pandas
、pip install numpy
、pip install matplotlib
。这些库将为数据处理、数值计算和数据可视化提供强大的功能。read_csv
函数来读取 CSV 格式的文件。例如,import pandas as pd; data = pd.read_csv(\'data.csv\')
,其中data.csv
是要读取的文件名,读取后的数据将存储在data
变量中,它是一个DataFrame
对象,可以方便地进行数据操作。read_excel
函数可以读取 Excel 文件。如df = pd.read_excel(\'data.xlsx\', sheet_name=\'Sheet1\')
,这里指定了要读取的 Excel 文件中的工作表名称为Sheet1
。SQLAlchemy
库可以连接到各种数据库。例如,对于 MySQL 数据库,可以这样连接:其中user
是用户名,password
是密码,host
是数据库主机地址,port
是端口号,database
是数据库名称。
pd.read_sql
函数从数据库中读取数据,如data = pd.read_sql(\'SELECT * FROM table_name\', engine)
,这里table_name
是要读取数据的表名。requests
库:可以发送 HTTP 请求获取网络数据。例如,要获取一个网页的内容:然后可以使用BeautifulSoup
等库对获取到的 HTML 内容进行解析,提取所需的数据。
dropna
方法。例如,data.dropna(axis=0, how=\'any\')
将删除含有任何缺失值的行,axis=1
则表示删除含有缺失值的列。fillna
方法可以填充缺失值。如data.fillna(0)
将所有缺失值填充为 0,也可以根据数据的特点选择合适的填充值,如使用均值或中位数填充。例如,data[\'column_name\'].fillna(data[\'column_name\'].mean())
将使用column_name
列的均值填充该列的缺失值。drop_duplicates
方法可以删除重复的行。例如,data.drop_duplicates()
将删除数据中的重复行。pd.to_datetime
函数。如data[\'date_column\'] = pd.to_datetime(data[\'date_column\'])
。describe
方法可以获取数据的基本统计信息,如均值、中位数、标准差等。例如,data.describe()
将对DataFrame
中的数值列进行统计分析并输出结果。matplotlib
库可以绘制直方图来观察数据的分布。例如:这将绘制column_name
列数据的直方图,展示数据在不同区间的分布情况。
plt.boxplot(data[\'column_name\'])
将绘制column_name
列数据的箱线图。corr
方法可以计算数据列之间的相关性系数。例如,data.corr()
将返回一个相关系数矩阵,展示各列数据之间的线性相关关系。groupby
方法可以对数据进行分组。例如,grouped = data.groupby(\'category_column\')
将根据category_column
列对数据进行分组。然后可以对分组后的数据进行聚合操作,如计算每组的均值:grouped.mean()
。pivot_table
方法可以创建数据透视表。例如,pivot = pd.pivot_table(data, values=\'value_column\', index=\'row_column\', columns=\'column_column\')
,这里指定了要汇总的value_column
列、行索引row_column
和列索引column_column
,创建出的数据透视表可以方便地对数据进行多维度的分析。resample
方法对时间序列数据进行重采样,如将每日数据转换为每月数据:monthly_data = data.resample(\'M\', on=\'date_column\').sum()
,这里M
表示月度,on=\'date_column\'
指定了日期列,然后对重采样后的数据进行分析,如观察趋势、季节性等。matplotlib
绘制折线图可以展示数据随时间或其他连续变量的变化趋势。例如:matplotlib
的高级可视化库,它可以创建更美观、更具统计意义的图表。例如,绘制热力图展示相关性矩阵:sns.countplot(x=\'category_column\', data=data)
将绘制category_column
列的分类计数图。OneHotEncoder
将类别变量转换为二进制向量;对数值变量进行标准化或归一化,如使用StandardScaler
将数据标准化,使其均值为 0,标准差为 1。scikit-learn
库训练一个简单的线性回归模型为例:这里首先将数据分为特征X
和目标y
,然后划分训练集和测试集,最后训练线性回归模型。
3. 模型评估与优化
from sklearn.metrics import mean_squared_error; y_pred = model.predict(X_test); mse = mean_squared_error(y_test, y_pred)
将计算线性回归模型在测试集上的均方误差。如果模型效果不理想,可以通过调整模型参数、增加数据量或尝试不同的模型来进行优化。通过本文的学习,读者应该对 Python 数据分析有了较为全面的了解。从基础环境搭建到数据获取、清洗、分析、可视化以及机器学习应用和案例分析等方面都进行了详细的阐述。
在实际应用中,数据分析是一个不断迭代和优化的过程,需要根据数据的特点和分析的目的灵活运用各种方法和工具。
Python数据分析练手项目
除了基础理论知识,实战练手项目也是掌握Python数据分析不可或缺的一部分!读书百遍不如上手一练,好的练手项目,会让你更好的掌握知识并运用。
曾曾在此给大家准备了48个Python数据分析练手项目,希望能帮助到大家!完整版源码文末自取
1、批量更改Excel文件中200多个工作表的内容
2、实例25_批量生成PPT版荣誉证书
3、实例26_一键抓出PPT中的所有文字
4、快速提取一串字符中的中文
5、在Excel表格中将上下行相同内容的单元格自动合并
6、在Word表格中将上下行相同内容的单元格自动合并
7、一键往Word文档的表格中填写数据
8、用Python设置Word文档里表格的格式
9、实例32_用Python批量往Word文档中指定位置添加图片
10、用Python批量压缩图片
11、用Python在Excel中查找并替换数据
12、在Excel中按条件筛选数据并存入新的表
13、用Python将PDF文件转存为图片
14、Python调用百度Al实现文字识别
15、Python调用人工智能识别表格
16、用Python批量重命名文件
17、实例40_用Python按时间分割txt文件中的数据
18、Python分类汇总278张Excel表中的数据
19、从Excel总表中分割10个部门的年假数据
20、批量发送不同内容的邮件给不同的收件人
21、批量从上市公司年报中获取指定内容
22、用Python分析文本数据的词频
23、Python文本数据可视化之“词云\\"图
24、Python替换不了word中的文字?
25、批量修改word文件中的段落格式
26、实例49_一键将word中的表格提取到excel文件中
27、Python一键提取PDF中的表格到Excel
28、5行代码,Python给孩子出数学练习题
29、实例52_Pandas提取指定数据并保存在原Excel工作簿中
30、实例54_Python指挥打印机批量打印文件
31、看你怎么作弊抄答案?Python出题,每个学生的都不一样20:28
32、Python从多路径多Excel表中获取数据并存入新表
33、Python爬虫爬取会计师协会网站的指定文章
34、Python爬虫~已爬取目标网站所有文章,后续如何只获取新文章
35、实例59_Python检查word文件中的特殊标记词是否与文件名中的一致
36、Python汇总各单位Excel档领料记录并加总每日领用次数
37、Python制作图形用户界面(GUI)让操作可视化
38、将Python程序打包成安装文件分享给小伙伴
39、Tkinter制作Python程序的图形用户界面(GUI).打包后比Qt5减少
40、Python分块拆分txt文件中的数据
41、Python识别加密的word文件并移动到单独文件夹
42、Python一键更新Excel档“生产订单周报\\"的图表
43、Python爬取博客的所有文章并存为带目录的word文档
44、Python批量新建文件夹并保存日志信息
45、Python保留格式复制多个excel工作表到汇总表并生成目录
46、Python批量将公号文章保留原格式下载为PDF
47、实例71_Python从Excel表中批量复制粘贴数据到新表
48、Python气象数据分析
如何获取资料:
随着大数据和数据科学的迅速发展,互联网数据的抓取已经成为重要的信息获取手段之一。网页抓取(Web Scraping)可以帮助我们自动化地从网页中提取有价值的数据,应用广泛,包括新闻热点分析、金融数据采集等。在本篇文章中,我们将介绍如何使用 R 语言中的 rvest
包,结合代理 IP 技术,快速抓取新闻网站的数据。我们以 澎湃新闻(The Paper,网址:https://www.thepaper.cn)为例,展示如何抓取该网站的新闻热点,包括标题和摘要,并将其保存为文件。
澎湃新闻(The Paper)是中国领先的新闻网站之一,致力于为读者提供深度报道、时事新闻以及各类热点话题的最新动态。作为国内重要的媒体平台之一,澎湃新闻广泛涉及政治、经济、文化、科技等多个领域,并且具有较高的新闻质量和社会影响力。由于其内容广泛且实时更新,抓取其新闻热点成为数据分析与研究的一个常见应用场景。
本文将通过一个简单的示例,帮助读者从入门到精通地掌握 rvest
包的使用,并结合代理 IP、Cookie 和 User-Agent 的设置,提高爬虫抓取效率。
rvest
包是 R 语言中专为网页抓取设计的工具,简洁高效,能够处理 HTML 页面内容的解析、数据提取等任务。通过 rvest
,我们可以轻松地获取网页中的各种信息,例如文章标题、作者、内容、图片链接等。与其他网页抓取工具相比,rvest
更加适合 R 用户,提供了一系列直观的 API。
在实际抓取过程中,尤其是高频率抓取时,网站往往会对频繁访问的 IP 进行封锁或限制。为了规避此类问题,我们可以通过使用代理 IP 来隐匿真实 IP,从而避免被反爬虫机制检测到。本文以爬虫代理提供的代理IP服务为例,演示如何配置代理,保证爬虫能稳定抓取目标网页。
我们目标是抓取澎湃新闻(The Paper)网站的热点新闻,包括文章的标题和摘要。抓取的流程如下:
rvest
解析网页结构。以下是完整的实现代码,包含详细的中文注释,帮助读者理解每个关键步骤。
# 加载必要的 R 包\\nlibrary(rvest)\\nlibrary(httr)\\n\\n# 设置代理 IP 配置(以亿牛云代理为例 www.16yun.cn)\\nproxy_url <- \\"http://proxy.16yun.cn:代理端口\\"\\nproxy_user <- \\"你的用户名\\"\\nproxy_password <- \\"你的密码\\"\\n\\n# 设置 User-Agent 和 Cookie\\nheaders <- add_headers(\\n `User-Agent` = \\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.89 Safari/537.36\\",\\n `Cookie` = \\"你的Cookie字符串\\"\\n)\\n\\n# 创建一个包含代理的会话对象\\nproxy_config <- use_proxy(url = proxy_url, port = 80, username = proxy_user, password = proxy_password)\\n\\n# 目标网页 URL,指向澎湃新闻热点页面\\nnews_url <- \\"https://www.thepaper.cn/newsDetail_forward_1234567\\" # 需要替换为实际新闻页面链接\\n\\n# 抓取数据的主要函数\\nscrape_news <- function(url) {\\n # 获取网页内容\\n response <- GET(url, proxy_config, headers)\\n\\n # 检查响应状态\\n if (http_status(response)$category != \\"Success\\") {\\n stop(\\"无法访问目标网页,请检查代理或网络配置。\\")\\n }\\n\\n # 解析 HTML 内容\\n html <- content(response, \\"text\\") %>% read_html()\\n\\n # 提取标题和摘要\\n titles <- html %>% html_nodes(\\".news_title\\") %>% html_text(trim = TRUE)\\n summaries <- html %>% html_nodes(\\".news_summary\\") %>% html_text(trim = TRUE)\\n\\n # 合并为数据框\\n news_data <- data.frame(标题 = titles, 摘要 = summaries, stringsAsFactors = FALSE)\\n\\n return(news_data)\\n}\\n\\n# 抓取新闻数据\\nnews_data <- scrape_news(news_url)\\n\\n# 保存数据到文件\\noutput_file <- \\"news_data.csv\\"\\nwrite.csv(news_data, output_file, row.names = FALSE, fileEncoding = \\"UTF-8\\")\\n\\n# 提示用户保存成功\\ncat(\\"新闻数据已成功保存到文件:\\", output_file, \\"\\\\n\\")
use_proxy
函数设置代理,使爬虫请求通过指定的代理服务器发送,从而避免被网站封锁 IP。add_headers
函数设置 HTTP 请求头中的 User-Agent
和 Cookie
,模拟真实浏览器的访问行为,有效绕过一些简单的反爬虫策略。html_nodes
和 html_text
提取页面中的新闻标题和摘要。根据澎湃新闻网站的实际 HTML 结构,\\".news_title\\"
和 \\".news_summary\\"
是新闻标题和摘要对应的 CSS 选择器。使用 rvest
包进行网页抓取是一个高效且直观的方法,尤其适合 R 用户。通过结合代理 IP、Cookie 和 User-Agent 的设置,可以有效绕过反爬虫机制,保证爬虫的稳定性与高效性。本文以澎湃新闻为例,展示了如何抓取新闻热点数据,包括如何处理代理 IP、如何解析 HTML 页面并提取目标数据,最后将数据存储为文件。通过本篇教程,读者可以快速掌握使用 rvest
包抓取网页数据的基本技巧,并在实际项目中应用这些知识。
本系列开启R中单细胞RNA-seq数据分析教程,持续更新,欢迎关注,转发!
现在,很少有人只进行一次单细胞RNA测序实验并仅产生一份数据。原因很直接:目前的单细胞RNA测序技术每次只能捕捉到有限样本的分子状态。为了在多个实验和不同条件下对众多样本进行测量,通常需要对来自不同实验的单细胞RNA测序数据进行联合分析。虽然有些实验策略,比如细胞哈希!,以及一些计算方法,比如demuxlet 和scSplit,能够在一定程度上将多个样本合并进行单细胞RNA测序库的构建和测序,但像组织分离这样的步骤仍然需要针对不同样本单独进行。因此,与处理常规RNA-seq数据一样,批次效应往往是需要解决的关键干扰因素。
在本教程将介绍几种单细胞RNA测序数据整合的方法。需要记住的是,目前还没有一种整合方法能够适用于所有情况。因此,尝试多种方法并进行比较,最终选择最适合特定情况的方法,是非常重要的。
从导入Seurat并加载保存的Seurat对象开始。
library(Seurat)\\nlibrary(dplyr)\\nlibrary(patchwork)\\nseurat_DS1 <- readRDS(\\"DS1/seurat_obj_all.rds\\")\\nseurat_DS2 <- readRDS(\\"DS2/seurat_obj_all.rds\\")\\n
首先,有可能批次效应并不显著,因此不需要进行特别的整合。所以,应当首先尝试将这两个数据集直接合并,以便进行初步的观察。
seurat <- merge(seurat_DS1, seurat_DS2) %>%\\n FindVariableFeatures(nfeatures = 3000) %>%\\n ScaleData() %>%\\n RunPCA(npcs = 50) %>%\\n RunUMAP(dims = 1:20)\\nplot1 <- DimPlot(seurat, group.by=\\"orig.ident\\")\\nplot2 <- FeaturePlot(seurat, c(\\"FOXG1\\",\\"EMX1\\",\\"DLX2\\",\\"LHX9\\"), ncol=2, pt.size = 0.1)\\nplot1 + plot2 + plot_layout(widths = c(1.5, 2))\\n
显然,这两个数据集在嵌入图上是相互独立的。然而,标记基因的表达模式显示,这两个数据集实际上有许多共同的细胞类型。理想情况下,两个数据集中相同类型的细胞应该能够混合在一起。但由于批次效应的影响,它们并没有混合。因此,需要对数据进行整合。的目标是,在整合之后,两个数据集中相同类型的细胞能够混合,而不同类型的细胞或状态仍然保持分离。
将尝试以下几种不同的整合方法:
Seurat内置了数据整合流程。简单来说,它首先对需要整合的数据集执行典型相关分析(CCA),独立旋转它们以最大化两数据集之间的协方差。换言之,Seurat利用CCA寻找增强数据集间相似性的最佳方式。之后,Seurat引入了一个锚定机制,在两个数据集中寻找细胞锚点。细胞锚点由来自不同数据集的一对细胞组成,它们在CCA空间中互为最近邻,同时一个细胞在自己数据集中的最近邻也倾向于与另一细胞的最近邻相邻。这两个锚定的细胞被视为两个数据集中相互对应的细胞,然后通过计算两个数据集中锚定细胞对的转换矩阵,并从其中一个数据集的表达中减去这个转换矩阵来执行整合过程。
使用Seurat进行整合前,需要先对每个待整合的数据集进行归一化并识别高变异基因(这应该是已经完成的步骤)。如果尚未完成,需要先进行这一步:
seurat_DS1 <- NormalizeData(seurat_DS1) %>% FindVariableFeatures(nfeatures = 3000)\\nseurat_DS2 <- NormalizeData(seurat_DS2) %>% FindVariableFeatures(nfeatures = 3000)\\n
然后,确定数据集的锚点。在此步骤中,Seurat 需要一个包含多个 Seurat 对象的列表作为输入。需要指出的是,Seurat 支持整合两个以上样本的数据。只需将它们列成一个列表即可。
seurat_objs <- list(DS1 = seurat_DS1, DS2 = seurat_DS2)\\nanchors <- FindIntegrationAnchors(object.list = seurat_objs, dims = 1:30)\\n
然后,把确定的锚点集合输入到IntegrateData
函数中,以便对表达水平进行校正。
seurat <- IntegrateData(anchors, dims = 1:30)\\n
执行IntegrateData
函数会生成一个新的Assay
对象(默认名称为integrated
),其中保存了经过批次校正后的表达矩阵。原始未经校正的数据仍然保留,在默认名为RNA
的原始Assay
对象中。生成的 Seurat 对象默认的测定方法会被设置为integrated
,但可以通过代码DefaultAssay(seurat) <- \\"RNA\\"
切换回默认的测定方法。
然后,只需使用校正后的 Seurat 对象,并重新执行第一部分的流程,但需要跳过前两个步骤,即归一化和识别高变异基因这两个步骤。
seurat <- ScaleData(seurat)\\nseurat <- RunPCA(seurat, npcs = 50)\\nseurat <- RunUMAP(seurat, dims = 1:20)\\nseurat <- FindNeighbors(seurat, dims = 1:20) %>% FindClusters(resolution = 0.6)\\n\\n# You may also want to save the object\\nsaveRDS(seurat, file=\\"integrated_seurat.rds\\")\\n
需要提醒的是,尽管 tSNE/UMAP 的嵌入和聚类分析应当基于integrated
测定来进行,但校正后的数据作为基因表达量的定量指标已不再十分可信。因此,建议在进行其他分析,例如识别聚类标记和进行可视化时,改用未经校正的表达值,方法是将DefaultAssay
切换回RNA
。
DefaultAssay(seurat) <- \\"RNA\\"\\nplot1 <- UMAPPlot(seurat, group.by=\\"orig.ident\\")\\nplot2 <- UMAPPlot(seurat, label = T)\\nplot3 <- FeaturePlot(seurat, c(\\"FOXG1\\",\\"EMX1\\",\\"DLX2\\",\\"LHX9\\"), ncol=2, pt.size = 0.1)\\n((plot1 / plot2) | plot3) + plot_layout(width = c(1,2))\\n
虽然它不是完美的,但它确实有助于提高两个数据集的可比性。
如果你想进一步提升结果,有几个参数你可以考虑调整(所有上述参数要么是默认设置,要么是基于直觉,所以应该还有改进的空间)。首先,FindIntegrationAnchors
函数根据它们在各个数据集中被识别为高变异基因的频率来选择用于整合的基因。因此,在两个数据集上执行FindVariableFeatures
时的nfeatures
参数肯定会影响用于整合的基因集。接下来,由于锚定步骤是 Seurat 整合中的关键步骤,任何显著影响锚定过程的参数都可能改变最终的整合结果。例如,FindIntegrationAnchors
函数默认选择2000个在各个数据集中被高频识别为高变异基因的基因用于整合,这个用于整合的基因数量可以通过在FindIntegrationAnchors
函数中设置anchor.features
参数来调整。类似于决定使用多少 PCs 来制作 tSNE/UMAP 和聚类的问题,需要决定使用哪些 CCs 来定义跨数据集的邻居,如在dims
参数中设置。这是另一个可以影响结果的参数。在同一函数中还有更多参数可以影响结果,包括k.anchor
、k.filter
和k.score
,尽管它们可能不是你想首先调整的参数。类似地,在下一步使用的IntegrateData
函数中也有dims
参数,你可能也想改变它。
值得一提的是,Seurat 还提供了另一种整合分析策略,即数据转移。当存在一个已注释的参考数据集,并且想要使用参考数据来辅助新查询数据的细胞类型/状态注释时,就会使用到它。数据整合和数据转移之间的主要区别包括:
除了 Seurat,现在还有更多数据整合方法可用。由 Soumya Raychaudhuri 实验室开发的Harmony 就是其中之一。它也是第一个关于 scRNA-seq 批次效应校正工具的基准测试中最受关注的整合方法。简而言之,Harmony 使用模糊聚类将每个细胞分配给多个聚类。对于每个聚类,它然后计算每个数据集的校正因子,将该数据集的聚类中心向该聚类的全局中心移动。由于每个细胞被表示为多个聚类的组合,因此通过平均细胞所属聚类的校正因子,并按聚类分配比例加权,计算出细胞特定的校正因子。这个过程将迭代进行,直到收敛发生或达到迭代限制。
Harmony 为 Seurat 对象提供了一个简单的 API,即一个名为RunHarmony
的函数,因此非常容易使用。它接受合并后的 Seurat 对象(在第1步生成的那个)作为输入,并且需要告诉函数使用哪个元数据特征作为批次身份。它返回一个 Seurat 对象,并添加了一个名为harmony
的更多校正。它就像校正后的 PCA,因此应该明确告诉 Seurat 在后续分析中使用harmony
校正,包括制作 UMAP 嵌入和识别细胞聚类。
seurat <- merge(seurat_DS1, seurat_DS2) %>%\\n FindVariableFeatures(nfeatures = 3000) %>%\\n ScaleData() %>%\\n RunPCA(npcs = 50)\\nlibrary(harmony)\\nseurat <- RunHarmony(seurat, group.by.vars = \\"orig.ident\\", dims.use = 1:20, max.iter.harmony = 50)\\nseurat <- RunUMAP(seurat, reduction = \\"harmony\\", dims = 1:20)\\nseurat <- FindNeighbors(seurat, reduction = \\"harmony\\", dims = 1:20) %>% FindClusters(resolution = 0.6)\\n\\n# You may also want to save the object\\nsaveRDS(seurat, file=\\"integrated_harmony.rds\\")\\n
接下来,可以按照之前的方法来展示整合后的结果。
plot1 <- UMAPPlot(seurat, group.by=\\"orig.ident\\")\\nplot2 <- UMAPPlot(seurat, label = T)\\nplot3 <- FeaturePlot(seurat, c(\\"FOXG1\\",\\"EMX1\\",\\"DLX2\\",\\"LHX9\\"), ncol=2, pt.size = 0.1)\\n((plot1 / plot2) | plot3) + plot_layout(width = c(1,2))\\n
结果还算不错。两个样本的细胞混合得很好,可以观察到一些清晰的轨迹。对于一些混合的细胞群体,特别是非背侧端脑的细胞,需要进一步确认它们是否真的是应该混合的相同类型的细胞。
你可能已经注意到,Harmony 默认使用 PCA 结果作为输入,并针对每个细胞的 PCs 进行校正迭代。因此,影响原始 PCA 的参数,比如在FindVariableFeatures
中用于识别高变异基因的nfeatures
,可能会对整合结果产生影响。如果没有提供特定的参数,RunHarmony
函数将默认使用输入中的所有可用维度(通常是 PCA)。可以通过设置dims.use
参数来指定使用哪些维度(这个参数与 Seurat 中的许多其他dims
参数类似)。
未完待续,欢迎关注!
动动您发财的小手点个赞吧!欢迎转发!
Source:https://github.com/quadbio/scRNAseq_analysis_vignette
","description":"应用R语言TCGA下载了RNA-seq,如何把mRNA提取出来呢? 数据科学工厂的回答\\n\\n引言\\n\\n本系列开启R中单细胞RNA-seq数据分析教程,持续更新,欢迎关注,转发!\\n\\n简介\\n\\n现在,很少有人只进行一次单细胞RNA测序实验并仅产生一份数据。原因很直接:目前的单细胞RNA测序技术每次只能捕捉到有限样本的分子状态。为了在多个实验和不同条件下对众多样本进行测量,通常需要对来自不同实验的单细胞RNA测序数据进行联合分析。虽然有些实验策略,比如细胞哈希!,以及一些计算方法,比如demuxlet 和scSplit,能够在一定程度上将多个样本合并进行单细胞RNA测序库的构建和测序…","guid":"https://www.zhihu.com/question/337202504/answer/57083251249","author":"数据科学工厂","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-17T00:53:22.719Z","media":[{"url":"https://pic1.zhimg.com/50/v2-7ad6092c1b88738bcbf8250937baf68d.jpg","type":"photo","width":810,"height":405,"blurhash":"LyKn[hV#V|oiTIoLj[bH0XsmoHaw"},{"url":"https://picx.zhimg.com/50/v2-dc6ee9477c31cb0b94297404c61414a2.jpg","type":"photo","width":1080,"height":458,"blurhash":"L9Rp5%^,RW?X?djuRkj;-:agoeaj"},{"url":"https://picx.zhimg.com/50/v2-e030e9a3b79e32639487033aa6518f87.jpg","type":"photo","width":1080,"height":655,"blurhash":"LDSPU?_MtL~q_3oeoet7s;oMa#ax"},{"url":"https://picx.zhimg.com/50/v2-212742e536bf630eb84f5cb1b826d2fd.jpg","type":"photo","width":1080,"height":637,"blurhash":"LFS6St.7xJ~q.8kBr?s.kWWCoIjb"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R中进行单细胞分析如何高效读入H5AD文件","url":"https://zhuanlan.zhihu.com/p/12993434920","content":"2024.12.16方法有用比之前大家推荐的方法好一些 如何高效正确将单细胞H5AD文件转换为R中Seurat包可分析的Seurat对象 使用zellkonverter包算是比较高效不走弯路的 笔者最后尝试这个方法一次成功 需要注意的是,得到的文件是V4格式的需要转换为V5格式 代码如下: BiocManager::install(\\"zellkonverter\\") library(zellkonverter) ad <- readH5AD(\'GSE211785_Susztak_SC_SN_ATAC_merged_PreSCVI_final.h5ad\') adata_Seurat <- as.Seu…","description":"2024.12.16方法有用比之前大家推荐的方法好一些 如何高效正确将单细胞H5AD文件转换为R中Seurat包可分析的Seurat对象 使用zellkonverter包算是比较高效不走弯路的 笔者最后尝试这个方法一次成功 需要注意的是,得到的文件是V4格式的需要转换为V5格式 代码如下: BiocManager::install(\\"zellkonverter\\") library(zellkonverter) ad <- readH5AD(\'GSE211785_Susztak_SC_SN_ATAC_merged_PreSCVI_final.h5ad…","guid":"https://zhuanlan.zhihu.com/p/12993434920","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-16T15:12:36.120Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"设A为n阶非零矩阵,且A²=A,r(A)=r(0<r<n).求|5E+A|.答案中A为什么可对角化?-世间奇人上官正申的回答:[公式] 即经过 [公式] 作用之后变为0的特征子空间的维...","url":"https://www.zhihu.com/question/353736117/answer/56837698928","content":"设A为n阶非零矩阵,且A²=A,r(A)=r(0<r<n).求|5E+A|.答案中A为什么可对角化? 即经过
作用之后变为0的特征子空间的维数为
, 因此
自然有
个线性无关的特征值为0的特征向量,同理,
也有
个线性无关的特征值为1的特征向量。而
即
维空间可以找到
个线性无关的特征向量,因此可以对角化。
再补充一下,实际上判断 可对角化很简单,不需要用这个方法,还可以有更加直观的方法。由于
所以
的像空间
再经过
作用是不动的,因此此像空间是
的特征值为1的特征子空间,自然有
个线性无关的特征值为1的特征向量,而在
上有
个线性无关的特征值为0的特征向量,因此是可以对角化的。
我觉得是python,首先,python更新的比较快,组件库比较全,python有专门针对机器学习的库,比如:tensor,pytorch等,r语言主要是用于统计分析的,可视化分析比python好。所以,建议选python。
","description":"机器学习用python还是R,哪个更好? 古语的地方的回答\\n\\n\\n我觉得是python,首先,python更新的比较快,组件库比较全,python有专门针对机器学习的库,比如:tensor,pytorch等,r语言主要是用于统计分析的,可视化分析比python好。所以,建议选python。","guid":"https://www.zhihu.com/question/612094457/answer/56480726474","author":"古语的地方","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-16T04:23:12.275Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R中读取H5AD单细胞文件报错Error: Ambiguous assays解决","url":"https://zhuanlan.zhihu.com/p/12861008987","content":"使用SeuratDisk包中的 LoadH5Seurat函数时报错: Validating h5Seurat file Error: Ambiguous assays解决办法: 在运行中添加参数 assays = \\"RNA\\", verbose =TRUE # 自己安装 mojaveazure/seurat-disk 这个GitHub包: #remotes::install_github(\\"mojaveazure/seurat-disk\\") library(SeuratDisk) library(patchwork) #~~~~~开始读数据~~~~~ ##h5ad是python的Scanpy读取文件格式,需要转换 #~~~~读取adipose~~~~…","description":"使用SeuratDisk包中的 LoadH5Seurat函数时报错: Validating h5Seurat file Error: Ambiguous assays解决办法: 在运行中添加参数 assays = \\"RNA\\", verbose =TRUE # 自己安装 mojaveazure/seurat-disk 这个GitHub包: #remotes::install_github(\\"mojaveazure/seurat-disk\\") library(SeuratDisk) library(patchwork) #~~~~~开始读数据…","guid":"https://zhuanlan.zhihu.com/p/12861008987","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-16T04:03:13.369Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Cox回归预测模型:模型的验证——决策曲线","url":"https://zhuanlan.zhihu.com/p/12757616030","content":"[视频: Cox回归预测模型:模型的验证——决策曲线] 今天将介绍如何使用临床决策曲线(Clinical decision curve)来验证Cox回归模型。临床决策曲线能够评估Cox回归模型的临床实用性及决策效益,是验证预测模型临床应用价值的重要工具。接下来,我们将详细演示如何用R语言绘制临床决策曲线。 1、原始数据 [图片] 第1列的num.为受试者编号;第2列的os_status,为生存状态,0为删失,1为死亡;第3列的os_time,为生存时间;第4列的characteristic1,是连续性变量;第5列的characteristic2,是…","description":"[视频: Cox回归预测模型:模型的验证——决策曲线] 今天将介绍如何使用临床决策曲线(Clinical decision curve)来验证Cox回归模型。临床决策曲线能够评估Cox回归模型的临床实用性及决策效益,是验证预测模型临床应用价值的重要工具。接下来,我们将详细演示如何用R语言绘制临床决策曲线。 1、原始数据 [图片] 第1列的num.为受试者编号;第2列的os_status,为生存状态,0为删失,1为死亡;第3列的os_time,为生存时间;第4列的characteristic1,是连续性变量;第5列的characteristic2,是…","guid":"https://zhuanlan.zhihu.com/p/12757616030","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-15T11:39:52.059Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何有效的学习garch模型?-粥厌盐的回答:ARCH 模型即自回归条件异方差模型(Auto-Regressive Conditional Heteroskedasticity),由 Robert Engle 于 1982 年...","url":"https://www.zhihu.com/question/299135951/answer/55918572498","content":"如何有效的学习garch模型?ARCH 模型即自回归条件异方差模型(Auto-Regressive Conditional Heteroskedasticity),由 Robert Engle 于 1982 年提出,用于分析具有时变波动率的经济时间序列。该模型具有自相关和异方差两种性质,在金融领域中常用于对条件波动率进行建模。
自相关在笔记7中提及,这里再介绍异方差。
假设模型为: ,其中
。
异方差形式多样,如 (线性异方差)、
(乘法异方差)等
(1)求解
(2)信息矩阵的特点
(1)条件期望与信息集
(2)背景知识
(1)模型构成
其中 ,
可观测,参数
满足
0\\\\)\\"> ,
0\\\\)\\"> ,
(2)条件分布与似然函数推导
随着研究的深入,人们发现 ARCH 模型在实际应用中对于滞后项项数 的选择较为敏感,且在处理一些复杂的金融数据时存在一定局限性。于是,GARCH 模型(Generalized ARCH)作为 ARCH 模型的拓展被提出。GARCH 模型可以看作是一种无穷期的 ARCH 模型,在一定程度上避免了 ARCH 模型中
值选取的难题。
(1)模型构成GARCH(p,q)
其中 ,
可观测,参数
满足
0\\\\)\\"> ,
0\\\\)\\"> ,
,
0\\\\)\\"> ,
,
。定义
。
(2)条件分布与似然函数推导
给定参数 和初始值
,定义
,可得
,进而推出条件概率密度函数:
推导使用了{} 的平稳性和Law of Iteration Expectation。
(1)厚尾性质的定义与直观理解
(2)峰度衡量厚尾性质
(3)GARCH(1,1)的厚尾性质
通过推导计算得 3\\\\)\\"> ,证明了GARCH(1,1)的厚尾性质。
推导同样使用了{} 的平稳性和Law of Iteration Expectation。
(1)预测波动率含义与意义
(2)GARCH (1,1)的预测波动率
①计算
定义 ,
,可得
,
,将递归形式写开为
,且当
时,
。
②含义
GARCH(1,1)基于历史信息对未来波动进行预期,GARCH(1,1)模型通过分析过去的收益率数据及其波动情况(包含在信息集 中),来推测未来的波动率。例如,它考虑了过去的收益率波动(如
)以及之前的波动率(
)对未来波动率的影响。
当令所有的 都等于
时,GARCH(1,1)模型就化归为ARCH(1)模型,此时也可得到ARCH(1)的相关理论性质,如
。
对于GARCH(p, q)模型,也可用类似思路证明相关理论性质,
在上一期的分享中,我们进行了时间序列常见数据类型整理及简单时间序列图的绘制的简单介绍,今天我们继续分享季节性分解、指数平滑模型、ARIMA模型的简单示例。
时间序列分析
时间序列分析是一种动态数据处理的统计方法,基于随机过程理论和数理统计学方法,用于研究随机数据序列所遵从的统计规律,以解决实际问题。它广泛应用于经济、商业、社会问题研究中,是研究统计指标动态特征和周期特征及相关关系的重要方法。
季节性分解
时间序列可以分解为三种成分:水平部分(平均值),趋势部分(上升或下降),季节性部分(周期性的重复),剩余的就是随机变动,即前三者都没法解释的“杂音”。我们常见的时间序列,根据复杂度的不同,一般上述三种成分中的一种、两种或三种组合而成。当然,你也可以把水平部分当成趋势的特例,或者趋势的一部分。那么,时间序列就可简化为两部分:趋势和季节性,以及两者之外的随机变动。
“季节性分解”过程可将一个序列分解成一个季节性成分、一个组合趋势和循环的成分和一个“误差”成分。 此过程是对比率与移动平均值方法的实现。
模型类型
“周期性分解”过程提供两种方法来对周期性因素进行建模:乘法或加法。
一、乘法。 季节性成分是一个因子,用来与经过季节性调整的序列相乘以得到原始序列。 实际上,“趋势”会评估与序列的总体水平成正比的季节性成分。 无季节性变动的观测值的季节性成分为 1。
二、加法。 将季节性调整添加到季节调整序列中即可得到初始序列。 此调整尝试从序列中移去季节性影响,以查看可能被季节性成分“掩盖”的其他兴趣特征。 实际上,“趋势”会评估不依赖于序列的总体水平的季节性成分。 无季节性变动的观测值的季节性成分为 0。
指数平滑模型
指数平滑模型是一种在时间序列预测中应用广泛的方法,它能帮助我们分析并预测数据的未来走向。模型分为三种类型:单指数模型、双指数模型和三指数模型。
单指数模型是最基础的,它假设数据由水平项和误差项构成,水平项代表历史数据的加权平均,误差项则表示随机干扰。双指数模型进一步加入了趋势项,意味着数据除了水平和误差外,还可能有上升或下降的趋势。三指数模型则在此基础上引入了季节性因子,适用于有周期性变化的数据。
ARIMA模型
ARIMA模型(Autoregressive Integrated Moving Average Model)是一种用于时间序列数据分析和预测的统计模型。ARIMA模型结合了自回归(AR)、滑动平均(MA)和差分(I)三个部分,用于处理非平稳时间序列数据。
ARIMA模型的基本概念和组成部分
ARIMA模型由三个主要部分组成:
自回归(AR):使用时间序列数据的过去值来预测未来值。
滑动平均(MA):使用过去误差项的加权和来预测未来值。
差分(I):通过差分操作将非平稳时间序列转化为平稳时间序列。
ARIMA模型的应用场景和优缺点
ARIMA模型适用于需要预测未来趋势的场景,如股票价格预测、天气预报、销售数据分析等。其优点包括:
高精度:通过综合考虑历史数据和误差项,能够提供较为准确的预测。
灵活性:可以通过调整参数来适应不同的数据特性。
缺点包括:
复杂性:模型参数的选择和调整较为复杂,需要专业知识。
过拟合:如果参数选择不当,可能导致模型过拟合,影响预测效果。
今天我们仍以时间序列绘图数据为例,分享季节性分解、指数平滑模型、ARIMA模型的简单示例。
#读取Excel数据进行时间序列绘图
library(readxl) #加载包
tsdata <- read_excel(\\"C:/Users/hyy/Desktop/绘图数据.xlsx\\", col_names = TRUE )
tsdata
#提取各月份数据形成一维向量
tsdata <- c(tsdata$Jan,tsdata$Feb,tsdata$Mar,
tsdata$Apr,tsdata$May,tsdata$Jun,
tsdata$Jul,tsdata$Aug,tsdata$Sep,
tsdata$Oct,tsdata$Nov,tsdata$Dec)
tsdata
#以十二月1年频率,生成2012年1月至2023年12月数据
tsdata <- ts(tsdata,frequency=12,start=c(2012,1))
tsdata
#对时间序列进行绘图
plot(tsdata)
plot(tsdata,xlab=\\"month\\",ylab=\\"incident\\",
main = \\"Time Series Plot\\",sub = \\"医学统计数据分析工作室\\")
#使用stl()函数进行季节性分解并绘图
# 季节性分解
tss <- stl(tsdata, s.window=\\"period\\") # 季节性分解
tss
plot(tss)
#内置HoltWinters()函数指数平滑模型
# 一次指数平滑模型,代表数据没有趋势和季节性
psm1 <- HoltWinters(tsdata, beta=FALSE, gamma=FALSE)
# beta代表趋势,gamma代表季节性
# 二次指数平滑模型,指数据有趋势但没有季节性
psm2 <- HoltWinters(tsdata, gamma=FALSE)
# 三次指数平滑模型,数据既有趋势又有季节性
psm3 <- HoltWinters(tsdata)
library(forecast)
forecast(psm3, 30)
plot(forecast(psm3, 30))
#季节性绘图
library(forecast)
seasonplot(tsdata)
#“forecast”包的ets()拟合指数模型
library(forecast)
psm4 <- ets(tsdata)
forecast(psm4,30)
plot(forecast(psm4,30))
#“forecast”包的auto.arima()拟合ARIMA模型
arima1 <- auto.arima(tsdata)
forecast(arima1,30)
plot(forecast(arima1,30))
#数据太随机了,将随机数据更换为季节性数据
#读取Excel数据进行时间序列绘图
library(readxl) #加载包
tsdata2 <- read_excel(\\"C:/Users/hyy/Desktop/时间序列数据.xlsx\\",
col_names = TRUE )
tsdata2 <- c(tsdata2$Jan,tsdata2$Feb,tsdata2$Mar,tsdata2$Apr,
tsdata2$May,tsdata2$Jun,
tsdata2$Jul,tsdata2$Aug,tsdata2$Sep,
tsdata2$Oct,tsdata2$Nov,tsdata2$Dec)
tsdata2 <- ts(tsdata2,frequency=12,start=c(2012,1))
tsdata2
plot(tsdata2,xlab=\\"month\\",ylab=\\"incident\\",
main = \\"Time Series Plot\\",sub = \\"医学统计数据分析工作室\\")
#季节性绘图
library(forecast)
seasonplot(tsdata2)
#“forecast”包的ets()拟合指数模型
library(forecast)
psm5 <- ets(tsdata2)
forecast(psm5,30)
plot(forecast(psm5,30))
#“forecast”包的auto.arima()拟合ARIMA模型
arima2 <- auto.arima(tsdata2)
forecast(arima2,30)
plot(forecast(arima2,30))
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
时间序列分析
时间序列分析是一种动态数据处理的统计方法,基于随机过程理论和数理统计学方法,用于研究随机数据序列所遵从的统计规律,以解决实际问题。它广泛应用于经济、商业、社会问题研究中,是研究统计指标动态特征和周期特征及相关关系的重要方法。
时间序列分析的基本概念
时间序列是指按照时间顺序记录下来的观测数据序列。例如,每个季度的国内生产总值、每个月的居民消费价格涨幅等。时间序列分析的目的是描述时间序列过去的变化特征,发现其运行规律,从而预计未来的走势。
时间序列分析的主要方法
时间序列分析可以分为传统方法和现代方法:
传统方法:将时间序列分为长期趋势、季节变动、循环变动和不规则变动,通过加法模型或乘法模型来分析这些因素对时间序列变动的影响。
现代方法:将时间序列视为一个随机过程,通过分析其平稳性、季节性和随机性来研究序列变化的一般规律。平稳时间序列的统计特性不随时间推移发生变化,而非平稳序列则包含趋势、季节性和随机性。
时间序列分析的应用领域
时间序列分析广泛应用于各种领域,包括:
经济预测:用于预测经济增长、通货膨胀等经济指标的变化趋势。
商业分析:用于市场趋势预测、销售预测等。
社会问题研究:用于人口统计、疾病传播等社会问题的研究。
时间序列分析是定量预测方法之一。它包括一般统计分析(如自相关分析,谱分析等),统计模型的建立与推断,以及关于时间序列的最优预测、控制与滤波等内容。经典的统计分析都假定数据序列具有独立性,而时间序列分析则侧重研究数据序列的互相依赖关系。后者实际上是对离散指标的随机过程的统计分析,所以又可看作是随机过程统计的一个组成部分。例如,记录了某地区第一个月,第二个月,…,第N个月的降雨量,利用时间序列分析方法,可以对未来各月的雨量进行预报。
基本思想:根据系统的有限长度的运行记录(观察数据),建立能够比较精确地反映序列中所包含的动态依存关系的数学模型,并借以对系统的未来进行预报。
基本原理:一是承认事物发展的延续性。应用过去数据,就能推测事物的发展趋势。二是考虑到事物发展的随机性。任何事物发展都可能受偶然因素影响,为此要利用统计分析中加权平均法对历史数据进行处理。
特点:简单易行,便于掌握,但准确性差,一般只适用于短期预测。
时间序列依据其特征,有以下几种表现形式,并产生与之相适应的分析方法:
1.长期趋势变化:受某种基本因素的影响,数据依时间变化时表现为一种确定倾向,它按某种规则稳步地增长或下降。使用的分析方法有:移动平均法、指数平滑法、模型拟和法等。
2.季节性周期变化:受季节更替等因素影响,序列依一固定周期规则性的变化,又称商业循环。采用的方法:季节指数。
3.循环变化:周期不固定的波动变化。
4.随机性变化:由许多不确定因素引起的序列变化。
时间序列分析主要有确定性变化分析和随机性变化分析。其中,确定性变化分析包括趋势变化分析、周期变化分析、循环变化分析。随机性变化分析:有AR、MA、ARMA模型等。
在R中进行时间序列分析,通常使用ts()函数将时间序列对象转换为平稳时间序列,然后应用如 auto.arima() 和 forecast() 等函数进行动态模型分析和预测。
今天我们以一组12年*12月的时间序列数据为例,展示一下常见的时间序列数据整理类型以及简单时间序列图的绘制方法。
# 长型数据,其中包含年份(year)和月份(month)以及相应的值(incident)
library(readxl) #加载包
tsdata <- read_excel(\\"C:/Users/hyy/Desktop/时间序列绘图数据.xlsx\\")
tsdata
#将数据转换为时间序列并绘图
ptsdata <- ts(tsdata)
plot(ptsdata) #绘图所有变量
#选择incident绘图并规定横轴竖轴名称
plot(ptsdata[,3],xlab=\\"month\\",ylab=\\"incident\\",
main = \\"Time Series Plot\\",sub = \\"医学统计数据分析工作室\\")
# 将年份和月份转换为日期
tsdata$date <- as.Date(paste0(tsdata$year, \\"-\\", tsdata$month, \\"-01\\"))
# 使用ggplot2绘制时间序列图
library(ggplot2)
ggplot(tsdata, aes(x = date, y = incident)) +
geom_line() +
geom_point() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = \\"time\\", y = \\"incident\\", title = \\"Time Series Plot\\")
#优化绘图
ggplot(tsdata, aes(x = date, y = incident)) +
geom_line(color=\\"blue\\") +
geom_point() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_x_date(date_labels=\\"%Y\\",
date_breaks=\\"year\\",
expand=c(0,0)) +
scale_y_continuous(expand = c(0,0))+
labs(x = \\"year\\", y = \\"incident\\", title = \\"Time Series Plot\\",subtitle = \\"医学统计数据分析工作室\\")
#构建虚拟横型数据
tsdata2 <- ts(data=sample(100:450,144),
start=2012,frequency=12)
tsdata2
plot(tsdata2,xlab=\\"year\\",ylab=\\"incident\\",
main = \\"Time Series Plot\\",
sub = \\"医学统计数据分析工作室\\")
#读取Excel数据进行时间序列绘图
library(readxl) #加载包
data <- read_excel(\\"C:/Users/hyy/Desktop/绘图数据.xlsx\\")
data
如果直接对读取数据进行绘图,
plot(data)
则会出现各个变量间相关性的散点图,我们得尝试对读取数据进行转换。
我们重新读取绘图数据:
tsdata3 <- read_excel(\\"C:/Users/hyy/Desktop/绘图数据.xlsx\\", col_names = TRUE )
tsdata3
#我们提取各个月份的数据,转换为一维向量
tsdata3 <- c(tsdata3$Jan,tsdata3$Feb,tsdata3$Mar,
tsdata3$Apr,tsdata3$May,tsdata3$Jun,
tsdata3$Jul,tsdata3$Aug,tsdata3$Sep,
tsdata3$Oct,tsdata3$Nov,tsdata3$Dec)
tsdata3
#再次按照12月/年的频率,对一维向量进行拆分组合:
tsdata3<- ts(tsdata3,frequency=12,start=c(2012,1))
tsdata3
#对读取的数据进行绘图,并增加标题修改坐标轴标题:
plot(tsdata3)
plot(tsdata3,xlab=\\"month\\",ylab=\\"incident\\",
main = \\"Time Series Plot\\",sub = \\"医学统计数据分析工作室\\")
ts()函数介绍:
通过一向量或者矩阵创建一个一元的或多元的时间序列a(time series),为ts型对象。
调用格式:
ts(data = NA, start = 1, end = numeric(0), frequency = 1, deltat = 1, ts eps = getOption(\'ts.eps\\"), class, names)
说明:
data :一个向量或者矩阵
start :第一个观测值的时间,为一个数字或者是一个由两个整数构成的向量
end :最后一个观测值的时间,指定方法和start相同。
frequency: 单位时间内观测值的频数(频率)
deltat:两个观测值间的时间间隔,frequency和deltat必须并且只能给定其中一个
ts.eps:序列之间的误差限,如果序列之间的频率差异小于ts.eps,则认为这些序列的频率相等
class:对象的类型。一元序列的缺省值是“ts”,多元序列的缺省值是c(“mts”“ts”)
names: 一个字符型向量,给出多元序列中每个一元序列的名称,缺省data中每列数据的名称或者Series 1、Series 2 ... ...
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
@pythonic生物人 认为机器学习主流语言是python,但是,R也有一席之地:
一直更新中。。。。。。
地址 :CRAN Task View: Machine Learning & Statistical Learning
Several add-on packages implement ideas and methods developed at the borderline between computer science and statistics - this field of research is usually referred to as machine learning. The packages can be roughly structured into the following topics:
ctree()
is based on non-parametric conditional inference procedures for testing independence between response and each input variable whereas mob()
can be used to partition parametric models. Extensible tools for visualizing binary trees and node distributions of the response are available in package party and partykit as well. Partitioning of mixed-effects models (GLMMs) can be performed with package glmertree; partitioning of structural equation models (SEMs) can be performed with package semtree. Graphical tools for the visualization of trees are available in package maptree.pkg(\\"SIDES\\")
, pkg(\\"psica\\")
, and pkg(\\"MrSGUIDE\\")
(and probably many more).svm()
from e1071 offers an interface to the LIBSVM library and package kernlab implements a flexible framework for kernel learning (including SVMs, RVMs and other kernel learning algorithms). An interface to the SVMlight implementation (only for one-against-all classification) is provided in package klaR. Package gKRLS features Generalized Kernel Regularized Least Squares, applicable to non-gaussian data alongside random effects, splines, and unregularized fixed effects.tune()
for hyper parameter tuning and function errorest()
(ipred) can be used for error rate estimation. The cost parameter C for support vector machines can be chosen utilizing the functionality of package svmpath. Data splitting for crossvalidation and other resampling schemes is available in the splitTools package. Package nestedcv provides nested cross-validation for glmnet and caret models. Functions for ROC analysis and other visualisation techniques for comparing candidate classifiers are available from package ROCR. Packages hdi and stabs implement stability selection for a range of models, hdi also offers other inference procedures in high-dimensional models.stats::termplot()
function package can be used to plot the terms in a model whose predict method supports type=\\"terms\\"
. The effects package provides graphical and tabular effect displays for models with a linear predictor (e.g., linear and generalized linear models). Friedman’s partial dependence plots (PDPs), that are low dimensional graphical renderings of the prediction function, are implemented in a few packages. gbm, randomForest and randomForestSRC provide their own functions for displaying PDPs, but are limited to the models fit with those packages (the function partialPlot
from randomForest is more limited since it only allows for one predictor at a time). Packages pdp, plotmo, and ICEbox are more general and allow for the creation of PDPs for a wide variety of machine learning models (e.g., random forests, support vector machines, etc.); both pdp and plotmo support multivariate displays (plotmo is limited to two predictors while pdp uses trellis graphics to display PDPs involving three predictors). By default, plotmo fixes the background variables at their medians (or first level for factors) which is faster than constructing PDPs but incorporates less information. ICEbox focuses on constructing individual conditional expectation (ICE) curves, a refinement over Friedman’s PDPs. ICE curves, as well as centered ICE curves can also be constructed with the partial()
function from the pdp package.pythonic生物人:一图胜千言,超形象图解NumPy教程!
pythonic生物人:谁是Python/R中最强Dashboard APP开发工具?
pythonic生物人:pandas、spark、DataFrames.jl、polars、dask、data.table、datatable谁才是最快数据处理武器??
pythonic生物人:赞赞赞❤️❤️N个神经网络可视化工具❤️❤️❤️
pythonic生物人:yellowbrick牛逼,机器学习“炼丹师”、“调参侠”们有福了
pythonic生物人:丰富的Python可视化“武器库”:从PyViz到Matplotlib
pythonic生物人:从哪些方面着手提高Python?Python社区“老司机们”的这本书讲清楚了!
pythonic生物人:13个高清图助快速上手Python: NumPy/Pandas/SciPy/Matplotlib?
❤️更多好文,欢迎关注 @pythonic生物人
","description":"机器学习用python还是R,哪个更好? pythonic生物人的回答\\n\\n\\n@pythonic生物人 认为机器学习主流语言是python,但是,R也有一席之地:\\n\\nR关于机器学习有一个CRAN Task\\n\\n一直更新中。。。。。。\\n\\n地址 :CRAN Task View: Machine Learning & Statistical Learning\\n\\nSeveral add-on packages implement ideas and methods developed at the borderline between computer science and…","guid":"https://www.zhihu.com/question/612094457/answer/54686469538","author":"pythonic生物人","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T09:59:48.866Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学 R 语言?-初心的回答:如果你的专业中涉及大量的统计学,那么学R绝对是性价比最高的。","url":"https://www.zhihu.com/question/4139067549/answer/54355883120","content":"临床大一是不是应该自学 R 语言?如果你的专业中涉及大量的统计学,那么学R绝对是性价比最高的。
","description":"临床大一是不是应该自学 R 语言? 初心的回答\\n\\n\\n如果你的专业中涉及大量的统计学,那么学R绝对是性价比最高的。","guid":"https://www.zhihu.com/question/4139067549/answer/54355883120","author":"初心","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T03:32:46.815Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言微生物分子网络分析实操(1)","url":"https://zhuanlan.zhihu.com/p/12397241481","content":"原文链接:R语言微生物分子网络分析实操(1) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法。首先使用网络节点及线(边)分别代表微生物类群及其间的互作关系,然后利用连通性、聚类性等网络分析算法从大量复杂关系中提取关键的模式特征。使用微生物分子网络辅助理解微生物群落组成及其关系,为群落调控及功能应用提供理论指导。以下分享5个网络分析学习参考…","description":"原文链接:R语言微生物分子网络分析实操(1) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法。首先使用网络节点及线(边)分别代表微生物类群及其间的互作关系,然后利用连通性、聚类性等网络分析算法从大量复杂关系中提取关键的模式特征。使用微生物分子网络辅助理解微生物群落组成及其关系,为群落调控及功能应用提供理论指导。以下分享5个网络分析学习参考…","guid":"https://zhuanlan.zhihu.com/p/12397241481","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T02:58:00.790Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言微生物分子网络分析实操(2)","url":"https://zhuanlan.zhihu.com/p/12395715032","content":"原文链接:R语言微生物分子网络分析实操(2) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、网络基础概念及拓扑属性微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法,其包含许多网络基础概念及网络拓扑属性,用于描述网络结构特征和分析网络功能组织。以下简要介绍部分网络基础概念及拓扑属性,附带分享6个网络分析学习参考文章。 1_Gephi和Cytoscape程序简介及安装教程 2_Gephi程序网络分析实操 3_C…","description":"原文链接:R语言微生物分子网络分析实操(2) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、网络基础概念及拓扑属性微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法,其包含许多网络基础概念及网络拓扑属性,用于描述网络结构特征和分析网络功能组织。以下简要介绍部分网络基础概念及拓扑属性,附带分享6个网络分析学习参考文章。 1_Gephi和Cytoscape程序简介及安装教程 2_Gephi程序网络分析实操 3_C…","guid":"https://zhuanlan.zhihu.com/p/12395715032","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T02:54:59.970Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言微生物分子网络分析实操(3)","url":"https://zhuanlan.zhihu.com/p/12393556042","content":"原文链接:R语言微生物分子网络分析实操(3) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、微生物分子网络模块分析微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法,其模块分析可以用于群落微生物类群间的互作分析及研究其对群落结构功能的影响。以微生物个体、基因片段、代谢功能和环境因子为研究对象构建网络模型,利用网络分析方法识别分组、区分模块和揭示群落结构和功能组成。以下分享7个网络…","description":"原文链接:R语言微生物分子网络分析实操(3) 欢迎关注“细猪技术”微信公众号,更早获取最新资讯 一、微生物分子网络模块分析微生物分子网络是一种基于图论理论分析微生物类群间的互作关系的方法,其模块分析可以用于群落微生物类群间的互作分析及研究其对群落结构功能的影响。以微生物个体、基因片段、代谢功能和环境因子为研究对象构建网络模型,利用网络分析方法识别分组、区分模块和揭示群落结构和功能组成。以下分享7个网络…","guid":"https://zhuanlan.zhihu.com/p/12393556042","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T02:50:41.893Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"生信绘图只能用R语言吗?-生信钱同学的回答:很多小伙伴反应不会绘图,其实我之前分享的那些源代码绘图都挺好的,但确实需要一些门槛,猛的一看会有一些看不懂,...","url":"https://www.zhihu.com/question/316596345/answer/54293503155","content":"生信绘图只能用R语言吗?很多小伙伴反应不会绘图,其实我之前分享的那些源代码绘图都挺好的,但确实需要一些门槛,猛的一看会有一些看不懂,后面准备开一个绘图的专题,把一些有用的,好看的绘图代码分享出来,包含示例数据,让大家从读取到出图一步到位。(如下)
在做单细胞测序的Ro/e分析(主要还是看细胞类型丰度差异的,昨天介绍了另外一种方法《又看到这个单细胞差异丰度分析用在顶刊上了,可以试下》),虽然纵坐标的聚类结果符合我的预期,但还是有一些不完美,我想要让他们按照我的等级顺序进行展示,如下图(右边的 )
怎么实现呢, 下面的代码
library(pheatmap)\\nlibrary(ggplot2)\\nroe <- readRDS(\\"./roe.rds\\")\\n# 1. 计算行间距(欧氏距离)\\nrow_distance = dist(roe, method = \\"euclidean\\")\\n\\n# 2. 进行行聚类\\nrow_clustering = hclust(row_distance)\\n\\n# 3. 自定义的列顺序(手动设定顺序)\\ncustom_col_order =c(\'Grade1\',\'Grade2\',\'Grade3\',\'Grade4\') # 替换成你自己的列名\\n\\n# 4. 转置数据表,用于列聚类\\nroe_transposed = as.data.frame(t(roe))\\n\\n# 5. 计算列间距(欧氏距离)\\ncol_distance = dist(roe_transposed)\\n\\n# 6. 进行列聚类\\ncol_clustering = hclust(col_distance)\\n\\n# 7. 使用自定义的列顺序调整列的显示顺序\\ndendrogram = reorder(as.dendrogram(col_clustering), wts = order(match(custom_col_order, rownames(roe_transposed))))\\n\\n# 8. 转换为层次聚类对象\\ncustom_col_cluster = as.hclust(dendrogram)\\n\\n# 9. 绘制热图,使用自定义列聚类顺序\\np = pheatmap(roe, \\n display_numbers = TRUE, # 显示单元格中的数值\\n number_color = \\"black\\", # 设置数值的字体颜色为黑色\\n border_color = \\"white\\", # 设置单元格边框的颜色为白色\\n treeheight_row = 15, # 设置行聚类树的高度(默认为50,设置为15使得树状图更紧凑)\\n treeheight_col = 15, # 设置列聚类树的高度(默认为50,设置为15使得树状图更紧凑)\\n cluster_row = TRUE, # 对行进行聚类,设置为TRUE启用行聚类\\n cellwidth = 25, # 设置单元格的宽度(默认为30,调整为25使得图形更紧凑)\\n cellheight = 25, # 设置单元格的高度(默认为30,调整为25使得图形更紧凑)\\n cluster_cols = col_cluster, # 设置列的聚类结构,使用事先定义的col_cluster变量\\n # cluster_col = TRUE, # 这行参数是注释掉的,因其与cluster_cols冲突。可以使用cluster_cols代替\\n color = colorRampPalette(c(\'#EEEEEE\', \'lightblue\', \'darkblue\'))(50) # 设置热图的颜色渐变范围\\n)\\n\\np\\nggsave(\\"./Roe.pdf\\",p,width = 4,height = 7)
有些文章,一会用+号替代,比如像下面这样
下面是我画的,加上下面这个代码就行,可以与上面无缝衔接,也换个了配色,哪个好看就用哪个
#install.packages(\'RColorBrewer\')\\nlibrary(RColorBrewer)\\n# 自定义颜色渐变\\ncolor_palette <- colorRampPalette(c(\\"#f8e7d3\\", \\"#fcaf72\\", \\"#cd782d\\", \\"firebrick3\\"))(3) \\n# 使用 `colorRampPalette` 定义一个从浅色 (#f8e7d3) 到红色调 (#fcaf72, #cd782d, firebrick3) 的颜色渐变\\n# 参数 `3` 表示将此颜色渐变分为 3 个不同的颜色级别\\n\\n# 初始化符号矩阵\\nroe_symbols <- matrix(\\"±\\", nrow = nrow(roe), ncol = ncol(roe)) # 设置所有单元格的符号为 \\"±\\"\\nroe_symbols[roe > 1 & roe <= 1.5] <- \\"+\\" # 对应条件:roe > 1 且 roe <= 1.5 时,设置为 \\"+\\"\\nroe_symbols[roe > 1.5 & roe <= 3] <- \\"++\\" # 对应条件:roe > 1.5 且 roe <= 3 时,设置为 \\"++\\"\\nroe_symbols[roe > 3] <- \\"+++\\" # 对应条件:roe > 3 时,设置为 \\"+++\\"\\n\\n# 绘制热图,并显示自定义的数字或符号\\np = pheatmap(roe,\\n display_numbers = roe_symbols, # 使用自定义符号显示数字。roe_symbols 为我们设置的符号矩阵\\n number_color = \\"black\\", # 显示数字/符号的颜色为黑色\\n border_color = \\"#f8e7d3\\", # 单元格的边框颜色\\n treeheight_row = 20, # 行聚类树的高度设置为 20(使其更紧凑)\\n cellwidth = 25, # 设置单元格宽度为 25(根据需要调整)\\n cellheight = 25, # 设置单元格高度为 25(根据需要调整)\\n cluster_row = TRUE, # 对行进行聚类\\n cluster_cols = col_cluster, # 使用事先定义的列聚类结构\\n color = color_palette, # 使用自定义的颜色渐变(前面定义的 color_palette)\\n legend_breaks = c(0, 1, 1.5, 3, 4), # 定义色阶的断点:0, 1, 1.5, 3, 4(颜色渐变对应的值)\\n legend_labels = c(\\"0\\", \\"1\\", \\"1.5\\", \\"3\\", \\"4\\"),# 图例标签,显示这些值对应的符号或数值\\n fontsize_number = 10) # 增大符号的字体大小(默认值为 10)\\np\\n# 将热图保存为 PDF 文件,文件名为 \\"roe_new.pdf\\"\\nggsave(\\"./Roe.pdf\\",p,width = 4,height = 7)
今天主要讲的是绘图,这个都是通用的,换成其他数据,也是直接用的,也不需要改啥参数
","description":"生信绘图只能用R语言吗? 生信钱同学的回答\\n\\n\\n很多小伙伴反应不会绘图,其实我之前分享的那些源代码绘图都挺好的,但确实需要一些门槛,猛的一看会有一些看不懂,后面准备开一个绘图的专题,把一些有用的,好看的绘图代码分享出来,包含示例数据,让大家从读取到出图一步到位。(如下)\\n\\n在做单细胞测序的Ro/e分析(主要还是看细胞类型丰度差异的,昨天介绍了另外一种方法《又看到这个单细胞差异丰度分析用在顶刊上了,可以试下》),虽然纵坐标的聚类结果符合我的预期,但还是有一些不完美,我想要让他们按照我的等级顺序进行展示,如下图(右边的 )\\n\\n怎么实现呢, 下面的代码\\n\\nlibrary…","guid":"https://www.zhihu.com/question/316596345/answer/54293503155","author":"生信钱同学","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T02:34:09.726Z","media":[{"url":"https://pica.zhimg.com/50/v2-6483acfdd55fe5fb8121d7773afc579a.jpg","type":"photo","width":308,"height":98,"blurhash":"LTBW#uxbni_N%3j[WUxuV@WVW.ae"},{"url":"https://picx.zhimg.com/v2-985730bbd47ba8f441766784d1de8313.jpg","type":"photo","width":1080,"height":1267,"blurhash":"LBO|txx^S29w~Dxaxt-p^js;IVof"},{"url":"https://picx.zhimg.com/50/v2-aa92b3a324ee429cb5d8874ea61c7758.jpg","type":"photo","width":369,"height":499,"blurhash":"LORephn3L4o~%1tlt-VYtSRhkDQ-"},{"url":"https://picx.zhimg.com/v2-86209408a736fb240ddc47b890ac74a6.jpg","type":"photo","width":1432,"height":2408,"blurhash":"LAQm6Yxa%2?b?[x]xuoe$ojIafj["}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 软件wavelet 包 如何做数据预测?-哥廷根数学学派的回答:不建议用R,matlab或python都很强的。 给个例子:使用最大离散重叠小波变换MODWT和支持向量回归 SVR...","url":"https://www.zhihu.com/question/21231566/answer/54193461899","content":"R 软件wavelet 包 如何做数据预测?不建议用R,matlab或python都很强的。
给个例子:使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测
本例使用的数据链接如下:https://www.histdata.com/download-free-forex-historical-data/?/ascii/tick-data-quotes/AUDJPY,将数据从 1 分钟间隔转换为 1 天间隔
第一部分,原始时间序列SVR + 滑动窗方法
首先读取数据
prices = pd.read_csv(\'../Data/AUD-JPY-2003-2014-day.csv\',delimiter=\\";\\", header=0, encoding=\'utf-8\', parse_dates=[\'Date\'])\\nprices
删除不使用的列
prices.drop([\\"Open\\", \\"High\\", \\"Low\\"],axis = 1, inplace = True)
定义变量
dates = prices[\'Date\'].copy()\\nclosing_prices = prices[\'Close\'].copy()\\n\\n\\n#使用 matplotlib 绘制原始时间序列\\nplt.subplots(figsize=(16,4))\\nplt.plot(dates, closing_prices, label=\'Original series AUD-JPY 2003-2014\')\\nplt.legend(loc = \'best\')\\nplt.show()
SVR + 滑动窗,定义滑动窗函数
def slideWindow(series, window_lenght = 2):\\n\\n _X, _Y = [], []\\n aux_Window = sliding_window_view(series, window_lenght+1)\\n # 将第一个“window_lenght”值作为输入 (X),将最后一个值 (window_lenght+1) 作为输出 (Y)\\n for i in range(len(aux_Window)):\\n _Y.append(aux_Window[i][-1])\\n _X.append(aux_Window[i][:-1])\\n \\n return _X, _Y\\nwindow_lenght = 2\\n#调用滑动窗函数 \\nX, Y = slideWindow(closing_prices,window_lenght)\\nidx_test_date = int(0.75*len(Y)) + window_lenght\\ndf = pd.DataFrame(columns = [\'test_date\']) \\ndf[\'test_date\'] = prices[\'Date\'].iloc[idx_test_date:]
拆分并绘制测试数据,将数据拆分为训练集(75%)和测试集(25%),shuffle = False 表示并非随机打乱数据
x_train,x_test,y_train,y_test = train_test_split(X, Y, test_size=0.25, random_state=None, shuffle=False)\\n\\nfig, ax = plt.subplots(2,1,figsize=(16,8))\\nax[0].plot(dates, closing_prices, label=\'Original\')\\nax[0].plot(df[\'test_date\'], y_test, label=\'Values to test the model out\',color=\'orange\')\\nax[1].plot(df[\'test_date\'], y_test, label=\'Values to test the model out\',color=\'orange\')\\n\\nax[0].legend(loc = \'best\')\\nax[1].legend(loc = \'best\')\\nplt.show()
定义训练函数并拟合
def evaluateSVR(_x_train,_y_train,_x_test,_y_test, kernel = \'rbf\'):\\n \\n if (kernel == \'rbf\'):\\n clf = svm.SVR(kernel =\'rbf\', C=1e3, gamma=0.1)\\n elif (kernel == \'poly\'):\\n clf = svm.SVR(kernel =\'poly\', C=1e3, degree=2)\\n else:\\n clf = svm.SVR(kernel =\'linear\',C=1e3)\\n _y_predict = clf.fit(_x_train,_y_train).predict(_x_test)\\n \\n return _y_predict\\n\\ny_predict = evaluateSVR(x_train,y_train,x_test,y_test)\\n\\nplotValuesWt = y_test.copy()\\n\\n#绘制预测值\\nplt.subplots(figsize=(18, 6))\\nplt.plot(df[\'test_date\'], y_test, label = \\"Real\\")\\nplt.plot(df[\'test_date\'], y_predict, label = \\"Predicted\\")\\nplt.legend(loc = \'best\')\\nplt.show()
第二部分,使用 MODWT 将时间序列分解
使用“sym4”小波,modwt分解为4层(4 个细节系数 (dC) 和 1 个近似系数 (aC))
def applyModwt(_data, type=\'sym4\', _level=3):\\n _coeff = modwt(_data, type, _level)\\n return _coeff\\n\\nlevel = 4\\ncoeff = applyModwt(closing_prices,type=\'sym4\',_level=level)\\n\\n\\n#检查系数,一个 len(close_prices) 列和 5 行的数组\\nprint(np.shape(coeff))\\n\\n#画系数图\\nfig, ax = plt.subplots(len(coeff), 1, figsize=(16, 8))\\nfor i in range(len(coeff)):\\n if i == len(coeff)-1:\\n ax[i].plot(coeff[i], label = \'cA[%.0f]\'%(i))\\n ax[i].legend(loc = \'best\')\\n else:\\n ax[i].plot(coeff[i], label = \'cD[%.0f]\'%(i))\\n ax[i].legend(loc = \'best\')
重建原始时间序列
#初始化存储数组\\nrecwt = np.zeros((np.shape(coeff)[0], np.shape(coeff)[1]))\\n\\n#分配近似系数和细节系数\\naCdC = coeff.copy()\\n\\nrecwt[level:] = coeff[level]\\n\\n#只使用 aC 来重建时间序列\\ndFs = imodwt(recwt,\'sym4\')\\n\\n#还可以使用所有的系数来重新构建金融序列\\nrFs = imodwt(coeff,\'sym4\')\\n\\n#绘图比较\\nfig, ax = plt.subplots(4,1,figsize=(16,8))\\nax[0].plot(dates, closing_prices, label=\'Original\')\\n#使用所有aC和dC系数重建\\nax[1].plot(dates, rFs, label=\'Re-constructed (using all coeff)\', color = \'green\')\\n#仅使用aC系数重建\\nax[2].plot(dates, dFs, label=\'Re-constructed (using just aC)\', color = \'orange\')\\n#原始信号与降噪后的信号\\nax[3].plot(dates, closing_prices, label=\'Original\')\\nax[3].plot(dates, dFs, label=\'Re-constructed (using just aC)\', color = \'orange\')\\n\\nax[0].legend(loc = \'best\')\\nax[1].legend(loc = \'best\')\\nax[2].legend(loc = \'best\')\\nax[3].legend(loc = \'best\')\\n\\nplt.show()
第三部分,使用 SVR 估计小波系数
new_coeff = []\\n#使用滑动窗口生成 X 和 Y \\nfor i in range(len(aCdC)):\\n index = int(len(aCdC[i])*0.75)#+ window_lenght\\n X, Y = slideWindow(aCdC[i], window_lenght=5)\\n #划分数据\\n x_train,x_test,y_train,y_test = train_test_split(X, Y, test_size=0.25, random_state=None, shuffle=False)\\n #Evaluating each dC in the SVR function\\n y_predict = evaluateSVR(x_train,y_train,x_test,y_test)\\n #存储预测值和训练数据 \\n new_coeff.append(np.concatenate((aCdC[i][:index], y_predict)))\\n #绘制每个系数的预测值\\n plt.subplots(figsize=(18, 6))\\n plt.plot(y_test, label = \\"Real\\")\\n plt.plot(y_predict, label = \\"Predicted\\")\\n plt.legend(loc = \'best\')\\n plt.show()
用预测值绘制新的时间序列
rpFs = imodwt(new_coeff,\'sym4\')\\n\\nindex = int(len(rpFs)*0.75)#+ window_lenght\\n\\nfig, ax = plt.subplots(3,1,figsize=(16,8))\\nax[0].plot(df[\'test_date\'], plotValuesWt, label=\'Original\')\\n#使用所有的dC and aC系数重建\\nax[1].plot(rpFs[index:] ,label=\'Re-constructed (using all coeff)\', color = \'green\')#df[\'test_date\'], \\n\\nax[2].plot(df[\'test_date\'], plotValuesWt, label=\'Original\')\\nax[2].plot(df[\'test_date\'], rpFs[index:] ,label=\'Re-constructed (using all coeff)\', color = \'green\')\\n\\nax[0].legend(loc = \'best\')\\nax[1].legend(loc = \'best\')\\nax[2].legend(loc = \'best\')\\n\\nprint(\'MSE\',mean_squared_error(plotValuesWt, rpFs[index:],squared=False))
第四部分,构建预测模型(使用所有系数进行预测)
def evaluateModel(svr, X, Y, prediction_days, past_days):\\n X_ = []\\n Y_ = []\\n Y_.append(np.array(Y)[-1])\\n X_.append(X[-1])\\n for i in range(prediction_days):\\n Y_array = np.array([Y_[-1]])\\n X_array = np.array(X_[-1][-past_days+1:])\\n X_Y_concat = np.array([np.concatenate((X_array,Y_array))])\\n X_ = np.concatenate(( X_, X_Y_concat ))\\n p_value = svr.predict(X_[-1].reshape(1, -1))\\n Y_ = np.concatenate(( Y_, p_value))\\n return Y_\\n\\ndef predictValue(past_days = 7, prediction_days = 5, file_Path = \'Data/AUD-JPY-2003-2014-day.csv\', dateColName = \'Date\', \\n closingPColName = \'Close\', delimiter = \';\'):\\n #从文件中获取数据\\n dates, closing_prices = getDatesAndPrices(file_Path, dateColName, closingPColName, delimiter)\\n #从小波获取系数\\n coeff = getCoeffFromSeries(closing_prices)\\n \\n #使用 SVR 估计系数\\n\\n predictedCoeff = trainModel(coeff, prediction_days ,past_days)\\n return predictedCoeff, dates, closing_prices\\n \\ndef getDatesAndPrices(filePath, dateColName, closingPColName, _delimiter):\\n #从 csv 文件中读取数据\\n #使用 \'parse_dates\' 将日期字符串转换为可以使用的对象\\n prices = pd.read_csv(filePath,delimiter=_delimiter, header=0, encoding=\'utf-8\', parse_dates=[dateColName])\\n # 定义变量\\n dates = prices[dateColName].copy()\\n closing_prices = prices[closingPColName].copy()\\n \\n return dates, closing_prices\\n\\ndef getCoeffFromSeries(closing_prices):\\n #调用之前定义的函数\\n level = 4\\n coeff = applyModwt(closing_prices,type=\'sym4\',_level=level)\\n return coeff\\n\\ndef trainModel(coeff, prediction_days, past_days):\\n new_coeff = []\\n print(\'coeff shape: \',np.shape(coeff))\\n for i in range(len(coeff)):\\n firstWindowValues = coeff[i][:past_days]\\n X, Y = slideWindow(coeff[i], past_days) \\n svr = svm.SVR(kernel =\'rbf\', C=1e3, gamma=0.1)\\n svr.fit(X, Y)\\n \\n predictCoeff = evaluateModel(svr, X, Y, prediction_days, past_days)\\n newCoeff_concat = np.concatenate((coeff[i][:-1], predictCoeff))\\n new_coeff.append(newCoeff_concat)\\n print(\'NEW coeff shape: \',np.shape(new_coeff))\\n return new_coeff\\n\\n\\n\\n\\ndaysToPredict = 7\\npredictedCoeff, dates, closing_prices = predictValue(prediction_days = daysToPredict)
接下来准备绘图进行对比
def plotValues(dates, original, predicted, prediction_days):\\n fig, ax = plt.subplots(3,1,figsize=(16,8))\\n ax[0].plot(dates, original, label=\'Original\')\\n #使用dC and aC系数重建\\n ax[1].plot(predicted ,label=\'Re-constructed (using all coeff)\', color = \'green\')\\n #print(type(dates))\\n newDates = (addDayToDates(dates, prediction_days))\\n \\n ax[2].plot(dates, original, label=\'Original\')\\n ax[2].plot(newDates,predicted ,label=\'Re-constructed (using all coeff)\', color = \'green\')\\n \\n ax[0].legend(loc = \'best\')\\n ax[1].legend(loc = \'best\')\\n ax[2].legend(loc = \'best\')\\n\\ndef addDayToDates(dates, prediction_days):\\n _dates = copy.deepcopy(dates)\\n lastDate = np.array(_dates)[-1]\\n for i in range (prediction_days+1):\\n newDate = pd.to_datetime(lastDate) + pd.DateOffset(days=i)\\n _dates[len(_dates)-1+i] = newDate\\n return _dates\\nrpFs = imodwt(predictedCoeff,\'sym4\')\\nplotValues(dates, closing_prices ,rpFs, daysToPredict)
然后,仅使用近似系数进行预测
def readData(past_days = 7, prediction_days = 5, file_Path = \'../Data/AUD-JPY-2003-2014-day.csv\', \\n dateColName = \'Date\', closingPColName = \'Close\', delimiter = \';\'):\\n #获取数据\\n dates, closing_prices = getDatesAndPrices(file_Path, dateColName, closingPColName, delimiter)\\n\\n return dates, closing_prices\\n\\n\\ndef getApproxCoeffFromSeries(closing_prices):\\n #调用函数\\n level = 4\\n coeff = applyModwt(closing_prices,type=\'sym4\',_level=level)\\n return coeff\\n\\ndef trainModelApprox(X, Y, past_days):\\n #完全重建时间序列所需的值\\n svr = svm.SVR(kernel =\'rbf\', C=1e3, gamma=0.1)\\n svr.fit(X, Y)\\n \\n return svr\\n\\ndaysToPredict = 7\\npast_days = 7\\nlevel = 4\\ndates, closing_prices = readData(past_days = past_days, prediction_days = daysToPredict)
然后
# 仅获取近似系数和最后的细节系数\\napproxCoeff = getApproxCoeffFromSeries(closing_prices)\\n\\n#初始化存储数组\\nrecwt = np.zeros((np.shape(approxCoeff)[0], np.shape(approxCoeff)[1]))\\n\\n#存储系数\\nrecwt[(level-1):] = approxCoeff[-2]\\nrecwt[level:] = approxCoeff[-1]\\n\\n\\n#只使用 aC 来重建时间序列,相当于给金融时间序列降噪了\\ndFs = imodwt(recwt,\'sym4\')
使用近似系数训练模型
X, Y = slideWindow(dFs, past_days)\\n\\nsvr = trainModelApprox(X, Y, daysToPredict)
执行预测
predictedValues = evaluateModel(svr, X, Y, prediction_days=daysToPredict, past_days=past_days) \\nrpFs = np.concatenate((dFs, predictedValues[1:]))\\n#绘图\\nplotValues(dates, closing_prices ,rpFs, daysToPredict)
基于最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测的步骤大致如此,前面基于滑动窗+SVR的金融序列预测还比较好理解,到小波这边可能就难以理解了,实际上还是各种倒腾小波系数,在每分阶层的小波系数上进行预测,最后再综合,小波分析还是有很大的灵活性的,不管使用近似系数进行预测,还是挑选近似系数+几个细节系数进行预测,并没有一个明确的指导方案,还是要靠自己多试几次。
关于最大离散重叠小波,找了几个金融相关的文章,看一下吧
[1]王健.中美股市联动性——基于极大重叠离散小波变换的研究[J].世界经济文汇,2014(02):72-89.
[2]隋新,何建敏,李亮.时变视角下基于MODWT的沪深300指数现货与期货市场间波动溢出效应[J].系统工程,2015,33(01):31-38.
[3]徐梅. 金融波动分析的小波和频域方法研究[D].天津大学,2004.
海面水温序列的连续小波变换(Python) - 哥廷根数学学派的文章 - 知乎
金融时间序列的离散小波分解(Python) - 哥廷根数学学派的文章 - 知乎
一维信号的Morlet连续小波变换(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:一维信号的Morlet连续小波变换(Python)
基于迭代小波阈值的非平稳信号降噪方法-以心电信号为例(Python,Jupyter Notebook) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于迭代小波阈值的非平稳信号降噪方法-以心电信号为例(Python,Jupyter Notebook)
关于学习小波分析 - 哥廷根数学学派的文章 - 知乎
基于离散小波变换的心电信号降噪与QRS波提取(MATLAB) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于离散小波变换的心电信号降噪与QRS波提取(MATLAB)
基于连续小波变换CWT的咳嗽音分析(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于连续小波变换CWT的咳嗽音分析(Python)
基于小波包分析的EEG信号癫痫检测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于小波包分析的EEG信号癫痫检测(Python)
非平稳信号的小波变换-以sst_nino3气象数据为例(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:非平稳信号的小波变换-以sst_nino3气象数据为例(Python)
简单的基于小波分析的时间序列降噪方法(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于小波分析的时间序列降噪方法(Python)
关于时间序列预测
基于深度学习的交通堵塞预测(Python) - 哥廷根数学学派的文章 - 知乎
基于机器学习的径流预测(Python) - 哥廷根数学学派的文章 - 知乎
基于XGboost的能耗时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于XGboost的能耗时间序列预测(Python)
基于指数平滑的海面温度预测(Python) - 哥廷根数学学派的文章 - 知乎
简单的基于双向LSTM模型的时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于双向LSTM模型的时间序列预测(Python)
简单的基于LSTM的股市分析与预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于LSTM的股市分析与预测(Python)
简单的基于机器学习的风速预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于机器学习的风速预测(Python)
基于递归神经网络的温度时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于递归神经网络的温度时间序列预测(Python)
风力发电时间序列预测方法(Part1,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:风力发电时间序列预测方法(Part1,Python)
风力发电时间序列预测方法(Part2,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:风力发电时间序列预测方法(Part2,Python)
基于RNN的股票市场时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于RNN的股票市场时间序列预测(Python)
基于LSTM的相对湿度预测(Part1,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于LSTM的相对湿度预测(Part1,Python)
基于LSTM的相对湿度预测(Part2,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于LSTM的相对湿度预测(Part2,Python)
锂离子电池健康状态预测(Part1,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:锂离子电池健康状态预测(Part1,Python)
简单的基于LSTM的黄金价格预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于LSTM的黄金价格预测(Python)
基于简单时间序列分析的股票价格预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于简单时间序列分析的股票价格预测(Python)
简单的基于CNN-LSTM的时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于CNN-LSTM的时间序列预测(Python)
简单的基于机器学习的空气温度时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于机器学习的空气温度时间序列预测(Python)
简单的基于深度学习和滑动窗口的时间序列预测方法(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于深度学习和滑动窗口的时间序列预测方法(Python)
简单的基于Prophet模型的电力需求时间序列预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:简单的基于Prophet模型的电力需求时间序列预测(Python)
采用平稳性方法(AR, MA, ARMA和ARIMA)预测随机股票(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:采用平稳性方法(AR, MA, ARMA和ARIMA)预测随机股票(Python)
基于Transformer的外汇股票市场价格预测(Part1,Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于Transformer的外汇股票市场价格预测(Part1,Python)
基于非交叉分位数LSTM的锂离子电池剩余使用寿命预测(Python) - 哥廷根数学学派的文章 - 知乎
哥廷根数学学派:基于非交叉分位数LSTM的锂离子电池剩余使用寿命预测(Python)
","description":"R 软件wavelet 包 如何做数据预测? 哥廷根数学学派的回答\\n\\n\\n不建议用R,matlab或python都很强的。\\n\\n给个例子:使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测\\n\\n本例使用的数据链接如下:https://www.histdata.com/download-free-forex-historical-data/?/ascii/tick-data-quotes/AUDJPY,将数据从 1 分钟间隔转换为 1 天间隔\\n\\n第一部分,原始时间序列SVR + 滑动窗方法\\n\\n首先读取数据\\n\\nprices = pd.read_csv(\'../Data…","guid":"https://www.zhihu.com/question/21231566/answer/54193461899","author":"哥廷根数学学派","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-13T00:43:27.496Z","media":[{"url":"https://picx.zhimg.com/50/v2-78bbbb4294a3e17e802c0a402ea913f4.jpg","type":"photo","width":330,"height":215,"blurhash":"L06I1{?wITR+?wIB9FD$IADiV@WA"},{"url":"https://picx.zhimg.com/v2-c33e092821a2db9181a6bac90a5813d7.jpg","type":"photo","width":933,"height":251,"blurhash":"LBRy+[?cRj~X~qoIRjIo~BIpIpR*"},{"url":"https://pica.zhimg.com/v2-a539a127d22cb3b42adf4d1decaad775.jpg","type":"photo","width":933,"height":469,"blurhash":"LBSPb1?vxW~q%$NLs,ogIqS4RjWA"},{"url":"https://pic1.zhimg.com/v2-bd7cab68037ab08afae0bf9deb9e4733.jpg","type":"photo","width":1044,"height":357,"blurhash":"LASs1=_3WA~q^*M_Rif$S*M_RiWX"},{"url":"https://pic1.zhimg.com/v2-e15e5e0f4639d0f78baea1008d3cdc0f.jpg","type":"photo","width":933,"height":467,"blurhash":"LBRMoD_3$*~q.9R*oeoe%2s,WBay"},{"url":"https://picx.zhimg.com/v2-23422ee09dcc414b8b9020937c925902.jpg","type":"photo","width":933,"height":466,"blurhash":"LBRy$$_3xu~q%$WBo2ofIwbbayoL"},{"url":"https://picx.zhimg.com/v2-f5b4688c18d087cc4bc2b73889e613e6.jpg","type":"photo","width":1056,"height":357,"blurhash":"LbRfa*xuV@-;xtaeaykC?wt7ogV@"},{"url":"https://pic1.zhimg.com/v2-9c00ffd5f68bbf8174482248c89b91ac.jpg","type":"photo","width":1050,"height":360,"blurhash":"LsR.=It7tRxuxuj[bHfP%%kCadf6"},{"url":"https://pic1.zhimg.com/v2-ac406fbb468160fb4f927e3e71f8ec2b.jpg","type":"photo","width":1050,"height":357,"blurhash":"LJSY?V.8o~-:-oofozo1%%V?ROf5"},{"url":"https://picx.zhimg.com/v2-5f41618297795b367a62168a153da551.jpg","type":"photo","width":1050,"height":357,"blurhash":"LCSidF?bR:_4^+a}jvogyFRiV?WA"},{"url":"https://picx.zhimg.com/v2-cfe893826fddabe8a0dd09acbc8d4562.jpg","type":"photo","width":1044,"height":357,"blurhash":"LES?DU.8Rk?I_4aeWAfjM{oej[of"},{"url":"https://pica.zhimg.com/v2-e9d604007a4ab13432ed95386481e80a.jpg","type":"photo","width":933,"height":466,"blurhash":"LBR{.4^+Rj~q~XofRja{WEk8a#WB"},{"url":"https://picx.zhimg.com/v2-5ad0601f7c9965376104f81f40e90b47.jpg","type":"photo","width":933,"height":469,"blurhash":"LCRWF@?uxu~q_4WBWTj=oPoffjj?"},{"url":"https://picx.zhimg.com/v2-25404642216969ce11e4ddeadbc123cd.jpg","type":"photo","width":933,"height":469,"blurhash":"LBRy$*_3xt~q_4R*Wnj?Iqogofk9"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"机器学习用python还是R,哪个更好?-小铭博士笔记的回答:都用,cursor一下的事……","url":"https://www.zhihu.com/question/612094457/answer/54112033421","content":"机器学习用python还是R,哪个更好?都用,cursor一下的事……
","description":"机器学习用python还是R,哪个更好? 小铭博士笔记的回答\\n\\n\\n都用,cursor一下的事……","guid":"https://www.zhihu.com/question/612094457/answer/54112033421","author":"小铭博士笔记","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T17:55:46.498Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R语言】HPAanalyze下载HPA免疫组化图","url":"https://zhuanlan.zhihu.com/p/12324746972","content":"前面小编给大家分享了 ☞ 人蛋白质数据库(HPA,human protein Atlas) ☞ HPA(human protein atlas)数据库介绍 ☞ HPA数据库下载免疫组化原图 今天小编继续给大家分享一个利用R代码下载HPA数据库中免疫组化图片的方法,,废话不多说,直接上代码 #加载相关的R包 library(HPAanalyze) library(clusterProfiler) library(dplyr) #这里以F12基因为例,根据自己的需要修改基因名字 ens_id=bitr(geneID=\\"F12\\", fromType=\\"SYMBOL\\"…","description":"前面小编给大家分享了 ☞ 人蛋白质数据库(HPA,human protein Atlas) ☞ HPA(human protein atlas)数据库介绍 ☞ HPA数据库下载免疫组化原图 今天小编继续给大家分享一个利用R代码下载HPA数据库中免疫组化图片的方法,,废话不多说,直接上代码 #加载相关的R包 library(HPAanalyze) library(clusterProfiler) library(dplyr) #这里以F12基因为例,根据自己的需要修改基因名字 ens_id=bitr(geneID=\\"F12\\", fromType…","guid":"https://zhuanlan.zhihu.com/p/12324746972","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T13:27:34.855Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"2、R语言HelloWorld","url":"https://zhuanlan.zhihu.com/p/12235436884","content":"一、Hello World [图片] 二、统计分析示例一个婴儿月龄与体重的统计分析 [图片] 三、改造统计分析示例将上述代码保存为R#使用组合函数c()创建向量age age <- c(1,3,5,2,11,9,3,9,12,3) #调用mean求平均值的函数,求体重的平均值 mean(age) #使用组合函数c()创建体重向量weight weight<-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) #调用mean求平均值的函数,求体重的平均值 mean(weight) #调用sd()求标准差的函数,得到体重的标准差 sd(weigh…","description":"一、Hello World [图片] 二、统计分析示例一个婴儿月龄与体重的统计分析 [图片] 三、改造统计分析示例将上述代码保存为R#使用组合函数c()创建向量age age <- c(1,3,5,2,11,9,3,9,12,3) #调用mean求平均值的函数,求体重的平均值 mean(age) #使用组合函数c()创建体重向量weight weight<-c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) #调用mean求平均值的函数,求体重的平均值 mean(weight) #调用sd()求标准差的函数…","guid":"https://zhuanlan.zhihu.com/p/12235436884","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T07:46:04.534Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言 | pivot_longer函数 宽表变长表","url":"https://zhuanlan.zhihu.com/p/12177777577","content":"使用pivot_longer函数,从而实现宽表变长表,这已经是一个共识。注意函数使用细节则能够更加高效。 (1) 查看说明:# See vignette(\\"pivot\\") for examples and explanation结果: [图片] (2) 函数说明:pivot_longer( data, cols, ..., cols_vary = \\"fastest\\", names_to = \\"name\\", names_prefix = NULL, names_sep = NULL, names_pattern = NULL, names_ptypes = NULL, names_transform = NULL, names_repair = \\"check_unique\\", values_t…","description":"使用pivot_longer函数,从而实现宽表变长表,这已经是一个共识。注意函数使用细节则能够更加高效。 (1) 查看说明:# See vignette(\\"pivot\\") for examples and explanation结果: [图片] (2) 函数说明:pivot_longer( data, cols, ..., cols_vary = \\"fastest\\", names_to = \\"name\\", names_prefix = NULL, names_sep = NULL, names_pattern = NULL, names_ptypes =…","guid":"https://zhuanlan.zhihu.com/p/12177777577","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T06:46:45.230Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"1、R语言下载安装","url":"https://zhuanlan.zhihu.com/p/12214225058","content":"R安装官网下载: CRAN: Mirrors 选择国内镜像站下载 [图片] 2. 根据电脑系统选择对应的版本 [图片] 3. 第一次安装选base [图片] 4. 下载安装包 [图片] 5. 运行安装 [图片] 6. R安装完成 [图片] RTools安装刚才界面下载RTools [图片] 2. 下载最近版本RTools [图片] 3. 更进CPU情况选择合适的版本 [图片] 4. 安装RTools [图片] 5. RTools安装完成 [图片] RStudio安装官网下载: RStudio Desktop - Posit 下载 [图片] 2. 安装完成 [图片] 运行RStudio选择安装的R [图片] 2. RStudio运行界面 [图片] 参考: R语言保姆级下载安装教程(R+Rtools+RStudio…","description":"R安装官网下载: CRAN: Mirrors 选择国内镜像站下载 [图片] 2. 根据电脑系统选择对应的版本 [图片] 3. 第一次安装选base [图片] 4. 下载安装包 [图片] 5. 运行安装 [图片] 6. R安装完成 [图片] RTools安装刚才界面下载RTools [图片] 2. 下载最近版本RTools [图片] 3. 更进CPU情况选择合适的版本 [图片] 4. 安装RTools [图片] 5. RTools安装完成 [图片] RStudio安装官网下载: RStudio Desktop - Posit 下载 [图片] 2. 安装完成…","guid":"https://zhuanlan.zhihu.com/p/12214225058","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T06:29:03.243Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 累计分布图","url":"https://zhuanlan.zhihu.com/p/12225697736","content":"library(ggplot2) data <- data.frame( x = 1:10, value = c(5, 10, 15, 20, 25, 30, 35, 40, 45, 50) ) # 计算累计值和百分比 data$cumulative_value <- cumsum(data$value) total_value <- sum(data$value) data$percentage <- data$cumulative_value / total_value * 100 # 绘制图形 p <- ggplot(data, aes(x = x)) + geom_line(aes(y = cumulative_value), color = \\"blue\\", size = 1) + # 累计数据量线条 geom_point(aes(y =…","description":"library(ggplot2) data <- data.frame( x = 1:10, value = c(5, 10, 15, 20, 25, 30, 35, 40, 45, 50) ) # 计算累计值和百分比 data$cumulative_value <- cumsum(data$value) total_value <- sum(data$value) data$percentage <- data$cumulative_value / total_value * 100 # 绘制图形 p <- ggplot(data, aes(x = x…","guid":"https://zhuanlan.zhihu.com/p/12225697736","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T06:15:22.150Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Rstudio工具栏知多少!","url":"https://zhuanlan.zhihu.com/p/11605527454","content":"写在开头前几天在上课的时候, 在演示使用Rstudio里面的Terminal调用linux命令整理文件,然后惊喜的发现有些学员Rstudio左下角控制台中仅有控制台Console [图片] 如果没有修改的话,正常而言应该是有consle、Terminal以及Bacground jobs这几个选项 [图片] 因为太默认了,默认到当其中一个被关掉,小谢都不知道该从哪里去找,还是 大佬学员提醒说可以通过View功能栏中的Move Focus to Source/Console/Terminal让其重新展示出来 [图片] 很早之前就被提醒…","description":"写在开头前几天在上课的时候, 在演示使用Rstudio里面的Terminal调用linux命令整理文件,然后惊喜的发现有些学员Rstudio左下角控制台中仅有控制台Console [图片] 如果没有修改的话,正常而言应该是有consle、Terminal以及Bacground jobs这几个选项 [图片] 因为太默认了,默认到当其中一个被关掉,小谢都不知道该从哪里去找,还是 大佬学员提醒说可以通过View功能栏中的Move Focus to Source/Console/Terminal让其重新展示出来 [图片] 很早之前就被提醒…","guid":"https://zhuanlan.zhihu.com/p/11605527454","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-12T02:45:49.959Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言ggtree给树节点添加饼图注释","url":"https://zhuanlan.zhihu.com/p/12118147161","content":"ggtree 的文档链接 https://yulab-smu.top/treedata-book/index.html 节点添加饼图的代码 https://yulab-smu.top/treedata-book/chapter8.html 模拟一个简单的进化树library(ggtree) tree<-rtree(5) ggtree(tree)+ geom_tiplab() [图片] 每个节点都有一个数字对应,我们可以把数字显示到图上 ggtree(tree)+ geom_nodelab(aes(label=node))+ geom_tiplab(aes(label=node)) [图片] 现在假如我要给1 2 3 4 5 节点添加饼图 nodepie函数可以批量做饼图,数据格式如下 node.pie.dat.01<-data.frame(node=1:5, co…","description":"ggtree 的文档链接 https://yulab-smu.top/treedata-book/index.html 节点添加饼图的代码 https://yulab-smu.top/treedata-book/chapter8.html 模拟一个简单的进化树library(ggtree) tree<-rtree(5) ggtree(tree)+ geom_tiplab() [图片] 每个节点都有一个数字对应,我们可以把数字显示到图上 ggtree(tree)+ geom_nodelab(aes(label=node))+ geom_tiplab(aes…","guid":"https://zhuanlan.zhihu.com/p/12118147161","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T14:22:25.023Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-一马归一马的回答:寄蜉蝣于天地,渺沧海之一粟。","url":"https://www.zhihu.com/question/580956751/answer/53203674492","content":"能否分享一些让你豁然开朗的句子?寄蜉蝣于天地,渺沧海之一粟。
","description":"能否分享一些让你豁然开朗的句子? 一马归一马的回答\\n\\n\\n寄蜉蝣于天地,渺沧海之一粟。","guid":"https://www.zhihu.com/question/580956751/answer/53203674492","author":"一马归一马","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T13:54:46.840Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"小白教程:基于R代码进行潜在剖面分析","url":"https://zhuanlan.zhihu.com/p/12069991823","content":"1. 概念简介 潜在剖面分析是基于问卷题目得分,对一组人群进行分类,多用于分类处理。 2. 软件安装 Rstudio: https://posit.co/download/rstudio-desktop/ R: https://cran.r-project.org/bin/windows/base/ 3. 代码运行 3.1 数据预处理 library(networktools) library(tidyLPA) library(dplyr) setwd(\\"D:/data\\") data <- read.csv(\\"data.csv\\", header = TRUE, sep = \\",\\") # 计算各列范围的总分,并添加到数据框中 # 提取 age 和 gender 列到新变量 age_gender <- data[, c(\\"ID\\"…","description":"1. 概念简介 潜在剖面分析是基于问卷题目得分,对一组人群进行分类,多用于分类处理。 2. 软件安装 Rstudio: https://posit.co/download/rstudio-desktop/ R: https://cran.r-project.org/bin/windows/base/ 3. 代码运行 3.1 数据预处理 library(networktools) library(tidyLPA) library(dplyr) setwd(\\"D:/data\\") data <- read.csv(\\"data.csv\\", header…","guid":"https://zhuanlan.zhihu.com/p/12069991823","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T13:49:17.375Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学 R 语言?-省10000000废物的回答:不需要把R语言实战全啃完,了解一些基本的语法,学习一些基本统计知识就可以了。目的导向性去学,网上...","url":"https://www.zhihu.com/question/4139067549/answer/53120559678","content":"临床大一是不是应该自学 R 语言?不需要把R语言实战全啃完,了解一些基本的语法,学习一些基本统计知识就可以了。目的导向性去学,网上找流程代码,加上AI帮你annotation和debug,把单细胞测序,RNAseq之类,TCGA数据库分析这些基本的一个个啃完了。就有些经验了
","description":"临床大一是不是应该自学 R 语言? 省10000000废物的回答\\n\\n\\n不需要把R语言实战全啃完,了解一些基本的语法,学习一些基本统计知识就可以了。目的导向性去学,网上找流程代码,加上AI帮你annotation和debug,把单细胞测序,RNAseq之类,TCGA数据库分析这些基本的一个个啃完了。就有些经验了","guid":"https://www.zhihu.com/question/4139067549/answer/53120559678","author":"省10000000废物","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T11:37:08.820Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言提示多字节字符串有错误怎么解决?-小光amateur的回答:你的错误发生在 read.delim这里,你没有成功读入任何文件,导致你的真是数据为0行,这就是报错的意思...","url":"https://www.zhihu.com/question/6515985647/answer/52956423408","content":"R语言提示多字节字符串有错误怎么解决?你的错误发生在read.delim
这里,你没有成功读入任何文件,导致你的真是数据为0行,这就是报错的意思。
就像楼上大佬讲的,你读入的是.gz后缀的文件,是压缩文件,这个压缩文件是二进制,是无法被R语言读取的。
","description":"R语言提示多字节字符串有错误怎么解决? 小光amateur的回答\\n\\n\\n你的错误发生在read.delim这里,你没有成功读入任何文件,导致你的真是数据为0行,这就是报错的意思。\\n\\n就像楼上大佬讲的,你读入的是.gz后缀的文件,是压缩文件,这个压缩文件是二进制,是无法被R语言读取的。","guid":"https://www.zhihu.com/question/6515985647/answer/52956423408","author":"小光amateur","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T07:55:09.185Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-素念wang的回答:01..请一边努力,一边快乐。 02..活着的花,有一万种开法,祝你方寸不乱。 03..晴秋上午,随便走走,不一定...","url":"https://www.zhihu.com/question/580956751/answer/52877476138","content":"能否分享一些让你豁然开朗的句子?01..请一边努力,一边快乐。
02..活着的花,有一万种开法,祝你方寸不乱。
03..晴秋上午,随便走走,不一定要快乐。
04..做生活的导演,不成,次之,做演员,再次之,做观众。
05..从远处看,大多数东西都是美丽动人的。
06..相遇不一定会有结局,但一定会有意义,在追逐月亮的过程中,我曾被月亮照亮过。
07..我需要一个答案,也许美满,也许破碎,但我不想半途而废。
08..悬而未决的从来都不是夏,是我大大方方地开花,你也不是那时的晚霞。
09..所有的为时已晚,其实都是恰逢其时,是微风,是晚霞,是心跳,是无可替代。
10..如果你瞄准月亮,即便走失,也是在星辰之间。
","description":"能否分享一些让你豁然开朗的句子? 素念wang的回答\\n\\n\\n01..请一边努力,一边快乐。\\n\\n02..活着的花,有一万种开法,祝你方寸不乱。\\n\\n03..晴秋上午,随便走走,不一定要快乐。\\n\\n04..做生活的导演,不成,次之,做演员,再次之,做观众。\\n\\n05..从远处看,大多数东西都是美丽动人的。\\n\\n06..相遇不一定会有结局,但一定会有意义,在追逐月亮的过程中,我曾被月亮照亮过。\\n\\n07..我需要一个答案,也许美满,也许破碎,但我不想半途而废。\\n\\n08..悬而未决的从来都不是夏,是我大大方方地开花,你也不是那时的晚霞。\\n\\n09..所有的为时已晚,其实都是恰逢其时,是微风,是晚霞,是心跳…","guid":"https://www.zhihu.com/question/580956751/answer/52877476138","author":"素念wang","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T06:24:27.166Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言提示多字节字符串有错误怎么解决?-恨铁不成钢琴的回答:没人告诉你.gz是压缩包要先解压吗","url":"https://www.zhihu.com/question/6515985647/answer/52792755004","content":"R语言提示多字节字符串有错误怎么解决?没人告诉你.gz是压缩包要先解压吗
","description":"R语言提示多字节字符串有错误怎么解决? 恨铁不成钢琴的回答\\n\\n\\n没人告诉你.gz是压缩包要先解压吗","guid":"https://www.zhihu.com/question/6515985647/answer/52792755004","author":"恨铁不成钢琴","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T04:36:16.983Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"在 Typst 里渲染 R 代码块运行结果","url":"https://zhuanlan.zhihu.com/p/11981948023","content":"Typst 是什么Typst 是一个文档排版工具,包含一种标记语言,一个编译工具,还有正在快速发展的生态。Typst 语言有一套有趣的语法,相对 Tex 语言来说可以更加简洁明了地表达大部分文档排版的需求。 为什么要在 Typst 里渲染 R 代码块的运行结果?主要是期望在 Typst 中也能做到文学编程。而 R 语言又常常是文学编程中“编程“的那一部分。 现阶段的问题通过使用 knitr , 现在其实已经可以比较好地渲染文本类输出了。主要是图片信…","description":"Typst 是什么Typst 是一个文档排版工具,包含一种标记语言,一个编译工具,还有正在快速发展的生态。Typst 语言有一套有趣的语法,相对 Tex 语言来说可以更加简洁明了地表达大部分文档排版的需求。 为什么要在 Typst 里渲染 R 代码块的运行结果?主要是期望在 Typst 中也能做到文学编程。而 R 语言又常常是文学编程中“编程“的那一部分。 现阶段的问题通过使用 knitr , 现在其实已经可以比较好地渲染文本类输出了。主要是图片信…","guid":"https://zhuanlan.zhihu.com/p/11981948023","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-11T03:42:09.042Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"机器学习用python还是R,哪个更好?-Wo Gaho的回答:传统机器学习可能五五开。 深度学习的话,但凡多看几篇深度学习文献,都不至于问出这种问题。 现在Ai顶会的...","url":"https://www.zhihu.com/question/612094457/answer/52499484359","content":"机器学习用python还是R,哪个更好?传统机器学习可能五五开。
深度学习的话,但凡多看几篇深度学习文献,都不至于问出这种问题。
现在Ai顶会的情况:1、大部分基于pytorch,2、极少部分基于tensorflow。而这两个库都是python环境,有R语言的影子不?
","description":"机器学习用python还是R,哪个更好? Wo Gaho的回答\\n\\n\\n传统机器学习可能五五开。\\n\\n深度学习的话,但凡多看几篇深度学习文献,都不至于问出这种问题。\\n\\n现在Ai顶会的情况:1、大部分基于pytorch,2、极少部分基于tensorflow。而这两个库都是python环境,有R语言的影子不?","guid":"https://www.zhihu.com/question/612094457/answer/52499484359","author":"Wo Gaho","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T18:20:47.464Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"医学生还需要学R语言吗?-五步之外的回答:行有余力,则以学文。R语言生信统计常用的,可视化不是这个软件的重心所在。统计学原理才是,学了这个是更上一层楼。...","url":"https://www.zhihu.com/question/6374954884/answer/52389644519","content":"医学生还需要学R语言吗?行有余力,则以学文。R语言生信统计常用的,可视化不是这个软件的重心所在。统计学原理才是,学了这个是更上一层楼。是更宽更广眼界看待世界和问题的一角,学了这个,就算是学了冰山一角,更大的还在后面,而不学这个,宛如泰坦尼克看不到冰山。
","description":"医学生还需要学R语言吗? 五步之外的回答\\n\\n\\n行有余力,则以学文。R语言生信统计常用的,可视化不是这个软件的重心所在。统计学原理才是,学了这个是更上一层楼。是更宽更广眼界看待世界和问题的一角,学了这个,就算是学了冰山一角,更大的还在后面,而不学这个,宛如泰坦尼克看不到冰山。","guid":"https://www.zhihu.com/question/6374954884/answer/52389644519","author":"五步之外","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T13:56:40.137Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-路明非的墨瞳的回答:这两位应该是朋友关系吧。 有AI之后R可能更容易用了,要是没有AI,我都不知道离开Python,甚至是C或者excel,...","url":"https://www.zhihu.com/question/620095226/answer/52382374374","content":"Python 在将 R 绞杀至死吗 ?这两位应该是朋友关系吧。
有AI之后R可能更容易用了,要是没有AI,我都不知道离开Python,甚至是C或者excel,我这R语言怎么用,感觉处理个表格就能把我卡死。
当然我只说我自己,我见过纯用R可以搞定一切的人。
","description":"Python 在将 R 绞杀至死吗 ? 路明非的墨瞳的回答\\n\\n\\n这两位应该是朋友关系吧。\\n\\n有AI之后R可能更容易用了,要是没有AI,我都不知道离开Python,甚至是C或者excel,我这R语言怎么用,感觉处理个表格就能把我卡死。\\n\\n当然我只说我自己,我见过纯用R可以搞定一切的人。","guid":"https://www.zhihu.com/question/620095226/answer/52382374374","author":"路明非的墨瞳","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T13:44:52.586Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Cox回归预测模型:模型的验证——ROC曲线","url":"https://zhuanlan.zhihu.com/p/11859022855","content":"[视频: Cox回归预测模型:模型的验证——ROC曲线] 前面介绍了C-index和校准曲线对Cox回归模型的验证方法。今天将探讨利用ROC曲线来验证Cox回归模型的区分度。ROC曲线下的面积,即AUC值,范围在0至1之间。AUC值越接近1,模型的预测区分能力越强。接下来,我们将详细介绍如何使用R语言绘制ROC曲线并计算AUC值。 1、原始数据 [图片] 第1列的num.为受试者编号;第2列的os_status,为生存状态,0为删失,1为死亡;第3列的os_time,为生存时间;第4列的characteristic1,是连续性变量;第5列的c…","description":"[视频: Cox回归预测模型:模型的验证——ROC曲线] 前面介绍了C-index和校准曲线对Cox回归模型的验证方法。今天将探讨利用ROC曲线来验证Cox回归模型的区分度。ROC曲线下的面积,即AUC值,范围在0至1之间。AUC值越接近1,模型的预测区分能力越强。接下来,我们将详细介绍如何使用R语言绘制ROC曲线并计算AUC值。 1、原始数据 [图片] 第1列的num.为受试者编号;第2列的os_status,为生存状态,0为删失,1为死亡;第3列的os_time,为生存时间;第4列的characteristic1,是连续性变量;第5列的c…","guid":"https://zhuanlan.zhihu.com/p/11859022855","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T10:28:02.578Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言缺失数据mice多重插补?-张敬信的回答:[图片] 关于批量建模/计算的技术,可参阅: 批量建模: 张敬信:【Tidyverse优雅编程】数据重塑+批量 t 检验 张敬信...","url":"https://www.zhihu.com/question/6198707737/answer/52113023400","content":"R语言缺失数据mice多重插补?关于批量建模/计算的技术,可参阅:
批量建模:
张敬信:【Tidyverse优雅编程】数据重塑+批量 t 检验
张敬信:【Tidyverse优雅编程】批量建模之分组滚动回归
张敬信:【Tidyverse优雅编程】批量建模:传递模型公式
张敬信:【Tidyverse优雅编程】复杂重复随机抽样+批量建模
张敬信:【Tidyverse优雅编程】Bootstrap残差法回归估计
","description":"R语言缺失数据mice多重插补? 张敬信的回答\\n\\n\\n关于批量建模/计算的技术,可参阅:\\n\\n批量建模:\\n\\n张敬信:【Tidyverse优雅编程】数据重塑+批量 t 检验\\n\\n张敬信:【Tidyverse优雅编程】批量建模之分组滚动回归\\n\\n张敬信:【Tidyverse优雅编程】批量建模:传递模型公式\\n\\n张敬信:【Tidyverse优雅编程】复杂重复随机抽样+批量建模\\n\\n张敬信:【Tidyverse优雅编程】Bootstrap残差法回归估计","guid":"https://www.zhihu.com/question/6198707737/answer/52113023400","author":"张敬信","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T07:18:46.479Z","media":[{"url":"https://pic1.zhimg.com/v2-71de67fc7c56048f2df3f44be18d90c3.jpg","type":"photo","width":1578,"height":687,"blurhash":"L8Q,RH?vog~q.9t8xv%NxaM{ayae"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求解EGARCH模型的杠杆效应?-青青说的回答:Exponential Generalized Autoregressive Conditional Heteroskedasticity。 指数广义自回归条件异方差模型 EGARCH M...","url":"https://www.zhihu.com/question/68624181/answer/52015016764","content":"求解EGARCH模型的杠杆效应?Exponential Generalized Autoregressive Conditional Heteroskedasticity。
指数广义自回归条件异方差模型
EGARCH MODEL如何表达、求期望和方差
不需要花很多精力,关键也不是可视化,使用ai能解决大部分问题。内核是统计,根据数据特征选择模型,才能得出有统计学意义的结论。出图很简单的,不要以出图为目的,因为最终是要解释生物学问题的。
用好ai吧,否则,
Bio-Informatics Agent (BIA),能自己读文献,自己获取数据,自己学习分析流程,还加入了专家评议,相当于开组会。嘶,共勉吧
","description":"医学生还需要学R语言吗? HorizonGazer的回答\\n\\n\\n不需要花很多精力,关键也不是可视化,使用ai能解决大部分问题。内核是统计,根据数据特征选择模型,才能得出有统计学意义的结论。出图很简单的,不要以出图为目的,因为最终是要解释生物学问题的。\\n\\n用好ai吧,否则,\\n\\nBio-Informatics Agent (BIA),能自己读文献,自己获取数据,自己学习分析流程,还加入了专家评议,相当于开组会。嘶,共勉吧","guid":"https://www.zhihu.com/question/6374954884/answer/51794220865","author":"HorizonGazer","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T01:29:55.600Z","media":[{"url":"https://picx.zhimg.com/v2-774bfc06c7b3e6ab2a311074cb8d21ed.jpg","type":"photo","width":2869,"height":1506,"blurhash":"LVPZlnt7WVxu01RkoftR0Ls9oeoe"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 和 R ,谁更厉害?","url":"https://zhuanlan.zhihu.com/p/11707394723","content":"大家好,我是爱好数据可视化的章北海 前些天 用 R 复刻了一张图,附代码 ,纯 AI 识图+AI 代码复刻,还是 R 更接近,更美观。最近又看到几张漂亮的环形条形图,顺着找到了 Python 和 R 的图表画廊,顺便分享出来,大家感受一下。❝环形条形图与普通条形图非常相似,但使用极坐标而不是笛卡尔坐标。它们在使用 Python 构建时有些复杂,通常不如普通条形图准确,但它们具有引人注目的效果,有时值得使用。Pythongallery: https://p…","description":"大家好,我是爱好数据可视化的章北海 前些天 用 R 复刻了一张图,附代码 ,纯 AI 识图+AI 代码复刻,还是 R 更接近,更美观。最近又看到几张漂亮的环形条形图,顺着找到了 Python 和 R 的图表画廊,顺便分享出来,大家感受一下。❝环形条形图与普通条形图非常相似,但使用极坐标而不是笛卡尔坐标。它们在使用 Python 构建时有些复杂,通常不如普通条形图准确,但它们具有引人注目的效果,有时值得使用。Pythongallery: https://p…","guid":"https://zhuanlan.zhihu.com/p/11707394723","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-10T00:57:06.452Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R 在Vscode的jupyter中执行时,找不到变量?-知乎用户的回答:不知道,没代码,没截图,有很大可能你没运行,或者变量名错误","url":"https://www.zhihu.com/question/6410498440/answer/51664838023","content":"R 在Vscode的jupyter中执行时,找不到变量?不知道,没代码,没截图,有很大可能你没运行,或者变量名错误
","description":"R 在Vscode的jupyter中执行时,找不到变量? 知乎用户的回答\\n\\n\\n不知道,没代码,没截图,有很大可能你没运行,或者变量名错误","guid":"https://www.zhihu.com/question/6410498440/answer/51664838023","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-09T16:28:06.684Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"GARCH模型的建模步骤?-青青说的回答:GARCH MODEL的平稳性条件、无条件方差、At高阶矩、条件方差(在S步后,S=》∞时) [图片] [图片]","url":"https://www.zhihu.com/question/44995106/answer/51654964864","content":"GARCH模型的建模步骤?GARCH MODEL的平稳性条件、无条件方差、At高阶矩、条件方差(在S步后,S=》∞时)
某电商公司希望对其销售数据进行深入分析,以了解市场趋势、消费者行为以及产品表现,从而制定更有效的营销策略。
从数据采集、清洗、分析、可视化以及报告撰写等多个方面进行详细规划。假设有以下数据集:
接下来,按照项目要求逐步制定R语言分析方案:
假设数据已经通过SQL查询从数据库获取,或通过API接口从社交媒体及市场调研报告等第三方数据源采集。常见的数据获取方式包括:
RODBC
、DBI
、RMySQL
等R包连接数据库,执行SQL查询,获取销售数据、顾客数据和产品数据等。rtweet
、twitteR
、Rfacebook
等连接社交媒体API,采集相关数据。pdftools
或rvest
包进行提取。数据清洗是分析过程中的重要环节,R中有许多包(如dplyr
、tidyr
)可帮助你完成这项任务。具体的清洗步骤包括:
library(dplyr)
sales_data <- sales_data %>% distinct() # 去重
sales_data <- sales_data %>%
mutate(sales_amount = ifelse(is.na(sales_amount), median(sales_amount, na.rm = TRUE), sales_amount))
boxplot(sales_data$sales_amount) # 绘制箱线图查看异常值
sales_data <- sales_data %>%
filter(sales_amount < quantile(sales_amount, 0.95)) # 去除超出95%分位数的异常值
使用R进行数据分析,挖掘出有价值的信息。以下是几个可能的分析方法:
library(ggplot2)\\nggplot(sales_data, aes(x = date, y = sales_amount)) + \\ngeom_line() + \\nlabs(title = \\"销售额时间趋势\\")
customer_behavior <- sales_data %>%
group_by(customer_id) %>%
summarise(total_spent = sum(sales_amount), avg_purchase = mean(sales_amount))
product_sales <- sales_data %>%
group_by(product_id) %>%
summarise(total_sales = sum(sales_amount), avg_price = mean(price)) %>%
arrange(desc(total_sales))
social_media_data <- merge(sales_data, social_media_data, by = \\"product_id\\") ggplot(social_media_data, aes(x = likes, y = sales_amount)) +
geom_point() +
geom_smooth(method = \\"lm\\") +
labs(title = \\"社交媒体互动与销售额的关系\\")
使用R语言的ggplot2
、plotly
等包来生成直观的图表,帮助公司管理层更好地理解数据分析结果。
ggplot(product_sales, aes(x = product_category, y = total_sales)) +
geom_bar(stat = \\"identity\\") +
theme_minimal() +
labs(title = \\"各产品类别销售额\\")
ggplot(sales_data, aes(x = date, y = sales_amount)) +
geom_line() +
labs(title = \\"销售额时间趋势\\", x = \\"日期\\", y = \\"销售额\\")
ggplot(product_sales, aes(x = avg_price, y = total_sales)) +
geom_point() +
labs(title = \\"价格与销量关系\\")
library(plotly)
pie_chart <- product_sales %>%
group_by(customer_segment) %>%
summarise(sales = sum(total_sales)) %>%
plot_ly(labels = ~customer_segment, values = ~sales, type = \'pie\')
pie_chart
根据分析结果,撰写报告时应包括以下内容:
为确保项目的长期有效性,可以提供以下支持:
library(dplyr)\\nlibrary(ggplot2)\\n\\n# 假设数据\\nsales_data <- data.frame(\\n date = as.Date(\'2024-01-01\') + 0:29,\\n sales_amount = rnorm(30, mean = 2000, sd = 500),\\n product_id = sample(1:5, 30, replace = TRUE)\\n)\\n\\n# 数据清洗:去除缺失值\\nsales_data <- sales_data %>% filter(!is.na(sales_amount))\\n\\n# 销售趋势分析\\nggplot(sales_data, aes(x = date, y = sales_amount)) +\\n geom_line() + \\n labs(title = \\"2024年1月销售额趋势\\", x = \\"日期\\", y = \\"销售额\\")
代码在哪呢
","description":"孟德尔分析出现Error in file (file, ifelse(append, a, w)? 知乎用户的回答\\n\\n\\n代码在哪呢","guid":"https://www.zhihu.com/question/6297676158/answer/51256101774","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-09T06:18:09.903Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"wayfair怎么上传多变体啊?-小明哥wayfair的回答:Wayfair中part number和wayfair sku的区别(更多最新运营系列记得持续关注哦) Wayfair中对于产品链接有多个名称...","url":"https://www.zhihu.com/question/563797009/answer/51183291743","content":"wayfair怎么上传多变体啊?Wayfair中part number和wayfair sku的区别(更多最新运营系列记得持续关注哦)
Wayfair中对于产品链接有多个名称
大致有Supplier Part Number、Manufacturer Model Number、Product ID、Wayfair SKU、Display SKU这几个比较重要的名字来表示产品链接。 (码字不易,且看且珍惜)
如图中为Display SKU,通过这个SKU可以在前台搜索框中搜到对应的产品。
更多看:
此外,
- 当我们在与平台沟通发Ticket时,平台提示需要我们填的part number和Wayfair Sku就是上文提到的Supplier Part Number和Wayfair Sku。Wayfair Sku表示一整条父体,Supplier Part Number表示单个子体。
- 当我们在做Waymore时,所绑定的也是Wayfair Sku,暂时不能对不同子体设置不同的waymore详情.
- 当我们在打广告时,自动广告是以Wayfair Sku的维度,而手动广告是以Supplier Part Number的维度。
- 当我们在邀评和送测时,也是以Wayfair Sku的维度。(转载请注明出处)
教程:Wayfair中part number和wayfair sku的区别","description":"wayfair怎么上传多变体啊? 小明哥wayfair的回答\\n\\n\\nWayfair中part number和wayfair sku的区别(更多最新运营系列记得持续关注哦)\\n\\nWayfair中对于产品链接有多个名称\\n\\n大致有Supplier Part Number、Manufacturer Model Number、Product ID、Wayfair SKU、Display SKU这几个比较重要的名字来表示产品链接。 (码字不易,且看且珍惜)\\n\\nSupplier Part Number、Manufacturer Model Number可以理解为相同,我们称之为产品型号…","guid":"https://www.zhihu.com/question/563797009/answer/51183291743","author":"小明哥wayfair","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-09T04:33:50.286Z","media":[{"url":"https://pic1.zhimg.com/v2-93ad98a8e23ffc514f5cf34f3204c19a.jpg","type":"photo","width":2978,"height":1482,"blurhash":"LIRp5z~qx]-:D%%MxuRjD%%Mt8WU"},{"url":"https://picx.zhimg.com/v2-991e29ac53fe08fabafbbdfbb610418b.jpg","type":"photo","width":2730,"height":1498,"blurhash":"LRM*5Bx]_4oL~pNaRks;?HWrbbs:"},{"url":"https://picx.zhimg.com/v2-aa7a05e87bb9e82fa1649e4c7fe00e72.jpg","type":"photo","width":720,"height":396,"blurhash":"LIP%It_3t7~q9F_Mxus;_3%MRjM{"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言如何将doc转换为docx:大量文件的现实案例","url":"https://zhuanlan.zhihu.com/p/11469057140","content":"这个版本的代码: 需要指定输入和输出文件夹会自动创建输出文件夹(如果不存在)保持原始文件不变所有转换后的.docx文件都会保存在指定的输出文件夹中记录每个文件的转换结果,包括输入和输出路径使用时注意: 确保有足够的磁盘空间确保对输出文件夹有写入权限如果输出文件夹已存在同名文件,会被覆盖建议先用少量文件测试# 1.从GitHub安装并加载RDCOMClient devtools::install_github(\\"omegahat/RDCOMClient\\") library(RDCOMCli…","description":"这个版本的代码: 需要指定输入和输出文件夹会自动创建输出文件夹(如果不存在)保持原始文件不变所有转换后的.docx文件都会保存在指定的输出文件夹中记录每个文件的转换结果,包括输入和输出路径使用时注意: 确保有足够的磁盘空间确保对输出文件夹有写入权限如果输出文件夹已存在同名文件,会被覆盖建议先用少量文件测试# 1.从GitHub安装并加载RDCOMClient devtools::install_github(\\"omegahat/RDCOMClient\\") library(RDCOMCli…","guid":"https://zhuanlan.zhihu.com/p/11469057140","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-08T15:45:34.372Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-Brestand的回答:Python用户的最底层是调包侠,最常用的是ctrl+C和ctrl+V R用户的最底层是看不懂代码只会改参数的图形界面用户,最...","url":"https://www.zhihu.com/question/620095226/answer/50720330660","content":"Python 在将 R 绞杀至死吗 ?Python用户的最底层是调包侠,最常用的是ctrl+C和ctrl+V
R用户的最底层是看不懂代码只会改参数的图形界面用户,最常用的是拿鼠标选中数据然后点点点
Python再强大,对弱智用户的关怀也是不够的,很多R用户真的对代码一点不感兴趣,他们只在乎结果
不然也不至于出现一大堆垃圾代码只能跑在单核上
毕竟这些作者优化代码的时间可能比等代码运行完一百次的时间还要长
","description":"Python 在将 R 绞杀至死吗 ? Brestand的回答\\n\\n\\nPython用户的最底层是调包侠,最常用的是ctrl+C和ctrl+V\\n\\nR用户的最底层是看不懂代码只会改参数的图形界面用户,最常用的是拿鼠标选中数据然后点点点\\n\\nPython再强大,对弱智用户的关怀也是不够的,很多R用户真的对代码一点不感兴趣,他们只在乎结果\\n\\n不然也不至于出现一大堆垃圾代码只能跑在单核上\\n\\n毕竟这些作者优化代码的时间可能比等代码运行完一百次的时间还要长","guid":"https://www.zhihu.com/question/620095226/answer/50720330660","author":"Brestand","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-08T12:03:44.696Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"如何使用R语言做不同设计的方差分析(ANOVA)、简单效应检验、事后多重比较?-信息科技研究的回答:ANOVA(方差分析)用于探究分类变量与连续变量之间的关系,广...","url":"https://www.zhihu.com/question/324832235/answer/50170830323","content":"如何使用R语言做不同设计的方差分析(ANOVA)、简单效应检验、事后多重比较?在 R 编程中,可以运行 ANOVA 测试,有许多可用的函数和包来执行此操作。
ANOVA 测试包括以下步骤:
ANOVA 测试有两种类型:
本文使用的是 mtcars 数据集(汽车道路测试数据集),它包含 32 个汽车品牌和 11 个属性。此数据集已预安装在 R 的 dplyr 包中。
首先,我们需要安装并加载 dplyr 包。
单因素 ANOVA 测试使用 mtcars 数据集,通过 disp 属性(连续属性)和 gear 属性(分类属性)进行。以下是操作步骤:
install.packages(\\"dplyr\\") \\nlibrary(dplyr)
head(mtcars)
输出:
mpg cyl disp hp drat wt qsec vs am gear carb\\n Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4\\n Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4\\n Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1\\n Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1\\n Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2\\n Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
mtcars_aov <- aov(mtcars$disp ~ factor(mtcars$gear))\\nsummary(mtcars_aov)
输出:
Df Sum Sq Mean Sq F value Pr(>F)\\nfactor(mtcars$gear) 2 280221 140110 20.73 2.56e-06 ***\\nResiduals 29 195964 6757
在双因素 ANOVA 中,我们考虑了 disp(连续属性)、gear(分类属性)和 am(分类属性)之间的关系。
mtcars_aov2 <- aov(mtcars$disp ~ factor(mtcars$gear) * factor(mtcars$am))\\nsummary(mtcars_aov2)
输出:
Df Sum Sq Mean Sq F value Pr(>F)\\nfactor(mtcars$gear) 2 280221 140110 20.695 3.03e-06 ***\\nfactor(mtcars$am) 1 6399 6399 0.945 0.339\\nResiduals 28 189565 6770
使用 Akaike 信息准则 (AIC) 来选择最佳拟合模型。AIC 衡量模型的拟合度,并且会对更复杂的模型进行惩罚,以防止过拟合。
library(AICcmodavg)\\n\\nmodel.set <- list(mtcars_aov, mtcars_aov2)\\nmodel.names <- c(\\"mtcars_aov\\", \\"mtcars_aov2\\")\\n\\naictab(model.set, modnames = model.names)
输出:
Model selection based on AICc:\\n\\n K AICc Delta_AICc AICcWt Cum.Wt LL\\nmtcars_aov 4 379.33 0.00 0.71 0.71 -184.93\\nmtcars_aov2 5 381.10 1.76 0.29 1.00 -184.39
为了更好地比较两个模型,我们可以使用 ggplot2 包绘制箱型图,视觉化地展示单因素 ANOVA 和双因素 ANOVA 的结果。
# 加载必要的包\\ninstall.packages(\\"ggplot2\\")\\nlibrary(ggplot2)\\n\\n# 单因素 ANOVA 可视化\\nplot1 <- ggplot(mtcars, aes(x = factor(gear), y = disp, fill = factor(gear))) + \\n geom_boxplot(color = \\"black\\", alpha = 0.7) + \\n labs(title = \\"One-Way ANOVA\\", x = \\"Gear\\", y = \\"Displacement\\") + \\n theme_minimal() + \\n theme(legend.position = \\"top\\")\\n\\n# 双因素 ANOVA 可视化\\nplot2 <- ggplot(mtcars, aes(x = factor(gear), y = disp, fill = factor(am))) + \\n geom_boxplot(color = \\"black\\", alpha = 0.7) + \\n labs(title = \\"Two-Way ANOVA\\", x = \\"Gear\\", y = \\"Displacement\\") + \\n theme_minimal() + \\n theme(legend.position = \\"top\\")\\n\\n# 合并图表进行比较\\nlibrary(gridExtra)\\ngrid.arrange(plot1, plot2, ncol = 2)
从箱型图和统计结果可以看出:
在其他地方看到了解决办法,是因为这个变量的某一个分类没有感兴趣的结局发生。以age为例,age1,age2,age3三个分类中,age1中没有结局事件的发生,所以导致了age2,age3在和age1比较时候,出现了coefficient may be infinite。指路R coxph()警告: Loglik在其他变量的有效结果之前收敛?-腾讯云开发者社区-腾讯云 (tencent.com)
","description":"R语言进行cox分析Warning message的原因? 智慧少女不秃头的回答\\n\\n\\n在其他地方看到了解决办法,是因为这个变量的某一个分类没有感兴趣的结局发生。以age为例,age1,age2,age3三个分类中,age1中没有结局事件的发生,所以导致了age2,age3在和age1比较时候,出现了coefficient may be infinite。指路R coxph()警告: Loglik在其他变量的有效结果之前收敛?-腾讯云开发者社区-腾讯云 (tencent.com)","guid":"https://www.zhihu.com/question/530125955/answer/50057082092","author":"智慧少女不秃头","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-07T11:18:15.736Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-123456的回答:R是函数式编程语言,对不习惯写for这种命令式编程的人简直太友好了,尽管也支持for,但是更推荐lapply。Python函数...","url":"https://www.zhihu.com/question/620095226/answer/49900778757","content":"Python 在将 R 绞杀至死吗 ?R是函数式编程语言,对不习惯写for这种命令式编程的人简直太友好了,尽管也支持for,但是更推荐lapply。Python函数式支持的还是不好,更不用提R有了原生管道|>以后写代码可以说行云流水,一气呵成。R有tidyverse这个库可以说也把上手难度降到最低了
Python那种没大括号缩进实在劝退,我是能不用Python就不用的
","description":"Python 在将 R 绞杀至死吗 ? 123456的回答\\n\\n\\nR是函数式编程语言,对不习惯写for这种命令式编程的人简直太友好了,尽管也支持for,但是更推荐lapply。Python函数式支持的还是不好,更不用提R有了原生管道|>以后写代码可以说行云流水,一气呵成。R有tidyverse这个库可以说也把上手难度降到最低了\\n\\nPython那种没大括号缩进实在劝退,我是能不用Python就不用的","guid":"https://www.zhihu.com/question/620095226/answer/49900778757","author":"123456","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-07T06:40:24.157Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言导入csv文件之后如何对文件中的数据求平均值 (求解答 谢谢感恩!!!)?-宏程先生的回答:dbf的结构优势dbf文件格式具有较为固定的结构。它通常有着明确...","url":"https://www.zhihu.com/question/507127137/answer/49875907092","content":"R语言导入csv文件之后如何对文件中的数据求平均值 (求解答 谢谢感恩!!!)?dbf文件格式具有较为固定的结构。它通常有着明确的字段定义,这对于量化交易中的数据组织是非常有利的。在量化交易中,我们常常需要处理海量的数据,dbf格式能够清晰地将不同类型的数据,如交易时间、交易价格、成交量等按照既定的结构进行存储。这种结构有助于提高数据的读取效率,特别是在处理大规模的历史交易数据时。因为数据的存储布局相对固定,程序可以按照预定的模式快速定位和提取所需的数据,减少了搜索和处理的时间成本。
dbf文件格式也存在一些局限性。其兼容性相对较差,在现代的一些跨平台环境下可能会遇到问题。许多新兴的数据分析工具和编程语言可能对dbf格式的支持不够完善。在一些基于云平台的量化交易系统中,dbf格式可能无法直接被某些分析模块所识别。这就需要进行额外的格式转换工作,从而增加了数据处理的复杂性和时间成本。而且,dbf格式的开放性不如csv,其标准相对封闭,这也限制了它在更广泛的技术生态中的应用。
csv文件格式最大的优点就是简单易读。它以纯文本的形式存储数据,每一行代表一条记录,每一列由逗号分隔不同的字段。这种简单的格式使得它几乎可以被任何编程语言和数据分析工具所读取。在量化交易中,无论是使用Python、R还是其他的脚本语言进行数据处理,都可以轻松地解析csv文件。对于量化交易员来说,这意味着可以快速地查看和理解数据的内容,不需要复杂的解码或者特殊的工具。当我们需要快速查看某一天的交易数据样本时,直接打开csv文件就能清晰地看到各个数据项的值。
但是,csv文件格式也有自身的不足。在性能方面,由于它是纯文本格式,没有像dbf那样的结构优化,所以在处理大规模数据时可能会遇到效率问题。读取大量的csv数据可能会比较耗时,尤其是当数据量达到百万级以上时。csv文件在数据完整性方面存在一定风险。由于它的分隔符仅仅是逗号,如果数据本身包含逗号,就可能导致数据解析错误。在量化交易中,准确的数据是至关重要的,一个小的数据解析错误可能会导致交易策略的误判,从而带来潜在的经济损失。
在量化交易中选择dbf还是csv文件格式,需要根据具体的应用场景和需求来决定。如果注重数据的存储结构和读取效率,并且是在相对封闭、固定的系统环境中,dbf格式可能是较好的选择。在一些传统的、基于本地数据库的量化交易系统中,dbf格式可以很好地与系统的其他组件配合,实现高效的数据管理。而如果更看重文件格式的通用性和简单性,以及需要在不同的平台和工具之间快速共享数据,csv格式则更为合适。比如在开源的量化交易项目中,不同的开发者可能使用不同的工具和语言,csv格式能够确保数据的无障碍交流。
实际应用中,也可以考虑将两者结合使用。在数据的初步收集和整理阶段,可以使用csv格式,因为它方便从各种数据源获取数据并进行简单的合并和清理。而在数据存储和长期管理阶段,对于那些对结构和效率要求较高的数据部分,可以转换为dbf格式进行存储。为了克服csv格式的数据完整性问题,可以在数据录入时进行严格的校验,确保数据中的逗号不会导致解析错误。在处理dbf格式的兼容性问题时,可以编写专门的转换工具,以便在需要与其他系统交互数据时,能够将dbf格式转换为更通用的格式,如csv或者其他现代数据格式。
dbf文件格式在量化交易中存储数据有什么优势?
dbf文件格式在量化交易中存储数据的优势在于其有明确的字段定义和固定结构,有助于高效组织数据,在处理大规模历史交易数据时能提高读取效率。
为什么说csv文件格式简单易读?
csv文件格式以纯文本形式存储数据,每行是一条记录,列由逗号分隔字段,这种形式使得它几乎能被任何编程语言和工具读取,所以简单易读。
dbf文件格式兼容性差会带来什么影响?
dbf文件格式兼容性差会导致在跨平台环境下,如新兴的云平台量化交易系统中,可能无法被某些分析模块识别,需要额外转换格式,增加数据处理复杂性和成本。
如何解决csv文件格式的数据完整性问题?
解决csv文件格式的数据完整性问题可以在数据录入时进行严格校验,确保数据中的逗号不会导致解析错误。
在量化交易中,什么时候适合选择dbf格式?
在量化交易中,如果注重数据存储结构和读取效率,且处于相对封闭、固定的系统环境中,如传统本地数据库的量化交易系统,适合选择dbf格式。
如何结合使用dbf和csv文件格式在量化交易中?
在量化交易中,可以在数据初步收集整理阶段用csv格式,在数据存储和长期管理阶段将部分数据转换为dbf格式存储,同时解决两者各自的问题。
","description":"R语言导入csv文件之后如何对文件中的数据求平均值 (求解答 谢谢感恩!!!)? 宏程先生的回答\\n\\ndbf的结构优势\\n\\ndbf文件格式具有较为固定的结构。它通常有着明确的字段定义,这对于量化交易中的数据组织是非常有利的。在量化交易中,我们常常需要处理海量的数据,dbf格式能够清晰地将不同类型的数据,如交易时间、交易价格、成交量等按照既定的结构进行存储。这种结构有助于提高数据的读取效率,特别是在处理大规模的历史交易数据时。因为数据的存储布局相对固定,程序可以按照预定的模式快速定位和提取所需的数据,减少了搜索和处理的时间成本。\\n\\ndbf的兼容性问题\\n\\ndbf文件格式也存在一…","guid":"https://www.zhihu.com/question/507127137/answer/49875907092","author":"宏程先生","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-07T05:57:46.670Z","media":[{"url":"https://picx.zhimg.com/v2-94fd57355f0312265908cb279a9227d4.jpg","type":"photo","width":1024,"height":585,"blurhash":"LKK-ze_2Rjo#~AM|o|s9%LoyWBae"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基于duckdb的内存不足计算:不载入R环境直接保存结果","url":"https://zhuanlan.zhihu.com/p/11263795185","content":"作者:黄天元,复旦大学理学博士,浙江财经大学数据科学学院讲师。热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,著有《机器学习全解(R语言版)》、《文本数据挖掘——基于R语言》、《R语言高效数据处理指南》。知乎专栏:R语言数据挖掘 。邮箱:huang.tian-yuan@qq.com。欢迎合作交流。在R中使用duckdb的时候,如果连接数据库,然后进行计算,生成一个非常大的数据集,往往不需要把它载…","description":"作者:黄天元,复旦大学理学博士,浙江财经大学数据科学学院讲师。热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,著有《机器学习全解(R语言版)》、《文本数据挖掘——基于R语言》、《R语言高效数据处理指南》。知乎专栏:R语言数据挖掘 。邮箱:huang.tian-yuan@qq.com。欢迎合作交流。在R中使用duckdb的时候,如果连接数据库,然后进行计算,生成一个非常大的数据集,往往不需要把它载…","guid":"https://zhuanlan.zhihu.com/p/11263795185","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-07T03:23:16.869Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-GreatPie的回答:致死是不至于的。 但不会用py的R语言工作者,永远走不出实验室,当不了生产… R没有一丝一毫特性,是给tmd工程和...","url":"https://www.zhihu.com/question/620095226/answer/49703572900","content":"Python 在将 R 绞杀至死吗 ?致死是不至于的。
但不会用py的R语言工作者,永远走不出实验室,当不了生产…
R没有一丝一毫特性,是给tmd工程和项目写的…就是个实验室工具…
","description":"Python 在将 R 绞杀至死吗 ? GreatPie的回答\\n\\n\\n致死是不至于的。\\n\\n但不会用py的R语言工作者,永远走不出实验室,当不了生产…\\n\\nR没有一丝一毫特性,是给tmd工程和项目写的…就是个实验室工具…","guid":"https://www.zhihu.com/question/620095226/answer/49703572900","author":"GreatPie","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-07T01:40:14.799Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-人生不问来路去程的回答:费尔巴哈是从宗教上的自我异化,从世界被二重化为宗教世界和世俗世界这一事实出发的,他做的工作是把...","url":"https://www.zhihu.com/question/580956751/answer/49563264811","content":"能否分享一些让你豁然开朗的句子?费尔巴哈是从宗教上的自我异化,从世界被二重化为宗教世界和世俗世界这一事实出发的,他做的工作是把宗教世界归结于它的世俗基础.但是,世俗基础使自己从自身中分离出去,并在云霄中固定为一个独立王国,这只能用这个世俗基础的自我分裂和自我矛盾来说明。因此,对于这个世俗基础本身应当在自身中,从它的矛盾中去理解,并在实践中使之革命化.因此,例如,自从发现神圣家族的秘密在于世俗家庭之后,世俗家庭本身就应当在理论上和实践中被消灭.
费尔巴哈提纲第四条
这一条,马克思批判了社会权力,异化,意识形态等观点,进一步丰富发展了历史唯物主义.
异化,就是人把人的本质,人的力量异化为上帝或其它,比如金钱等,从而使上帝或金钱反过来统治,役使人自己。在异化这个观点上,费尔巴哈的贡献是指出属于宗教的世界,属于上帝和天国的东西,本是属于人的,宗教世界来源于世俗世界,要求把属于宗教世界的东西还给现实世界,这一点有极大进步性,但他的工作也就到此为止了。马克思接着批判费尔巴哈,认为这一工作完成后,最主要的工作还未开始。
那什么是最主要的事呢?马克思说,因为世俗基础使自己和自己本身分离,并使自己转入云宵,成为一个独立王国。现实世界,把自己和自己分离了,这样的事为什么会发生呢?,把自己的能力、自己的本质交给上帝,根源不在人的想象,而在于人所生活在其中的那个世界自身分裂了.因为这个世界,现实世界,它本身是有社会权力,即人与人的关系的。这是一种什么关系?是一部分人支配另一部分人,一部分人奴役另一部分人,一部分人统治另一部分人,现实世界就在这样的社会权力的方式中,这样的非理性的冲突中存在。因此,对世俗基础本身,首先应当从它的矛盾中去理解,然后用排除这种矛盾的方法在实践中使之革命化。费尔巴哈只揭示宗教幻像,人在宗教上的自我异化,但这还不够,甚至没什么用,始终还在意识形态里.而问题的实质是什么?这个世界本应当被改变了,要排除现实世界中这个社会权力的矛盾,马克思认为费尔巴哈带不来改变,他只是换个方式解释世界,而关键在于改变世界.
人在世界上生活,一定处在与他人关系中,人是社会存在物,人与人的交往就形成一种超出每一个个体之外的社会力量,这个力量在哲学中表达为“类存在\\",也就是人类的力量、共同的财富.而现实权力的矛盾,使一部分人为了\\"类力量\\"而不得不贡献了自己,而另一部分人则充分享受着“类力量”\\"类财富\\",那为什么会这样?因为人类历史的分工,劳动的分化,使人把自己的类力量与个体分离了,然后再支配个体,这样的力量是感性的,不是观念的。拜金主义就是这么来的,货币是一般等价物,是物化了的中介,也是被物化了的人与人的关系。为什么没钱不行?因为金钱是人与人关系的一个体现,我们需要钱,是表明我们对他人的需要,我们对钱的需要,就是对人类“类力量”的需要,表明人对自己的社会存在是有真实感受,对他人有不可遏制的需要。就像我们需要音乐、绘画、书籍、建筑等等,只不过和这些体现人与人互相需要的方式不同,货币关系中,人与人之间是对抗的,我们用来实现人与人相互需要的方式,却是以人与人相对抗的方式,就像我们现在不得不为资本这种异化了的力量,贡献我们的一生的异化了的生活。这样的活法如改变?第一,在理论上明白,第二,在实践中改变。不再仅仅为资本增值而奋斗,在自己所及的范围内,最大可能自由全面的发展.
","description":"能否分享一些让你豁然开朗的句子? 人生不问来路去程的回答\\n\\n\\n费尔巴哈是从宗教上的自我异化,从世界被二重化为宗教世界和世俗世界这一事实出发的,他做的工作是把宗教世界归结于它的世俗基础.但是,世俗基础使自己从自身中分离出去,并在云霄中固定为一个独立王国,这只能用这个世俗基础的自我分裂和自我矛盾来说明。因此,对于这个世俗基础本身应当在自身中,从它的矛盾中去理解,并在实践中使之革命化.因此,例如,自从发现神圣家族的秘密在于世俗家庭之后,世俗家庭本身就应当在理论上和实践中被消灭.\\n\\n费尔巴哈提纲第四条\\n\\n\\n\\n\\n这一条,马克思批判了社会权力,异化,意识形态等观点…","guid":"https://www.zhihu.com/question/580956751/answer/49563264811","author":"人生不问来路去程","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-06T16:11:02.874Z","media":[{"url":"https://pic1.zhimg.com/v2-9fd82df4a52a33ab13148de8c8171177.jpg","type":"photo","width":1080,"height":1438,"blurhash":"LKHmJ:IV~W-o[WxFSzR*:jt8OXRP"},{"url":"https://pica.zhimg.com/v2-bd65d92a526586298226d1e05207b145.jpg","type":"photo","width":640,"height":480,"blurhash":"LIPPGo.8%e%2~oS4S1k93Xt6nnoy"},{"url":"https://picx.zhimg.com/50/v2-b343a3d8040ddb4db3ed7e7b54ef6537.jpg","type":"photo","width":290,"height":290,"blurhash":"LTOp9:xt~p-p$~bHkXay?at6D*Rj"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言实现假设检验","url":"https://zhuanlan.zhihu.com/p/11222738121","content":"假设是研究人员根据收集的实验或数据集数据提出的假设。假设是研究人员做出的一个假定,通常并不要求其为真。简而言之,假设是基于收集的总体数据,研究人员做出的决策。R编程中的假设检验是检验研究人员提出的假设或验证假设的过程。为了进行假设检验,会从总体中抽取一个随机样本进行测试。根据测试结果,假设会被接受或拒绝。这个概念被称为统计推断。在本文中,我们将讨论假设检验的四步过程、单样本T检验、双样本T检验、定…","description":"假设是研究人员根据收集的实验或数据集数据提出的假设。假设是研究人员做出的一个假定,通常并不要求其为真。简而言之,假设是基于收集的总体数据,研究人员做出的决策。R编程中的假设检验是检验研究人员提出的假设或验证假设的过程。为了进行假设检验,会从总体中抽取一个随机样本进行测试。根据测试结果,假设会被接受或拒绝。这个概念被称为统计推断。在本文中,我们将讨论假设检验的四步过程、单样本T检验、双样本T检验、定…","guid":"https://zhuanlan.zhihu.com/p/11222738121","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-06T15:20:44.895Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言学习:如何进行Pesaran–Timmermann检验?DACTest","url":"https://zhuanlan.zhihu.com/p/11206005909","content":"文献来源为了评估样本外预测性能,作者还使用Pesaran-Timmermann (PM)统计量(Pesaran and Timmermann, 1992)检验了方向精度的统计显著性。PM检验的零假设是价格变化方向预测的成功率为50%。PM检验是非参数检验,检验统计量定义如下: [公式] [公式] :成功预测价格变化方向的比例 [公式] : [公式] …","description":"文献来源为了评估样本外预测性能,作者还使用Pesaran-Timmermann (PM)统计量(Pesaran and Timmermann, 1992)检验了方向精度的统计显著性。PM检验的零假设是价格变化方向预测的成功率为50%。PM检验是非参数检验,检验统计量定义如下: [公式] [公式] :成功预测价格变化方向的比例 [公式] : [公式]…","guid":"https://zhuanlan.zhihu.com/p/11206005909","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-06T13:06:11.959Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"交叉滞后模型中,分类变量可以做中介变量吗?-南川南的回答:从统计角度无所谓,但是实际上不可以。 因为交叉滞后模型肯定是纵向研究是吧,然后分类变量实际上都...","url":"https://www.zhihu.com/question/5400159522/answer/48800549224","content":"交叉滞后模型中,分类变量可以做中介变量吗?从统计角度无所谓,但是实际上不可以。
因为交叉滞后模型肯定是纵向研究是吧,然后分类变量实际上都不是真正的自变量或者因变量,因为那些分类的都是人为提前分好的,你没有办法在实验室中操纵,自然也不可能在一个纵向研究中允许它变来变去,比如性别啥的。这么一来,把它放进一个纵向研究里有啥意义呢。所以只能做调节。
当然有人可能觉得可以人为区分为高水平或者低水平。但这样的话,你都能人为区分了,你直接用连续变量肯定是更方便的。
","description":"交叉滞后模型中,分类变量可以做中介变量吗? 南川南的回答\\n\\n\\n从统计角度无所谓,但是实际上不可以。\\n\\n因为交叉滞后模型肯定是纵向研究是吧,然后分类变量实际上都不是真正的自变量或者因变量,因为那些分类的都是人为提前分好的,你没有办法在实验室中操纵,自然也不可能在一个纵向研究中允许它变来变去,比如性别啥的。这么一来,把它放进一个纵向研究里有啥意义呢。所以只能做调节。\\n\\n当然有人可能觉得可以人为区分为高水平或者低水平。但这样的话,你都能人为区分了,你直接用连续变量肯定是更方便的。","guid":"https://www.zhihu.com/question/5400159522/answer/48800549224","author":"南川南","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T17:59:35.488Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-正大的回答:[图片] [图片] [图片] 俗话说: “鹤立鸡群会很无助,被鸡孤立很滑稽,所以做好你的鹤,远离鸡!” 与其浪费时间...","url":"https://www.zhihu.com/question/580956751/answer/48741326809","content":"能否分享一些让你豁然开朗的句子?俗话说:
“鹤立鸡群会很无助,被鸡孤立很滑稽,所以做好你的鹤,远离鸡!”
与其浪费时间,跟一些认知低的人较劲,不如把时间用来提升自己。
当你变得越来越厉害的时候,他们会连接触你的机会都没有。
刘震云曾说过:“努力的意义,不是要鹤立鸡群,而是要离开那群鸡。上层社会人捧人,中层社会人挤人,下层社会人踩人。”
你所在的圈层,决定了你的命运轨迹。
即使你是一只鹤,跟一群鸡呆久了,也会变成鸡。
所以,想要跳出原来的圈层,唯有持续地精进自己,和更优秀的人在一起,你才会变得更加优秀。
切记:千万不要在底层中内耗自己。
认知决定一个人能走多远,能力决定一个人能不能抵达。多与优秀的人接触,才会有意想不到的收获,因为他们都会资源共享,彼此成就。
有人曾提问过:“一滴水怎样才不会干呢?”
答案是:把它放到大海里。
一滴水,很快就会变干涸,只有汇集在一起,才会变成汪洋大海。
所以,想要快速成长,不仅要与优秀的人在一起,而且自己一定要有团队意识,多尽自己的能力,帮助更多的人。
只有身边的人变好了,你才会变得越来越好。
愿你我都能不断地精进自己,远离奸恶之徒,去追逐更高的圈层,成为更加厉害的人。
","description":"能否分享一些让你豁然开朗的句子? 正大的回答\\n\\n\\n\\n\\n\\n\\n\\n\\n俗话说:\\n\\n“鹤立鸡群会很无助,被鸡孤立很滑稽,所以做好你的鹤,远离鸡!”\\n\\n与其浪费时间,跟一些认知低的人较劲,不如把时间用来提升自己。\\n\\n当你变得越来越厉害的时候,他们会连接触你的机会都没有。\\n\\n刘震云曾说过:“努力的意义,不是要鹤立鸡群,而是要离开那群鸡。上层社会人捧人,中层社会人挤人,下层社会人踩人。”\\n\\n你所在的圈层,决定了你的命运轨迹。\\n\\n即使你是一只鹤,跟一群鸡呆久了,也会变成鸡。\\n\\n所以,想要跳出原来的圈层,唯有持续地精进自己,和更优秀的人在一起,你才会变得更加优秀。\\n\\n切记:千万不要在底层中内耗自己。\\n\\n认知决定一个人能走多远…","guid":"https://www.zhihu.com/question/580956751/answer/48741326809","author":"正大","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T15:19:36.160Z","media":[{"url":"https://picx.zhimg.com/v2-fa4ffa2dd12a4f405f70ab1b52160a30.jpg","type":"photo","width":0,"height":0,"blurhash":""},{"url":"https://pic1.zhimg.com/v2-4cde04d0a9dc4e88b006f5cfd3fe6c5e.jpg","type":"photo","width":1060,"height":1360,"blurhash":"LTFPm8?a%f%3y-%Jxrt7GNtNWUR%"},{"url":"https://pic1.zhimg.com/v2-7c31dd25985d8c4d5a612a7f401aeed1.jpg","type":"photo","width":1041,"height":1398,"blurhash":"LVI}kZ-=%fxUUO%NR%R%aKIpwiVu"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"11- R语言中的主成分分析","url":"https://zhuanlan.zhihu.com/p/10756249826","content":"1 数据说明1.1 数据集USJudgeRatings包含了对美国高等法院法官的评分,数据集包含43个观测值、12个变量: CONT:律师与法官的接触次数 INTG:司法公正性 DMNR:风度 DILG:勤勉度 CFMG:案件流程管理水平 DECI:决策效率 PREP:审理前的准备工作 FAMI:与法官的熟稔程度 ORAL:口头裁决的合理性 WRIT:书面裁决的合理性 PHES:体能 RTEN:是否值得保留 head(USJudgeRatings,3) [图片] 1.2 数据集Harman23.cor身体测量数据集,包含305个女…","description":"1 数据说明1.1 数据集USJudgeRatings包含了对美国高等法院法官的评分,数据集包含43个观测值、12个变量: CONT:律师与法官的接触次数 INTG:司法公正性 DMNR:风度 DILG:勤勉度 CFMG:案件流程管理水平 DECI:决策效率 PREP:审理前的准备工作 FAMI:与法官的熟稔程度 ORAL:口头裁决的合理性 WRIT:书面裁决的合理性 PHES:体能 RTEN:是否值得保留 head(USJudgeRatings,3) [图片] 1.2 数据集Harman23.cor身体测量数据集,包含305个女…","guid":"https://zhuanlan.zhihu.com/p/10756249826","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T11:58:22.435Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R包LDheatmap最新安装方案","url":"https://zhuanlan.zhihu.com/p/10951706553","content":"如果报错“退出状态不是0”基本上都是由于依赖包snpStats没有安装 ERROR: dependency \'snpStats\' is not available for package \'LDheatmap\' * removing \'D:/software/R-4.4.1/library/LDheatmap\' Warning in install.packages : 安装程序包‘LDheatmap_1.0-6.tar.gz’时退出狀態的值不是0所以要先安装snpStats 但通过BiocManager安装时,总会出现BiocManager的版本与R的版本不匹配 BiocManager::install(\\"snpStats\\") …… 警告…","description":"如果报错“退出状态不是0”基本上都是由于依赖包snpStats没有安装 ERROR: dependency \'snpStats\' is not available for package \'LDheatmap\' * removing \'D:/software/R-4.4.1/library/LDheatmap\' Warning in install.packages : 安装程序包‘LDheatmap_1.0-6.tar.gz’时退出狀態的值不是0所以要先安装snpStats 但通过BiocManager安装时…","guid":"https://zhuanlan.zhihu.com/p/10951706553","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T09:33:28.851Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?-aabb名字待定的回答:如果你愿意花点时间停一下读一下截图的英文: please download and install the ap...","url":"https://www.zhihu.com/question/5929451559/answer/48488579083","content":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了?如果你愿意花点时间停一下读一下截图的英文:
please download and install the appropriate version of Rtools before proceeding: :
https://cran.rstudio.com/bin/windows/Rtools/
这个时代已经如此着急了,请务必不要这么着急
","description":"有没有R语言大佬帮我看一下为什么我的GEOquery包装不了? aabb名字待定的回答\\n\\n\\n如果你愿意花点时间停一下读一下截图的英文:\\n\\nplease download and install the appropriate version of Rtools before proceeding: :\\n\\nhttps://cran.rstudio.com/bin/windows/Rtools/\\n\\n这个时代已经如此着急了,请务必不要这么着急","guid":"https://www.zhihu.com/question/5929451559/answer/48488579083","author":"aabb名字待定","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T08:45:03.509Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?-初心的回答:光R语言那个莫名其妙的赋值符都让R和优雅沾不上边。","url":"https://www.zhihu.com/question/527922200/answer/48305608754","content":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?光R语言那个莫名其妙的赋值符都让R和优雅沾不上边。
","description":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗? 初心的回答\\n\\n\\n光R语言那个莫名其妙的赋值符都让R和优雅沾不上边。","guid":"https://www.zhihu.com/question/527922200/answer/48305608754","author":"初心","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-05T05:00:05.553Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Cox回归预测模型:模型的验证——校准曲线","url":"https://zhuanlan.zhihu.com/p/10799542087","content":"[视频: Cox回归预测模型:模型的验证——校准曲线] 今天介绍的是通过校准曲线(Calibration Curve)对Cox回归模型进行验证。校准曲线是一种重要的工具,用于评估模型预测的风险概率与实际观察结果的一致性。下面就来看R语言绘制校准曲线的具体过程。 1、安装并加载必要的包 1.1安装所需的R包install.packages(\\"survival\\") install.packages(\\"rms\\") install.packages(\\"readr\\") 1.2加载所需的R包library(survival) library(rms) library(readr) 2、数据读取与预处理 2.1读入数据data…","description":"[视频: Cox回归预测模型:模型的验证——校准曲线] 今天介绍的是通过校准曲线(Calibration Curve)对Cox回归模型进行验证。校准曲线是一种重要的工具,用于评估模型预测的风险概率与实际观察结果的一致性。下面就来看R语言绘制校准曲线的具体过程。 1、安装并加载必要的包 1.1安装所需的R包install.packages(\\"survival\\") install.packages(\\"rms\\") install.packages(\\"readr\\") 1.2加载所需的R包library(survival) library(rms) library…","guid":"https://zhuanlan.zhihu.com/p/10799542087","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-04T17:56:02.587Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"10- R语言中回归模型的诊断","url":"https://zhuanlan.zhihu.com/p/10629401508","content":"1 标准方法对lm()函数返回的对象使用plot()函数,生成评估模型拟合情况的4幅图形: fit<-lm(weight~height,data=women) par(mfrow=c(2,2)) plot(fit) par(mfrow=c(1,1)) [图片] 为理解这些图形,我们来回顾一下OLS回归的统计假设: 正态性(Normality)。当自变量值固定时,因变量成正态分布,则残差值也是一个均值为0的正态分布。“正态Q-Q图”(Normal Q-Q,右上)是在正态分布对应的值下,标准化残差的概率图。若满足正态假设,那么图…","description":"1 标准方法对lm()函数返回的对象使用plot()函数,生成评估模型拟合情况的4幅图形: fit<-lm(weight~height,data=women) par(mfrow=c(2,2)) plot(fit) par(mfrow=c(1,1)) [图片] 为理解这些图形,我们来回顾一下OLS回归的统计假设: 正态性(Normality)。当自变量值固定时,因变量成正态分布,则残差值也是一个均值为0的正态分布。“正态Q-Q图”(Normal Q-Q,右上)是在正态分布对应的值下,标准化残差的概率图。若满足正态假设,那么图…","guid":"https://zhuanlan.zhihu.com/p/10629401508","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-04T05:11:05.376Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成NBC最新报道:至少六名共和党参议员不支持当选总统特朗普任命皮特·海格塞斯担任国防部部长定制字体","url":"https://zhuanlan.zhihu.com/p/10656457257","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10656457257","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-04T05:09:48.004Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言:政策效应外推及外部有效性-tpate","url":"https://zhuanlan.zhihu.com/p/10657121929","content":"温馨提示:若页面不能正常显示数学公式和代码,请阅读原文 获得更好的阅读体验。 阅读全文:R语言:政策效应外推及外部有效性-tpate (lianxh.cn) 作者:吴小齐 (西北大学) 邮箱:1165115751@qq.com 编者按:本文主要摘译自下文,特此致谢! Source:Egami N, Hartman E. Elements of external validity: Framework, design, and analysis[J]. American Political Science Review, 2023, 117(3): 1070-1088. -PDF- Title:R语言:政…","description":"温馨提示:若页面不能正常显示数学公式和代码,请阅读原文 获得更好的阅读体验。 阅读全文:R语言:政策效应外推及外部有效性-tpate (lianxh.cn) 作者:吴小齐 (西北大学) 邮箱:1165115751@qq.com 编者按:本文主要摘译自下文,特此致谢! Source:Egami N, Hartman E. Elements of external validity: Framework, design, and analysis[J]. American Political Science Review, 2023, 117(3…","guid":"https://zhuanlan.zhihu.com/p/10657121929","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-04T05:08:29.027Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-刚好mama的回答:[图片] “怜悯”一位妇女,意味着处境比她好,也就意味着降贵纡尊,要与她处于同一位置。正因为如此,“同情...","url":"https://www.zhihu.com/question/580956751/answer/47178984702","content":"能否分享一些让你豁然开朗的句子?“怜悯”一位妇女,意味着处境比她好,也就意味着降贵纡尊,要与她处于同一位置。正因为如此,“同情”这个词一般会引发蔑视,它指的是一种处于次要地位的感情,同爱情没有瓜葛;出于同情爱一个人,并非真正爱他。
如果说现在的她寡廉鲜耻,那的确是因为她已经彻头彻尾成了一个不知羞耻的人,仿佛要通过自己的厚颜无耻,以庄严的一笔勾销过去的生活,高声宣告,她曾过于看重的青春和美貌实在是一钱不值。
事实上,那些从镇上图书馆借来的书,也是她反抗那个围困着她的粗俗世界的惟一武器;这些书为她提供了一个机会,在虚幻中逃避摆脱那种毫无快乐可言的生活。
在我们看来只有偶然的巧合才可以表达一种信息。凡是必然发生的事、凡是期盼得到、每日重复的事,都悄无声息。
从此,见多芬对她来说成为了“另一面”的世界的形象,成了她所渴望的世界的形象。
也许还是这些偶然巧合,唤起了她的爱情,成为了她一生汲取不尽的力量之源。
但是萌生的爱情使她对美的感觉异常敏锐,她再也忘不了那首乐曲。每次听到这首乐曲,她都激动不已,那一刻发生在她身边的一切都闪耀着这首乐曲的光环,美轮美奂。
自学者和学生的区别,不在于知识的广度,而在于生命力和自信心的差异。
当时正是大白天,理性和意志占据着主动权。
建议您选择帮研究生师兄写毕业论文(学习R语言等帮忙处理数据),因为这是一个非常有意义且富有挑战性的经历。可以让他帮忙挂一个名字,以后找工作比较有优势。写毕业论文有经验了更方便写好自己的,长远来看这是比较明智的决定。
","description":"医学生本科大二,加入了课题组,二选一求指导 ? 咔咔咔微笑就多了的回答\\n\\n\\n建议您选择帮研究生师兄写毕业论文(学习R语言等帮忙处理数据),因为这是一个非常有意义且富有挑战性的经历。可以让他帮忙挂一个名字,以后找工作比较有优势。写毕业论文有经验了更方便写好自己的,长远来看这是比较明智的决定。","guid":"https://www.zhihu.com/question/1514370017/answer/46873897306","author":"咔咔咔微笑就多了","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-03T09:59:03.167Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Visualize 09 — 图层","url":"https://zhuanlan.zhihu.com/p/10458396119","content":"本文由以下页面翻译得来: 9 Layers – R for Data Science (2e) 包含自己写的练习题,不保证正确。 引言在 Whole game 01 — 数据可视化 中,你学到的不仅仅是如何绘制散点图、条形图和箱线图。你学到的是能够用ggplot2来创建任何类型图形的基础 。在这一章中,你将扩展这个基础,学习图形的分层语法。我们将深入探讨美学映射(aesthetic mappings)、几何对象(geometric objects)和分面(facets)。然后,你将学习 ggplot2 在…","description":"本文由以下页面翻译得来: 9 Layers – R for Data Science (2e) 包含自己写的练习题,不保证正确。 引言在 Whole game 01 — 数据可视化 中,你学到的不仅仅是如何绘制散点图、条形图和箱线图。你学到的是能够用ggplot2来创建任何类型图形的基础 。在这一章中,你将扩展这个基础,学习图形的分层语法。我们将深入探讨美学映射(aesthetic mappings)、几何对象(geometric objects)和分面(facets)。然后,你将学习 ggplot2 在…","guid":"https://zhuanlan.zhihu.com/p/10458396119","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-03T06:57:38.198Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"生物信息学分析(R)主要用的几个语言包是哪几个呢?-小李的回答:随着高通量测序以及生物信息学的发展,R语言在生物大数据分析以及数据挖掘中发挥着越来越重要...","url":"https://www.zhihu.com/question/418628327/answer/46703951313","content":"生物信息学分析(R)主要用的几个语言包是哪几个呢?随着高通量测序以及生物信息学的发展,R语言在生物大数据分析以及数据挖掘中发挥着越来越重要的作用。想要成为一名优秀的生物数据分析者与科研团队不可或缺的人才,除了掌握对生物大数据挖掘与分析技能之外,还要具备一定的统计分析能力与SCI论文质量绘图能力。因此,为辅助提高生命科学研究工作者的生物数据可视化与深度挖掘技能,我们举办了本次R语言与生物信息学培训班,本次会议我们精选大量生物数据分析案例,包括利用R语言绘制SCI高质量图片、利用R语言分析生物学数据的案例。通过本次培训,使学员能够掌握利用R科学文献图的绘制技巧、完整的利用R分析生物数据,提高学员数据分析技能、领会高水平SCI论文撰写思路。
主讲人:
来自重点高校及科研院所一线科研人员,长期从事生物数据分析与挖掘,基因测序等领域工作研究工作,以第一作者或通讯作者发表过多篇生物学一区、二区SCI高水平论文(如:Plant Cell、Plos genetics; New Phytologist; Journal of Experimental Botany等)。精通R语言、python语言等分析工具,具有丰富的科研及高通量测序数据分析与挖掘经验。
专题一 R语言基础介绍和环境搭建
1.编程语言学习经历分享
2.R语言数据操作技巧
3.R语言与windows系统、Linux服务器及使用方法
4.R 语言与生物信息数据的联系
5.多组学数据的分析方法
6、R语言在生物信息学中的应用
专题二 R语言介绍及基本语法
R语言发展脉络
R与工作目录
(工作目录,切换工作目录)
R的数据类型及结构 (数值型、逻辑型、字符型、向量、列表、数据框、矩阵)
R中各数据类型的赋值与操作
(针对不同数据类型进行赋值、批量读取数据、通过循环对数据进行计算、差异分析)
各种数据格式的读写及操作 (Excel、TXT、CSV、TSV)
经典生信数据R脚本编写与详解
专题三 R基本绘图语法
生物信息多组学大数据分析技巧与提升
R语言基本绘图命令概述
R语言高级绘图命令概述
R语言经典生信数据R脚本解析
专题四 R语言数据绘图基本方法
R语言高级绘图命令概述
基因组大小与基因含量的散点图
绘制基因长度分布直方图
绘制基因长度分布的频率分布密度曲线
向图中添加数学公式
热图绘制及参数详解
专题五 R语言与各种图形绘制
韦恩图、小提琴图、火山图、折线图、网络图、趋势图、箱线图
相关性分析及共表达网络构建
R语言与KEGG 富集分析实例
R语言与GO富集分析实例
专题六 多组学数据整理方法
多组学数据如何发表高分SCI论文,以RNA-Seq数据为例
RNA-Seq前沿动态
RNA-Seq实验设计
非编码RNA (lncRNA、miRNA) 分析手段、研究策略解析
(讲解如何从取样、建库、上机测序到数据如何分析,让学员了解目前转录组学哪些内容可以深度挖掘、哪些建库方式对应哪些分析内容、让学员掌握如何根据自己的实验目的选择合适的建库方式和分析手段)
专题七 多组学数据绘图方式
数据重复性评估
(如何在文中体现出不同重复的RNA-SEQ结果、Realtime PCR结果与RNA-SEQ结果如何对用)
如何进行P值的筛选
基因共表达网络构建与Cytoscape展示
多组数据表达趋势聚类及深度解析策略
(转录组学数据泛滥的时代,如何才能找到数据中的亮点,如何深度挖掘数据中隐藏的创新点,让学员掌握几种深度解析组学数据的方法)
专题八 生物信息大数据其他绘图方式 (进阶版,可选课程)
进化树的编辑与美化
网络图的编辑(蛋白互作、基因调控网络图的编辑)
次生代谢基因簇寻找与绘图
基因结构绘制
启动子元件预测及绘图
RNA二级结构绘制
多样品韦恩图绘制
多种作图方式结合
(综合利用R、PPT等绘图工具拼接完成论文图片)
高分辨率SCI论文图片生成
(综合利用AI、pdfviewer生成高质量论文图片)
专题九 复习与答疑讨论
自带组学分析项目交流及解答
复习与总结(知识点梳理)
实例回顾、训练、巩固
答疑与讨论(大家提前把问题整理好)
在繁华都市的喧嚣中,有这样一群人,他们怀揣着对数据分析的无限热爱,于数字世界中不懈探索、砥砺前行。张文君与赵文琪,便是这众多追梦者中的杰出代表。他们不仅职业背景相似,更在CPDA数据分析师认证的求学路上,寻觅到了属于自己的璀璨星空。
张文君,湖北大学的优秀毕业生,通过校招顺利迈入金融行业的大门。面对行业日益增长的数字化转型需求,她深刻体会到数据分析的重要性。而赵文琪,则是从英国伦敦大学学成归来的海归精英,同样选择了金融行业作为自己职业生涯的起跑线。在部门内,他们携手负责数字化转型落地的各项项目,从客户画像的精准描绘到数据的深度分析,再到系统的全面建设,每一步都充满了挑战,也孕育着无限机遇。
张文君:CPDA不仅在内部招聘中占据显著优势,更是行业内对数据分析专业能力的高度认可。
随着数据分析市场的持续升温,众多培训机构纷纷涉足这一领域,这无疑为数据分析行业的发展注入了新的活力。然而,张文君强调,更重要的是关注数据分析能力及思维的构建,而不仅仅是取得一本证书。CPDA认证发展已历经二十一载春秋,其行业影响力、课程价值、从业价值已经得到了太多企事业单位的高度关注及重视,也成为了越来越多企业培养内部员工的重要指标。职业能力提升及从业地位提升,一直是CPDA所求的发展方向,张文君同学的选择,进一步体现了CPDA数据分析师认证理念的广泛认可度!
赵文琪:我更加看重CPDA系统学习机会,以及理论与实践紧密结合的教学模式。
她认为,CPDA之所以能够脱颖而出,得益于其深厚的学术背景、不断更新的知识体系、丰富的实践经验及教学经验,以及讲师们对前沿动态的敏锐洞察。这些优势使得CPDA的学习知识更加系统、全面,且能够紧密贴合实际需求。
在CPDA的学习过程中,我们俩结识了许多志同道合的朋友,也遇到了许多专业的老师。
胡老师不仅专业功底扎实,更能够巧妙地将企业中的实际案例与知识点相结合,让学员们在轻松愉快的氛围中掌握数据分析的精髓。她善于通过案例讨论,引导学员从根源出发,发现问题、解决问题,这种思维方式让他们受益匪浅。
CPDA讲师在各自的领域内经过长期的学习和实践,积累了大量的经验和专业知识,能够为学生提供全面、深入的学术指导。讲师们会不断关注最新的研究动态和学术成果,学习和掌握新的理论和方法,以确保自己能够为学生提供最前沿的学术指导。CPDA讲师不仅能够在课堂上传授理论知识,还能够结合实践案例,帮助学生更好地理解和应用所学知识。同时,他们也善于根据学生的特点和需求,制定个性化的教学方案,激发学生的学习兴趣和潜能。CPDA讲师均经过行业协会认证,在各自所在的领域内有着非常高的建树,拥有较强实战经验,奉行理论先行、实战为本的教学理念,在教学中全面导入自身实战案例,让学员“知其然”还会分享“所以然”!
在一次课堂互动中,老师通过案例的讨论,引导他们从根源出发,发现问题、解决问题,这种思维方式让我们受益匪浅。
数据分析思维的构建并非易事。通过学习掌握一种技能或方法,解决一个具体问题是相对容易的,但要构建数据分析思维却是极其困难的。优秀的数据分析师不仅要能在企业实战中解决实际经营问题,还要具备跨行业解决问题的能力。无论是企业的具体需求还是跨行业的客户需求,都是复杂多变的,需要考虑诸多因素。因此,构建严谨的数据分析思维至关重要。CPDA不仅重视实战,更重视通过实战总结出重要的思维方式。掌握数据分析思维是帮助分析师腾飞的关键所在,也是课程学习中老师高度重视及不断引导的核心所在。
赵文琪:CPDA课程给我带来的思维方式上的提升是巨大的。
她学会了如何拆解问题、获取数据、清洗数据、搭建模型,并将模型结果转化为业务结果,为业务带来实质性的改变和提升。在金融领域,数据模型发挥着越来越重要的作用,尤其是在风险防控方面。他们利用数据分析的方式发现可疑客户、评估潜在风险,为金融机构的业务拓展和风险把控提供了有力支持。
CPDA为我们搭建了一个高质量的学习交流平台。
回首这段学习旅程,张文君和赵文琪都感慨万分。每一期的线上线下沙龙活动精彩纷呈,涵盖了数据分析、人工智能、大数据等多个前沿领域,为学员们提供了宝贵的学习机会,也促进了跨行业间的深入交流与合作。每年的中国数据分析行业大会更是业界的顶流大会,汇聚了众多行业精英和专家学者,共同探讨大数据前沿动态,分享实战成果,共同为行业注入新活力。
对于那些对数据分析感兴趣却还未曾踏入这个领域的同学来说,CPDA无疑是一个值得尝试的选择。在这里,你将遇到一群志同道合的朋友,共同探索数据的奥秘;你将遇到专业的老师,为你指点迷津、答疑解惑;你将收获一段难忘的学习经历,为自己的职业生涯增添一抹亮丽的色彩。如果你也对数据分析充满热情与好奇,不妨加入他们,一起在数据分析的舞台上绽放属于自己的光芒吧!
","description":"如何在业余时学数据分析? 中盈达科技数据分析师培训的回答\\n\\n\\n在繁华都市的喧嚣中,有这样一群人,他们怀揣着对数据分析的无限热爱,于数字世界中不懈探索、砥砺前行。张文君与赵文琪,便是这众多追梦者中的杰出代表。他们不仅职业背景相似,更在CPDA数据分析师认证的求学路上,寻觅到了属于自己的璀璨星空。\\n\\n张文君,湖北大学的优秀毕业生,通过校招顺利迈入金融行业的大门。面对行业日益增长的数字化转型需求,她深刻体会到数据分析的重要性。而赵文琪,则是从英国伦敦大学学成归来的海归精英,同样选择了金融行业作为自己职业生涯的起跑线。在部门内,他们携手负责数字化转型落地的各项项目…","guid":"https://www.zhihu.com/question/22119753/answer/46485786779","author":"中盈达科技数据分析师培训","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-03T02:41:30.367Z","media":[{"url":"https://picx.zhimg.com/v2-0dcd778ffb16bdab27fd2bcc0828d303.jpg","type":"photo","width":0,"height":0,"blurhash":""}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求R语言大佬帮忙看看这个问题如何处理?-王大力的回答:在R里面用curl包解析下载网页,然后比较一下就能判断是不是同一个网页了","url":"https://www.zhihu.com/question/5778249397/answer/46463382543","content":"求R语言大佬帮忙看看这个问题如何处理?在R里面用curl包解析下载网页,然后比较一下就能判断是不是同一个网页了
","description":"求R语言大佬帮忙看看这个问题如何处理? 王大力的回答\\n\\n\\n在R里面用curl包解析下载网页,然后比较一下就能判断是不是同一个网页了","guid":"https://www.zhihu.com/question/5778249397/answer/46463382543","author":"王大力","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-03T02:20:01.503Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求R语言大佬帮忙看看这个问题如何处理?-知乎用户的回答:为啥我没发现这个,是新发的吗","url":"https://www.zhihu.com/question/5778249397/answer/46452101281","content":"求R语言大佬帮忙看看这个问题如何处理?为啥我没发现这个,是新发的吗
","description":"求R语言大佬帮忙看看这个问题如何处理? 知乎用户的回答\\n\\n\\n为啥我没发现这个,是新发的吗","guid":"https://www.zhihu.com/question/5778249397/answer/46452101281","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-03T02:08:55.842Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"针对绘图方面的需求,matlab、python和R哪个更加强大?-默默默默默的回答:在常用图表上,我更喜欢MATLAB,代码更简洁,图形风格也更好看(相比Python的Matplotl...","url":"https://www.zhihu.com/question/28707877/answer/46204359488","content":"针对绘图方面的需求,matlab、python和R哪个更加强大?在常用图表上,我更喜欢MATLAB,代码更简洁,图形风格也更好看(相比Python的Matplotlib)。
x = [0 : 0.01: 10];\\ny = sin(x);\\ng = cos(x);\\nplot(x, y, x, g, \'.-\'), legend(\'Sin(x)\', \'Cos(x)\')
MATLAB图表往往会有一股很强的“MATLAB味”,往好了说是图形风格统一,专业,往差了说是太朴素不够酷炫。但我个人觉得简单耐看的统计图表挺适合论文这些场景的。
毕竟有时候我翻很多年前的经典论文,里面的钢笔手绘图表也挺耐看的,别有一番风味。
Python及其相关绘图库的优点在开放和第三方库,功能更新速度,各种特殊图形的支持远高于MATLAB,除了MatPlotLib,Python还有plotly,bokeh,seaborn等等。
但是MATLAB有一个更加重要的优点,交互性强,直接编辑代码就可以实时查看图形效果,Python需要反复生成。
很多人说MATLAB成图的默认样式很丑,但是调整过后还是很好看的。
这里推荐一本精讲MATLAB绘图的书,《MATLAB科技绘图与数据分析》,作者是一名中科院高级工程师,在科研绘图方面颇有经验,本书由清华大学出版社出版,算是一本趁手的工具书了。
本书从MATLAB的基本基本操作,基本数据类型讲起,到基本图窗生成和布局,再到基本图表,三维图形,再到进阶的根据图表做数据分析,包括插值,拟合,回归等等,可以说事无巨细,非常适合没有经验的新手上手MATLAB绘图。
除了书里的代码示例外,本书还有在线资源可以查看。
其实大多数绘图工具都可以画出很不错的图表,相比掌握工具,在学习过程中提高审美,看看优秀的论文中是怎样配色和使用样式会更重要。
图表好不一定文章好,但好的文章里不会出现丑陋的图表。
","description":"针对绘图方面的需求,matlab、python和R哪个更加强大? 默默默默默的回答\\n\\n\\n在常用图表上,我更喜欢MATLAB,代码更简洁,图形风格也更好看(相比Python的Matplotlib)。\\n\\nx = [0 : 0.01: 10];\\ny = sin(x);\\ng = cos(x);\\nplot(x, y, x, g, \'.-\'), legend(\'Sin(x)\', \'Cos(x)\')\\n\\nMATLAB图表往往会有一股很强的“MATLAB味”,往好了说是图形风格统一,专业,往差了说是太朴素不够酷炫。但我个人觉得简单耐看的统计图表挺适合论文这些场景的。\\n\\nMATLAB图表示例\\n\\n毕…","guid":"https://www.zhihu.com/question/28707877/answer/46204359488","author":"默默默默默","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T14:57:46.740Z","media":[{"url":"https://pic1.zhimg.com/v2-38050001a54bdd2df30e501b3eba5e05.jpg","type":"photo","width":1141,"height":857,"blurhash":"LAS?7E_NS4~q_3kWR5s.R*ofjYn$"},{"url":"https://picx.zhimg.com/v2-dafa1b0e2ac74fa80bee9429e1021d6a.jpg","type":"photo","width":1353,"height":1747,"blurhash":"LCS6Pm.8yC^+~pRPr@bJg#i_whtR"},{"url":"https://pic1.zhimg.com/v2-b0b2066879b53f27f0e10d4d8b100cf1.jpg","type":"photo","width":612,"height":612,"blurhash":"L8Q]+w_3t7~q_3t7xuxu%Moft7Rj"},{"url":"https://picx.zhimg.com/v2-bd81cb0a3f06f7893f784a9331c01ea0.jpg","type":"photo","width":1157,"height":865,"blurhash":"LMQmYL^+=}-;~XR%WBR%-XWnNFt7"},{"url":"https://picx.zhimg.com/v2-483484827f0c30a0b27f0994dc938bbd.jpg","type":"photo","width":1269,"height":885,"blurhash":"LCSY{p?bt8?b~qt8a#t6tSt7M{jY"},{"url":"https://pic1.zhimg.com/v2-c3e64503badc639293eb1797452d6852.jpg","type":"photo","width":1280,"height":1707,"blurhash":"LPLzN#NG01%1E1RPsokW8_%MkWM{"},{"url":"https://pic1.zhimg.com/v2-48a972890d93aba1876ce1a328c6c50f.jpg","type":"photo","width":1702,"height":1276,"blurhash":"LLLX0#tRoe%M~pbHoLt7xbs:ayoM"},{"url":"https://picx.zhimg.com/v2-28027a90afad38209b7aea12bd6501f6.jpg","type":"photo","width":1702,"height":1276,"blurhash":"LWL;1]o}IU%M$%xuRkoe01WBa}WB"},{"url":"https://picx.zhimg.com/v2-fc424873baa7945d3f7d7224a3eb0e3c.jpg","type":"photo","width":1702,"height":1276,"blurhash":"LQLp{sx^D%-;%Lt7NGs:00j=kCae"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"8- R语言中的回归","url":"https://zhuanlan.zhihu.com/p/10320170123","content":"R中回归分析的各种变体回归类型用途简单线性用一个连续型自变量预测一个连续型因变量多项式用一个连续型自变量预测一个连续型因变量,模型的关系是n阶多项式多元线性用两个或多个自变量预测一个连续型因变量多层用拥有层级结构的数据预测一个因变量(例如学校中教室里的学生)。也被称为分层模型、嵌套模型和混合模型多变量用一个或多个自变量预测多个因变量Logistic用一个或多个自变量预测一个分类因变量泊松用一个或多个自变量…","description":"R中回归分析的各种变体回归类型用途简单线性用一个连续型自变量预测一个连续型因变量多项式用一个连续型自变量预测一个连续型因变量,模型的关系是n阶多项式多元线性用两个或多个自变量预测一个连续型因变量多层用拥有层级结构的数据预测一个因变量(例如学校中教室里的学生)。也被称为分层模型、嵌套模型和混合模型多变量用一个或多个自变量预测多个因变量Logistic用一个或多个自变量预测一个分类因变量泊松用一个或多个自变量…","guid":"https://zhuanlan.zhihu.com/p/10320170123","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T12:57:31.620Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成CNN:拜登签署“完全和无条件”释放他的儿子亨特·拜登报道定制字体","url":"https://zhuanlan.zhihu.com/p/10303097979","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10303097979","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T10:55:04.004Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成美国前总统比尔·克林顿:《我离开白宫后的生活》一书封面定制字体","url":"https://zhuanlan.zhihu.com/p/10298401842","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10298401842","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T10:22:05.843Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成随着加州取得历史性进程,如果消除联邦赤字,州长纽森承诺重启州的ZEV折扣项目定制字体","url":"https://zhuanlan.zhihu.com/p/10294926412","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10294926412","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T10:08:52.112Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"基因芯片中探针与基因的关系","url":"https://zhuanlan.zhihu.com/p/10269742707","content":"BioX-Lab/BIClass.biox #Microarray #R","description":"BioX-Lab/BIClass.biox #Microarray #R","guid":"https://zhuanlan.zhihu.com/p/10269742707","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T08:31:08.599Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成《纽约时报》:拜登赦免他的儿子亨特·拜登定制字体","url":"https://zhuanlan.zhihu.com/p/10218651618","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10218651618","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T05:42:27.517Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"为什么你在使用R语言?-R语言与可视化的回答:[图片] 大家好!今天我们来聊一聊 R语言 中文件路径的管理,特别是 绝对路径 和 相对路径 的使用方式。通过学习这...","url":"https://www.zhihu.com/question/350488840/answer/45641177436","content":"为什么你在使用R语言?大家好!今天我们来聊一聊 R语言 中文件路径的管理,特别是 绝对路径 和 相对路径 的使用方式。通过学习这些内容,你不仅可以高效管理文件,还能在团队协作中实现一致的路径管理。本文还将介绍 R Project 的优势,帮助你轻松管理工作目录!
在 R 中,工作目录(Working Directory)是指 R 会话中默认的文件操作位置。无论是读取文件还是保存数据,默认路径都以工作目录为基础。你可以通过以下函数查看或设置工作目录:
使用 getwd()
函数即可查看当前工作目录。
getwd()\\n
例如,可能的输出是:
[1] \\"C:/Users/Username/Documents\\"\\n
你可以通过 setwd()
函数更改工作目录。例如,设置工作目录为桌面文件夹:
setwd(\\"C:/Users/Username/Desktop\\")\\n
这样,R 会将桌面作为默认路径,后续的文件操作都基于该目录。
绝对路径 是指文件从根目录开始的完整路径。假设你要读取桌面上的文件 data.csv
,可以直接指定文件的绝对路径:
data <- read.csv(\\"C:/Users/Username/Desktop/data.csv\\")\\n
绝对路径虽然明确且直观,但在以下情况下会显得笨重:
相对路径 是相对于当前工作目录的路径。比如,将工作目录设置为桌面后,可以简化为:
setwd(\\"C:/Users/Username/Desktop\\") \\ndata <- read.csv(\\"data.csv\\")\\n
相比绝对路径,使用相对路径有以下优点:
在相对路径中,R 支持以下特殊符号,帮助定位文件:
./
)./
表示当前工作目录。例如:
data <- read.csv(\\"./data.csv\\")\\n
这里的路径等同于直接写 \\"data.csv\\"
,但明确表示文件位于当前目录。
../
)../
表示当前工作目录的父级目录。如果文件位于父目录中,可以这样读取:
data <- read.csv(\\"../data.csv\\")\\n
假设当前目录是 C:/Users/Username/Desktop/Project
,上述代码将尝试读取 C:/Users/Username/Desktop/data.csv
。
在 RStudio 中创建 R Project 是最佳实践之一。它能帮你更好地管理文件路径,具体优点包括:
自动
将项目所在文件夹设为工作目录,避免频繁使用 setwd()
。完成后,你会发现生成了一个 .Rproj
文件。每次打开该文件,即可自动进入项目环境,工作目录也设置为项目根目录。
路径管理是数据分析中不可或缺的一环。希望这篇文章能帮助你更轻松地处理文件路径,提高工作效率!如果你有其他疑问,欢迎在评论区交流~
","description":"为什么你在使用R语言? R语言与可视化的回答\\n\\n\\n大家好!今天我们来聊一聊 R语言 中文件路径的管理,特别是 绝对路径 和 相对路径 的使用方式。通过学习这些内容,你不仅可以高效管理文件,还能在团队协作中实现一致的路径管理。本文还将介绍 R Project 的优势,帮助你轻松管理工作目录!\\n\\n1. 什么是工作目录?\\n\\n在 R 中,工作目录(Working Directory)是指 R 会话中默认的文件操作位置。无论是读取文件还是保存数据,默认路径都以工作目录为基础。你可以通过以下函数查看或设置工作目录:\\n\\n查看当前工作目录\\n\\n使用 getwd() 函数即可查看当前工作目录。\\n\\nge…","guid":"https://www.zhihu.com/question/350488840/answer/45641177436","author":"R语言与可视化","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T02:35:11.699Z","media":[{"url":"https://pic1.zhimg.com/v2-098d28b5bf6a70f4c7ee7972eef2c23d.jpg","type":"photo","width":900,"height":383,"blurhash":"LIOf$1%iAv%|%3bIWYkC~Crp,-if"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"该如何学习 R 语言?-TigerZ 生信宝库的回答:在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章...","url":"https://www.zhihu.com/question/21654166/answer/45546378581","content":"该如何学习 R 语言?在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。
为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:
R 语言科研绘图模板 --- sciRplot本期绘图预览:
我们首先导入本期绘图用到的 R 包:
library(ggplot2)
接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:
data <- sciRplot_data
颜色的选择往往是一件让人特别纠结的事情,这里我们直接使用 sciRcolor 来设置配色:
colors <- sciRcolor::pal_scircolor(37)[1]
sciRcolor 是为了 R 语言科研绘图开发的配色工具,包含了 100 种常用配色,详细信息见:
R 语言科研配色工具 --- sciRcolor接下来我们通过下面的代码来绘制图形:
p <- \\n ggplot(data, aes(x=date, y=unemploy, group=1)) +\\n geom_line(color=colors, size=2) +\\n geom_point(shape=21, color=\\"black\\", fill=colors, size=6) +\\n labs(x=\\"Date\\", y=\\"Unemploy\\") +\\n scale_y_continuous(breaks=seq(2600,3200,100), limits = c(2600,3200),\\n expand = expansion(mult = c(0, 0.05))) +\\n theme_classic(base_size = 25) +\\n theme(panel.grid.major.y = element_line())\\np
最后我们保存绘制的图形:
ggsave(\\"save/line-base.png\\", p, width = 8, height = 6, dpi = 300)
为了解决 R 语言中科研绘图的问题,我推出了 sciRplot 项目。sciRcolor 项目包含了以下内容:
① 100 种绘图代码,按照图形类型进行分类,包含 60 种基础绘图和 40 种进阶绘图
② 配备一站式 html文档,包含测试数据,代码一键复制,交互式阅读提高用户体验
注:本账号内所有原创内容,未经允许禁止转载和用于商业用途,违者必究。
","description":"该如何学习 R 语言? TigerZ 生信宝库的回答\\n\\n\\n在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。\\n\\n为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式:\\n\\nR 语言科研绘图模板 --- sciRplot\\n\\n本期绘图预览:\\n\\n\\n\\n\\n1. 导入包\\n\\n我们首先导入本期绘图用到的 R 包:\\n\\nlibrary(ggplot2)\\n\\n\\n\\n\\n2. 准备数据\\n\\n接下来我们导入绘图用到的数据,在 sciRplot 中给大家提供了测试数据:\\n\\ndata <- sciRplot_data\\n\\n\\n\\n\\n3. 准备配色\\n\\n颜色的选择往往是一件让人特别纠结的事情…","guid":"https://www.zhihu.com/question/21654166/answer/45546378581","author":"TigerZ 生信宝库","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-02T00:54:02.350Z","media":[{"url":"https://picx.zhimg.com/v2-f0e4afe662d6b79d83e285401cd7a4fc.jpg","type":"photo","width":1220,"height":920,"blurhash":"LASF@T.7IU_2_NNFaxaykC%M%MRk"},{"url":"https://picx.zhimg.com/v2-1c03f1eafc018591205a61923d0471a8.jpg","type":"photo","width":1527,"height":2160,"blurhash":"L9PjV__4%3T1.8Ro%ME1?8x[ofax"},{"url":"https://pic1.zhimg.com/v2-6f4a9861bb5064c16bca825ffa364e17.jpg","type":"photo","width":1280,"height":935,"blurhash":"LCR{#?_NtR-:?IxaWBRkIpR%%2x]"}],"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成约翰·博尔顿呼吁参议院拒绝懂王对FBI负责人Kashi Patel的提名","url":"https://zhuanlan.zhihu.com/p/10135946279","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and \\"postscript\\" …","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) # Import all the .ttf files from your system # You will only need to run…","guid":"https://zhuanlan.zhihu.com/p/10135946279","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T22:03:58.531Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"时间序列建模问题,如何准确的建立时间序列模型?-明明是Neumyor的回答:时间序列预测近年来越来越成为研究者们研究的重点。根据DBLP上的统计信息显示,time ser...","url":"https://www.zhihu.com/question/31833683/answer/45315056829","content":"时间序列建模问题,如何准确的建立时间序列模型?时间序列预测近年来越来越成为研究者们研究的重点。根据DBLP上的统计信息显示,time series forecasting关键词下的论文总量在2016年刚刚突破100篇,而到2020年已经突破300篇,在2024年更是直接已经高达735篇。
在本文中,笔者整理了时间序列预测的发展历史,特别强调了计算机科学领域内,尤其是深度学习在时间序列预测研究中的贡献。同时,笔者还从历史发展的角度探讨了时空序列预测的研究方向与时间序列预测发展之间的关联。
为了帮助感兴趣的读者更好地理解各个研究阶段,每一章节都附有相关的论文推荐。这些论文列表并不全面,但足以帮助新入门的研究者快速了解该领域的核心内容。通过这种方式,本文旨在为读者提供一个清晰、连贯的研究脉络,使其能够迅速把握时间序列预测领域的关键发展和当前趋势。
笔者注:非常希望大家能提供修改意见!请不吝在评论区表达你的看法!
从碗里的饭到太阳黑子:时间序列预测的历史渊源
时序预测并不是一个新兴问题,恰恰相反,它是一项历史悠久的研究课题,贯穿了人类对自然科学的探索历程,并承载了我们对世界的认知与理解。从古至今,时间序列预测一直在帮助我们揭示自然现象的规律,推动着科学的发展。
”民以食为天“,怎么吃饱饭是我们从古至今都在思考的事情,而饥荒正是困扰我国古代文明的一大关键问题。据《史记-货殖列传》中记载,公元前500 年左右,范蠡认为我国农作物生成存在 “六岁穰,六岁旱,十二岁一大饥”的自然规律,并提出了我国最早稳定粮价的方法:“平粜法”,提前预测富饶年份并屯粮,再在灾年以平价出售。
而在两千年后,欧洲人在公元1500年前后也发现了农作物生产总量与价格序列具有12年左右的周期。后来,在1843年,来自德国的施瓦贝首先发现太阳黑子的数量变化存在11年左右的周期,而英国经济学家J. Herschel进一步揭示了太阳黑子数量对降雨量的影响,并指出正是这种影响最终导致农作物产量出现上述的周期现象。
从统计学视角看世界:基于统计的时间序列分析
进入二十世纪后,统计学家率先尝试通过数据的视角来理解现实世界,这种思想推动了早期时序分析方法的发展。在这一过程中,出现了两种重要的影响深远的时序分析思想:
1. 因素分解方法:这类方法关注时间序列由哪些因素组成,重点在于对时间序列的解释与分析。其思想进一步催生了谱分析方法,这是一种在频域内处理时间序列的技术,随着电子信息技术的进步,谱分析方法在信号处理领域得到了广泛应用。
2. 时域分析方法:这类方法主要关注未来值与历史数据之间的统计依赖性,着重探索时间序列的内在关联性。瑞典统计学家Wold 在 1938 年提出的 Wold 分解定理是该方法的重要基石,该定理证明了任何平稳序列都可以分解为一个确定性序列和一个随机序列的和,为现代时间序列分析提供了理论基础。紧随其后,1970 年提出的 ARIMA 模型成为时域分析的集大成者,为同方差单变量线性模型提供了一种经典的分析方法,并标志着现代时间序列分析理论的兴起。进入 1970 年代,进一步发展的 VAR(向量自回归模型)和 SAR(空间自回归模型)为多变量时序预测和时空序列预测奠定了基石,推动了该领域的发展。
时间序列数据作为最早用于数据分析的类型之一,推动了科学研究和社会发展。值得一提的是,以下几位杰出学者对时序分析做出了重要贡献:
• Robert F. Engle(美国统计学家):提出了ARCH模型,并因此获得了2003年诺贝尔经济学奖。
• Clive Granger(英国统计学家):提出了Granger因果检验,同样因这些贡献获得2003年诺贝尔经济学奖。
• Christopher A. Sims(美国经济学家):提出向量自回归模型VAR,获得2011年诺贝尔经济学奖。
可见在这一时期,统计学家、计量经济学家是时间序列预测的研究主力。在大量的决策制定过程中,精确的时间序列预测始终是关键,这些研究为人类提供了更加精确和可靠的决策工具,对于人类历史的发展具有重要意义。
Time series analysis: forecasting and control.
(Encyclopedia of GIS) Spatial Autoregressive Models.
时间序列预测的演进:从传统到深度学习
随着计算机科学的发展,传统的统计学方法与计算机技术结合,催生了新的时间序列预测范式。特别是在机器学习领域,许多新型的时间序列预测技术应运而生。
1986年BP算法兴起,1990年RNN被提出,接着诞生了LSTM等经典时序模型结构。在这一段时期,时间序列预测的应用扩展到了金融、交通和物联网(IoT)系统,推动了决策树、贝叶斯网络、Fuzzy System以及信念网络等多种机器学习范式的尝试。这些机器学习方法同样对于时间序列预测做出了不可磨灭的贡献。
本章节主要关注于这段时期后续深度学习范式的兴起与壮大。以下主要从三个视角展开,分别对应时间序列数据的复杂时序动态、多变量、非平稳三个主要特点。
如何建模时序动态
以往的数值分析方法在时序预测中主要关注从统计信息上推断未来的变化。这些方法,例如ARIMA或指数平滑等,依赖于严格的数学模型和假设,主要通过分析历史数据中的趋势和季节性来预测未来的值。
然而,随着深度学习技术的兴起,时序预测的范式也在悄然发生变化,从传统的数值分析视角转向更加关注数据的高维度语义关联。
这种转变不仅见于时序预测领域,我们还可以在图像处理和自然语言处理等多个领域观察到相似的趋势。在图像处理领域,早期的方法主要基于像素级的数值分析,如边缘检测算法。随着卷积神经网络(CNN)的出现,研究者开始能够捕捉到图像中的层次化特征,进而进行更深入的语义分析。类似地,在自然语言处理领域,从基于规则和统计的语言模型逐步过渡到了利用深度学习模型,如BERT和GPT系列,这些模型能够捕捉文本数据中深层次的语义关联和上下文依赖关系。
在时间序列预测中,深度学习模型的核心作用是理解和建模数据中的依赖性,这通常分为长期依赖和短期依赖。
短期依赖 指的是时间序列中近期输入对未来输出的直接影响。例如,在股票价格预测中,前几天的价格变化可能直接影响明天的价格。这种类型的依赖性可以通过简单的神经网络结构,如卷积神经网络(CNN)有效捕捉。CNN通过在输入数据上应用滑动窗口技术,聚焦于短期数据序列,从而能够捕获局部时间窗内的特征和模式。
长期依赖 涉及对更长时间范围内数据的分析,以预测未来较远的状态。在相同的股票价格例子中,可能需要分析过去几个月甚至几年的趋势来预测未来的市场行为。长期依赖的建模更为复杂,因为模型需要记住并整合长时间跨度的信息。循环神经网络(RNN)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU)特别适合处理这种类型的依赖。它们通过在每个时间步骤上循环传递隐藏状态,能够保留长时间序列的信息,并利用这些信息来影响未来的输出。为了解决长期依赖问题,循环神经网络(RNN)及其变种如长短期记忆网络(LSTM)和门控循环单元(GRU)被广泛应用,这些模型通过循环的结构能够在时间序列数据中维持状态,从而捕捉到时间序列的长期依赖。尽管如此,当处理非常长的序列时,传统RNN及其变体仍然面临诸如梯度消失或爆炸等问题。
近年来,Transformer模型因其在建模长程依赖关系上的优越性能而成为研究热点,特别是其自注意力机制能够在整个序列范围内有效捕捉依赖性,显著提高了模型的表现和灵活性。此外,新的架构如Mamba和MLP-Mixer通过优化和调整网络结构,进一步提升了模型处理长时间序列的能力和效率。
总之,从基于数值的传统分析到深度学习的综合语义分析,时序预测的方法经历了显著的演变。这些进步不仅提高了预测的准确性,也拓宽了模型在各种复杂和动态环境中的适用性。
综上所述,从基于数值的传统分析到深度学习驱动的语义分析,时序预测的方法经历了显著的演变。这些进展不仅提高了预测的准确性,也拓宽了模型在各种复杂和动态环境中的应用范围。
然而,值得注意的是,模型架构的演进并非是相互替代的过程。CNN、RNN、Transformer乃至其他新兴架构如Mamba和MLP-Mixer等,都在广泛共存,并且每种架构都有其独特的优化策略和优势。近年来越来越多的研究尝试通过创新的数据表示方式,使得不同结构的神经网络能够更好地理解和建模时间序列数据。
清华的Mingsheng Long团队提出的TimesNet:提出了一种创新的时间序列表示方法。它从时间序列的周期性出发,将一维时间序列折叠成多个周期,并将其转化为二维数据。这种方法使得卷积神经网络能够更有效地捕捉周期性特征,并在多层结构上进行卷积操作,从而提取出更丰富的模式。PatchTST则基于Transformer模型,通过将多个时间步聚合成一个单独的token,以提供更丰富的语义信息。数据的这种聚合不仅增强了模型对时间序列的理解能力,还有效减少了计算过程中所需的token数量,从而提高了模型的计算效率。FEDformer则是一种基于频域分析的模型,采用Transformer架构来模拟频域中的依赖关系,取代传统的时域分析。通过频域建模,FEDformer为时序预测提供了全新的视角,并为解决传统时域分析中的局限性提供了新的思路。
这些工作的数量相当多,在此笔者也不再一一列举。这一主题下能够发表在顶会顶刊的论文各有其独特之处,但其共同目标是通过结构创新,使深度学习模型能够更有效地理解和预测时间序列数据。在处理复杂动态时序数据的过程中,这些方法通过改进数据表示和网络架构,显著提升了模型的预测准确性和计算效率。
(NIPS19) Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting
(ICLR23) TimesNet: Temporal 2D-Variation Modeling for General Time Series Analysis
(ICLR23) A Time Series is Worth 64 Words: Long-term Forecasting with Transformers
(KDD23) TSMixer: Lightweight MLP-Mixer Model for Multivariate Time Series Forecasting
如何建模多变量关联
前文中我们主要关注时间序列在时间维度的特征建模,而忽略了在大部分情况下,时间序列问题中涉及多个变量。这些变量之间可能存在复杂的交互关系,它们之间的关联关系可能比时间维度的动态更为复杂。通过挖掘和建模这些变量之间的相互作用,可以揭示时间序列背后的关键信息。近年来,尤其是在交通和金融领域,多变量关联性建模已经成为时间序列预测中的一个重要研究方向。
从多元统计分析中的向量自回归模型VAR发展而来,早期的网络总是采用线性组合的方式来混合多维特征,例如LSTNet和TPA-LSTM,都采用了通道混合的策略进行预测。这种思想也可以在Transformer早期工作中看到,例如Informer、Autoformer和FEDFormer。
后来研究者发现在空间维度上分布的变量之间具有可以利用的依赖性,1970年代就有空间自回归模型(SAR)的提出,被用于地区的经济分析,通过考虑邻近的地区来优化效果。而彼时正值CNN在图像处理领域大行其道,而研究者就发现可以将地图切分为多个栅格,而每个栅格代表对应地区的人口密度或交通流量,然后就在这张栅格上通过二维卷积来进行不同地区之间的关联性建模。这种方法的经典工作是2015年由Xingjian Shi提出的ConvLSTM,至今依然在天气预测等领域发挥着相当的作用。这类方法相当于引入了基于欧氏距离的关联先验,这也直接构成了时空序列预测的雏形。
而自从2016年GCN卷积出现后,研究者进一步发现GCN非常适合用于构建非欧几里得距离的关联,因此利用图卷积来实现多变量之间的关联性建模迅速成为了时空序列预测的标准范式并诞生了一大批STGNN工作。自此STGNN成为了时空预测领域的基本范式,尤其是在城市交通这种存在大量非欧几里得距离关联的领域。这部分的后续发展可以参考Yu Zheng撰写的综述文章(TKDE24)Spatio-Temporal Graph Neural Networks for Predictive Learning in Urban Computing: A Survey。
再之后,在2019年左右AGCRN、MTGNN以及GraphWavenet等工作都不约而同进一步采用了自适应图学习的模式,进一步将变量间的关联同空间相解耦,STGNN的范式也逐步被推广到了更广义上的多元时间序列预测中,如MTGNN和GraphWavenet等都在更广泛的非时空场景下进行了测试,例如汇率预测。
与此同时,研究者也逐渐认识到Transformer在构建多变量关联建模中的优势。Transformer的Self-Attention机制能够直接建模输入数据中任意部分之间的关联关系,理论上比GCN仅考虑相邻节点的关联更为强大。因此,越来越多的研究开始将Transformer引入多变量时间序列建模,出现了Crossformer和ITransformer等创新工作。
这些发展推动了多变量时间序列预测研究的爆发式增长。根据DBLP上multivariate time series forecasting关键词下的统计信息显示,从2019年的14篇论文(其中0篇为CCF-A级别)到2024年的139篇论文(其中23篇为CCF-A级别),这一领域的研究数量显著增长,表明多变量时间序列建模已成为当今时间序列预测的研究热点。
(NIPS15) Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
(KDD20) Connecting the Dots: Multivariate Time Series Forecasting with Graph Neural Networks
(ICLR23) Crossformer: Transformer Utilizing Cross-Dimension Dependency for Multivariate Time Series Forecasting
如何处理时间序列中的分布偏移
机器学习的基本假设是训练数据和测试数据来自相同的数据分布。然而,在时间序列问题中,数据分布通常会随着时间的推移发生变化,这种现象被称为分布漂移(Distribution Drift)。与其他领域中的分布漂移类似,时间序列的这种变化表现为非平稳性(Non-Stationarity),即数据的统计特性(如均值、方差、自协方差等)随时间发生波动。例如,金融市场中的股价波动和气候变化中的温度变化都具有显著的非平稳性。
非平稳性问题是时间序列分析中的一大挑战,它与其他领域中的分布漂移现象相似,因此解决方法也具有一定的共通性。常见的应对策略包括:
• 归一化方法:如LayerNorm、BatchNorm和InstanceNorm等,通过对数据进行标准化处理,减少由于分布变化带来的影响,从而提高模型的鲁棒性。
• 持续学习:通过在线学习和增量学习等方式,使模型能够适应数据的动态变化,及时更新其参数,保持对新数据的良好适应性。
• 迁移学习与域适应:例如Test-Time Adaptation,通过在测试阶段对模型进行自适应调整,使其能够在不同的数据分布下依然保持高效的预测性能。
(NIPS23)OneNet: Enhancing Time Series Forecasting Models under Concept Drift by Online Ensembling
(IJCAI24)Deep Frequency Derivative Learning for Non-stationary Time Series Forecasting
迈向通用时序分析:时序预训练与大模型
预训练时序基础模型
在时间序列预测领域,研究人员已经普遍认识到,训练数据和测试数据之间的分布偏移对于时间序列预测有着显著的影响。这种分布偏移几乎无处不在,无论是时间的流逝、变量间的差异,还是不同数据集之间的变化,都可能导致预测困难。迁移学习等传统技术虽有一定效果,但仍面临局限性。与此同时,基础模型(foundation models)的出现提供了一种强大且持久的解决方案:通过在大规模数据上进行大规模参数训练,模型可以展现出卓越的泛化能力。
基础模型是指在大规模数据集上预训练的模型,这些模型能够捕获数据的广泛特征并在多种任务中表现出良好的适应性。这类模型,如在自然语言处理中的BERT或图像识别中的ViT,都已经证明了预训练模型的有效性。在时间序列分析中,基础模型可以利用自监督学习从时间序列的内在结构中学习,并利用这些学到的特征在不同的时间序列数据间上都能实现有效的预测。
对于时间序列预测的基础模型来说,其预训练通常也遵循着自监督学习的基本范式,以生成式目标作为预训练的训练目标,以期增强模型对不同分布数据的理解能力。
例如TimeGPT直接采用预测任务作为训练目标,在超过1000亿个点的数据集上进行训练并用于零样本的预测推理。后来PatchTST则采用掩码建模的训练目标,展现出在不同数据集间共享知识的能力。Saleforce提出的Moirai则是进一步在掩码建模的训练目标基础上增加了更多应对多变量和多频率的信息补充,以及扩大训练数据集,来获得了更加强的预测能力。清华Mingsheng Long团队提出的Timer同样直接采用预测任务作为预训练目标,并验证了这一范式在时间序列的预测、插值和异常检测等多种任务上的有效性。
TimeGPT-1
(ICLR23) A Time Series is Worth 64 Words: Long-term Forecasting with Transformers
(ICML24) Unified training of universal time series forecasting transformers
Timer: Transformers for time series analysis at scale
自然语言模型与时间序列数据的结合
同一时期,正值自然语言大模型和多模态模型的兴起和发展,因此也造就了两种其他的迈向时序基础模型的路线:其一是直接利用自然语言模型来完成时间序列任务,这一类模型通常被视作repurposed LLM。这一类模型通常遵循的范式是其输入数据仅包含时间序列数据转换而来的token,而直接输出对应的时间序列任务的输出,其和传统模型的差异主要在于其骨干网络并非经过高度设计的时序模型而是预训练的自然语言模型。这一类模型的本质rationale在于自然语言模型展现出的强大能力能够具有通用理解能力,因此能够潜在地利用这种通用理解能力实现时间序列的理解和利用。
Yaliang Li团队在ICLR24上发表的TEST将时间序列转换到自然语言空间从而有效利用LLM进行预测推理。同样在ICLR24上Yan Liu团队发表的TEMPO则改为采用prefix tuning的方式来将LLM重新调整为时间序列预测模型。
其二是多模态模型,这一类模型与上一类模型最本质的差异在于其输入中不仅包含了自然语言也包含了时间序列数据,这使得用自然语言描述来辅助时间序列理解成为了可能,也进一步提升了时间序列任务的可解释性。通过向时间序列的理解任务中引入自然语言描述,模型潜在地获得了一些以往传统时间序列任务难以获得的信息,例如在金融预测任务中获知新闻事件等,进而能够有效提升时间序列的理解能力。
Yuxuan Liang团队在WWW24上发表的UniTime考虑将自然语言和时间序列数据同时作为输入传输到LLM中进行预测。同团队在ICLR24上发表的Time-LLM进一步增加了一个将时间序列数据与自然语言空间对齐的reprograming层来实现将两种模态数据对齐至同一空间。
在当今的研究界,自然语言模型与时间序列数据的结合已成为一个极具活力的研究领域。事实上,这一方向在KDD24会议上的重视程度可见一斑,会议专门为此开设了“The 10th Mining and Learning from Time Series Workshop: From Classical Methods to LLMs”。这种跨模态的结合不仅开辟了解决以往难题的新途径,也预示着这一领域将在未来长时间内保持其研究热度。
这样的融合为处理时间序列数据引入了自然语言处理技术的先进方法,如大型语言模型(LLMs),使得从复杂数据中提取信息变得更加高效和直观。这些方法的应用不仅提高了预测的准确性,还增强了模型的解释能力,为研究人员提供了前所未有的分析工具。此类研究的推进,无疑将为时间序列分析领域带来更多创新和突破。
(ICLR24) TEST: Text Prototype Aligned Embedding to Activate LLM\'s Ability for Time Series
(ICLR24) Time-LLM: Time Series Forecasting by Reprogramming Large Language Models.
总结与未来研究方向
在花了一些时间梳理清楚这个领域的来龙去脉后,笔者非常感慨。在进入深度学习时代之后,梳理的文献中总能看到一些“老熟人”。这一领域内汇集了来自迁移学习、大模型、时空数据挖掘等多个方向的研究者,欣欣向荣的同时也充满了激烈的竞争。如果用人来喻,时间序列预测宛如一位资深长者,并非墨守成规之辈,而是在新时代中焕发光彩,不断追逐时代的前沿。
笔者也希望就上述的讨论,提出自己对未来的研究方向的一点看法。面对未来,我们确实需要重新思考那些曾被认为非常棘手的问题。例如,如何在模型进行时间序列预测时,不仅仅产生一个结果,而是同时提供一个清晰的逻辑推理过程。此外,将非时间序列因素,如经济、社会、环境等纳入模型考虑,可以让预测更加全面和准确。
大模型时代“越大越强”的scaling law在时间序列领域还远没有达到上限,这种思想仍将在相当长一段时间内不断推动着时间序列预测领域的界限。我们应当利用这些“愈加强大的锤子”去敲打那些曾经难以解决的“大钉子”,即便是挑战仍旧存在,也无疑会在尝试中得到新的启示和知识。这样的探索不仅仅是技术的挑战,更是对现有科学知识体系的一次深刻的扩展和丰富。
","description":"时间序列建模问题,如何准确的建立时间序列模型? 明明是Neumyor的回答\\n\\n\\n时间序列预测近年来越来越成为研究者们研究的重点。根据DBLP上的统计信息显示,time series forecasting关键词下的论文总量在2016年刚刚突破100篇,而到2020年已经突破300篇,在2024年更是直接已经高达735篇。\\n\\n在本文中,笔者整理了时间序列预测的发展历史,特别强调了计算机科学领域内,尤其是深度学习在时间序列预测研究中的贡献。同时,笔者还从历史发展的角度探讨了时空序列预测的研究方向与时间序列预测发展之间的关联。\\n\\n为了帮助感兴趣的读者更好地理解各个研究阶段…","guid":"https://www.zhihu.com/question/31833683/answer/45315056829","author":"明明是Neumyor","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T13:21:27.574Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Cox回归预测模型:模型的验证——C-index","url":"https://zhuanlan.zhihu.com/p/10101450469","content":"[视频: Cox回归预测模型:模型的验证——C-index] 前面讲了Cox回归预测模型的构建,今天介绍的是通过C-index对模型进行验证。 C-index是一种用于评估模型预测能力的指标,范围在0.5到1之间:0.5表示模型没有预测能力(类似于随机猜测),1表示完美预测。下面就来看R语言计算C-index的具体过程。 1、安装所需要的R包install.packages(\\"survival\\") install.packages(\\"readr\\") 2、加载相应的R包library(survival) library(readr) 3、读入数据data<-read_csv(\\"C:/Users/Lenovo/Deskto…","description":"[视频: Cox回归预测模型:模型的验证——C-index] 前面讲了Cox回归预测模型的构建,今天介绍的是通过C-index对模型进行验证。 C-index是一种用于评估模型预测能力的指标,范围在0.5到1之间:0.5表示模型没有预测能力(类似于随机猜测),1表示完美预测。下面就来看R语言计算C-index的具体过程。 1、安装所需要的R包install.packages(\\"survival\\") install.packages(\\"readr\\") 2、加载相应的R包library(survival) library(readr) 3、读入数据data<…","guid":"https://zhuanlan.zhihu.com/p/10101450469","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T12:30:31.576Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成政治献金人查尔斯·库什纳因雇佣的妓女引诱姐姐的丈夫向姐姐道歉定制字体","url":"https://zhuanlan.zhihu.com/p/10088673815","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/10088673815","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T10:29:56.300Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言懂王任命为FBI负责人Kash Patel表示,他将在上任的第一天就拆除胡佛大楼,并在第二天将其作为\\"Deep State博物馆\\"重新开放定制字体","url":"https://zhuanlan.zhihu.com/p/10087999368","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/10087999368","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T10:09:48.636Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成埃隆·马斯克和维韦克·拉马斯瓦米:这个道奇计划就是来改革政府的定制字体","url":"https://zhuanlan.zhihu.com/p/10082817323","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/10082817323","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-12-01T09:28:18.854Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"能否分享一些让你豁然开朗的句子?-小可123ss的回答:世间真正温煦的美色,都熨帖着大地,潜伏在深谷。——余秋雨更羡慕街边咖啡屋里的目光,只一闪,便觉日月悠...","url":"https://www.zhihu.com/question/580956751/answer/44861841793","content":"能否分享一些让你豁然开朗的句子?中国各省数据
# 安装必要的包\\n# install.packages(\\"rnaturalearth\\")\\n# install.packages(\\"rnaturalearthdata\\")\\n# 加载包\\nlibrary(rnaturalearth)\\nlibrary(rnaturalearthdata)\\nlibrary(rnaturalearthhires)\\n# 获取中国省级边界数据\\nchina_map <- ne_states(country = \\"China\\", returnclass = \\"sf\\")
中国湖泊水系数据
# 假设你已经下载了湖泊数据并保存为 lakes.shp
lakes <- st_read(\\"path/to/lakes.shp\\")
中国九段线数据
# 假设你已经下载了九段线数据并保存为 nine_dotted_line.shp
nine_dotted_line <- st_read(\\"path/to/nine_dotted_line.shp\\")
中国海岸线数据
# 假设你已经下载了海岸线数据并保存为 coastline.shp
coastline <- st_read(\\"path/to/coastline.shp\\")
该平台下载的数据最多能提供市内区、县边界图
知乎 - 安全中心可以在该网站下载json格式的地图数据,包括省市县三级的数据以及国界线、海南线等等。
AntV L7 地理空间数据可视化引擎hchinamap 是一个R语言包,它结合了highcharter包来创建中国及其省份、直辖市和自治区的地图可视化。这个包简化了使用Highmaps(Highcharts的一个模块)来绘制中国地理数据的过程。通过hchinamap,用户可以轻松地将中国的行政区划边界集成到他们的R代码中,从而生成交互式的地图图表。
Usage\\nhchinamap(name, value, region = \\"China\\", width = NULL, height = NULL,\\n elementId = NULL, itermName = \\"Random data\\", title = \\"\\",\\n titleAlign = \\"center\\", titleSize = \\"20px\\", titleColor = \\"#333333\\",\\n subtitle = \\"\\", subtitleAlign = \\"center\\", subtitleSize = \\"\\",\\n subtitleColor = \\"#666666\\", min = 0, minColor = \\"rgb(255,255,255)\\",\\n maxColor = \\"#006cee\\", legendLayout = \\"horizontal\\",\\n legendAlign = \\"center\\", legendTitle = \\"\\",\\n legendVerticalAlign = \\"bottom\\", hoverColor = \\"#a4edba\\",\\n theme = \\"sunset\\")
参数名称 | 描述 |
---|---|
name | 指定数据框中包含地理区域名称(如省份、直辖市等)的列名。这些名称需要与地图上的区域标识相匹配。 |
value | 指定数据框中包含与name中指定地区相对应数值的列名。这些数值用于确定地图上各个地区的颜色深浅。 |
region | 指定要绘制的地图区域,默认为\\"China\\",代表整个中国。如果希望绘制特定省份或更小级别的地图,可以更改此参数。 |
width | 设置生成的地图图表的宽度。如果不指定,则使用默认尺寸。 |
height | 设置生成的地图图表的高度。如果不指定,则使用默认尺寸。 |
elementId | 为Highcharts容器设置HTML元素ID。如果未提供,将自动创建一个。 |
itermName | 如果没有提供实际的数据,这个参数可以用来指定图例中显示的示例数据项的名字,默认是\\"Random data\\"。 |
title | 地图标题文本。 |
titleAlign | 标题对齐方式,可以是\\"left\\", \\"center\\", 或 \\"right\\"。 |
titleSize | 标题字体大小,例如\\"20px\\"。 |
titleColor | 标题文字颜色,例如\\"#333333\\"。 |
subtitle | 地图副标题文本。 |
subtitleAlign | 副标题对齐方式,同titleAlign。 |
subtitleSize | 副标题字体大小,格式同titleSize。 |
subtitleColor | 副标题文字颜色,格式同titleColor。 |
min | 定义颜色范围的最小值。 |
minColor | 最低值的颜色,默认为白色。 |
maxColor | 最高值的颜色,默认为蓝色。 |
legendLayout | 图例布局方式,可以是\\"horizontal\\"或\\"vertical\\"。 |
legendAlign | 图例水平对齐方式,可以是\\"left\\", \\"center\\", 或 \\"right\\"。 |
legendTitle | 图例标题文本。 |
legendVerticalAlign | 图例垂直对齐方式,可以是\\"top\\", \\"middle\\", 或 \\"bottom\\"。 |
hoverColor | 当鼠标悬停在某个区域时,该区域的颜色。 |
(1)全国地图
# 加载必要的库\\nlibrary(hchinamap)\\n# 创建数据框\\nprovince <- c(\\"上海\\", \\"江苏\\", \\"浙江\\", \\"湖北\\", \\"北京\\", \\"天津\\", \\"广东\\")\\npopulation <- c(12, 12, 8, 15, 9, 4, 6)\\ndf <- data.frame(province = province, population = population)\\n# 定义颜色\\n# 设置最小值的颜色为黄色\\nminColor <- \\"#FFFF00\\" # 黄色\\n# 设置最大值的颜色为红色\\nmaxColor <- \\"#FF0000\\" # 红色\\n# 绘制地图,并设置颜色和其他参数\\nmap <- hchinamap(name = df$province, value = df$population,\\n width = \\"1000px\\", height = \\"500px\\",\\n title = \\"Map of China\\", region = \\"China\\",\\n minColor = minColor, maxColor = maxColor, # 设置颜色\\n theme = \\"sunset\\") # 使用预设的主题\\nmap
这个图是可交互的,鼠标移动每个地区上方,就可以显示相应的值
鼠标滚轮或者点击左边的”+ -“符号,可以对地图进行放大缩小。
按住鼠标左键,可以对地图进行拖动
(2)市级地图
把region的改成相应的省份,再输入相应的市名
# 加载必要的库\\nlibrary(hchinamap)\\n# 浙江省的所有地级市\\ncities <- c(\\"杭州\\", \\"宁波\\", \\"绍兴\\", \\"衢州\\", \\"金华\\", \\"温州\\", \\"嘉兴\\", \\"湖州\\", \\"台州\\", \\"舟山\\", \\"丽水\\")\\n# 设置随机种子以确保结果可重复\\nset.seed(123) # 您可以更改或删除此行以获得不同的随机序列\\n# 为每个城市生成一个100到200之间的随机整数\\nrandom_values <- sample(100:200, length(cities), replace = TRUE)\\n# 创建数据框\\ndf <- data.frame(City = cities, P = random_values)\\n# 定义颜色\\n# 设置最小值的颜色为黄色\\nminColor <- \\"#FFFF00\\" # 黄色\\n# 设置最大值的颜色为红色\\nmaxColor <- \\"#FF0000\\" # 红色\\n# 绘制地图,并设置颜色和其他参数\\nmap <- hchinamap(name = df$City, value = df$P,\\n width = \\"1000px\\", height = \\"500px\\",\\n title = \\"Map of Zhejiang\\", region = \\"Zhejiang\\",\\n minColor = minColor, maxColor = maxColor, # 设置颜色\\n theme = \\"sunset\\") # 使用预设的主题\\n\\nprint(map)
REmap 是一个用于在R语言中创建交互式地图的包,它基于ECharts(一个由百度开发的开源可视化库)来实现。通过REmap,用户可以轻松地制作出美观且功能丰富的地图,包括但不限于世界地图、中国地图等,并且支持多种图表类型,如散点图、热力图等。
(1)扩散图
# 加载REmap包,使其功能可用\\nlibrary(REmap)\\n# 定义自定义主题\\ncustom_theme <- get_theme(\\n theme = \\"Sky\\", # 总体配色方案,默认有\\"Dark\\"、\\"Bright\\"、\\"Sky\\"、“none”等选项\\n lineColor = \\"Random\\", # 线条颜色,默认随机,也可以指定如\'blue\'\\n backgroundColor = \\"#1b1b1b\\", # 地图背景颜色(深灰色,接近黑色)\\n titleColor = \\"fff\\", # 标题颜色,这里改为白色以适应深色背景\\n borderColor = \\"rgba(100,149,237,1)\\", # 地域边缘颜色\\n regionColor = \\"green\\", # 地域显示颜色\\n labelShow = T, # 是否显示地域名称,默认为TRUE\\n pointShow = F, # 是否显示地域所在点,默认为FALSE\\n pointColor = \\"gold\\" # 如果显示点,点的颜色\\n)\\n# 以浙江为例,创建一个城市向量\\ncity_vec = c(\\"北京\\", \\"上海\\", \\"杭州\\", \\"深圳\\", \\"天津\\", \\"青岛\\", \\"成都\\", \\"昆明\\")\\n# 获取这些城市的地理坐标(经纬度)\\ngeo_positions = get_geo_position(city_vec)\\nprint(geo_positions) # 打印获取到的城市经纬度\\n# 设置随机种子以确保结果可复现\\nset.seed(1234)\\n# 创建出发地数据,所有路线均从浙江(以杭州为代表)出发\\norigin = rep(\\"杭州\\", 25) # 将路线数量增加到25条\\n# 创建目的地数据,包括多个城市\\ndestination = c(\'上海\', \'北京\', \'大连\', \'南宁\', \'南昌\',\\n \'杭州\', \'南京\', \'哈尔滨\', \'合肥\', \'长沙\',\\n \'拉萨\', \'长春\', \'乌鲁木齐\', \'重庆\', \'兰州\',\\n \'天津\', \'青岛\', \'成都\', \'昆明\', \'西安\', \\n \'福州\', \'厦门\', \'广州\', \'海口\', \'三亚\') \\n# 将出发地和目的地组合成一个数据框\\ndat = data.frame(origin, destination)\\n# 使用REmap绘制地图,并设置标题和主题\\nout = remap(mapdata = dat, \\n title = \\"REmap Great\\", \\n subtitle = \\"浙江\\", # 更新副标题为浙江\\n theme = custom_theme) # 使用自定义的主题\\n# 显示绘制好的地图\\nout\\n
(2)路径图
两列数据,左侧是起点,右侧是终点,并且每一行的终点是下一行的起点
# 加载REmap包\\nlibrary(REmap)\\n# 示例中的REmap主题参数配置\\nget_theme(\\n theme = \\"Dark\\", # 总体配色方案,默认有\\"Dark\\"、\\"Bright\\"、\\"Sky\\"、“none”等选项\\n lineColor = \\"Random\\", # 线条颜色,默认随机,也可以指定如\'blue\'\\n backgroundColor = \\"#1b1b1b\\", # 地图背景颜色\\n titleColor = \\"fff\\", # 标题颜色\\n borderColor = \\"rgba(100,149,237,1)\\", # 地域边缘颜色\\n regionColor = \\"#1b1b1b\\", # 地域显示颜色\\n labelShow = T, # 是否显示地域名称,默认为TRUE\\n pointShow = F, # 是否显示地域所在点,默认为FALSE\\n pointColor = \\"gold\\" # 如果显示点,点的颜色\\n)\\n# 起点\\norigin <- c(\\"上海\\", \\"北京\\", \\"大连\\", \\"南宁\\", \\"南昌\\",\\n \\"杭州\\", \\"南京\\", \\"哈尔滨\\", \\"合肥\\", \\"长沙\\",\\n \\"拉萨\\", \\"长春\\", \\"乌鲁木齐\\", \\"重庆\\", \\"兰州\\",\\n \\"天津\\", \\"青岛\\", \\"成都\\", \\"昆明\\", \\"西安\\")\\n# 终点\\ndestination <- c(origin[-1], origin[1]) # 首尾相连接\\n# 创建数据框\\nmap_data <- data.frame(origin, destination)\\n# 使用REmap绘制路径图,并设置标题和主题\\nmap_out <- remap(mapdata = map_data,\\n title = \\"路径图\\",\\n subtitle = \\"上海\\", # 副标题为上海\\n theme = get_theme(theme = \\"Dark\\")) \\n# 显示绘制好的路径图\\nmap_out\\n
(3)REmapB
REmapB 函数是 R 语言中 REmap 包提供的一个用于创建气泡地图的函数。与 REmap 函数类似,REmapB 专门用来绘制带有大小和颜色变化的气泡的地图,通常用来展示地理数据中的数值分布情况。气泡的大小和颜色可以用来表示不同的变量值。
数据准备:
基本参数:
高级选项:
library(REmap)\\n# 示例数据生成\\nset.seed(1234) # 设置随机数种子以确保结果可重复\\n# 创建一个包含15个\\"杭州\\"的向量作为新的起点\\norigin = rep(\\"杭州\\", 15) \\ndestination = c(\'上海\',\'北京\',\'大连\',\'南宁\',\'南昌\',\\n \'杭州\',\'南京\',\'哈尔滨\',\'合肥\',\'长沙\',\\n \'福州\', \'厦门\', \'广州\', \'海口\', \'三亚\') # 目的地列表\\ndat = data.frame(origin, destination) # 将起点与目的地组合成数据框\\n# 使用 remapB 函数创建地图,并设置相关参数\\nmap_out <- remapB(\\n zoom = 5, # 设置地图缩放级别为5,代表全国地图\\n color = \\"dark\\", # 设置地图颜色主题为暗色\\n title = \\"流向图\\", # 设置地图标题\\n subtitle = \\"星星\\", # 设置地图副标题\\n markLineData = dat, # 用于绘制线条的数据,\\n markPointData = destination, # 用于标记点的数据,\\n markLineTheme = markLineControl( # 线条样式控制\\n symbol = NA, # 不使用线条两端的标记\\n symbolSize = c(0, 4), # 标记大小范围\\n smooth = TRUE, # 启用平滑处理\\n smoothness = 0.2, # 平滑程度\\n effect = TRUE, # 启用动画效果\\n lineWidth = 2, # 线条宽度\\n lineType = \\"dotted\\", # 线条类型为虚线\\n color = \\"white\\" # 线条颜色为白色\\n ),\\n markPointTheme = markPointControl( # 点样式控制\\n symbol = \\"star\\", # 点的形状为星形\\n symbolSize = \\"Random\\", # 点的大小随机\\n effect = TRUE, # 启用动态效果\\n effectType = \\"scale\\", # 动态效果类型为放大\\n color = \\"white\\" # 点的颜色为白色\\n )\\n)\\n# 显示生成的地图\\nmap_out
(4)REmapH
REmapH函数是R语言中的一个函数,主要用于绘制中心辐射的热力图。这种热力图在气象、人口密度、海拔测绘等领域有广泛应用,特别是在与地理信息相关的数据呈现方面非常有用
# remapH(\\n# data, # 输入的数据,数据框格式,包含三列:经度(lon)、纬度(lat) 和密度/概率(prob)\\n# maptype = \'china\', # 地图类型,可选值为 \\"china\\"(中国地图)、\\"world\\"(世界地图)或中国各省份的名字\\n# theme = get_theme(\\"Dark\\"), # 地图主题类型,使用 get_theme 函数获取\\n# blurSize = 30, # 热力效果的泛化范围,控制热力点中心的扩散程度\\n# color = c(\'blue\', \'cyan\', \'lime\', \'yellow\', \'red\'), # 热力的渐变颜色\\n# minAlpha = 0.05, # 热力点的展示阈值,低于该值的点将不显示\\n# opacity = 1, # 透明度,0 表示完全透明,1 表示完全不透明\\n# ... # 其他可能的参数\\n# )
自带数据sampleData()
lon | lat | prob | |
---|---|---|---|
1 | 105.6052 | 32.62212 | 0.85545589 |
2 | 104.0839 | 31.10454 | 0.05013991 |
3 | 102.6748 | 39.18987 | 0.67443409 |
4 | 106.5136 | 31.23973 | 0.84589330 |
5 | 103.1012 | 27.05001 | 0.74639832 |
6 | 102.5992 | 39.86575 | 0.82956440 |
(5)REmapC
REmapC 函数是 remaps 包中的一个函数,它用于创建基于中国地图的热力图或点分布图。这个函数允许用户根据提供的地理坐标数据(通常是经纬度)来绘制不同类型的图表,如热力图、散点图等,并且可以定制样式和参数
热力图
library(REmap)\\n# 从地图数据中提取全国省份名称\\nprovince <- mapNames(\\"china\\") # 获取中国的省份列表\\n# 为每个省份生成随机值,这些值将用于热力图的颜色映射\\nvalue <- rnorm(34, 100, 50) # 生成34个正态分布的随机数(均值100,标准差50)\\n# 将省份名称与对应的随机值合并成一个数据框\\ndata <- data.frame(province = province, value = value) # 创建包含省份和对应值的数据框\\n# 使用remapC函数绘制热力图\\nremapC(data, color = c(\\"grey\\", \\"red\\"), title = \\"全国各省热地图\\", subtitle = \\"\\") # 绘制热力图,颜色渐变从黄色到红色
省份地图
# 从地图数据中获取浙江省的地名\\nad <- mapNames(\\"浙江\\")\\n# 生成11个随机数,代表浙江省内各地区的数据值\\nvalue <- rnorm(11, 100, 36)\\n# 创建一个数据框,包含地名和对应的数据值\\ndata <- data.frame(ad, value)\\n# 使用remapC函数绘制浙江省的热力地图\\nmap_out <- remapC(\\n data = data, # 输入数据\\n maptype = \\"浙江\\", # 地图类型\\n color = c(\'#1e90ff\', \'#f0ffff\'), # 颜色渐变\\n title = \\"浙江省热力地图\\", # 地图标题\\n theme = get_theme(\\"Bright\\"), # 应用主题\\n maxdata = 200 # 图例最大值\\n)\\n# 显示或保存地图对象\\nmap_out
模拟迁徙
library(REmap)\\n# 获取中国所有省份的地名\\nprovince <- mapNames(\\"china\\")\\n# 移除浙江省\\nprovince <- province[province != \\"浙江\\"]\\n# 随机生成分省值(注意:现在是33个省份)\\nvalue <- round(rnorm(33, 1000, 36), 0)\\n# 合并数据\\ndata <- data.frame(province, value)\\n# 选择迁徙值最大的前10个省份\\nlabelper <- data[order(data[,\\"value\\"], decreasing = TRUE), ][1:10, ]\\n# 设置迁出地为浙江\\norigin <- rep(\\"杭州\\", length(labelper))\\n# 目的地为迁徙值最大的前10个省份\\ndestination <- labelper$province\\n# 创建连线数据\\nline_data <- data.frame(origin, destination)\\n# 绘制地图\\nmap_out <- remapC(\\n data = data,\\n maptype = \\"china\\",\\n title = \\"浙江人口迁徙地图\\",\\n theme = get_theme(\\"Dark\\"),\\n color = c(\\"#CD0000\\", \\"#FFEC8B\\"),\\n markLineData = line_data,\\n markLineTheme = markLineControl(\\n color = \\"white\\",\\n lineWidth = 2,\\n lineType = \\"dashed\\"\\n ),\\n markPointData = line_data, # 这里使用整个line_data,因为需要显示所有目的地\\n markPointTheme = markPointControl(\\n symbolSize = 13,\\n effect = TRUE,\\n effectType = \\"scale\\",\\n color = \\"white\\"\\n )\\n)\\n# 显示或保存地图对象\\nmap_out
检查省份列表
> print(province)
[1] \\"新疆\\" \\"西藏\\" \\"内蒙古\\" \\"青海\\" \\"四川\\" \\"黑龙江\\" \\"甘肃\\" \\"云南\\" \\"广西\\" \\"湖南\\"
[11] \\"陕西\\" \\"广东\\" \\"吉林\\" \\"河北\\" \\"湖北\\" \\"贵州\\" \\"山东\\" \\"江西\\" \\"河南\\" \\"辽宁\\"
[21] \\"山西\\" \\"安徽\\" \\"福建\\" \\"江苏\\" \\"重庆\\" \\"宁夏\\" \\"海南\\" \\"台湾\\" \\"北京\\" \\"天津\\"
[31] \\"上海\\" \\"香港\\" \\"澳门\\"
检查合并后的数据
print(data)
province | value | |
---|---|---|
1 | 新疆 | 1033 |
2 | 西藏 | 1082 |
3 | 内蒙古 | 1004 |
4 | 青海 | 905 |
5 | 四川 | 1055 |
6 | 黑龙江 | 1066 |
7 | 甘肃 | 1013 |
8 | 云南 | 1056 |
9 | 广西 | 1015 |
10 | 湖南 | 1010 |
11 | 陕西 | 1007 |
12 | 广东 | 973 |
13 | 吉林 | 1002 |
14 | 河北 | 1008 |
15 | 湖北 | 1051 |
16 | 贵州 | 1053 |
17 | 山东 | 989 |
18 | 江西 | 906 |
19 | 河南 | 1008 |
20 | 辽宁 | 980 |
21 | 山西 | 1017 |
22 | 安徽 | 984 |
23 | 福建 | 1017 |
24 | 江苏 | 1000 |
25 | 重庆 | 1020 |
26 | 宁夏 | 948 |
27 | 海南 | 967 |
28 | 台湾 | 1018 |
29 | 北京 | 1050 |
30 | 天津 | 985 |
31 | 上海 | 972 |
32 | 香港 | 1048 |
33 | 澳门 | 1063 |
检查迁徙值最大的前10个省份
print(labelper)
province | value | |
---|---|---|
2 | 西藏 | 1082 |
6 | 黑龙江 | 1066 |
33 | 澳门 | 1063 |
8 | 云南 | 1056 |
5 | 四川 | 1055 |
16 | 贵州 | 1053 |
15 | 湖北 | 1051 |
29 | 北京 | 1050 |
32 | 香港 | 1048 |
1 | 新疆 | 1033 |
检查连线数据
> print(line_data)
origin | destination | |
---|---|---|
1 | 杭州 | 西藏 |
2 | 杭州 | 黑龙江 |
3 | 杭州 | 澳门 |
4 | 杭州 | 云南 |
5 | 杭州 | 四川 |
6 | 杭州 | 贵州 |
7 | 杭州 | 湖北 |
8 | 杭州 | 北京 |
9 | 杭州 | 香港 |
10 | 杭州 | 新疆 |
library(ggplot2)\\nlibrary(sf)\\nlibrary(tidyverse)\\n# 读取地图\\nchina <- sf::st_read(\\"中华人民共和国.json\\")\\nzhejiang <- sf::st_read(\\"zhejiang.json\\")\\n# 简单地图绘制\\n# 绘制中国数据\\nggplot(data = china) + \\n geom_sf() + \\n theme_minimal()
ggplot(data = zhejiang) +\\n# geom_sf() + \\n geom_sf(color = \\"#29484d\\", # 填充的颜色\\n fill = \\"#80b3ff\\", # 边界的颜色\\n size = 1) + # 边界的粗细\\n theme_minimal()
# 加载必要的库\\nlibrary(dplyr)\\nlibrary(ggplot2)\\nlibrary(sf)\\nlibrary(tidyverse)\\n# 读取地图\\nchina <- sf::st_read(\\"中华人民共和国.json\\")\\nzhejiang <- sf::st_read(\\"zhejiang.json\\")\\n# 假设的GDP值,实际数值应根据官方发布的数据进行更新\\nzhejiang_gdp <- structure(list(name = c(\\"杭州市\\", \\"宁波市\\", \\"温州市\\",\\n \\"绍兴市\\", \\"湖州市\\", \\"嘉兴市\\", \\"金华市\\",\\n \\"衢州市\\", \\"舟山市\\", \\"台州市\\", \\"丽水市\\"),\\n gdp = c(20059, 16452.8, 7000, 5500, 3500, 3200, 4800,\\n 1800, 1200, 5200, 1600)),\\n class = c(\\"tbl_df\\", \\"tbl\\", \\"data.frame\\"),\\n row.names = c(NA, -11L))\\n# 使用str_remove去掉\\"市\\"\\nzhejiang_gdp <- zhejiang_gdp %>%\\n mutate(name = str_remove(name, \\"市\\"))\\n# 将GDP数据与地理空间数据合并\\nzhejiang_gd <- zhejiang %>%\\n left_join(zhejiang_gdp, by = \\"name\\")\\n# 绘制地图\\nggplot(data = zhejiang_gd) +\\n geom_sf(aes(fill = gdp), # 使用GDP值填充颜色\\n color = \\"black\\", # 设置轮廓线颜色\\n size = 1) + # 设置轮廓线宽度\\n theme_minimal() + # 应用极简主题\\n scale_fill_gradient(low = \\"yellow\\", high = \\"red\\", name = \\"GDP (亿)\\") + # 设置颜色梯度\\n labs(title = \\"2023年浙江省各市GDP分布图\\") + # 添加标题\\n theme(legend.position = \\"right\\", # 设置图例位置\\n plot.title = element_text(hjust = 0.5) , # 设置标题居中\\n panel.grid.major = element_blank(), # 去掉主要网格线\\n panel.grid.minor = element_blank(), # 去掉次要网格线\\n axis.text.x = element_blank(), # 去掉X轴(经度)标签\\n axis.text.y = element_blank(), # 去掉Y轴(纬度)标签\\n axis.ticks.x = element_blank(), # 去掉X轴(经度)刻度线\\n axis.ticks.y = element_blank() # 去掉Y轴(纬度)刻度线\\n )
# 在 ggplot2 中,theme(legend.position = ...) 可以用来设置图例的位置。legend.position 参数接受以下几种值:
#
# \\"top\\":图例位于绘图区域的顶部。
# \\"bottom\\":图例位于绘图区域的底部。
# \\"left\\":图例位于绘图区域的左侧。
# \\"right\\":图例位于绘图区域的右侧。
# \\"none\\":不显示图例。
#
# 此外,您还可以使用坐标来指定图例的具体位置。例如,legend.position = c(x, y),其中 x 和 y 是相对于绘图区域的比例值(0 到 1 之间)。例如:
#
# c(0, 0) 表示左下角。
# c(0, 1) 表示左上角。
# c(1, 0) 表示右下角。
# c(1, 1) 表示右上角。
# c(0.5, 0.5) 表示中心位置。
# 加载必要的库\\nlibrary(dplyr)\\nlibrary(ggplot2)\\nlibrary(sf)\\nlibrary(tidyverse)\\n# 2023年全国34个省份的人均GDP数据\\nprovince_names <- c(\\n \\"香港特别行政区\\", \\"澳门特别行政区\\", \\"台湾省\\", \\"北京市\\", \\"上海市\\", \\"江苏省\\",\\n \\"福建省\\", \\"浙江省\\", \\"天津市\\", \\"广东省\\", \\"内蒙古自治区\\", \\"湖北省\\", \\"重庆市\\", \\"山东省\\",\\n \\"陕西省\\", \\"安徽省\\", \\"山西省\\", \\"湖南省\\", \\"江西省\\", \\"宁夏回族自治区\\",\\n \\"新疆维吾尔自治区\\", \\"辽宁省\\", \\"四川省\\", \\"海南省\\", \\"河南省\\", \\"云南省\\",\\n \\"青海省\\", \\"西藏自治区\\", \\"河北省\\", \\"吉林省\\", \\"贵州省\\", \\"广西壮族自治区\\",\\n \\"黑龙江省\\", \\"甘肃省\\"\\n)\\n# 假设您已经获得了2023年的数据\\ngdp_values <- c(\\n 32.5, 28.5, 21.5, 19.2, 18.2, 14.6, 12.8, 12.0, 12.0, 10.3,\\n 9.7, 9.3, 9.1, 8.7, 8.4, 7.5, 7.5, 7.5, 7.2, 7.0, 6.9, 6.9, 6.8, 6.7, 6.3,\\n 6.2, 6.1, 5.9, 5.7, 5.5, 5.3, 5.2, 4.5\\n)\\n# 检查向量长度\\nlength_province <- length(province_names)\\nlength_gdp <- length(gdp_values)\\n# 如果长度不匹配,进行修正\\nif (length_province != length_gdp) {\\n cat(\\"警告:province_names 和 gdp_values 向量长度不匹配,请检查数据。\\\\n\\")\\n # 假设是 gdp_values 少了一个值,我们暂时用 NA 填充\\n if (length_province > length_gdp) {\\n gdp_values <- c(gdp_values, rep(NA, length_province - length_gdp))\\n } else {\\n province_names <- province_names[1:length_gdp]\\n }\\n}\\n# 创建一个新的数据框,包含两个变量:province(省市名称)和 gdp(人均GDP)\\ndata_2023 <- data.frame(\\n province = province_names,\\n gdp = gdp_values,\\n stringsAsFactors = FALSE # 防止字符向量被转换为因子\\n)\\nggplot(data_2023, aes(x = reorder(province, gdp), y = gdp, fill = gdp)) + # 设置x轴为重新排序后的省份名称,y轴为人均GDP值,填充颜色也根据人均GDP值变化\\n geom_bar(stat = \'identity\') + # 绘制条形图,stat=\'identity\'表示使用数据框中的值作为条形的高度\\n scale_fill_gradient(low = \\"yellow\\", high = \\"red\\") + # 设置填充颜色黄色白色到红色\\n geom_text(aes(label = round(gdp, 2)), size = 3, hjust = -0.3, vjust = 0.5) + # 在条形图上添加文本标签,显示人均GDP的值,四舍五入到小数点后两位\\n scale_y_continuous(limits = c(0, 35), expand = c(0, 0)) + # 设置y轴的范围为0到35,没有额外的扩展\\n theme_bw() + # 设置图表的主题为白色背景\\n labs(title = \\"2023年全国34个省市人均GDP\\", x = \\"\\", y = \\"人均GDP(单位:万元)\\") + # 设置图表的标题和轴标签\\n guides(fill = guide_legend(title = \\"人均GDP(单位:万元)\\")) + # 设置图例的标题\\n coord_flip() + # 将条形图翻转,使得条形图变为水平显示\\n theme(\\n plot.title = element_text(hjust = 0.5), # 标题居中\\n axis.text.x = element_text(angle = 45, hjust = 1), # 旋转X轴标签以便更好地显示\\n legend.position = \\"right\\" # 图例位置在右侧\\n )
st_read 和 read_sf 都是用于读取空间数据的函数,但它们来自不同的包,并且有一些细微的差别。下面是这两个函数的详细解释和比较:
st_read 函数
st_read(dsn, layer, ..., quiet = FALSE, stringsAsFactors = TRUE)
read_sf 函数
来源:read_sf 也是 sf 包中的一个函数,它是 st_read 的一个别名。
用途:与 st_read 完全相同,用于读取多种格式的空间数据文件。
read_sf(dsn, layer, ..., quiet = FALSE, stringsAsFactors = TRUE)
# 查看前几行数据
head(china_sf)
head(nine_sf)
name | childrenNum | level | code | filename | fullname | center | ||
---|---|---|---|---|---|---|---|---|
1 | 北京 | 16 | province | 110000 | 110000 | 北京市 | 116.40529, | 39.90499 |
2 | 天津 | 16 | province | 120000 | 120000 | 天津市 | 117.1902, | 39.1256 |
3 | 河北 | 11 | province | 130000 | 130000 | 河北省 | 114.50246, | 38.04547 |
4 | 山西 | 11 | province | 140000 | 140000 | 山西省 | 112.54925, | 37.85701 |
5 | 内蒙古 | 12 | province | 150000 | 150000 | 内蒙古自治区 | 111.67080, | 40.81831 |
6 | 辽宁 | 14 | province | 210000 | 210000 | 辽宁省 | 123.42910, | 41.79677 |
绘制地图
# 安装必要的包(如果尚未安装)\\n# install.packages(\\"sf\\")\\n# install.packages(\\"cowplot\\")\\n# 加载必要的库\\nlibrary(sf)\\nlibrary(cowplot)\\nlibrary(dplyr)\\nlibrary(ggplot2)\\nlibrary(tidyverse)\\n# 2023年全国34个省份的人均GDP数据\\nprovince_names <- c(\\n \\"香港特别行政区\\", \\"澳门特别行政区\\", \\"台湾省\\", \\"北京市\\", \\"上海市\\", \\"江苏省\\",\\n \\"福建省\\", \\"浙江省\\", \\"天津市\\", \\"广东省\\", \\"内蒙古自治区\\", \\"湖北省\\", \\"重庆市\\", \\"山东省\\",\\n \\"陕西省\\", \\"安徽省\\", \\"山西省\\", \\"湖南省\\", \\"江西省\\", \\"宁夏回族自治区\\",\\n \\"新疆维吾尔自治区\\", \\"辽宁省\\", \\"四川省\\", \\"海南省\\", \\"河南省\\", \\"云南省\\",\\n \\"青海省\\", \\"西藏自治区\\", \\"河北省\\", \\"吉林省\\", \\"贵州省\\", \\"广西壮族自治区\\",\\n \\"黑龙江省\\", \\"甘肃省\\"\\n)\\n# 假设您已经获得了2023年的数据\\ngdp_values <- c(\\n 32.5, 28.5, 21.5, 19.2, 18.2, 14.6, 12.8, 12.0, 12.0, 10.3,\\n 9.7, 9.3, 9.1, 8.7, 8.4, 7.5, 7.5, 7.5, 7.2, 7.0, 6.9, 6.9, 6.8, 6.7, 6.3,\\n 6.2, 6.1, 5.9, 5.7, 5.5, 5.3, 5.2, 4.5\\n)\\n# 检查向量长度\\nlength_province <- length(province_names)\\nlength_gdp <- length(gdp_values)\\n# 如果长度不匹配,进行修正\\nif (length_province != length_gdp) {\\n cat(\\"警告:province_names 和 gdp_values 向量长度不匹配,请检查数据。\\\\n\\")\\n # 假设是 gdp_values 少了一个值,我们暂时用 NA 填充\\n if (length_province > length_gdp) {\\n gdp_values <- c(gdp_values, rep(NA, length_province - length_gdp))\\n } else {\\n province_names <- province_names[1:length_gdp]\\n }\\n}\\n# 创建一个新的数据框,包含两个变量:province(省市名称)和 gdp(人均GDP)\\ndata_2023 <- data.frame(\\n province = province_names,\\n gdp = gdp_values,\\n stringsAsFactors = FALSE # 防止字符向量被转换为因子\\n)\\n## 读取和处理地图\\n# china <- \\"China.geojson\\" # 中国地图的GeoJSON文件路径\\n# nine <- \\"nine_line.geojson\\" # 九段线的GeoJSON文件路径\\n# 读取GeoJSON文件\\nchina_sf <- sf::st_read(\\"china.json\\") # 读取中国地图数据\\nnine_sf <- sf::st_read(\\"十段线数据.json\\") # 读取九段线数据\\n# 查看前几行数据\\nhead(china_sf)\\nhead(nine_sf)\\n# 重命名 `data_2023` 数据框中的 `province` 列,使其与 `china_sf` 中的列名一致\\ndata_2023 <- data_2023 %>% rename(fullname = province)\\n# 将人均GDP数据与地图数据进行左连接\\nchina <- dplyr::left_join(china_sf, data_2023, by = \\"fullname\\")\\n## 填充地图绘制\\nmap <- ggplot() +\\n geom_sf(data = china, aes(fill = gdp), size = 0.5, color = \\"black\\") + # 绘制中国地图并填充颜色\\n geom_sf(data = nine_sf) + # 绘制九段线\\n coord_sf(ylim = c(1869414.769862395, 7187874.74616931), crs = 3857) + # 设置坐标范围和投影\\n scale_fill_gradient(name = \\"人均GDP(万元)\\", # 设置填充颜色的图例标题\\n low = \\"yellow\\", # 低值颜色\\n high = \\"red\\", # 高值颜色\\n n.breaks = 6, # 图例分段数\\n guide = guide_legend(keywidth = 1.5, keyheight = 1.5)) + # 设置图例的宽度和高度\\n labs(title = \\"2023年全国34个省市人均GDP\\") + # 设置图表标题\\n theme(legend.position = \\"right\\", # 设置图例位置\\n plot.title = element_text(hjust = 0.5) , # 设置标题居中\\n panel.grid.major = element_blank(), # 去掉主要网格线\\n panel.grid.minor = element_blank(), # 去掉次要网格线\\n axis.text.x = element_blank(), # 去掉X轴(经度)标签\\n axis.text.y = element_blank(), # 去掉Y轴(纬度)标签\\n axis.ticks.x = element_blank(), # 去掉X轴(经度)刻度线\\n axis.ticks.y = element_blank() # 去掉Y轴(纬度)刻度线\\n )\\nmap
绘制九段线小地图
## 绘制九段线小地图\\nnine_map <- ggplot() +\\n geom_sf(data = china, aes(fill = gdp)) + # 绘制中国地图并填充颜色\\n geom_sf(data = nine_sf) + # 绘制九段线\\n scale_fill_gradient(low = \\"white\\", # 低值颜色\\n high = \\"red\\", # 高值颜色\\n n.breaks = 6) + # 图例分段数\\n coord_sf(ylim = c(278392.10080518876, 2991845.069153875), # 设置y轴范围\\n xlim = c(11631734.185889415, 13868701.579770062), # 设置x轴范围\\n crs = 3857) + # 设置投影\\n theme(legend.position = \\"none\\", # 移除图例\\n plot.margin = unit(c(0, 0, 0, 0), \\"mm\\"), # 设置绘图边距\\n panel.border = element_rect(fill = NA, # 设置面板边框\\n color = \\"grey10\\",\\n linetype = 1,\\n size = 0.5)) +\\n theme( \\n panel.grid.major = element_blank(), # 去掉主要网格线\\n panel.grid.minor = element_blank(), # 去掉次要网格线\\n axis.text.x = element_blank(), # 去掉X轴(经度)标签\\n axis.text.y = element_blank(), # 去掉Y轴(纬度)标签\\n axis.ticks.x = element_blank(), # 去掉X轴(经度)刻度线\\n axis.ticks.y = element_blank() # 去掉Y轴(纬度)刻度线\\n )\\nnine_map
拼图
## 拼图\\nfigure <-\\n ggdraw(map) + # 创建主图\\n draw_plot(nine_map, # 添加九段线小地图\\n x = 1.2, y = 0.15, # 调整九段线小地图的位置\\n width = 0.2, height = 0.5) # 调整九段线小地图的大小\\n# 显示最终的拼图\\nfigure
添加指北针和比例尺
# 通过 ggspatial 包来添加指北针\\n# install.packages(\\"ggspatial\\")\\n# 在 ggplot2 中,可以通过 ggspatial 包来添加指北针\\n# ggplot2 本身提供了添加比例尺的功能\\n## 填充地图绘制\\nmap <- ggplot() +\\n geom_sf(data = china, aes(fill = gdp), size = 0.5, color = \\"black\\") + # 绘制中国地图并填充颜色\\n geom_sf(data = nine_sf) + # 绘制九段线\\n coord_sf(ylim = c(1869414.769862395, 7187874.74616931), crs = 3857) + # 设置坐标范围和投影\\n scale_fill_gradient(name = \\"人均GDP(万元)\\", # 设置填充颜色的图例标题\\n low = \\"yellow\\", # 低值颜色\\n high = \\"red\\", # 高值颜色\\n n.breaks = 6, # 图例分段数\\n guide = guide_legend(keywidth = 1.5, keyheight = 1.5)) + # 设置图例的宽度和高度\\n labs(title = \\"2023年全国34个省市人均GDP\\") + # 设置图表标题\\n annotation_north_arrow(location = \\"tl\\", which_north = \\"false\\",\\n style = north_arrow_fancy_orienteering) + #添加指北针\\n annotation_scale(location = \\"bl\\") + #添加比例尺\\n theme(legend.position = \\"right\\", # 设置图例位置\\n plot.title = element_text(hjust = 0.5) , # 设置标题居中\\n panel.grid.major = element_blank(), # 去掉主要网格线\\n panel.grid.minor = element_blank(), # 去掉次要网格线\\n axis.text.x = element_blank(), # 去掉X轴(经度)标签\\n axis.text.y = element_blank(), # 去掉Y轴(纬度)标签\\n axis.ticks.x = element_blank(), # 去掉X轴(经度)刻度线\\n axis.ticks.y = element_blank() # 去掉Y轴(纬度)刻度线\\n )\\nmap
# 安装ggcor包
# install.packages(\\"devtools\\")
# library(devtools)
#devtools::install_git(\\"https://gitee.com/kingjames23/ggcor_1\\")
# 加载ggcor包,这是一个用于创建相关性矩阵可视化的R包\\nlibrary(ggcor)\\nlibrary(ggplot2)\\n# 显示quickcor函数的所有参数,用于查看函数的用法和可用参数\\nargs(quickcor)\\n# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\n# mtcars是R中内置的数据集,包含了汽车的燃油消耗和其他变量\\nquickcor(mtcars) + \\n # 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色\\n geom_colour() +\\n # 设置颜色填充的比例尺,使用彩虹色的反转来创建颜色渐变\\n scale_fill_gradientn(colours=rev(rainbow(100))) +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))\\nrainbow() 是 R 中的一个函数,用于生成一系列颜色的调色板。这个函数非常适合用来创建多彩的颜色序列,特别是在需要可视化数据时为不同的数据点或类别分配不同颜色的情况下。
colours=
Color Palettes\\nDescription\\nCreate a vector of n contiguous colors.\\nUsage\\nhcl.colors(n, palette = \\"viridis\\", alpha = NULL, rev = FALSE, fixup = TRUE)\\nhcl.pals(type = NULL)\\nrainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n,\\n alpha, rev = FALSE)\\nheat.colors(n, alpha, rev = FALSE)\\nterrain.colors(n, alpha, rev = FALSE)\\ntopo.colors(n, alpha, rev = FALSE)\\ncm.colors(n, alpha, rev = FALSE)\\nrainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1) / n, alpha = 1)\\n# 参数说明\\n# n:一个整数,指定要生成的颜色数量。\\n# s:饱和度,取值范围在 [0, 1] 之间,默认值为 1(完全饱和)。\\n# v:亮度,取值范围在 [0, 1] 之间,默认值为 1(最亮)。\\n# start:起始色调,以弧度表示,默认从 0 开始,即红色。\\n# end:结束色调,以弧度表示,默认根据 n 的值来计算,确保颜色分布均匀。\\n# alpha:透明度,取值范围在 [0, 1] 之间,默认值为 1(不透明)。
# 加载ggcor包,这是一个用于创建相关性矩阵可视化的R包\\nlibrary(ggcor)\\nlibrary(ggplot2)\\n# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\nquickcor(mtcars) +\\n # 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色\\n geom_colour() +\\n # 使用scale_fill_gradient2函数设置颜色填充的比例尺,创建颜色渐变\\n scale_fill_gradient2(low = \\"blue\\", mid = \\"white\\", high = \\"red\\", midpoint = 0, limit = c(-1, 1), space = \\"Lab\\", name = \\"Correlation\\") +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
设置了颜色渐变的参数,包括low(低值颜色)、mid(中间值颜色)、high(高值颜色)以及midpoint(中间点的值)
scale_colour_gradient {ggplot2} |
---|
scale_colour_gradien
Gradient colour scales\\nDescription\\nscale_*_gradient creates a two colour gradient (low-high), scale_*_gradient2 creates a diverging colour gradient (low-mid-high), scale_*_gradientn creates a n-colour gradient. For binned variants of these scales, see the color steps scales.\\nUsage\\nscale_colour_gradient(\\n name = waiver(),\\n ...,\\n low = \\"#132B43\\",\\n high = \\"#56B1F7\\",\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"colour\\"\\n)\\nscale_fill_gradient(\\n name = waiver(),\\n ...,\\n low = \\"#132B43\\",\\n high = \\"#56B1F7\\",\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"fill\\"\\n)\\nscale_colour_gradient2(\\n name = waiver(),\\n ...,\\n low = muted(\\"red\\"),\\n mid = \\"white\\",\\n high = muted(\\"blue\\"),\\n midpoint = 0,\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n transform = \\"identity\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"colour\\"\\n)\\nscale_fill_gradient2(\\n name = waiver(),\\n ...,\\n low = muted(\\"red\\"),\\n mid = \\"white\\",\\n high = muted(\\"blue\\"),\\n midpoint = 0,\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n transform = \\"identity\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"fill\\"\\n)\\nscale_colour_gradientn(\\n name = waiver(),\\n ...,\\n colours,\\n values = NULL,\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"colour\\",\\n colors\\n)\\nscale_fill_gradientn(\\n name = waiver(),\\n ...,\\n colours,\\n values = NULL,\\n space = \\"Lab\\",\\n na.value = \\"grey50\\",\\n guide = \\"colourbar\\",\\n aesthetics = \\"fill\\",\\n colors
# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\n# mtcars是R中内置的数据集,包含了汽车的燃油消耗和其他变量\\nquickcor(mtcars) +\\n # 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色\\n geom_colour() +\\n # 添加数值型文本,显示每个单元格的相关系数数值\\n # aes(num = r) 指定了文本内容为相关系数r\\n geom_number(aes(num = r)) +\\n # 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变\\n # 这里使用彩虹色的反转来表示相关性的强度\\n # 注意:scale_fill_gradientn 可能不是ggplot2中的函数,这里假设它是正确的\\n scale_fill_gradientn(colours = rev(rainbow(100))) +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
当quickcor函数中的cor.test参数设置为TRUE时,会为相关性矩阵中的每个单元格执行显著性测试,这为添加显著性标志提供了基础
geom_mark
Significant marks Geom\\nDescription\\nSignificant marks Geom\\nUsage\\ngeom_mark(\\n mapping = NULL,\\n data = NULL,\\n stat = \\"identity\\",\\n position = \\"identity\\",\\n ...,\\n nudge_x = 0,\\n nudge_y = 0,\\n digits = 2,\\n nsmall = 2,\\n sig.level = c(0.05, 0.01, 0.001),\\n mark = c(\\"*\\", \\"**\\", \\"***\\"),\\n sig.thres = NULL,\\n sep = \\"\\",\\n parse = FALSE,\\n na.rm = FALSE,\\n show.legend = NA,\\n inherit.aes = TRUE\\n)\\ngeom_mark2(...)
# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\n# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试\\nquickcor(mtcars, cor.test = TRUE) +\\n # 添加颜色几何图层,根据相关系数的大小为相关性矩阵中的每个单元格着色\\n geom_colour() +\\n # 添加标记几何图层,显示相关系数及显著性\\n # geom_mark() 会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性\\n geom_mark() +\\n # 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变\\n # 这里使用彩虹色的反转来表示相关性的强度\\n scale_fill_gradientn(colours = rev(rainbow(100))) +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
1.方形
# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\n# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试\\nquickcor(mtcars, cor.test = TRUE) +\\n # 添加方形几何图层,用于显示相关性矩阵中的单元格\\n geom_square() +\\n # 添加标记几何图层,显示相关系数及显著性\\n # geom_mark() 会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性\\n geom_mark() +\\n # 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变\\n # 这里使用彩虹色的反转来表示相关性的强度\\n scale_fill_gradientn(colours = rev(rainbow(100))) +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
2.星形
# 使用mtcars数据集调用quickcor函数,计算并展示相关性矩阵\\n# cor.test = TRUE 表示为相关性矩阵中的每个单元格执行显著性测试\\nquickcor(mtcars, cor.test = TRUE) +\\n # 添加方形几何图层,用于显示相关性矩阵中的单元格\\n geom_star() +\\n # 添加标记几何图层,显示相关系数及显著性\\n # geom_mark() 会在每个单元格中添加一个标记,通常用于显示相关系数的值和显著性\\n geom_mark() +\\n # 使用scale_fill_gradientn函数设置颜色填充的比例尺,创建颜色渐变\\n # 这里使用彩虹色的反转来表示相关性的强度\\n scale_fill_gradientn(colours = rev(rainbow(100))) +\\n # 调整主题元素,特别是x轴底部的文本,使其水平并右对齐\\n theme(axis.text.x.bottom = element_text(angle = 0, hjust = 1))
还可以画饼图、环图、圆圈图等
# geom_star() +
# geom_circle2() +
# geom_pie2() +
geom_ring() +
library(ggplot2)\\nlibrary(ggcor)\\n# 使用quickcor函数生成mtcars数据集的相关性矩阵图,并执行相关性检验\\n# cor.test = TRUE 参数指定在每个单元格中显示相关性检验的结果\\nquickcor(mtcars, cor.test = TRUE) + \\n # 添加方形几何元素表示下三角部分的数据(不包括对角线)\\n geom_square(data = get_data(type = \\"lower\\", show.diag = FALSE)) + \\n # 在上三角部分添加标记(不包括对角线),大小为2.5\\n geom_mark(data = get_data(type = \\"upper\\", show.diag = FALSE), size = 2.5) + \\n # 添加一条斜率为-1,截距为12的参考线\\n geom_abline(slope = -1, intercept = 12) +\\n # 设置颜色填充,这里使用了反向的彩虹色谱\\n scale_fill_gradientn(colours = rev(rainbow(100)))
# 加载所需的库\\nlibrary(ggcor)\\nlibrary(tidyverse)\\n# 使用内置的mtcars数据集\\nmt <- mtcars\\n# 从mtcars中选取特定列创建两个子集\\ndf1 <- mt[, c(\'mpg\', \'qsec\', \\"gear\\")] # 第一个子集:mpg, qsec, gear\\ndf2 <- mt[, c(\'cyl\', \'disp\', \'hp\', \'drat\', \'wt\', \'vs\', \'am\', \\"carb\\")] # 第二个子集:其他变量\\n# 绘制df2内部变量间的完整相关性图,并添加方形样式\\np1 <- ggcor::quickcor(df2, type = \\"full\\") +\\n geom_square()\\n# 绘制df2内部变量间的相关性图,仅显示上三角部分,并添加圆圈标记和对角线\\np2 <- quickcor(df2, cor.test = TRUE) + # 执行相关性测试\\n geom_circle2(data = get_data(type = \\"lower\\", show.diag = FALSE)) + # 圆形标记\\n geom_mark(data = get_data(type = \\"upper\\", show.diag = FALSE), size = 2.5) + # 上三角标记\\n geom_abline(slope = -1, intercept = 8) # 添加斜率为-1的直线\\n# 计算df1与df2之间的相关性,并进行格式化\\nlink_cor <- correlate(df1, df2, cor.test = TRUE) %>%\\n as_cor_tbl() %>%\\n select(spec = .row.names, env = .col.names, r, p.value) %>%\\n mutate(\\n rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf), labels = c(\\"< 0.2\\", \\"0.2 - 0.4\\", \\">= 0.4\\")), # 相关系数分段\\n pd = cut(p.value, breaks = c(-Inf, 0.01, 0.05, Inf), labels = c(\\"< 0.01\\", \\"0.01 - 0.05\\", \\">= 0.05\\")) # p值分段\\n )\\n# 绘制df2内部变量间的上三角相关性图,并添加链接线\\np3 <- quickcor(df2, type = \\"upper\\", cor.test = TRUE) + # 仅显示上三角\\n geom_square() + # 方形样式\\n geom_mark(size = 2.5) + # 标记\\n ggcor::anno_link(data = link_cor, aes(color = pd, size = rd)) + # 添加链接线\\n scale_size_manual(values = c(0.5, 1, 2)) + # 手动设置大小\\n scale_fill_gradient2(midpoint = 0.5, low = \\"#80B1D3\\", mid = \\"white\\", high = \\"#8214A0\\", space = \\"Lab\\") + # 填充色渐变\\n scale_fill_gradientn(colours = rev(rainbow(100))) + # 另一种填充色方案\\n theme(axis.text.x.top = element_text(angle = 0, hjust = 1)) # 调整X轴顶部文本角度\\n# 显示图表\\np1\\np2\\np3
# 加载所需的包\\nlibrary(ambient) # 用于生成随机相关矩阵\\nlibrary(ggcor) # 用于绘制相关性热图\\nlibrary(dplyr) # 提供管道操作符 %>% \\nlibrary(ggplot2) # 用于绘图和颜色渐变\\n# 生成100个样本、8个变量的随机相关矩阵,并使用管道操作符将结果传递给下一个函数\\nrand_correlate(100, 8) %>% \\n # 使用quickcor函数绘制圆形相关性热图,启用聚类和打开角度为45度\\n quickcor(circular = TRUE, cluster = TRUE, open = 45) + \\n # 设置颜色为白色,大小为0.125\\n geom_colour(colour = \\"white\\", size = 0.125) + \\n # 添加行树状图以显示行之间的层次聚类关系\\n anno_row_tree() + \\n # 添加列树状图以显示列之间的层次聚类关系\\n anno_col_tree() + \\n # 设置x轴参数\\n set_p_xaxis() + \\n # 设置y轴参数\\n set_p_yaxis() +\\n # 设置填充颜色渐变,这里使用了反向的彩虹色谱\\n scale_fill_gradientn(colours = rev(rainbow(100)))
# 加载所需的包\\nlibrary(linkET)\\nlibrary(ggplot2)\\n# 计算mtcars的相关矩阵\\nmtcars_corr <- cor(mtcars)\\n# 设置相关性图的样式\\nset_corrplot_style()\\n# 绘制mtcars数据集的相关性图\\np <- qcorrplot(mtcars_corr, is_corr = TRUE) + # 使用相关矩阵,并设置is_corr参数\\n geom_square() + # 添加方形标记\\n scale_fill_gradientn(colours = rev(rainbow(100))) + # 使用反转的彩虹色谱\\n ggtitle(\\"Correlation Matrix of mtcars Dataset\\") + # 添加图表标题\\n labs(x = \\"Variables\\", y = \\"Variables\\") + # 添加轴标签\\n theme(\\n legend.position = \\"right\\", # 将图例放在右侧\\n plot.title = element_text(hjust = 0.5), # 居中对齐标题\\n axis.text.x = element_text(angle = 45, hjust = 1) # 调整X轴文本角度\\n )\\n# 显示图表\\nprint(p)
# 加载必要的包\\nlibrary(linkET)\\nlibrary(ggplot2)\\nlibrary(vegan)\\n# 载入数据集\\ndata(\\"varespec\\")\\ndata(\\"varechem\\")\\n# 计算varespec与varechem之间的相关性矩阵\\ncorrelation_matrix <- cor(varespec[1:30], varechem, method = \\"pearson\\")\\n# 绘制qcorrplot\\nqcorrplot(correlation_matrix, is_corr = TRUE) + # 设置is_corr参数\\n geom_square() +\\n scale_fill_gradientn(colours=rev(rainbow(100))) # 使用彩虹色谱\\nis_corr = TRUE被明确地传递给qcorrplot函数,以表明输入数据确实是一个相关矩阵。同时,我们确保了scale_fill_gradientn只被调用一次,这样就不会出现重复定义填充颜色刻度的问题。
# 使用varespec数据集的前30行创建下三角qcorrplot\\nvarespec_correlation_matrix <- cor(varespec[1:30], method = \\"pearson\\")\\nqcorrplot(varespec_correlation_matrix, type = \\"lower\\", is_corr = TRUE) + # 设置is_corr参数\\n geom_square() +\\n scale_fill_gradientn(colours=rev(rainbow(100))) # 使用彩虹色谱
1.热图
# 加载必要的包\\nlibrary(linkET)\\nlibrary(ggplot2)\\nlibrary(vegan)\\nlibrary(dplyr)\\n# 从vegan包中加载varechem和varespec数据集\\ndata(\\"varechem\\", package = \\"vegan\\")\\ndata(\\"varespec\\", package = \\"vegan\\")\\n# 执行Mantel检验\\n# varespec和varechem是进行Mantel检验的数据集\\n# spec_select参数用来指定不同的物种组\\nmantel <- mantel_test(varespec, varechem,\\n spec_select = list(Spec01 = 1:7, Spec02 = 8:18, Spec03 = 19:37, Spec04 = 38:44)) %>%\\n # 根据Mantel\'s r值将数据分段\\n mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf), labels = c(\\"< 0.2\\", \\"0.2 - 0.4\\", \\">= 0.4\\")),\\n # 根据Mantel\'s p值将数据分段\\n pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf), labels = c(\\"< 0.01\\", \\"0.01 - 0.05\\", \\">= 0.05\\")))\\n# 绘制下三角相关性图\\nqcorrplot(correlate(varechem), type = \\"lower\\", diag = FALSE) +\\n # 添加方形表示\\n geom_square() +\\n # 添加连接线,颜色根据Mantel\'s p值,大小根据Mantel\'s r值\\n geom_couple(aes(colour = pd, size = rd), data = mantel, curvature = nice_curvature()) +\\n # 设置填充颜色渐变\\n scale_fill_gradientn(colours=rev(rainbow(100))) +\\n # 手动设置点的大小\\n scale_size_manual(values = c(0.5, 1, 2)) +\\n # 手动设置线条的颜色\\n scale_colour_manual(values = color_pal(3)) +\\n # 自定义图例\\n guides(size = guide_legend(title = \\"Mantel\'s r\\", override.aes = list(colour = \\"grey35\\"), order = 2),\\n colour = guide_legend(title = \\"Mantel\'s p\\", override.aes = list(size = 3), order = 1),\\n fill = guide_colorbar(title = \\"Pearson\'s r\\", order = 3))
2.设置图例中相关性系数的显示范围
在使用qcorrplot绘制相关性图时,如果你想要设置图例中相关性系数的显示范围,可以通过scale_fill_gradientn函数来控制。这个函数允许你自定义颜色渐变,并且可以指定颜色对应的相关性系数范围。
# 加载必要的包\\nlibrary(dplyr)\\nlibrary(ggplot2)\\nlibrary(vegan)\\nlibrary(linkET) # 确保linkET包已加载\\n# 载入数据集\\ndata(\\"varechem\\", package = \\"vegan\\")\\n# 计算varechem之间的相关性矩阵\\ncorrelation_matrix <- cor(varechem, method = \\"pearson\\")\\n# 绘制下三角相关性图\\nqcorrplot(correlation_matrix, type = \\"lower\\", diag = FALSE) +\\n geom_square() +\\n scale_fill_gradientn(\\n colours = rev(rainbow(100)), # 使用彩虹色谱\\n limits = c(-1, 1), # 设置相关性系数的显示范围\\n breaks = seq(-1, 1, by = 0.2), # 设置刻度线的位置\\n guide = guide_colorbar(title = \\"Pearson\'s r\\") # 设置图例标题\\n )
3.更多定制选项
qcorrplot(correlation_matrix, type = \\"lower\\", diag = FALSE) +\\n geom_square() +\\n scale_fill_gradientn(\\n colours = rev(rainbow(100)),\\n limits = c(-1, 1),\\n breaks = seq(-1, 1, by = 0.2),\\n guide = guide_colorbar(\\n title = \\"Pearson\'s r\\",\\n title.position = \\"top\\", # 将标题放在顶部\\n title.hjust = 0.5, # 标题水平居中\\n barwidth = 20, # 颜色条宽度\\n barheight = 400, # 颜色条高度\\n direction = \\"horizontal\\" # 水平方向的颜色条\\n )\\n )
长数据与宽数据的转化在R语言中就是利用tidyr包的pivot_longer和pivot_wider。
我也是在学习R语言时第一次听说长数据和宽数据的。
好像是说:长数据应该是比宽数据更具有利用价值的。
使用iris数据集进行长宽数据转换示例
将宽数据iris转换为长数据(使用tidyr包)
iris数据框原始数据:
R代码:
library(tidyr)
iris_long <- pivot_longer(iris,
cols = c(\\"Sepal.Length\\", \\"Sepal.Width\\", \\"Petal.Length\\", \\"Petal.Width\\"),
names_to = \\"Measurement\\",
values_to = \\"Value\\")
head(iris_long)
View(iris_long)
转化之后的宽数据:
将长数据iris_long转换回宽数据(使用tidyr包)我们也可以尝试一下。
鸢尾花:
别人怎么看你, 和你毫无关系,你要怎么活 ,也和别人毫无关系。
","description":"能否分享一些让你豁然开朗的句子? 郝籽骥的回答\\n\\n\\n别人怎么看你, 和你毫无关系,你要怎么活 ,也和别人毫无关系。","guid":"https://www.zhihu.com/question/580956751/answer/43794058591","author":"郝籽骥","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-29T08:04:23.319Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言随记","url":"https://zhuanlan.zhihu.com/p/9791707715","content":"library(tidyverse) serie <- tribble(~nom_oms, ~estim, ~muertes, ~contam, ~valor, \\"NOM\\", \\"NOM-10\\", 70455, \\"PM[2.5]\\", \\"10 µg/m³\\", \\"OMS\\", \\"OMS-5\\", 96921, \\"PM[2.5]\\", \\"5 µg/m³\\", \\"NOM\\", \\"NOM-36\\", 25966, \\"PM[10]\\", \\"36 µg/m³\\", \\"OMS\\", \\"OMS-15\\", 87045, \\"PM[10]\\", \\"15 µg/m³\\", \\"NOM\\", \\"NOM-40\\", 15010, \\"NO[2]\\", \\"0.021 ppb\\", \\"OMS\\", \\"OMS-10\\", 66087, \\"NO[2]\\", \\"0.005 ppb\\", \\"OMS\\", \\"OMS-60\\", 45114, \\"O[3]\\", \\"…","description":"library(tidyverse) serie <- tribble(~nom_oms, ~estim, ~muertes, ~contam, ~valor, \\"NOM\\", \\"NOM-10\\", 70455, \\"PM[2.5]\\", \\"10 µg/m³\\", \\"OMS\\", \\"OMS-5\\", 96921, \\"PM[2.5]\\", \\"5 µg/m³\\", \\"NOM\\", \\"NOM-36\\", 25966, \\"PM[10]\\", \\"36 µg/m³\\", \\"OMS\\", \\"OMS-15\\", 87045, \\"PM[10]\\", \\"15 µg/m³\\", \\"NOM\\", \\"NOM-40\\"…","guid":"https://zhuanlan.zhihu.com/p/9791707715","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-29T07:47:34.365Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成华为发布几款搭载华为新的自主操作系统的手机定制字体","url":"https://zhuanlan.zhihu.com/p/9758820858","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/9758820858","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-29T05:59:22.468Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"感受R语言生成欧洲议会批准范德莱恩第二任任命定制字体","url":"https://zhuanlan.zhihu.com/p/9746888954","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/9746888954","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-29T04:43:07.946Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言做生存分析,cox.zph()结果如何看?-医学统计数据分析的回答:探究变量之间的关系是数据挖掘中的一个基本分析内容,对于常规的离散型或者连续型变量,有...","url":"https://www.zhihu.com/question/276015663/answer/43564805293","content":"R语言做生存分析,cox.zph()结果如何看?探究变量之间的关系是数据挖掘中的一个基本分析内容,对于常规的离散型或者连续型变量,有很多的方法可以用于挖掘其中的关系,比如线性回归,逻辑回归等等。然而有一类数据非常的特殊,用回归分析等常用手段出处理这类数据并不合适,这类数据就是生存数据。
常规数据在表示时,只需要一个值,比如患者的血压,性别等数据,不是连续型就是离散型;生存数据则有两个值,第一个是生存时间,可以看做是一个连续型的变量,第二个是生存事件,可以看做是离散型的变量。
生存可以指人或动物的存活(相对于死亡),可以是患者的病情正处于缓解状态(相对于再次复发或恶化),还可以是某个系统或产品正常工作(相对于失效或故障),甚至可是是客户的流失与否等。
生存分析是研究生存时间的分布规律,以及生存时间和相关因素之间关系的一种统计分析方法。
在生存分析中,研究的主要对象是寿命超过某一时间的概率。还可以描述其他一些事情发生的概率,例如产品的失效、出狱犯人第一次犯罪、失业人员第一次找到工作等等。
在某些领域的分析中,常常用追踪的方式来研究事物的发展规律,比如研究某种药物的疗效,手术后的存活时间,某件机器的使用寿命等。
在医学研究中,常常用追踪的方式来研究事物发展的规律。如,了解某药物的疗效,了解手术的存活时间,了解某医疗仪器设备使用寿命等等。
今天我们来探讨一下最常用的Kaplan-Meier法,用SPSS和R语言分别实现。
SPSS中生存分析的步骤,想必大家都比较熟练哈,在此简单介绍一下主要步骤:
那么在R语言中进行生存分析,主要有哪些步骤呢?
比如分析治疗后的患者生存情况,在观测期间,可以看到不同患者的存活时间,这个值就是生存时间,而有些患者可能在观察期内出现死亡,复发等情况,死亡或者复发则称之为事件。
生存分析是既考虑结果又考虑生存时间的一种统计方法,并可充分利用截尾数据所提供的不完全信息,对生存时间的分布特征进行描述,对影响生存时间的主要因素进行分析。
Kaplan-Meier生存曲线(KM曲线)被用于估计不同组别之间的生存函数差异,在R中通常使用R包survminer和survival绘制生存曲线。
R包survminer和survival做生存分析核心函数:
survfit()\\n主要三个变量: 时间、状态、分组\\n需要注意的是,函数结局变量status: censoring status 1=censored,2=dead\\n用2来代表有结局发生,用1来代表删失数据。
今天我们仍以如下示例数据为例,探讨一下R语言生存曲线的画法。
我们先在RStudio中打开示例数据
我们先在RStudio中打开示例数据
#加载所需要的包library(survival)library(\\"ggplot2\\")
library(\\"ggpubr\\")
library(\\"survminer\\")
library(\\"openxlsx\\")
library(\\"survminer\\")
#我们先在桌面创建一个生存分析的文件夹,载入生存分析、画图、读取Excel数据的包。
data <- read.xlsx(\\"C:\\\\\\\\Users\\\\\\\\L\\\\\\\\Desktop\\\\\\\\示例数据.xlsx\\")
f0 <- survfit(Surv(时间,否结局) ~ 指标8,data = data)
#打开数据,并将此次生存分析赋值给fit
summary(f0)
#对此次分析结果建立表格查看(如下图:)
#然后我们可以用plot()函数将此次生存分析曲线画出来:
plot(f0,xlab = \\"时间\\", ylab = \\"生存概率\\", main = \\"生存曲线\\")
可以看到比较单调,我们并没有对颜色等进行规定,因此也不显示。
那么下边是今天的主角1:ggsurvplot()函数。
ggsurvplot(f0,data=data, size = 1, # 改变曲线的尺寸
linetype =\'strata\', # 改变曲线的类型
break.time.by = 10, # 更改x轴的时间间隔
palette = c(\\"RED\\",\\"BLUE\\"), # 自定义调色板
http://conf.int = TRUE, # 添加置信区间
pval = TRUE # 添加p值
)
通过上述语句及注释,我们可以看到如下图所示的生存曲线。
COX模型
Cox模型,也称为Cox回归模型或比例风险模型(Proportional Hazards Model),是由英国统计学家David Cox于1972年提出的一种半参数回归模型。该模型主要用于生存分析,能够同时分析多个风险因素对生存时间的影响,适用于医学随访研究和其他需要分析生存数据的领域。
基本概念和原理
Cox模型的基本形式为:
[ h(t) = h_0(t) \\\\exp(\\\\beta_1 x_1 + \\\\beta_2 x_2 + \\\\dots + \\\\beta_p x_p) ]
其中,( h(t) ) 表示在时间 ( t ) 的危险率函数,( h_0(t) ) 是基准危险率函数,( \\\\beta_1, \\\\beta_2, ..., \\\\beta_p ) 是偏回归系数,( x_1, x_2, ..., x_p ) 是自变量。
应用场景和优缺点
Cox模型在医学研究中有广泛的应用,主要用于以下几个方面:
生存分析:研究患者的生存时间及其相关因素。
风险因素分析:确定与特定事件(如死亡、疾病复发)相关的风险因素。
生存率比较:比较不同组群之间的生存率。
预后评估:评估影响患者预后的因素,为治疗决策提供依据。
调整分析:调整其他变量的影响,更准确地评估特定因素对生存时间的影响。
与其他统计模型的比较
与其他统计模型相比,Cox模型具有以下特点:
因变量类型:Cox模型的因变量为生存资料(包含二分类结局变量和连续型生存时间变量),而多重线性回归的因变量为数值型变量,Logistic回归的因变量为分类或顺序型变量。
数据分布要求:Cox模型对数据分布不作要求,而多重线性回归和Logistic回归则要求数据分布分别近似正态分布和二项分布。
允许数据删失:Cox模型允许删失值,而多重线性回归和Logistic回归不允许。
我们今天以示例数据为例,探讨一下拟合COX模型的基本过程。
#cox模型拟合
f1<-coxph(Surv(时间,结局)~指标1,data)
summary(f1)
survfit_result1 <- survfit(f1, data = data)
plot(survfit_result1,xlab = \\"时间\\", ylab = \\"生存概率\\", main = \\"生存曲线\\")
f2<-coxph(Surv(时间,结局)~指标1+指标2,data)
summary(f2)
survfit_result2 <- survfit(f2, data = data)
plot(survfit_result2,xlab = \\"时间\\", ylab = \\"生存概率\\", main = \\"生存曲线\\")
f3<-coxph(Surv(时间,结局)~指标1+指标2+指标3,data)
summary(f3)
survfit_result3 <- survfit(f3, data = data)
plot(survfit_result3,xlab = \\"时间\\", ylab = \\"生存概率\\", main = \\"生存曲线\\")
#比较f1,f2,f3这3个模型决策曲线的区别
newdata<-list(data,data,data)
cox.tcdca(f1,f2,f3,newdata=newdata)
#自定义一个时间
cox.tcdca(f1,f2,f3,newdata=newdata,timepoint = 30)
#分面绘图
cox.tcdca(f1,f1,f1,newdata=newdata,
timepoint=c(20,30,40))
#增加标题
cox.tcdca(f1,f1,f1,newdata=newdata,
timepoint=c(20,30,40),
Splitface=c(\\"20天\\",\\"30天\\",\\"40天\\"))
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!
太老了
","description":"求助!为什么打不开镜像? 知乎用户的回答\\n\\n\\n太老了","guid":"https://www.zhihu.com/question/3966359228/answer/31403049335","author":"知乎用户","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T09:32:51.946Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学r语言?-kaptainrenna的回答:1.中国医生/医学生很多都学习过R语言,是站在把它当做一种统计/绘图软件的角度来理解的。R可以帮助提高分析...","url":"https://www.zhihu.com/question/4139067549/answer/31376986480","content":"临床大一是不是应该自学r语言?1.中国医生/医学生很多都学习过R语言,是站在把它当做一种统计/绘图软件的角度来理解的。R可以帮助提高分析效率,增加图片的可视性。归根结底,R能帮你发文章,发SCI。
2.但由于中国医生受自身编程能力限制,他们最终沦为了调包侠,只能改改某个参数,甚至一点找BUG的能力都没有。甚至更多的人连调包侠都做不了,只能掏几万块钱买四区垃圾生信文章了。
3.题主是一名大一医学生,家里又有颇有竞争力的内部关系,以后大概率还是做医生的。那就别学什么R语言实战了,你要干什么,让自己成为一名程序员降维打击文科医学生们吗,没必要没必要。根据自己的经济实力选择购买一些专门为医生学R制作的网课,学习套路刷几篇SCI文章,包括但不限于TCGA,GEO,MIMIC等等,也别瞧不起frontiers,本科生发frontiers可以了。
这样等你保研的时候,你舅舅帮你运作的时候底气也更硬点。
","description":"临床大一是不是应该自学r语言? kaptainrenna的回答\\n\\n\\n1.中国医生/医学生很多都学习过R语言,是站在把它当做一种统计/绘图软件的角度来理解的。R可以帮助提高分析效率,增加图片的可视性。归根结底,R能帮你发文章,发SCI。\\n\\n2.但由于中国医生受自身编程能力限制,他们最终沦为了调包侠,只能改改某个参数,甚至一点找BUG的能力都没有。甚至更多的人连调包侠都做不了,只能掏几万块钱买四区垃圾生信文章了。\\n\\n3.题主是一名大一医学生,家里又有颇有竞争力的内部关系,以后大概率还是做医生的。那就别学什么R语言实战了,你要干什么,让自己成为一名程序员降维打击文科医学生们吗…","guid":"https://www.zhihu.com/question/4139067549/answer/31376986480","author":"kaptainrenna","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T09:05:31.956Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"扩增子分析|microeco包妙用之网络属性(拓扑结构)及多网络比较一行代码获取结果(meconetcomp包)","url":"https://zhuanlan.zhihu.com/p/6862855063","content":"一、内容介绍 meconetcomp包是microeco包的扩展包。两个包均由福建农林大学姚敏杰教授团队开发,专注于扩增子测序数据的集成分析。Meconetcomp发表在国人创建的顶级生物信息学期刊iMeta中。其中meconetcomp包提供了一种比较微生物共现网络的流程,具有较高的灵活性和可扩展性,可以帮助用户高效地比较不同组样本或不同构建方法构建的网络。(一行代码可实现某个特性分析),因此,掌握了这套代码,可让你快速通关网络分析。 [图片] mecon…","description":"一、内容介绍 meconetcomp包是microeco包的扩展包。两个包均由福建农林大学姚敏杰教授团队开发,专注于扩增子测序数据的集成分析。Meconetcomp发表在国人创建的顶级生物信息学期刊iMeta中。其中meconetcomp包提供了一种比较微生物共现网络的流程,具有较高的灵活性和可扩展性,可以帮助用户高效地比较不同组样本或不同构建方法构建的网络。(一行代码可实现某个特性分析),因此,掌握了这套代码,可让你快速通关网络分析。 [图片] mecon…","guid":"https://zhuanlan.zhihu.com/p/6862855063","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T08:13:41.862Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学r语言?-QQQ的回答:从题目看,你舅舅已经拥有了医院相当的资源,并且给你指出来让你学R,那就说明: 1. 他有搞临床研究的想法;2. 他有意...","url":"https://www.zhihu.com/question/4139067549/answer/31274168238","content":"临床大一是不是应该自学r语言?从题目看,你舅舅已经拥有了医院相当的资源,并且给你指出来让你学R,那就说明: 1. 他有搞临床研究的想法;2. 他有意让你发展科室临床科研这一块儿;3. 他只是想让你帮他发文章,评职称拿奖金起飞……
且不说情况3。有人有资源,你在科室会如鱼得水,舒服滋润。会科研的医生,职称、奖金、地位……
当然,最重要的前提是你至少不抵触临床研究这一块儿。
那么,我的建议是如果你喜欢临床,喜欢治病救人,钻研技术,大可不必开始那么早,学得早忘得快,需要时再学就行了,R入门比拿筷子简单。不过对于一个优秀的临床医生,能够在Lancet,BMJ,NEJM上与同行交流学术共同提升技术是很愉快的体验 。
如果你对临床研究确实感兴趣(话说,感兴趣的话为什么不去卫统呢。。。),你可以早点开始学习统计,你才大一,很多东西没经历,一开始就奔着实用主义的结果去,容易学得体无完肤。不建议花时间去各种尝试,东西太多容易回不了头,打好基础很重要,沿着统计——试验设计这条线,后面补一下流行病学和临床研究的一些基本概念就可以了。(下游科研,统计学不需要纠结公式和推导。理解第一!理解第一!理解第一!另外,试验设计对于临研很重要,你可以看到抽样、方差分析、线性回归理论都是怎么发展来的;P.S. 不要排斥试验设计的农林生态属性,临研的方法都来自于农林生态,流统这些弟弟只是真子集之一)。
最后,不管怎么说,在医院科室会一点临床研究,都是很好的,至少你可以调病历回顾性研究水文章……任何一方面,R绝对是临研最好的帮手,简单自由广泛无限可能。但说句题外话,假如,你又厌倦了医院这种拘拘束束看脸看天的生活,想去工业界混,那么在R之外,你还要拿起SAS——业界金标准。
最不重要的,放到最后 : 做决定前,多问问多看看,多了解你可能踏入的是一道什么样的门,才能走得又远又自信,而不是在生活的激流中、淘汰的悬崖边,从自己混乱的人生碎片中挑挑拣拣洗洗在知乎上给别人一点“建议”。
祝题主能走自己的路,不要成为“工具人”。
","description":"临床大一是不是应该自学r语言? QQQ的回答\\n\\n\\n从题目看,你舅舅已经拥有了医院相当的资源,并且给你指出来让你学R,那就说明: 1. 他有搞临床研究的想法;2. 他有意让你发展科室临床科研这一块儿;3. 他只是想让你帮他发文章,评职称拿奖金起飞……\\n\\n且不说情况3。有人有资源,你在科室会如鱼得水,舒服滋润。会科研的医生,职称、奖金、地位……\\n\\n当然,最重要的前提是你至少不抵触临床研究这一块儿。\\n\\n那么,我的建议是如果你喜欢临床,喜欢治病救人,钻研技术,大可不必开始那么早,学得早忘得快,需要时再学就行了,R入门比拿筷子简单。不过对于一个优秀的临床医生,能够在Lancet…","guid":"https://www.zhihu.com/question/4139067549/answer/31274168238","author":"QQQ","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T07:17:53.144Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学r语言?-林大郎的回答:你有个好舅舅。r语言实战是好书。不过我更建议你学hadley 的r for data science,对数据科学有个初步认识,还能顺...","url":"https://www.zhihu.com/question/4139067549/answer/31234383139","content":"临床大一是不是应该自学r语言?你有个好舅舅。r语言实战是好书。不过我更建议你学hadley 的r for data science,对数据科学有个初步认识,还能顺便学习tidyverse版本的r。网上有免费的开源版。结合免费的大模型ai看下来应该很容易。如果英语有困难可以看张敬信的那本r语言编程。再学习introduction to statistical learning in r(islr), 一是可以学习统计二是可以熟悉一下base-r。绝大部分医生,最缺的就是基本的编程和统计学素养。导致一些很简单的东西都能卡主科研进度,一有问题就抓瞎。学点编程和统计,以后搞科研省钱是次要的,更关键是不会被人忽悠浪费时间。
","description":"临床大一是不是应该自学r语言? 林大郎的回答\\n\\n\\n你有个好舅舅。r语言实战是好书。不过我更建议你学hadley 的r for data science,对数据科学有个初步认识,还能顺便学习tidyverse版本的r。网上有免费的开源版。结合免费的大模型ai看下来应该很容易。如果英语有困难可以看张敬信的那本r语言编程。再学习introduction to statistical learning in r(islr), 一是可以学习统计二是可以熟悉一下base-r。绝大部分医生,最缺的就是基本的编程和统计学素养。导致一些很简单的东西都能卡主科研进度,一有问题就抓瞎…","guid":"https://www.zhihu.com/question/4139067549/answer/31234383139","author":"林大郎","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T06:32:32.953Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"临床大一是不是应该自学r语言?-今天也不想当医生的回答:不用学,用人工智能直接解决科研问题中百分之95的需求,想学的话我教你,200块。让你快速掌握。听老古...","url":"https://www.zhihu.com/question/4139067549/answer/31210421660","content":"临床大一是不是应该自学r语言?不用学,用人工智能直接解决科研问题中百分之95的需求,想学的话我教你,200块。让你快速掌握。听老古董的,你只能当老古董。
","description":"临床大一是不是应该自学r语言? 今天也不想当医生的回答\\n\\n\\n不用学,用人工智能直接解决科研问题中百分之95的需求,想学的话我教你,200块。让你快速掌握。听老古董的,你只能当老古董。","guid":"https://www.zhihu.com/question/4139067549/answer/31210421660","author":"今天也不想当医生","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T06:06:44.492Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验MATLAB生成多种形状五颜六色轮廓图","url":"https://zhuanlan.zhihu.com/p/6750176072","content":"figure [X,Y,Z] = meshgrid(-4:.2:4); V = X.*exp(-X.^2-Y.^2-Z.^2); [xsurf,ysurf] = meshgrid(-2:0.2:2); zsurf = xsurf.^2-ysurf.^2; sl = slice(X,Y,Z,V,xsurf,ysurf,zsurf); sl.EdgeColor = \\"green\\"; title(\'Slice Visualization of Data\') xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') [图片] sl.EdgeColor = \\"cyan\\"; [图片] sl.EdgeColor = \\"cyan\\"; colormap jet [图片] colormap turbo [图片] [X,Y,Z] = meshgrid(-4:.2:4); V = X.*exp(-X.^2-Y.^2-Z.^2); xsl…","description":"figure [X,Y,Z] = meshgrid(-4:.2:4); V = X.*exp(-X.^2-Y.^2-Z.^2); [xsurf,ysurf] = meshgrid(-2:0.2:2); zsurf = xsurf.^2-ysurf.^2; sl = slice(X,Y,Z,V,xsurf,ysurf,zsurf); sl.EdgeColor = \\"green\\"; title(\'Slice Visualization of Data\') xlabel(\'x\') ylabel(\'y\') zlabel(\'z\') [图片] sl…","guid":"https://zhuanlan.zhihu.com/p/6750176072","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T05:08:44.800Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言如何连接MySQL数据库并读取信息(基于阿里巴巴国际站运营数据分析)","url":"https://zhuanlan.zhihu.com/p/6754499241","content":"这里默认大家已经用爬虫抓取到了阿里巴巴国际站的数据信息,建设有自己的数据库和基于阿里国际站客户详情的数据表。 【本文是入门级分享,无论是否有编程基础,只要按下面步骤操作均可实现效果,下一篇我们会更详细的使用R来深度分析阿里国际站数据指标之间的相关性】 R语言连接MySQL数据库的方法很多,今天我们分享其中一种。 首先加载RMariaDB程序包,如没有,可以先安装程序包安装后可以直接加载: #安装程序包 install.packa…","description":"这里默认大家已经用爬虫抓取到了阿里巴巴国际站的数据信息,建设有自己的数据库和基于阿里国际站客户详情的数据表。 【本文是入门级分享,无论是否有编程基础,只要按下面步骤操作均可实现效果,下一篇我们会更详细的使用R来深度分析阿里国际站数据指标之间的相关性】 R语言连接MySQL数据库的方法很多,今天我们分享其中一种。 首先加载RMariaDB程序包,如没有,可以先安装程序包安装后可以直接加载: #安装程序包 install.packa…","guid":"https://zhuanlan.zhihu.com/p/6754499241","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T00:52:58.039Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成CNN将砍掉它的明星主持报道定制字体","url":"https://zhuanlan.zhihu.com/p/6751193624","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6751193624","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T00:30:54.189Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成《巴黎人报》关于里昂的一篇报道定制字体","url":"https://zhuanlan.zhihu.com/p/6726256369","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6726256369","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-14T00:17:57.643Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"请问三体中写的飞船自生态系统就是大型飞船在外太空可自行生产阳光 氧气 淡水的可行性这技术能实现吗?-西山听雨的回答:这个生态系统的技术,现在就可以实现,只...","url":"https://www.zhihu.com/question/3833296892/answer/30589561712","content":"请问三体中写的飞船自生态系统就是大型飞船在外太空可自行生产阳光 氧气 淡水的可行性这技术能实现吗?这个生态系统的技术,现在就可以实现,只是需要较多的能原来维持。
要实现一个生态自循环,最关键的是能源,或者说是电力。
一般假设都是 从 核能,核聚变反应堆作为基础。当然裂变堆也不是不行。但是要提供充足的电力。这是基础。
然后所谓阳光,基本都是人工照明模拟的,现在大城市周边有不少的新农业科技基地,在楼内用人造光源种植 生菜等植物,人造光可以满足植物生长的能量需求。所以阳光没问题。
淡水肯定是循环用的,现在的空间站基本都是用的水循环体系,人体跟生物排出的水分,经过过滤系统 重新变成干净的淡水。
而有电力,有淡水,就可以电解产出氧气跟氢气。氧气供人类呼吸,而氢气可以成为聚变的原料。
所以自生态不难,只是能够维持有效运行的有效期是多久~
","description":"请问三体中写的飞船自生态系统就是大型飞船在外太空可自行生产阳光 氧气 淡水的可行性这技术能实现吗? 西山听雨的回答\\n\\n\\n这个生态系统的技术,现在就可以实现,只是需要较多的能原来维持。\\n\\n要实现一个生态自循环,最关键的是能源,或者说是电力。\\n\\n一般假设都是 从 核能,核聚变反应堆作为基础。当然裂变堆也不是不行。但是要提供充足的电力。这是基础。\\n\\n然后所谓阳光,基本都是人工照明模拟的,现在大城市周边有不少的新农业科技基地,在楼内用人造光源种植 生菜等植物,人造光可以满足植物生长的能量需求。所以阳光没问题。\\n\\n淡水肯定是循环用的,现在的空间站基本都是用的水循环体系…","guid":"https://www.zhihu.com/question/3833296892/answer/30589561712","author":"西山听雨","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T11:54:32.079Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Python 在将 R 绞杀至死吗 ?-鹿吃蛋挞的回答:R代表的那种自由随性的学术生态位,是Python代表的数据科学绞杀不死的,两者的生态位虽有重叠,但并不重合。","url":"https://www.zhihu.com/question/620095226/answer/30456052585","content":"Python 在将 R 绞杀至死吗 ?R代表的那种自由随性的学术生态位,是Python代表的数据科学绞杀不死的,两者的生态位虽有重叠,但并不重合。
","description":"Python 在将 R 绞杀至死吗 ? 鹿吃蛋挞的回答\\n\\n\\nR代表的那种自由随性的学术生态位,是Python代表的数据科学绞杀不死的,两者的生态位虽有重叠,但并不重合。","guid":"https://www.zhihu.com/question/620095226/answer/30456052585","author":"鹿吃蛋挞","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T08:59:53.896Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"R语言如何读取csv格式表格文件数据?","url":"https://zhuanlan.zhihu.com/p/6625421039","content":"R语言读取csv文件有很多种方法,这里我们举例介绍一个最基础的read.csv()函数。 read.csv()函数基本语法: read.csv(file,header,sep,quote,na.strings) # file:指定CSV文件路径; # header:默认值是TRUE,确定数据第一行是否为列名称; # sep:字段分隔符,默认是逗号“,”; # quote:包围字符的引用符号,默认是“”; # na.strings:将哪些字符串识别为NA值,默认为“NA”;、 # fill:如果是TRUE,且文件中某些行的变量数…","description":"R语言读取csv文件有很多种方法,这里我们举例介绍一个最基础的read.csv()函数。 read.csv()函数基本语法: read.csv(file,header,sep,quote,na.strings) # file:指定CSV文件路径; # header:默认值是TRUE,确定数据第一行是否为列名称; # sep:字段分隔符,默认是逗号“,”; # quote:包围字符的引用符号,默认是“”; # na.strings:将哪些字符串识别为NA值,默认为“NA”;、 # fill:如果是TRUE,且文件中某些行的变量数…","guid":"https://zhuanlan.zhihu.com/p/6625421039","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T06:43:53.993Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成特朗普总统关键人事任命定制字体","url":"https://zhuanlan.zhihu.com/p/6607660920","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6607660920","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T05:32:38.413Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"Tidyverse为何优雅?","url":"https://zhuanlan.zhihu.com/p/6595402960","content":"引用: [文章: 【Tidyverse优雅编程】房贷计算:R语言生成还款计划表] # 案例:贷款50000元,年利率5%,还款期限为12期。 library(dplyr) # 等额本金 calulate_equal_principal <- function(loan_amount, year_rate, periods) { each_period_principal <- loan_amount / periods payment <- data.frame(期数 = 1:period, 每期还款本金 = each_period_principal, 每期还款利息 = sapply(1:period, function(i) (loan_amount - (i-1…","description":"引用: [文章: 【Tidyverse优雅编程】房贷计算:R语言生成还款计划表] # 案例:贷款50000元,年利率5%,还款期限为12期。 library(dplyr) # 等额本金 calulate_equal_principal <- function(loan_amount, year_rate, periods) { each_period_principal <- loan_amount / periods payment <- data.frame(期数 = 1:period, 每期还款本金 = each_period_principal,…","guid":"https://zhuanlan.zhihu.com/p/6595402960","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T05:08:59.593Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成《经济学人》:特朗普和马斯克有一个很大共同点定制字体","url":"https://zhuanlan.zhihu.com/p/6602872734","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6602872734","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T05:02:23.900Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"TissueEnrich:基因集的组织特异性富集分析R包","url":"https://zhuanlan.zhihu.com/p/6600428821","content":"科研数据分析中,如何知道你的差异基因或得到的基因列表富集在什么组织中?今天分享的 TissueEnrich包可以轻松帮你解答这个问题。我们一起来学习一下这个R包。 [图片] TissueEnrich包简介TissueEnrich包用于计算一组输入基因中的组织特异性基因富集程度。例如,用户可以输入RNA-Seq数据中表达量最高的基因或基因共表达模块,以确定在这些数据集中的基因富集到了哪些组织特异性。组织特异性基因的定义来源于对人类蛋白质图谱(HPA)(Uhl…","description":"科研数据分析中,如何知道你的差异基因或得到的基因列表富集在什么组织中?今天分享的 TissueEnrich包可以轻松帮你解答这个问题。我们一起来学习一下这个R包。 [图片] TissueEnrich包简介TissueEnrich包用于计算一组输入基因中的组织特异性基因富集程度。例如,用户可以输入RNA-Seq数据中表达量最高的基因或基因共表达模块,以确定在这些数据集中的基因富集到了哪些组织特异性。组织特异性基因的定义来源于对人类蛋白质图谱(HPA)(Uhl…","guid":"https://zhuanlan.zhihu.com/p/6600428821","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T04:44:46.904Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"【R机器学习】处理不平衡数据集的七种方法","url":"https://zhuanlan.zhihu.com/p/6521901555","content":"本文大体上是重现这篇文章: 最强总结,机器学习中处理不平衡数据集的五种方法!! 1 不平衡数据不平衡数据集是指在分类任务中, 不同类别的样本数量差异显著的数据集,通常表现为少数类样本远少于多数类样本。这样的数据集在现实生活中很常见,比如欺诈检测、医疗诊断、故障预测等场景。 不平衡数据的问题在不平衡的数据集中,多数类别主导着模型的预测,导致少数类别的预测性能较差。 例如,如果 95% 的数据被标记为 0 类,则将…","description":"本文大体上是重现这篇文章: 最强总结,机器学习中处理不平衡数据集的五种方法!! 1 不平衡数据不平衡数据集是指在分类任务中, 不同类别的样本数量差异显著的数据集,通常表现为少数类样本远少于多数类样本。这样的数据集在现实生活中很常见,比如欺诈检测、医疗诊断、故障预测等场景。 不平衡数据的问题在不平衡的数据集中,多数类别主导着模型的预测,导致少数类别的预测性能较差。 例如,如果 95% 的数据被标记为 0 类,则将…","guid":"https://zhuanlan.zhihu.com/p/6521901555","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T03:40:48.829Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求助:r包安装后为什么library不到?-Kevin的回答:上面的error没看到吗?ggplot2没有安装成功,查看报错原因,重新安装","url":"https://www.zhihu.com/question/3932927470/answer/29999582681","content":"求助:r包安装后为什么library不到?上面的error没看到吗?ggplot2没有安装成功,查看报错原因,重新安装
","description":"求助:r包安装后为什么library不到? Kevin的回答\\n\\n\\n上面的error没看到吗?ggplot2没有安装成功,查看报错原因,重新安装","guid":"https://www.zhihu.com/question/3932927470/answer/29999582681","author":"Kevin","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-13T01:26:59.326Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验MATLAB生成五颜六色的速度图","url":"https://zhuanlan.zhihu.com/p/6511536724","content":"[X,Y] = meshgrid(-2:0.25:2,-1:0.2:1); Z = X.*exp(-X.^2-Y.^2); [U,V,W] = surfnorm(X,Y,Z); s = quiver3(X,Y,Z,U,V,W,0.5); s.Color = \'cyan\'; hold on u = surf(X,Y,Z); u.EdgeColor =\'cyan\'; colormap hsv view(-35,45) axis([-2 2 -1 1 -0.6 0.6]) hold off [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] 开发工具:MATLAB 2022b和微信","description":"[X,Y] = meshgrid(-2:0.25:2,-1:0.2:1); Z = X.*exp(-X.^2-Y.^2); [U,V,W] = surfnorm(X,Y,Z); s = quiver3(X,Y,Z,U,V,W,0.5); s.Color = \'cyan\'; hold on u = surf(X,Y,Z); u.EdgeColor =\'cyan\'; colormap hsv view(-35,45) axis([-2 2 -1 1 -0.6 0.6]) hold off [图片] [图片] [图片] [图片] [图片] [图片] [图片]…","guid":"https://zhuanlan.zhihu.com/p/6511536724","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T15:18:33.780Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成唐纳德·特朗普总统选择卢比奥担任未来国务卿消息定制字体","url":"https://zhuanlan.zhihu.com/p/6509230737","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6509230737","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T15:04:08.903Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?-指给我敌人在哪里的回答:噗,这些所谓基础科研包,90年代早期在量化企业里早就是实现很久的per...","url":"https://www.zhihu.com/question/527922200/answer/29732146431","content":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗?噗,这些所谓基础科研包,90年代早期在量化企业里早就是实现很久的perl or c/c++商用工具,2000年在学术界却还是刚有小社区推广的工具。
与其说是优雅,不如说宽客用perl和c/c++实现了财富自由,工程规模约等于打通了世界大运河和大空域并让黄金和宝石在里面自动化运输、飞行、瞬移交易的具体复杂真实模型,教授才开始在学校研究怎么用python和r算只能哄学生一元买课的简单模型。
","description":"你们觉得 Python 在 R 语言 tidyverse 面前,有资格称为优雅吗? 指给我敌人在哪里的回答\\n\\n\\n噗,这些所谓基础科研包,90年代早期在量化企业里早就是实现很久的perl or c/c++商用工具,2000年在学术界却还是刚有小社区推广的工具。\\n\\n\\n\\n\\n与其说是优雅,不如说宽客用perl和c/c++实现了财富自由,工程规模约等于打通了世界大运河和大空域并让黄金和宝石在里面自动化运输、飞行、瞬移交易的具体复杂真实模型,教授才开始在学校研究怎么用python和r算只能哄学生一元买课的简单模型。","guid":"https://www.zhihu.com/question/527922200/answer/29732146431","author":"指给我敌人在哪里","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T14:16:41.863Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"有没有Python和Markdown混排的工具或者软件?-52中文编程的回答:markdown编辑器_零基础中文python实例","url":"https://www.zhihu.com/question/27173908/answer/29595618416","content":"有没有Python和Markdown混排的工具或者软件?命令窗里运行library(),就会显示包安装的路径和已安装包的列表
","description":"求助:r包安装后为什么library不到? 我得出去吃饭的回答\\n\\n\\n命令窗里运行library(),就会显示包安装的路径和已安装包的列表","guid":"https://www.zhihu.com/question/3932927470/answer/29524819540","author":"我得出去吃饭","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T09:35:16.147Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求助:r包安装后为什么library不到?-dave xu的回答:“non-zero exit status” = 没安装成功","url":"https://www.zhihu.com/question/3932927470/answer/29157384006","content":"求助:r包安装后为什么library不到?“non-zero exit status” = 没安装成功
","description":"求助:r包安装后为什么library不到? dave xu的回答\\n\\n\\n“non-zero exit status” = 没安装成功","guid":"https://www.zhihu.com/question/3932927470/answer/29157384006","author":"dave xu","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T02:56:08.964Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"求助:r包安装后为什么library不到?-林大郎的回答:不是,那么大个ERROR摆在那不就说明这些依赖没装上,ggplot2没安装成功。你把ERROR后面的依赖挨个安装看看是...","url":"https://www.zhihu.com/question/3932927470/answer/29142440429","content":"求助:r包安装后为什么library不到?不是,那么大个ERROR摆在那不就说明这些依赖没装上,ggplot2没安装成功。你把ERROR后面的依赖挨个安装看看是哪个安装出问题了对症下药才行呢
","description":"求助:r包安装后为什么library不到? 林大郎的回答\\n\\n\\n不是,那么大个ERROR摆在那不就说明这些依赖没装上,ggplot2没安装成功。你把ERROR后面的依赖挨个安装看看是哪个安装出问题了对症下药才行呢","guid":"https://www.zhihu.com/question/3932927470/answer/29142440429","author":"林大郎","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T02:42:56.621Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成五颜六色的房子模型","url":"https://zhuanlan.zhihu.com/p/6314574660","content":"library(igraph) library(RColorBrewer) g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value = brewer.pal(5,\\"Paired\\")) plot(g) [图片] g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value = brewer.pal(5,\\"Set1\\")) [图片] g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value = brewer.pal(5,\\"Set2\\")) [图片] [图片] [图片] [图片] 开发工具:RStudio和微信Alt+A截屏工具 参考文献: R语言绘制著名的网络连通图_画连通图的网站-CSDN博客","description":"library(igraph) library(RColorBrewer) g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value = brewer.pal(5,\\"Paired\\")) plot(g) [图片] g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value = brewer.pal(5,\\"Set1\\")) [图片] g <- make_graph(\\"House\\")%>%set_vertex_attr(\\"color\\", value…","guid":"https://zhuanlan.zhihu.com/p/6314574660","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-12T00:15:21.121Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成Andrej Karpathy关于语言大模型的最新见解定制字体","url":"https://zhuanlan.zhihu.com/p/6288423057","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6288423057","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-11T14:33:25.385Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成深度学习高级软件工程师Clive Chan和OpenAI 研究科学家最新见解定制字体","url":"https://zhuanlan.zhihu.com/p/6286133863","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6286133863","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-11T14:11:26.496Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null},{"title":"体验R语言生成十一月十一号(双十一)法国与以色列之间足球比赛新闻报道定制字体","url":"https://zhuanlan.zhihu.com/p/6284993600","content":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only need to run this once, but it will take a few minutes to finish font_import() # device argument also supports \\"pdf\\" and…","description":"# Recall to load the Pacifico font as shown in the previous sections #------------------------------------------------------------------- # install.packages(\\"ggplot2\\") library(ggplot2) library(extrafont) font_import() # Import all the .ttf files from your system # You will only…","guid":"https://zhuanlan.zhihu.com/p/6284993600","author":"","authorUrl":null,"authorAvatar":null,"publishedAt":"2024-11-11T13:57:36.863Z","media":null,"categories":null,"attachments":null,"extra":null,"language":null}],"readCount":552,"subscriptionCount":2,"analytics":{"feedId":"79400515584645169","updatesPerWeek":4,"subscriptionCount":2,"latestEntryPublishedAt":null,"view":0}}')