创建交互式仪表盘的4个Python包
使用这些包来改善你的数据科学项目
准备工作下载数据集
>>> pip install kaggle
>>> kaggle compeitions list

进入kaggle.com
点击账户头像 -> my account -> 点击Create New API Token,
下载kaggle.json文件,并将其放入2中.kaggle文件夹中。
照片:Luke Chesser on Unsplash
数据科学项目本质上是一个为你的受众讲故事的项目。你的项目有多好并不重要,如果对方不理解你的数据洞察力和发现,就无法采取任何行动。
向观众展示你的项目的一个方法是创建一个互动的仪表板。为什么是互动的?因为与静态的洞察力相比,行动明显更能被受众记住。这就是为什么,如果可能的话,将数据科学项目创建成一个交互式仪表盘是可取的。
在这篇文章中,我想概述一下4个Python包,你可以用来为你的数据科学项目创建一个交互式仪表盘。这些包是什么?让我们来了解一下。
- Widgets
Ipywidgets(通常简称为Widgets)是一个交互式软件包,为Jupyter笔记本内的图形用户界面提供了HTML架构。该包允许我们直接在Jupyter笔记本的单元格中创建一个交互式仪表板。我将在下面的GIF中展示这个例子。
作者:GIF
只需几行代码,你就可以把你的Jupyter笔记本改进成一个仪表盘。让我展示一下我们如何用几行代码来实现。
首先,我们需要安装所需的软件包。
pip安装ipywidgets
然后我们需要在我们的Jupyter笔记本中启用Ipywidgets。要启用它,在你的命令提示符中传递以下代码。
jupyter nbextension enable --py widgetsnbextension
我们可以在我们的Jupyter笔记本中创建我们的交互式仪表盘,所有必要的包都已经到位。对于我们的例子,我将使用titanic的样本数据。
import seaborn as sns
import pandas as pd
#titanic = sns.load_dataset('D:/data_science/dataset/titanic.csv')
titanic = pd.read_csv('D:/data_science/dataset/titanic.csv')
titanic.head()

#Creating the interactive dashboard
from ipywidgets import interact
def create_fare_plot(col = titanic.drop(['fare', 'age'], axis =1).columns):
sns.barplot(data = titanic, x = col, y ='fare')
plt.title(f'Mean Bar Plot of the Fare grouped by the {col}')
图片由作者提供
数据集准备好后,我们将创建交互式仪表板。例如,我想创建一个交互式仪表盘,在那里我可以得到按分类变量分组的泰坦尼克号票价平均值。在这种情况下,我将使用以下代码。
创建交互式仪表板
from ipywidgets import interact@interact
def create_fare_plot(col = titanic.drop(['fare', 'age'], axis =1).columns)。
sns.barplot(data = titanic, x = col, y ='s fare')
plt.title(f'Mean Bar Plot of the Fare grouped by the {col}')
图片由作者提供
通过添加@interact代码,我们启动了互动过程。在下面的代码中,你将通过创建一个函数来过滤来开始仪表板。
这段代码简单而直观;然而,它可能无法回答你需要的所有过程,因为Ipywidgest只限于你的Jupyter笔记本。让我们来看看其他的软件包。
- Voila
Voila-dashboards是一个简单的Python包,它将一个简单的Jupyter笔记本变成一个可展示的网络应用程序仪表板。只需一行安装代码,我们就可以快速呈现我们的Jupyter笔记本。让我们试着安装Voila仪表板。
pip install voila
当你安装完Voila包后,刷新你的Jupyter笔记本并查看笔记本标签。在那里你会发现一个新的Voila按钮。
图片由作者提供
现在试着按一下这个按钮,你会自动被带到另一个网页,也就是Voila仪表板。
图片由作者提供
还记得之前我在Jupyter笔记本中用Piyywidgets创建泰坦尼克号仪表盘的互动代码吗?现在它们被转化成了笔记本之外的交互式仪表盘。此外,我们输入的所有代码都没有显示在Voila仪表板上。这很好,因为我们只想专注于结果。
对于一个简单的Jupyter笔记本仪表盘来说,Voila-仪表盘已经足够了,但如果我们想要更多的灵活性呢?让我们进入我们的下一个包。
import dash
from dash import dcc, html
import plotly.express as px
import pandas as pd
import seaborn as sns
app = dash.Dash()
df = sns.load_dataset('titanic')
fig = px.scatter(
df,x="fare",y="age",size="pclass",color="alive",hover_name="embark_town",log_x=True,size_max=60)
app.layout = html.Div(children = [html.H1(children='Titanic Dashboard'),dcc.Graph(id="fare_vs_age", figure=fig)])
if __name__ == "__main__":
app.run_server(debug=True)
- 绘图仪的Dash
Dash by Plotly是一个开源的Python包,使用Python语言给出一个交互式仪表盘,并创造了创建网络应用的灵活性。
如果你不熟悉Plotly,它是一个交互式可视化包。Dash是一个低代码框架包,用于开发基于Plotly可视化的网络应用。
为了尝试Dash,让我们先安装这个包。
import dash
from dash import dcc, html, Input, Output
import plotly.express as px
import pandas as pd
import seaborn as snsapp = dash.Dash()
df = sns.load_dataset('titanic')
fig = px.scatter(df,x="fare",y="age",size="pclass",color="alive",hover_name="embark_town",log_x=True,size_max=60)
app.layout = html.Div(children = [html.H1(children='Titanic Dashboard'),dcc.Graph(id="fare_vs_age", figure=fig),#Add interactive callback here
html.H4("Change the value in the text box to see callbacks in action"),
html.Div([
"Input: ",
dcc.Input(id='my-input', value='initial value', type='text')
]),
html.Br(),
html.Div(id='my-output'),
])@app.callback(
Output(component_id='my-output', component_property='children'),
Input(component_id='my-input', component_property='value')
)def update_output_div(input_value):
return f'Output: {input_value}'if __name__ == "__main__":
app.run_server(debug=True)
- Streamlit
什么是Streamlit?Streamlit是一个开源的Python软件包,旨在为数据科学家和机器学习项目创建一个网络应用。下面是一个你可以用Streamlit制作的数据应用实例。
import streamlit as st
import pandas as pd
import plotly.express as px
import seaborn as snsdf = sns.load_dataset('titanic')st.title('Titanic Dashboard')st.subheader('Dataset')
st.dataframe(df)st.subheader('Data Numerical Statistic')
st.dataframe(df.describe())st.subheader('Data Visualization with respect to Survived')left_column, right_column = st.columns(2)with left_column: 'Numerical Plot'
num_feat = st.selectbox(
'Select Numerical Feature', df.select_dtypes('number').columns) fig = px.histogram(df, x = num_feat, color = 'survived') st.plotly_chart(fig, use_container_width=True)with right_column: 'Categorical column'
cat_feat = st.selectbox(
'Select Categorical Feature', df.select_dtypes(exclude = 'number').columns)
fig = px.histogram(df, x =cat_feat, color = 'survived' )st.plotly_chart(fig, use_container_width=True)
Python和泰坦尼克号数据集来研究决策树
摘要
在这个内核中,我们将使用Python和泰坦尼克号数据集来研究决策树。它并不打算成为最精确的泰坦尼克号生存模型,而是要解释如何创建、可视化和理解分类树。涵盖的主要方面是。
用决策树从数据中学习
数据集探索和处理
决策树的相关特征
基尼不纯度
在交叉验证的帮助下找到最佳树的深度
最终模型的生成和可视化
这是我的第一个内核,所以请随时包括任何建议、评论或批评!
绪论
在应用机器学习算法时,始终牢记我们要解决的问题是至关重要的。在大多数情况下,最准确和最稳健的模型可能是你正在寻找的东西。但有时我们需要真正从现有的数据中获得洞察力,在这些情况下,像决策树这样透明、易懂的模型将大大简化我们的任务。
如果我们需要建立一个将直接用于某些任务的模型,并且只显示它的最终结果,那么如果它足够精确,我们就不会真正关心建立某种 "黑箱"(例如图像或语音识别)。这就是为什么高级技术,如深度学习或集合学习(参照各向异性核)通常用于复杂的任务。但请记住KISS原则(Keep It Simple, Stupid)! 始终考虑复杂性/准确性的权衡:只有当复杂的技术能提供显著的改进时,才应该使用它们。更简单的模型也不容易过度拟合,并倾向于更好地进行概括。
但是,如果我们使用机器学习来真正从数据中获得洞察力,"黑盒子 "模型几乎是无用的,最好坚持使用更简单、透明的技术。让我们以一家希望更好地了解客户行为的超市为例:直接的Apriori算法可以迅速提供相关的见解,如 "80%购买西装的客户也购买了领带",因此他们可以尝试通过向购买西装的客户提供折扣来增加领带的销售。当然,复杂的分类算法会通过考虑更多的特征,在识别购买领带的客户方面做得更好,但这对超市来说真的有用吗?
当我们需要理解数据时,决策树也能提供很大的帮助。一个很好的例子是sklearn文档中包含的传统的鸢尾花分类问题,我们可以在结果树中了解每种花的特征。鉴于其透明度和相对较低的计算成本,决策树对于在应用其他算法之前探索你的数据也非常有用。它们有助于检查所设计的特征的质量,并通过可视化结果树来识别最相关的特征。
决策树的主要缺点是它们有过度拟合的倾向,无法掌握特征之间的关系,以及使用贪婪的学习算法(不能保证找到全局最优模型)。在随机森林中使用它们有助于缓解其中的一些问题。
在简短介绍了决策树及其在机器学习中的地位之后,让我们看看如何将其应用于泰坦尼克号的挑战。首先,我们要准备数据集,讨论最相关的特征。然后,我们将找到最佳的树的深度,以避免过度拟合,生成最终模型,并解释如何将生成的树可视化。
准备泰坦尼克号数据集
对于泰坦尼克号的挑战,我们需要猜测测试数据集中的个体是否存活。但就我们目前的目的而言,让我们也来看看在分类树的帮助下,这些数据能告诉我们关于沉船的什么。让我们加载数据并了解一下情况。
https://www.tutorialspoint.com/python/python_lists.htm
1、有多少个Python关键字不是小写的?
5
3
1
2
4
只有3个Python关键字不是小写的。None , True和False。
https://www.programiz.com/python-programming/keyword-list
2、下面的代码片断的输出是什么?
a = True
print(('A', 'B')[a == False])
B
3、下面的代码片断的输出是什么?
print((True==False==True) ==False)
正确!👍
首先,True==False==True被评估为False。然后,False===False评估为True。
4、下面的代码片断的输出是什么?
*a, b, c = range(5)
print(*a)
0 1 2
1 2 3 4 5
2 3 4
它将抛出一个 ValueError 错误
5、哪个函数只接受整数作为参数?
min()
any()
ord()
chr()
以上都不是
6、Python内置了对数组的支持。
错
真
7、在字典 my_dict 中添加一个新项时,下面哪种语法不起作用? (Python 3.5+)
my_dict.add('new_key','new_value')
my_dict.update({'new_key':'new_value'})
{***my_dict, 'new_key': new_val}
my_dict['new_key'] = 'new_val' 。
第二部分
8、下面的代码片断的输出是什么?
oct(7)
oct("7")
07
0o7
语法错误
07
0o7
语法错误
以上都不是
9、考虑到下面的代码片段,哪个函数调用是不允许的?(3.8+)
def f(a=2, /):
通过
f(1)
f()
f(a=1)
10、下面的代码片断的输出是什么?
my_list = []
print(bool(my_list))
真
11、对下面的列表进行洗牌的正确命令是什么?
fruit=['apple', 'banana', 'papaya', 'cherry'] 。
random.shuffle(fruit)
fruit.shuffle()
random.shuffleList(fruit)
shuffle(fruit)
13、下面的代码片断的输出是什么?
class Test1 (object):
通过
class Test2 (Test1):
通过
a = Test1()
b = Test2()
print(type(b) is Test1)
假的
14、下面的代码片断的输出是什么?
k=lambda x,y : x%y
print(k(36,32)+k(15,10))
2
9
8
5
以上都不是
第三部分
15、哪种说法是正确的?
一个类是一个元类的实例。
一个元类是一个类的实例。
就像一个 "普通 "的类定义了该类实例的行为,一个元类定义了类和它们的实例的行为。
https://python-course.eu/oop/metaclasses.php
16、一个函数可以访问一个定义在该函数之外的变量,即使它没有被设置为全局变量。
错
准确
17、哪种数据结构以 "后进先出 "的方式存储项目?
正确!👍
堆栈是以后进先出的方式存储项目的。
18、下面的代码片断的输出是什么?
def foo(**kwargs):
返回 kwargs
foo(1)
1
它将抛出一个TypeError。
(1)
{1}
19、哪一个不是继承的类型?
多重继承
间接继承
多层次继承
20、下面的语法对应的是哪一个运算符函数?
del obj[k]
del(obj, k)
suppr(obj, k)
删除(obj, k)
delitem(obj, k)
21、下面的代码片断的输出是什么?
print([5, 1] > [4, 2, 4, 5])
错了!👎
当针对列表使用时,比较运算符比较每个列表的第一个元素。在这里,由于5大于4,True将被打印出来。
22、下面的代码片断的输出是什么?
my_list = "7 77 55 2345"
my_second_list = my_list.split()
print(max(my_second_list))
错了!👎
split()方法返回一个字符串。因此,正确答案是77。
23所有的迭代表都在内存中存储所有的元素。
不是所有的迭代器都在内存中存储所有元素。例如,虽然列表和字符串把所有的元素都存储在内存中,但 Python 3 的 range() 会根据需要即时生成这些元素。
https://stackoverflow.com/questions/36619152/do-pythons-iterables-really-store-all-values-in-memory
coffee Break
网友评论