<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Python’s Gurus - Medium]]></title>
        <description><![CDATA[Python’s Gurus is a Journal, composed by high skilled and knowledgeable Writers from Computer Science World. We’re Devs, Masters, PhDs and Experts in our domaines, possessing deep understanding and proficiency in Python &amp; Several Techs. Sharing real solution for real problems. - Medium]]></description>
        <link>https://medium.com/pythons-gurus?source=rss----e93c66715ad9---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Python’s Gurus - Medium</title>
            <link>https://medium.com/pythons-gurus?source=rss----e93c66715ad9---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 18:41:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/pythons-gurus" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Bridging the Gap: The Practitioner’s Guide to Entity Linking in Real-World Data Pipelines]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/bridging-the-gap-the-practitioners-guide-to-entity-linking-in-real-world-data-pipelines-4498c1423c45?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/1536/1*sNbkJbXm-omHhAWsFFAmJg.png" width="1536"></a></p><p class="medium-feed-snippet">Abstract</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/bridging-the-gap-the-practitioners-guide-to-entity-linking-in-real-world-data-pipelines-4498c1423c45?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/bridging-the-gap-the-practitioners-guide-to-entity-linking-in-real-world-data-pipelines-4498c1423c45?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/4498c1423c45</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Everton Gomede, PhD]]></dc:creator>
            <pubDate>Mon, 21 Jul 2025 06:12:46 GMT</pubDate>
            <atom:updated>2025-07-21T06:12:45.990Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[When Fairness Fails Silently: Unmasking Bias with Invariance Tests]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/when-fairness-fails-silently-unmasking-bias-with-invariance-tests-db190a48bbd6?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/1536/0*NmlktGB8CnIqqaPf" width="1536"></a></p><p class="medium-feed-snippet">Abstract</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/when-fairness-fails-silently-unmasking-bias-with-invariance-tests-db190a48bbd6?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/when-fairness-fails-silently-unmasking-bias-with-invariance-tests-db190a48bbd6?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/db190a48bbd6</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Everton Gomede, PhD]]></dc:creator>
            <pubDate>Mon, 21 Jul 2025 06:12:31 GMT</pubDate>
            <atom:updated>2025-07-21T06:12:31.174Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to be a fortune teller for streaming data without the robes]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/how-to-be-a-fortune-teller-for-streaming-data-without-the-robes-e0126e1e31af?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/2600/0*Ugt88jlQC9DedipL" width="3148"></a></p><p class="medium-feed-snippet">Watch It, Predict It, Fix It</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/how-to-be-a-fortune-teller-for-streaming-data-without-the-robes-e0126e1e31af?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/how-to-be-a-fortune-teller-for-streaming-data-without-the-robes-e0126e1e31af?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/e0126e1e31af</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[programming-languages]]></category>
            <category><![CDATA[data-visualization]]></category>
            <category><![CDATA[time-series-analysis]]></category>
            <dc:creator><![CDATA[Katy]]></dc:creator>
            <pubDate>Tue, 01 Jul 2025 07:54:28 GMT</pubDate>
            <atom:updated>2025-07-01T07:54:32.480Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Time Travel for Data Nerds]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/time-travel-for-data-nerds-689831e6cd84?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/2600/0*0qq0h8HMT1O9mfti" width="3029"></a></p><p class="medium-feed-snippet">Forecasting the Future with a Facebook Tool</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/time-travel-for-data-nerds-689831e6cd84?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/time-travel-for-data-nerds-689831e6cd84?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/689831e6cd84</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[time-series-analysis]]></category>
            <dc:creator><![CDATA[Katy]]></dc:creator>
            <pubDate>Mon, 23 Jun 2025 11:04:51 GMT</pubDate>
            <atom:updated>2025-06-23T11:04:56.661Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Illuminating the Invisible: Visualizing Complex Biological Pathways with Python and Power BI]]></title>
            <link>https://medium.com/pythons-gurus/illuminating-the-invisible-visualizing-complex-biological-pathways-with-python-and-power-bi-187547caeefe?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/187547caeefe</guid>
            <category><![CDATA[visualization]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[analytics]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[presentations]]></category>
            <dc:creator><![CDATA[Tamoghna Das, MSc., Ph.D. (en cours)]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 06:57:46 GMT</pubDate>
            <atom:updated>2025-06-09T06:57:46.598Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/522/1*bsjUQihlhPHxqPyPlNhtHA.png" /></figure><h3>The Challenge of Seeing What Cannot Be Seen</h3><p>I still remember the day I faced a room full of confused undergraduate biotech students, trying to explain how machine learning algorithms could predict protein folding patterns. My carefully prepared slides showing mathematical equations and complex neural network architectures were met with blank stares. It wasn’t until I scrapped my technical presentation and drew a simple analogy on the whiteboard — comparing the protein folding prediction to teaching a computer to “recognize” folding patterns the way we recognize faces — that I saw the light bulbs turn on.</p><p>That day taught me a valuable lesson: in the increasingly complex intersection of artificial intelligence and biotechnology, visualization isn’t just helpful — it’s essential for understanding.</p><h3>Why Visualization Matters in BioAI</h3><p>Modern biotechnology and biochemical engineering are drowning in data — genomic sequences, metabolic flux measurements, protein structures, fermentation parameters, and countless other data streams. Meanwhile, artificial intelligence models that analyze this data are often seen as “black boxes,” making decisions that even their creators struggle to interpret fully.</p><p>Visualization bridges this gap. It transforms abstract numbers and computational processes into visual patterns that our brains are evolutionarily wired to recognize and understand. For undergraduate students learning these concepts for the first time, chemical engineers transitioning to AI applications, or even the curious public, thoughtful visualization can make the seemingly impenetrable world of biotechnology and AI accessible.</p><h3>Key Scientific Concepts for Effective BioAI Visualization</h3><h3>1. Dimensionality Reduction</h3><p>Biological data is inherently high-dimensional. A single cell RNA sequencing experiment might measure expression levels for 20,000+ genes across thousands of cells — far more dimensions than we can possibly visualize directly.</p><p>Dimensionality reduction techniques like Principal Component Analysis (PCA), t-SNE, or UMAP help us compress this high-dimensional data into 2D or 3D representations while preserving meaningful relationships. Think of it as creating a map of a complex terrain — you lose some detail but gain the ability to navigate the landscape.</p><pre># Example: Visualizing gene expression data with UMAP<br>import umap<br>import matplotlib.pyplot as plt<br>import pandas as pd<br>import seaborn as sns<br># Let&#39;s say we have expression data with samples as rows and genes as columns<br>expression_data = pd.read_csv(&quot;gene_expression.csv&quot;, index_col=0)<br># Apply UMAP to reduce dimensions to 2D<br>reducer = umap.UMAP(random_state=42)<br>embedding = reducer.fit_transform(expression_data)<br># Create a DataFrame for plotting<br>umap_df = pd.DataFrame({<br>    &#39;UMAP1&#39;: embedding[:, 0],<br>    &#39;UMAP2&#39;: embedding[:, 1],<br>    &#39;Cell_Type&#39;: cell_types  # This would be your cell type labels<br>})<br># Plot with colors representing cell types<br>plt.figure(figsize=(10, 8))<br>sns.scatterplot(data=umap_df, x=&#39;UMAP1&#39;, y=&#39;UMAP2&#39;, hue=&#39;Cell_Type&#39;, palette=&#39;viridis&#39;)<br>plt.title(&#39;Gene Expression Patterns Across Cell Types&#39;)<br>plt.legend(bbox_to_anchor=(1.05, 1), loc=&#39;upper left&#39;)<br>plt.tight_layout()<br>plt.show()</pre><h3>2. Network Analysis and Visualization</h3><p>Biological processes rarely operate in isolation. Proteins interact in complex networks, metabolites flow through interconnected pathways, and genes regulate each other in elaborate circuits. Network visualization helps us understand these relationships.</p><p>The key is balancing detail with clarity. A graph showing every possible interaction becomes an unintelligible hairball, while oversimplifying loses critical information. Effective network visualizations use:</p><ul><li>Strategic filtering to focus on key interactions</li><li>Visual encoding (color, size, shape) to represent biological properties</li><li>Hierarchical organization to show relationships at different scales</li><li>Interactive elements allowing users to explore different aspects of the network</li></ul><h3>3. Model Interpretability Visualization</h3><p>As AI increasingly drives biological discovery — from protein structure prediction to drug design — visualizing how these models make decisions becomes crucial. This is where techniques like feature importance plots, attention maps, and decision tree visualizations become valuable.</p><p>For example, when training a model to predict whether a microbial strain will produce high yields of a biofuel, we can create visualizations showing which metabolic pathways most influenced the prediction:</p><pre># Example: Visualizing feature importance in a Random Forest model<br>import pandas as pd<br>import matplotlib.pyplot as plt<br>from sklearn.ensemble import RandomForestRegressor<br><br># Train model (assuming X_train contains pathway features, y_train contains yield values)<br>model = RandomForestRegressor(n_estimators=100, random_state=42)<br>model.fit(X_train, y_train)<br># Get feature importances<br>importance_df = pd.DataFrame({<br>    &#39;Feature&#39;: X_train.columns,<br>    &#39;Importance&#39;: model.feature_importances_<br>}).sort_values(&#39;Importance&#39;, ascending=False)<br># Visualize top 15 most important pathways<br>plt.figure(figsize=(10, 8))<br>sns.barplot(data=importance_df.head(15), x=&#39;Importance&#39;, y=&#39;Feature&#39;)<br>plt.title(&#39;Metabolic Pathways Most Predictive of Biofuel Yield&#39;)<br>plt.tight_layout()<br>plt.show()</pre><h3><strong>Another example of Matplotlib</strong></h3><pre>import matplotlib.pyplot as plt<br><br># Simulated bioreactor data<br>time = [0, 1, 2, 3, 4, 5]<br>biomass = [0.1, 0.5, 1.2, 2.0, 2.8, 3.0]<br>substrate = [10, 8, 6, 4, 2, 1]<br>product = [0, 0.2, 0.8, 1.5, 2.0, 2.5]<br><br># Plot<br>plt.figure(figsize=(10, 6))<br>plt.plot(time, biomass, label=&#39;Biomass&#39;, color=&#39;green&#39;, marker=&#39;o&#39;)<br>plt.plot(time, substrate, label=&#39;Substrate&#39;, color=&#39;blue&#39;, marker=&#39;s&#39;)<br>plt.plot(time, product, label=&#39;Product&#39;, color=&#39;orange&#39;, marker=&#39;^&#39;)<br>plt.xlabel(&#39;Time (h)&#39;, fontsize=12)<br>plt.ylabel(&#39;Concentration (g/L)&#39;, fontsize=12)<br>plt.title(&#39;Fed-Batch Bioreactor Model&#39;, fontsize=14)<br>plt.legend()<br>plt.grid(True)<br>plt.tight_layout()<br><br># Save figure<br>plt.savefig(&quot;model_plot.png&quot;)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1015/1*6ufMe_pX5kzzS9BHmg9b4g.png" /><figcaption>Output from above</figcaption></figure><h3>Python for Static Visuals</h3><p>Python libraries like Matplotlib and Seaborn are perfect for creating static visuals like flowcharts or heatmaps. For example, you can visualize a metabolic pathway as a network graph using NetworkX:</p><pre>import networkx as nx<br>import matplotlib.pyplot as plt<br><br># Create a metabolic pathway graph<br>G = nx.DiGraph()<br>pathway_steps = [<br>    (&quot;Glucose&quot;, &quot;Pyruvate&quot;),<br>    (&quot;Pyruvate&quot;, &quot;Acetyl-CoA&quot;),<br>    (&quot;Acetyl-CoA&quot;, &quot;Citrate&quot;),<br>    (&quot;Citrate&quot;, &quot;Isocitrate&quot;),<br>    (&quot;Isocitrate&quot;, &quot;α-Ketoglutarate&quot;),<br>    (&quot;α-Ketoglutarate&quot;, &quot;Succinyl-CoA&quot;),<br>    (&quot;Succinyl-CoA&quot;, &quot;Succinate&quot;),<br>    (&quot;Succinate&quot;, &quot;Fumarate&quot;),<br>    (&quot;Fumarate&quot;, &quot;Malate&quot;),<br>    (&quot;Malate&quot;, &quot;Oxaloacetate&quot;),<br>    (&quot;Oxaloacetate&quot;, &quot;Citrate&quot;)<br>]<br><br>G.add_edges_from(pathway_steps)<br><br># Draw the graph<br>pos = nx.spring_layout(G)<br>nx.draw(G, pos, with_labels=True, node_color=&#39;lightblue&#39;, node_size=2000, edge_color=&#39;gray&#39;, linewidths=1, font_size=10)<br>plt.title(&quot;Simplified Citric Acid Cycle&quot;)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/787/1*cn7BcS8illdyKkr-hbuVdg.png" /><figcaption>Output from above</figcaption></figure><h3>Bridging Tools: From Python to Power BI</h3><p>While Python offers unmatched flexibility for custom visualizations, Power BI provides an accessible platform for creating interactive dashboards that non-programmers can use and explore.</p><p>The workflow I recommend to my students combines the strengths of both:</p><p><strong>Use Python for data preprocessing and specialized analyses</strong></p><ul><li><em>Clean and normalize biological data</em></li><li><em>Perform dimensionality reduction</em></li><li><em>Calculate network properties</em></li><li><em>Train AI/ML models</em></li></ul><p><strong>Export processed data to Power BI for interactive exploration</strong></p><ul><li>Create connected visualizations where selecting elements in one chart filters others</li><li>Build dashboards tailored to different stakeholders (researchers, engineers, managers)</li><li>Implement drill-down capabilities for exploring hierarchy</li><li>Share insights with non-technical team members</li></ul><p>Let me share a real-world example: In my lab, we studied a consortium of bacteria engineered to convert agricultural waste into biodegradable plastics. The system involved complex interactions — some bacteria broke down cellulose, others fermented the resulting sugars, and still others converted metabolites into plastic precursors.</p><p>Initially, we struggled to understand why yields varied so dramatically between experiments. We used Python to analyze metabolomics data and train a machine learning model identifying key bottlenecks, then created a Power BI dashboard where process engineers could explore how different operating conditions affected each step in the pathway.</p><p>The visualization revealed something our equations had obscured: oxygen limitation in one vessel was creating a metabolic bottleneck that rippled through the entire consortium. After addressing this issue, our yields increased by 47%.</p><h3>Challenges and Future Directions</h3><p>Creating effective visualizations at the intersection of AI and biotechnology isn’t without challenges:</p><ol><li><strong>Balancing abstraction with accuracy</strong>: Simplifying enough to be understandable without misrepresenting the underlying biology</li><li><strong>Handling uncertainty</strong>: Clearly communicating what the AI model is confident about versus where it’s making educated guesses</li><li><strong>Scale bridging</strong>: Creating visualizations that can seamlessly transition between molecular, cellular, and process scales</li><li><strong>Tool limitations</strong>: Working around the constraints of existing visualization platforms while new ones emerge</li></ol><p>Looking forward, several exciting developments promise to enhance our visualization capabilities:</p><ul><li><strong>Virtual and augmented reality</strong> allowing scientists to literally walk through metabolic pathways or protein structures</li><li><strong>Real-time visualization</strong> connecting live bio-process data with AI predictions</li><li><strong>Collaborative visualization platforms</strong> enabling distributed teams to explore data together</li><li><strong>Standardized visual languages</strong> for biological processes that make diagrams more intuitive and comparable</li></ul><h3>Conclusion: Making the Invisible Visible</h3><p>As biotechnology and AI continue their rapid convergence, the ability to visualize complex systems and models becomes not just a nice-to-have skill but an essential literacy. Whether you’re an undergraduate just beginning to explore this field, a chemical engineer adapting to new computational methods, or simply a curious individual, developing visual thinking will enhance your understanding.</p><p>The power of visualization lies in its ability to transform the abstract into the concrete, the complex into the comprehensible. When we can see patterns in data or processes, we gain not just knowledge but insight — the kind that leads to breakthroughs.</p><p>I encourage you to experiment with the visualization techniques and tools discussed here. Start simple, focus on clarity, and always ask yourself: “Does this visualization help someone understand something they couldn’t see before?”</p><p>What biological system or AI application might you understand differently if you could visualize it more effectively? The answer might lead to your next discovery.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=187547caeefe" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pythons-gurus/illuminating-the-invisible-visualizing-complex-biological-pathways-with-python-and-power-bi-187547caeefe">Illuminating the Invisible: Visualizing Complex Biological Pathways with Python and Power BI</a> was originally published in <a href="https://medium.com/pythons-gurus">Python’s Gurus</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Statistical Analysis in Life Sciences: ANOVA with Python Automation]]></title>
            <link>https://medium.com/pythons-gurus/statistical-analysis-in-life-sciences-anova-with-python-automation-e1cee27a8d37?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/e1cee27a8d37</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[statistics]]></category>
            <category><![CDATA[visualization]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[analysis]]></category>
            <dc:creator><![CDATA[Tamoghna Das, MSc., Ph.D. (en cours)]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 06:57:26 GMT</pubDate>
            <atom:updated>2025-06-09T06:57:25.883Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jc886DGvGrfCVofdpiXyxg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DxY3pbldn8PgyC5YnSBckA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HklbXEBbjxaEsAkVWgfshA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fIEJMSvFikUF_uTrnCUjyA.png" /></figure><h3>The Challenge of Multiple Group Comparisons in Biotech</h3><p>Imagine you’re a biotechnology researcher testing a new enzyme for biofuel production. You’ve tested it under five different temperature conditions to find the optimal operating environment, measuring the enzyme activity (μmol/min) for each sample. Looking at your spreadsheet of results, you wonder: “<strong><em>Is there a significant difference in enzyme activity across these temperatures? And if so, which temperature is truly optimal?”</em></strong></p><p>This is precisely the scenario where <strong><em>Analysis of Variance (ANOVA)</em></strong> becomes your statistical ally. But performing these calculations manually for multiple experimental groups can be tedious and error-prone. Let’s explore how Python can transform this analysis into an efficient, reproducible workflow.</p><h3>Understanding ANOVA: The Basics</h3><p>ANOVA (Analysis of Variance) allows us to compare means across multiple groups simultaneously. Unlike the t-test, which compares just two groups, ANOVA can handle three or more groups in a single analysis.</p><p>The fundamental question ANOVA answers is: <strong>Are the differences between group means statistically significant, or are they likely due to random chance?</strong></p><p>At its core, ANOVA compares two sources of variation:</p><ul><li>Variation <strong>between</strong> groups (are the group means different from each other?)</li><li>Variation <strong>within</strong> groups (how much do individual measurements vary within each group?)</li></ul><p>If the between-group variation is significantly larger than the within-group variation, we conclude that at least some of the group means differ significantly.</p><h3>The Python Advantage for ANOVA</h3><p>While you could calculate ANOVA by hand or use point-and-click statistical software, Python offers several advantages:</p><ul><li><strong>Reproducibility</strong>: Your analysis is documented in code that can be shared and rerun</li><li><strong>Automation</strong>: Process dozens or hundreds of datasets with minimal manual intervention</li><li><strong>Integration</strong>: Combine your statistical analysis with data preprocessing, visualization, and even machine learning</li><li><strong>Customization</strong>: Tailor your analysis and visualizations to your specific needs</li><li><strong>Free and open-source</strong>: No expensive software licenses required</li></ul><p>Let’s see how this works in practice with our enzyme activity example.</p><h3>Python Implementation: ANOVA for Enzyme Activity Analysis</h3><p>First, let’s set up our environment and create some sample data:</p><pre>import numpy as np<br>import pandas as pd<br>import matplotlib.pyplot as plt<br>import seaborn as sns<br>from scipy import stats<br>import statsmodels.api as sm<br>from statsmodels.formula.api import ols<br><br># Set a professional style for our plots<br>plt.style.use(&#39;seaborn-v0_8-whitegrid&#39;)<br>sns.set_palette(&#39;viridis&#39;)<br><br># Let&#39;s create a sample dataset for enzyme activity (μmol/min) at different temperatures<br>np.random.seed(42)  # For reproducibility<br><br># Create synthetic data for enzyme activity at 5 different temperatures<br>temp_20C = np.random.normal(15, 3, 10)  # Mean activity of 15 at 20°C<br>temp_30C = np.random.normal(23, 3, 10)  # Mean activity of 23 at 30°C <br>temp_40C = np.random.normal(28, 3, 10)  # Mean activity of 28 at 40°C (optimal)<br>temp_50C = np.random.normal(20, 3, 10)  # Mean activity of 20 at 50°C<br>temp_60C = np.random.normal(12, 3, 10)  # Mean activity of 12 at 60°C (enzyme denaturation)<br><br># Create a DataFrame to organize our data<br>data = pd.DataFrame({<br>    &#39;Temperature&#39;: np.repeat([&#39;20°C&#39;, &#39;30°C&#39;, &#39;40°C&#39;, &#39;50°C&#39;, &#39;60°C&#39;], 10),<br>    &#39;Enzyme_Activity&#39;: np.concatenate([temp_20C, temp_30C, temp_40C, temp_50C, temp_60C])<br>})<br><br># Display the first few rows of our dataset<br>(data.head(10))</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/210/1*N7q59fBNsJdkaGNWdHWRKQ.png" /></figure><pre># Summary statistics for each temperature group<br>print(&quot;\nSummary Statistics:&quot;)<br>(data.groupby(&#39;Temperature&#39;)[&#39;Enzyme_Activity&#39;].describe())</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/766/1*h7XRYNpkQVGQRnTeJLx82g.png" /></figure><p>Now that we have our data ready, let’s visualize it to get an initial understanding of the differences between groups:</p><pre># Let&#39;s visualize our data to get an initial sense of the differences<br>plt.figure(figsize=(12, 6))<br><br># 1. Boxplot to show the distribution of enzyme activity at each temperature<br>plt.subplot(1, 2, 1)<br>sns.boxplot(x=&#39;Temperature&#39;, y=&#39;Enzyme_Activity&#39;, data=data, order=[&#39;20°C&#39;, &#39;30°C&#39;, &#39;40°C&#39;, &#39;50°C&#39;, &#39;60°C&#39;])<br>plt.title(&#39;Enzyme Activity at Different Temperatures&#39;)<br>plt.xlabel(&#39;Temperature&#39;)<br>plt.ylabel(&#39;Enzyme Activity (μmol/min)&#39;)<br><br># 2. Strip plot overlaid on boxplot to show individual data points<br>plt.subplot(1, 2, 2)<br>sns.boxplot(x=&#39;Temperature&#39;, y=&#39;Enzyme_Activity&#39;, data=data, order=[&#39;20°C&#39;, &#39;30°C&#39;, &#39;40°C&#39;, &#39;50°C&#39;, &#39;60°C&#39;], color=&#39;lightgrey&#39;)<br>sns.stripplot(x=&#39;Temperature&#39;, y=&#39;Enzyme_Activity&#39;, data=data, order=[&#39;20°C&#39;, &#39;30°C&#39;, &#39;40°C&#39;, &#39;50°C&#39;, &#39;60°C&#39;], <br>              jitter=True, alpha=0.7, size=8)<br>plt.title(&#39;Individual Measurements of Enzyme Activity&#39;)<br>plt.xlabel(&#39;Temperature&#39;)<br>plt.ylabel(&#39;Enzyme Activity (μmol/min)&#39;)<br><br>plt.tight_layout()<br>plt.savefig(&#39;enzyme_activity_visualization.png&#39;, dpi=300)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/985/1*F-ezLCngg1jMOLM3_XV73Q.png" /></figure><p>Now, let’s perform the ANOVA analysis:</p><pre># Approach 1: Using scipy.stats for one-way ANOVA<br># First, we need to get each group&#39;s data as separate arrays<br>group_20C = data[data[&#39;Temperature&#39;] == &#39;20°C&#39;][&#39;Enzyme_Activity&#39;]<br>group_30C = data[data[&#39;Temperature&#39;] == &#39;30°C&#39;][&#39;Enzyme_Activity&#39;]<br>group_40C = data[data[&#39;Temperature&#39;] == &#39;40°C&#39;][&#39;Enzyme_Activity&#39;]<br>group_50C = data[data[&#39;Temperature&#39;] == &#39;50°C&#39;][&#39;Enzyme_Activity&#39;]<br>group_60C = data[data[&#39;Temperature&#39;] == &#39;60°C&#39;][&#39;Enzyme_Activity&#39;]<br><br># Perform one-way ANOVA<br>f_statistic, p_value = stats.f_oneway(group_20C, group_30C, group_40C, group_50C, group_60C)<br><br>print(&quot;ANOVA Results using scipy.stats:&quot;)<br>print(f&quot;F-statistic: {f_statistic:.4f}&quot;)<br>print(f&quot;p-value: {p_value:.8f}&quot;)<br>print(f&quot;Significant difference? {&#39;Yes&#39; if p_value &lt; 0.05 else &#39;No&#39;}&quot;)<br>print()<br><br># Approach 2: Using statsmodels for more detailed output<br># Create a model using the formula syntax<br>model = ols(&#39;Enzyme_Activity ~ C(Temperature)&#39;, data=data).fit()<br>anova_table = sm.stats.anova_lm(model, typ=2)<br><br>print(&quot;ANOVA Results using statsmodels:&quot;)<br>print(anova_table)<br><br># Since ANOVA only tells us that there&#39;s a difference, but not which groups differ,<br># we&#39;ll perform a post-hoc Tukey&#39;s HSD test to identify specific differences<br>from statsmodels.stats.multicomp import pairwise_tukeyhsd<br><br># Perform the Tukey&#39;s test<br>tukey = pairwise_tukeyhsd(endog=data[&#39;Enzyme_Activity&#39;], groups=data[&#39;Temperature&#39;], alpha=0.05)<br><br>print(&quot;\nTukey&#39;s HSD Post-hoc Test:&quot;)<br>print(tukey)<br><br># Let&#39;s visualize the Tukey&#39;s test results<br>plt.figure(figsize=(10, 6))<br>tukey.plot_simultaneous()<br>plt.title(&quot;Tukey&#39;s HSD: 95% Confidence Intervals for Pairwise Differences&quot;)<br>plt.tight_layout()<br>plt.savefig(&#39;tukey_test_results.png&#39;, dpi=300)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/619/1*bQHQGImYMWzp7NL0kd2puw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/878/1*bPgx9xZvxzmDdjDDmnwMPQ.png" /></figure><p>Let’s create a visualization that shows the complete ANOVA process and interpretation in mermaid for better visualization.</p><pre>flowchart TD<br>    A[Raw Experimental Data] --&gt; B[Data Preparation with Pandas]<br>    B --&gt; C[Exploratory Data Visualization\nBoxplots/Strip plots]<br>    C --&gt; D[Check ANOVA Assumptions\n1. Independence\n2. Normality\n3. Homogeneity of variance]<br>    D --&gt; E[One-way ANOVA\nUsing scipy.stats or statsmodels]<br>    E --&gt;|p &lt; 0.05| F[Post-hoc Tests\nTukey&#39;s HSD]<br>    E --&gt;|p ≥ 0.05| G[No significant differences\nbetween group means]<br>    F --&gt; H[Identify which specific\ngroups differ significantly]<br>    H --&gt; I[Interpret Results in\nBiological Context]<br>    G --&gt; I<br>    I --&gt; J[Report Results &amp;\nVisualize Findings]</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r7MpMYDU1_y-b-wzFtPgUg.png" /></figure><p>Finally, let’s check ANOVA assumptions and create a comprehensive report of our findings:</p><pre># Let&#39;s check the ANOVA assumptions<br><br># 1. Normality: Check if residuals are normally distributed<br>residuals = model.resid<br>fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))<br><br># QQ plot for normality<br>from statsmodels.graphics.gofplots import qqplot<br>qqplot(residuals, line=&#39;45&#39;, ax=ax1)<br>ax1.set_title(&#39;Q-Q Plot of Residuals&#39;)<br><br># Histogram of residuals<br>ax2.hist(residuals, bins=15, edgecolor=&#39;black&#39;)<br>ax2.set_title(&#39;Histogram of Residuals&#39;)<br>ax2.set_xlabel(&#39;Residual Value&#39;)<br>ax2.set_ylabel(&#39;Frequency&#39;)<br><br>plt.tight_layout()<br>plt.savefig(&#39;anova_assumptions_normality.png&#39;, dpi=300)<br>plt.show()<br><br># 2. Homogeneity of variance: Check if variances are equal across groups<br>groups = [group_20C, group_30C, group_40C, group_50C, group_60C]<br>group_names = [&#39;20°C&#39;, &#39;30°C&#39;, &#39;40°C&#39;, &#39;50°C&#39;, &#39;60°C&#39;]<br><br># Plot variances<br>variances = [np.var(group, ddof=1) for group in groups]<br>plt.figure(figsize=(10, 6))<br>plt.bar(group_names, variances, color=&#39;skyblue&#39;, edgecolor=&#39;black&#39;)<br>plt.title(&#39;Variance of Enzyme Activity Within Each Temperature Group&#39;)<br>plt.xlabel(&#39;Temperature&#39;)<br>plt.ylabel(&#39;Variance&#39;)<br>plt.grid(axis=&#39;y&#39;, linestyle=&#39;--&#39;, alpha=0.7)<br>plt.savefig(&#39;anova_assumptions_variance.png&#39;, dpi=300)<br>plt.show()<br><br># Statistical test for homogeneity of variance<br>homogeneity_statistic, homogeneity_p_value = stats.levene(*groups)<br>print(&quot;Levene&#39;s Test for Homogeneity of Variance:&quot;)<br>print(f&quot;Test statistic: {homogeneity_statistic:.4f}&quot;)<br>print(f&quot;p-value: {homogeneity_p_value:.8f}&quot;)<br>print(f&quot;Equal variances assumption met? {&#39;Yes&#39; if homogeneity_p_value &gt; 0.05 else &#39;No&#39;}&quot;)<br><br># Create a comprehensive summary of findings<br>print(&quot;\n&quot; + &quot;=&quot;*60)<br>print(&quot;COMPREHENSIVE ANOVA ANALYSIS REPORT&quot;)<br>print(&quot;=&quot;*60)<br><br>print(&quot;\n1. EXPERIMENTAL SETUP:&quot;)<br>print(&quot;   - Analysis of enzyme activity (μmol/min) across 5 temperature conditions&quot;)<br>print(&quot;   - 10 replicates per temperature condition&quot;)<br>print(&quot;   - Temperature range: 20°C to 60°C&quot;)<br><br>print(&quot;\n2. EXPLORATORY STATISTICS:&quot;)<br>print(data.groupby(&#39;Temperature&#39;)[&#39;Enzyme_Activity&#39;].agg([&#39;mean&#39;, &#39;std&#39;, &#39;min&#39;, &#39;max&#39;]))<br><br>print(&quot;\n3. ANOVA RESULTS:&quot;)<br>print(f&quot;   - F-statistic: {f_statistic:.4f}&quot;)<br>print(f&quot;   - p-value: {p_value:.8f}&quot;)<br>print(f&quot;   - Conclusion: {&#39;There are significant differences in enzyme activity between temperature groups.&#39; if p_value &lt; 0.05 else &#39;No significant differences in enzyme activity between temperature groups.&#39;}&quot;)<br><br>if p_value &lt; 0.05:<br>    print(&quot;\n4. POST-HOC ANALYSIS (TUKEY&#39;S HSD):&quot;)<br>    # Create a more readable summary of the Tukey results<br>    tukey_results = []<br>    for i, row in enumerate(tukey._results_table.data[1:]):<br>        group1, group2, meandiff, lower, upper, reject = row<br>        result = &quot;Different&quot; if reject else &quot;Not different&quot;<br>        tukey_results.append([group1, group2, f&quot;{meandiff:.2f}&quot;, f&quot;{lower:.2f}&quot;, f&quot;{upper:.2f}&quot;, result])<br>    <br>    df_tukey = pd.DataFrame(tukey_results, <br>                          columns=[&#39;Group 1&#39;, &#39;Group 2&#39;, &#39;Mean Diff&#39;, &#39;Lower CI&#39;, &#39;Upper CI&#39;, &#39;Result&#39;])<br>    print(df_tukey.to_string(index=False))<br>    <br>    # Identify optimal condition<br>    group_means = data.groupby(&#39;Temperature&#39;)[&#39;Enzyme_Activity&#39;].mean().sort_values(ascending=False)<br>    print(f&quot;\n   - Optimal temperature condition: {group_means.index[0]} (Mean activity: {group_means.iloc[0]:.2f} μmol/min)&quot;)<br><br>print(&quot;\n5. ASSUMPTION VERIFICATION:&quot;)<br>print(f&quot;   - Homogeneity of variance (Levene&#39;s test p-value): {homogeneity_p_value:.4f} ({&#39;Assumption met&#39; if homogeneity_p_value &gt; 0.05 else &#39;Assumption violated&#39;})&quot;)<br>print(&quot;   - Normality of residuals: Visually assessed via Q-Q plot and histogram&quot;)<br>print(&quot;   - Independence: Assumed based on experimental design&quot;)<br><br>print(&quot;\n6. BIOLOGICAL INTERPRETATION:&quot;)<br>print(&quot;   - Enzyme activity appears to peak at 40°C, suggesting this is the optimal temperature&quot;)<br>print(&quot;   - Activity decreases at both lower and higher temperatures&quot;)<br>print(&quot;   - The sharp decline at 60°C likely indicates thermal denaturation of the enzyme&quot;)<br>print(&quot;   - These findings align with typical mesophilic enzyme behavior&quot;)<br><br>print(&quot;\n7. RECOMMENDATIONS:&quot;)<br>print(&quot;   - For maximum biofuel production efficiency, operate process at or near 40°C&quot;)<br>print(&quot;   - Consider temperature control systems to maintain optimal conditions&quot;)<br>print(&quot;   - Next experiments should explore narrower temperature range (35-45°C) with finer resolution&quot;)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/878/1*RoLafX_WDmAQingj7fZBSA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*SXfULEFlln13EbdRpZ9f0A.png" /></figure><p>Let’s create one more visualization of the optimal temperature curve:</p><pre># Let&#39;s create a clear visualization of the temperature response curve<br># First, get the mean activity for each temperature<br>temp_means = data.groupby(&#39;Temperature&#39;)[&#39;Enzyme_Activity&#39;].mean()<br><br># Convert temperature labels to numeric for plotting the curve<br>temp_numeric = [20, 30, 40, 50, 60]  # The actual temperatures without the °C symbol<br><br>plt.figure(figsize=(10, 6))<br><br># Create a connecting line plot<br>plt.plot(temp_numeric, temp_means.values, marker=&#39;o&#39;, markersize=10, linewidth=2, color=&#39;#1f77b4&#39;)<br><br># Add error bars (standard error)<br>temp_stderr = data.groupby(&#39;Temperature&#39;)[&#39;Enzyme_Activity&#39;].sem()<br>plt.errorbar(temp_numeric, temp_means.values, yerr=temp_stderr.values, fmt=&#39;none&#39;, capsize=5, ecolor=&#39;#1f77b4&#39;, alpha=0.7)<br><br># Add points for individual measurements with jitter<br>for i, temp in enumerate(temp_numeric):<br>    # Get the data for this temperature<br>    group_data = data[data[&#39;Temperature&#39;] == f&#39;{temp}°C&#39;][&#39;Enzyme_Activity&#39;].values<br>    # Add jitter to the x-coordinates<br>    jittered_x = np.random.normal(temp, 0.5, size=len(group_data))<br>    plt.scatter(jittered_x, group_data, alpha=0.4, color=&#39;#1f77b4&#39;, s=40)<br><br># Highlight the optimal temperature<br>optimal_temp = temp_numeric[temp_means.argmax()]<br>optimal_activity = temp_means.max()<br>plt.scatter([optimal_temp], [optimal_activity], s=200, color=&#39;red&#39;, zorder=10, label=f&#39;Optimal: {optimal_temp}°C&#39;)<br><br># Add reference line and annotation for optimal temperature<br>plt.axvline(x=optimal_temp, color=&#39;red&#39;, linestyle=&#39;--&#39;, alpha=0.3)<br>plt.annotate(f&#39;Optimal Temperature: {optimal_temp}°C\nMax Activity: {optimal_activity:.2f} μmol/min&#39;,<br>            xy=(optimal_temp, optimal_activity), xytext=(optimal_temp+5, optimal_activity-2),<br>            arrowprops=dict(facecolor=&#39;black&#39;, shrink=0.05, width=1.5, headwidth=8),<br>            fontsize=10, ha=&#39;center&#39;)<br><br># Enhance the plot with proper labels and styling<br>plt.xlabel(&#39;Temperature (°C)&#39;, fontsize=12)<br>plt.ylabel(&#39;Enzyme Activity (μmol/min)&#39;, fontsize=12)<br>plt.title(&#39;Temperature Dependence of Enzyme Activity&#39;, fontsize=14)<br>plt.grid(True, linestyle=&#39;--&#39;, alpha=0.7)<br>plt.xticks(temp_numeric)<br><br># Add a subtle background for the enzyme denaturation zone<br>plt.axvspan(50, 60, alpha=0.2, color=&#39;red&#39;, label=&#39;Denaturation Zone&#39;)<br><br># Add denaturation annotation<br>plt.annotate(&#39;Enzyme Denaturation Zone&#39;,<br>            xy=(55, temp_means.values[-1]), xytext=(55, temp_means.values[-1]-5),<br>            arrowprops=dict(facecolor=&#39;red&#39;, shrink=0.05, width=1, headwidth=5, alpha=0.6),<br>            fontsize=10, ha=&#39;center&#39;, color=&#39;darkred&#39;)<br><br>plt.legend(loc=&#39;lower left&#39;)<br>plt.tight_layout()<br>plt.savefig(&#39;enzyme_temperature_curve.png&#39;, dpi=300)<br>plt.show()<br><br># Also, let&#39;s create a simple predicted vs. actual plot for our model<br>predicted = model.predict()<br>plt.figure(figsize=(8, 6))<br>plt.scatter(predicted, data[&#39;Enzyme_Activity&#39;], alpha=0.7)<br>plt.plot([data[&#39;Enzyme_Activity&#39;].min(), data[&#39;Enzyme_Activity&#39;].max()], <br>         [data[&#39;Enzyme_Activity&#39;].min(), data[&#39;Enzyme_Activity&#39;].max()], <br>         &#39;k--&#39;, lw=2)<br>plt.xlabel(&#39;Predicted Enzyme Activity&#39;, fontsize=12)<br>plt.ylabel(&#39;Actual Enzyme Activity&#39;, fontsize=12)<br>plt.title(&#39;Model Fit: Predicted vs. Actual Enzyme Activity&#39;, fontsize=14)<br>plt.grid(True, linestyle=&#39;--&#39;, alpha=0.7)<br>plt.tight_layout()<br>plt.savefig(&#39;model_fit.png&#39;, dpi=300)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jc886DGvGrfCVofdpiXyxg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qphw018j5Uc0Fy9kPeihkA.png" /></figure><h3>The Power of Python for Life Science Analysis</h3><p>In our walkthrough, we’ve demonstrated how Python can transform a relatively complex statistical analysis into a streamlined workflow. What would have taken hours of manual calculation and plotting can now be accomplished in minutes with just a few dozen lines of code.</p><p>As a biochemical engineer who once spent countless hours calculating ANOVAs by hand during my graduate studies, I still remember the “aha!” moment when I first automated this process with Python. Not only did it save time, but it also reduced errors and allowed me to focus on the biological implications rather than getting lost in calculation steps.</p><h3>Key Benefits of Python Automation for ANOVA in Life Sciences</h3><ol><li><strong>Time efficiency</strong>: What would take hours manually can be done in minutes</li><li><strong>Reproducibility</strong>: The entire analysis is captured in code that can be shared with colleagues</li><li><strong>Scalability</strong>: The same code can analyze dozens of different enzymes or conditions</li><li><strong>Enhanced visualization</strong>: Create publication-quality figures that clearly communicate findings</li><li><strong>Documentation</strong>: The analysis process is self-documenting within the code</li></ol><h3>Important Assumptions and Limitations</h3><p>Before concluding, let’s address some important considerations when using ANOVA:</p><ol><li><strong>Independence</strong>: Samples should be independent of each other (achieved through proper experimental design)</li><li><strong>Normality</strong>: Data within each group should be approximately normally distributed</li><li><strong>Homogeneity of variance</strong>: Groups should have similar variances (we checked this with Levene’s test)</li></ol><p>If these assumptions are violated, alternative approaches like non-parametric tests (Kruskal-Wallis) or data transformations may be necessary.</p><p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -</p><h3>Conclusion: From Raw Data to Biological Insights</h3><p>Our ANOVA analysis revealed that enzyme activity differs significantly across temperature conditions, with 40°C being the optimal temperature for this particular enzyme. This insight has direct applications for bioprocess optimization in biofuel production.</p><p>By leveraging Python for this analysis, we’ve not only gained statistical confidence in our findings but also created a workflow that can be easily adapted for future experiments. The code can be modified to analyze different enzymes, different conditions, or even entirely different biological systems.</p><p>For bench scientists transitioning into data analysis, Python offers an accessible entry point that builds on your existing knowledge while expanding your analytical capabilities. The initial investment in learning these tools pays tremendous dividends in research efficiency and depth of analysis.</p><p>What biological systems are you working with that might benefit from ANOVA analysis with Python? Remember that the approach we’ve demonstrated can be adapted to virtually any multi-group comparison in life sciences, from gene expression analysis to drug efficacy studies.</p><blockquote>In conclusion, as a biologist, learning data science and machine learning can greatly enhance your research and career. By incorporating these tools and techniques into your skill-set, you can analyse large amounts of complex biological data, extract meaningful insights, and communicate your research findings to a wider audience.</blockquote><p>Follow me for more such real world problem-solving content on L<a href="https://www.linkedin.com/in/tamoghnadas12/">inkedin</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e1cee27a8d37" width="1" height="1" alt=""><hr><p><a href="https://medium.com/pythons-gurus/statistical-analysis-in-life-sciences-anova-with-python-automation-e1cee27a8d37">Statistical Analysis in Life Sciences: ANOVA with Python Automation</a> was originally published in <a href="https://medium.com/pythons-gurus">Python’s Gurus</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cracking the AI Code: Understanding Explainable AI (XAI)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/cracking-the-ai-code-understanding-explainable-ai-xai-0ad07df4a8e5?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/2600/1*KCIox8mVN-VMpnCPxVDkWA.jpeg" width="5688"></a></p><p class="medium-feed-snippet">Introduction: What is Explainable AI (XAI)?</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/cracking-the-ai-code-understanding-explainable-ai-xai-0ad07df4a8e5?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/cracking-the-ai-code-understanding-explainable-ai-xai-0ad07df4a8e5?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/0ad07df4a8e5</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Harshit Kandoi]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 06:57:01 GMT</pubDate>
            <atom:updated>2025-06-09T06:57:01.366Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Learning the Hidden Geometry of Graphs: A Practitioner’s Guide to Node2Vec]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/learning-the-hidden-geometry-of-graphs-a-practitioners-guide-to-node2vec-fc92faa4a6d9?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/1536/0*XvGx5Nn_aY6u44M8" width="1536"></a></p><p class="medium-feed-snippet">Abstract</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/learning-the-hidden-geometry-of-graphs-a-practitioners-guide-to-node2vec-fc92faa4a6d9?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/learning-the-hidden-geometry-of-graphs-a-practitioners-guide-to-node2vec-fc92faa4a6d9?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/fc92faa4a6d9</guid>
            <category><![CDATA[networking]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[graph]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Everton Gomede, PhD]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 06:27:46 GMT</pubDate>
            <atom:updated>2025-06-09T06:27:46.710Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Python Copy]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/python-copy-8ea1cf3418b7?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/2600/0*E6Emv8LDcJhnYo-A" width="5304"></a></p><p class="medium-feed-snippet">Understanding the Difference Between Shallow and Deep Copying</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/python-copy-8ea1cf3418b7?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/python-copy-8ea1cf3418b7?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/8ea1cf3418b7</guid>
            <category><![CDATA[python-programming]]></category>
            <category><![CDATA[python3]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[ｐｙｔｈｏｎ]]></category>
            <dc:creator><![CDATA[Jesse]]></dc:creator>
            <pubDate>Mon, 09 Jun 2025 06:27:16 GMT</pubDate>
            <atom:updated>2025-06-09T06:26:49.716Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[10 Side Hustle Business Ideas Using Python+Flask+Wise]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythons-gurus/10-side-hustle-business-ideas-using-python-flask-wise-98cf35057623?source=rss----e93c66715ad9---4"><img src="https://cdn-images-1.medium.com/max/2600/0*ZYIZ4-aXRa8yUQ6c" width="5472"></a></p><p class="medium-feed-snippet">Every day, I think about how to turn my knowledge into something valuable. But time is limited, and I&#x2019;ve realized I won&#x2019;t be able to build&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/pythons-gurus/10-side-hustle-business-ideas-using-python-flask-wise-98cf35057623?source=rss----e93c66715ad9---4">Continue reading on Python’s Gurus »</a></p></div>]]></description>
            <link>https://medium.com/pythons-gurus/10-side-hustle-business-ideas-using-python-flask-wise-98cf35057623?source=rss----e93c66715ad9---4</link>
            <guid isPermaLink="false">https://medium.com/p/98cf35057623</guid>
            <category><![CDATA[side-hustle]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[earn-money-online]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[Jesse]]></dc:creator>
            <pubDate>Mon, 02 Jun 2025 15:41:52 GMT</pubDate>
            <atom:updated>2025-05-30T10:16:54.074Z</atom:updated>
        </item>
    </channel>
</rss>