Skip to content

Instantly share code, notes, and snippets.

@ccwang002
Last active December 20, 2015 22:39
Show Gist options
  • Save ccwang002/6206325 to your computer and use it in GitHub Desktop.
Save ccwang002/6206325 to your computer and use it in GitHub Desktop.
Demo usage of Python, R exchange data through file I/O using IPython and `rpy2.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "raw",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<!-- Title Page -->\n",
"<div class='titlepage'>\n",
" <h3 style=\"margin-bottom: 20px;\">Hello,</h3> \n",
" <h1 style=\"margin-bottom: 60px; line-height: 1.1em\">R and IPython</h1>\n",
" <p>\n",
" <i>Introduce interactive Python terminal <a href=\"http://ipython.org/\" target='_blank'>IPython</a> and <a href='http://rpy.sourceforge.net/rpy2.html'>rpy2</a></i>\n",
" </p>\n",
" <p style=\"margin-bottom: 40px;\" class='fragment'>okay... also <a href='http://lab.hakim.se/reveal-js/'>reveal.js</a></p>\n",
" <p><small>\n",
" Made by <a href=\"http://about.me/lbwang\" target='_blank'>Liang Bo Wang</a> under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/3.0/\">CC 3.0 BY-SA</a> license.\n",
" </small></p>\n",
"\n",
" <p><small><kbd>\u2190</kbd> <kbd>\u2192</kbd> <kbd>PgUp</kbd> <kbd>PgDn</kbd> <kbd>Space</kbd> to navigate, <kbd>f</kbd> for fullscreen and <kbd>Esc</kbd> for an overview.</small></p>\n",
"</div>"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u524d\u7f6e\u4f5c\u696d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u4f7f\u7528 Python 3.3.2 \u505a\u793a\u7bc4\uff0c\u9700\u8981\u5c07 IPython 1.0.0, rpy2, R \u7b49\u5b89\u88dd\u5b8c\u6210\u3002\n",
"\n",
"\u5176\u4e2d [IPython] \u6709\u8a31\u591a\u76f8\u4f9d\u5957\u4ef6\uff0c\u8acb\u53c3\u8003\u5b98\u7db2\u65b9\u5f0f\u5b89\u88dd\u3002\u4ee5\u4e0b\u662f\u6211\u8a8d\u70ba\u53ef\u80fd\u6703\u82b1\u4e00\u9ede\u6642\u9593\u8a2d\u5b9a\u7684\u76f8\u4f9d\u5957\u4ef6\uff1a\n",
"\n",
"```\n",
"matplotlib==1.2.1\n",
"numpy==1.7.1\n",
"pyzmq==13.1.0\n",
"rpy2==2.3.6\n",
"```\n",
"\n",
"\u57fa\u672c\u4e0a\u5b89\u88dd\u90fd\u4e0d\u6703\u6709\u592a\u5927\u56f0\u96e3\uff0c\u672c\u74b0\u5883\u4ea6\u53ef\u4ee5\u76f4\u63a5\u79fb\u690d\u81f3 Python 2.7.5 \u4e0a\u3002\n",
"\n",
"[IPython]: http://ipython.org/"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u5feb\u901f\u5b89\u88dd"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"IPython \u672c\u8eab\u53ef\u4ee5\u7528\u4ee5\u4e0b\u65b9\u5f0f\u5b89\u88dd\u8207\u6aa2\u67e5\uff1a\n",
"\n",
"```\n",
"% easy_install-3.3 ipython[all]\n",
"% iptest # test if properly installed\n",
"```\n",
"\n",
"\u5982\u679c\u8981\u7522\u751f Reveal.js HTML5 slides\uff0c\u9700\u8981\u4f7f\u7528 `ipython` \u5e95\u4e0b\u7684\u526f\u6307\u4ee4 `nbconvert` \uff1a\n",
"\n",
"```\n",
"% ipython nbconvert --to slides demo_rpy2_ipy.ipynb\n",
"\n",
"# host the page soon after the notebook conversion\n",
"% ipython nbconvert --to slides --post serve demo_rpy2_ipy.ipynb\n",
"\n",
"# or use python module to do so\n",
"% python -m SimpleHttpServer .\n",
"% python3 -m http.server .\n",
"```\n"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u57f7\u884c"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u672c\u9801\u6240\u6709\u7a0b\u5f0f\u78bc\u5734\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u5169\u7a2e\u65b9\u5f0f\u57f7\u884c\uff1a\n",
"\n",
"```\n",
"% ipython3 # run in terminal\n",
"% ipython3 notebook # how this doc generated\n",
"```\n",
"\n",
"\u4f7f\u7528 `notebook` \u6703\u5728\u672c\u6a5f\u958b\u4e00\u500b Http Server \u65bc `localhost:8888` \u4e2d\u3002 \n",
"\u5373\u53ef\u4ee5\u5c0d Python \u4e0b\u6307\u4ee4\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sys\n",
"print(sys.version)\n",
"print('hi')"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"3.3.2 (default, Aug 2 2013, 17:02:08) \n",
"[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.24)]\n",
"hi\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u672c\u6b21\u4f7f\u7528\u4e4b\u8cc7\u6599"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!ls -al NTU*.txt"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"-rw-r--r--@ 1 liang staff 3478 8 12 02:11 NTU_B02new_sexratio.raw.txt\r\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!head -n 20 NTU_B02new_sexratio.raw.txt"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"# \u672c\u8cc7\u6599\u7531 PaiChiou (\u57fa\u9686\u91d1\u57ce\u6b66) \u65bc 2013.08.08 \u5206\u4eab\r\n",
"# \u6587\u7ae0\u4ee3\u78bc(AID): #1I0eeAVU (NTU) [ptt.cc] [\u5206\u4eab] B02\u7d1a\u7537\u5973\u6bd4\u4f8b\u8868\r\n",
"# \u6587\u7ae0\u7db2\u5740: http://www.ptt.cc/bbs/NTU/M.1375898122.A.7DE.html\r\n",
"# \u8cc7\u6599\u7c21\u8ff0\uff1a\r\n",
"# \u53f0\u7063\u5927\u5b78 B02\u7d1a(2013.09\u5165\u5b78) \u65b0\u751f\u7537\u5973\u6bd4\u4f8b\u8868\r\n",
"#\r\n",
"# TODO:\r\n",
"# * \u6027\u5225\u6bd4\u6309\u9662\u7cfb\u4f5c\u5716\r\n",
"# * \u4eba\u6578\u6309\u9662\u7cfb\u4f5c\u5716\r\n",
"# * \u806f\u8abc\u4eba\u6578\u914d\u5c0d\u554f\u984c\r\n",
"#\r\n",
" \u7cfb\u6240 \u7e3d\u4eba\u6578 \u7537 \u5973 \u6027\u5225\u6bd4\r\n",
"\r\n",
"\u4e2d\u6587\u7cfb 60\u4eba 13 47 27.7\r\n",
"\u5716\u8cc7\u7cfb 52\u4eba 12 40 30\r\n",
"\u5916\u6587\u7cfb 122\u4eba 31 91 34.1\r\n",
"\u8b77\u7406\u7cfb 51\u4eba 13 38 34.2\r\n",
"\u65e5\u6587\u7cfb 56\u4eba 16 40 40\r\n",
"\u793e\u6703\u7cfb 48\u4eba 15 33 45.5\r\n",
"\u751f\u50b3\u7cfb 54\u4eba 17 37 45.9\r\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u53ef\u4ee5\u4f7f\u7528 Python \u4f86\u8655\u7406\u4e00\u958b\u59cb\u7684\u8cc7\u6599\u8f49\u63db\uff0c\u56e0\u70ba R \u9019\u908a\u7684\u8a2d\u8a08\u8f03\u4e00\u822c\u8a9e\u8a00\u4e0d\u540c\uff0c\u4e0d\u592a\u597d\u4e0a\u624b\uff1a \n",
"\uff08\u4f7f\u7528 Python 3 \u53ef\u4ee5\u6e1b\u5c11 Unicode \u8655\u7406\u7684\u554f\u984c\uff09"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data_f = open('NTU_B02new_sexratio.raw.txt')\n",
"data = [row for row in data_f if not row.startswith('#')]\n",
"data_f.close()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import re\n",
"re.split(' +', '\u5916\u6587\u7cfb 122\u4eba 31 91 34.1')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"['\u5916\u6587\u7cfb', '122\u4eba', '31', '91', '34.1']"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data = [re.split(' +', r.strip()) for r in data if r.strip()]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"\u628a\u7e3d\u4eba\u6578\u7684\u300c\u4eba\u300d\u53bb\u9664\u6389"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for row in data[1:]:\n",
" row[1] = row[1][:-1]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data[:9]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"[['\u7cfb\u6240', '\u7e3d\u4eba\u6578', '\u7537', '\u5973', '\u6027\u5225\u6bd4'],\n",
" ['\u4e2d\u6587\u7cfb', '60', '13', '47', '27.7'],\n",
" ['\u5716\u8cc7\u7cfb', '52', '12', '40', '30'],\n",
" ['\u5916\u6587\u7cfb', '122', '31', '91', '34.1'],\n",
" ['\u8b77\u7406\u7cfb', '51', '13', '38', '34.2'],\n",
" ['\u65e5\u6587\u7cfb', '56', '16', '40', '40'],\n",
" ['\u793e\u6703\u7cfb', '48', '15', '33', '45.5'],\n",
" ['\u751f\u50b3\u7cfb', '54', '17', '37', '45.9'],\n",
" ['\u8077\u6cbb\u7cfb', '43', '14', '29', '48.3']]"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import csv\n",
"with open('out.csv', 'w') as out_f:\n",
" writer = csv.writer(out_f)\n",
" writer.writerows(data)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!head out.csv"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\u7cfb\u6240,\u7e3d\u4eba\u6578,\u7537,\u5973,\u6027\u5225\u6bd4\r",
"\r\n",
"\u4e2d\u6587\u7cfb,60,13,47,27.7\r",
"\r\n",
"\u5716\u8cc7\u7cfb,52,12,40,30\r",
"\r\n",
"\u5916\u6587\u7cfb,122,31,91,34.1\r",
"\r\n",
"\u8b77\u7406\u7cfb,51,13,38,34.2\r",
"\r\n",
"\u65e5\u6587\u7cfb,56,16,40,40\r",
"\r\n",
"\u793e\u6703\u7cfb,48,15,33,45.5\r",
"\r\n",
"\u751f\u50b3\u7cfb,54,17,37,45.9\r",
"\r\n",
"\u8077\u6cbb\u7cfb,43,14,29,48.3\r",
"\r\n",
"\u653f\u6cbb\u7cfb\u570b\u95dc\u7d44,64,21,43,48.8\r",
"\r\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 1,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u8b80\u5165 R \u4e2d"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u8f09\u5165 `rpy2`\uff0c\u8b93 IPython \u53ef\u4ee5\u548c R kernel \u6e9d\u901a\uff0c\u4f46\u6211\u5011\u5148\u4e0d\u8655\u7406\u76f4\u63a5\u50b3\u503c\u7684\u554f\u984c\uff0c\u800c\u662f\u6539\u4ee5\u6a94\u6848 I/O \u7684\u65b9\u5f0f"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load_ext rmagic"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u4f7f\u7528 `%%R` \u6240\u6a19\u8a18\u7684 Cell \u5373\u662f\u7531 R \u4f86\u57f7\u884c"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R\n",
"data <- read.csv('out.csv')\n",
"print(head(data))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"text": [
" \u7cfb\u6240 \u7e3d\u4eba\u6578 \u7537 \u5973 \u6027\u5225\u6bd4\n",
"1 \u4e2d\u6587\u7cfb 60 13 47 27.7\n",
"2 \u5716\u8cc7\u7cfb 52 12 40 30.0\n",
"3 \u5916\u6587\u7cfb 122 31 91 34.1\n",
"4 \u8b77\u7406\u7cfb 51 13 38 34.2\n",
"5 \u65e5\u6587\u7cfb 56 16 40 40.0\n",
"6 \u793e\u6703\u7cfb 48 15 33 45.5\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"R kernel \u7684\u8b8a\u6578\u6703\u4fdd\u7559\u4f4f"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R\n",
"print(ls())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"text": [
"[1] \"data\"\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u56e0\u70ba R \u756b\u5716\u8981\u986f\u793a\u4e2d\u6587\u9700\u8981\u4e00\u4e9b\u8a2d\u5b9a\uff0c\u5c31\u5148\u5168\u90e8\u63db\u6210\u82f1\u6587\u3002"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R\n",
"colnames(data) <- c(\"major\", \"total\", \"male\", \"female\", \"sex_ratio\")\n",
"data$major <- paste(\"major-\", 1:nrow(data), sep='')\n",
"data <- head(data) # only plot a part of data\n",
"print(data)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"text": [
" major total male female sex_ratio\n",
"1 major-1 60 13 47 27.7\n",
"2 major-2 52 12 40 30.0\n",
"3 major-3 122 31 91 34.1\n",
"4 major-4 51 13 38 34.2\n",
"5 major-5 56 16 40 40.0\n",
"6 major-6 48 15 33 45.5\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u5728 IPython \u5167\u8981 R \u756b\u5716\u4e5f\u4e0d\u96e3\uff0c\u8a18\u5f97\u628a\u300c\u5716\u300d\u9019\u500b\u7269\u4ef6\u7d66 `print(my_fig_object)` \u5c31\u597d"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R\n",
"barplot(data$total, names.arg=data$major)\n",
"\n",
"# first time, installed ggplot2 package by\n",
"# > install.packages('ggplot2')\n",
"library(ggplot2)\n",
"g <- ggplot(data, aes(x=major, y=total))\n",
"print(g + geom_bar(stat='identity'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"text": [
"Need help? Try the ggplot2 mailing list: http://groups.google.com/group/ggplot2.\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nuOKKQxyO5DakdMFW+uprWr58eWzfvr2vReYRIECAAIFBF8gigN2GNOjjboMECBAg0GGBLALYbUgd\nfhXYPAECBAgMukAWAZyq7r4NadAFbJAAAQIECHRAIIvbkDpQt00SIECAAIGOCmSxB/zZz3429u/f\n3y/EKaecEhdddFG/yy0gQIAAAQJVE8gigNOfn7z11lvj6quvLv4rwoMR/WcMB4t4ToAAAQJVF8gi\ngG+55ZZ4+eWXi6/bbrut6qb6T4AAAQIEDiuQzTngxYsXx65du2L37t2H7bQVCBAgQIBA1QWy2ANO\niKNGjYo77rij6p76T4AAAQIEWhLIZg+4pd5aiQABAgQI1ERAANdkIJVBgAABAtUSEMDVGi+9JUCA\nAIGaCAjgmgykMggQIECgWgICuFrjpbcECBAgUBMBAVyTgVQGAQIECFRLQABXa7z0lgABAgRqIiCA\nazKQyiBAgACBagkI4GqNl94SIECAQE0EBHBNBlIZBAgQIFAtAQFcrfHSWwIECBCoiYAArslAKoMA\nAQIEqiUggKs1XnpLgAABAjUREMA1GUhlECBAgEC1BARwtcZLbwkQIECgJgICuCYDqQwCBAgQqJaA\nAK7WeOktAQIECNREQADXZCCVQYAAAQLVEhDA1RovvSVAgACBmggI4JoMpDIIECBAoFoCArha46W3\nBAgQIFATAQFck4FUBgECBAhUS0AAV2u89JYAAQIEaiIggGsykMogQIAAgWoJCOBqjZfeEiBAgEBN\nBARwTQZSGQQIECBQLQEBXK3x0lsCBAgQqImAAK7JQCqDAAECBKolIICrNV56S4AAAQI1ERDANRlI\nZRAgQIBAtQQEcLXGS28JECBAoCYCArgmA6kMAgQIEKiWgACu1njpLQECBAjUREAA12QglUGAAAEC\n1RIQwNUaL70lQIAAgZoICOCaDKQyCBAgQKBaAgK4WuOltwQIECBQEwEBXJOBVAYBAgQIVEtAAFdr\nvPSWAAECBGoikF0AHzhwIHbs2FETXmUQIECAAIG+BbII4H379sWCBQtiwoQJMXTo0Bg7dmyMHDky\npkyZEsuWLeu75+YSIECAAIEKCxydQ9/nzp0b27Zti9WrV8ekSZOK8N21a1ds2rQp5s2bF3v27Ik5\nc+bk0FV9IECAAAECbRHIYg947dq1sXTp0pg2bVqMGjUqurq6YsyYMTFjxoy4+eabY+XKlW0pViME\nCBAgQCAXgSwCOB1qXrduXZ8mq1atinHjxvW5zEwCBAgQIFBVgSwOQS9atChmz54dS5YsicmTJ8fo\n0aNj586dsXnz5kgXZa1Zs6aqvvpNgAABAgT6FMgigKdPnx4bN26M9evXx9atW4vzwWmvN533nTlz\nZnFIus/eHzTzc5/7XNx5550Hzf3/p9u3b48zzzyzz2VmEiBAgACBwRbIIoBT0cOHD49Zs2b11P/y\nyy/HCy+80HL4ph/8tV/7teKrp5FeD5YvXx4phE0ECBAgQCAHgSzOAacrnv/0T/80LrjgguJc8N13\n3x1vfetb421ve1sRqLt3787BSh8IECBAgEDbBLII4D/+4z+Ohx56KM4///z4zd/8zfj0pz8dKYTT\n4eh0j3DaezURIECAAIE6CWRxCPorX/lKEcDpj2/87//+bzz99NPFLUgJ+jOf+UzMnz8/fumXfqlO\n7mohQIAAgde5QBZ7wKeeemp87WtfK658vv/+++Mb3/hGz7B8+9vfjve97309zz0gQIAAAQJ1EMhi\nD/j666+PT37yk7Fly5a49tpr47nnnosUyu95z3vigQceiPvuu68O1mogQIAAAQI9AlkEcPqLV+nP\nTj777LPxpje9Kfbu3Rv33ntv/PjHPy7+FvSIESN6OuwBAQIECBCog0AWAZwg05+fTOGbpmHDhsWF\nF15YPPYPAQIECBCoo0AW54DrCKsmAgQIECAwkIAAHkjHMgIECBAgUJKAAC4JVrMECBAgQGAgAQE8\nkI5lBAgQIECgJAEBXBKsZgkQIECAwEACAnggHcsIECBAgEBJAgK4JFjNEiBAgACBgQQE8EA6lhEg\nQIAAgZIEBHBJsJolQIAAAQIDCQjggXQsI0CAAAECJQkI4JJgNUuAAAECBAYSEMAD6VhGgAABAgRK\nEhDAJcFqlgABAgQIDCQggAfSsYwAAQIECJQkIIBLgtUsAQIECBAYSEAAD6RjGQECBAgQKElAAJcE\nq1kCBAgQIDCQgAAeSMcyAgQIECBQkoAALglWswQIECBAYCABATyQjmUECBAgQKAkAQFcEqxmCRAg\nQIDAQAICeCAdywgQIECAQEkCArgkWM0SIECAAIGBBATwQDqWESBAgACBkgQEcEmwmiVAgAABAgMJ\nCOCBdCwjQIAAAQIlCQjgkmA1S4AAAQIEBhIQwAPpWEaAAAECBEoSEMAlwWqWAAECBAgMJCCAB9Kx\njAABAgQIlCQggEuC1SwBAgQIEBhIQAAPpGMZAQIECBAoSUAAlwSrWQIECBAgMJCAAB5IxzICBAgQ\nIFCSgAAuCVazBAgQIEBgIAEBPJCOZQQIECBAoCQBAVwSrGYJECBAgMBAAgJ4IB3LCBAgQIBASQIC\nuCRYzRIgQIAAgYEEBPBAOpYRIECAAIGSBARwSbCaJUCAAAECAwlkF8AHDhyIHTt2DNRnywgQIECA\nQOUFsgjgffv2xYIFC2LChAkxdOjQGDt2bIwcOTKmTJkSy5YtqzyyAggQIECAwMECRx88oxPP586d\nG9u2bYvVq1fHpEmTivDdtWtXbNq0KebNmxd79uyJOXPmdKJrtkmAAAECBEoRyGIPeO3atbF06dKY\nNm1ajBo1Krq6umLMmDExY8aMuPnmm2PlypWlFK9RAgQIECDQKYEsAjgdal63bl2fBqtWrYpx48b1\nucxMAgQIECBQVYEsDkEvWrQoZs+eHUuWLInJkyfH6NGjY+fOnbF58+ZIF2WtWbOmqr76TYAAAQIE\n+hTIIoCnT58eGzdujPXr18fWrVuL88Fprzed9505c2ZxSLrP3h8087777ivaOGh28fThhx+Od7zj\nHX0tOuy8e+65J/7rv/7rsOtVYYVGoxGXXnpp8UGnCv3VRwIECNRVIIsATrjDhw+PWbNm9TinC6+G\nDBnScvimH3z7298ep59+ek8bvR88//zzMWLEiN6zWn580003xfnnn39EfWm58UFe8YUXXojFixfH\n5z73uUHess0RIECAQG+BLAL4ySefjBtvvDGuvfbamDhxYnz605+OFStWxP79++Oyyy6Lv/zLvyxu\nT+rd8b4en3TSSZG++prSIe3t27f3teiw84YNGxZnnHFGHHVUFqfMD9vfgVZIh/XTRW4mAgQIEOis\nQBaJkvYw0+Hhd7/73XHLLbcU530feeSR+Pa3vx3PPfdc/P7v/35nlWydAAECBAi0WSCLPeD7778/\n/vu//7vYy73rrruK245OOOGEotQUvtdcc02by9YcAQIECBDorEAWe8Ann3xy3H777YXEWWed9Yqr\nntNtSP0dVu4sna0TIECAAIFXL5DFHvBtt90WH/nIR+Jv/uZv4p3vfGfccMMN8fnPf74455r+Ilba\nQzYRIECAAIE6CWQRwOne3/RnJ7/2ta/Fo48+WpwPPu6444o93w9/+MNx9NFZdLNO464WAgQIEOiw\nQDbJlq7MPeecc4qvDpvYPAECBAgQKF0gi3PApVdpAwQIECBAIDMBAZzZgOgOAQIECLw+BLI5BP36\n4FYlAQK5CaT/CvU73/lObt161f2ZOnVqHHvssa/65/3g4AkI4MGztiUCBDIUuPDCC4sLP4855pgM\ne3dkXdq7d2+kv9zXfVvnkf20tQdbQAAPtrjtESCQlUC64+JjH/tY8X+RZ9WxV9GZ9Gd9039sY6qG\ngHPA1RgnvSRAgACBmgkI4JoNqHIIECBAoBoCArga46SXBAgQIFAzAQFcswFVDgECBAhUQ0AAV2Oc\n9JIAAQIEaiYggGs2oMohQIAAgWoICOBqjJNeEiBAgEDNBARwzQZUOQQIECBQDQEBXI1x0ksCBAgQ\nqJmAv4RVswFtZzmzZs2KPXv2xJAhQ9rZbEfa2rdvX1x66aVxww03dGT7NkqAAIGDBQTwwSKe9wik\n0Lr++uvjDW94Q8+8qj547LHH4qmnnqpq9/WbAIEaCgjgGg6qkgi8GoFnn3020v8MVJfpp37qp6IO\n/8FCXcZDHYcKCOBDTcwh8LoUuOCCC4r/xi79bzpVn9LRm0mTJsWf/dmfVb0U/a+xgACu8eAqjcCR\nCAwfPjyuvPLKGDFixJH8WJbrfve7343Nmzdn2TedItAt4CrobgnfCRAgQIDAIAoI4EHEtikCBAgQ\nINAtIIC7JXwnQIAAAQKDKCCABxHbpggQIECAQLeAAO6W8J0AAQIECAyigAAeRGybIkCAAAEC3QJu\nQ+qW8J0AAQKvI4GlS5fGgw8+GEcfXf0YaDQa8aEPfSguueSSSo1g9eUrxa2zBAgQyENgxYoVce65\n59YigPfu3Rtf/OIXBXAeLy29IECAAIGBBNKe77hx42LMmDEDrVaJZd///vdj5MiRlehr7046B9xb\nw2MCBAgQIDBIAgJ4kKBthgABAgQI9BYQwL01PCZAgAABAoMkIIAHCdpmCBAgQIBAbwEB3FvDYwIE\nCBAgMEgCAniQoG2GAAECBAj0FhDAvTU8JkCAAAECgyQggAcJ2mYIECBAgEBvAQHcW8NjAgQIECAw\nSAICeJCgbYYAAQIECPQWEMC9NTwmQIAAAQKDJCCABwnaZggQIECAQG8BAdxbw2MCBAgQIDBIAgJ4\nkKBthgABAgQI9BbILoAPHDgQO3bs6N1HjwkQIECAQO0Esgjgffv2xYIFC2LChAkxdOjQGDt2bPF/\nO06ZMiWWLVtWO3QFESBAgACBo3MgmDt3bmzbti1Wr14dkyZNKsJ3165dsWnTppg3b17s2bMn5syZ\nk0NX9YEAAQIECLRFIIs94LVr18bSpUtj2rRpMWrUqOjq6ooxY8bEjBkz4uabb46VK1e2pViNECBA\ngACBXASyCOB0qHndunV9mqxatSrGjRvX5zIzCRAgQIBAVQWyOAS9aNGimD17dixZsiQmT54co0eP\njp07d8bmzZsjXZS1Zs2alnxffPHF4nB1Xyvv3r079u/f39ci8wgQIECAwKALZBHA06dPj40bN8b6\n9etj69atxfngY489Nq666qo477zzikPSrcisWLEivvzlL/e56g9+8IM444wz+lxmJgECBAgQGGyB\nLAI4FT18+PCYNWtWT/133HFHEabnn39+z7zDPfjEJz4R6auvafny5bF9+/a+FplHgAABAgQGXSCL\nAD7ppJPi6aeffkXx6dakdPg57dVedNFFbkd6hY4nBAgQIFB1gSwCON3r+8lPfrLYe7366qsL03Tl\nczokvXjx4uK2pKpD6z8BAgQIEOgtkMVV0GeeeWZs2LAhHn/88Zg/f34RuG9+85uLW5ImTpwY6bGJ\nAAECBAjUSSCLPeAEmq58vv322+NLX/pSzJw5M372Z382hgwZUidrtRAgQIAAgR6BLPaAe3rTfHDp\npZdG+sMc6Zzw+PHjey/ymAABAgQI1EYgmz3g3qInnHBC3HPPPb1neUyAAAECBGolkN0ecK10FUOA\nAAECBPoREMD9wJhNgAABAgTKFBDAZepqmwABAgQI9CMggPuBMZsAAQIECJQpIIDL1NU2AQIECBDo\nR0AA9wNjNgECBAgQKFNAAJepq20CBAgQINCPgADuB8ZsAgQIECBQpoAALlNX2wQIECBAoB8BAdwP\njNkECBAgQKBMAQFcpq62CRAgQIBAPwICuB8YswkQIECAQJkCArhMXW0TIECAAIF+BARwPzBmEyBA\ngACBMgUEcJm62iZAgAABAv0ICOB+YMwmQIAAAQJlCgjgMnW1TYAAAQIE+hEQwP3AmE2AAAECBMoU\nEMBl6mqbAAECBAj0IyCA+4ExmwABAgQIlCkggMvU1TYBAgQIEOhHQAD3A2M2AQIECBAoU0AAl6mr\nbQIECBAg0I+AAO4HxmwCBAgQIFCmgAAuU1fbBAgQIECgHwEB3A+M2QQIECBAoEwBAVymrrYJECBA\n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\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n8xzCKmK1yKS/d8Q2gDs6OkQftnZdXV2mfG1tbbYWMfJyYRE5+RErtLENdF9pb28XG8t2BGDIA/Rg\nRD2wOAyt7/FqYrNHVVWV763C3mu4vqvEjAgggAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAAC\nCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgv\nQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb\n30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aU\nEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEE\nEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAg\ngQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIE\ncAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvQADb30aUEAEEEEAggQIEcAIb\nlSohgAACCNgvQADb30aUEAEEEEAggQIEcAIblSohgAACCNgvUB51ETdu3CgPP/xwxmpvuOEGeeed\nd2T58uWp4dOnT5fa2trUa3oQQAABBBBIkkDkAXzKKafInDlzjOGGDRvkqaeekr59+8rq1atl4sSJ\n0tDQYMZVVFQkyZm6IIAAAgggkCEQeQCXlpaKPlpaWmTZsmVy4403mgJt2bJFBgwYYIK4sbFR3AG8\nd+9eefLJJzMKfvbZZ0tVVVXGMJtelJWVSU1NjVRXV9tUrIKUxWnzurq6gqyflaYFbGwD3T6OP/54\n6ejoSBe0SPv0fUM9bGynQjRJr169zGpt9ujq6vJNE3kAOyV9/vnnzdlunz59zCDd6LTT1/PmzZO5\nc+emAlYr2H3n1GElJSVmHlv/aPlsL2MUdo6B8xzFOlnH0QVsbQMtl61lO7pkeEOxyLS13SOWAfzM\nM8+IfvbrdLNmzXJ6pampSdatWyd6JqydHh1fdtllqfHao9McPHgwY5hNL/TMt7m52Zzp21SuQpRF\n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\n"
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"\u518d\u5b58\u56de\u53bb\u7d66 Python \u8655\u7406\u4e5f\u4e0d\u96e3"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R\n",
"write.csv(data, file=\"out_r.csv\", row.names=FALSE) # otherwise an extra index coloumn will be written"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!cat out_r.csv"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\"major\",\"total\",\"male\",\"female\",\"sex_ratio\"\r\n",
"\"major-1\",60,13,47,27.7\r\n",
"\"major-2\",52,12,40,30\r\n",
"\"major-3\",122,31,91,34.1\r\n",
"\"major-4\",51,13,38,34.2\r\n",
"\"major-5\",56,16,40,40\r\n",
"\"major-6\",48,15,33,45.5\r\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"reader = csv.reader(open('out_r.csv'))\n",
"for row in reader:\n",
" print('\\t'.join(row))"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"major\ttotal\tmale\tfemale\tsex_ratio\n",
"major-1\t60\t13\t47\t27.7\n",
"major-2\t52\t12\t40\t30\n",
"major-3\t122\t31\t91\t34.1\n",
"major-4\t51\t13\t38\t34.2\n",
"major-5\t56\t16\t40\t40\n",
"major-6\t48\t15\t33\t45.5\n"
]
}
],
"prompt_number": 18
}
],
"metadata": {}
}
]
}
# 本資料由 PaiChiou (基隆金城武) 於 2013.08.08 分享
# 文章代碼(AID): #1I0eeAVU (NTU) [ptt.cc] [分享] B02級男女比例表
# 文章網址: http://www.ptt.cc/bbs/NTU/M.1375898122.A.7DE.html
# 資料簡述:
# 台灣大學 B02級(2013.09入學) 新生男女比例表
#
# TODO:
# * 性別比按院系作圖
# * 人數按院系作圖
# * 聯誼人數配對問題
#
系所 總人數 男 女 性別比
中文系 60人 13 47 27.7
圖資系 52人 12 40 30
外文系 122人 31 91 34.1
護理系 51人 13 38 34.2
日文系 56人 16 40 40
社會系 48人 15 33 45.5
生傳系 54人 17 37 45.9
職治系 43人 14 29 48.3
政治系國關組 64人 21 43 48.8
人類系 42人 14 28 50
會計系 117人 39 78 50
社工系 58人 20 38 52.6
法律系司法組 58人 20 38 52.6
政治系公行組 57人 21 36 58.3
政治系全體 176人 66 110 60
法律系財法組 58人 23 35 65.7
公衛學系 51人 21 30 70
法律系法學組 62人 26 36 72.2
工管系企管組 71人 30 41 73.2
園藝系 61人 26 35 74.3
國企系 93人 40 53 75.5
政治系政論組 55人 24 31 77.4
歷史系 59人 26 33 78.8
哲學系 45人 20 25 80
動科系 43人 20 23 87
工管系全體 105人 51 54 94.4
農藝系 45人 22 23 95.7
戲劇系 40人 20 20 100
物治系 49人 25 24 104.2
經濟系 128人 66 62 106.5
生技系 52人 27 25 108
心理系 67人 35 32 109.4
地理系 41人 22 19 115.8
財金系 123人 66 57 115.8
農化系 47人 26 21 123.8
獸醫系 69人 39 30 130
農經系 53人 30 23 130
醫技系 42人 24 18 133.3
森林系 88人 51 37 137.8
工管系科管組 34人 21 13 161.5
生科系 77人 48 29 165.5
藥學系 56人 36 20 180
大氣系 36人 24 12 200
牙醫系 31人 21 10 210
昆蟲系 41人 28 13 215.2
醫學系 132人 91 41 222
植微系 36人 25 11 227.3
生工系 53人 38 15 253.3
生物機電系 44人 33 11 300
資管系 50人 38 12 316.7
電機系 171人 141 30 470
資工系 119人 99 20 495
地質系 43人 36 7 514.3
土木系 116人 98 18 544.4
化工系 125人 106 19 557.9
材料系 54人 46 8 575
物理系 63人 54 9 600
化學系 61人 53 8 662.5
工科海洋系 49人 43 6 716.7
機械系 160人 146 14 1042.8
數學系 52人 49 3 1633.3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment