Sunteți pe pagina 1din 31

PYTHON

PYTHON 2
ACCESARE DATE DIN FISIERE (I)
Fișiere: .txt, .csv, xlsx, .json
f = open("C:/Data1.txt")
Fișiere text print(f.read())
Funcția open() returnează un obiect de tip fișier.
Metoda read() citește conținutul fișierului.

Funcția open()care doi parametri: numele fișierului sau calea și modul în care poate fi accesat:
"r" - Read - implicit. Deschide fișierul pentru citire, apare eroare dacă fișierul nu există.
"a" - Append - Deschide fișierul pentru adăugare, creează fișierul dacă nu există.
"w" - Write - Deschide fișierul pentru scriere, creează fișierul dacă nu există.
"x" - Create - creează fișierul, apare eroare dacă fișierul există.
Suplimentar, se pot specifica:
"t" - Text - Implicit. Modul text
"b" - Binary - Modul binar (de ex. imagine)

•Metoda readline()citește o singură linie


•Poate fi specificat numărul de caractere afișate: read(100)
ACCESARE DATE DIN FISIERE (II)
Fișiere comma separated values

import csv
with open('clienti_leasing.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print (row)

import pandas as pd
df = pd.read_csv('clienti_leasing.csv')
print(df)
ACCESARE DATE DIN FISIERE (III)
Fișiere .xlsx

from xlrd import open_workbook


book =
open_workbook('simple.xlsx',on_demand=True) import pandas as pd
for name in book.sheet_names(): df = pd.read_excel(io="simple.xlsx",
sheet = book.sheet_by_name(name) sheet_name="Sheet_names")
for cell in sheet.col(0): print(df.head(5))
print (cell.value)

from openpyxl import load_workbook


wb = load_workbook('simple.xlsx')
print (wb.get_sheet_names())

worksheet1 = wb['Sheet_names'] # one way to load a worksheet


#worksheet2 = wb.get_sheet_by_name('Sheet_names') # another way to load a worksheet
print(worksheet1['A4'].value)
worksheet1['A4'] = 'Corina'
print(worksheet1['A4'].value)
for row in worksheet1.iter_rows():
print(row[1].value)
ACCESARE DATE DIN FISIERE (IV)
Fișiere .json
import json
from pprint import pprint
with open ('clienti_daune.json') as f:
data=json.load(f)
pprint(data)

import json
from pprint import pprint
json_data=open('clienti_daune.json').read()
data = json.loads(json_data)
pprint(data)

import json
import pandas as pd
with open("clienti_daune.json") as f:
data = json.load(f)
dataframe = pd.DataFrame(data)
print(dataframe)
NUMPY
• NumPy prescurtarea pentru Numerical Python sau calcule numerice Python.
• NumPy contine:
- Tipul de obiect multidimensional ndarray (n-dimensional array)
- Functii pentru calcule cu vectori sau operatii matematice cu vectori
- Instrumente pentru citirea si scrierea seturilor de date bazate pe vectori
- operatii din algebra liniara, transformata Fourier si generare de numere
aleatoare
- API pentru C sau C++
MATPLOTLIB & SCIPY
• Matplotlib este cea mai populara biblioteca Python pentru realizarea reprezentarilor grafice
• SciPy reprezinta o colectie de pachete pentru rezolvarea unor probleme standard din diferite
domenii
- scipy.integrate: Ofera rutine pentru integrare numerica si calculul ecuatiilor
diferentiale;
- scipy.linalg: Rutine din algebra relationala, prelucrarea avansata matricelor, fiind
superior pachetului numpy.linalg;
- scipy.optimize. Functii de optimizare (minimizare) si algoritmi de identificare a
drumului critic;
- scipy.signal. Instrumente de procesare a semnalului;
- scipy.sparse. Calcule cu matrice si sisteme de ecuatii liniare (sparse);
- scipy.special. O biblioteca Fortran pentru implementarea celor mai populare functii
matematice, cum ar fi functia gamma;
- scipy.stats. Distributii de probabilitati, teste statistice, statistici descriptive.
SCIKIT-LEARN
• Instrumente pentru machine learning in Python, ce includ submodule pentru diverse modele:
• Clasificare: SVM, nearest neighbors, random forest, logistic regression etc.
• Regresia: Lasso, ridge regression etc.
• Clustering: k-means, spectral clustering etc.
• Reducerea dimensionalitatii (Dimensionality reduction): PCA (Principal Component Analysis),
feature selection, matrix factorization etc.
• Selectie model: GridSearch, cross-validation, metrics
• Preprocesare: Feature extraction, feature engineering, scalare, normalizare
STATSMODELS
• In comparatie cu scikit-learn, statsmodels continue algoritmi clasici din statistica si
econometrie. Include submodule, cum ar fi:
• Regresie: liniara, modele liniare generalizate , modele liniare robuste, linear mixed effects
models etc.
• ANOVA
• Analize pe serii de timp: AR, ARMA, ARIMA, VAR etc.
• Nonparametric methods: Kernel density estimation, kernel regression
• Rezultatele analizelor realizate cu statsmodels sunt axate pe indicatori statistici, p-values, in
timp ce rezultatele analizelor efectuate cu scikit-learn, se axeaza mai mult pe predictii.
PACHETUL PANDAS (I)
Contine structuri de date (Dataframe), orientate pe coloane, si instrumente pentru
manipularea datelor, proiectate pentru a realiza mai rapid si mai usor curatarea si
analiza datelor in Python;

Dataframe = container de vectori unidimensionali (Series);

Se utilizeaza deseori in tandem cu alte pachete de calcul numeric, cum ar fi NumPy


and SciPy, biblioteci analitice, cum ar fi statsmodels si scikit-learn, si instrumente
pentru vizualizarea datelor, cum ar fi matplotlib.
Pandas adaopta stilul de calcul bazat pe vectori,
in special functii pe vectori, specific NumPy,
precum si procesarea datelor in stil pythonian,
fara a utiliza structuri repetitive;

Care este cea mai mare diferenta dintre Pandas


si NumPy? Pandas lucreaza cu date tabelare,
heterogene, in timp ce NumPy este adecvat
pentru vectori de date numerice, omogene;
PACHETUL
PANDAS (II)
Pandas imbina posibilitatile specifice NumPy
de calcul la nivelul vectorilor cu manipularea
flexibila a datelor din spreadsheet-uri si baze
de date relationale, oferind functionalitati
sofisticate de indexare, care permit
rearanjarea, felierea, sectionarea, agregarea si
selectarea subseturilor de date.
Sursa: https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/#iloc-selection
ILOC
• iloc integer-location based indexing: selecteaza linii si coloane dupa index/pozitie
• Sintaxa: data.iloc[<row selection>, <column selection>]
# Selectie singulara cu iloc
# Inregistrari:
data.iloc[0] # prima inregistrare
data.iloc[1] # a doua inregistrare
data.iloc[-1] # ultima inregistrare a setului de date
# Coloane:
data.iloc[:,0] # prima coloana
data.iloc[:,1] # a doua coloana
data.iloc[:,-1] # ultima coloana a setului de date

# Selectie multipla cu iloc


data.iloc[0:5] # primele cinci inregistrari
data.iloc[:, 0:2] # primele doua coloane
data.iloc[[0,3,6,24], [0,5,6]] # inregistrarile 1, 4, 7, 25, coloanele 1, 6 si 7
data.iloc[0:5, 5:8] # primele cinci inregistrari si coloanele 5, 6 si 7).
DATAFRAME SI SERIES
import pandas as pd

#setul de date de test poate fi gasit aici https://www.briandunning.com/sample-data/


si contine date fictive
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-
500.csv’)

data.to_csv("output.csv")

print (type(data.head(5)))
print (type(data.iloc[:,1]))
LOC (I)
• loc : selecteaza linii si coloane dupa denumirea liniilor/colonelor
• Sintaxa: data.loc[<row selection>, <column selection>]
import pandas as pd
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
#fixarea indexului pe coloana first_name
data.set_index("first_name", inplace=True)
#selectarea inregistrarilor, fiind afisata doar inregistrarile corespunzatoare
print(data.loc["Antonio"])
print(data.loc[["Antonio", "Peter"]])
import pandas as pd
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
#fixarea indexului pe coloana first_name
data.set_index("first_name", inplace=True)
#selectarea coloanelor, implicit first_name este afisata
print(data.loc[["Antonio", "Peter"],['last_name', 'address', 'city']])
import pandas as pd
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
#fixarea indexului pe coloana first_name
data.set_index("last_name", inplace=True)
print(data.loc[['Andrade', 'Veness'], 'city':'email'])
print(data.loc['Andrade':'Veness', ['first_name', 'address', 'city']])
LOC (II)
import pandas as pd
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')
print(data.loc[data['first_name'] == 'Antonio'])

import pandas as pd
data = pd.read_csv('https://s3-eu-west-1.amazonaws.com/shanebucket/downloads/uk-500.csv')

print(data.loc[data['first_name'] == 'Antonio', 'city':'email'])

print(data.loc[data['email'].str.endswith("hotmail.com"), 'phone1':'email'])

print(data.loc[data['first_name'].isin(['France', 'Tyisha', 'Eric'])])

print(data.loc[data['email'].str.endswith("gmail.com") & (data['first_name'] ==


'Antonio'), 'first_name':'email'])

print(data.loc[data['company_name'].apply(lambda x: len(x.split(' ')) == 1),


'company_name'])
SELECTAREA COLOANELOR
import pandas as pd • Pot fi utilizate trei metode pentru selectarea coloanelor:
df = pd.read_csv('clienti_leasing.csv')
#variante echivalente pentru selectarea – df.nume_coloana
coloanelor
print(df.SEX)
– df['nume_coloana’]
print(df["SEX"]) – df.iloc[:, index_coloana]
print(df.iloc[:,3])
• Cand se selecteaza o coloana, rezulta un vector de date unidimensional
pandas.Series cu care se pot realiza mai multe operatii de:
print(df.DEPOSIT_AMOUNT.mean())
(.sum()), (.mean()), (.count()), (.median()), inlocuire valori nule
(.fillna(new_value)).
import pandas as pd
df = pd.read_csv('clienti_leasing.csv') • Prin selectarea mai multor coloane se defineste un nou set de date. Sintaxa
print(df[['SEX', 'DEPOSIT_AMOUNT']]) pentru selectarea multipla a coloanelor este:
#printeaza coloanele SEX, AGE si
DEPOSIT_AMOUNT – df[['nume_coloana_1', 'nume_coloana_2']]
print(df.iloc[:, [3,10,14]]) – df.iloc[:, [0,1,20,22]]
SELECTAREA INREGISTRARILOR

• Se poate realiza selectarea prin metodele iloc/loc sau


prin selectori logici (selectare bazata pe valoarea unei
import pandas as pd coloane sau variabile).
df =
• Metodele de baza pentru selectarea inregistrarilor sunt:
pd.read_csv('clienti_leasing.csv')
print(df.iloc[0:10, :]) – df.iloc[0:10, :], selecteaza primele 10 inregistrari;
print(df.loc[44, :])
print(df.loc[[2, 44], :]) – df.loc[44, :], selecteaza inregistrarea 44
print(df[df["SEX"] == "m"]) – df[df[“SEX"] == “m"], selecteaza inregistrarile care
indeplinesc conditia.
ACTUALIZAREA VALORILOR DIN SETUL DE DATE
import pandas
df = pandas.read_csv('clienti_leasing20.csv', nrows=6, usecols = ['NAME
CLIENT','VENIT_PER_YEAR'])
print(df)
df.loc[1,'VENIT_PER_YEAR'] = 1500
print(df.loc[1,'VENIT_PER_YEAR'])
print(df)

import pandas as pd
data = pd.read_csv('clienti_leasing.csv')

data.loc[data['VENIT_PER_YEAR'] > 10000, "PRESCORING"] = 7

print(data.loc[data['PRESCORING'] == 7,'NAME_CLIENT'])

data.loc[(data['VENIT_PER_YEAR'] > 10000) & (data['SEX'] == 'm'), "PRESCORING"] = 8


STERGEREA COLOANELOR (DROP)
• Stergerea inregistrarilor sau a coloanelor dintr-un set de date se realizeaza prin functia drop.
• Pentru stergerea unei coloane sau a mai multor coloane, se utilizeaza numele coloanelor
specificand axis=I sau se utilizeaza parametrul ‘columns’ (nemaifiind necesar ‘axis’).
– Stergerea coloanei "Area" din set:
df = df.drop("Area", axis=1)
– Stergerea coloanei cu parametrul ‘columns’:
df = df.drop(columns=“Area")
• Stergerea unei coloane duce la crearea unui alt set de date. Pentru a modifica setul original
(curent), se utilizeaza parametrul inplace = True, nefiind returnata nicio valoare.
df.drop("Area", axis=1, inplace=True).
• Stergerea multipla a coloanelor
data = data.drop(["Y2001", "Y2002", "Y2003"], axis=1)
STERGEREA INREGISTRARILOR (DROP)
• Inregistrarile pot fi sterse utilizand functia drop si specificand axis=0.
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df.drop([1,2], axis = 0, inplace=True)
print(df)

• Drop() poate sterge inregistrarile pe baza unor expresii. Stergerea inregistrarilor care contin “ROL“. In
cazul stergerii bazate pe expresii, se va seta mai intai coloana indexata (CURRENCY) :
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df = df.set_index("CURRENCY")
df = df.drop("ROL", axis=0)
print(df)
• Pentru a sterge inregistrarile in functie de pozitia sau indexul acestora, se utilizeaza iloc. Stergerea
primelor cinci inregistrari utilizand iloc
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df = df.iloc[5:,].drop
print(df)
REDENUMIREA COLOANELOR (RENAME)
• Redenumirea coloanelor in pandas se realizeaza in doua moduri prin intermediul functiei rename.
• Redenumirea prin maparea denumilor vechi cu denumirile noi, astfel {“denumire_veche”:
“denumire_noua”, …}
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df.rename(columns={"ID_CLIENT": "COD"}, inplace=True)
print(df)

import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df.rename(columns={"ID_CLIENT": "COD","AGE": "VARSTA"}, inplace=True)
print(df)
• Redenumirea printr-o functie care sa schimbe denumirile coloanelor si care se aplica pentru fiecare
coloana.
import pandas as pd
df = pd.read_csv('clienti_leasing20.csv')
df = df.rename(columns=str.lower)
#df = df.rename(columns=lambda x: x.lower().replace(' ', '_'))
print(df)
FUNCTII SERIES
import pandas as pd
df =
pd.read_csv('clienti_leasing.csv',usecols=['NAME_CLIENT','JOB','SEX','DEPOSI
T_AMOUNT','AGE’])

print('Suma depozitelor ', df['DEPOSIT_AMOUNT'].sum(), '\nMedia


depozitelor', df['DEPOSIT_AMOUNT'].mean())

print('Valoarea mediana ', df['DEPOSIT_AMOUNT'].median())

print('Valori unice ', df['DEPOSIT_AMOUNT'].nunique())

print('Venitul maxim ', df['DEPOSIT_AMOUNT'].max())

print('Numar observatii ', df['DEPOSIT_AMOUNT'].count())


FILLNA

import pandas as pd
df =
pd.read_csv('clienti_leasing20.csv',usecols=['NAME_CLIENT','JOB','SEX','VENIT_PER_YEAR
'])
print(df['VENIT_PER_YEAR'])
print(df['VENIT_PER_YEAR'].fillna(0))

import pandas as pd
df =
pd.read_csv('clienti_leasing20.csv',usecols=['NAME_CLIENT','JOB','SEX','VENIT_PER_YEAR
'])
print(df['VENIT_PER_YEAR'])
values = df['VENIT_PER_YEAR'].mean()
print(df['VENIT_PER_YEAR'].fillna(value=values))
PRELUCRARE DATE TRADITIONAL VS. PANDAS
from pprint import pprint
import pandas as pd
df = pd.read_csv('clienti_daune.csv')
set_clienti=[]
for index, row in df.iterrows():
if row['VALOARE_DAUNA'] > 1000:
set_clienti.append(row)
pprint (set_clienti)
v_marca = input("Introduceti marca: ");
print ("Marca selectata este : ", v_marca)
total_daune=0
for row in set_clienti:
if str(row['MARCA']).find(v_marca.upper())!=-1:
total_daune=total_daune+row['VALOARE_DAUNA']
print ("Valoarea totala a daunelor pentru marca", v_marca, " este: ", total_daune)
/
print ("Valoarea totala a daunelor pentru marca", v_marca, " este: ",
df['VALOARE_DAUNA'][(df['MARCA'] == v_marca) & (df['VALOARE_DAUNA'] >1000)].sum())
EXPORTUL (SALVAREA) SETURILOR PANDAS
• Functia to_csv pentru a salva un set de date intr-un fisier .csv
• Functia to_excel pentru a salva un set de date intr-un fisier Microsoft Excel
• Salvarea prelucrarilor intr-un fisier .csv
• Eliminarea indexului implicit Pandas la nivelul inregistrarilor, se realizeaza cu optiunea index=False.
• Pentru a evita probleme de afisare a caracterelor, se poate utiliza optiunea encoding.
data.to_csv("output_filename.csv", index=False, encoding='utf8’)
• Salvarea prelucrarilor intr-un fisier Excel necesita instalarea pachetului “openpyxl” sau "xlsxwriter".
data.to_excel("output_excel_file.xlsx", sheet_name="Sheet 1", index=False)
TO_CSV
from pprint import pprint
import pandas as pd
df = pd.read_csv('clienti_daune.csv')
set_clienti=[]
for index, row in df.iterrows():
if row['VALOARE_DAUNA'] > 2000:
set_clienti.append(row['ID_CLIENT'])
pprint (set_clienti)
df = pd.DataFrame(set_clienti)
df.to_csv("output_clienti.csv")
/
df=df.loc[df['VALOARE_DAUNA']>2000,'ID_CLIENT']
print(df)
df.to_csv("output_clienti.csv")
PRELUCRARE DATE PANDAS (I)
from pprint import pprint
import pandas as pd
df = pd.read_csv('clienti_daune.csv')

pprint (df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'), 'PRET_MANOPERA'])

df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'), 'PRET_MANOPERA']=


df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'), 'PRET_MANOPERA']*1.10

pprint(df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'), 'PRET_MANOPERA'])

df.to_csv('clienti_daune_mod.csv')

from pprint import pprint


import pandas as pd
df = pd.read_csv('clienti_daune.csv’)

#crearea unei coloane PROCENT_MANOPERA


df['PROCENT_MANOPERA’] = df['PRET_MANOPERA'] / df['VALOARE_DAUNA']*100
pprint (df)

df.to_csv('clienti_daune_mod.csv')
PRELUCRARE DATE PANDAS (II)
import pandas as pd

df = pd.read_csv('clienti_leasing20.csv’)

df['coloana_noua'] = pd.Series()

df.loc[df['JOB']=='Inginer','coloana_noua']=df['VENIT_PER_YEAR']*0.1

df.loc[df['JOB']=='Profesor','coloana_noua']=df['VENIT_PER_YEAR']*0.15

df.loc[(df['JOB']!='Profesor')&(df['JOB']!='Inginer'),'coloana_noua’]=0

print(df)
RECAPITULARE
• Care este diferenta majora dintre Pandas si NumPy?
• Cum sunt stocate datele in Pandas, dar in Numpy?
• Ce rol au loc si iloc? Prin ce difera?
• Cum se realizeaza actualizarea unei valori in Pandas, dar stergerea?
• Ce functie utilizam pentru salvarea seturilor de date in fisiere csv?
• Ce rol are inplace = True?
• Cum putem trata valorile lipsa (NULL)?
• Enumerati cateva functii care pot fi utilizate pe seriile Pandas Python?
• Ce putem face cu pachetul Matplotlib?
SURSE BIBLIOGRAFICE
• https://pandas.pydata.org/pandas-docs/version/0.21/comparison_with_sql.html
• https://www.shanelynn.ie/python-pandas-read_csv-load-data-from-csv-files/
• https://www.shanelynn.ie/select-pandas-dataframe-rows-and-columns-using-iloc-loc-and-ix/
• https://pandas.pydata.org/pandas-docs/version/0.21/api.html#id2
• https://matplotlib.org/gallery/index.html
• https://www.datascience.com/blog/k-means-clustering
• Python for Data Analysis, DATA WRANGLING WITH PANDAS, NUMPY, AND IPYTHON,
Wes McKinney, 2nd edition, 2012, Ed. O’REILLY
• Data Science from Scratch, FIRST PRINCIPLES WITH PYTHON, Joel Grus, 2015, Ed.
O’REILLY
• Python Data Science Handbook, ESSENTIAL TOOLS FOR WORKING WITH DATA, Jake
VanderPlas, 2016, Ed. O’REILLY

S-ar putea să vă placă și