# grafikonokhoz
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# grafikonok stÃlusának beállÃtása
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (15, 5)
Szegedi időjárási adatokat gyűjtöttünk össze a weather.csv
fálba
idojaras = pd.read_csv('weather.csv')
idojaras[:3]
pandas.read_csv(filepath_or_buffer, sep=<object object>, delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)
Tipikus beállÃtások:
sep
: oszlop elválasztó karakterencoding
: karater kódolás (tipikusan 'latin1'
vagy 'utf8'
)index_col
: Az index legyen a megjelölt oszlopparse_dates
: A megadott oszlopkat értelmezze idő adatkéntidojaras = pd.read_csv('weather.csv', sep=',', encoding='latin1',index_col='Formatted Date')
idojaras[:3]
Amikor beolvasunk egy CSV fájlt egy DataFrame
objektum jön létre, ami oszlopokból és sorokból áll. Egy oszlophoz hasonlóan férhetünk hozzá, mint egy dictionaryben egy elemhez.
idojaras.describe()
idojaras.dtypes
Egy oszlop egy Series
objektumnak felel meg.
idojaras['Temperature (C)']
type(idojaras['Temperature (C)'])
Egy DataFrame
-re érdemes úgy gondolni, mint olyan Series
-ekből álló készlet, amiknek megegyezik az indexe.
s = pd.Series([1, 3, 5, np.nan, 6, 8])
s
gravity=pd.Series([9.8,3.72,10.44 ],index=['Earth','Mars','Saturn'])
gravity
orbital_speed=pd.Series([29.78,24.007,9.68],index=['Earth','Mars','Saturn'])
orbital_speed
planet_data=pd.DataFrame({
"orbital speed": orbital_speed,
"gravity": gravity
})
planet_data
A loc
és iloc
függvényekkel tudunk sorokat lekérdezni.
planet_data.loc['Earth'] # név szerint
planet_data.iloc[1] # pozÃció szerint
Sorokat a szokásos tömb indexeléssel is tudunk lekérdezni. Például az első nap adatait idojaras[:24]
-ként kapjuk.
idojaras[:24]
idojaras.iloc[:24]
Egyszerűen .plot()
-ot rakunk a végére.
idojaras['Temperature (C)'][:7*24].plot()
idojaras['Apparent Temperature (C)'][:7*24].plot()
20000 sakjátszmát és a hozzájuk tartozó adatokat tartalmazó adatbázis.
chess = pd.read_csv('chess.csv')
Ha kiÃratunk egy DataFrame
-et csak néhány sort mutat
chess.head(3)
chess['opening_name']
chess[:3]
A két módszert kombinálhatjuk, tetszőleges sorrendben:
chess['opening_name'][:5]
chess[:5]['opening_name']
chess[['winner', 'white_id','black_id']]
A .value_counts()
metódust használhatjuk:
chess['opening_name'].value_counts()
chess_opening_count= chess['opening_name'].value_counts()
chess_opening_count[:10]
Sőt grafikont is könnyen tudunk rajzolni!
chess_opening_count[:10].plot(kind='pie')
Melyik mecccseken játszották a szicÃliai megnyitást? ('Sicilian Defense'
)
sicilian = chess[chess['opening_name'] == "Sicilian Defense"]
sicilian[:3]
Mit történik a háttérben?
chess['opening_name'] == "Sicilian Defense"
A háttérben a Numpyból ismert indexelési trükkök működnek!
Például össze éselhetünk feltételeket:
is_sicilian = chess['opening_name'] == "Sicilian Defense"
is_white_win = chess['winner'] == "white"
chess[is_sicilian & is_white_win][:5]
Minden kombinálható:
chess[is_sicilian & is_white_win][['opening_name','turns','victory_status']][:5]
chess['winner'].value_counts()
A fehér győzelmek hogyan értek véget?
is_white_win= chess[chess['winner'] == "white"]
is_white_win['victory_status'].value_counts()
Adott játék vége tÃpuson belül fehér gyÅ‘zelmek aránya?
is_white_win= chess[chess['winner'] == "white"]
white_win_victory_count=is_white_win['victory_status'].value_counts()
all_games_victory_counts=chess['victory_status'].value_counts()
white_win_victory_count / all_games_victory_counts
(white_win_victory_count / all_games_victory_counts).plot(kind='bar')
Mennyi a két játékos közötti pontszámkülönbség?
chess[:3]
chess['Difference']=chess['white_rating']-chess['black_rating']
chess[:3]
Itt valami gond van:
idojaras['Temperature (C)'].plot()
idojaras
Szedjük szét az időpontokat két oszlopba.
idojaras['Summary'].str.split(" ")
idojaras['Date'] = idojaras.index.str.split(" ").str[0]
idojaras['Hour']=idojaras.index.str.split(" ").str[1].str.split(":").str[0]
idojaras
idojaras.sort_values(by=['Date','Hour'])['Temperature (C)'].plot()
idojaras[(idojaras['Date'] > '2006-01-01') & (idojaras['Date'] <= '2006-12-31')].sort_values(by=['Date','Hour'])['Temperature (C)'].plot()
Mennyi az adott megnyitást játszók átlagpontszáma?
chess[:3]
A groupby()
függvényt használhajuk:
chess[['white_rating','black_rating','opening_name']].groupby('opening_name').mean().sort_values(by=['white_rating'])
Több aggregálás egyszerre elvégezhető:
stats=chess[['white_rating','opening_name','black_rating']].groupby('opening_name').agg(['mean', 'count']).sort_values(by=[('white_rating','mean')])
stats
stats[stats[('white_rating','count')]>10].sort_values(by=[('white_rating','mean')])
chess['moves'].str.startswith('e4')
chess['first_move']=chess['moves'].str.split(' ').str[0]
chess['first_move'
]
Győzelmek száma első lépések szerint?
chess[['first_move','winner']].groupby('first_move').agg('count').head()
Ez nem jó!
Fehér győzelmek száma
chess.groupby('first_move')['winner'].apply(lambda ser: ser.str.contains("white").sum()).nlargest(10)
chess.groupby('first_move')['winner'].apply(lambda ser: ser.str.contains("white").sum()/ser.str.contains("white").count()).nlargest(10)
idojaras
idojaras.index=idojaras.index.str[:19]
idojaras.head()
idojaras.index = pd.to_datetime(idojaras.index, format='%Y-%m-%d %H:%M:%S')
idojaras.head()
idojaras.index
Vegyük csak a 2006, 2007, 2008 évek adatait.
ido_2016_2018=idojaras[(idojaras.index > '2006-01-01') & (idojaras.index <= '2008-12-31')].sort_index()
ido_2016_2018
Resample()
¶ido_2016_2018['Temperature (C)'].resample('M').apply(np.mean).plot(kind='bar')
Három havonta vett minimum, maximum és átlag.
ido_2016_2018.resample('3M').agg(['min','max', 'mean'])['Temperature (C)']
is_foggy=ido_2016_2018['Daily Summary'].str.contains('Fog')
ido_2016_2018[is_foggy].head()
is_foggy=is_foggy.astype(float)
is_foggy.plot()
is_foggy.astype(float).resample('M').apply(np.mean).plot(kind='bar')