Created function to generate chart of salary over years of exp.

This commit is contained in:
2025-04-20 22:00:57 -07:00
parent 08eb095bf6
commit f073019538

View File

@@ -380,72 +380,89 @@
"outputs": [],
"source": [
"\n",
"# focus on people who have given ...\n",
"key = \"ConvertedCompYearly\"\n",
"key2 = \"YearsCodePro\"\n",
"df = so_df.dropna(subset=[key, key2])\n",
"# come up with name later\n",
"# do_actual_project\n",
"# earnings over years of exp\n",
"def foo(dataset, language, jobs=None, n_rich_outliers=0, n_lowest=0, hue=\"Country\", country=\"United States of America\"):\n",
" # focus on people who have given ...\n",
" key = \"ConvertedCompYearly\"\n",
" key2 = \"YearsCodePro\"\n",
" df = dataset.dropna(subset=[key, key2])\n",
" \n",
" criteria = {\"MainBranch\":\"I am a developer by profession\"}\n",
" \n",
" #print(df[\"Country\"].unique)\n",
" if country:\n",
" criteria[\"Country\"] = country\n",
" for k in criteria:\n",
" df = df[df[k] == criteria[k] ] \n",
" \n",
" # chatgpt tells me about filtering with multiple strings\n",
" if jobs:\n",
" df = df[df.isin(jobs).any(axis=1)]\n",
" \n",
" devs = None\n",
" if len(language) > 1:\n",
" devs = get_lang_devs(df, language)\n",
" else:\n",
" devs = get_c_devs(df, lang=language)\n",
" replacement_dict = {\n",
" 'Less than 1 year': '0.5',\n",
" 'More than 50 years': '51',\n",
" }\n",
" \n",
" # https://stackoverflow.com/questions/47443134/update-column-in-pandas-dataframe-without-warning\n",
" pd.options.mode.chained_assignment = None # default='warn'\n",
" new_column = devs[key2].replace(replacement_dict)\n",
" devs[key2] = pd.to_numeric(new_column, errors='coerce')\n",
" # print( devs[key2].unique() )\n",
" \n",
" indices = devs[key].nlargest(n_rich_outliers).index\n",
" devs = devs.drop(indices)\n",
"\n",
"criteria = {\"MainBranch\":\"I am a developer by profession\"}\n",
" plt.figure()\n",
" \n",
" if n_lowest > 0:\n",
" # chatgpt draws my line\n",
" # Calculate the lowest nth point (for example, the 5th lowest value)\n",
" # iloc[-1] gets the last element from the n smallest\n",
" lowest_nth = df[key].nsmallest(n_lowest).iloc[-1] \n",
" # Draw a horizontal line at the lowest nth point\n",
" # label=f'Lowest {n_poorest}th Point: {lowest_nth_value:.2f}'\n",
" plt.axhline(y=lowest_nth, color='r', linestyle='--', label=\"y=%0.2f\" % lowest_nth )\n",
"\n",
"#print(df[\"Country\"].unique)\n",
"# plt.xticks(rotation=90)\n",
" sb.scatterplot(data=devs, x=key2, y=key, hue=hue)\n",
" plt.legend(loc='lower center', bbox_to_anchor=(1.5,0)) \n",
" title = \"Annual Salary of %s Developers Over Years of Experience\" %language\\\n",
" + \"\\nsample size=%i\" % len (devs)\\\n",
" + \"\\ncountry=%s\" %country\n",
" plt.title(title)\n",
"\n",
"# criteria[\"Country\"] = \"United States of America\"\n",
"for k in criteria:\n",
" df = df[df[k] == criteria[k] ] \n",
"\n",
"jobs = None\n",
"# expected C jobs\n",
"#jobs = [\"Developer, embedded applications or devices\", \n",
"# \"Developer, game or graphics\",\n",
"# \"Engineering manager\" , \n",
"# \"Project manager\", \n",
"# \"Product manager\"\n",
"#]\n",
"cjobs = [\"Developer, embedded applications or devices\", \n",
" \"Developer, game or graphics\",\n",
" \"Hardware Engineer\" ,\n",
" # \"Project manager\", \n",
" # \"Product manager\"\n",
"]\n",
"\n",
"# expected python jobs\n",
"#jobs = [\"Data scientist or machine learning specialist\",\n",
"# \"Data or business analyst\",\n",
"# \"Data engineer\",\n",
"pyjobs = [\"Data scientist or machine learning specialist\",\n",
" \"Data or business analyst\",\n",
" \"Data engineer\",\n",
"# \"DevOps specialist\",\n",
"# \"Developer, QA or test\"\n",
"#]\n",
"]\n",
"\n",
"# chatgpt tells me about filtering with multiple strings\n",
"if jobs:\n",
" df = df[df.isin(jobs).any(axis=1)]\n",
"jsjobs = [\"Developer, full-stack\",\n",
" \"Developer, front-end\",\n",
" \"Developer, mobile\"\n",
"]\n",
"\n",
"# play with these\n",
"language = \"Cobol\"\n",
"legend = True\n",
"NUM_OF_TOO_RICH = 3\n",
"# \"Employment\"\n",
"hue = \"Country\"\n",
"\n",
"devs = None\n",
"if len(language) > 1:\n",
" devs = get_lang_devs(df, language)\n",
"else:\n",
" devs = get_c_devs(df, lang=language)\n",
"replacement_dict = {\n",
" 'Less than 1 year': '0.5',\n",
" 'More than 50 years': '51',\n",
"}\n",
"\n",
"# https://stackoverflow.com/questions/47443134/update-column-in-pandas-dataframe-without-warning\n",
"pd.options.mode.chained_assignment = None # default='warn'\n",
"new_column = devs[key2].replace(replacement_dict)\n",
"devs[key2] = pd.to_numeric(new_column, errors='coerce')\n",
"# print( devs[key2].unique() )\n",
"\n",
"indices = devs[key].nlargest(NUM_OF_TOO_RICH).index\n",
"devs = devs.drop(indices)\n",
"print( len (devs) )\n",
"\n",
"plt.figure()\n",
"plt.xticks(rotation=90)\n",
"sb.scatterplot(data=devs, x=key2, y=key, hue=hue, legend=legend)\n",
"plt.legend(loc='lower center', bbox_to_anchor=(1.5,0)) \n",
"plt.title(\"Annual Salary of %s Developers Over Years of Experience\" %language)\n"
"foo(so_df, \"Python\", jobs=pyjobs, hue=\"DevType\", n_rich_outliers=7, n_lowest=12)\n",
"foo(so_df, \"C\", jobs=cjobs, hue=\"DevType\", n_rich_outliers=3, n_lowest=5)\n",
"foo(so_df, \"JavaScript\", jobs=jsjobs, hue=\"DevType\", n_rich_outliers=6, country=\"Ukraine\")"
]
},
{