Python’un Benzersiz Özellikleri Nelerdir? — Bölüm 3
Python benzersiz özellikler serisinin 3. Bölümü.
For English:
İstisna (exception) , bir programın yürütülmesi sırasında ortaya çıkan bir hatadır. Bu sorun oluştuğunda Python, çözülebilecek bir istisna oluşturarak uygulamanın çökmesini (crash) önler. İstisna yönetimi (exception handling), programın yürütülmesi sırasında ortaya çıkan bu hatalara yanıt verme sürecidir. Sorun yönetimi genellikle sorunun oluştuğu andaki yürütme durumu korunarak ve özel durum işleyicisi olarak bilinen belirli bir fonksiyonu veya kod parçasını yürütmek için programın normal akışını durdurarak giderilir.
İstisna yönetimi, yerleşik programlama dili istisna bilgisi nesneleri kullanılarak ve/veya özel istisnalar oluşturularak (oluşturularak) gerçekleştirilir. Her iki uygulama da oldukça faydalıdır ve yazılımınızda gerekli herhangi bir hata kontrolünü yapmak için kullanılabilirler. Genel olarak, yerleşik (built-in) istisna bilgileri genel program yürütme sorunlarını tespit etmek için kullanılırken, istisna fırlatmadan, veri girişi ve program koşullu doğrulamaya kadar yardımcı olmak için kullanılır.
Bilgisayar programlamada üç tür hata meydana gelebilir: sözdizimi (syntax) hataları, çalışma zamanı (runtime) hataları ve mantık (logic) hataları. Sözdizimi hataları, bir program, bir programlama dilinin belirli bir ifadesine uymadığında, derleyicinin veya yorumlayıcının kaynak kodunu çalıştırmasını engellediğinde ortaya çıkar. Çalışma zamanı hataları, bir program başlatıldığında veya çalışması sırasında ortaya çıkar. Mantık hataları, yazılımın karşılanması gereken belirli gereksinimlere uymaması durumunda ortaya çıkar.
Sorun oluştuğunda Python, çökmeyi önlemek için yönetilebilecek bir istisna oluşturur. İstisnalar, bir programdaki hataları ve istisnai durumları ele almak için çeşitli şekillerde kullanılır. Şimdi Python’da istisna bilgilerinin nasıl alınacağını öğreneceğiz. Yerleşik “sys.exc_info()” yöntemi, halihazırda işlenmekte olan istisna hakkında bilgi sağlayan üç değerden (tür, değer ve geri izleme) oluşan bir demet sağlar. Bu parametreler aşağıdakileri gösterir:
- Tür (type), işlenen istisnanın türünü belirler.
- Değer (value) , istisna örneği türünü tanımlar.
- Geri izleme (traceback), çağrı yığınını (call stack) ve orijinal istisna konumu bilgilerini sarar (wraps).
exception_type, exception_value, exception_traceback = sys.exc_info()
Traceback nesnesi, kodunuzda gerçekleştirilen durum çağrılarıyla ilgili bilgileri belirli bir satırda saklar. Bu nesne dört istisna parametresini içeren bir tuple döndürür: dosya adı, satır numarası, prosedür adı ve satır kodu.
exception_type, exception_value, exception_traceback = sys.exc_info()
file_name, line_number, procedure_name, line_code = exception_traceback.extract_tb
(exception_traceback)[-1]
Özelleştirilmiş İstisnalar (Customized Exceptions)
“BaseException” sınıfı Python’daki tüm istisna sınıflarının atasıdır. İstisna asla kendi başına ortaya çıkmaz; bunun yerine, oluşturulabilecek diğer daha küçük istisna türleri tarafından miras alınması gerekir. “Exception” sınıfı, özel bir istisna sınıfı oluştururken en sık miras alınan istisna türüdür. Genel olarak hata olarak kabul edilen tüm istisna sınıfları, İstisna türünün alt sınıflarıdır.
“LookupError”, Exception sınıfının önemli bir alt sınıfıdır. Bu, sırasıyla işaretçi (indeks) ve anahtar hata bilgilerini tanımlayan “IndexError” ve “KeyError” sınıfları için temel sınıftır. Özel istisna sınıfları yerleşik Exception ve IndexError sınıflarından türetilmelidir. İstisna, sistemden çıkmayan tüm istisnaların türetildiği yerleşik bir sınıftır. Kullanıcı tanımlı tüm istisnalar bu sınıftan miras alınmalıdır. IndexError yerleşik bir sınıftır. Bu sınıf, bir dizi alt simgesi aralık dışında olduğunda istisnalar oluşturur.
İstisnaları Yönetme ve Fırlatma (Exception Handling and Raising)
İstisnalar, diğer birçok programlama dilinde olduğu gibi Python’da da try-hariç-final blokları kullanılarak işlenir.
try:
# Code that may raise an exception
num1 = int(input("Enter a number: "))
num2 = int(input("Enter another number: "))
result = num1 / num2
print("Result:", result)
except ValueError:
# Handle the case where input cannot be converted to an integer
print("Please enter valid integers.")
except ZeroDivisionError:
# Handle division by zero
print("Cannot divide by zero.")
finally:
# This block is always executed, regardless of whether an exception occurred or not
print("Finally block executed.")
# Continue with the rest of the program
print("Program continues...")
Sözdizimsel (syntax) olarak geçerli kod bir hatayla karşılaştığında Python bir istisna hatası üretir. Eğer bir istisna oluşursa, Except bloğu yürütülür. Bir istisnanın oluşup oluşmadığına bakılmaksızın “finally”(nihayet) bloğu her zaman görünür.
Gerçek dünyadaki iş uygulamaları geliştirmede, özel olarak geliştirilen tüm işlevlerde kullanılabilecek genel bir istisna işleme yöntemi yazmak faydalıdır.
def get_exception_details():
try:
# Attempt to retrieve information about the current error
error_type, error_value, error_traceback = sys.exc_info()
file_name, line_number, function_name, line_code = traceback.extract_tb(error_traceback)[-1]
# Construct a string containing details about the error
error_details = ''.join(['[Timestamp]: ', str(time.strftime('%d-%m-%Y %I:%M:%S %p')),
' [File]: ', str(file_name),
' [Function]: ', str(function_name),
' [Error Message]: ', str(error_value),
' [Error Type]: ', str(error_type),
' [Line Number]: ', str(line_number),
' [Line]: ', str(line_code)])
except:
# If an error occurs during the retrieval of error information, ignore and continue
pass
return error_details
İstisna blok mantığını yönetirken, else cümlesi, herhangi bir istisna oluşmazsa belirli bir kod bloğunun yürütülmesine izin verir.
try:
# Try to open a file
file = open("example.txt", "r")
except FileNotFoundError:
# Handle the case where the file is not found
print("File not found.")
else:
# If no exception occurred, read and print the file contents
print("File opened successfully.")
print("File contents:")
print(file.read())
# Close the file
file.close()
Bir İstisna Fırlatmak
“raise” ifadesinin iki etkisi vardır: Ya yürütmeyi eşleşen except bloğuna yönlendirir ya da hiçbir eşleşen except bloğu olmadığı için programı sonlandırır. Raise ifadesi iki şeyi başarır. Bir istisna nesnesi oluşturur ve eşleşen bir hariç cümleciği için ekteki try deyimlerini aramak üzere amaçlanan program yürütme dizisinden anında çıkar. Raise ifadesi, yazılım mühendislerinin belirli program durumları veya uygulama ihtiyaçları için özelleştirilmiş istisna mesajları oluşturmasına olanak tanır. Genel olarak bu ifade, else bloğunun içinde veya dışında kullanılabilir. Bu ifade, verileri düzenlemek ve doğrulamak için çok sayıda kullanıcı durumunda kullanılmıştır.
Kullanıcı Tanımlı (User-Defined) İstisnalar
Hepimizin bildiği gibi istisnalar Python’un yerleşik sınıf nesneleridir. Buna dayanarak kendi özel istisna nesnelerimizi onlardan miras alarak tasarlayabiliriz.
class CustomException(Exception):
def __init__(self, parameter, message):
self.parameter = parameter
self.message = message
super().__init__(self.message)
# Example usage:
def validate_age(age):
if age < 0:
raise CustomException(age, "Age cannot be negative.")
try:
user_age = int(input("Enter your age: "))
validate_age(user_age)
print("Valid age entered:", user_age)
except CustomException as e:
print("Custom Exception:", e.message)
print("Parameter:", e.parameter)
Ortak Kütüphaneler (Common Libraries)
Python kitaplıkları, hem dağıtım paketindeki varsayılan ana kitaplıkları hem de öncelikli olarak veri analitiği ve makine öğrenimi/yapay zeka projeleri için tasarlanmış veri ekosistemi kitaplıklarını içerir. Python, oluşturulan 1000'den fazla kütüphane sayesinde günümüzün en popüler programlama dillerinden biridir. Kütüphanelerin tümü açık kaynak olduğundan, kütüphane popülerliği için bir temsili istatistik görevi görebilecek katkıları, katkıda bulunanların sayılarını ve Github’dan diğer verileri dahil ettik. Son deneyimlerime göre veri bilimcileri ve veri mühendisleri için en önemli ve ilgili kütüphaneler NumPy, pandas, matplotlib, SymPy, IPython, SciPy, Seaborn, scikit-learn ve Bokkeh’tir. Bu kütüphaneler makine öğrenimi ve yapay zeka araştırmalarında yaygın olarak kullanılmaktadır.
Günümüzde yazılım mühendisleri ve veri bilimcileri Python projelerinin hızlandırılmasına öncelik vermelidir. Python kodunu hızlandırmak için en sık kullanılan kütüphaneler Cython, PyPy ve Numba’dır. Python’un veri görselleştirme kütüphaneleri Matplotlib, Seaborn ve Bokeh’i içerir. Veri görselleştirme, her istatistiksel analiz veya makine öğrenimi çabasında kritik bir aşamadır. Veritabanı motorlarına Python ile erişmek, günümüzde veritabanı iş uygulamaları tasarlamak ve geliştirmek için kritik bir önkoşuldur. SQLAlchemy SQL araç seti bu senaryolar için en yaygın veritabanı kitaplığıdır.
Standart Python Kitaplığı
Python standart kütüphanesi, programlarınıza yüklenebilecek yeniden kullanılabilir yerleşik modül dosyalarından oluşur. Ana Python dağıtım paketine dahil edilirler. Python 200'den fazla standart kütüphane sunmaktadır. Bu kütüphaneler C dilinde yazılmıştır. Bu standart kütüphanenin yanı sıra, büyük bir uluslararası insan ve şirket topluluğu da sürekli olarak özel Python kütüphaneleri üretmektedir. Python Veri Ekosistemi 1000'den fazla gelişmiş kütüphane içerir.
Bugün Python’da kullanılan en belirgin veri ekosistemi kütüphaneleri şunlardır:
- NumPy, (numeric python) Sayısal Python’ın kısaltılmışıdır. Bilimsel hesaplama için temel bir pakettir. Bu şu anda Python programlama dilindeki en önemli kütüphane olabilir.
- Pandas, yüksek performanslı, kullanıcı dostu veri yapıları ve analiz araçları sunan açık kaynaklı bir çerçevedir.
- Matplotlib, çeşitli platformlarda çeşitli basılı ve etkileşimli formatlarda yayın kalitesinde rakamlar üreten bir Python 2D çizim paketidir.
- SymPy sembolik matematik için tasarlanmış bir kütüphanedir. Anlaşılabilir ve uyarlanabilir olması için kodu olabildiğince basit tutarken tam özellikli bir bilgisayar cebir sistemi (CAS) olmayı amaçlamaktadır. SymPy tamamen Python’da geliştirildi.
- IPython, sağlam bir etkileşimli kabuk, bir Jupyter çekirdeği ve etkileşimli veri görselleştirme ve GUI araç takımları desteğini içeren kapsamlı bir etkileşimli bilgi işlem mimarisidir. Aynı zamanda kendi projelerinizde kullanabileceğiniz çok yönlü, yerleştirilebilir yorumlayıcıların yanı sıra basit, yüksek performanslı paralel hesaplama araçlarını da içerir.
- SciPy matematik, bilim ve mühendislik alanlarında açık kaynaklı yazılımlar için Python tabanlı bir ortamdır. Çekirdek paketlerden bazıları NumPy, SciPy kütüphanesi, matplotlib, IPython, SymPy ve pandas’tır.
- Seaborn, matplotlib üzerine kurulu bir Python veri görselleştirme paketidir. Görsel olarak çekici ve kullanışlı istatistiksel grafikler oluşturmak için üst düzey bir arayüz sağlar.
- Scikit-learn birincil makine öğrenimi çerçevesidir. Veri madenciliği ve analizi için basit ve etkili bir araçtır. Bu çerçeve NumPy, SciPy ve Matplotlib paketlerine dayanmaktadır.
- Bokkeh, mevcut web tarayıcıları için etkileşimli bir görselleştirme kütüphanesidir. Amacı, uyarlanabilir görsellerin çekici ve özlü bir şekilde geliştirilmesini sağlamak ve aynı zamanda bu kapasiteyi çok büyük veya akış halindeki bilgiler üzerinde yüksek performanslı etkileşimle genişletmektir.
Bilimsel Hesaplamalar(Scientific Calculations)
Günümüzde araştırma girişimleri ve iş uygulamaları geliştirme için bilimsel hesaplamalara her zaman ihtiyaç duyulmaktadır. Python, geniş bir uluslararası kullanıcı tabanına sahip olması, geliştirilmesi ve bulunmasının basit olması ve zengin bir bilimsel ve teknik kaynak ekosistemi sunması nedeniyle bilimsel hesaplamalar için harika bir seçimdir. Python aynı zamanda yüksek düzeyde optimize edilmiş C kodu, olağanüstü yazılım, paralel işleme için donanım desteği ve Python’un Python Yazılım Vakfı kapsamında lisanslanan açık kaynaklı bir yazılım olması nedeniyle mükemmel performansıyla da bilinir.
NumPy
Python’daki neredeyse tüm sayısal işlemler NumPy paketi kullanılarak gerçekleştirilir. NumPy, Python Veri Ekosistemi paketindeki en önemli kütüphane olarak düşünülebilir. Python’da yüksek performanslı vektör, matris ve daha yüksek boyutlu veri yapıları sunar. C ve FORTRAN’da geliştirilmiştir, bu da vektörler ve matrisler kullanılarak matematik işlemleri yapıldığında performansın mükemmel olduğu anlamına gelir.
import numpy as np
# Alice's scores
alice_scores = np.array([85, 90, 75, 88, 92])
# Bob's scores
bob_scores = np.array([78, 85, 80, 82, 90])
# Calculate the correlation coefficient between Alice's and Bob's scores
np_corrcoef = np.corrcoef(alice_scores, bob_scores)
print("Correlation Coefficient between Alice's and Bob's scores:")
print(np_corrcoef)
# Calculate the mean score for Alice
np_mean_alice = np.mean(alice_scores)
print("Mean score for Alice:", np_mean_alice)
# Calculate the mean score for Bob
np_mean_bob = np.mean(bob_scores)
print("Mean score for Bob:", np_mean_bob)
# Calculate the average score for Alice (same as mean in this context)
np_average_alice = np.average(alice_scores)
print("Average score for Alice:", np_average_alice)
# Calculate the standard deviation of scores for Alice
np_std_alice = np.std(alice_scores)
print("Standard Deviation of scores for Alice:", np_std_alice)
# Calculate the median score for Alice
np_median_alice = np.median(alice_scores)
print("Median score for Alice:", np_median_alice)
# Calculate the variance of scores for Alice
np_variance_alice = np.var(alice_scores)
print("Variance of scores for Alice:", np_variance_alice)
# Find the highest score Alice achieved
np_max_alice = np.max(alice_scores)
print("Highest score for Alice:", np_max_alice)
# Find the lowest score Alice achieved
np_min_alice = np.min(alice_scores)
print("Lowest score for Alice:", np_min_alice)
# Calculate the sum of scores for Alice
np_sum_alice = np.sum(alice_scores)
print("Sum of scores for Alice:", np_sum_alice)
Yapısal düzeyde bir dizi yalnızca bir işaretçiler topluluğudur. Bir hafıza adresi, veri tipi, şekil ve adımlardan oluşur. Bir dizinin bu yönleri aşağıdaki özelliklere sahiptir:
- Veri işaretçisi dizideki ilk baytın bellek adresini temsil eder.
- Tür işaretçisi olarak da bilinen veri türü, diziyi oluşturan bileşenlerin türünü açıklar.
- Şekil dizinin şeklini gösterir.
- Adımlar, bir sonraki öğeye geçmeden önce bellekte atlanması gereken bayt sayısıdır. Adımlarınız (100,1) ise, bir bayt sonraki sütuna ve 100 bayt sonraki satıra gitmeniz gerekir.
Python kitaplıklarını kurmanın iki yöntemi vardır:
- PyPI (pip) kullanarak bir “kitaplık_adı” yüklemek için, “pip kurulum kitaplık_adı” veya “python -m pip kurulum — yükseltme kitaplık_adı” kullanın.
- Bir kütüphane kurmak için Anaconda Dağıtım paketindeki “conda” komutunu kullanın ve komut istemine “conda install kütüphane_adı” yazın.
Pandas
Pandas paketi Python’daki birincil veri yapısı ve işleme aracıdır. NumPy kütüphanesinin üzerine geliştirilmiştir, bu da birçok NumPy yapısının pandas kütüphanesinde kullanıldığı veya çoğaltıldığı anlamına gelir. Bu, veri analizine ve görselleştirmeye uygulanabilir. Pandas kitaplığı, heterojen veri türleri, eksik verilerin kolay ve hızlı işlenmesi, oluşturulması kolay genel kod, etiketli veriler ve ilişkisel veriler dahil olmak üzere çeşitli veri türlerini destekler. Bu paket, veri yükleme, ön işleme (temizleme) ve profil oluşturma için makine öğrenimi uygulamalarında yaygın olarak kullanılır.
Pandas Serileri (Series)
Bu, int, string, float ve Python nesneleri vb. dahil olmak üzere her türlü veri türünü içerebilen tek boyutlu etiketli bir dizidir. Eksen etiketleri topluca indeks olarak bilinir. Aşağıdaki sözdizimi kullanılarak bir seri oluşturulabilir; “veri” bir Python sözlüğü, ndarray (n-boyutlu dizi veya herhangi bir skaler değer) vb. olabilir.
serie = pd.Series(np.random.randn(5))
DataFrames, aynı veya farklı veri türlerini içeren satır ve sütunlara sahip iki boyutlu etiketli veri yapılarıdır. Microsoft Excel elektronik tablolarına ve SQL veritabanı tablo nesnelerine benzer. Bu bileşenin ilk sütunu indeks değerlerine ayrılmıştır. Bu değerler tanımlanmazsa pands sıfırla başlayan tamsayılar oluşturur. Bu bileşen şu anda veri manipülasyonu için makine öğrenimi uygulamalarında en kullanışlı olanıdır. Aşağıdaki kod, bir pandas DataFrame nesnesinin nasıl oluşturulacağını açıklar.
# Example data
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']}
# Creating a Pandas DataFrame from the dictionary
df_data = pd.DataFrame(data)
DataFrame, 1D veya 2D NumPy dizileri, listeler, sözlükler, tuple’lar, yapılandırılmış veya kayıt dizileri, seriler ve diğer DataFrame nesneleri dahil olmak üzere çok çeşitli giriş veri türlerini kabul edebilir.
Pandas nesnelerindeki eksen etiketleme bilgilerinin, profil oluşturma, görselleştirme ve analiz için tanımlanmış göstergeleri kullanarak veri tanımlama, otomatik ve açık veri hizalama ve veri kümesi alt kümelerini elde edip ayarlayarak hızlı veri alımı dahil olmak üzere çeşitli işlevlere hizmet ettiğini not etmek önemlidir. Veri analitiğine yönelik bilimsel hesaplamalarda en yaygın görevlerden biri, virgülle ayrılmış değer (CSV) dosyasındaki verileri okumaktır. Bu dosya, düz metin verilerini virgüllerle ayrı değerlere ayırır.
df = pd.read_csv(filepath_or_buffer="input_with_nan.csv")
Pandas float bir değere sahip boş değerleri not a number (NaN) olarak ele aldığını belirtmekte fayda var. Bu değer ne boş, ne de sıfırdır. Pandas kütüphanesi, veri işleme sırasında bu değerlerin doğru şekilde işlenmesi için bir dizi yöntem içerir. Bu değerler herhangi bir bilgisayar hesaplamasında kullanılmayacaktır.
Pandas Örneği:
import pandas as pd
import numpy as np
from datetime import datetime
# Create a sample DataFrame
data = {'Column1': [1, 2, np.nan, 4],
'Column2': [np.nan, 6, np.nan, 8],
'Column3': [10, np.nan, 30, 40],
'Column4': ['', 'club', np.nan, ''],
'Column5': [True, np.nan, False, np.nan],
'Column6': ['', '', np.nan, ''],
'Column7': [100, np.nan, 300, np.nan],
'Column8': ['£100', '£200', '£300', '£400']}
df = pd.DataFrame(data)
# Drop duplicated rows and keep the first
df = df.drop_duplicates()
# Replace empty values with the mean value in columns 1 and 2
df['Column1'].fillna(df['Column1'].mean(), inplace=True)
df['Column2'].fillna(df['Column2'].mean(), inplace=True)
# Replace empty values with the median value in column 3
df['Column3'].fillna(df['Column3'].median(), inplace=True)
# Replace empty values with the “club” string in column 4
df['Column4'].fillna('club', inplace=True)
# Replace empty values with the true boolean in column 5
df['Column5'].fillna(True, inplace=True)
# Replace empty values with the current date in column 6
df['Column6'].fillna(datetime.today().strftime('%Y-%m-%d'), inplace=True)
# Replace empty values with the £0.0 in column 7
df['Column7'].fillna(0.0, inplace=True)
# Remove the first character (English pound symbol) in column 8
df['Column8'] = df['Column8'].str[1:]
# Substitute the abbreviation in column 8
df['Column8'] = df['Column8'].replace({'100': 'Hundred', '200': 'Two Hundred', '300': 'Three Hundred', '400': 'Four Hundred'})
# Define x column labels
x_column_labels = ['Column1', 'Column2', 'Column3', 'Column4', 'Column5', 'Column6', 'Column7', 'Column8']
# Define y column target
y_column_target = 'Column8'
# Save the final file as “output_data.csv”. File location path must be defined.
output_file_path = "output_data.csv"
df.to_csv(output_file_path, index=False)
# Display the final DataFrame
print("Final DataFrame after operations:")
print(df)
SciPy
SciPy popüler bir Python bilimsel algoritma kütüphanesidir. Tek boyutlu ve çok boyutlu diziler için düşük seviyeli NumPy kütüphanesini genişletir. Bu kütüphane Python’da çok sayıda üst düzey bilimsel algoritmayı içerir.
Başlıca alt kütüphanelerden bazıları şunlardır:
- özel fonksiyonlar (special functions)
- entegrasyon (integration)
- optimizasyon (optimization)
- interpolasyon (interpolation)
- Fourier dönüşümleri (fourier transformations)
- sinyal işleme (signal processing)
- lineer Cebir (linear algebra)
- seyrek özdeğer problemleri (sparse eigenvalue problems)
- İstatistik (statistics)
- çok boyutlu görüntü işleme (multi-dimensional image processing)
- dosya GÇ (file IO)
Scipy Örneği:
import numpy as np
from scipy import optimize, interpolate, integrate, stats, linalg, special
# Optimization: find the minimum of a function
def func(x):
return x**2 + 10*np.sin(x)
min_result = optimize.minimize(func, x0=0)
print("Optimization result:")
print(min_result)
# Interpolation: interpolate data points using linear and cubic functions
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])
# Linear interpolation
f_linear = interpolate.interp1d(x, y)
x_linear = np.linspace(0, 4, 10)
y_linear = f_linear(x_linear)
# Cubic interpolation
f_cubic = interpolate.interp1d(x, y, kind='cubic')
y_cubic = f_cubic(x_linear)
print("\nInterpolated data (linear and cubic):")
print("Linear:", list(zip(x_linear, y_linear)))
print("Cubic:", list(zip(x_linear, y_cubic)))
# Integration: compute definite integral of a function
result_integral = integrate.quad(lambda x: np.sin(x), 0, np.pi)
print("\nDefinite integral result:")
print(result_integral)
# Statistics: compute mean, median, mode, and standard deviation
data = np.random.normal(loc=0, scale=1, size=100)
mean = np.mean(data)
median = np.median(data)
mode = stats.mode(data)
std_dev = np.std(data)
print("\nStatistics results:")
print("Mean:", mean)
print("Median:", median)
print("Mode:", mode)
print("Standard Deviation:", std_dev)
# Linear algebra: solve a system of linear equations
A = np.array([[2, 1], [1, 1]])
b = np.array([1, 1])
x_solution = linalg.solve(A, b)
print("\nSolution to the system of linear equations:")
print(x_solution)
# Bessel functions: evaluate the first and second Bessel functions
x_values = np.linspace(0, 10, 100)
bessel_first = special.jn(1, x_values)
bessel_second = special.jn(2, x_values)
print("\nValues of the first and second Bessel functions:")
print("First Bessel:", bessel_first)
print("Second Bessel:", bessel_second)