Difference between revisions of "Python for Data Science"
Adelo Vieira (talk | contribs) (→Customize Jupyter) |
Adelo Vieira (talk | contribs) (→CustomJS and CustonCSS files) |
||
Line 109: | Line 109: | ||
}); | }); | ||
}); | }); | ||
− | |||
// My plain theme | // My plain theme | ||
− | // This is a good post where I took some ideas to write | + | // This is a good post where I took some ideas to write the following fuction: https://forums.fast.ai/t/jupyter-notebook-enhancements-tips-and-tricks/17064 |
Jupyter.keyboard_manager.command_shortcuts.add_shortcut('Alt-Ctrl-Q', { | Jupyter.keyboard_manager.command_shortcuts.add_shortcut('Alt-Ctrl-Q', { | ||
help : '...', | help : '...', | ||
help_index : 'zz', | help_index : 'zz', | ||
handler : function (event) { | handler : function (event) { | ||
− | var input_promp_fields = document.getElementsByClassName(" | + | var input_promp_fields = document.getElementsByClassName("prompt_container"); |
− | var input_area_fields = document.getElementsByClassName(" | + | var text_render_fields = document.getElementsByClassName("text_cell_render"); |
+ | var input_area_fields = document.getElementsByClassName("input"); | ||
var cell_fields = document.getElementsByClassName("cell"); | var cell_fields = document.getElementsByClassName("cell"); | ||
Line 126: | Line 126: | ||
input_marginLeft = "0px"; | input_marginLeft = "0px"; | ||
border_top = "3px"; | border_top = "3px"; | ||
− | + | prompt_width = "74px"; | |
+ | padding_top = "0px"; | ||
+ | output_margin = "40px"; | ||
}else{ | }else{ | ||
action = "collapse"; | action = "collapse"; | ||
− | input_marginLeft = " | + | input_marginLeft = "74px"; |
− | border_top = " | + | border_top = '0px'; |
− | + | prompt_width = "74px"; | |
+ | padding_top = "40px"; | ||
+ | output_margin = "40px"; | ||
} | } | ||
− | + | // Si queremos usar !important debemos hacerlo de esta forma utilizando JQuery: | |
− | + | // https://makitweb.com/how-to-add-important-to-css-property-with-jquery/ | |
− | + | var text_cell_fields = document.getElementsByClassName("text_cell"); | |
− | + | $(text_cell_fields).ready(function(){ | |
− | + | $('.input_prompt').css({ | |
− | // | + | 'cssText': `width: 40px !important; max-width: ${prompt_width} !important; min-width: ${prompt_width} !important;` |
− | // | + | }); |
+ | }); | ||
+ | |||
+ | $(document).ready(function(){ | ||
+ | $(".prompt_container").css( | ||
+ | 'visibility', `${action}` | ||
+ | ); | ||
+ | |||
+ | $(".input").css( | ||
+ | 'padding-left', `${input_marginLeft}` | ||
+ | ); | ||
+ | |||
+ | $(".output_subarea").css( | ||
+ | 'margin-left', `${output_margin}` | ||
+ | ); | ||
+ | |||
+ | $('.cell').css({ | ||
+ | 'cssText': `border-top-width: ${border_top} !important; border-bottom-width: ${border_top} !important;` | ||
+ | }); | ||
+ | |||
+ | $(".collapsible_headings_ellipsis").css({ | ||
+ | 'cssText': `padding-top:${padding_top} !important; border-top-width: ${border_top} !important; border-bottom-width: ${border_top} !important;` | ||
+ | }); | ||
+ | |||
+ | }); | ||
+ | |||
+ | $(document).ready(function(){ | ||
+ | $('h1').css({ | ||
+ | 'cssText': `color: #388bfd !important; font-weight: bold !important` | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | // Esta es la forma estandard de hacerlo con puro JavaScript | ||
+ | for (i = 0; i < input_promp_fields.length; i++) { | ||
+ | text_render_fields[i].style.marginLeft = '-10px'; | ||
+ | // input_promp_fields[i].style.visibility = action; | ||
+ | // input_area_fields[i].style.paddingLeft = input_marginLeft; | ||
} | } | ||
return false; | return false; | ||
Line 164: | Line 204: | ||
}} | }} | ||
); | ); | ||
− | |||
Line 177: | Line 216: | ||
<syntaxhighlight lang="css"> | <syntaxhighlight lang="css"> | ||
/* Mis configuraciones */ | /* Mis configuraciones */ | ||
− | |||
− | |||
− | |||
− | |||
.container { width:98% !important; } | .container { width:98% !important; } | ||
Line 189: | Line 224: | ||
width:98% !important; | width:98% !important; | ||
} | } | ||
+ | |||
+ | .CodeMirror-gutters { | ||
+ | background-color: transparent !important; | ||
+ | background: transparent !important; | ||
+ | } | ||
+ | |||
+ | .CodeMirror-linenumber { | ||
+ | margin-left: -20px !important; | ||
+ | } | ||
+ | |||
+ | .output_subarea { | ||
+ | margin-left: 40px !important; | ||
+ | } | ||
+ | |||
+ | #toc .fa-fw { | ||
+ | color: blue !important; | ||
+ | } | ||
+ | |||
+ | #toc .highlight_on_scroll { | ||
+ | margin-left: -4px !important; | ||
+ | |||
+ | } | ||
+ | |||
+ | #toc { | ||
+ | padding-left: 10px !important; | ||
+ | } | ||
+ | |||
+ | /* I have also changed the color | ||
+ | /* #a6e22e by #388bfd | ||
+ | * in the entire custom.css | ||
+ | */ | ||
+ | |||
+ | /* I have also chenged some of the properties of the toc directly above in the code: | ||
+ | |||
+ | #toc-wrapper { | ||
+ | z-index: 90; | ||
+ | position: fixed !important; | ||
+ | display: flex; | ||
+ | flex-direction: column; | ||
+ | overflow: hidden; | ||
+ | padding: 10px; | ||
+ | padding-top: 40px !important; | ||
+ | border-style: solid; | ||
+ | border-width: thin; | ||
+ | border-right-width: medium !important; | ||
+ | background-color: #1e1e1e !important; | ||
+ | } | ||
+ | #toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper { | ||
+ | border-color: rgba(93,92,82,.25) !important; | ||
+ | } | ||
+ | #toc a, | ||
+ | #navigate_menu a, | ||
+ | .toc { | ||
+ | color: #f8f8f0 !important; | ||
+ | font-size: 16pt !important; | ||
+ | } | ||
+ | #toc li > span:hover { | ||
+ | background-color: rgba(93,92,82,.25) !important; | ||
+ | } | ||
+ | #toc a:hover, | ||
+ | #navigate_menu a:hover, | ||
+ | .toc { | ||
+ | color: #DAA520 !important; | ||
+ | font-size: 16pt !important; | ||
+ | } | ||
+ | #toc-wrapper .toc-item-num { | ||
+ | color: #388bfd !important; | ||
+ | font-size: 16pt !important; | ||
+ | } | ||
+ | */ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 19:25, 4 January 2021
For a standard Python tutorial go to Python
Contents
Courses
- Udemy - Python for Data Science and Machine Learning Bootcamp
Anaconda
Anaconda is a free and open source distribution of the Python and R programming languages for data science and machine learning related applications (large-scale data processing, predictive analytics, scientific computing), that aims to simplify package management and deployment. Package versions are managed by the package management system conda. https://en.wikipedia.org/wiki/Anaconda_(Python_distribution)
En otras palabras, Anaconda puede ser visto como un paquete (a distribution) que incluye no solo Python (or R) but many libraries that are used in Data Science, as well as its own virtual environment system. It's an "all-in-one" install that is extremely popular in data science and Machine Learning.Creating sample array for the following examples:
Installation
Installation from the official Anaconda Web site: https://docs.anaconda.com/anaconda/install/
https://linuxize.com/post/how-to-install-anaconda-on-ubuntu-18-04/
Anaconda comes with a few IDE
- Jupyter Lab
- Jupyter Notebook
- Spyder
- Qtconsole
- and others
Anaconda Navigator is a GUI that helps you to easily start important applications and manage the packages in your local Anaconda installation
You can open the Anaconda Navigator from the Terminal:
anaconda-navigator
Jupyter
Jupyter comes with Anaconda.
- It is a development environment (IDE) where we can write codes; but it also allows us to display images, and write down markdown notes.
- It is the most popular IDE in data science for exploring and analyzing data.
- Other famoues IDE for Python are Sublime Text and PyCharm.
- There is Jupyter Lab and Jupyter Notebook
Customize Jupyter
Themes
https://github.com/dunovank/jupyter-themes
jt -t oceans16 -cellw 98% -lineh 120 -fs 14 -nfs 14 -dfs 14 -ofs 14
https://www.kaggle.com/getting-started/97540
jt -t monokai -cellw 98% -lineh 120 -fs 14 -nfs 14 -dfs 14 -ofs 14 -f fira -nf ptsans -N -kl -cursw 2 -cursc r -T
Extensions
Unofficial Jupyter Notebook Extensions
https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/index.html
This is very important. There are very nice extensions in this package.
CustomJS and CustonCSS files
This is a good post: https://forums.fast.ai/t/jupyter-notebook-enhancements-tips-and-tricks/17064
Keyboard Shortcut Customization: https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Custom%20Keyboard%20Shortcuts.html
custom.js
// // Mis configuraciones
// This is to enable syntax highlighting for SQL code:
// https://stackoverflow.com/questions/43641362/adding-syntax-highlighting-to-jupyter-notebook-cell-magic
require(['notebook/js/codecell'], function(codecell) {
codecell.CodeCell.options_default.highlight_modes['magic_text/x-mssql'] = {'reg':[/^%%sql/]} ;
Jupyter.notebook.events.one('kernel_ready.Kernel', function(){
Jupyter.notebook.get_cells().map(function(cell){
if (cell.cell_type == 'code'){ cell.auto_highlight(); } }) ;
});
});
// My plain theme
// This is a good post where I took some ideas to write the following fuction: https://forums.fast.ai/t/jupyter-notebook-enhancements-tips-and-tricks/17064
Jupyter.keyboard_manager.command_shortcuts.add_shortcut('Alt-Ctrl-Q', {
help : '...',
help_index : 'zz',
handler : function (event) {
var input_promp_fields = document.getElementsByClassName("prompt_container");
var text_render_fields = document.getElementsByClassName("text_cell_render");
var input_area_fields = document.getElementsByClassName("input");
var cell_fields = document.getElementsByClassName("cell");
if (input_promp_fields[0].style.visibility == "collapse"){
action = "visible";
input_marginLeft = "0px";
border_top = "3px";
prompt_width = "74px";
padding_top = "0px";
output_margin = "40px";
}else{
action = "collapse";
input_marginLeft = "74px";
border_top = '0px';
prompt_width = "74px";
padding_top = "40px";
output_margin = "40px";
}
// Si queremos usar !important debemos hacerlo de esta forma utilizando JQuery:
// https://makitweb.com/how-to-add-important-to-css-property-with-jquery/
var text_cell_fields = document.getElementsByClassName("text_cell");
$(text_cell_fields).ready(function(){
$('.input_prompt').css({
'cssText': `width: 40px !important; max-width: ${prompt_width} !important; min-width: ${prompt_width} !important;`
});
});
$(document).ready(function(){
$(".prompt_container").css(
'visibility', `${action}`
);
$(".input").css(
'padding-left', `${input_marginLeft}`
);
$(".output_subarea").css(
'margin-left', `${output_margin}`
);
$('.cell').css({
'cssText': `border-top-width: ${border_top} !important; border-bottom-width: ${border_top} !important;`
});
$(".collapsible_headings_ellipsis").css({
'cssText': `padding-top:${padding_top} !important; border-top-width: ${border_top} !important; border-bottom-width: ${border_top} !important;`
});
});
$(document).ready(function(){
$('h1').css({
'cssText': `color: #388bfd !important; font-weight: bold !important`
});
});
// Esta es la forma estandard de hacerlo con puro JavaScript
for (i = 0; i < input_promp_fields.length; i++) {
text_render_fields[i].style.marginLeft = '-10px';
// input_promp_fields[i].style.visibility = action;
// input_area_fields[i].style.paddingLeft = input_marginLeft;
}
return false;
}}
);
// This could be very usefull. It allows to add text automatically into a cell
// https://forums.fast.ai/t/jupyter-notebook-enhancements-tips-and-tricks/17064/27
Jupyter.keyboard_manager.edit_shortcuts.add_shortcut('Ctrl-Shift-J', {
help : '...',
help_index : 'zz',
handler : function (event) {
document.body.style.background = 'blue'
var target = Jupyter.notebook.get_selected_cell()
var cursor = target.code_mirror.getCursor()
var before = target.get_pre_cursor()
var after = target.get_post_cursor()
target.set_text(before + 'from IPython.core.display import display, HTML; \n\taverrrdisplay(HTML("<style>.container { width:98% !important;}</style>"))' + after)
cursor.ch += 20 // where to put your cursor
target.code_mirror.setCursor(cursor)
return false;
}}
);
// To get the real value of a css field: https://stackoverflow.com/questions/26074476/document-body-style-backgroundcolor-doesnt-work-with-external-css-style-sheet
// window.getComputedStyle(document.body).backgroundColor
// window.getComputedStyle(document.getElementsByClassName("input_area")[0]).backgroundColor
custom.css
/* Mis configuraciones */
.container { width:98% !important; }
/* document.getElementById("notebook-container").style.minWidth = "50%"; */
/* document.getElementById("notebook-container").style.maxWidth = "50%"; */
#notebook-container {
width:98% !important;
}
.CodeMirror-gutters {
background-color: transparent !important;
background: transparent !important;
}
.CodeMirror-linenumber {
margin-left: -20px !important;
}
.output_subarea {
margin-left: 40px !important;
}
#toc .fa-fw {
color: blue !important;
}
#toc .highlight_on_scroll {
margin-left: -4px !important;
}
#toc {
padding-left: 10px !important;
}
/* I have also changed the color
/* #a6e22e by #388bfd
* in the entire custom.css
*/
/* I have also chenged some of the properties of the toc directly above in the code:
#toc-wrapper {
z-index: 90;
position: fixed !important;
display: flex;
flex-direction: column;
overflow: hidden;
padding: 10px;
padding-top: 40px !important;
border-style: solid;
border-width: thin;
border-right-width: medium !important;
background-color: #1e1e1e !important;
}
#toc-wrapper.ui-draggable.ui-resizable.sidebar-wrapper {
border-color: rgba(93,92,82,.25) !important;
}
#toc a,
#navigate_menu a,
.toc {
color: #f8f8f0 !important;
font-size: 16pt !important;
}
#toc li > span:hover {
background-color: rgba(93,92,82,.25) !important;
}
#toc a:hover,
#navigate_menu a:hover,
.toc {
color: #DAA520 !important;
font-size: 16pt !important;
}
#toc-wrapper .toc-item-num {
color: #388bfd !important;
font-size: 16pt !important;
}
*/
Online Jupyter
There are many sites that provides solutions to run your Jupyter Notebook in the cloud: https://www.dataschool.io/cloud-services-for-jupyter-notebook/
I have tried:
- https://cocalc.com/projects/595bf475-61a7-47fa-af69-ba804c3f23f9/files/?session=default
- Parece bueno, pero tiene opciones que no son gratis
- https://www.kaggle.com/adeloaleman/kernel1917a91630/edit
- Parece bueno pero no encontré la forma adicionar una TOC
-
- Es el que estoy utilizando ahora
Some remarks
Executing Terminal Commands in Jupyter Notebooks
If we are in the Notebook, and we want to run a shell command rather than a notebook command we use the !
Try, for example:
!ls or !pwd
It's the same as if you opened up a terminal and typed it without the !
Creating Presentations in Jupyter Notebook with RevealJS
Some of the most popular Python Data Science Libraries
- NumPy
- SciPy
- Pandas
- Seaborn
- SciKit'Learn
- MatplotLib
- Plotly
- PySpartk
NumPy and Pandas
Data Visualization with Python
Natural Language Processing
Dash - Plotly
Scrapy