-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexercises_w2.py
306 lines (237 loc) · 10.8 KB
/
exercises_w2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
##################################################
# List Comprehensions
##################################################
# ###############################################
# # GÖREV 1: List Comprehension yapısı kullanarak car_crashes verisindeki numeric değişkenlerin isimlerini büyük harfe çeviriniz ve başına NUM ekleyiniz.
# ###############################################
#
# # Beklenen Çıktı
#
# # ['NUM_TOTAL',
# # 'NUM_SPEEDING',
# # 'NUM_ALCOHOL',
# # 'NUM_NOT_DISTRACTED',
# # 'NUM_NO_PREVIOUS',
# # 'NUM_INS_PREMIUM',
# # 'NUM_INS_LOSSES',
# # 'ABBREV']
#
# # Notlar:
# # Numerik olmayanların da isimleri büyümeli.
# # Tek bir list comp yapısı ile yapılmalı.
import seaborn as sns
import pandas as pd
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 500)
df = sns.load_dataset("car_crashes")
df.columns
df.info()
[col for col in df.columns if df[col].dtype !="O"]
## harf büyütme
[col.upper() for col in df.columns if df[col].dtype !="O"]
#Hepsine Num ekleme
["NUM_"+col.upper() for col in df.columns if df[col].dtype != "O"]
["NUM_"+col.upper() if df[col].dtype != "O" else col.upper() for col in df.columns]
# ###############################################
# # GÖREV 2: List Comprehension yapısı kullanarak car_crashes verisindeki isminde "no" barındırmayan değişkenlerin isimlerininin sonuna "FLAG" yazınız.
# ###############################################
#
# # Notlar:
# # Tüm değişken isimleri büyük olmalı.
# # Tek bir list comp ile yapılmalı.
#
# # Beklenen çıktı:
#
# # ['TOTAL_FLAG',
# # 'SPEEDING_FLAG',
# # 'ALCOHOL_FLAG',
# # 'NOT_DISTRACTED',
# # 'NO_PREVIOUS',
# # 'INS_PREMIUM_FLAG',
# # 'INS_LOSSES_FLAG',
# # 'ABBREV_FLAG']
import seaborn as sns
df = sns.load_dataset("car_crashes")
df.columns
[col.upper() +"_FLAG" if "no" not in col else col.upper() for col in df.columns]
# ###############################################
# # Görev 3: List Comprehension yapısı kullanarak aşağıda verilen değişken isimlerinden FARKLI olan değişkenlerin isimlerini seçiniz ve yeni bir dataframe oluşturunuz.
# ###############################################
# # Notlar:
# # Önce yukarıdaki listeye göre list comprehension kullanarak new_cols adında yeni liste oluşturunuz.
# # Sonra df[new_cols] ile bu değişkenleri seçerek yeni bir df oluşturunuz adını new_df olarak isimlendiriniz.
#
# # Beklenen çıktı:
#
# # total speeding alcohol not_distracted ins_premium ins_losses
# # 0 18.800 7.332 5.640 18.048 784.550 145.080
# # 1 18.100 7.421 4.525 16.290 1053.480 133.930
# # 2 18.600 6.510 5.208 15.624 899.470 110.350
# # 3 22.400 4.032 5.824 21.056 827.340 142.390
# # 4 12.000 4.200 3.360 10.920 878.410 165.630
#
import seaborn as sns
df=sns.load_dataset("car_crashes")
df.head()
df.columns
og_list = ["abbrev", "no_previous"]
new_cols = [col for col in df.columns if col not in og_list]
df = df[new_cols]
df
##################################################
# Pandas Alıştırmalar
##################################################
import numpy as np
import seaborn as sns
import pandas as pd
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 5000)
#########################################
# Görev 1: Seaborn kütüphanesi içerisinden Titanic veri setini tanımlayınız.
#########################################
import numpy as np
#kütüphane kullanılmadığı için sönük renkli
#örneğin np.array() eklersek kütüphane çalışır duruma gelir.
import pandas as pd
import seaborn as sns
df = sns.load_dataset("titanic")
df.head()
#veri otomatik olarak kütüphane içerisinde yok ve csv dosyası olarak eklemek istersek;
data = pd.read_csv("titanic.csv")
df = data.copy()
df.head()
#########################################
# Görev 2: Yukarıda tanımlanan Titanic veri setindeki kadın ve erkek yolcuların sayısını bulunuz.
#########################################
df["sex"].value_counts()
#########################################
# Görev 3: Her bir sutuna ait unique değerlerin sayısını bulunuz.
#########################################
#Veri kümesinde veya bir sütunda oluşan benzersiz değerlerin sayısını saymak için .nunique() kullanırız.
df.nunique()
#########################################
# Görev 4: pclass değişkeninin unique değerleri bulunuz.
#########################################
#Ayrıca bir sütun için benzersiz kayıtları .nunique() ile sayabiliriz. Tek yapmamız gereken sütun adını eklemek.
df["pclass"].unique()
#df["sex"].unique()
#df["sex"].nunique()
#########################################
# Görev 5: pclass ve parch değişkenlerinin unique değerlerinin sayısını bulunuz.
#########################################
#Birden fazla sütun için unique sayısını görmek istiyorsak, bir tane daha köşeli parantez eklememiz gerekir.
df[["pclass", "parch"]].nunique()
#########################################
# Görev 6: embarked değişkeninin tipini kontrol ediniz. Tipini category olarak değiştiriniz. Tekrar tipini kontrol ediniz.
#########################################
#Titanic veri setindeki kolonların veri tiplerini kontrol ettik. Embarked değişkenin tipinin bir nesne olduğunu gördük.
df["embarked"].dtype
df["embarked"] = df["embarked"].astype("category")
df["embarked"].dtype
df.info()
#CategoricalDtype(categories=['C', 'Q', 'S'], ordered=False)
#########################################
# Görev 7: embarked değeri C olanların tüm bilgelerini gösteriniz.
#########################################
df[df["embarked"] == "C"].head(10)
#########################################
# Görev 8: embarked değeri S olmayanların tüm bilgelerini gösteriniz.
#########################################
df[df["embarked"] != "S"]["embarked"].unique()
df[~(df["embarked"] == "S")]["embarked"].unique()
df[df["embarked"] != "S"]["embarked"].head()
#########################################
# Görev 9: Yaşı 30 dan küçük ve kadın olan yolcuların tüm bilgilerini gösteriniz.
#########################################
df[(df["age"] < 30) & (df["sex"] == "female")].head()
df.loc[(df["age"] < 30) & (df["sex"] == "female")].head()
#########################################
# Görev 10: Fare'i 500'den büyük veya yaşı 70 den büyük yolcuların bilgilerini gösteriniz.
#########################################
new_df = df.loc[(df["fare"] > 500) | (df["age"] > 70)]
new_df
#########################################
# Görev 11: Her bir değişkendeki boş değerlerin toplamını bulunuz.
#########################################
#Veri bilimindeki en yaygın sorunlardan biri eksik değerlerdir.
# Bunları tespit etmek için .isnull() adında güzel bir yöntem var.
# Bu yöntemle bir boolean serisi (True veya False) elde edebiliriz.
df.isnull().sum()
#########################################
# Görev 12: who değişkenini dataframe'den düşürün.
#########################################
df.drop("who", axis=1, inplace=True).head()
df.drop(columns="who", inplace=True).head()
#########################################
# Görev 13: deck değişkenindeki boş değerleri deck değişkenin en çok tekrar eden değeri (mode) ile doldurunuz.
#########################################
type(df["deck"].mode())
df["deck"].mode()[0]
df["deck"].fillna(df["deck"].mode()[0], inplace=True)
df["deck"].isnull().sum()
#########################################
# Görev 14: age değişkenindeki boş değerleri age değişkenin medyanı ile doldurun.
#########################################
df["age"].median()
df["age"].fillna(df["age"].median(), inplace=True)
df.isnull().sum()
#########################################
# Görev 15: survived değişkeninin Pclass ve Cinsiyet değişkenleri kırılımınında sum, count, mean değerlerini bulunuz.
#########################################
df.groupby(["pclass", "sex"]).agg({"survived": ["sum", "count", "mean"]})
#########################################
# Görev 16: 30 yaşın altında olanlar 1, 30'a eşit ve üstünde olanlara 0 vericek bir fonksiyon yazınız.
# Yazdığınız fonksiyonu kullanarak titanik veri setinde age_flag adında bir değişken oluşturunuz oluşturunuz. (apply ve lambda yapılarını kullanınız)
#########################################
def age_func(age):
if age < 30:
return 1
else:
return 0
df["age_flag"] = df["age"].apply(lambda x: age_func(x))
#istenilen yol
df["age_flag"] = df["age"].apply(lambda x: 1 if x < 30 else 0)
df.head()
#aply ve lambda fonk kullanılmadan da cözüm yapılır.
df['age_flag'] = df["age"].apply(age_func)
#########################################
# Görev 17: Seaborn kütüphanesi içerisinden Tips veri setini tanımlayınız.
#########################################
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset("tips")
df.head()
df.describe()
df.shape
#########################################
# Görev 18: Time değişkeninin kategorilerine (Dinner, Lunch) göre total_bill değerlerinin toplamını, min, max ve ortalamasını bulunuz.
#########################################
df.groupby("time").agg({"total_bill": ["sum", "min", "max", "mean"]})
#########################################
# Görev 19: Günlere ve time göre total_bill değerlerinin toplamını, min, max ve ortalamasını bulunuz.
#########################################
df.groupby(["day", "time"]).agg({"total_bill": ["sum", "min", "max", "mean"]})
#########################################
# Görev 20:Lunch zamanına ve kadın müşterilere ait total_bill ve tip değerlerinin day'e göre toplamını, min, max ve ortalamasını bulunuz.
#########################################
df[(df["time"] == "Lunch") & (df["sex"] == "Female")].groupby("day").agg(
{"total_bill": ["sum", "min", "max", "mean"], "tip": ["sum", "min", "max", "mean"]})
#########################################
# Görev 21: size'i 3'ten küçük, total_bill'i 10'dan büyük olan siparişlerin ortalaması nedir?
#########################################
df.loc[(df["size"] < 3) & (df["total_bill"] > 10), "total_bill"].mean()
#########################################
# Görev 22: total_bill_tip_sum adında yeni bir değişken oluşturun. Her bir müşterinin ödediği totalbill ve tip in toplamını versin.
#########################################
df["total_bill_tip_sum"] = df["total_bill"] + df["tip"]
df.head()
#########################################
# Görev 23: total_bill_tip_sum değişkenine göre büyükten küçüğe sıralayınız ve ilk 30 kişiyi yeni bir dataframe'e atayınız.
#########################################
new_df = df.sort_values("total_bill_tip_sum", ascending=False)[:30]
new_df.head()
new_df.shape