中企动力 > 头条 > python怎样

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python怎样

手把手 | 哇!用R也可以跑Python了 行业视频课程

img

刘幻丝

关注

大数据文摘作品

编译:大茜、钱天培

R还是Python?

真是个千古难题!

如果你主要从事数据分析、统计建模和可视化,R大概是你的不二之选。但如果你还想来搞点深度学习,整个自然语言处理,那你可还真得用Python。

如果你处于交叉领域,很可能就需要两种语言切换。后果是,写个for loop还出bug真的是家常便饭。报警!

面对这种困境的绝不止你一个人!最近的KDnuggets Analytics的软件调查中,Python和R位居数据科学和机器学习软件的前两名。

如果你真的想提高你在数据科学领域的能力,这两种语言你确实都应该学习。

不过现在好消息来了!

RStudio开发了一个名为reticulate的包。通过安装包,你现在可以在R上运行Python的安装包和函数了~

今天文摘菌就来教教你咋用这个reticulate包。

安装并加载reticulate包

运行下面的命令来安装这个包、并导入到您的系统中。

# 安装reticulate包install.packages("reticulate")# 加载reticulate包library(reticulate)

检查您的系统是否安装过Python

py_available()

返回值为TRUE或FALSE。如果返回的是TRUE,那恭喜你,您的系统已经有Python啦。FALSE的话就得先去装一下Python了。

在R中导入一个python模块

您可以使用函数import()来导入特定的包或模块。

os<- import(“os”)os$getcwd()

上面的命令返回工作目录。

[1]"C:\\Users\\DELL\\Documents"

您可以使用os包中的listdir()函数来查看工作目录中的所有文件。

os$listdir()

安装Python包

第一步:创建新的工作环境;

conda_create(“r-reticulate”)

第二步:在conda环境下安装“r-reticulate”和“numpy”;

conda_install(“r-reticulate”,“numpy”)

如果“numpy”已经安装,您不必再次安装这个包。上面的代码只是给个例子而已。

第三步:加载包。

numpy<- import(“numpy”)

使用numpy数组

首先建立一个简单的numpy数组

y<- array(1:4, c(2, 2))x <- numpy$array(y)

[,1] [,2][1,] 1 3[2,] 2 4

将数组进行转置

numpy$transpose(x)

[,1] [,2][1,] 1 2[2,] 3 4

求特征根和特征向量

numpy$linalg$eig(x)

一些数学函数

numpy$sqrt(x)numpy$exp(x)

交互地使用Python

您可以在R中创建交互式Python控制台。您在Python中创建的对象可在R中使用(反之亦然)。通过使用repl_python()函数,可以使Python和R交互。首先,下载以下程序中使用的数据集:

repl_python()# 加载“panda”数据集import pandas as pd# 载入数据集travel = pd.read_excel(“AIR.xlsx”)# 显示数据集的行列数travel.shape# 随机选取数据集中的行数travel.sample(n = 10)# 按某一标志分组travel.groupby(“Year”).AIR.mean()# 筛选数据个案t = travel.loc[(travel.Month >= 6) & (travel.Year >= 1955),:]# 回到Rexit

注意:您需要键入“exit”来返回到R会话

怎样从R中获取在python中创建的对象

你可以在利用py object获取python里的对象。

summary(py$t)

在这种情况下,我会用R的summary()函数并访问在python中创建的数据集T。此外,您可以使用ggplot2软件包绘制折线图。

#利用ggplot2绘制线图library(ggplot2)ggplot(py$t, aes(AIR, Year)) + geom_line()

怎样从Python中获取在R中创建的对象

您可以使用r object来解决这个问题。

先在R中创建一个对象:

mydata = head(cars, n=15)

在Python REPL中调用之前在R中所创建的对象:

repl_python()import pandas as pdr.mydata.describe()pd.isnull(r.mydata.speed)exit

使用sklearn包构建Logistic回归模型

sklearn软件包是python中最受欢迎的机器学习软件包之一,它支持各种统计和机器学习的算法。

repl_python()# 加载包from sklearn import datasetsfrom sklearn.linear_model import LogisticRegression# 加载数据库iris = datasets.load_iris()# 建立logit模型model = LogisticRegression()model.fit(iris.data, iris.target)# 进行预测actual = iris.targetpredicted = model.predict(iris.data)#模型性能对比矩阵print(metrics.classification_report(actual, predicted))print(metrics.confusion_matrix(actual, predicted))

其他有用的函数

查看python的配置

运行py_config()命令来查看系统中安装的R的版本。它还能显示anaconda和numpy的详细信息。

py_config()

检查某个包是否安装

可以用以下命令来检查“pandas”是否安装:

py_module_available(“pandas”)

原文链接:

https://r-bloggers/run-python-from-r/

Python如何用Keras建立神经网络 行业视频课程

img

左邴

关注

eras是目前最流行的深度学习库之一。它使用起来相当简单,它使您能够通过几行代码构建神经网络。在这篇文章中,你将会发现如何用Keras建立一个神经网络,预测电影用户评论的情感分为两类:积极或消极。我们将使用Sentiment Analysis着名的imdb评论数据集来做到这一点。我们将构建的模型也可以应用于其他机器学习问题,只需进行一些更改。

什么是Keras?

Keras是一个开放源代码的python库,使您能够通过几行代码轻松构建神经网络。该库能够在TensorFlow,Microsoft Cognitive Toolkit,Theano和MXNet上运行。Tensorflow和Theano是Python中用来构建深度学习算法的最常用的数字平台,但它们可能相当复杂且难以使用。相比之下,Keras提供了创建深度学习模型的简便方法。它是为了尽可能快速和简单地构建神经网络而创建的。它的创造者FranoisChollet将注意力放在极简主义,模块化,极简主义和python的支持上。Keras可以用于GPU和CPU。它支持Python 2和3。

什么是情绪分析?

借助情感分析,我们想要确定例如演讲者或作家对于文档,交互或事件的态度(例如情感)。因此,这是一个自然语言处理问题,需要理解文本,以预测潜在的意图。情绪主要分为积极的,消极的和中立的类别。通过使用情绪分析,我们希望根据他撰写的评论,预测客户对产品的意见和态度。因此,情绪分析广泛应用于诸如评论,调查,文档等等。

imdb数据集

imdb情绪分类数据集由来自imdb用户的50,000个电影评论组成,标记为positive(1)或negative(0)。评论是预处理的,每一个都被编码为一个整数形式的单词索引序列。评论中的单词按照它们在数据集中的总体频率进行索引。例如,整数“2”编码数据中第二个最频繁的词。50,000份评论分为25,000份培训和25,000份测试。该数据集由斯坦福大学的研究人员创建,并在2011年发表在一篇论文中,他们的准确率达到了88.89%。它也被用在2011年的“袋装文字爆米花”Kaggle比赛中。

建立神经网络

我们从导入所需的依赖关系开始:

import matplotlib

import matplotlib.pyplot as plt

import numpy as np

from keras.utils import to_categorical

from keras import keras import models

from keras import layers

我们继续下载imdb数据集,这幸好已经内置到Keras中。由于我们不希望将50/50列车测试拆分,因此我们会在下载后立即将数据合并到数据和目标中,以便稍后进行80/20的拆分。

from keras.datasets import imdb

(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)

data = np.concatenate((training_data, testing_data), axis=0)

现在我们可查看数据集:

targets = np.concatenate((training_targets, testing_targets), axis=0)

print("Categories:", np.unique(targets))

print("Number of unique words:", len(np.unique(np.hstack(data))))

Categories: [0 1]

Number of unique words: 9998

length = [len(i) for i in data]

print("Average Review length:", np.mean(length))

print("Standard Deviation:", round(np.std(length)))

Average Review length: 234.75892

Standard Deviation: 173.0

可以看到数据集被标记为两个类别,分别为0或1,表示审阅情绪。整个数据集包含9998个独特单词,平均评论长度为234个单词,标准差为173个单词。

现在我们来看一个训练样例:

print("Label:", targets[0])

Label: 1

print(data[0])

[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16, 480, 66, 3785, 33, 4, 130, 12, 16, 38, 619, 5, 25, 124, 51, 36, 135, 48, 25, 1415, 33, 6, 22, 12, 215, 28, 77, 52, 5, 14, 407, 16, 82, 2, 8, 4, 107, 117, 5952, 15, 256, 4, 2, 7, 3766, 5, 723, 36, 71, 43, 530, 476, 26, 400, 317, 46, 7, 4, 2, 1029, 13, 104, 88, 4, 381, 15, 297, 98, 32, 2071, 56, 26, 141, 6, 194, 7486, 18, 4, 226, 22, 21, 134, 476, 26, 480, 5, 144, 30, 5535, 18, 51, 36, 28, 224, 92, 25, 104, 4, 226, 65, 16, 38, 1334, 88, 12, 16, 283, 5, 16, 4472, 113, 103, 32, 15, 16, 5345, 19, 178, 32]

在上面,您会看到标记为posotive的数据集的第一次审核(1)。下面的代码检索字典映射词索引回到原来的单词,以便我们可以阅读它。它用“#”替换每个未知的单词。它通过使用get_word_index()函数来完成此操作。

index = imdb.get_word_index()

reverse_index = dict([(value, key) for (key, value) in index.items()])

decoded = " ".join( [reverse_index.get(i - 3, "#") for i in data[0]] )

print(decoded)

# this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert # is an amazing actor and now the same being director # father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for # and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also # to the two little boy's that played the # of norman and paul they were just brilliant children are often left out of the # list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all

我们将矢量化每个评论并填充零,以便它包含正好10,000个数字。这意味着我们用零填充每个比10,000少的评论。我们这样做是因为最大的审查时间很长,我们的神经网络的每个输入都需要具有相同的大小。

def vectorize(sequences, dimension = 10000):

results = np.zeros((len(sequences), dimension))

for i, sequence in enumerate(sequences):

results[i, sequence] = 1

return results

data = vectorize(data)

targets = np.array(targets).astype("float32")

现在我们将数据分成训练和测试集。训练集将包含40,000条评论,并且测试设置为10,000条。

test_x = data [:10000]

test_y = targets [:10000]

train_x = data [10000:]

train_y = targets [10000:]

我们现在可以建立我们简单的神经网络。我们首先定义我们要构建的模型的类型。Keras中有两种类型的模型可供使用: 功能性API使用的Sequential模型 和 Model类。然后我们只需添加输入层,隐藏层和输出层。在他们之间,我们使用退出来防止过度配合。在每一层,我们使用“密集”,这意味着它们完全连接。在隐藏层中,我们使用relu函数,在输出层使用sigmoid函数。最后,我们让Keras打印我们刚刚构建的模型的摘要。

# Input - Layer

model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))

# Hidden - Layers

model.add(layers.Dropout(0.3, noise_shape=None, seed=None))

model.add(layers.Dense(50, activation = "relu"))

model.add(layers.Dropout(0.2, noise_shape=None, seed=None))

model.add(layers.Dense(50, activation = "relu"))

# Output- Layer

model.add(layers.Dense(1, activation = "sigmoid"))model.summary()

model.summary()

_________________________________________________________________

Layer (type) Output Shape Param #

=================================================================

dense_1 (Dense) (None, 50) 500050

_________________________________________________________________

dropout_1 (Dropout) (None, 50) 0

_________________________________________________________________

dense_2 (Dense) (None, 50) 2550

_________________________________________________________________

dropout_2 (Dropout) (None, 50) 0

_________________________________________________________________

dense_3 (Dense) (None, 50) 2550

_________________________________________________________________

dense_4 (Dense) (None, 1) 51

=================================================================

Total params: 505,201

Trainable params: 505,201

Non-trainable params: 0

_________________________________________________________________

现在我们需要编译我们的模型,这只不过是配置训练模型。我们使用“adam”优化器,二进制 - 交叉熵作为损失和准确性作为我们的评估指标。

modelpile(

optimizer =“adam”,

loss =“binary_crossentropy”,

metrics = [“accuracy”]

我们现在可以训练我们的模型。我们用batch_size为500来做这件事,并且只对两个时代做这件事,因为我认识到如果我们训练它的时间越长,模型就会过度。我们将结果保存在“结果”变量中:

results = model.fit(

train_x, train_y,

epochs= 2,

batch_size = 500,

validation_data = (test_x, test_y)

)

Train on 40000 samples, validate on 10000 samples

Epoch 1/2

40000/40000 [==============================] - 5s 129us/step - loss: 0.4051 - acc: 0.8212 - val_loss: 0.2635 - val_acc: 0.8945

Epoch 2/2

40000/40000 [==============================] - 4s 90us/step - loss: 0.2122 - acc: 0.9190 - val_loss: 0.2598 - val_acc: 0.8950

现在是评估我们的模型的时候了:

print(np.mean(results.history [“val_acc”]))

0.894750000536

整个模型的代码:

import numpy as np

from keras.utils import to_categorical

from keras import models

from keras import layers

from keras.datasets import imdb

(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)

data = np.concatenate((training_data, testing_data), axis=0)

targets = np.concatenate((training_targets, testing_targets), axis=0)

def vectorize(sequences, dimension = 10000):

results = np.zeros((len(sequences), dimension))

for i, sequence in enumerate(sequences):

results[i, sequence] = 1

return results

test_x = data[:10000]

test_y = targets[:10000]

train_x = data[10000:]

train_y = targets[10000:]

model = models.Sequential()

# Input - Layer

model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))

# Hidden - Layers

model.add(layers.Dropout(0.3, noise_shape=None, seed=None))

model.add(layers.Dense(50, activation = "relu"))

model.add(layers.Dropout(0.2, noise_shape=None, seed=None))

model.add(layers.Dense(50, activation = "relu"))

# Output- Layer

model.add(layers.Dense(1, activation = "sigmoid"))

model.summary()

# compiling the model

modelpile(

optimizer = "adam",

loss = "binary_crossentropy",

metrics = ["accuracy"]

)

results = model.fit(

train_x, train_y,

epochs= 2,

batch_size = 500,

validation_data = (test_x, test_y)

)

print("Test-Accuracy:", np.mean(results.history["val_acc"]))

最后

如果你喜欢这些文章,请关注并转发这篇文章,谢谢!

Python那些事——且看python是如何一步一步走向神坛的! 行业视频课程

img

习惯

关注

谁会成为AI 和大数据时代的第一开发语言?这本已是一个不需要争论的问题。如果说三年前,Matlab、Scala、R、Java 和 Python还各有机会,局面尚且不清楚,那么三年之后,趋势已经非常明确了,特别是 Facebook 开源了 PyTorch 之后,Python 作为 AI 时代头牌语言的位置基本确立,未来的悬念仅仅是谁能坐稳第二把交椅。

不过声音市场上还有一些杂音。最近一个有意学习数据科学的姑娘跟我说,她的一个朋友建议她从 Java 入手,因为 Hadoop 等大数据基础设施是用 Java 写的。无独有偶,上个月 IBM developerWorks 发表的一篇个人博客(https://ibm/developerworks/community/blogs/jfp/entry/What_Language_Is_Best_For_Machine_Learning_And_Data_Science?lang=en),用职位招聘网站indeed 上的数据做了一个统计。这篇文章本身算得上是客观公正,实事求是,但传到国内来,就被一些评论者曲解了本意,说 Python 的优势地位尚未确立,鹿死谁手尚未可知,各位学习者不可盲目跟风啊,千万要多方押宝,继续撒胡椒面不要停。

在这里我要明确表个态,对于希望加入到 AI 和大数据行业的开发人员来说,把鸡蛋放在 Python 这个篮子里不但是安全的,而且是必须的。或者换个方式说,如果你将来想在这个行业混,什么都不用想,先闭着眼睛把 Python 学会了。当然,Python不是没有它的问题和短处,你可以也应该有另外一种甚至几种语言与 Python 形成搭配,但是Python 将坐稳数据分析和 AI 第一语言的位置,这一点毫无疑问。

我甚至认为,由于 Python 坐稳了这个位置,由于这个行业未来需要大批的从业者,更由于Python正在迅速成为全球大中小学编程入门课程的首选教学语言,这种开源动态脚本语言非常有机会在不久的将来成为第一种真正意义上的编程世界语。

讨论编程语言的优劣兴衰一直被认为是一个口水战话题,被资深人士所不屑。但是我认为这次 Python 的上位是一件大事。请设想一下,如果十五年之后,所有40岁以下的知识工作者,无分中外,从医生到建筑工程师,从办公室秘书到电影导演,从作曲家到销售,都能使用同一种编程语言进行基本的数据处理,调用云上的人工智能 API,操纵智能机器人,进而相互沟通想法,那么这一普遍编程的协作网络,其意义将远远超越任何编程语言之争。目前看来,Python 最有希望担任这个角色。

Python 的胜出令人意外,因为它缺点很明显。

它语法上自成一派,让很多老手感到不习惯。

“裸” Python 的速度很慢,在不同的任务上比C 语言大约慢数十倍到数千倍不等。

由于全局解释器锁(GIL)的限制,单个Python 程序无法在多核上并发执行;Python 2 和 Python 3 两个版本长期并行,很多模块需要同时维护两个不同的版本,给开发者选择带来了很多不必要的混乱和麻烦。

由于不受任何一家公司的控制,一直以来也没有一个技术巨头肯死挺 Python ,所以相对于 Python 的应用之广泛,其核心基础设施所得到的投入和支持其实是非常薄弱的。直到今天,26岁的Python 都还没有一个官方标配的 JIT 编译器,相比之下, Java 语言在其发布之后头三年内就获得了标配 JIT 。

另一个事情更能够说明问题。Python 的 GIL 核心代码 1992 年由该语言创造者 Guido van Rossum 编写,此后十八年时间没有一个人对这段至关重要的代码改动过一个字节。十八年!直到2010年,Antoine Pitrou才对 GIL 进行了近二十年来的第一次改进,而且还仅在 Python 3.x 版本中使用。这也就是说,今天使用 Python 2.7 的大多数开发者,他们所写的每一段程序仍然被26年前的一段代码牢牢制约着。

说到 Python 的不足,我就想起发生在自己身上的一段小小的轶事。我多年前曾经在一篇文章里声明自己看好 Python,而不看好 Ruby。大概两年多以前,有一个网友在微博里找到我,对我大加责备,说因为当年读了我这篇文章,误听谗言,鬼迷心窍,一直专攻 Python,而始终对 Ruby 敬而远之。结果他Python 固然精通,但最近一学 Ruby,如此美好,如此甜蜜,喜不自胜,反过来愤然意识到,当年完全被我误导了,在最美的年华错过了最美的编程语言。我当时没有更多的与他争辩,也不知道他今天是否已经从Python后端、大数据分析、机器学习和 AI 工程师成功转型为Rails快速开发高手。我只是觉得,想要真正认识一件事物的价值,确实也不是一件容易的事情。

Python 就是这样一个带着各种毛病冲到第一方阵的赛车手,但即便到了几年前,也没有多少人相信它有机会摘取桂冠,很多人认为 Java 的位置不可动摇,还有人说一切程序都将用 JavaScript重写。但今天我们再看,Python 已经是数据分析和 AI的第一语言,网络攻防的第一黑客语言,正在成为编程入门教学的第一语言,云计算系统管理第一语言。Python 也早就成为Web 开发、游戏脚本、计算机视觉、物联网管理和机器人开发的主流语言之一,随着 Python 用户可以预期的增长,它还有机会在多个领域里登顶。

而且不要忘了,未来绝大多数的 Python 用户并不是专业的程序员,而是今天还在使用 Excel、PowePoint、SAS、Matlab和视频编辑器的那些人。

就拿 AI 来说,我们首先要问一下,AI 的主力人群在哪里?如果我们今天静态的来谈这个话题,你可能会认为 AI 的主力是研究机构里的 AI 科学家、拥有博士学位的机器学习专家和算法专家。

但上次我提到李开复的“AI红利三段论”明确告诉我们,只要稍微把眼光放长远一点,往后看三至五年,你会看到整个 AI 产业的从业人口将逐渐形成一个巨大的金字塔结构,上述的 AI 科学家仅仅是顶端的那么一点点,95% 甚至更多的 AI 技术人员,都将是AI 工程师、应用工程师和AI 工具用户。

我相信这些人几乎都将被Python 一网打尽,成为 Python 阵营的庞大后备军。这些潜在的 Python 用户至今仍然在技术圈子之外,但随着 AI 应用的发展,数百万之众的教师、公司职员、工程师、翻译、编辑、医生、销售、管理者和公务员将裹挟着各自领域中的行业知识和数据资源,涌入 Python 和 AI 大潮之中,深刻的改变整个 IT,或者说 DT (数据科技)产业的整体格局和面貌。

为什么 Python 能够后来居上呢?

如果泛泛而论,我很可以列举 Python 的一些优点,比如语言设计简洁优雅,对程序员友好,开发效率高。但我认为这不是根本原因,因为其他一些语言在这方面表现得并不差。

还有人认为 Python 的优势在于资源丰富,拥有坚实的数值算法、图标和数据处理基础设施,建立了非常良好的生态环境,吸引了大批科学家以及各领域的专家使用,从而把雪球越滚越大。但我觉得这是倒因为果。为什么偏偏是 Python 能够吸引人们使用,建立起这么好的基础设施呢?为什么世界上最好的语言 PHP 里头就没有 numpy 、NLTK、sk-learn、pandas 和 PyTorch 这样级别的库呢?为什么 JavaScript 极度繁荣之后就搞得各种程序库层次不齐,一地鸡毛,而 Python 的各种程序库既繁荣又有序,能够保持较高水准呢?

我认为最根本的原因只有一点:Python 是众多主流语言中唯一一个战略定位明确,而且始终坚持原有战略定位不动摇的语言。

相比之下,太多的语言不断的用战术上无原则的勤奋去侵蚀和模糊自己的战略定位,最终只能等而下之。

Python 的战略定位是什么?

其实很简单,就是要做一种简单、易用但专业、严谨的通用组合语言,或者叫胶水语言,让普通人也能够很容易的入门,把各种基本程序元件拼装在一起,协调运作。

正是因为坚持这个定位,Python 始终把语言本身的优美一致放在奇技妙招前面,始终把开发者效率放在CPU效率前面,始终把横向扩张能力放在纵向深潜能力之前。长期坚持这些战略选择,为 Python 带来了其他语言望尘莫及的丰富生态。

比如说,任何一个人,只要愿意学习,可以在几天的时间里学会Python基础部分,然后干很多很多事情,这种投入产出比可能是其他任何语言都无法相比的。再比如说,正是由于 Python 语言本身慢,所以大家在开发被频繁使用的核心程序库时,大量使用 C 语言跟它配合,结果用 Python 开发的真实程序跑起来非常快,因为很有可能超过 80% 的时间系统执行的代码是 C 写的。相反,如果 Python 不服气,非要在速度上较劲,那么结果很可能是裸速提高个几倍,但这样就没人有动力为它开发 C 模块了,最后的速度远不如混合模式,而且很可能语言因此会变得更复杂,结果是一个又慢又丑陋的语言。

更重要的是,Python 的包装能力、可组合性、可嵌入性都很好,可以把各种复杂性包装在 Python 模块里,暴露出漂亮的接口。

很多时候,一个程序库本身是用 C/C++ 写的,但你会发现,直接使用 C 或者 C++ 去调用那个程序库,从环境配置到接口调用,都非常麻烦,反而隔着一层,用其python 包装库更加清爽整洁,又快又漂亮。这些特点到了 AI 领域中,就成了 Python 的强大优势。Python 也借助 AI 和数据科学,攀爬到了编程语言生态链的顶级位置。Python 与 AI绑在一起,对它们来说,无论是电子商务、搜索引擎、社交网络还是智能硬件,未来都只是生态链下游的数据奶牛、电子神经和执行工具,都将听命于自己。

对编程语言发展历史缺乏了解的人可能会觉得,Python 的战略定位是犬儒主义和缺乏进取心的。但事实证明,能同时做到简单而严谨、易用而专业,是很难的,而能够坚守胶水语言的定位,更是难上加难。

有的语言,从一开始就是出于学术而非实用的目的,学习曲线过于陡峭,一般人很难接近。有的语言,过于依赖背后金主的商业支持,好的时候风光无限,一旦被打入冷宫,连生存下去都成问题。有的语言,设计的时候有明确的假想场景,要么是为了解决大规模并发,要么是为了解决矩阵运算,要么是为了做网页渲染模板,一旦离开这个场景,就各种不爽。更多的语言,刚刚取得一点成功,就迫不及待的想成为全能冠军,在各个方向上拼命的伸展触角,特别是在增强表达能力和提升性能方面经常过分积极,不惜将核心语言改得面目全非,最后变成谁都无法掌控的庞然大物。相比之下,Python 是现代编程语言设计和演化当中的一个成功典范。

Python 之所以在战略定位上如此清晰,战略坚持上如此坚定,归根结底是因为其社区构建了一个堪称典范的决策和治理机制。这个机制以 Guido van Rossum (BDFL,Pythoners 都知道这是什么意思), DavidBeazley, Raymond Hettinger 等人为核心,以 PEP 为组织平台,民主而有序,集中而开明。只要这个机制本身得以维系,Python 在可见的未来里仍将一路平稳上行。

最有可能向 Python 发起挑战的,当然是Java。Java 的用户存量大,它本身也是一种战略定位清晰而且非常坚定的语言。但我并不认为 Java 有很大的机会,因为它本质上是为构造大型复杂系统而设计的。什么是大型复杂系统?就是由人清清楚楚描述和构造出来的系统,其规模和复杂性是外生的,或者说外界赋予的。而 AI 的本质是一个自学习、自组织的系统,其规模和复杂性是一个数学模型在数据的喂养下自己长出来的,是内生的。因此,Java大多数的语言结构对于大数据的处理和 AI 系统的开发显得使不上劲,你强的东西这里用不上,这里需要的东西你做起来又别扭。而 Python 在数据处理方面的简洁强悍早就尽人皆知。对比两个功能相同的 Java 和 Python 机器学习程序,正常人只要看两眼就能做出判断,一定是 Python 程序更加清爽痛快。

大概在 2003 或者 2004 年的时候,我买过一本 Python 的书,作者是一位巴西人。他说自己之所以坚定的选择 Python,是因为他小时候经常梦到未来世界将由一条大蟒蛇(蟒蛇的英文为python)统治。我当时觉得这哥们好可怜,做个梦都能梦到这么恐怖的场景。但今天来看,也许他只是像黑客帝国里的程序员安德森一样,不小心穿越到未来,并且窥探到了世界的真相。

C和Python,初学者应该如何选择 企业视频课程

img

霍寄凡

关注

对于C和Python两种语言,初学者应该选择从那个开始入门?笔者认为在做出选择之前首先要对这两种语言有一个初步的了解。首先来说,C语言是一门通用的编程语言。之所以称其通用,是因为它能够做很多低级、底层的处理;同时它也有良好的跨平台性,C语言可以按照一定的标准在多种计算机平台上进行编译,包括嵌入式编程。而Python是一门面向对象的编程语言,这是它和C存在的一大区别;另一个区别是Python是一种解释型语言。在人们写好这种语言之后还需要有解释器进行翻译才可以在计算机上运行。但Python虽然从运行效率上与C语言相比较低,但Python有丰富的库,而且这些库很多是用C和C++写的。这就使得Python与C有一定的相通性,而且和C语言相比,Python的专长在于数据统计分析和人工智能编程。

总结一点,C更基础,Python更实用。

如果今后的研究方向是嵌入式,那么C语言可以作为主攻方向。对于从事编程工作的朋友其实可以多了解几门语言,这样可以让自己的视野更加开阔。学Python主要是因为它能够快速而简洁地开发一些程序,易学易懂。但笔者认为如果想要在程序开发行业做得更久,有良好的C语言基础是不可缺少的。尚学堂陈老师指出,因为真正要做高性能编程, 不可能将机器的体系架构抛到脑后让Python虚拟机(或Java虚拟机等)帮你搞定所有底层。越来越多的CPU core,越来越恐怖的内存性能瓶颈,对于上层开发人员来说,无所谓,但是对高性能程序开发人员来说,这些是无法透明的。很多应用,还是自己掌控比较有效。这些场合中,汇编和C还是不可替代的。但是,光知道C是不够的,掌握一门面向对象语言,相对更高层的语言,不仅对以后的个人发展有利,也会对自己的技术认识产生帮助。

C的学习曲线更陡,貌似简单,其实难点也非常多,看上去较为简单的程序,也不是在短时间内可以掌握的。若要谈到底层优化,需要的功底是按年算的。但是一旦你C语言的基础打好了,对计算机的理解,对其他语言的理解都是大有帮助的。比如,如果你有C基础,可以说,在较短的时间内解除Python,就能写的出来一些不短的程序。后面的优化也算不上是难度太大的算法,都是非常基本的语句换来换去。在实际应用层面,Python比C方便的不是一个层次。

说起两者的不同可以在对象机制上加以比较:对于“动态确定变量类型”的理解,需要提到的是Python的Object对象机制。Objects即为“对象”是Python对于数据的抽象,用对象或者对象之间的关系可以表示Python中所有的数据,函数、字符串等等都可以是对象。关于对象有三种属性:实体,类型和值。实体一旦创建就不会被改变,一般而言,决定对象所支持的操作方式的类型(type,包括number,string,tuple及其他)也不会改变,但它的值可以改变。如果要找一个具体点的说明,实体就相当于对象在内存中的地址,是本质存在。而类型和值都只是实体的外在呈现。Python提供了一些接口与对象进行交互,比如id()函数用来获得对象实体的整形,type()函数获取其类型等等。

这种object机制,是C所不具备的,这也是Python的优势所在,c是一种静态类型语言,我们可以定义int a, char b等等,但必须是在源代码里面事先规定。比如我们可以在Python里面任意一处直接规定a = “lk”,这样,a的类型就是string,这是在其赋值的时候才决定的,我们无须在代码中明确写出。

C和Python,初学者应该如何选择?在以上内容中笔者举了一些简单的例子,尤其是关于Object对象机制是Python与C最大的不同之处,除此之外还有Python的库的强大与丰富,也使得用Python做一般的程序开发更加方便。

手把手 | 哇!用R也可以跑Python了 互联网视频课程

img

牟伟泽

关注

大数据文摘作品

编译:大茜、钱天培

R还是Python?

真是个千古难题!

如果你主要从事数据分析、统计建模和可视化,R大概是你的不二之选。但如果你还想来搞点深度学习,整个自然语言处理,那你可还真得用Python。

如果你处于交叉领域,很可能就需要两种语言切换。后果是,写个for loop还出bug真的是家常便饭。报警!

面对这种困境的绝不止你一个人!最近的KDnuggets Analytics的软件调查中,Python和R位居数据科学和机器学习软件的前两名。

如果你真的想提高你在数据科学领域的能力,这两种语言你确实都应该学习。

不过现在好消息来了!

RStudio开发了一个名为reticulate的包。通过安装包,你现在可以在R上运行Python的安装包和函数了~

今天文摘菌就来教教你咋用这个reticulate包。

安装并加载reticulate包

运行下面的命令来安装这个包、并导入到您的系统中。

# 安装reticulate包install.packages("reticulate")# 加载reticulate包library(reticulate)

检查您的系统是否安装过Python

py_available()

返回值为TRUE或FALSE。如果返回的是TRUE,那恭喜你,您的系统已经有Python啦。FALSE的话就得先去装一下Python了。

在R中导入一个python模块

您可以使用函数import()来导入特定的包或模块。

os<- import(“os”)os$getcwd()

上面的命令返回工作目录。

[1]"C:\\Users\\DELL\\Documents"

您可以使用os包中的listdir()函数来查看工作目录中的所有文件。

os$listdir()

安装Python包

第一步:创建新的工作环境;

conda_create(“r-reticulate”)

第二步:在conda环境下安装“r-reticulate”和“numpy”;

conda_install(“r-reticulate”,“numpy”)

如果“numpy”已经安装,您不必再次安装这个包。上面的代码只是给个例子而已。

第三步:加载包。

numpy<- import(“numpy”)

使用numpy数组

首先建立一个简单的numpy数组

y<- array(1:4, c(2, 2))x <- numpy$array(y)

[,1] [,2][1,] 1 3[2,] 2 4

将数组进行转置

numpy$transpose(x)

[,1] [,2][1,] 1 2[2,] 3 4

求特征根和特征向量

numpy$linalg$eig(x)

一些数学函数

numpy$sqrt(x)numpy$exp(x)

交互地使用Python

您可以在R中创建交互式Python控制台。您在Python中创建的对象可在R中使用(反之亦然)。通过使用repl_python()函数,可以使Python和R交互。首先,下载以下程序中使用的数据集:

repl_python()# 加载“panda”数据集import pandas as pd# 载入数据集travel = pd.read_excel(“AIR.xlsx”)# 显示数据集的行列数travel.shape# 随机选取数据集中的行数travel.sample(n = 10)# 按某一标志分组travel.groupby(“Year”).AIR.mean()# 筛选数据个案t = travel.loc[(travel.Month >= 6) & (travel.Year >= 1955),:]# 回到Rexit

注意:您需要键入“exit”来返回到R会话

怎样从R中获取在python中创建的对象

你可以在利用py object获取python里的对象。

summary(py$t)

在这种情况下,我会用R的summary()函数并访问在python中创建的数据集T。此外,您可以使用ggplot2软件包绘制折线图。

#利用ggplot2绘制线图library(ggplot2)ggplot(py$t, aes(AIR, Year)) + geom_line()

怎样从Python中获取在R中创建的对象

您可以使用r object来解决这个问题。

先在R中创建一个对象:

mydata = head(cars, n=15)

在Python REPL中调用之前在R中所创建的对象:

repl_python()import pandas as pdr.mydata.describe()pd.isnull(r.mydata.speed)exit

使用sklearn包构建Logistic回归模型

sklearn软件包是python中最受欢迎的机器学习软件包之一,它支持各种统计和机器学习的算法。

repl_python()# 加载包from sklearn import datasetsfrom sklearn.linear_model import LogisticRegression# 加载数据库iris = datasets.load_iris()# 建立logit模型model = LogisticRegression()model.fit(iris.data, iris.target)# 进行预测actual = iris.targetpredicted = model.predict(iris.data)#模型性能对比矩阵print(metrics.classification_report(actual, predicted))print(metrics.confusion_matrix(actual, predicted))

其他有用的函数

查看python的配置

运行py_config()命令来查看系统中安装的R的版本。它还能显示anaconda和numpy的详细信息。

py_config()

检查某个包是否安装

可以用以下命令来检查“pandas”是否安装:

py_module_available(“pandas”)

原文链接:

https://r-bloggers/run-python-from-r/

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP