Skip to content

Instantly share code, notes, and snippets.

@EricPostMaster
Last active February 2, 2020 18:23
Show Gist options
  • Save EricPostMaster/2ddfb05f8ffeced136b7a0bdaf0da050 to your computer and use it in GitHub Desktop.
Save EricPostMaster/2ddfb05f8ffeced136b7a0bdaf0da050 to your computer and use it in GitHub Desktop.
Passwords_Analysis.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Passwords_Analysis.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"authorship_tag": "ABX9TyPc3wPlp6GUJMLYxUnqSHP0",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/EricPostMaster/2ddfb05f8ffeced136b7a0bdaf0da050/passwords_analysis.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gRHhFxpZoOOM",
"colab_type": "text"
},
"source": [
"#Hacked Passwords Information"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YIWPwS9QoTjp",
"colab_type": "text"
},
"source": [
"##Import Data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zZ5Q52nVnbtF",
"colab_type": "code",
"cellView": "both",
"colab": {}
},
"source": [
"#@title\n",
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "y2FSAmxanSwU",
"colab_type": "code",
"colab": {}
},
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import statistics\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"sns.set(color_codes = True)\n",
"%matplotlib inline"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ZGmkjgaEnFui",
"colab_type": "code",
"colab": {}
},
"source": [
"df = pd.read_fwf('/content/drive/My Drive/passwords.txt', header=None)\n",
"df.columns = [\"password\"]\n",
"\n",
"df2 = df.iloc[0:2000001]"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "tXmD-oJCnnMh",
"colab_type": "code",
"outputId": "ddc61f9f-29dd-44c8-bc38-9c94e9333010",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 255
}
},
"source": [
"print(df2[0:100])"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" password\n",
"0 07606374520\n",
"1 piontekendre\n",
"2 rambo144\n",
"3 primoz123\n",
"4 sal1387\n",
".. ...\n",
"95 d8kx90h6\n",
"96 ferencztihamer\n",
"97 ce#ebc.dk\n",
"98 goddess5\n",
"99 20071002\n",
"\n",
"[100 rows x 1 columns]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HTwUQNgEogps",
"colab_type": "code",
"outputId": "de8196a0-4bb1-4551-a7a1-9e21caeb3df2",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"df2.size"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"2000001"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "e-7Kis0QuG-U",
"colab_type": "code",
"outputId": "3ea0e374-7a30-41b6-e15e-dbd87f5ea633",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"type(df2)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RAMVoOLUov0_",
"colab_type": "text"
},
"source": [
"Okay, so we have a single-column list of 2,000,001 passwords to work with. Great!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_GQSQTKAo-TU",
"colab_type": "text"
},
"source": [
"##Descriptive Analysis"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0OW4kOyGo4y1",
"colab_type": "text"
},
"source": [
"###What do they have in common?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7333Mk6ZpYOD",
"colab_type": "text"
},
"source": [
"Some things I'm interested in looking at:\n",
"\n",
"\n",
"* Average password length\n",
"* How many of them have numbers?\n",
"* How many of them are ONLY numbers?\n",
"* How many of them have letters?\n",
"* How many of them have ONLY letters?\n",
"* How many letters do they have on average?\n",
"* How many numbers do they have on average?\n",
"* What are the most common numbers?\n",
"* What are the most common letters?\n",
"* What are the most common combinations of numbers?\n",
"* What are the most common combinations of letters?\n",
"* If you can predict the first letter, can you predict the second letter? _Decision tree analysis would be good here._\n",
"* How many begin with a Capital letter? Lower case? Number? Special character?\n",
"* How many contain a special character?\n",
"* Average number of capital letters, lower case letters, numbers, and special characters.\n",
"* How many are all uppercase/lower case?\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "WlzU4FR5uGDY",
"colab_type": "code",
"outputId": "6f869f99-72c9-41cf-adaa-69eea656580b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 377
}
},
"source": [
"# I want to add a new column that contains the length of each item\n",
"# I need to create the new column\n",
"# Then I need to fill it with the len() of each item in column [0]\n",
"# Lastly, I need to add the column to the dataframe\n",
"\n",
"password_length = []\n",
"\n",
"for pw in df2.password:\n",
" password_length.append(len(str(pw)))\n",
"\n",
"df2[\"password_length\"] = password_length\n",
"print(df2[0:100])\n",
"# Looks like it worked! The new columns has been added to the dataframe."
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
" password password_length\n",
"0 07606374520 11\n",
"1 piontekendre 12\n",
"2 rambo144 8\n",
"3 primoz123 9\n",
"4 sal1387 7\n",
".. ... ...\n",
"95 d8kx90h6 8\n",
"96 ferencztihamer 14\n",
"97 ce#ebc.dk 9\n",
"98 goddess5 8\n",
"99 20071002 8\n",
"\n",
"[100 rows x 2 columns]\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:7: SettingWithCopyWarning: \n",
"A value is trying to be set on a copy of a slice from a DataFrame.\n",
"Try using .loc[row_indexer,col_indexer] = value instead\n",
"\n",
"See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
" import sys\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "t9n0kLmPGhog",
"colab_type": "code",
"outputId": "75c34bb7-78fa-4748-e3c1-4f9128bfdb4b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"df2.shape #Confirms that another column has been added to the dataframe."
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(2000001, 2)"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "G01LhCZ0ECDL",
"colab_type": "text"
},
"source": [
"### Average Password Length"
]
},
{
"cell_type": "code",
"metadata": {
"id": "HBKXA9-IC0sA",
"colab_type": "code",
"outputId": "8a0ce5fc-ebd8-401b-837c-3d0ae44694a7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"avg_password_length = df2.loc[:,\"password_length\"].mean()\n",
"print(\"Average password length:\", round(avg_password_length,2), \"characters\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Average password length: 8.37 characters\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "5stXGyTudFeW",
"colab_type": "code",
"outputId": "cde7e956-964d-4c7e-947f-c03dc129d3db",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
}
},
"source": [
"df2.dtypes"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"password object\n",
"password_length int64\n",
"dtype: object"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3z2yHan2W4Cr",
"colab_type": "code",
"outputId": "e165751c-6a78-48bb-895a-4a4ddd63206c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# Another way to find average password length.\n",
"# This time I want to be more efficient and avoid adding another column to the dataframe.\n",
"\n",
"password_length2 = []\n",
"\n",
"for pw in df2.password:\n",
" password_length2.append(len(str(pw)))\n",
"\n",
"avg_password_length2 = sum(password_length2)/len(password_length2)\n",
"print(\"Average password length:\", round(avg_password_length2,2), \"characters\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Average password length: 8.37 characters\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VoK6loMdEGiL",
"colab_type": "text"
},
"source": [
"### Counting Numbers, Letters, and Special Characters"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2YsJMrhVEU-V",
"colab_type": "text"
},
"source": [
"How many passwords are composed exclusively of numbers?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "g2luMIldIbt_",
"colab_type": "code",
"outputId": "31e844d1-910f-4a57-f23a-53d961b7a29e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# How many of the passwords are only numbers\n",
"\n",
"numbers_only = []\n",
"\n",
"i=0\n",
"\n",
"for pw in df2.password:\n",
" if str(pw).isdigit() == True: # isdigit() checks to see if all characters in the string are numbers (0-9)\n",
" numbers_only.append(pw)\n",
" i +=1\n",
" continue\n",
"\n",
"len(numbers_only)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"464599"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "2izxQ7FWTKuB",
"colab_type": "code",
"outputId": "6742a4ae-8f15-4c78-9d4f-c4b9a25959dc",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"# Check and make sure the result set is what we are expecting.\n",
"\n",
"numbers_only[0:10]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['07606374520',\n",
" '056412197',\n",
" '13972353354',\n",
" '972001',\n",
" '45406908',\n",
" '280883',\n",
" '1105230945',\n",
" '8159520',\n",
" '19871012520',\n",
" '0127936062']"
]
},
"metadata": {
"tags": []
},
"execution_count": 39
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rm8eqZSREat-",
"colab_type": "text"
},
"source": [
"How many passwords contain numbers?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "zzBhySnqScY1",
"colab_type": "code",
"outputId": "46eeacbd-74a4-444a-83b6-2fdd9de79f23",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# How many of the passwords contain numbers\n",
"\n",
"def hasNumbers(inputString):\n",
" return any(char.isdigit() for char in inputString)\n",
"\n",
"contain_numbers = []\n",
"\n",
"for pw in df2.password:\n",
" if hasNumbers(str(pw)) == True: # hasNumbers() checks to see if the string contains at least one number (0-9)\n",
" contain_numbers.append(pw)\n",
" i +=1\n",
" continue\n",
"\n",
"len(contain_numbers)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1456225"
]
},
"metadata": {
"tags": []
},
"execution_count": 41
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "fN52Il0TTSum",
"colab_type": "code",
"outputId": "f27aeb78-cfc9-46c4-e740-90448c521eb3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"# Check to make sure it returns the values we were expecting.\n",
"\n",
"contain_numbers[0:10]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['07606374520',\n",
" 'rambo144',\n",
" 'primoz123',\n",
" 'sal1387',\n",
" 'Detroit84',\n",
" 'dlbd090505',\n",
" 'snoesje12',\n",
" '056412197',\n",
" 'xyjk2288',\n",
" 'thinhtr123']"
]
},
"metadata": {
"tags": []
},
"execution_count": 42
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HsWVNM4FEjXv",
"colab_type": "text"
},
"source": [
"How many passwords are composed exclusively of letters?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "TIrQ0sDGNnkf",
"colab_type": "code",
"outputId": "082da211-b7ac-4d66-e269-ecdc7b8ab25c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# How many of the passwords are only letters\n",
"\n",
"letters_only = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw).isalpha() == True:\n",
" letters_only.append(pw)\n",
" i+=1\n",
" continue\n",
"\n",
"len(letters_only)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"523005"
]
},
"metadata": {
"tags": []
},
"execution_count": 43
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HDIkjLIuTluv",
"colab_type": "code",
"outputId": "bd1bfc43-1e0e-494f-8d16-118c962390e7",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"# Check to make sure it returns the values we were expecting.\n",
"\n",
"letters_only[0:10]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['piontekendre',\n",
" 'EVASLRDG',\n",
" 'pottompanni',\n",
" 'monastere',\n",
" 'ccccti',\n",
" 'playstation',\n",
" 'rolboul',\n",
" 'sitges',\n",
" 'clojoli',\n",
" 'shadeangel']"
]
},
"metadata": {
"tags": []
},
"execution_count": 44
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "f-A3NSY6Ey9b",
"colab_type": "text"
},
"source": [
"The number of passwords that are not solely numbers or solely letters:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Gvqva_-yP2pQ",
"colab_type": "code",
"outputId": "48a7b9cd-666c-4a59-e26e-1433710dac5c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# The number of passwords that are not solely numbers or solely letters\n",
"\n",
"df2.password.size - len(numbers_only) - len(letters_only)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1012397"
]
},
"metadata": {
"tags": []
},
"execution_count": 45
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pA7S85MJE5OQ",
"colab_type": "text"
},
"source": [
"How many of the passwords start with a letter?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "o9QIrXSUOhHi",
"colab_type": "code",
"outputId": "37245903-99ef-4a9b-b0e6-eafcc9df1690",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# How many of the passwords start with a letter\n",
"\n",
"first_letter = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw)[0].isalpha() == True:\n",
" first_letter.append(pw)\n",
" i+=1\n",
" continue\n",
"\n",
"len(first_letter)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1347987"
]
},
"metadata": {
"tags": []
},
"execution_count": 51
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Sm-f1-fEfxeL",
"colab_type": "code",
"outputId": "56f3e2d9-fe9b-4d46-a31b-095fde7af065",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
}
},
"source": [
"# Check to make sure it returns the values we were expecting.\n",
"\n",
"first_letter[0:10]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['piontekendre',\n",
" 'rambo144',\n",
" 'primoz123',\n",
" 'sal1387',\n",
" 'EVASLRDG',\n",
" 'Detroit84',\n",
" 'dlbd090505',\n",
" 'snoesje12',\n",
" 'pottompanni',\n",
" 'xyjk2288']"
]
},
"metadata": {
"tags": []
},
"execution_count": 53
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9Is2ojaZFJ-N",
"colab_type": "text"
},
"source": [
"How many of the passwords start with a capital letter?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "GfJVt13ohddQ",
"colab_type": "code",
"outputId": "755b398d-0381-4de7-8a1c-9a2e46998903",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"first_capital_letter = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw)[0].isupper() == True:\n",
" first_capital_letter.append(pw)\n",
" continue\n",
"\n",
"len(first_capital_letter)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"132174"
]
},
"metadata": {
"tags": []
},
"execution_count": 54
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "U6iiwjiEFOY3",
"colab_type": "text"
},
"source": [
"How many of the passwords start with a lowercase letter?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "6qk9uQ-Gl3hC",
"colab_type": "code",
"outputId": "145d6575-8a29-4e81-ac7f-4b0e421dfc39",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"first_lower_case_letter = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw)[0].islower() == True:\n",
" first_lower_case_letter.append(pw)\n",
" continue\n",
"\n",
"len(first_lower_case_letter)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1215813"
]
},
"metadata": {
"tags": []
},
"execution_count": 55
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VlJHIJ-EFU7i",
"colab_type": "text"
},
"source": [
"Double check earlier calculation: Add the two lists together for total number of passwords that start with a letter."
]
},
{
"cell_type": "code",
"metadata": {
"id": "-b6GM4XqmCCn",
"colab_type": "code",
"outputId": "6386c6dd-99d1-44c1-f4e9-f10a4610fc6e",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"pr = len(first_lower_case_letter)+len(first_capital_letter)\n",
"pr"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1347987"
]
},
"metadata": {
"tags": []
},
"execution_count": 59
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OmNKntmMFhUv",
"colab_type": "text"
},
"source": [
"How many of the passwords start with a number?"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xXQn-CUKmRI7",
"colab_type": "code",
"outputId": "ff039d85-b2c6-42ef-a30e-7869e79d7431",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"first_number = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw)[0].isdigit() == True:\n",
" first_number.append(pw)\n",
" continue\n",
"\n",
"pn = len(first_number)\n",
"pn"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"645456"
]
},
"metadata": {
"tags": []
},
"execution_count": 60
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "P8VoRlrEFkz8",
"colab_type": "text"
},
"source": [
"Sum the passwords that start with a number or a letter:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "x0vj_Fsom1qV",
"colab_type": "code",
"outputId": "f20e37ba-edf6-4f9b-ff85-3a1667b8e0c4",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"pr + pn"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1993443"
]
},
"metadata": {
"tags": []
},
"execution_count": 61
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ndbbORctFpdB",
"colab_type": "text"
},
"source": [
"Looks like we are missing about 6000 values! Let's see what's left:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Uh6vkOKGnGtQ",
"colab_type": "code",
"outputId": "407fec07-c292-40b8-e08f-963a4a442074",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"first_diff_character = []\n",
"\n",
"for pw in df2.password:\n",
" if str(pw)[0].isupper() == False and str(pw)[0].islower() == False and str(pw)[0].isdigit() == False:\n",
" first_diff_character.append(pw)\n",
" continue\n",
"\n",
"print(len(first_diff_character))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"6558\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "elln2d_QF2Tt",
"colab_type": "code",
"outputId": "b97f6609-cfb5-415f-ec77-efd700b0406b",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"# Sum the special character passwords and the rest of them:\n",
"\n",
"pr + pn + len(first_diff_character)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"2000001"
]
},
"metadata": {
"tags": []
},
"execution_count": 108
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rON-nYl6GAtU",
"colab_type": "text"
},
"source": [
"Looks like we've accounted for all of them! Yay!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hIXH86LvpBvq",
"colab_type": "text"
},
"source": [
"###Anything unique worth noting? Any sub-groups?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qRBiGHiOp6k0",
"colab_type": "text"
},
"source": [
"I'd like to compare them against a few interesting potential matches:\n",
"\n",
"\n",
"\n",
"* Years\n",
"* Common American surnames\n",
"* Common American first names\n",
"* Sports Teams/Mascots\n",
" * Soccer\n",
" * NBA\n",
" * NFL\n",
" * MLB\n",
"* Major cities in the US\n",
"* Major cities in the world\n",
"* Do any of the major cities happen to also be home to major sports teams of interest? \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "l10jE7dBajbJ",
"colab_type": "text"
},
"source": [
"### Visualizations"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cE12_s04amrW",
"colab_type": "text"
},
"source": [
"* Histogram of password length\n",
"* Histogram of number of letters\n",
"* Histogram of number of numbers\n",
"* Boxplot of password length\n",
"\n",
"**Graph each letter position to see if they are most likely to be lower case, upper case, or a number**\n",
"- Create a dataframe that has a column for each character index\n",
"- Plot each character type with a scatter matrix\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "AEFOWUAzpHff",
"colab_type": "code",
"outputId": "266a607f-7a3e-4f29-b086-533b87151143",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 644
}
},
"source": [
"df2.password_length.plot(kind=\"hist\", title=\"Password Length Histogram\", figsize=(10,10))\n",
"plt.xlabel(\"# of Characters\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0.5, 0, '# of Characters')"
]
},
"metadata": {
"tags": []
},
"execution_count": 67
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"outputId": "db0aa933-2525-43f9-e7de-0da22ec75777",
"id": "6KUHTpuwbk9j",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 612
}
},
"source": [
"df2.password_length.plot(kind=\"box\", figsize=(5,10))\n",
"plt.ylabel(\"# of Characters\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0, 0.5, '# of Characters')"
]
},
"metadata": {
"tags": []
},
"execution_count": 68
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 360x720 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"outputId": "aa186546-317b-4f95-fa06-36456e3355ef",
"id": "6xA8TL_yP1R4",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 344
}
},
"source": [
"df2.password_length.value_counts().plot.bar(figsize=(10,5), color=\"lightblue\", edgecolor=\"blue\", width=.8)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7faa5f249588>"
]
},
"metadata": {
"tags": []
},
"execution_count": 69
},
{
"output_type": "display_data",
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "7wYv3ST3LVjV",
"colab_type": "code",
"outputId": "ca912b1c-fb02-4284-8a9d-ea1b23976278",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 130
}
},
"source": [
"# Convert a password to a dataframe of characters\n",
"\n",
"df_exploded_characters = df2.password.apply(lambda x : pd.Series(list(x))\n",
"\n",
"individual_letter_frequency = df_exploded_characters[0].value_counts()\n",
"\n",
"individual_letter_frequency.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "error",
"ename": "SyntaxError",
"evalue": "ignored",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-112-a819a18598bd>\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m individual_letter_frequency = df_exploded_characters[0].value_counts()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "mzkdXTyW-efm",
"colab_type": "code",
"outputId": "0f86c1e3-8474-460e-da96-40334eee0b7a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"first_letter_frequency = []\n",
"\n",
"for pw in df2.password:\n",
" first_letter_frequency.append(str(pw)[0])\n",
"\n",
"first_letter_frequency[0:10]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['0', 'p', 'r', 'p', 's', 'E', 'D', 'd', 's', '0']"
]
},
"metadata": {
"tags": []
},
"execution_count": 98
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "lxJsgZcm_tNI",
"colab_type": "code",
"outputId": "71c15407-c531-4eaa-c372-2a979d4924b3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"len(first_letter_frequency)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"2000001"
]
},
"metadata": {
"tags": []
},
"execution_count": 93
}
]
},
{
"cell_type": "code",
"metadata": {
"colab_type": "code",
"outputId": "e9e62438-6ee5-42b0-ecee-63f6a63ca275",
"id": "ZpqLCpgaAJxc",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 232
}
},
"source": [
"twelfth_letter_frequency = []\n",
"\n",
"for pw in df2.password:\n",
" twelfth_letter_frequency.append(str(pw)[1])\n",
"\n",
"twelfth_letter_frequency[0:100]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "error",
"ename": "IndexError",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-97-9e36c75c5f79>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mpw\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdf2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpassword\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mtwelfth_letter_frequency\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mtwelfth_letter_frequency\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mIndexError\u001b[0m: string index out of range"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vQbRN5p_AJfC",
"colab_type": "code",
"outputId": "d6010165-b95c-44ca-fe83-7c9093305581",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
}
},
"source": [
"len(twelfth_letter_frequency)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0"
]
},
"metadata": {
"tags": []
},
"execution_count": 95
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "GNrmRzv91gzo",
"colab_type": "code",
"outputId": "e5d99e10-71f2-4d8b-cb54-582b9b73da85",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 503
}
},
"source": [
"individual_letter_frequency.plot.bar(figsize=(15,8), color=\"lightblue\", edgecolor=\"blue\", width=.8)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f29db5067f0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 299
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n6L+8vLxSLeunn366EiVeEXv37r2iy9+zZ4/y8/N97tu/f7/fvtnZ2UpNTb2s8Ur7Wnm43e7LWlZu\nbq5yc3ODGrs8/Pvf/y5Vf7fbLZfLVeh+l8vl97m60hYtWlTuY5bk6NGjRf53/Phxa51SGW3ZskUn\nTpyo6DIkyfrcBPIe3bRp0xfz8KYAACAASURBVJUuJ2AXLlyo6BJK5PlezsnJqeBKArNr1y6tXr1a\n3333XUWXgjL23XffafXq1RVdxhVT1uv7kDJdWiX11ltv6YUXXlBISIhGjhypzMxMPfjgg7r//vut\nPtnZ2frTn/6kI0eO+GyUTZw4sdTjnT17VidPnpQk1atXTxERET5ta9asUXp6utq3b6+7777baps1\na5ZGjBhh3d67d69atGihWrVqSZLOnTuntLQ0XXfddaWuqTj+NsK8hYWF+X3Mjz/+qAYNGig8PLzU\nY7722muaPn16kfft3btXN9xwg6SLr82SJUt08OBBNWvWTM8//7zq1Knjd7lZWVlyOBx+2/Lz8xUS\n4vuW91yHsTQ+/fRTXX/99brqqqt87h8/frymT5+up556yu/jqlevrj59+ujXv/51iWO89dZbmj59\nuiZNmqRXXnml2L5ut1vr16/Xo48+Wmw/f6+zv9c2KytL6enpstvtuvrqq1W9enWr7ejRo4X6L1q0\nSOPGjZMkNW7cuFB7bm6unE6nrr76auu9XBpz5szRNddco9GjR1uv7YoVKwq9f7766istXrxYdrtd\nSUlJ+s9//qN169bp5ZdfLtV4Q4YMUefOnXXXXXfp6quv9ttn7ty5GjhwoGrUqCFJysjI0Ny5c/Xa\na6/59Bs0aJA6dOigbt26KT4+3u+yjh07pvnz5+u///2vJKl58+YaOnSoGjRoYPUJ9DP63HPPyWaz\nFWp/9913C9137tw5ffvtt7rqqqsUGxvrd7mnTp3S1q1btXXrVhUUFGjevHnF1uFtzZo1iomJUc+e\nPX3u3759u5xOp/r372/dl5WVpRMnTgT9HilJdna29fyWlYKCAr/PtSSdPn26yHWUd5+pU6cW2e52\nu5Wbm6snn3xSPXr0uKxavf34449yOp3q0KGDJGn58uXWRnzv3r2LfC9c6ssvv9TKlStVq1YttWnT\nRm3btlXbtm1Vv379MqvV28CBA/XMM8+oU6dOhdomTpyo6dOna+HChbLb7erWrZu6du2qqKioQn13\n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\nKTIysth+JSnpu1G6uK3hWe/069dPn332mVasWGHtyFu7dq1ef/115eXl6c0339RPP/2kDh06qH79\n+jp79myhgwtFMTLgDR8+XLNnz7ZuezYa9+/fr3bt2iksLKzQntfjx49rxIgR2rNnjxISEvSrX/2q\n0N546eLRhC5duqh79+6y231nuCYlJemuu+7S+PHjrTa3262UlBQtWLBAkydP1rFjxzR8+HBJUseO\nHbVkyRJNmzZNI0eOLDTWpXuI7Xa7z9SmQDf6pIsf6uTkZMXFxamgoECLFi3SCy+8oI4dO1r9NmzY\noNDQUN1xxx0qKCjQp59+ak2NW79+vV5//XVlZWVp6tSpGjVqlFq3bq2jR49q3rx5hQJeUeMdOXJE\n69evlyTrS1O6GF7vvfden7/d48CBA5o6dapCQkLUtGlT6/lbtmyZHnnkEZ07d05TpkzR448/rjFj\nxmjPnj1atWqVzwaydPEDvnr1avXv3195eXmaNm1aoS+PXbt2aenSpTp16lSRz+Xzzz8vSTp58qS+\n+uorvf/++0pPTy8y2HmP76m9Ro0astvteuONN1SvXj11795dCQkJ1hGqJ554Qps3b9aZM2e0cePG\nQsvyDnie2//3f/+nrl27WkeVJN9g+thjj6l69eo+QeLs2bNq0KCBkpOTZbPZ1KNHD7300kv6/PPP\ndfbsWfXq1Uvvv/++li9frueff159+vTR4cOHNWDAAOuLfsiQIUpKSrLGOXTokLUxvXbtWo0ePVot\nWrSQ0+nUvHnzCgW8kp5zm82mnj17ql69epo8ebKGDh1a5JGTS4+aeH9xlnSE1TNe7dq19fDDD+vB\nBx/U7t279e6772rp0qW6++671atXL1WvXl2PPPKIWrdurQkTJig8PFzjx4/3e/TS4XDo7rvv1t13\n363vv/9eH330kRITE/X+++9bfTIzM32O0HTv3l0ff/yxz3IeffRRv5/Nhx56yKffpUdP+vbtq3Hj\nxqlPnz5KS0uzdiZs27ZNjRo10vjx43Xy5ElNmzZNPXv21PLly7V9+3Y1a9ZM3bp10/DhwzVs2DCf\ncCdd3KsfFxenJk2a+H0upYvrvkvXkdLF9Zj36/fBBx/ojTfeUGxsrPbt26f169cX2lh499139cMP\nPygvL0+bN29WXl6e2rVrp/379ys5OdkKJcX5/vvvrc+uN8961vso58GDBzV16lTdeeeduv322yVd\nDHxvvPGGxo4dq5YtWyojI8MnUEn/P5B17txZkvTZZ5/p3XffVXh4uCIjI9W3b18tXLhQN954Y7FH\n7zzq1q2ru+66S9LFcONx9OjRQu+3qVOn6ttvv7Vue+8k83bs2DGfIyhhYWHWTBLvGSv+6rPZbMrJ\nyVFWVpbWrl0ru92ua665Rtdcc41uvvlmffPNN/rrX/+qL774wgp4M2fOtHZ+jRkzxme577zzjqZP\nn17sc+HZcVSnTh2NHz9eb775pt544w397ne/s46Keb+fPDvccnNztX37dv3lL3/RkiVLlJCQoKef\nflqSdOedd+q6667TmDFjtGrVKtlstkLvg/Xr12vs2LE+7/HY2FjFx8crKSlJHTt21Icffqhx48b5\n7TN27FglJCTooYceUvv27ZWUlGQdvY6Li9OMGTN8Zo+MHj3aqsMjJydHLVu21NChQ6317Zw5cwo9\nR7///e8lXdwp3KdPH2s95/25PXz4sP7whz+offv2at68uSIiIrRx40a9+uqrki7uIOvfv79atGih\nWbNmqVOnTtqyZYvOnTunw4cPq0mTJvrxxx/Vp0+fIl8rf9auXasxY8YoKSlJZ86c0dmzZ5WSkqK4\nuDj95z//Kfax/nbklUZISIjatWundu3aqaCgQIcOHdLu3bu1ceNGzZ49Wx9++KFcLpcSEhLUokUL\nK7g4nU7985//1Ndff62nnnrKCnjz58/XbbfdVmiHn3RxVsnkyZOLrXnlypWaMWOGpP//feT5v3Rx\ndsOOHTv8bg8GIjExUdLFGREeL774YpF9Jk2apCeeeEKtW7eWdPH59rfO9qzTpk6d6vMd63a7deDA\nAW3evFnHjh3THXfcYbVd+ln3lpWVpbFjx/rMCHnnnXd0ww03aP369brlllv0wAMPqGXLlkV+13u7\nNMR63/beNilOoP0uXedfau3atX4PeHgcPXpUp0+ftgJes2bN9PPPP6tRo0bW0dDQ0FBr/T5p0iQt\nW7ZM27Zt01NPPaVNmzYFPCupyga84vb4eb+5JalRo0aaMmWKfvzxRz3xxBN+z4vx7BkICQlRVlaW\nwsPDlZmZWahftWrVfI78eTt79qz1xe5ht9vVpUsXffDBB5Lkcy6RzWbT888/r1WrVmnatGmF5t/W\nrFlThw4dUsuWLSVd3HD23mAvKVB4+8Mf/qDXX39dMTExki7uJZoxY4Y6duxo9dm1a5fPEcP7779f\no0ePtjYimzZtKuliOPGsEPxt1BY33ptvvqlHHnlES5Ys0XPPPVdkvefPn7deY5vN5rPnxrMCys3N\ntT5Ia9eutZ779u3b649//GOhZT711FN688039dFHH+mf//yn2rVrp3vuucenz6pVqzRs2DC1bNnS\n74pOurhH8ptvvtE333yjU6dO6cYbb9T1119f5N/izbOB7XA49Jvf/Eb9+/fXnj17tGXLFr333ntq\n166devTooQ4dOqhDhw5asWKFtVFSHE9oXrNmjc/93u+RnTt3+ry+vXv31ujRozV9+nRt3LhRdrvd\neg7vuecejRkzRo8++qheeOEFawP6kUceUVpamt566y116dJFd911V6EVsPfnKzc3Vy1atJB08ajX\npefSSSU/554vzJtuuknDhw/XnDlzdPbs2UL9atSoodOnT1v1fPvttz4bUCUdYfXmcrm0bds2ffLJ\nJ7r66qvVs2dP7du3T1OnTtXEiROtQH/rrbfqhx9+0F//+lf95je/8buH0e126+uvv9bWrVv173//\nW127dvVpt9vtcjqd1mfF6XQWeh5K+mwW5fjx4zpz5owk+RwJOHDggPXZr1evnvWcbd68Wa1atdID\nDzxghSx/X7CDBg3S3//+d/3www/q2rWrz84Jj7y8PLlcrkIzCXJzc33WdTabzfpcXHfddT5BxuPf\n//635syZI5fLpYEDB2rJkiUKCQnRHXfcEfDGUMOGDTVmzJiA+v75z3/WoEGDfNaPHTt2VMuWLfXh\nhx9q1KhRGjFihN544w2tX79effr00alTp/Taa6+pa9euevDBByVJH330kaZPn64mTZrowIEDeu21\n1/Tb3/7W7zTDonjWUd4bS6NGjfK78eS9cVnUhual5315z2rw/u68dIMnNzdXH330kf72t7/p3nvv\n1dGjR7V//37t27dPR44cUcOGDXXttddqyJAh1lHOS+u4dGxPW6AbVxERERo/frzee+89vfzyyxo+\nfLi1E/FSNWrUUI8ePVS3bl2tW7dOmzdvttalhw8f1qJFi5SQkKD77rvP73onLy/P7w6Mpk2bWuu4\n4vrUrVtXL7zwgqSL6742bdros88+U61atXTfffcVOjVgyZIlhZbjdru1adMmLV26VKNGjZJUeOee\nt/j4eH300Ufq2bOnWrVqpcmTJ/ucz12vXj21b99eGzduVGhoqDIyMrRx40YVFBRo//79aty4sX76\n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\n5pcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1080x576 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BgCIMOdpBEeC",
"colab_type": "code",
"colab": {}
},
"source": [
"pip install hide_code"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "te_ldpQ9Hovs",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment