Links

H覺zl覺 Notlar 2 | Pandas

Dosyadan Verileri Okuma

Detaylar i癟in Pandas d繹k羹man覺na bakabilirsin.
Uzant覺
A癟覺klama
A癟覺l覺m覺
csv
, ile ayr覺lan notlar
Comma delimeted
tsv
\t ile ay覺rma
Tab delimeted
import pandas as pd
# Basit olarak csv okuma
pd.read_csv(<path_to_csv>)
# Sat覺r覺 atlayarak csv okuma
pd.read_csv(<path_to_csv>, skiprows=[1])
# Balang覺癟 indeksi belirleme
pd.read_csv(<path_to_csv>, index_col=0)
# Bal覺ks覺z verileri okuma
pd.read_csv(<path_to_csv>, names=<list>, header=None)
# Tab ile ayr覺lan verileri okuma
pd.read_csv(<path_to_tsv>, delimiter='\t')
Csv okuma y繹ntemleri ```py csv = [','.join(map(lambda x: str(x), row)) for row in np.vstack([df.columns, df])] with open('./data/read_csv_example.csv', 'w') as f: [f.write(line + '\n') for line in csv] !cat ./data/read_csv_example.csv ``` ![](../res/ex_ilkel_csv.png) ```py pd.read_csv('./data/read_csv_example.csv') ``` ![](../res/ex_pandas_read.png)

Verileri Filtreleme

Operat繹r
A癟覺klama
~
not
&
and
`
`
or
str.contains(<str>)
String'e g繹re filtreleme
df = pd.DataFrame()
# Verinin en tepesini g繹sterme
df.head()
# Koulun saland覺覺 verileri alma
df = df[df['state'] == 'AZ']
# Esiz verileri alma
df['state'].unique()
# Birden fazla koula g繹re alma
# `()` kullan覺mla覺d覺r yoksa `&` ilemi beklendii gibi 癟al覺maz
df[(df['state'] == 'AZ') & (df['review_count'] > 10)].head()
# Koulun sonucuna g繹re `True - False` dizisi d繹nd羹r羹r
(yelp_df['state'] == 'AZ').head()
(yelp_df['state'] == 'AZ').dtype # dtype('bool')
# El ile se癟me (1. indexteki eleman覺 almaz)
df[[True, False, True]]
# Bool deeri alan s羹tuna g繹re listeleme (open = {True | False})
df[df['open']].head() # A癟覺k olanlar覺 listeler
df[~df['open']].head() # Kapal覺 olanlar覺 listeler `~ = !`
df[df['open'].fillna(False)].head() # Nan deerlerini false sayarak listeleme
# Strig'e g繹re filtreleme (`vegas` i癟eren ehirleri alma)
df = df[df['city'].str.contains('Vegas')]
# Birden fazla deerde arama (regex aramas覺d覺r. | veya demek)
df = df[df['city'].str.contains('|'.join(opioids), case=False)
# Listedeki elemanlar覺 i癟eriyor mu? (b羹y羹k-k羹癟羹k harften ba覺ms覺z arama)
df[df['column'].str.lower().isin([x.lower() for x in mylist])]

Fonksiyonlar ve Birletirme 襤lemleri

# Log hesaplamas覺 (her veri i癟in log al覺r)
log_review_count = np.log(df['review_count'])
# Ortalama hesaplama (tek deer d繹nd羹r羹r)
mean_review_count = yelp_df['review_count'].mean()
# DB'ye fonksiyon uygulama (parametre olarak `df['attributes']` almak zorundad覺r)
# True - False serisi d繹nd羹r羹r
delivery_attr = df['attributes'].apply(<func_attr_dict>)

GroupBy Kullan覺m覺

Belirli bir 繹eye g繹re gruplar, 癟ak覺anlara verilen ilemi uygular.
  • rn: max(), mean() gibi metodlarda en y羹ksek veya ortalama al覺n覺r
Group By: split-apply-combine d繹k羹man覺na bakmanda fayda var.
# ehre g繹re birletirme ve y覺ld覺zlar覺n ortalamas覺n覺 alma
stars_by_city = yelp_df.groupby('city')['stars'].mean()
# ehre g繹re gruplay覺p, 癟ak覺an verilerde birden fazla metod kullanma
# S覺rayla: Stars s羹tunu alt覺nda: ortalama, standart sapma, dier s羹tunlarda toplam, miktar
agg_by_city = yelp_df.groupby('city').agg({'stars': {'mean': 'mean', 'std': 'std'}, 'review_count': 'sum', 'business_id': 'count'})
# Birletirilmi s羹tunlar覺 ay覺rma
new_columns = map(lambda x: '_'.join(x),
zip(agg_by_city.columns.get_level_values(0),
agg_by_city.columns.get_level_values(1)))
agg_by_city.columns = new_columns
agg_by_city.head()
# Gruplanm覺 verileri index dict'ine 癟evirme
dict_city = by_city.groups
# Gruplanm覺 verilerden bir tanesini alma
by_city.get_group('Anthem').head()

S覺ralama 襤lemleri

# Y覺ld覺zlara g繹re veriyi s覺ralama
df.sort_values('stars').head()
# Bussiness_id'nin indexine g繹re s覺ralama
df.set_index('business_id').sort_index().head()
# Post_code g繹re s覺ralay覺p, ilk post_code'u alma
unique_practices = practices.sort_values('post_code').groupby('code').first().reset_index()

Veri K羹melerinin Birletirilmesi

# ehir ve b繹lge olarak verileir ay覺rma
census['city'] = census['GEO.display-label'].apply(lambda x: x.split(', ')[0])
census['state'] = census['GEO.display-label'].apply(lambda x: x.split(', ')[2])
# B繹lge isiimlerini deitirme
state_abbr = dict(zip(census['state'].unique(), <list>))
census['state'] = census['state'].replace(state_abbr)
# ('town', 'village' gibi terimlerin olduu son kelimeyi kald覺rma)
census['city'] = census['city'].apply(lambda x: ' '.join(x.split(' ')[:-1]))
# State ve city verilerine g繹re birletirme (inner-join)
merged_df = yelp_df.merge(census, on=['state', 'city'])
merged_df = yelp_df.merge(census, on=['state', 'city'], how='left') # Left-join
# Veri k羹melerini birletirme (ucuna eklenir)
nov = pd.concat([nov18, nov11])
nov['DATE'].unique() # Eklenmeyi kontrol etme
# ehirdeki toplam i'leri bulma
city_counts = yelp_df.groupby('city')['business_id'].count().rename('city_counts')
# Bulunan sat覺r覺 tablonun sonuna s羹tun olarak ekleme
# nce indexler ayn覺 yap覺l覺r, sonra index'e g繹re concat edilir, sonra index s覺f覺rlan覺r
pd.concat([yelp_df.set_index('city'), city_counts], axis=1, join='inner').reset_index()
Dataset ![](../res/city_dataset_ex.png)

Zaman Serileri ile al覺ma

# HTML'den veri alma
pop_growth = pd.read_html('https://web.archive.org/web/20170127165708/https://www.census.gov/population/international/data/worldpop/table_population.php', attrs={'class': 'query_table'}, parse_dates=[0])[0]
# null verilerini kald覺rma
pop_growth.dropna(inplace=True)
# 襤ndeksi y覺la g繹re ayarlarsak, `resample` metodunu kullanabiliriz
pop_growth.set_index('Year', inplace=True)
# 10 y覺ll覺k olarak indexleniyor ve 10 y覺ll覺k ortalama listenecek
# 襤stersek mean, median, sum, last ve first de kullan覺abilriiz
pop_growth.resample('10AS').mean()
# Kay覺p veriler i癟in ototmatik tamamlama yapma
# bfill() backward filling, ffill() forward filling (1Q 1. 癟eyrek demek (癟eyrek y覺l))
pop_growth.resample('1Q').bfill()
pop_growth.resample('1Q').ffill()

Pandas Zaman Deikeni (Timestamp)

print(pd.Timestamp('January 8, 2017'))
print(pd.Timestamp('01/08/17 20:13'))
print(pd.Timestamp(1.4839*10**18))
# Zamanlar aras覺nda 癟覺kartma yap覺labilir (191 days 09:16:00)
print(pd.Timestamp('Feb. 11 2016 2:30 am') - pd.Timestamp('2015-08-03 5:14 pm'))
# Zamanlar aras覺nda gelimi hesaplamalar
from pandas.tseries.offsets import BDay, Day, BMonthEnd
print(pd.Timestamp('January 9, 2017') - Day(4)) # G羹n
print(pd.Timestamp('January 9, 2017') - BDay(4)) # 襤 g羹n羹 (Business day)
print(pd.Timestamp('January 9, 2017') + BMonthEnd(4)) # Aydaki i biti g羹n羹
# Zaman aral覺klar覺 oluturma (8 g羹ner arayla zaman oluturma)
pd.date_range(start='1/8/2017', end='3/2/2017', freq='B')
# Python datetime ile uyumludur
import datetime
pd.Timestamp('May 1, 2017') - datetime.datetime(2017, 1, 8) # Timedelta('113 days 00:00:00')

Pandas ile G繹rselletirme

# 30 癟ubuklu histogram ile 癟izme
yelp_df['review_count'].apply(np.log).hist(bins=30)
# izgi grafii 癟izdirme
pop_growth['Annual Growth Rate (%)'].plot()

Karma Linkler