Documente Academic
Documente Profesional
Documente Cultură
Pandas
Seminar 1
Scop:
- Prelucrari statistice, functii de grup
- Modalitati de grupare groupby si agregare agg a datelor
- Prelucrare seturi de date cu concat si merge
- Exemplificare tipuri de jonctiuni. Jonctiuni cu mai multe seturi de date
- Reprezentari grafice matplotlib
- DataFrame.pivot_table()
- DataFrame.pivot(), DateFrame.melt(), DataFrame.transpose()
- Modalitati de selectie df.coloana, df.loc, df.iloc, query
- Prelucrare dataframe, transformari
Seturi de date:
clienti_leasing.csv
clienti_daune.csv
loadprofile.csv
https://gist.githubusercontent.com/alexdebrie/b3f40efc3dd7664df5a20f5eee85e854/raw/ee3
e6feccba2464cbbc2e185fb17961c53d2a7f5/stocks.csv
https://goo.gl/ioc2Td
http://bit.ly/2cLzoxH
df = pd.read_csv('clienti_leasing.csv')
pd.set_option("display.max_columns",30)
print(df.head)
print(df.groupby(['PRESCORING']).groups.keys())
print(len(df.groupby(['PRESCORING']).groups[6]))
print(df.groupby(['CURRENCY']).groups.keys())
print(len(df.groupby(['CURRENCY']).groups['ROL']))
Exemplu 4. Funcțiile max(), min(), mean(), first(), last() pot fi utilizate cu GroupBy
import pandas as pd
df = pd.read_csv('clienti_leasing.csv')
pd.set_option("display.max_columns",30)
df['DATA'] = pd.to_datetime(df['DATA'])
df['MONTH'] = pd.DatetimeIndex(df['DATA']).month
print('Prima inregistrare din coloana CURRENCY pe valori
distincte')
print(df.groupby('CURRENCY').first())
print('Venitul anual insumat pentru fiecare luna')
print(df.groupby(pd.DatetimeIndex(df['DATA']).month)
['VENIT_PER_YEAR'].sum())
print('Valoarea insumata a depozitului pentru ingineri pe sexe')
print(df[df['JOB'] == 'Inginer'].groupby('SEX')
['VENIT_PER_YEAR'].sum())
Exemplu 7. Aplicarea unor funcții multiple unei singure coloane din grup
import pandas as pd
df = pd.read_csv('clienti_daune.csv')
df['DATA_CERERE'] = pd.to_datetime(df['DATA_CERERE'])
print(df.groupby(['TARAPRODUCATOR',
'MARCA']).agg({'PRET_MANOPERA': [min, max, sum], 'MODEL': "count",
'DATA_CERERE': [min, 'first', 'nunique']}))
Seminar 1 Python
Pandas
Vom utiliza fișierele .csv – clienti_leasing, clienti_daune, având o coloană comună (id_client),
lista=[]
y=0
for l in df.iloc[i,1]:
if l > 500:
lista.append(l)
y=y+1
print(lista)
print('In ' + str(df.iloc[i,0]) +' sunt peste ' + str(y) + '
preturi mai mari decat 500')
print('=====================================')
grouped_df = df.groupby('MARCA')
# you get can a dataframe containing the values for a single group
# using .get_group('group_key')
print(grouped_df.get_group('AUDI'))
Exemplu 17. Full outer merge sau full outer join cu indicația _merge
import pandas as pd
pd.options.display.max_columns = 10
df = pd.read_csv('clienti_leasing.csv')
df1 = pd.read_csv('clienti_daune.csv')
result = pd.merge(df[['ID_CLIENT','NUME_CLIENT', 'PROFESIA',
'SEX','VENIT_ANUAL', 'VARSTA']],
df1[['ID_CLIENT', 'MARCA', 'PRET_MANOPERA',
'VALOARE_DAUNA']],
on='ID_CLIENT',
how='outer',
indicator=True)
print(result)
print(result.shape)
print('Structura fisier clienti_leasing.csv', df.shape)
print('Structura fisier clienti_daune.csv', df1.shape)
print(df['ID_CLIENT'].isin(df1['ID_CLIENT']).value_counts())
plt.clf()
Seminar 1 Python
Pandas
ax = plt.gca()
plt.show()
print("The average PRET_MANOPERA for each FURNIZOR. The black bars
shows how different, on average, prices are from the average in
that group")
print("This helps people understand if the average can be trusted
as a good summary of the data or variance is too high.")
Seminar 1 Python
Pandas
Sursa: https://pbpython.com/pandas-pivot-table-explained.html
vs.
Sursa: https://cmdlinetips.com/2019/06/reshaping-dataframes-with-pandas-melt-and-wide_to_long/
df = pd.read_csv('clienti_daune.csv')
print(pd.pivot_table(df, values='VALOARE_DAUNA',
index=["REGIUNEPRODUCATOR"],columns=['AN_FABRICATIE'],aggfunc=[sum
,max],margins = True))
df = pd.read_csv('clienti_leasing20.csv')
print(df_melted)
df_unmelted = df_melted.pivot(index='ID_CLIENT',
columns='Attribute').reset_index()
print(df_unmelted)
data_url = "https://goo.gl/ioc2Td"
df = pd.read_csv(data_url)
print(df.shape)
lifeExp = df.loc[:, df.columns.str.contains('^life|^c')]
print(lifeExp.shape)
print(lifeExp.head(3))
lifeExp_melt = lifeExp.melt(id_vars=["continent", "country"],
var_name="year",
value_name="lifeExp")
print("==============================================")
print(lifeExp_melt)
Referințe
https://matplotlib.org/index.html
https://www.shanelynn.ie/summarising-aggregation-and-grouping-data-in-python-pandas/
https://www.shanelynn.ie/merge-join-dataframes-python-pandas-index-1/
http://queirozf.com/entries/pandas-dataframe-groupby-examples
https://chrisalbon.com/python/data_wrangling/pandas_join_merge_dataframe/
https://cmdlinetips.com/2018/12/pivot-table-in-python-pandas/
https://pbpython.com/pandas-pivot-table-explained.html
https://kite.com/blog/python/pandas-pivot-table/
https://cmdlinetips.com/2019/06/reshaping-dataframes-with-pandas-melt-and-wide_to_long/
Exerciții
1) Să se reprezinte grafic (de tip pie) valoarea medie a daunelor pentru al doilea semestru pentru
marcile Audi si Ford pentru fiecare an de fabricatie
2) Sa se grupeze dupa tara producatoare si sa afiseze valoarea medie a pretului manoperei
3) Sa se grupeze dupa tara producatoare si sa afiseze tara producatoare si toate tagurile fiecarei marci
din tara producatoare respctiva. Sa se calculeze de cate ori apare tagul bad pentru fiecare tara
producatoare.
4) Să se creeze setul format din user_usage și supported_devices și să se reprezinte grafic (bare
verticale) traficul însumat (coloana monthly_mb) pentru fiecare brand (coloana Retail Branding).
5) Să se afișeze, utilizând fișierul phone_data.csv, durata însumata pentru fiecare lună și durata
însumată pentru un anumit tip de rețea (mobile) pentru fiecare lună.
7) Sa se reprezinte grafic sub forma de bare 3 marci din Europa care au cele mai mici daune totale.