<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mohammed Swaleh</title>
    <description>The latest articles on DEV Community by Mohammed Swaleh (@maditech).</description>
    <link>https://dev.to/maditech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4071712%2F1df7d292-c5c6-4d4c-9e9a-90e823cea4e6.png</url>
      <title>DEV Community: Mohammed Swaleh</title>
      <link>https://dev.to/maditech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maditech"/>
    <language>en</language>
    <item>
      <title>Building an Interactive Excel Dashboard for E-commerce Product Analysis: A Case Study of Jumia Products</title>
      <dc:creator>Mohammed Swaleh</dc:creator>
      <pubDate>Mon, 07 Sep 2026 08:35:23 +0000</pubDate>
      <link>https://dev.to/maditech/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-15d2</link>
      <guid>https://dev.to/maditech/building-an-interactive-excel-dashboard-for-e-commerce-product-analysis-a-case-study-of-jumia-15d2</guid>
      <description>&lt;h2&gt;
  
  
  Project Introduction and Objective
&lt;/h2&gt;

&lt;p&gt;E-commerce platforms thrive on data. Sellers and marketplaces like Jumia need to understand how pricing, discounts, and customer feedback influence product performance. This project set out to build an interactive Excel dashboard that transforms raw Jumia product data into actionable insights.&lt;/p&gt;

&lt;p&gt;The goal was not just to create charts, but to audit, clean, analyze, and visualize the data in a way that supports evidence-based recommendations for sellers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dataset and Business Questions
&lt;/h2&gt;

&lt;p&gt;The dataset contained product names, current and old prices, advertised discounts, customer reviews, and ratings. Reviews were used as a proxy for engagement, since sales volumes were not available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key business questions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do larger discounts attract more reviews?
&lt;/li&gt;
&lt;li&gt;Do highly rated products show stronger engagement?
&lt;/li&gt;
&lt;li&gt;Is there a relationship between price and rating?
&lt;/li&gt;
&lt;li&gt;Which products perform best, and which need pricing or marketing adjustments?
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Initial Data-Quality Audit
&lt;/h2&gt;

&lt;p&gt;Before cleaning, the dataset revealed several issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Misspelled headers (e.g., &lt;code&gt;Ratingd&lt;/code&gt; instead of &lt;code&gt;Rating&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;Negative review counts
&lt;/li&gt;
&lt;li&gt;Blank values in reviews and ratings
&lt;/li&gt;
&lt;li&gt;Prices expressed as ranges
&lt;/li&gt;
&lt;li&gt;Duplicate product rows
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These anomalies were documented in a &lt;strong&gt;Data Dictionary worksheet&lt;/strong&gt; to ensure transparency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cleaning and Preparation Decisions
&lt;/h2&gt;

&lt;p&gt;Data cleaning followed clear, traceable rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prices:&lt;/strong&gt; stripped of “KSh” and commas, converted to currency (KES).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discounts:&lt;/strong&gt; converted to decimals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviews:&lt;/strong&gt; negative signs treated as scraping artifacts, converted to absolute values.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ratings:&lt;/strong&gt; standardized to decimals, blanks left as missing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price ranges:&lt;/strong&gt; replaced with midpoints, while preserving original text for auditability.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates:&lt;/strong&gt; removed only when all fields matched.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  PivotTable and Analysis Workflow
&lt;/h2&gt;

&lt;p&gt;PivotTables powered the analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rating Mix&lt;/strong&gt; → distribution of Poor, Average, Excellent products
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discount Mix&lt;/strong&gt; → proportion of Low, Medium, High discounts
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price vs Rating&lt;/strong&gt; → average rating by price category
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engagement by Discount&lt;/strong&gt; → reviews by discount category
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top Products&lt;/strong&gt; → ranked by rating, reviews, and discount
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scatter plots with trendlines and correlation coefficients tested relationships between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discounts vs Reviews
&lt;/li&gt;
&lt;li&gt;Ratings vs Reviews
&lt;/li&gt;
&lt;li&gt;Price vs Rating
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Dashboard Design and Slicer Connections
&lt;/h2&gt;

&lt;p&gt;The dashboard was designed for &lt;strong&gt;single-screen readability&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KPIs row: total products, average price, average discount, average rating, total reviews
&lt;/li&gt;
&lt;li&gt;Ranked tables: top products by rating, reviews, and discount
&lt;/li&gt;
&lt;li&gt;Scatter plots: discount vs reviews, rating vs reviews, price vs rating
&lt;/li&gt;
&lt;li&gt;Mix charts: rating and discount distributions
&lt;/li&gt;
&lt;li&gt;Slicers: interactive filters for rating, discount, and price categories
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consistent formatting ensured clarity:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KES for prices
&lt;/li&gt;
&lt;li&gt;Decimals for discounts and ratings
&lt;/li&gt;
&lt;li&gt;Thousands separators for reviews
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Price vs Rating
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Products priced between &lt;strong&gt;KSh 1600–1999&lt;/strong&gt; show the highest average rating (0.87).
&lt;/li&gt;
&lt;li&gt;Lower-priced items (KSh 400–799) also perform well (0.83).
&lt;/li&gt;
&lt;li&gt;Mid-range prices dip slightly, showing weaker ratings.
➡️ Both affordable and moderately premium products attract better ratings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fibsmhsok6r03qhqj1s2n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fibsmhsok6r03qhqj1s2n.jpg" alt="Price Versus Ratings" width="595" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Engagement by Discount
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engagement peaks in the &lt;strong&gt;0.2–0.3 discount band (~18 reviews)&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Very high discounts (&amp;gt;0.5) show lower engagement (~7 reviews).
➡️ Moderate discounts are the sweet spot for driving customer interaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwv40cicwbuoa6gcgwr3e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwv40cicwbuoa6gcgwr3e.jpg" alt="Engagement Versus Discount" width="644" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Top Products by Rating
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Near-perfect ratings (0.96):

&lt;ul&gt;
&lt;li&gt;LASA Folding Table Serving Stand
&lt;/li&gt;
&lt;li&gt;40cm Gold DIY Acrylic Wall Sticker Clock
&lt;/li&gt;
&lt;li&gt;Portable Home Small Air Humidifier
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwg9791mkl6ptyc6aefa9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwg9791mkl6ptyc6aefa9.jpg" alt="Top product by Rating" width="550" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Top Products by Reviews
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;120W Cordless Vacuum Cleaner&lt;/strong&gt; leads with 69 reviews but has a low rating (0.56).
&lt;/li&gt;
&lt;li&gt;Other high-engagement products:

&lt;ul&gt;
&lt;li&gt;137 Pieces Cake Decorating Tool Set (55 reviews)
&lt;/li&gt;
&lt;li&gt;Electronic Digital Vernier Caliper (49 reviews)
&lt;/li&gt;
&lt;li&gt;3D Waterproof EVA Shower Curtain (44 reviews)
➡️ High engagement does not always align with high ratings.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6dgj5eja0f4oyin9yrqo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6dgj5eja0f4oyin9yrqo.jpg" alt="Top products by reviews" width="554" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Top Products by Discount
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6-in-1 Bottle Can Opener&lt;/strong&gt; tops with a 64% discount.
&lt;/li&gt;
&lt;li&gt;Heavy discounting concentrated in &lt;strong&gt;low-cost household goods&lt;/strong&gt;.
➡️ Sellers use price cuts to stimulate demand in this category.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa2ulf3ep90h320t26dvb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa2ulf3ep90h320t26dvb.jpg" alt="Top product by Discount" width="575" height="237"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Correlation Analysis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price vs Rating:&lt;/strong&gt; Weak positive correlation (0.191426). Higher prices show a slight tendency toward better ratings, but the link is weak. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fznmwztpu0lt3jdpp1mqy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fznmwztpu0lt3jdpp1mqy.jpg" alt="Price Vs Ratings Scatter Chart" width="485" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ratings vs Reviews:&lt;/strong&gt; Weak positive correlation (0.14671). More reviews loosely align with higher ratings, but the relationship is minimal. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fay9ty3pwlcpem3h2jdun.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fay9ty3pwlcpem3h2jdun.jpg" alt="Ratings vs reviews Scatter chart" width="518" height="214"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discount vs Reviews:&lt;/strong&gt; Weak negative correlation (-0.13682). Larger discounts are slightly associated with fewer reviews.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2muirscgy4b2vakh8zp0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2muirscgy4b2vakh8zp0.jpg" alt="Discount vs Reviews Scatter chart" width="587" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;➡️ Overall, none of the variables strongly predict the others.&lt;/p&gt;




&lt;h2&gt;
  
  
  Business Recommendations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test discount bands to optimize engagement without eroding margins.
&lt;/li&gt;
&lt;li&gt;Improve listing content for products with visibility but average ratings.
&lt;/li&gt;
&lt;li&gt;Investigate quality issues for highly discounted but poorly rated items.
&lt;/li&gt;
&lt;li&gt;Promote products that combine excellent ratings with strong engagement.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Limitations and Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reviews are a proxy for engagement, not sales.
&lt;/li&gt;
&lt;li&gt;Missing values were left blank rather than imputed.
&lt;/li&gt;
&lt;li&gt;Price ranges required assumptions (midpoints).
&lt;/li&gt;
&lt;li&gt;Correlation does not imply causation — discounts may coincide with other factors like product age or visibility.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Dashboard Screenshot
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Jumia Product Dashboard Screenshot&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa6s9m6oufnf7nhzo9uul.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa6s9m6oufnf7nhzo9uul.jpg" alt="Jumia Dashboard" width="656" height="396"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This project demonstrates how Excel can be used not just for reporting, but for &lt;strong&gt;data-driven decision-making in e-commerce&lt;/strong&gt;. By combining careful cleaning, structured analysis, and interactive dashboards, sellers gain practical insights into how pricing and customer feedback shape product performance.&lt;/p&gt;




</description>
      <category>tutorial</category>
      <category>tools</category>
      <category>datascience</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Getting Started with Excel for Data Analytics: From Basics to Data Cleaning</title>
      <dc:creator>Mohammed Swaleh</dc:creator>
      <pubDate>Sat, 29 Aug 2026 21:14:53 +0000</pubDate>
      <link>https://dev.to/maditech/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-4p80</link>
      <guid>https://dev.to/maditech/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-4p80</guid>
      <description>&lt;h2&gt;
  
  
  Excel Data Cleaning &amp;amp; Analysis Guide
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;Excel is more than a spreadsheet—it’s a powerful data-analysis tool. Analysts use it to inspect, validate, filter, summarize, and prepare raw data before deeper analysis.&lt;br&gt;&lt;br&gt;
The quality of insights depends on the quality of data. That’s why data cleaning is the foundation of effective analysis.&lt;/p&gt;

&lt;p&gt;This guide demonstrates Week 1 Excel concepts using an employee dataset with fields like employee IDs, names, departments, gender, hire dates, salaries, education level, and performance scores. The raw file contains common issues: inconsistent capitalization, blanks, duplicates, varying department names, and misformatted dates/currency.  &lt;/p&gt;

&lt;p&gt;By applying Excel’s formatting tools, text functions, filters, conditional formatting, numerical functions, and date functions, we transform messy data into an analysis-ready dataset.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Why Data Cleaning Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Garbage in, garbage out: dashboards or predictions are misleading if data is flawed.
&lt;/li&gt;
&lt;li&gt;Standardization makes datasets transparent, usable, and valuable.
&lt;/li&gt;
&lt;li&gt;Examples:

&lt;ul&gt;
&lt;li&gt;“IT”, “I.T.”, and “Information Tech” → treated as different departments unless standardized.
&lt;/li&gt;
&lt;li&gt;Duplicate employee IDs → inflate totals.
&lt;/li&gt;
&lt;li&gt;Blank performance scores → missing information.
&lt;/li&gt;
&lt;li&gt;Dates saved as text → unreliable for tenure calculations.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Best practice: keep raw data separate, create a cleaned worksheet, and document your cleaning logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Dataset &amp;amp; Initial Inspection
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dataset size: 877 employee rows (with duplicates).
&lt;/li&gt;
&lt;li&gt;Issues: inconsistent formats in IDs, names, departments, salaries, and dates.
&lt;/li&gt;
&lt;li&gt;First steps:

&lt;ul&gt;
&lt;li&gt;Autofit Column Width for readability.
&lt;/li&gt;
&lt;li&gt;Freeze top row for easier navigation.
&lt;/li&gt;
&lt;li&gt;Apply a structured cleaning process.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.1 Standardizing Employee IDs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remove &lt;code&gt;emp-&lt;/code&gt; prefix for uniform IDs.
&lt;/li&gt;
&lt;li&gt;Use Conditional Formatting to highlight duplicates.
&lt;/li&gt;
&lt;li&gt;Action:

&lt;ul&gt;
&lt;li&gt;Delete exact duplicates.
&lt;/li&gt;
&lt;li&gt;Retain one ID if records differ.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Result: reduced dataset to 870+ entries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.2 Cleaning Names
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apply &lt;code&gt;=PROPER(text)&lt;/code&gt; → converts names to proper case.
&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;john&lt;/code&gt; → John.
&lt;/li&gt;
&lt;li&gt;Replace raw columns with corrected values.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.3 Standardizing Departments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Filter and rename department names for consistency.
&lt;/li&gt;
&lt;li&gt;Eliminates spelling variations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.4 Formatting Salaries &amp;amp; Bonuses
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Convert to KES currency format.
&lt;/li&gt;
&lt;li&gt;Sort values for comparison.
&lt;/li&gt;
&lt;li&gt;Replace other currencies with standardized KES.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.5 Dates &amp;amp; Employment Details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reformat Hire Dates consistently.
&lt;/li&gt;
&lt;li&gt;Sort newest → oldest for recruitment timeline.
&lt;/li&gt;
&lt;li&gt;Standardize categorical fields: Gender, Performance Score, Marital Status, Education Level, Employee Type, Office Location, Remote Work Status.
&lt;/li&gt;
&lt;li&gt;Standardize numerical fields: Experience, Project Count, Promotion Year, Training Hours, Feedback Score.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.6 Filtering Data
&lt;/h3&gt;

&lt;p&gt;Filters allow quick inspection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Employees in IT department.
&lt;/li&gt;
&lt;li&gt;Female employees only.
&lt;/li&gt;
&lt;li&gt;Salaries &amp;gt; 80,000.
&lt;/li&gt;
&lt;li&gt;Blank performance scores.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use Number Filters for thresholds (e.g., top 10 salaries).&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Identifying Data-Quality Issues
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Conditional Formatting
&lt;/h3&gt;

&lt;p&gt;Highlights problems without deleting data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Duplicate values.
&lt;/li&gt;
&lt;li&gt;Blank cells.
&lt;/li&gt;
&lt;li&gt;Dates before today.
&lt;/li&gt;
&lt;li&gt;Values above/below thresholds.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: Employee ID 10407 appears twice → verify before deleting.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Find &amp;amp; Replace (Ctrl + H)
&lt;/h3&gt;

&lt;p&gt;Quick fixes for repeated issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace “Finanace” → Finance.
&lt;/li&gt;
&lt;li&gt;Replace “N/A” → blank.
&lt;/li&gt;
&lt;li&gt;Replace unwanted characters in IDs.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use carefully—preview matches before replacing.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Cleaning Text with Functions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;=PROPER(text)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Capitalizes first letter&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;aNNa mWANGI&lt;/code&gt; → Anna Mwangi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;=LOWER(text)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Converts to lowercase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;JAMES&lt;/code&gt; → james&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;=UPPER(text)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Converts to uppercase&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;it&lt;/code&gt; → IT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.1 Removing Extra Spaces
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;=TRIM(A2)&lt;/code&gt; → removes leading, trailing, and repeated spaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Measuring &amp;amp; Extracting Text
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;=LEN(text)&lt;/code&gt; → counts characters.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=LEFT(text,n)&lt;/code&gt; → extracts from left.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=RIGHT(text,n)&lt;/code&gt; → extracts from right.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MID(text,start,n)&lt;/code&gt; → extracts middle.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=CONCAT(text1,text2,...)&lt;/code&gt; → joins text.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Numerical &amp;amp; Statistical Functions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Arithmetic Operators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; Addition
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt; Subtraction
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; Multiplication
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; Division
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;^&lt;/code&gt; Exponent
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5% salary increase → &lt;code&gt;=G2*0.05&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;New salary → &lt;code&gt;=G2+(G2*0.05)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 Aggregate Functions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;=SUM(range)&lt;/code&gt; → total
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=AVERAGE(range)&lt;/code&gt; → mean
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MEDIAN(range)&lt;/code&gt; → middle value
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MODE(range)&lt;/code&gt; → most frequent
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MIN(range)&lt;/code&gt; → lowest
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MAX(range)&lt;/code&gt; → highest
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Counting &amp;amp; Conditional Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 Count Functions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;COUNT&lt;/code&gt; → numeric cells only.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COUNTA&lt;/code&gt; → nonblank cells.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COUNTBLANK&lt;/code&gt; → empty cells.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.2 Conditional Counting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;COUNTIF(range,"IT")&lt;/code&gt; → IT employees.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COUNTIFS(range1,"IT",range2,"Female")&lt;/code&gt; → Female IT employees.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.3 Conditional Aggregation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SUMIF&lt;/code&gt; → total salaries by condition.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SUMIFS&lt;/code&gt; → multiple conditions.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AVERAGEIF&lt;/code&gt; → average by condition.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AVERAGEIFS&lt;/code&gt; → average with multiple conditions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Dates &amp;amp; Time-Based Cleaning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;=TODAY()&lt;/code&gt; → current date.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=NOW()&lt;/code&gt; → current date &amp;amp; time.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=YEAR(F2)&lt;/code&gt; → extract year.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=MONTH(F2)&lt;/code&gt; → extract month.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;=DAY(F2)&lt;/code&gt; → extract day.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.1 DATEDIF
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tenure in days → &lt;code&gt;=DATEDIF(F2,TODAY(),"d")&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Months → &lt;code&gt;"m"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Years → &lt;code&gt;"y"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.2 NETWORKDAYS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Working days between dates → &lt;code&gt;=NETWORKDAYS(F2,TODAY())&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Recommended Cleaning Workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Preserve raw data.
&lt;/li&gt;
&lt;li&gt;Copy into cleaned worksheet.
&lt;/li&gt;
&lt;li&gt;Inspect with filters &amp;amp; conditional formatting.
&lt;/li&gt;
&lt;li&gt;Identify duplicates visually.
&lt;/li&gt;
&lt;li&gt;Standardize text with TRIM, PROPER, LOWER, UPPER.
&lt;/li&gt;
&lt;li&gt;Validate text with LEN, LEFT, RIGHT, MID, CONCAT.
&lt;/li&gt;
&lt;li&gt;Check completeness with COUNT functions.
&lt;/li&gt;
&lt;li&gt;Summarize with COUNTIFS, SUMIFS, AVERAGEIFS.
&lt;/li&gt;
&lt;li&gt;Use date functions for tenure/workdays.
&lt;/li&gt;
&lt;li&gt;Review, document assumptions, then analyze.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Data cleaning must happen before interpretation.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conditional formatting → detect issues.
&lt;/li&gt;
&lt;li&gt;Filters → inspect subsets.
&lt;/li&gt;
&lt;li&gt;Find &amp;amp; Replace → correct repeated values.
&lt;/li&gt;
&lt;li&gt;Text functions → standardize labels.
&lt;/li&gt;
&lt;li&gt;Aggregate functions → summarize numbers.
&lt;/li&gt;
&lt;li&gt;Conditional functions → reveal group patterns.
&lt;/li&gt;
&lt;li&gt;Date functions → calculate time-based insights.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following a structured workflow, analysts ensure datasets are consistent, reliable, and ready for advanced analysis like PivotTables, dashboards, and statistical modeling.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>datascience</category>
      <category>analytics</category>
    </item>
    <item>
      <title>My First GitHub Project: From a Local Folder to GitHub Using Git and SSH</title>
      <dc:creator>Mohammed Swaleh</dc:creator>
      <pubDate>Sat, 22 Aug 2026 17:52:45 +0000</pubDate>
      <link>https://dev.to/maditech/my-first-github-project-from-a-local-folder-to-github-using-git-and-ssh-26mn</link>
      <guid>https://dev.to/maditech/my-first-github-project-from-a-local-folder-to-github-using-git-and-ssh-26mn</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I have always used the term &lt;em&gt;Git&lt;/em&gt;, &lt;em&gt;Github&lt;/em&gt; and &lt;em&gt;Git bash&lt;/em&gt; interchangeably, thinking they refer to the same thing, but I have come to learn and understand that &lt;em&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/em&gt; is an online platform on the internet where developers store and share their projects, or repositories. A &lt;em&gt;&lt;strong&gt;repository&lt;/strong&gt;&lt;/em&gt;, normally called a &lt;em&gt;repo&lt;/em&gt;, is a project being tracked by Git. &lt;em&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;/em&gt; is a version control system that runs on the local computer and can be used to track checkpoints created in a project. Therefore, &lt;em&gt;Git&lt;/em&gt; is the tool used to track changes in a project, while &lt;em&gt;&lt;strong&gt;SSH&lt;/strong&gt;&lt;/em&gt;, which stands for &lt;em&gt;Secure Shell&lt;/em&gt;, provides a secure way to connect your git running on your computer to GitHub on the internet. _ Git Bash _ is a tool or an application that can be used to run Git commands&lt;/p&gt;

&lt;p&gt;This guide explains how to upload a project from a local folder on your computer to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Create a GitHub Account&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://dev.tourl"&gt;(https://github.com/)&lt;/a&gt; and sign up for an account if you do not already have one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;(https://github.com/signup)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will normally provide your email address, password and username for the github account. After creating the account, verify your email address.&lt;/p&gt;

&lt;p&gt;After signing in, create a new repository. A repository is a storage space for your project.&lt;/p&gt;

&lt;p&gt;When creating the repository, provide a name for the repo, then click &lt;em&gt;Create repository&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Install Git on your windows PC&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;First, install Git on your computer from the official Git website:&lt;/p&gt;

&lt;p&gt;[Download Git] &lt;a href="https://dev.tourl"&gt;(https://git-scm.com/downloads)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After downloading the installer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your Downloads folder.&lt;/li&gt;
&lt;li&gt;Find the downloaded Git installer.&lt;/li&gt;
&lt;li&gt;Double-click it.&lt;/li&gt;
&lt;li&gt;Allow Windows to run the installer.&lt;/li&gt;
&lt;li&gt;Go through the installation screens.&lt;/li&gt;
&lt;li&gt;For a normal beginner installation, you can generally keep the recommended/default options.&lt;/li&gt;
&lt;li&gt;Complete the installation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One important tool installed with Git for Windows is Git Bash. After installing it, open git bash and run on the command prompt to check that Git works:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If Git is installed correctly, you will see its version number.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git version 2.55.0.windows.4&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Configure Git Username and Email Address&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Next, you need to tell git your username and email address associated with your GitHub account. You type on the command prompt&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config --global user.name "Your Full Name"&lt;/code&gt; &lt;em&gt;to configure your name&lt;/em&gt; and &lt;br&gt;
&lt;code&gt;git config --global user.email "Your Email address"&lt;/code&gt; &lt;em&gt;to configure your email&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;:&lt;br&gt;
&lt;code&gt;git config --global user.name "Mohammed Swaleh"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git config --global user.email mswaleh@gmail.com&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Configure main as the Default Branch
&lt;/h2&gt;

&lt;p&gt;Next, you need to Set &lt;em&gt;main&lt;/em&gt; as the Default Branch&lt;br&gt;
&lt;em&gt;Run&lt;/em&gt;:&lt;br&gt;
&lt;code&gt;git config --global init.defaultBranch main&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This tells Git to use main, as the default initial branch for new repositories.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;5. Verify Your Git Configuration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To check your name: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Type in Git Bash&lt;/em&gt;&lt;br&gt;
&lt;code&gt;git config --global user.name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To check your email:&lt;br&gt;
&lt;em&gt;type&lt;/em&gt;&lt;br&gt;
&lt;code&gt;git config --global user.email&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To check all global configuration:&lt;br&gt;
&lt;code&gt;git config --global --list&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You should see something similar to:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;user.name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Mohammed Swaleh&lt;/span&gt;
&lt;span class="py"&gt;user.email&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;mswaleh@gmail.com&lt;/span&gt;
&lt;span class="py"&gt;init.defaultbranch&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;6. Set Up Secure Shell (SSH)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SSH allows Git to connect securely to your GitHub account without asking for your password every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Confirm SSH key exists&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Open your terminal and check whether SSH key exists&lt;br&gt;
&lt;em&gt;Type&lt;/em&gt;&lt;br&gt;
&lt;code&gt;ls -al ~/.ssh&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can see&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;id_ed25519
id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;or older files such as:&lt;br&gt;
&lt;code&gt;id_rsa&lt;br&gt;
id_rsa.pub&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;if you encounter this error message:&lt;br&gt;
&lt;code&gt;No such file or directory&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This means that the SSH key does not exist and you need to create an SSH key&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Create an SSH key&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Type in the terminal:&lt;br&gt;
&lt;code&gt;ssh-keygen -t ed25519 -C "your_email@example.com"&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Replace:&lt;br&gt;
&lt;em&gt;&lt;a href="mailto:your_email@example.com"&gt;your_email@example.com&lt;/a&gt;&lt;/em&gt;, with the &lt;em&gt;email&lt;/em&gt; associated with your &lt;em&gt;GitHub account&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;ssh-keygen -t ed25519 -C "mswaleh@gmail.com"&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Press &lt;em&gt;Enter&lt;/em&gt; to accept the suggested file location. You can also create a passphrase for extra security.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Confirm That the Key Was Created&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;type:&lt;br&gt;
&lt;code&gt;ls -al ~/.ssh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should now see:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;id_ed25519
id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;7. ADD THE private SSH KEY TO THE SSH AGENT&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The SSH agent helps manage your private SSH key and can remember its passphrase during your session. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To Start the SSH Agent for windows, &lt;br&gt;
&lt;em&gt;open&lt;/em&gt;:&lt;br&gt;
&lt;em&gt;PowerShell, as Administrator.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On the powershell terminal, &lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;code&gt;Get-Service -Name ssh-agent | Set-Service -StartupType Manual&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;Start-Service ssh-agent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Exit powershell as an &lt;em&gt;administrator&lt;/em&gt;, open powershell as a &lt;em&gt;normal user&lt;/em&gt;,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Type:&lt;br&gt;
&lt;code&gt;ssh-add c:/Users/YOUR_USERNAME/.ssh/id_ed25519&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace:&lt;br&gt;
&lt;em&gt;YOUR_USERNAME&lt;/em&gt; with your actual Windows username.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;ssh-add c:/Users/mswaleh/.ssh/id_ed25519&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you do not know your Windows username, you can run:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;whoami&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You may receive something like:&lt;br&gt;
&lt;code&gt;DESKTOP-12345\mswaleh&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your username is therefore, in this example:&lt;br&gt;
&lt;code&gt;mswaleh&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;8. Windows — Copy the Public SSH Key&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Open Git Bash.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Run&lt;br&gt;
&lt;code&gt;cat ~/.ssh/id_ed25519.pub | clip&lt;/code&gt;&lt;br&gt;
The public key should now be in your clipboard.&lt;/p&gt;

&lt;p&gt;If that does not work, display it:&lt;br&gt;
&lt;code&gt;cat ~/.ssh/id_ed25519.pub&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You will see one long line similar to:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... mswaleh@gmail.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copy the entire line.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;9. ADD THE SSH KEY TO GITHUB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;On GitHub:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click your profile picture.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;SSH and GPG keys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;New SSH key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Give the key a name.&lt;/li&gt;
&lt;li&gt;Paste your public key.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add SSH key&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;GitHub may ask you to confirm your email account.&lt;br&gt;
Complete the confirmation.&lt;br&gt;
Your SSH public key should then appear in your GitHub account.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;10. TEST THE SSH CONNECTION&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Test GitHub SSH Authentication&lt;br&gt;
Return to:&lt;br&gt;
Git Bash on Windows,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Run:&lt;br&gt;
&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;br&gt;
If everything is correctly configured, you should get a message similar to:&lt;/p&gt;

&lt;p&gt;Hi YOUR_USERNAME! You've successfully authenticated, but GitHub does not provide shell access. This is a success message.&lt;br&gt;
It means:&lt;br&gt;
Computer&lt;br&gt;
↓&lt;br&gt;
Private SSH Key&lt;br&gt;
↓&lt;br&gt;
GitHub verifies the public key&lt;br&gt;
↓&lt;br&gt;
Authentication Successful&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;11. Open Your Local Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Use the terminal to move into your project folder.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;cd path/to/your-project&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can check the files in the folder with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;12. Turn the Folder Into a Git Repository&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Inside the project folder, run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This creates a hidden &lt;code&gt;.git&lt;/code&gt; folder. Git uses this folder to track changes in your project.&lt;/p&gt;

&lt;p&gt;Now check the status of your files:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;13. Add a README File&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A &lt;em&gt;README file&lt;/em&gt; explains what your project is about. Create a file called &lt;em&gt;README.md&lt;/em&gt; and write a short description.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# My First GitHub Project&lt;/span&gt;

This is my first project uploaded to GitHub using Git and SSH.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;14. Save Your Files in Git&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Add all project files:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The period means "add all files in this folder".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Create your first commit:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m "Initial commit"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A commit is a saved version of your project. The message explains what was changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;15. Connect the Local Folder to GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;On your GitHub repository page, copy the SSH address. It will look similar to this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git@github.com:your-username/your-repository.git&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Connect your local project to the GitHub repository:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git remote add origin git@github.com:your-username/your-repository.git&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can check the connection with:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;16. Upload the Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Rename your main branch to &lt;em&gt;main&lt;/em&gt;:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git branch -M main&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Then upload the project to GitHub:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git push -u origin main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;push&lt;/em&gt;  command sends your committed files from your computer to GitHub.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Refresh your GitHub repository page. Your project files should now be visible online.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;17. Updating the Project Later&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Whenever you make changes, use these three commands:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Describe your changes"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add homepage design"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This saves the new changes locally and uploads them to GitHub.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;18. Common Problems&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GitHub rejects the push&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Make sure the repository address is correct:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can replace the incorrect address with:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git remote set-url origin git@github.com:your-username/your-repository.git&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;SSH permission denied&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Check that your SSH key has been added to GitHub and test the connection again:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;ssh -T git@github.com&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Files are not uploaded&lt;/strong&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Check the repository status:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Then add, commit, and push the files:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add project files"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Final Git Workflow&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The basic workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit"&lt;/span&gt;
git remote add origin git@github.com:your-username/your-repository.git
git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;After the first upload, you usually only need:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Describe your changes"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Moving a project from a local folder to GitHub may seem difficult at first, but the process becomes simple with practice. Git tracks your work, GitHub stores it online, and SSH provides a secure connection between your computer and your GitHub account.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>git</category>
    </item>
  </channel>
</rss>
