411 KiB
411 KiB
Работа с Pandas DataFrame
Работа с данными - чтение и запись CSV
In [48]:
import pandas as pd
df = pd.read_csv("data/healthcare-dataset-stroke-data.csv", index_col="id")
df.to_csv("test.csv")
Работа с данными - основные команды
In [49]:
df.info()
print(df.describe().transpose())
cleared_df = df.drop(["ever_married", "work_type", "Residence_type"], axis=1)
print(cleared_df.head())
print(cleared_df.tail())
sorted_df = cleared_df.sort_values(by="gender")
print(sorted_df.head())
print(sorted_df.tail())
Работа с данными - работа с элементами
In [50]:
print(df["age"])
print(df.loc[63864])
print(df.loc[63864, "Residence_type"])
print(df.loc[63864:63898, ["age", "Residence_type"]])
print(df[0:3])
print(df.iloc[0])
print(df.iloc[3:5, 0:2])
print(df.iloc[[3, 4], [0, 1]])
Работа с данными - отбор и группировка
In [51]:
s_values = df["gender"].unique()
print(s_values)
s_total = 0
for s_value in s_values:
count = df[df["gender"] == s_value].shape[0]
s_total += count
print(s_value, "count =", count)
print("Total count = ", s_total)
print(df.groupby(["bmi", "smoking_status"]).size().reset_index(name="Count")) # type: ignore
Виртуализация - Исходные данные
In [52]:
data = df[["age", "work_type", "smoking_status"]].copy()
data.dropna(subset=["smoking_status"], inplace=True)
print(data)
Визуализация - Линейная диаграмма
In [53]:
import matplotlib.pyplot as plt
average_age = data.groupby("smoking_status")["age"].mean()
average_age.plot(
kind="line",
marker="o",
title="Average Age by Smoking Status",
xlabel="Smoking Status",
ylabel="Average Age",
)
plt.grid(True)
plt.show()
Визуализация - столбчатая диаграмма
In [62]:
pivot_table = data.groupby(["work_type", "smoking_status"]).size().unstack()
pivot_table.plot(kind="bar", stacked=True, figsize=(10, 6))
plt.title("Smoking Status by Work Type")
plt.xlabel("Work Type")
plt.ylabel("Count")
plt.xticks(rotation=45)
plt.legend(title="Smoking Status")
plt.grid(axis='y')
plt.tight_layout()
plt.show()
Визуализация - Гистограмма
In [61]:
plt.hist(data["age"], bins=10, edgecolor="black")
plt.title("Age Distribution")
plt.xlabel("Age")
plt.ylabel("Frequency")
plt.grid(axis="y")
plt.show()
Визуализация - Ящик с усами
In [56]:
import pandas as pd
import matplotlib.pyplot as plt
data = df[["age", "work_type", "smoking_status"]].copy()
data.dropna(subset=["smoking_status"], inplace=True)
plt.figure(figsize=(10, 6))
box_data = [
data[data["smoking_status"] == status]["age"]
for status in data["smoking_status"].unique()
]
plt.boxplot(box_data)
plt.xticks(
range(1, len(data["smoking_status"].unique()) + 1),
list(data["smoking_status"].unique()), )
plt.title("Box Plot of Age by Smoking Status")
plt.xlabel("Smoking Status")
plt.ylabel("Age")
plt.show()
Визуализация - диаграммы с областями
In [57]:
data = df[["age", "work_type", "smoking_status"]].copy()
data.dropna(subset=["smoking_status"], inplace=True)
grouped_data = (
data.groupby(["work_type", "smoking_status"]).size().unstack(fill_value=0)
)
grouped_data.plot(kind="area", alpha=0.5, stacked=True)
plt.title("Area Chart of Smoking Status by Work Type")
plt.xlabel("Work Type")
plt.ylabel("Number of Observations")
plt.legend(title="Smoking Status")
plt.grid(True)
plt.show()
Визуализация - диаграммы рассеяния
In [58]:
plt.scatter(df["bmi"], df["avg_glucose_level"], alpha=0.5)
plt.title("BMI vs Average Glucose Level")
plt.xlabel("BMI")
plt.ylabel("Average Glucose Level")
plt.grid(True)
plt.show()
Визуализация - круговая диаграмма
In [59]:
gender_counts = df["gender"].value_counts()
labels = [str(label) for label in gender_counts.index]
plt.figure(figsize=(8, 6))
plt.pie(gender_counts, labels=labels, autopct="%1.1f%%", startangle=90)
plt.title("Distribution of Gender")
plt.axis("equal")
plt.show()