diff --git a/pandas_task.html b/pandas_task.html new file mode 100644 index 0000000..f0eedaa --- /dev/null +++ b/pandas_task.html @@ -0,0 +1,15027 @@ + + +
+ + +import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+df = pd.read_csv('works.csv')
+#1
+rows_count = df.shape[0]
+print("Всего записей:", rows_count)
+Всего записей: 32683 ++
def get_rows_with_gender(df: pd.DataFrame, gender: str) -> pd.DataFrame:
+ return df[df["gender"] == gender]
+
+females = get_rows_with_gender(df, "Женский")
+males = get_rows_with_gender(df, "Мужской")
+#2
+print("Всего женщин:", females.shape[0])
+print("Всего мужчин:", males.shape[0])
+Всего женщин: 17910 +Всего мужчин: 13386 ++
#3
+no_none_skills_count = df["skills"].count()
+
+print("Значений в столбце skills не NAN:", no_none_skills_count)
+Значений в столбце skills не NAN: 8972 ++
#4
+skills = df[df["skills"].notna()]
+print("Все заполненные скиллы:\n", skills["skills"])
+Все заполненные скиллы: + 0 <p>Аналитическое мышление, <span cla... +5 Ответственная,пунктуальная,дисциплинированная ... +10 <p>Коммуникабельность </p> +13 <p>Ответственность в работе</p> +21 <p>Усидчивость, умение удерживать в памяти нуж... + ... +32665 <p>Отвественность</p><p>Исполнительность</p><p... +32668 <p>Высокая работоспособность, нацеленность на ... +32672 <p>исполнительный</p> +32674 <p>Нацелен на результат. Считаю себя командным... +32675 <p>трудоспособен</p> +Name: skills, Length: 8972, dtype: object ++
#5
+python_skills = df["skills"].dropna().str.contains('Python|Питон|python|питон')
+print("Python skills:")
+print(skills[python_skills]["salary"])
+Python skills: +230 35000 +334 20000 +2394 35000 +8096 15000 +9014 25000 +9667 90000 +20930 30000 +22530 50000 +28286 23000 +30430 23000 +Name: salary, dtype: int64 ++
#6
+pr = [i / 10 for i in range(1, 11)]
+print("Женщины:\n", females["salary"].quantile(pr))
+print("Мужчины\n", males["salary"].quantile(pr))
+Женщины: + 0.1 15000.0 +0.2 18000.0 +0.3 20000.0 +0.4 22000.0 +0.5 25000.0 +0.6 30000.0 +0.7 30000.0 +0.8 35000.0 +0.9 47000.0 +1.0 900000.0 +Name: salary, dtype: float64 +Мужчины + 0.1 15000.0 +0.2 20000.0 +0.3 25000.0 +0.4 30000.0 +0.5 30000.0 +0.6 35000.0 +0.7 40000.0 +0.8 50000.0 +0.9 60000.0 +1.0 1000000.0 +Name: salary, dtype: float64 ++
#7
+genders = set(df.dropna()["gender"])
+educations = set(df.dropna()["educationType"])
+
+for gender in genders:
+ for education in educations:
+ plt.figure(figsize=(10, 5))
+ plt.grid()
+ plt.title(f"Распределение по заработной плате для пол : '{gender}' с образованием: '{education}'")
+ plt.xlabel("Зарплата")
+ plt.ylabel("Количество")
+ query = f'gender == "{gender}" and educationType == "{education}"'
+ plt.hist(df.query(query)["salary"], bins=40)
+#8
+task_8_data = df.dropna(subset=["jobTitle", "qualification"])
+#Профессия и должность не совпрадают без рассмотрения случая множества слов
+jobs = task_8_data.jobTitle.str.lower()
+qualifications = task_8_data.qualification.str.lower()
+print(f"У {sum(jobs != qualification)} человек должность и профессия не совпадают.")
+У 10076 человек должность и профессия не совпадают. ++
#Профессия и должность не совпрадают с рассмотрением случая множества слов
+import re
+
+count = 0
+
+for job_title, qualification in zip(jobs, qualifications):
+ job_title_words = set(re.split(",|-| |\t", job_title.lower().strip()))
+ qualification_words = set(re.split(",|-| |\t", qualification.lower().strip()))
+ if len(job_title_words & qualification_words) == 0:
+ count += 1
+
+print(f"Примерно проессия и должность не совпадают у {count} человек(а)")
+Примерно проессия и должность не совпадают у 8720 человек(а) ++
#Топ-5 образований у менеджеров
+title = "Топ-5 образований у менеджеров"
+manager_educations = task_8_data[task_8_data["jobTitle"].str.lower().str.contains("менедж|manager")]
+top_5_manager_educations = manager_educations["qualification"].str.lower().value_counts().head(5)
+print(top_5_manager_educations)
+top_5_manager_educations.plot(kind="bar", title=title, grid=True, rot=45, ylabel="Количество представителей")
+бакалавр 98 +экономист 86 +менеджер 79 +юрист 41 +инженер 37 +Name: qualification, dtype: int64 ++
<AxesSubplot:title={'center':'Топ-5 образований у менеджеров'}, ylabel='Количество представителей'>
+# Топ-5 профессий у тех, кто имееет образование инженера
+engineers_qual = task_8_data[task_8_data["qualification"].str.lower().str.contains("инжене|engineer")]
+top_5_engineers_educations = engineers_qual["jobTitle"].str.lower().value_counts().head(5)
+print(top_5_engineers_educations)
+top_5_engineers_educations.plot(kind="bar", title=title, grid=True, rot=45, ylabel="Количество представителей")
+инженер 25 +главный инженер 23 +директор 21 +менеджер 13 +водитель 11 +Name: jobTitle, dtype: int64 ++
<AxesSubplot:title={'center':'Топ-5 образований у менеджеров'}, ylabel='Количество представителей'>
+
+
+Аналитическое мышление, Коммуникабельность
\n", + "13Ответственность в работе
\n", + "21Усидчивость, умение удерживать в памяти нуж...\n", + " ... \n", + "32665
Отвественность
Исполнительность
исполнительный
\n", + "32674Нацелен на результат. Считаю себя командным...\n", + "32675
трудоспособен
\n", + "Name: skills, Length: 8972, dtype: object\n" + ] + } + ], + "source": [ + "#4\n", + "skills = df[df[\"skills\"].notna()]\n", + "print(\"Все заполненные скиллы:\\n\", skills[\"skills\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "517f5bb3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python skills:\n", + "230 35000\n", + "334 20000\n", + "2394 35000\n", + "8096 15000\n", + "9014 25000\n", + "9667 90000\n", + "20930 30000\n", + "22530 50000\n", + "28286 23000\n", + "30430 23000\n", + "Name: salary, dtype: int64\n" + ] + } + ], + "source": [ + "#5\n", + "python_skills = df[\"skills\"].dropna().str.contains('Python|Питон|python|питон')\n", + "print(\"Python skills:\")\n", + "print(skills[python_skills][\"salary\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "335f30f4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Женщины:\n", + " 0.1 15000.0\n", + "0.2 18000.0\n", + "0.3 20000.0\n", + "0.4 22000.0\n", + "0.5 25000.0\n", + "0.6 30000.0\n", + "0.7 30000.0\n", + "0.8 35000.0\n", + "0.9 47000.0\n", + "1.0 900000.0\n", + "Name: salary, dtype: float64\n", + "Мужчины\n", + " 0.1 15000.0\n", + "0.2 20000.0\n", + "0.3 25000.0\n", + "0.4 30000.0\n", + "0.5 30000.0\n", + "0.6 35000.0\n", + "0.7 40000.0\n", + "0.8 50000.0\n", + "0.9 60000.0\n", + "1.0 1000000.0\n", + "Name: salary, dtype: float64\n" + ] + } + ], + "source": [ + "#6\n", + "pr = [i / 10 for i in range(1, 11)]\n", + "print(\"Женщины:\\n\", females[\"salary\"].quantile(pr))\n", + "print(\"Мужчины\\n\", males[\"salary\"].quantile(pr))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "9a100feb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "