Created
February 22, 2020 18:58
-
-
Save srinivas946/fa24dfafa08281604ff4515081a59515 to your computer and use it in GitHub Desktop.
Read the Information from a CSV file and perform data visualization
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import csv # load csv module to handle csv data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<b>create logic for pivot table</b>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<p>Download sample Information file - <a href=\"https://drive.google.com/open?id=1EinQJ7Z3WAKWqZvUsEZJXg_HlJ_On0J4\">link</a></p>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "{'Source IP': '129.144.60.201', 'Source Port': '45121', 'Destination IP': '10.0.0.1', 'Destination Port': '80', 'Count': '1'}\n", | |
| "{'Source IP': '60.248.89.69', 'Source Port': '25452', 'Destination IP': '10.0.2.1', 'Destination Port': '443', 'Count': '2'}\n", | |
| "{'Source IP': '122.170.12.200', 'Source Port': '245', 'Destination IP': '192.168.3.2', 'Destination Port': '443', 'Count': '1'}\n", | |
| "{'Source IP': '179.181.108.72', 'Source Port': '25455', 'Destination IP': '172.15.54.35', 'Destination Port': '443', 'Count': '1'}\n", | |
| "{'Source IP': '87.103.245.190', 'Source Port': '14785', 'Destination IP': '10.0.0.5', 'Destination Port': '80', 'Count': '1'}\n", | |
| "{'Source IP': '196.52.43.95', 'Source Port': '2543', 'Destination IP': '10.0.0.1', 'Destination Port': '80', 'Count': '2'}\n", | |
| "{'Source IP': '60.248.89.69', 'Source Port': '1159', 'Destination IP': '10.0.2.1', 'Destination Port': '80', 'Count': '2'}\n", | |
| "{'Source IP': '129.144.60.201', 'Source Port': '3645', 'Destination IP': '192.168.2.4', 'Destination Port': '80', 'Count': '1'}\n", | |
| "{'Source IP': '179.181.108.72', 'Source Port': '25', 'Destination IP': '172.18.25.36', 'Destination Port': '80', 'Count': '2'}\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "with open('pivot_table.csv', 'r') as csvfile:\n", | |
| " csv_reader = csv.DictReader(csvfile)\n", | |
| " for row in csv_reader:\n", | |
| " print(row)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "{'179.181.108.72': 2,\n", | |
| " '60.248.89.69': 2,\n", | |
| " '87.103.245.190': 1,\n", | |
| " '122.170.12.200': 1,\n", | |
| " '196.52.43.95': 1,\n", | |
| " '129.144.60.201': 2}" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "source_set, data_list = set(), []\n", | |
| "with open('pivot_table.csv', 'r') as csvfile:\n", | |
| " csv_reader = csv.DictReader(csvfile)\n", | |
| " for row in csv_reader:\n", | |
| " source_set.add(row['Source IP'])\n", | |
| " data_list.append(row['Source IP'])\n", | |
| "pivot_data = {}\n", | |
| "for ip in source_set:\n", | |
| " repeat_count = 0\n", | |
| " for data in data_list:\n", | |
| " if ip == data: repeat_count += 1\n", | |
| " pivot_data[ip] = repeat_count\n", | |
| "pivot_data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<b>visualize the obtained data</b>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import matplotlib.pyplot as plt # load matplotlib module to handle charts" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<li>Matplotlib is a Python Package used for data visualization</li>\n", | |
| "<li>Official documentation of matplotlib - <a href=\"https://matplotlib.org/\">link</a></li>\n", | |
| "<li>Easy way to learn data visualization - Refer my Tutorials <a href=\"https://github.com/srinivas946/Matplotlib_Tuts\">link</a></li>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "x = list(pivot_data.keys())\n", | |
| "y = list(pivot_data.values())\n", | |
| "plt.bar(x, y, color=['skyblue', 'orange', 'green', 'yellow', 'pink'], alpha=0.5, width=0.5)\n", | |
| "plt.xlabel('IPAddress')\n", | |
| "plt.xticks(rotation=90)\n", | |
| "plt.ylabel('Count')\n", | |
| "plt.title('IP Address Statistics', pad=25)\n", | |
| "plt.gca().spines['right'].set_visible(False) # remove right spine\n", | |
| "plt.gca().spines['top'].set_visible(False) # remove left spine\n", | |
| "for i, j in enumerate(y):\n", | |
| " plt.text(x=i, y=j+0.1, s=str(j))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<b>Real Time Process Script</b>" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "import csv\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "\n", | |
| "# =========================================\n", | |
| "# CREATE PIVOT TABLE LOGIC AND VISUALIZE\n", | |
| "# =========================================\n", | |
| "class Pivot_Visualize:\n", | |
| " \n", | |
| " # ===================================\n", | |
| " # READ FILE PATH TO LOAD CSV DATA\n", | |
| " # ===================================\n", | |
| " def __init__(self, read_file_path):\n", | |
| " self._read_file_path = read_file_path\n", | |
| " \n", | |
| " # =================================\n", | |
| " # READ CSV FILE TO EXTRACT DATA\n", | |
| " # =================================\n", | |
| " def read_csv_file(self):\n", | |
| " source_set, data_list = set(), []\n", | |
| " with open('pivot_table.csv', 'r') as csvfile:\n", | |
| " csv_reader = csv.DictReader(csvfile)\n", | |
| " for row in csv_reader:\n", | |
| " source_set.add(row['Source IP'])\n", | |
| " data_list.append(row['Source IP'])\n", | |
| " pivot_data = {}\n", | |
| " for ip in source_set:\n", | |
| " repeat_count = 0\n", | |
| " for data in data_list:\n", | |
| " if ip == data: repeat_count += 1\n", | |
| " pivot_data[ip] = repeat_count\n", | |
| " return pivot_data\n", | |
| " \n", | |
| " # ======================================\n", | |
| " # CREATE BAR CHART BY READING CSV FILE\n", | |
| " # ======================================\n", | |
| " def create_visualization(self, pivot_data):\n", | |
| " x = list(pivot_data.keys())\n", | |
| " y = list(pivot_data.values())\n", | |
| " plt.bar(x, y, color=['skyblue', 'orange', 'green', 'yellow', 'pink'], alpha=0.5, width=0.5)\n", | |
| " plt.xlabel('IPAddress')\n", | |
| " plt.xticks(rotation=90)\n", | |
| " plt.ylabel('Count')\n", | |
| " plt.title('IP Address Statistics', pad=25)\n", | |
| " plt.gca().spines['right'].set_visible(False) # remove right spine\n", | |
| " plt.gca().spines['top'].set_visible(False) # remove left spine\n", | |
| " for i, j in enumerate(y):\n", | |
| " plt.text(x=i, y=j+0.1, s=str(j))\n", | |
| " plt.show()\n", | |
| " \n", | |
| "# =====================================\n", | |
| "# PROGRAM EXECUTION STARTS HERE\n", | |
| "# =====================================\n", | |
| "pv = Pivot_Visualize(read_file_path='pivot_table.csv')\n", | |
| "pivot_data = pv.read_csv_file()\n", | |
| "pv.create_visualization(pivot_data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<b>Learn more Real Time Scenarios related to CSV file - Refer <a href=\"https://cybersecpy.in/handle-csv-files-using-python/\">cybersecpy.in</a></b>" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.8.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment