ideaxcollege 最近的升级使用了 Microduino 独立研发的富文本编辑器 mEditor。
mEditor 提供了很多独特的能力,其中最重要的改进就是直接在富文本编辑器中增加了可执行 Jupyter 代码块。这样,在文章编写和阅读时,用户可以随时修改并执行示例 Python 代码。mEditor 的 Python 后台执行容器中已经安装了一些包,并对中文化环境进行了设置,能够满足主要的 Python 教学需求
我们先来简单的体验一下这个功能。未来美科会在 ideaxcollege 中增加更全面的 Python 教学教程。
一、Python 基本使用
ideaxcollege 后台的 Python 运行环境是 Python 3。
点击下面可执行代码框中的左上角的执行按钮,就可以执行它了。
print("欢迎来到美科科技创想空间,Welcome to microduino IdeaLab")
程序运行上下文
在同一页中,如果有多个 Jupyter 代码块,它们会运行在同一个上下文环境中。我们用下面两个 Jupyter 块来做个例子。
在另一个框中去Print它,不同的执行顺序会产生不同的效果。
print("先执行会报变量未定义,后执行才出 : %s" % success)
下面的图显示了如果不执行声明块的话,系统的报错:
二、支持Python基础教学
name = input("What is your name? \n")
print("Hi, ", name)
unit_price = 8.5
number = input("How many apples do you want? \n")
total_cost = unit_price * int(number)
print("Please give me $%.2f" % total_cost)
import math
def convert_cm_to_m(cm):
return cm / 100.0
input_cm = input("Please input CM \n")
print("It is %.2f m." % convert_cm_to_m(float(input_cm)))
import random
keep_going = True
while keep_going:
num = random.randint(1, 6)
if num > 3:
level = 'BIG'
else:
level = 'SMALL'
print("You got %s, %d \n" % (level, num))
key = input("Continue ? [y/n] \n")
if key != 'y':
keep_going = False
else:
keep_going = True
x = [46, 8, -10, 9, -28]
print(x, " ==> ", sorted(x))
print(x, " ==> ", sorted(x, key=abs))
x.sort()
print(x)
import requests
import re
r = requests.get('https://github.com/timeline.json')
print(r.text)
m = re.search(r'(?<=-)\w+', r.text)	# 取出 - 包围的文字
print(m.group(0))
三、支持数据分析教学
首先import常用的数据分析教学所需要的常用包,包括 Pandas、Numpy、matplotlib等,这些包已经在mEditor中预先安装了。
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
print('用一维数组生成Series')
x = Series([1,3,5,7,9])
print(x.values)
x
使用 matplotlib 时,有以下几点需要注意:
在首行增加 %matplotlib inline
能够让图表在第一次运行后直接显示。
mEditor 已经集成了中文支持,所以不需要再申明使用中文字体
因为结果回显底色为深色的原因,所以您可以在图表里增加 fig=plt.gcf().set_facecolor('white')
来将返回的图表显示成白色背景。请注意 plt.figure(facecolor='white')
在某些场景下不能正常显示,这似乎是 matplotlib 自己的一个bug。
你还可以试试为图表设置显示风格,如ggplot
、fivethirtyeight
、dark_background
。设置的语句为 plt.style.use('fivethirtyeight')
。
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
# 指定默认字体,在当前环境已经不需要了
# matplotlib.rcParams['font.sans-serif'] = ['SimHei']
# matplotlib.rcParams['font.family']='sans-serif'
labels='US','UK','中国','others'
sizes=15,20,45,10
colors='yellowgreen','gold','lightskyblue','lightcoral'
explode=0,0.1,0,0
plt.style.use('ggplot')
# fig=plt.gcf().set_facecolor('white')
plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=50)
plt.axis('equal')
plt.show()
plot里面的描述可以使用Letax公式,例如下面的代码中 r'$\mu=100, \sigma=15$'
能够被正确的显示成希腊字母。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# 数据的直方图
n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)
# plt.style.use('dark_background')
fig=plt.gcf().set_facecolor('white')
plt.xlabel('Smarts')
plt.ylabel('概率')
#添加标题
plt.title('Histogram of IQ')
#添加文字
plt.text(60, .025, r'$\mu=100, \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()
mEditor 目前仅支持从特殊的位置读取数据文件,并且不支持数据写入,因此要进行数据操作会稍微麻烦一下。例如,系统中已经预置了下面这个程序中所需的 DataLog.csv
。
%matplotlib inline
import csv
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
headers = ['DateTime', 'Sensor Value']
df = pd.read_csv('DataLog.csv', names=headers)
print(df)
df['DateTime'] = df['DateTime'].map(
lambda x: datetime.strptime(str(x), '%Y/%m/%d %H:%M:%S'))
x = df['DateTime']
y = df['Sensor Value']
# plot
plt.plot(x, y)
# beautify the x-labels
plt.gcf().autofmt_xdate()
plt.show()
数据库可以使用 SQLite,因为它可以直接在内存中建立数据库 conn = sqlite3.connect(':memory:')
。但是,一旦内存数据库的连接关闭,就会被释放而不复存在。
创建表
import sqlite3
conn = sqlite3.connect(':memory:')
print("Opened database successfully \n");
# 创建表
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print("Table created successfully \n");
conn.commit()
# 插入数据
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )");
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");
conn.commit()
print("Records created successfully");
cursor = c.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("ADDRESS = ", row[2])
print("SALARY = ", row[3], "\n")
print("Operation done successfully \n");
conn.close()
四、支持人工智能教学
mEditor支持以下的人工智能包:sklearn、tensorflow、opencv等。
from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()
print(digits.data)
import pandas as pd
# Load in the data with `read_csv()`
digits = pd.read_csv("optdigits.tra", header=None)
# Print out `digits`
print(digits)
# Sample Decision Tree Classifier
from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier
# load the iris datasets
dataset = datasets.load_iris()
# fit a CART model to the data
model = DecisionTreeClassifier()
model.fit(dataset.data, dataset.target)
print(model)
# make predictions
expected = dataset.target
predicted = model.predict(dataset.data)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
五、mEditor Python的局限
为了为用户提供更快的程序执行运行体验,mEditor 对于普通用户提供的是共同的后台 Python 运行容器,这个容器已经安装了满足大多数 Python 教学要求所需的包。但是,在这个环境里,用户不能写入文件、不能随意安装 Python 包。
因为资源是共享的,所以不能跑大的AI学习任务!!!目前,大家使用时自律吧。
当然,如果你您有独特的 Python 教学环境要求,请直接和美科的销售或技术支持联系,我们可以为您定制所需的运行容器。
mEditor 刚上线,在交互体验上还有不少考虑不周的地方,当然也少不了我们没有测试出来的Bug,你要是发现什么问题,请及时告诉我们改进。谢谢。
小机智
这个所谓的富文本编辑器 mEditor在哪里能找到?是单独的一个软件么?
回复1
立即注册